From 939a7aff4c89d72d05d8138e1dbfad8d205eaaf8 Mon Sep 17 00:00:00 2001 From: Martin Donnelly Date: Fri, 20 May 2016 17:10:40 +0100 Subject: [PATCH] init --- .bowerrc | 5 + .editorconfig | 32 + .gitignore | 180 + .jscsrc | 46 + .jshintrc | 37 + bower.json | 23 + config.xml | 29 + hooks/README.md | 23 + output.txt | 53 + platforms/android/.gitignore | 14 + .../2.2.1/taskArtifacts/cache.properties | 1 + .../2.2.1/taskArtifacts/cache.properties.lock | Bin 0 -> 17 bytes .../2.2.1/taskArtifacts/fileHashes.bin | Bin 0 -> 139477 bytes .../2.2.1/taskArtifacts/fileSnapshots.bin | Bin 0 -> 4090595 bytes .../2.2.1/taskArtifacts/outputFileStates.bin | Bin 0 -> 20132 bytes .../2.2.1/taskArtifacts/taskArtifacts.bin | Bin 0 -> 50699 bytes platforms/android/AndroidManifest.xml | 17 + .../android/CordovaLib/AndroidManifest.xml | 23 + platforms/android/CordovaLib/build.gradle | 61 + platforms/android/CordovaLib/cordova.gradle | 201 + .../android/CordovaLib/project.properties | 16 + .../apache/cordova/AuthenticationToken.java | 69 + .../org/apache/cordova/CallbackContext.java | 144 + .../src/org/apache/cordova/Config.java | 72 + .../org/apache/cordova/ConfigXmlParser.java | 145 + .../org/apache/cordova/CordovaActivity.java | 508 ++ .../src/org/apache/cordova/CordovaArgs.java | 113 + .../src/org/apache/cordova/CordovaBridge.java | 184 + .../cordova/CordovaClientCertRequest.java | 96 + .../apache/cordova/CordovaDialogsHelper.java | 152 + .../cordova/CordovaHttpAuthHandler.java | 51 + .../org/apache/cordova/CordovaInterface.java | 88 + .../apache/cordova/CordovaInterfaceImpl.java | 243 + .../src/org/apache/cordova/CordovaPlugin.java | 422 ++ .../apache/cordova/CordovaPreferences.java | 101 + .../apache/cordova/CordovaResourceApi.java | 471 ++ .../org/apache/cordova/CordovaWebView.java | 142 + .../apache/cordova/CordovaWebViewEngine.java | 81 + .../apache/cordova/CordovaWebViewImpl.java | 613 ++ .../src/org/apache/cordova/CoreAndroid.java | 360 ++ .../src/org/apache/cordova/ExposedJsApi.java | 31 + .../cordova/ICordovaClientCertRequest.java | 66 + .../apache/cordova/ICordovaCookieManager.java | 33 + .../cordova/ICordovaHttpAuthHandler.java | 38 + .../src/org/apache/cordova/LOG.java | 234 + .../cordova/NativeToJsMessageQueue.java | 501 ++ .../src/org/apache/cordova/PluginEntry.java | 70 + .../src/org/apache/cordova/PluginManager.java | 527 ++ .../src/org/apache/cordova/PluginResult.java | 198 + .../org/apache/cordova/ResumeCallback.java | 76 + .../src/org/apache/cordova/Whitelist.java | 170 + .../cordova/engine/SystemCookieManager.java | 66 + .../cordova/engine/SystemExposedJsApi.java | 53 + .../cordova/engine/SystemWebChromeClient.java | 293 + .../apache/cordova/engine/SystemWebView.java | 88 + .../cordova/engine/SystemWebViewClient.java | 374 ++ .../cordova/engine/SystemWebViewEngine.java | 334 + platforms/android/android.json | 70 + .../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 | 19 + platforms/android/assets/www/css/app.css | 280 + platforms/android/assets/www/css/index.css | 115 + .../android/assets/www/css/material-icons.css | 15 + platforms/android/assets/www/css/mui.css | 1912 ++++++ .../android/assets/www/css/mui.custom.css | 1912 ++++++ platforms/android/assets/www/css/mui.min.css | 1 + platforms/android/assets/www/img/logo.png | Bin 0 -> 21814 bytes platforms/android/assets/www/index.html | 91 + .../js/device/CC2650/cc2650_accelerometer.js | 169 + .../www/js/device/CC2650/cc2650_barometer.js | 106 + .../www/js/device/CC2650/cc2650_luxometer.js | 103 + platforms/android/assets/www/js/index.js | 224 + .../assets/www/js/standards/battery.js | 52 + .../android/assets/www/js/standards/button.js | 96 + .../assets/www/js/standards/capability.js | 78 + platforms/android/assets/www/js/test.js | 55 + .../assets/www/libs/bluebird/.bower.json | 44 + .../android/assets/www/libs/bluebird/API.md | 1 + .../assets/www/libs/bluebird/CONTRIBUTING.md | 9 + .../android/assets/www/libs/bluebird/LICENSE | 21 + .../assets/www/libs/bluebird/README.md | 51 + .../android/assets/www/libs/bluebird/bench | 37 + .../assets/www/libs/bluebird/bower.json | 34 + .../android/assets/www/libs/bluebird/build | 2 + .../assets/www/libs/bluebird/changelog.md | 1 + .../www/libs/bluebird/deprecated_apis.md | 1 + .../assets/www/libs/bluebird/docs/Gemfile | 8 + .../assets/www/libs/bluebird/docs/README.md | 5 + .../assets/www/libs/bluebird/docs/_config.yml | 35 + .../www/libs/bluebird/docs/_layouts/api.html | 9 + .../libs/bluebird/docs/_layouts/default.html | 136 + .../www/libs/bluebird/docs/_layouts/page.html | 14 + .../www/libs/bluebird/docs/_plugins/mdate.rb | 19 + .../www/libs/bluebird/docs/_plugins/plugin.rb | 55 + .../www/libs/bluebird/docs/css/main.css | 181 + .../www/libs/bluebird/docs/css/mono-blue.css | 80 + .../libs/bluebird/docs/docs/anti-patterns.md | 172 + .../libs/bluebird/docs/docs/api-reference.md | 95 + .../bluebird/docs/docs/api/aggregateerror.md | 49 + .../www/libs/bluebird/docs/docs/api/all.md | 31 + .../www/libs/bluebird/docs/docs/api/any.md | 31 + .../libs/bluebird/docs/docs/api/ascallback.md | 114 + .../www/libs/bluebird/docs/docs/api/bind.md | 31 + .../docs/docs/api/built-in-error-types.md | 31 + .../www/libs/bluebird/docs/docs/api/call.md | 101 + .../www/libs/bluebird/docs/docs/api/cancel.md | 33 + .../bluebird/docs/docs/api/cancellation.md | 112 + .../docs/docs/api/cancellationerror.md | 32 + .../www/libs/bluebird/docs/docs/api/catch.md | 227 + .../bluebird/docs/docs/api/catchreturn.md | 43 + .../libs/bluebird/docs/docs/api/catchthrow.md | 43 + .../bluebird/docs/docs/api/collections.md | 32 + .../www/libs/bluebird/docs/docs/api/core.md | 27 + .../docs/docs/api/deferred-migration.md | 44 + .../www/libs/bluebird/docs/docs/api/delay.md | 31 + .../libs/bluebird/docs/docs/api/disposer.md | 158 + .../www/libs/bluebird/docs/docs/api/done.md | 37 + .../www/libs/bluebird/docs/docs/api/each.md | 51 + .../docs/docs/api/environment-variables.md | 41 + .../api/error-management-configuration.md | 107 + .../www/libs/bluebird/docs/docs/api/error.md | 101 + .../www/libs/bluebird/docs/docs/api/filter.md | 34 + .../libs/bluebird/docs/docs/api/finally.md | 97 + .../libs/bluebird/docs/docs/api/generators.md | 27 + .../www/libs/bluebird/docs/docs/api/get.md | 59 + .../bluebird/docs/docs/api/iscancelled.md | 31 + .../bluebird/docs/docs/api/isfulfilled.md | 31 + .../libs/bluebird/docs/docs/api/ispending.md | 32 + .../libs/bluebird/docs/docs/api/isrejected.md | 31 + .../www/libs/bluebird/docs/docs/api/map.md | 34 + .../libs/bluebird/docs/docs/api/mapseries.md | 31 + .../bluebird/docs/docs/api/new-promise.md | 79 + .../docs/docs/api/operationalerror.md | 35 + .../docs/docs/api/progression-migration.md | 105 + .../bluebird/docs/docs/api/promise.all.md | 47 + .../bluebird/docs/docs/api/promise.any.md | 31 + .../bluebird/docs/docs/api/promise.bind.md | 177 + .../bluebird/docs/docs/api/promise.config.md | 84 + .../api/promise.coroutine.addyieldhandler.md | 122 + .../docs/docs/api/promise.coroutine.md | 76 + .../bluebird/docs/docs/api/promise.delay.md | 47 + .../bluebird/docs/docs/api/promise.each.md | 42 + .../bluebird/docs/docs/api/promise.filter.md | 74 + .../docs/docs/api/promise.fromcallback.md | 80 + .../bluebird/docs/docs/api/promise.join.md | 87 + .../docs/docs/api/promise.longstacktraces.md | 93 + .../bluebird/docs/docs/api/promise.map.md | 138 + .../docs/docs/api/promise.mapseries.md | 57 + .../bluebird/docs/docs/api/promise.method.md | 72 + .../docs/docs/api/promise.noconflict.md | 47 + .../promise.onpossiblyunhandledrejection.md | 42 + .../promise.onunhandledrejectionhandled.md | 53 + .../docs/docs/api/promise.promisify.md | 78 + .../docs/docs/api/promise.promisifyall.md | 262 + .../bluebird/docs/docs/api/promise.props.md | 108 + .../bluebird/docs/docs/api/promise.race.md | 33 + .../bluebird/docs/docs/api/promise.reduce.md | 53 + .../bluebird/docs/docs/api/promise.reject.md | 32 + .../bluebird/docs/docs/api/promise.resolve.md | 47 + .../docs/docs/api/promise.setscheduler.md | 54 + .../bluebird/docs/docs/api/promise.some.md | 62 + .../bluebird/docs/docs/api/promise.try.md | 50 + .../bluebird/docs/docs/api/promise.using.md | 116 + .../docs/docs/api/promiseinspection.md | 38 + .../bluebird/docs/docs/api/promisification.md | 150 + .../www/libs/bluebird/docs/docs/api/props.md | 31 + .../www/libs/bluebird/docs/docs/api/race.md | 31 + .../www/libs/bluebird/docs/docs/api/reason.md | 36 + .../www/libs/bluebird/docs/docs/api/reduce.md | 34 + .../libs/bluebird/docs/docs/api/reflect.md | 66 + .../docs/docs/api/resource-management.md | 67 + .../www/libs/bluebird/docs/docs/api/return.md | 75 + .../www/libs/bluebird/docs/docs/api/some.md | 31 + .../www/libs/bluebird/docs/docs/api/spread.md | 69 + .../docs/api/suppressunhandledrejections.md | 82 + .../docs/docs/api/synchronous-inspection.md | 72 + .../www/libs/bluebird/docs/docs/api/tap.md | 63 + .../www/libs/bluebird/docs/docs/api/then.md | 35 + .../www/libs/bluebird/docs/docs/api/throw.md | 45 + .../libs/bluebird/docs/docs/api/timeout.md | 54 + .../bluebird/docs/docs/api/timeouterror.md | 32 + .../www/libs/bluebird/docs/docs/api/timers.md | 29 + .../libs/bluebird/docs/docs/api/utility.md | 29 + .../www/libs/bluebird/docs/docs/api/value.md | 34 + .../libs/bluebird/docs/docs/async-dialogs.md | 6 + .../bluebird/docs/docs/beginners-guide.md | 6 + .../www/libs/bluebird/docs/docs/benchmarks.md | 115 + .../www/libs/bluebird/docs/docs/changelog.md | 1884 ++++++ .../docs/docs/coming-from-other-languages.md | 86 + .../docs/docs/coming-from-other-libraries.md | 320 + .../www/libs/bluebird/docs/docs/contribute.md | 144 + .../bluebird/docs/docs/deprecated-apis.md | 106 + .../bluebird/docs/docs/deprecated_apis.md | 102 + .../docs/docs/download-api-reference.md | 6 + .../bluebird/docs/docs/error-explanations.md | 360 ++ .../www/libs/bluebird/docs/docs/features.md | 311 + .../bluebird/docs/docs/getting-started.md | 34 + .../www/libs/bluebird/docs/docs/install.md | 90 + .../bluebird/docs/docs/new-in-bluebird-3.md | 64 + .../www/libs/bluebird/docs/docs/support.md | 26 + .../docs/docs/warning-explanations.md | 85 + .../docs/docs/what-about-generators.md | 6 + .../libs/bluebird/docs/docs/why-bluebird.md | 22 + .../bluebird/docs/docs/why-performance.md | 6 + .../libs/bluebird/docs/docs/why-promises.md | 127 + .../docs/docs/working-with-callbacks.md | 463 ++ .../assets/www/libs/bluebird/docs/helpers.rb | 16 + .../www/libs/bluebird/docs/img/favicon.png | Bin 0 -> 4807 bytes .../www/libs/bluebird/docs/img/logo.png | Bin 0 -> 8883 bytes .../assets/www/libs/bluebird/docs/index.html | 8 + .../www/libs/bluebird/issue_template.md | 12 + .../libs/bluebird/js/browser/bluebird.core.js | 3652 +++++++++++ .../bluebird/js/browser/bluebird.core.min.js | 31 + .../www/libs/bluebird/js/browser/bluebird.js | 5474 +++++++++++++++++ .../libs/bluebird/js/browser/bluebird.min.js | 31 + .../assets/www/libs/bluebird/package.json | 76 + .../assets/www/libs/bluebird/src/any.js | 25 + .../assets/www/libs/bluebird/src/assert.js | 55 + .../assets/www/libs/bluebird/src/async.js | 174 + .../assets/www/libs/bluebird/src/bind.js | 67 + .../assets/www/libs/bluebird/src/bluebird.js | 11 + .../assets/www/libs/bluebird/src/call_get.js | 123 + .../assets/www/libs/bluebird/src/cancel.js | 132 + .../www/libs/bluebird/src/catch_filter.js | 42 + .../assets/www/libs/bluebird/src/constants.js | 149 + .../assets/www/libs/bluebird/src/context.js | 69 + .../www/libs/bluebird/src/debuggability.js | 887 +++ .../www/libs/bluebird/src/direct_resolve.js | 46 + .../assets/www/libs/bluebird/src/each.js | 29 + .../assets/www/libs/bluebird/src/errors.js | 117 + .../assets/www/libs/bluebird/src/es5.js | 80 + .../assets/www/libs/bluebird/src/filter.js | 12 + .../assets/www/libs/bluebird/src/finally.js | 111 + .../www/libs/bluebird/src/generators.js | 226 + .../assets/www/libs/bluebird/src/join.js | 149 + .../assets/www/libs/bluebird/src/map.js | 181 + .../assets/www/libs/bluebird/src/method.js | 57 + .../assets/www/libs/bluebird/src/nodeback.js | 51 + .../assets/www/libs/bluebird/src/nodeify.js | 62 + .../assets/www/libs/bluebird/src/promise.js | 773 +++ .../www/libs/bluebird/src/promise_array.js | 201 + .../assets/www/libs/bluebird/src/promisify.js | 326 + .../assets/www/libs/bluebird/src/props.js | 125 + .../assets/www/libs/bluebird/src/queue.js | 96 + .../assets/www/libs/bluebird/src/race.js | 50 + .../assets/www/libs/bluebird/src/reduce.js | 168 + .../assets/www/libs/bluebird/src/schedule.js | 76 + .../assets/www/libs/bluebird/src/settle.js | 51 + .../assets/www/libs/bluebird/src/some.js | 159 + .../bluebird/src/synchronous_inspection.js | 96 + .../assets/www/libs/bluebird/src/thenables.js | 89 + .../assets/www/libs/bluebird/src/timers.js | 92 + .../assets/www/libs/bluebird/src/using.js | 226 + .../assets/www/libs/bluebird/src/util.js | 381 ++ .../android/assets/www/libs/bluebird/tests | 2 + .../assets/www/libs/bluebird/tools/README.md | 19 + .../www/libs/bluebird/tools/ast_passes.js | 708 +++ .../bluebird/tools/browser_test_generator.js | 51 + .../bluebird/tools/browser_test_runner.js | 97 + .../assets/www/libs/bluebird/tools/build.js | 337 + .../bluebird/tools/job-runner/job-runner.js | 557 ++ .../assets/www/libs/bluebird/tools/jshint.js | 20 + .../libs/bluebird/tools/jshintrc_generator.js | 52 + .../www/libs/bluebird/tools/mocha_runner.js | 143 + .../libs/bluebird/tools/saucelabs_runner.js | 198 + .../assets/www/libs/bluebird/tools/test.js | 301 + .../assets/www/libs/bluebird/tools/utils.js | 218 + .../assets/www/libs/jquery/.bower.json | 25 + .../assets/www/libs/jquery/AUTHORS.txt | 278 + .../assets/www/libs/jquery/LICENSE.txt | 36 + .../android/assets/www/libs/jquery/README.md | 65 + .../android/assets/www/libs/jquery/bower.json | 14 + .../assets/www/libs/jquery/sizzle/LICENSE.txt | 36 + .../assets/www/libs/jquery/src/.jshintrc | 29 + .../assets/www/libs/jquery/src/ajax.js | 845 +++ .../assets/www/libs/jquery/src/ajax/jsonp.js | 100 + .../assets/www/libs/jquery/src/ajax/load.js | 83 + .../www/libs/jquery/src/ajax/parseJSON.js | 13 + .../www/libs/jquery/src/ajax/parseXML.js | 27 + .../assets/www/libs/jquery/src/ajax/script.js | 68 + .../www/libs/jquery/src/ajax/var/location.js | 3 + .../www/libs/jquery/src/ajax/var/nonce.js | 5 + .../www/libs/jquery/src/ajax/var/rquery.js | 3 + .../assets/www/libs/jquery/src/ajax/xhr.js | 167 + .../assets/www/libs/jquery/src/attributes.js | 11 + .../www/libs/jquery/src/attributes/attr.js | 142 + .../www/libs/jquery/src/attributes/classes.js | 177 + .../www/libs/jquery/src/attributes/prop.js | 125 + .../www/libs/jquery/src/attributes/support.js | 36 + .../www/libs/jquery/src/attributes/val.js | 177 + .../assets/www/libs/jquery/src/callbacks.js | 232 + .../assets/www/libs/jquery/src/core.js | 494 ++ .../www/libs/jquery/src/core/DOMEval.js | 14 + .../assets/www/libs/jquery/src/core/access.js | 65 + .../assets/www/libs/jquery/src/core/init.js | 134 + .../www/libs/jquery/src/core/parseHTML.js | 41 + .../assets/www/libs/jquery/src/core/ready.js | 103 + .../www/libs/jquery/src/core/support.js | 18 + .../libs/jquery/src/core/var/rsingleTag.js | 5 + .../android/assets/www/libs/jquery/src/css.js | 515 ++ .../www/libs/jquery/src/css/addGetHookIf.js | 24 + .../www/libs/jquery/src/css/adjustCSS.js | 65 + .../assets/www/libs/jquery/src/css/curCSS.js | 60 + .../www/libs/jquery/src/css/defaultDisplay.js | 72 + .../jquery/src/css/hiddenVisibleSelectors.js | 18 + .../www/libs/jquery/src/css/showHide.js | 48 + .../assets/www/libs/jquery/src/css/support.js | 121 + .../www/libs/jquery/src/css/var/cssExpand.js | 3 + .../www/libs/jquery/src/css/var/getStyles.js | 15 + .../www/libs/jquery/src/css/var/isHidden.js | 16 + .../www/libs/jquery/src/css/var/rmargin.js | 3 + .../www/libs/jquery/src/css/var/rnumnonpx.js | 5 + .../www/libs/jquery/src/css/var/swap.js | 24 + .../assets/www/libs/jquery/src/data.js | 187 + .../assets/www/libs/jquery/src/data/Data.js | 200 + .../www/libs/jquery/src/data/accepts.js | 20 + .../www/libs/jquery/src/data/support.js | 23 + .../libs/jquery/src/data/var/acceptData.js | 18 + .../www/libs/jquery/src/data/var/dataPriv.js | 5 + .../www/libs/jquery/src/data/var/dataUser.js | 5 + .../assets/www/libs/jquery/src/deferred.js | 158 + .../libs/jquery/src/deferred/exceptionHook.js | 19 + .../assets/www/libs/jquery/src/deprecated.js | 32 + .../assets/www/libs/jquery/src/dimensions.js | 54 + .../assets/www/libs/jquery/src/effects.js | 629 ++ .../www/libs/jquery/src/effects/Tween.js | 121 + .../jquery/src/effects/animatedSelector.js | 13 + .../www/libs/jquery/src/effects/support.js | 58 + .../assets/www/libs/jquery/src/event.js | 710 +++ .../assets/www/libs/jquery/src/event/ajax.js | 20 + .../assets/www/libs/jquery/src/event/alias.js | 27 + .../www/libs/jquery/src/event/focusin.js | 53 + .../www/libs/jquery/src/event/support.js | 9 + .../www/libs/jquery/src/event/trigger.js | 199 + .../assets/www/libs/jquery/src/exports/amd.js | 24 + .../www/libs/jquery/src/exports/global.js | 26 + .../assets/www/libs/jquery/src/intro.js | 44 + .../assets/www/libs/jquery/src/jquery.js | 37 + .../www/libs/jquery/src/manipulation.js | 481 ++ .../libs/jquery/src/manipulation/_evalUrl.js | 20 + .../jquery/src/manipulation/buildFragment.js | 102 + .../src/manipulation/createSafeFragment.js | 20 + .../libs/jquery/src/manipulation/getAll.js | 21 + .../jquery/src/manipulation/setGlobalEval.js | 20 + .../libs/jquery/src/manipulation/support.js | 33 + .../jquery/src/manipulation/var/nodeNames.js | 5 + .../src/manipulation/var/rcheckableType.js | 3 + .../manipulation/var/rleadingWhitespace.js | 3 + .../src/manipulation/var/rscriptType.js | 3 + .../jquery/src/manipulation/var/rtagName.js | 3 + .../libs/jquery/src/manipulation/wrapMap.js | 27 + .../assets/www/libs/jquery/src/offset.js | 218 + .../assets/www/libs/jquery/src/outro.js | 2 + .../assets/www/libs/jquery/src/queue.js | 143 + .../assets/www/libs/jquery/src/queue/delay.js | 22 + .../www/libs/jquery/src/selector-native.js | 211 + .../www/libs/jquery/src/selector-sizzle.js | 14 + .../assets/www/libs/jquery/src/selector.js | 1 + .../assets/www/libs/jquery/src/serialize.js | 125 + .../assets/www/libs/jquery/src/support.js | 63 + .../assets/www/libs/jquery/src/traversing.js | 175 + .../libs/jquery/src/traversing/findFilter.js | 100 + .../www/libs/jquery/src/traversing/var/dir.js | 20 + .../src/traversing/var/rneedsContext.js | 6 + .../jquery/src/traversing/var/siblings.js | 15 + .../assets/www/libs/jquery/src/var/arr.js | 3 + .../www/libs/jquery/src/var/class2type.js | 5 + .../assets/www/libs/jquery/src/var/concat.js | 5 + .../www/libs/jquery/src/var/deletedIds.js | 3 + .../www/libs/jquery/src/var/document.js | 3 + .../libs/jquery/src/var/documentElement.js | 5 + .../assets/www/libs/jquery/src/var/hasOwn.js | 5 + .../assets/www/libs/jquery/src/var/indexOf.js | 5 + .../assets/www/libs/jquery/src/var/pnum.js | 3 + .../assets/www/libs/jquery/src/var/push.js | 5 + .../assets/www/libs/jquery/src/var/rcssNum.js | 7 + .../www/libs/jquery/src/var/rnotwhite.js | 3 + .../assets/www/libs/jquery/src/var/slice.js | 5 + .../assets/www/libs/jquery/src/var/support.js | 5 + .../www/libs/jquery/src/var/toString.js | 5 + .../assets/www/libs/jquery/src/wrap.js | 79 + .../android/assets/www/libs/mui/.bower.json | 50 + .../android/assets/www/libs/mui/AUTHORS.txt | 8 + .../android/assets/www/libs/mui/CHANGELOG.md | 382 ++ .../android/assets/www/libs/mui/LICENSE.txt | 31 + .../android/assets/www/libs/mui/README.md | 165 + .../android/assets/www/libs/mui/RELEASE.md | 45 + .../android/assets/www/libs/mui/bower.json | 42 + .../mui/packages/cdn/angular/mui-angular.js | 1858 ++++++ .../packages/cdn/angular/mui-angular.min.js | 1 + .../www/libs/mui/packages/cdn/css/mui.css | 2522 ++++++++ .../www/libs/mui/packages/cdn/css/mui.min.css | 1 + .../packages/cdn/email/mui-email-inline.css | 686 +++ .../packages/cdn/email/mui-email-styletag.css | 36 + .../cdn/extra/mui-angular-combined.js | 2 + .../mui/packages/cdn/extra/mui-colors.css | 1 + .../mui/packages/cdn/extra/mui-combined.js | 2 + .../packages/cdn/extra/mui-react-combined.js | 2 + .../www/libs/mui/packages/cdn/js/mui.js | 1809 ++++++ .../www/libs/mui/packages/cdn/js/mui.min.js | 1 + .../libs/mui/packages/cdn/react/mui-react.js | 3208 ++++++++++ .../mui/packages/cdn/react/mui-react.min.js | 2 + .../cdn/webcomponents/mui-webcomponents.js | 1023 +++ .../webcomponents/mui-webcomponents.min.js | 2 + .../www/libs/mui/packages/meteor/LICENSE.txt | 31 + .../www/libs/mui/packages/meteor/README.md | 45 + .../libs/mui/packages/meteor/lib/css/mui.css | 2522 ++++++++ .../mui/packages/meteor/lib/css/mui.min.css | 1 + .../libs/mui/packages/meteor/lib/js/mui.js | 1809 ++++++ .../mui/packages/meteor/lib/js/mui.min.js | 1 + .../www/libs/mui/packages/meteor/package.js | 22 + .../www/libs/mui/packages/npm/LICENSE.txt | 31 + .../www/libs/mui/packages/npm/README.md | 487 ++ .../www/libs/mui/packages/npm/angular.js | 31 + .../assets/www/libs/mui/packages/npm/index.js | 9 + .../mui/packages/npm/lib/angular/appbar.js | 34 + .../packages/npm/lib/angular/babel-helpers.js | 34 + .../mui/packages/npm/lib/angular/button.js | 100 + .../mui/packages/npm/lib/angular/caret.js | 27 + .../mui/packages/npm/lib/angular/checkbox.js | 35 + .../libs/mui/packages/npm/lib/angular/col.js | 52 + .../mui/packages/npm/lib/angular/container.js | 40 + .../mui/packages/npm/lib/angular/divider.js | 29 + .../packages/npm/lib/angular/dropdown-item.js | 31 + .../mui/packages/npm/lib/angular/dropdown.js | 93 + .../libs/mui/packages/npm/lib/angular/form.js | 28 + .../mui/packages/npm/lib/angular/input.js | 146 + .../mui/packages/npm/lib/angular/panel.js | 34 + .../mui/packages/npm/lib/angular/radio.js | 35 + .../libs/mui/packages/npm/lib/angular/row.js | 34 + .../mui/packages/npm/lib/angular/select.js | 256 + .../libs/mui/packages/npm/lib/angular/tabs.js | 128 + .../www/libs/mui/packages/npm/lib/css/mui.css | 2522 ++++++++ .../libs/mui/packages/npm/lib/css/mui.min.css | 1 + .../libs/mui/packages/npm/lib/js/config.js | 10 + .../libs/mui/packages/npm/lib/js/lib/forms.js | 59 + .../mui/packages/npm/lib/js/lib/jqLite.js | 401 ++ .../libs/mui/packages/npm/lib/js/lib/util.js | 249 + .../libs/mui/packages/npm/lib/js/overlay.js | 192 + .../mui/packages/npm/lib/react/_helpers.js | 11 + .../libs/mui/packages/npm/lib/react/appbar.js | 52 + .../packages/npm/lib/react/babel-helpers.js | 108 + .../libs/mui/packages/npm/lib/react/button.js | 230 + .../libs/mui/packages/npm/lib/react/caret.js | 53 + .../mui/packages/npm/lib/react/checkbox.js | 93 + .../libs/mui/packages/npm/lib/react/col.js | 94 + .../mui/packages/npm/lib/react/container.js | 61 + .../mui/packages/npm/lib/react/divider.js | 53 + .../packages/npm/lib/react/dropdown-item.js | 85 + .../mui/packages/npm/lib/react/dropdown.js | 240 + .../libs/mui/packages/npm/lib/react/form.js | 61 + .../libs/mui/packages/npm/lib/react/input.js | 50 + .../libs/mui/packages/npm/lib/react/option.js | 75 + .../libs/mui/packages/npm/lib/react/panel.js | 52 + .../libs/mui/packages/npm/lib/react/radio.js | 87 + .../libs/mui/packages/npm/lib/react/row.js | 59 + .../libs/mui/packages/npm/lib/react/select.js | 449 ++ .../libs/mui/packages/npm/lib/react/tab.js | 57 + .../libs/mui/packages/npm/lib/react/tabs.js | 146 + .../mui/packages/npm/lib/react/text-field.js | 288 + .../mui/packages/npm/lib/react/textarea.js | 51 + .../mui/packages/npm/lib/sass/mui-colors.scss | 34 + .../libs/mui/packages/npm/lib/sass/mui.scss | 36 + .../packages/npm/lib/sass/mui/_appbar.scss | 44 + .../packages/npm/lib/sass/mui/_buttons.scss | 232 + .../npm/lib/sass/mui/_checkbox-and-radio.scss | 60 + .../packages/npm/lib/sass/mui/_colors.scss | 340 + .../npm/lib/sass/mui/_containers.scss | 24 + .../packages/npm/lib/sass/mui/_divider.scss | 25 + .../packages/npm/lib/sass/mui/_dropdown.scss | 90 + .../mui/packages/npm/lib/sass/mui/_form.scss | 40 + .../mui/packages/npm/lib/sass/mui/_grid.scss | 37 + .../packages/npm/lib/sass/mui/_helpers.scss | 326 + .../packages/npm/lib/sass/mui/_mixins.scss | 4 + .../packages/npm/lib/sass/mui/_overlay.scss | 14 + .../mui/packages/npm/lib/sass/mui/_panel.scss | 22 + .../packages/npm/lib/sass/mui/_reboot.scss | 182 + .../packages/npm/lib/sass/mui/_ripple.scss | 55 + .../packages/npm/lib/sass/mui/_select.scss | 111 + .../mui/packages/npm/lib/sass/mui/_table.scss | 44 + .../mui/packages/npm/lib/sass/mui/_tabs.scss | 75 + .../packages/npm/lib/sass/mui/_textfield.scss | 233 + .../npm/lib/sass/mui/_typography.scss | 51 + .../packages/npm/lib/sass/mui/_variables.scss | 293 + .../npm/lib/sass/mui/mixins/_buttons.scss | 52 + .../lib/sass/mui/mixins/_grid-framework.scss | 51 + .../npm/lib/sass/mui/mixins/_typography.scss | 78 + .../npm/lib/sass/mui/mixins/_util.scss | 45 + .../npm/lib/sass/normalize-3.0.3.scss | 424 ++ .../assets/www/libs/mui/packages/npm/react.js | 27 + .../assets/www/libs/mui/src/angular/appbar.js | 30 + .../assets/www/libs/mui/src/angular/button.js | 94 + .../assets/www/libs/mui/src/angular/caret.js | 23 + .../www/libs/mui/src/angular/checkbox.js | 39 + .../assets/www/libs/mui/src/angular/col.js | 48 + .../www/libs/mui/src/angular/container.js | 36 + .../www/libs/mui/src/angular/divider.js | 25 + .../www/libs/mui/src/angular/dropdown-item.js | 27 + .../www/libs/mui/src/angular/dropdown.js | 99 + .../assets/www/libs/mui/src/angular/form.js | 24 + .../assets/www/libs/mui/src/angular/input.js | 159 + .../assets/www/libs/mui/src/angular/panel.js | 30 + .../assets/www/libs/mui/src/angular/radio.js | 39 + .../assets/www/libs/mui/src/angular/row.js | 30 + .../assets/www/libs/mui/src/angular/select.js | 284 + .../assets/www/libs/mui/src/angular/tabs.js | 133 + .../libs/mui/src/email/mui-email-inline.scss | 28 + .../mui/src/email/mui-email-styletag.scss | 11 + .../libs/mui/src/email/mui-email/_body.scss | 20 + .../mui/src/email/mui-email/_buttons.scss | 250 + .../mui/src/email/mui-email/_containers.scss | 18 + .../mui/src/email/mui-email/_divider.scss | 25 + .../libs/mui/src/email/mui-email/_grid.scss | 32 + .../mui/src/email/mui-email/_helpers.scss | 46 + .../mui/src/email/mui-email/_normalize.scss | 60 + .../libs/mui/src/email/mui-email/_panel.scss | 13 + .../libs/mui/src/email/mui-email/_reboot.scss | 66 + .../mui/src/email/mui-email/_styletag.scss | 53 + .../mui/src/email/mui-email/_typography.scss | 51 + .../mui/src/email/mui-email/_variables.scss | 135 + .../assets/www/libs/mui/src/js/config.js | 10 + .../assets/www/libs/mui/src/js/dropdown.js | 111 + .../assets/www/libs/mui/src/js/lib/forms.js | 59 + .../assets/www/libs/mui/src/js/lib/jqLite.js | 401 ++ .../assets/www/libs/mui/src/js/lib/util.js | 249 + .../assets/www/libs/mui/src/js/overlay.js | 192 + .../assets/www/libs/mui/src/js/ripple.js | 104 + .../assets/www/libs/mui/src/js/select.js | 363 ++ .../assets/www/libs/mui/src/js/tabs.js | 159 + .../assets/www/libs/mui/src/js/textfield.js | 100 + .../assets/www/libs/mui/src/react/_helpers.js | 14 + .../assets/www/libs/mui/src/react/appbar.jsx | 34 + .../assets/www/libs/mui/src/react/button.jsx | 186 + .../assets/www/libs/mui/src/react/caret.jsx | 35 + .../www/libs/mui/src/react/checkbox.jsx | 68 + .../assets/www/libs/mui/src/react/col.jsx | 72 + .../www/libs/mui/src/react/container.jsx | 44 + .../assets/www/libs/mui/src/react/divider.jsx | 35 + .../www/libs/mui/src/react/dropdown-item.jsx | 59 + .../www/libs/mui/src/react/dropdown.jsx | 200 + .../assets/www/libs/mui/src/react/form.jsx | 44 + .../assets/www/libs/mui/src/react/input.jsx | 35 + .../assets/www/libs/mui/src/react/option.jsx | 46 + .../assets/www/libs/mui/src/react/panel.jsx | 34 + .../assets/www/libs/mui/src/react/radio.jsx | 65 + .../assets/www/libs/mui/src/react/row.jsx | 39 + .../assets/www/libs/mui/src/react/select.jsx | 389 ++ .../assets/www/libs/mui/src/react/tab.jsx | 40 + .../assets/www/libs/mui/src/react/tabs.jsx | 116 + .../www/libs/mui/src/react/text-field.jsx | 239 + .../www/libs/mui/src/react/textarea.jsx | 36 + .../www/libs/mui/src/sass/mui-colors.scss | 34 + .../assets/www/libs/mui/src/sass/mui.scss | 36 + .../www/libs/mui/src/sass/mui/_appbar.scss | 44 + .../www/libs/mui/src/sass/mui/_buttons.scss | 232 + .../mui/src/sass/mui/_checkbox-and-radio.scss | 60 + .../www/libs/mui/src/sass/mui/_colors.scss | 340 + .../libs/mui/src/sass/mui/_containers.scss | 24 + .../www/libs/mui/src/sass/mui/_divider.scss | 25 + .../www/libs/mui/src/sass/mui/_dropdown.scss | 90 + .../www/libs/mui/src/sass/mui/_form.scss | 40 + .../www/libs/mui/src/sass/mui/_grid.scss | 37 + .../www/libs/mui/src/sass/mui/_helpers.scss | 326 + .../www/libs/mui/src/sass/mui/_mixins.scss | 4 + .../www/libs/mui/src/sass/mui/_overlay.scss | 14 + .../www/libs/mui/src/sass/mui/_panel.scss | 22 + .../www/libs/mui/src/sass/mui/_reboot.scss | 182 + .../www/libs/mui/src/sass/mui/_ripple.scss | 55 + .../www/libs/mui/src/sass/mui/_select.scss | 111 + .../www/libs/mui/src/sass/mui/_table.scss | 44 + .../www/libs/mui/src/sass/mui/_tabs.scss | 75 + .../www/libs/mui/src/sass/mui/_textfield.scss | 233 + .../libs/mui/src/sass/mui/_typography.scss | 51 + .../www/libs/mui/src/sass/mui/_variables.scss | 293 + .../mui/src/sass/mui/mixins/_buttons.scss | 52 + .../src/sass/mui/mixins/_grid-framework.scss | 51 + .../mui/src/sass/mui/mixins/_typography.scss | 78 + .../libs/mui/src/sass/mui/mixins/_util.scss | 45 + .../libs/mui/src/sass/normalize-3.0.3.scss | 424 ++ .../www/libs/mui/src/webcomponents/buttons.js | 89 + .../www/libs/mui/src/webcomponents/forms.js | 133 + .../cordova-plugin-ble-central/www/ble.js | 167 + platforms/android/assets/www/test.html | 22 + platforms/android/build.gradle | 305 + platforms/android/cordova/.jshintrc | 10 + platforms/android/cordova/Api.js | 504 ++ platforms/android/cordova/android_sdk_version | 29 + platforms/android/cordova/build | 48 + platforms/android/cordova/build.bat | 26 + platforms/android/cordova/check_reqs | 31 + platforms/android/cordova/check_reqs.bat | 26 + platforms/android/cordova/clean | 36 + platforms/android/cordova/clean.bat | 26 + platforms/android/cordova/defaults.xml | 26 + platforms/android/cordova/lib/Adb.js | 96 + .../android/cordova/lib/AndroidManifest.js | 161 + .../android/cordova/lib/AndroidProject.js | 184 + .../android/cordova/lib/ConsoleLogger.js | 75 + .../cordova/lib/android_sdk_version.js | 64 + platforms/android/cordova/lib/build.js | 302 + .../cordova/lib/builders/AntBuilder.js | 141 + .../cordova/lib/builders/GenericBuilder.js | 138 + .../cordova/lib/builders/GradleBuilder.js | 275 + .../android/cordova/lib/builders/builders.js | 47 + platforms/android/cordova/lib/check_reqs.js | 330 + platforms/android/cordova/lib/device.js | 119 + platforms/android/cordova/lib/emulator.js | 408 ++ platforms/android/cordova/lib/install-device | 42 + .../android/cordova/lib/install-device.bat | 26 + .../android/cordova/lib/install-emulator | 38 + .../android/cordova/lib/install-emulator.bat | 26 + platforms/android/cordova/lib/list-devices | 33 + .../android/cordova/lib/list-devices.bat | 26 + .../android/cordova/lib/list-emulator-images | 32 + .../cordova/lib/list-emulator-images.bat | 26 + .../cordova/lib/list-started-emulators | 32 + .../cordova/lib/list-started-emulators.bat | 26 + platforms/android/cordova/lib/log.js | 56 + .../android/cordova/lib/plugin-build.gradle | 79 + .../android/cordova/lib/pluginHandlers.js | 252 + platforms/android/cordova/lib/prepare.js | 379 ++ platforms/android/cordova/lib/retry.js | 68 + platforms/android/cordova/lib/run.js | 140 + platforms/android/cordova/lib/start-emulator | 39 + .../android/cordova/lib/start-emulator.bat | 26 + platforms/android/cordova/log | 36 + platforms/android/cordova/log.bat | 26 + platforms/android/cordova/run | 51 + platforms/android/cordova/run.bat | 26 + platforms/android/cordova/version | 29 + platforms/android/cordova/version.bat | 26 + .../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 | 19 + .../cordova-plugin-ble-central/www/ble.js | 167 + platforms/android/project.properties | 14 + platforms/android/res/drawable-hdpi/icon.png | Bin 0 -> 6080 bytes .../android/res/drawable-land-hdpi/screen.png | Bin 0 -> 218302 bytes .../android/res/drawable-land-ldpi/screen.png | Bin 0 -> 42616 bytes .../android/res/drawable-land-mdpi/screen.png | Bin 0 -> 92347 bytes .../res/drawable-land-xhdpi/screen.png | Bin 0 -> 489604 bytes platforms/android/res/drawable-ldpi/icon.png | Bin 0 -> 3096 bytes platforms/android/res/drawable-mdpi/icon.png | Bin 0 -> 4090 bytes .../android/res/drawable-port-hdpi/screen.png | Bin 0 -> 222148 bytes .../android/res/drawable-port-ldpi/screen.png | Bin 0 -> 42034 bytes .../android/res/drawable-port-mdpi/screen.png | Bin 0 -> 90555 bytes .../res/drawable-port-xhdpi/screen.png | Bin 0 -> 504508 bytes platforms/android/res/drawable-xhdpi/icon.png | Bin 0 -> 7685 bytes platforms/android/res/values/strings.xml | 6 + platforms/android/res/xml/config.xml | 27 + platforms/android/settings.gradle | 3 + .../cordova/ble/central/BLECentralPlugin.java | 587 ++ .../cordova/ble/central/BLECommand.java | 61 + .../megster/cordova/ble/central/Helper.java | 158 + .../cordova/ble/central/Peripheral.java | 645 ++ .../cordova/ble/central/UUIDHelper.java | 47 + .../org/apache/cordova/PermissionHelper.java | 138 + .../cordova/whitelist/WhitelistPlugin.java | 161 + .../org/censis/sensortoy/MainActivity.java | 34 + platforms/ios/.gitignore | 5 + .../ios/CordovaLib/Classes/Private/CDVDebug.h | 25 + .../Classes/Private/CDVJSON_private.h | 31 + .../Classes/Private/CDVJSON_private.m | 91 + .../Classes/Private/CDVPlugin+Private.h | 24 + .../CDVGestureHandler/CDVGestureHandler.h | 26 + .../CDVGestureHandler/CDVGestureHandler.m | 74 + .../CDVHandleOpenURL/CDVHandleOpenURL.h | 27 + .../CDVHandleOpenURL/CDVHandleOpenURL.m | 86 + .../CDVIntentAndNavigationFilter.h | 24 + .../CDVIntentAndNavigationFilter.m | 112 + .../Plugins/CDVLocalStorage/CDVLocalStorage.h | 50 + .../Plugins/CDVLocalStorage/CDVLocalStorage.m | 487 ++ .../CDVUIWebViewEngine/CDVUIWebViewDelegate.h | 41 + .../CDVUIWebViewEngine/CDVUIWebViewDelegate.m | 400 ++ .../CDVUIWebViewEngine/CDVUIWebViewEngine.h | 27 + .../CDVUIWebViewEngine/CDVUIWebViewEngine.m | 197 + .../CDVUIWebViewNavigationDelegate.h | 29 + .../CDVUIWebViewNavigationDelegate.m | 151 + platforms/ios/CordovaLib/Classes/Public/CDV.h | 34 + .../Classes/Public/CDVAppDelegate.h | 28 + .../Classes/Public/CDVAppDelegate.m | 105 + .../Classes/Public/CDVAvailability.h | 102 + .../Public/CDVAvailabilityDeprecated.h | 26 + .../Classes/Public/CDVCommandDelegate.h | 51 + .../Classes/Public/CDVCommandDelegateImpl.h | 36 + .../Classes/Public/CDVCommandDelegateImpl.m | 186 + .../Classes/Public/CDVCommandQueue.h | 39 + .../Classes/Public/CDVCommandQueue.m | 194 + .../Classes/Public/CDVConfigParser.h | 30 + .../Classes/Public/CDVConfigParser.m | 81 + .../Classes/Public/CDVInvokedUrlCommand.h | 52 + .../Classes/Public/CDVInvokedUrlCommand.m | 116 + .../Classes/Public/CDVPlugin+Resources.h | 39 + .../Classes/Public/CDVPlugin+Resources.m | 38 + .../ios/CordovaLib/Classes/Public/CDVPlugin.h | 69 + .../ios/CordovaLib/Classes/Public/CDVPlugin.m | 163 + .../Classes/Public/CDVPluginResult.h | 66 + .../Classes/Public/CDVPluginResult.m | 186 + .../Public/CDVScreenOrientationDelegate.h | 28 + .../ios/CordovaLib/Classes/Public/CDVTimer.h | 27 + .../ios/CordovaLib/Classes/Public/CDVTimer.m | 123 + .../Classes/Public/CDVURLProtocol.h | 27 + .../Classes/Public/CDVURLProtocol.m | 113 + .../Classes/Public/CDVUserAgentUtil.h | 27 + .../Classes/Public/CDVUserAgentUtil.m | 122 + .../Classes/Public/CDVViewController.h | 85 + .../Classes/Public/CDVViewController.m | 671 ++ .../Classes/Public/CDVWebViewEngineProtocol.h | 42 + .../CordovaLib/Classes/Public/CDVWhitelist.h | 34 + .../CordovaLib/Classes/Public/CDVWhitelist.m | 285 + .../Public/NSDictionary+CordovaPreferences.h | 35 + .../Public/NSDictionary+CordovaPreferences.m | 63 + .../Public/NSMutableArray+QueueAdditions.h | 29 + .../Public/NSMutableArray+QueueAdditions.m | 58 + .../CordovaLib.xcodeproj/project.pbxproj | 526 ++ .../ios/CordovaLib/CordovaLib_Prefix.pch | 22 + platforms/ios/CordovaLib/VERSION | 1 + platforms/ios/CordovaLib/cordova.js | 1911 ++++++ .../ios/Sensortoy.xcodeproj/project.pbxproj | 425 ++ platforms/ios/Sensortoy/.gitignore | 5 + platforms/ios/Sensortoy/Bridging-Header.h | 28 + platforms/ios/Sensortoy/Classes/AppDelegate.h | 33 + platforms/ios/Sensortoy/Classes/AppDelegate.m | 39 + .../Sensortoy/Classes/MainViewController.h | 40 + .../Sensortoy/Classes/MainViewController.m | 134 + .../Sensortoy/Classes/MainViewController.xib | 138 + .../AppIcon.appiconset/Contents.json | 182 + .../AppIcon.appiconset/icon-40.png | Bin 0 -> 4082 bytes .../AppIcon.appiconset/icon-40@2x.png | Bin 0 -> 7411 bytes .../AppIcon.appiconset/icon-50.png | Bin 0 -> 4874 bytes .../AppIcon.appiconset/icon-50@2x.png | Bin 0 -> 9611 bytes .../AppIcon.appiconset/icon-60@2x.png | Bin 0 -> 11924 bytes .../AppIcon.appiconset/icon-60@3x.png | Bin 0 -> 30083 bytes .../AppIcon.appiconset/icon-72.png | Bin 0 -> 4944 bytes .../AppIcon.appiconset/icon-72@2x.png | Bin 0 -> 11706 bytes .../AppIcon.appiconset/icon-76.png | Bin 0 -> 7025 bytes .../AppIcon.appiconset/icon-76@2x.png | Bin 0 -> 15262 bytes .../AppIcon.appiconset/icon-83.5@2x.png | Bin 0 -> 20563 bytes .../AppIcon.appiconset/icon-small.png | Bin 0 -> 3294 bytes .../AppIcon.appiconset/icon-small@2x.png | Bin 0 -> 5608 bytes .../AppIcon.appiconset/icon-small@3x.png | Bin 0 -> 7040 bytes .../AppIcon.appiconset/icon.png | Bin 0 -> 3902 bytes .../AppIcon.appiconset/icon@2x.png | Bin 0 -> 7869 bytes .../LaunchImage.launchimage/Contents.json | 156 + .../Default-568h@2x~iphone.png | Bin 0 -> 34225 bytes .../LaunchImage.launchimage/Default-667h.png | Bin 0 -> 57532 bytes .../LaunchImage.launchimage/Default-736h.png | Bin 0 -> 80929 bytes .../Default-Landscape-736h.png | Bin 0 -> 79491 bytes .../Default-Landscape@2x~ipad.png | Bin 0 -> 212234 bytes .../Default-Landscape~ipad.png | Bin 0 -> 91810 bytes .../Default-Portrait@2x~ipad.png | Bin 0 -> 212860 bytes .../Default-Portrait~ipad.png | Bin 0 -> 91713 bytes .../Default@2x~iphone.png | Bin 0 -> 29475 bytes .../Default~iphone.png | Bin 0 -> 10394 bytes platforms/ios/Sensortoy/Plugins/README | 20 + .../BLECentralPlugin/BLECentralPlugin.h | 69 + .../BLECentralPlugin/BLECentralPlugin.m | 801 +++ .../BLECentralPlugin/BLECommandContext.h | 16 + .../BLECentralPlugin/BLECommandContext.m | 10 + .../CBPeripheral+Extensions.h | 37 + .../CBPeripheral+Extensions.m | 282 + platforms/ios/Sensortoy/Sensortoy-Info.plist | 43 + platforms/ios/Sensortoy/Sensortoy-Prefix.pch | 26 + platforms/ios/Sensortoy/config.xml | 51 + platforms/ios/Sensortoy/main.m | 35 + platforms/ios/cordova/Api.js | 309 + platforms/ios/cordova/apple_ios_version | 27 + platforms/ios/cordova/apple_osx_version | 27 + platforms/ios/cordova/apple_xcode_version | 29 + platforms/ios/cordova/build | 60 + platforms/ios/cordova/build-debug.xcconfig | 28 + platforms/ios/cordova/build-extras.xcconfig | 0 platforms/ios/cordova/build-release.xcconfig | 29 + platforms/ios/cordova/build.bat | 19 + platforms/ios/cordova/build.xcconfig | 42 + platforms/ios/cordova/check_reqs | 32 + platforms/ios/cordova/check_reqs.bat | 25 + platforms/ios/cordova/clean | 47 + platforms/ios/cordova/clean.bat | 19 + platforms/ios/cordova/defaults.xml | 55 + platforms/ios/cordova/lib/build.js | 203 + platforms/ios/cordova/lib/check_reqs.js | 141 + platforms/ios/cordova/lib/clean.js | 44 + platforms/ios/cordova/lib/configMunger.js | 39 + .../ios/cordova/lib/copy-www-build-step.js | 73 + platforms/ios/cordova/lib/list-devices | 68 + .../ios/cordova/lib/list-emulator-images | 48 + .../ios/cordova/lib/list-started-emulators | 51 + platforms/ios/cordova/lib/plugman/Plugman.js | 243 + .../ios/cordova/lib/plugman/pluginHandlers.js | 334 + platforms/ios/cordova/lib/prepare.js | 544 ++ platforms/ios/cordova/lib/projectFile.js | 129 + platforms/ios/cordova/lib/run.js | 216 + platforms/ios/cordova/lib/spawn.js | 49 + platforms/ios/cordova/lib/start-emulator | 30 + platforms/ios/cordova/lib/versions.js | 178 + platforms/ios/cordova/log | 23 + platforms/ios/cordova/log.bat | 19 + platforms/ios/cordova/loggingHelper.js | 30 + platforms/ios/cordova/run | 63 + platforms/ios/cordova/run.bat | 19 + platforms/ios/cordova/version | 35 + platforms/ios/cordova/version.bat | 26 + platforms/ios/frameworks.json | 3 + platforms/ios/ios.json | 47 + .../ios/platform_www/cordova-js-src/exec.js | 262 + .../platform_www/cordova-js-src/platform.js | 28 + platforms/ios/platform_www/cordova.js | 1911 ++++++ platforms/ios/platform_www/cordova_plugins.js | 20 + .../cordova-plugin-ble-central/www/ble.js | 167 + platforms/ios/www/cordova-js-src/exec.js | 262 + platforms/ios/www/cordova-js-src/platform.js | 28 + platforms/ios/www/cordova.js | 1911 ++++++ platforms/ios/www/cordova_plugins.js | 20 + platforms/ios/www/css/app.css | 280 + platforms/ios/www/css/index.css | 115 + platforms/ios/www/css/material-icons.css | 15 + platforms/ios/www/css/mui.css | 1912 ++++++ platforms/ios/www/css/mui.custom.css | 1912 ++++++ platforms/ios/www/css/mui.min.css | 1 + platforms/ios/www/img/logo.png | Bin 0 -> 21814 bytes platforms/ios/www/index.html | 90 + .../js/device/CC2650/cc2650_accelerometer.js | 169 + .../www/js/device/CC2650/cc2650_barometer.js | 106 + platforms/ios/www/js/index.js | 218 + platforms/ios/www/js/standards/battery.js | 52 + platforms/ios/www/js/standards/button.js | 96 + platforms/ios/www/js/standards/capability.js | 78 + platforms/ios/www/js/test.js | 55 + platforms/ios/www/libs/bluebird/.bower.json | 44 + platforms/ios/www/libs/bluebird/API.md | 1 + .../ios/www/libs/bluebird/CONTRIBUTING.md | 9 + platforms/ios/www/libs/bluebird/LICENSE | 21 + platforms/ios/www/libs/bluebird/README.md | 51 + platforms/ios/www/libs/bluebird/bench | 37 + platforms/ios/www/libs/bluebird/bower.json | 34 + platforms/ios/www/libs/bluebird/build | 2 + platforms/ios/www/libs/bluebird/changelog.md | 1 + .../ios/www/libs/bluebird/deprecated_apis.md | 1 + platforms/ios/www/libs/bluebird/docs/Gemfile | 8 + .../ios/www/libs/bluebird/docs/README.md | 5 + .../ios/www/libs/bluebird/docs/_config.yml | 35 + .../www/libs/bluebird/docs/_layouts/api.html | 9 + .../libs/bluebird/docs/_layouts/default.html | 136 + .../www/libs/bluebird/docs/_layouts/page.html | 14 + .../www/libs/bluebird/docs/_plugins/mdate.rb | 19 + .../www/libs/bluebird/docs/_plugins/plugin.rb | 55 + .../ios/www/libs/bluebird/docs/css/main.css | 181 + .../www/libs/bluebird/docs/css/mono-blue.css | 80 + .../libs/bluebird/docs/docs/anti-patterns.md | 172 + .../libs/bluebird/docs/docs/api-reference.md | 95 + .../bluebird/docs/docs/api/aggregateerror.md | 49 + .../www/libs/bluebird/docs/docs/api/all.md | 31 + .../www/libs/bluebird/docs/docs/api/any.md | 31 + .../libs/bluebird/docs/docs/api/ascallback.md | 114 + .../www/libs/bluebird/docs/docs/api/bind.md | 31 + .../docs/docs/api/built-in-error-types.md | 31 + .../www/libs/bluebird/docs/docs/api/call.md | 101 + .../www/libs/bluebird/docs/docs/api/cancel.md | 33 + .../bluebird/docs/docs/api/cancellation.md | 112 + .../docs/docs/api/cancellationerror.md | 32 + .../www/libs/bluebird/docs/docs/api/catch.md | 227 + .../bluebird/docs/docs/api/catchreturn.md | 43 + .../libs/bluebird/docs/docs/api/catchthrow.md | 43 + .../bluebird/docs/docs/api/collections.md | 32 + .../www/libs/bluebird/docs/docs/api/core.md | 27 + .../docs/docs/api/deferred-migration.md | 44 + .../www/libs/bluebird/docs/docs/api/delay.md | 31 + .../libs/bluebird/docs/docs/api/disposer.md | 158 + .../www/libs/bluebird/docs/docs/api/done.md | 37 + .../www/libs/bluebird/docs/docs/api/each.md | 51 + .../docs/docs/api/environment-variables.md | 41 + .../api/error-management-configuration.md | 107 + .../www/libs/bluebird/docs/docs/api/error.md | 101 + .../www/libs/bluebird/docs/docs/api/filter.md | 34 + .../libs/bluebird/docs/docs/api/finally.md | 97 + .../libs/bluebird/docs/docs/api/generators.md | 27 + .../www/libs/bluebird/docs/docs/api/get.md | 59 + .../bluebird/docs/docs/api/iscancelled.md | 31 + .../bluebird/docs/docs/api/isfulfilled.md | 31 + .../libs/bluebird/docs/docs/api/ispending.md | 32 + .../libs/bluebird/docs/docs/api/isrejected.md | 31 + .../www/libs/bluebird/docs/docs/api/map.md | 34 + .../libs/bluebird/docs/docs/api/mapseries.md | 31 + .../bluebird/docs/docs/api/new-promise.md | 79 + .../docs/docs/api/operationalerror.md | 35 + .../docs/docs/api/progression-migration.md | 105 + .../bluebird/docs/docs/api/promise.all.md | 47 + .../bluebird/docs/docs/api/promise.any.md | 31 + .../bluebird/docs/docs/api/promise.bind.md | 177 + .../bluebird/docs/docs/api/promise.config.md | 84 + .../api/promise.coroutine.addyieldhandler.md | 122 + .../docs/docs/api/promise.coroutine.md | 76 + .../bluebird/docs/docs/api/promise.delay.md | 47 + .../bluebird/docs/docs/api/promise.each.md | 42 + .../bluebird/docs/docs/api/promise.filter.md | 74 + .../docs/docs/api/promise.fromcallback.md | 80 + .../bluebird/docs/docs/api/promise.join.md | 87 + .../docs/docs/api/promise.longstacktraces.md | 93 + .../bluebird/docs/docs/api/promise.map.md | 138 + .../docs/docs/api/promise.mapseries.md | 57 + .../bluebird/docs/docs/api/promise.method.md | 72 + .../docs/docs/api/promise.noconflict.md | 47 + .../promise.onpossiblyunhandledrejection.md | 42 + .../promise.onunhandledrejectionhandled.md | 53 + .../docs/docs/api/promise.promisify.md | 78 + .../docs/docs/api/promise.promisifyall.md | 262 + .../bluebird/docs/docs/api/promise.props.md | 108 + .../bluebird/docs/docs/api/promise.race.md | 33 + .../bluebird/docs/docs/api/promise.reduce.md | 53 + .../bluebird/docs/docs/api/promise.reject.md | 32 + .../bluebird/docs/docs/api/promise.resolve.md | 47 + .../docs/docs/api/promise.setscheduler.md | 54 + .../bluebird/docs/docs/api/promise.some.md | 62 + .../bluebird/docs/docs/api/promise.try.md | 50 + .../bluebird/docs/docs/api/promise.using.md | 116 + .../docs/docs/api/promiseinspection.md | 38 + .../bluebird/docs/docs/api/promisification.md | 150 + .../www/libs/bluebird/docs/docs/api/props.md | 31 + .../www/libs/bluebird/docs/docs/api/race.md | 31 + .../www/libs/bluebird/docs/docs/api/reason.md | 36 + .../www/libs/bluebird/docs/docs/api/reduce.md | 34 + .../libs/bluebird/docs/docs/api/reflect.md | 66 + .../docs/docs/api/resource-management.md | 67 + .../www/libs/bluebird/docs/docs/api/return.md | 75 + .../www/libs/bluebird/docs/docs/api/some.md | 31 + .../www/libs/bluebird/docs/docs/api/spread.md | 69 + .../docs/api/suppressunhandledrejections.md | 82 + .../docs/docs/api/synchronous-inspection.md | 72 + .../www/libs/bluebird/docs/docs/api/tap.md | 63 + .../www/libs/bluebird/docs/docs/api/then.md | 35 + .../www/libs/bluebird/docs/docs/api/throw.md | 45 + .../libs/bluebird/docs/docs/api/timeout.md | 54 + .../bluebird/docs/docs/api/timeouterror.md | 32 + .../www/libs/bluebird/docs/docs/api/timers.md | 29 + .../libs/bluebird/docs/docs/api/utility.md | 29 + .../www/libs/bluebird/docs/docs/api/value.md | 34 + .../libs/bluebird/docs/docs/async-dialogs.md | 6 + .../bluebird/docs/docs/beginners-guide.md | 6 + .../www/libs/bluebird/docs/docs/benchmarks.md | 115 + .../www/libs/bluebird/docs/docs/changelog.md | 1884 ++++++ .../docs/docs/coming-from-other-languages.md | 86 + .../docs/docs/coming-from-other-libraries.md | 320 + .../www/libs/bluebird/docs/docs/contribute.md | 144 + .../bluebird/docs/docs/deprecated-apis.md | 106 + .../bluebird/docs/docs/deprecated_apis.md | 102 + .../docs/docs/download-api-reference.md | 6 + .../bluebird/docs/docs/error-explanations.md | 360 ++ .../www/libs/bluebird/docs/docs/features.md | 311 + .../bluebird/docs/docs/getting-started.md | 34 + .../www/libs/bluebird/docs/docs/install.md | 90 + .../bluebird/docs/docs/new-in-bluebird-3.md | 64 + .../www/libs/bluebird/docs/docs/support.md | 26 + .../docs/docs/warning-explanations.md | 85 + .../docs/docs/what-about-generators.md | 6 + .../libs/bluebird/docs/docs/why-bluebird.md | 22 + .../bluebird/docs/docs/why-performance.md | 6 + .../libs/bluebird/docs/docs/why-promises.md | 127 + .../docs/docs/working-with-callbacks.md | 463 ++ .../ios/www/libs/bluebird/docs/helpers.rb | 16 + .../www/libs/bluebird/docs/img/favicon.png | Bin 0 -> 4807 bytes .../ios/www/libs/bluebird/docs/img/logo.png | Bin 0 -> 8883 bytes .../ios/www/libs/bluebird/docs/index.html | 8 + .../ios/www/libs/bluebird/issue_template.md | 12 + .../libs/bluebird/js/browser/bluebird.core.js | 3652 +++++++++++ .../bluebird/js/browser/bluebird.core.min.js | 31 + .../www/libs/bluebird/js/browser/bluebird.js | 5474 +++++++++++++++++ .../libs/bluebird/js/browser/bluebird.min.js | 31 + platforms/ios/www/libs/bluebird/package.json | 76 + platforms/ios/www/libs/bluebird/src/any.js | 25 + platforms/ios/www/libs/bluebird/src/assert.js | 55 + platforms/ios/www/libs/bluebird/src/async.js | 174 + platforms/ios/www/libs/bluebird/src/bind.js | 67 + .../ios/www/libs/bluebird/src/bluebird.js | 11 + .../ios/www/libs/bluebird/src/call_get.js | 123 + platforms/ios/www/libs/bluebird/src/cancel.js | 132 + .../ios/www/libs/bluebird/src/catch_filter.js | 42 + .../ios/www/libs/bluebird/src/constants.js | 149 + .../ios/www/libs/bluebird/src/context.js | 69 + .../www/libs/bluebird/src/debuggability.js | 887 +++ .../www/libs/bluebird/src/direct_resolve.js | 46 + platforms/ios/www/libs/bluebird/src/each.js | 29 + platforms/ios/www/libs/bluebird/src/errors.js | 117 + platforms/ios/www/libs/bluebird/src/es5.js | 80 + platforms/ios/www/libs/bluebird/src/filter.js | 12 + .../ios/www/libs/bluebird/src/finally.js | 111 + .../ios/www/libs/bluebird/src/generators.js | 226 + platforms/ios/www/libs/bluebird/src/join.js | 149 + platforms/ios/www/libs/bluebird/src/map.js | 181 + platforms/ios/www/libs/bluebird/src/method.js | 57 + .../ios/www/libs/bluebird/src/nodeback.js | 51 + .../ios/www/libs/bluebird/src/nodeify.js | 62 + .../ios/www/libs/bluebird/src/promise.js | 773 +++ .../www/libs/bluebird/src/promise_array.js | 201 + .../ios/www/libs/bluebird/src/promisify.js | 326 + platforms/ios/www/libs/bluebird/src/props.js | 125 + platforms/ios/www/libs/bluebird/src/queue.js | 96 + platforms/ios/www/libs/bluebird/src/race.js | 50 + platforms/ios/www/libs/bluebird/src/reduce.js | 168 + .../ios/www/libs/bluebird/src/schedule.js | 76 + platforms/ios/www/libs/bluebird/src/settle.js | 51 + platforms/ios/www/libs/bluebird/src/some.js | 159 + .../bluebird/src/synchronous_inspection.js | 96 + .../ios/www/libs/bluebird/src/thenables.js | 89 + platforms/ios/www/libs/bluebird/src/timers.js | 92 + platforms/ios/www/libs/bluebird/src/using.js | 226 + platforms/ios/www/libs/bluebird/src/util.js | 381 ++ platforms/ios/www/libs/bluebird/tests | 2 + .../ios/www/libs/bluebird/tools/README.md | 19 + .../ios/www/libs/bluebird/tools/ast_passes.js | 708 +++ .../bluebird/tools/browser_test_generator.js | 51 + .../bluebird/tools/browser_test_runner.js | 97 + .../ios/www/libs/bluebird/tools/build.js | 337 + .../bluebird/tools/job-runner/job-runner.js | 557 ++ .../ios/www/libs/bluebird/tools/jshint.js | 20 + .../libs/bluebird/tools/jshintrc_generator.js | 52 + .../www/libs/bluebird/tools/mocha_runner.js | 143 + .../libs/bluebird/tools/saucelabs_runner.js | 198 + platforms/ios/www/libs/bluebird/tools/test.js | 301 + .../ios/www/libs/bluebird/tools/utils.js | 218 + platforms/ios/www/libs/jquery/.bower.json | 25 + platforms/ios/www/libs/jquery/AUTHORS.txt | 278 + platforms/ios/www/libs/jquery/LICENSE.txt | 36 + platforms/ios/www/libs/jquery/README.md | 65 + platforms/ios/www/libs/jquery/bower.json | 14 + .../ios/www/libs/jquery/sizzle/LICENSE.txt | 36 + platforms/ios/www/libs/jquery/src/.jshintrc | 29 + platforms/ios/www/libs/jquery/src/ajax.js | 845 +++ .../ios/www/libs/jquery/src/ajax/jsonp.js | 100 + .../ios/www/libs/jquery/src/ajax/load.js | 83 + .../ios/www/libs/jquery/src/ajax/parseJSON.js | 13 + .../ios/www/libs/jquery/src/ajax/parseXML.js | 27 + .../ios/www/libs/jquery/src/ajax/script.js | 68 + .../www/libs/jquery/src/ajax/var/location.js | 3 + .../ios/www/libs/jquery/src/ajax/var/nonce.js | 5 + .../www/libs/jquery/src/ajax/var/rquery.js | 3 + platforms/ios/www/libs/jquery/src/ajax/xhr.js | 167 + .../ios/www/libs/jquery/src/attributes.js | 11 + .../www/libs/jquery/src/attributes/attr.js | 142 + .../www/libs/jquery/src/attributes/classes.js | 177 + .../www/libs/jquery/src/attributes/prop.js | 125 + .../www/libs/jquery/src/attributes/support.js | 36 + .../ios/www/libs/jquery/src/attributes/val.js | 177 + .../ios/www/libs/jquery/src/callbacks.js | 232 + platforms/ios/www/libs/jquery/src/core.js | 494 ++ .../ios/www/libs/jquery/src/core/DOMEval.js | 14 + .../ios/www/libs/jquery/src/core/access.js | 65 + .../ios/www/libs/jquery/src/core/init.js | 134 + .../ios/www/libs/jquery/src/core/parseHTML.js | 41 + .../ios/www/libs/jquery/src/core/ready.js | 103 + .../ios/www/libs/jquery/src/core/support.js | 18 + .../libs/jquery/src/core/var/rsingleTag.js | 5 + platforms/ios/www/libs/jquery/src/css.js | 515 ++ .../www/libs/jquery/src/css/addGetHookIf.js | 24 + .../ios/www/libs/jquery/src/css/adjustCSS.js | 65 + .../ios/www/libs/jquery/src/css/curCSS.js | 60 + .../www/libs/jquery/src/css/defaultDisplay.js | 72 + .../jquery/src/css/hiddenVisibleSelectors.js | 18 + .../ios/www/libs/jquery/src/css/showHide.js | 48 + .../ios/www/libs/jquery/src/css/support.js | 121 + .../www/libs/jquery/src/css/var/cssExpand.js | 3 + .../www/libs/jquery/src/css/var/getStyles.js | 15 + .../www/libs/jquery/src/css/var/isHidden.js | 16 + .../www/libs/jquery/src/css/var/rmargin.js | 3 + .../www/libs/jquery/src/css/var/rnumnonpx.js | 5 + .../ios/www/libs/jquery/src/css/var/swap.js | 24 + platforms/ios/www/libs/jquery/src/data.js | 187 + .../ios/www/libs/jquery/src/data/Data.js | 200 + .../ios/www/libs/jquery/src/data/accepts.js | 20 + .../ios/www/libs/jquery/src/data/support.js | 23 + .../libs/jquery/src/data/var/acceptData.js | 18 + .../www/libs/jquery/src/data/var/dataPriv.js | 5 + .../www/libs/jquery/src/data/var/dataUser.js | 5 + platforms/ios/www/libs/jquery/src/deferred.js | 158 + .../libs/jquery/src/deferred/exceptionHook.js | 19 + .../ios/www/libs/jquery/src/deprecated.js | 32 + .../ios/www/libs/jquery/src/dimensions.js | 54 + platforms/ios/www/libs/jquery/src/effects.js | 629 ++ .../ios/www/libs/jquery/src/effects/Tween.js | 121 + .../jquery/src/effects/animatedSelector.js | 13 + .../www/libs/jquery/src/effects/support.js | 58 + platforms/ios/www/libs/jquery/src/event.js | 710 +++ .../ios/www/libs/jquery/src/event/ajax.js | 20 + .../ios/www/libs/jquery/src/event/alias.js | 27 + .../ios/www/libs/jquery/src/event/focusin.js | 53 + .../ios/www/libs/jquery/src/event/support.js | 9 + .../ios/www/libs/jquery/src/event/trigger.js | 199 + .../ios/www/libs/jquery/src/exports/amd.js | 24 + .../ios/www/libs/jquery/src/exports/global.js | 26 + platforms/ios/www/libs/jquery/src/intro.js | 44 + platforms/ios/www/libs/jquery/src/jquery.js | 37 + .../ios/www/libs/jquery/src/manipulation.js | 481 ++ .../libs/jquery/src/manipulation/_evalUrl.js | 20 + .../jquery/src/manipulation/buildFragment.js | 102 + .../src/manipulation/createSafeFragment.js | 20 + .../libs/jquery/src/manipulation/getAll.js | 21 + .../jquery/src/manipulation/setGlobalEval.js | 20 + .../libs/jquery/src/manipulation/support.js | 33 + .../jquery/src/manipulation/var/nodeNames.js | 5 + .../src/manipulation/var/rcheckableType.js | 3 + .../manipulation/var/rleadingWhitespace.js | 3 + .../src/manipulation/var/rscriptType.js | 3 + .../jquery/src/manipulation/var/rtagName.js | 3 + .../libs/jquery/src/manipulation/wrapMap.js | 27 + platforms/ios/www/libs/jquery/src/offset.js | 218 + platforms/ios/www/libs/jquery/src/outro.js | 2 + platforms/ios/www/libs/jquery/src/queue.js | 143 + .../ios/www/libs/jquery/src/queue/delay.js | 22 + .../www/libs/jquery/src/selector-native.js | 211 + .../www/libs/jquery/src/selector-sizzle.js | 14 + platforms/ios/www/libs/jquery/src/selector.js | 1 + .../ios/www/libs/jquery/src/serialize.js | 125 + platforms/ios/www/libs/jquery/src/support.js | 63 + .../ios/www/libs/jquery/src/traversing.js | 175 + .../libs/jquery/src/traversing/findFilter.js | 100 + .../www/libs/jquery/src/traversing/var/dir.js | 20 + .../src/traversing/var/rneedsContext.js | 6 + .../jquery/src/traversing/var/siblings.js | 15 + platforms/ios/www/libs/jquery/src/var/arr.js | 3 + .../ios/www/libs/jquery/src/var/class2type.js | 5 + .../ios/www/libs/jquery/src/var/concat.js | 5 + .../ios/www/libs/jquery/src/var/deletedIds.js | 3 + .../ios/www/libs/jquery/src/var/document.js | 3 + .../libs/jquery/src/var/documentElement.js | 5 + .../ios/www/libs/jquery/src/var/hasOwn.js | 5 + .../ios/www/libs/jquery/src/var/indexOf.js | 5 + platforms/ios/www/libs/jquery/src/var/pnum.js | 3 + platforms/ios/www/libs/jquery/src/var/push.js | 5 + .../ios/www/libs/jquery/src/var/rcssNum.js | 7 + .../ios/www/libs/jquery/src/var/rnotwhite.js | 3 + .../ios/www/libs/jquery/src/var/slice.js | 5 + .../ios/www/libs/jquery/src/var/support.js | 5 + .../ios/www/libs/jquery/src/var/toString.js | 5 + platforms/ios/www/libs/jquery/src/wrap.js | 79 + platforms/ios/www/libs/mui/.bower.json | 50 + platforms/ios/www/libs/mui/AUTHORS.txt | 8 + platforms/ios/www/libs/mui/CHANGELOG.md | 382 ++ platforms/ios/www/libs/mui/LICENSE.txt | 31 + platforms/ios/www/libs/mui/README.md | 165 + platforms/ios/www/libs/mui/RELEASE.md | 45 + platforms/ios/www/libs/mui/bower.json | 42 + .../mui/packages/cdn/angular/mui-angular.js | 1858 ++++++ .../packages/cdn/angular/mui-angular.min.js | 1 + .../ios/www/libs/mui/packages/cdn/css/mui.css | 2522 ++++++++ .../www/libs/mui/packages/cdn/css/mui.min.css | 1 + .../packages/cdn/email/mui-email-inline.css | 686 +++ .../packages/cdn/email/mui-email-styletag.css | 36 + .../cdn/extra/mui-angular-combined.js | 2 + .../mui/packages/cdn/extra/mui-colors.css | 1 + .../mui/packages/cdn/extra/mui-combined.js | 2 + .../packages/cdn/extra/mui-react-combined.js | 2 + .../ios/www/libs/mui/packages/cdn/js/mui.js | 1809 ++++++ .../www/libs/mui/packages/cdn/js/mui.min.js | 1 + .../libs/mui/packages/cdn/react/mui-react.js | 3208 ++++++++++ .../mui/packages/cdn/react/mui-react.min.js | 2 + .../cdn/webcomponents/mui-webcomponents.js | 1023 +++ .../webcomponents/mui-webcomponents.min.js | 2 + .../www/libs/mui/packages/meteor/LICENSE.txt | 31 + .../www/libs/mui/packages/meteor/README.md | 45 + .../libs/mui/packages/meteor/lib/css/mui.css | 2522 ++++++++ .../mui/packages/meteor/lib/css/mui.min.css | 1 + .../libs/mui/packages/meteor/lib/js/mui.js | 1809 ++++++ .../mui/packages/meteor/lib/js/mui.min.js | 1 + .../www/libs/mui/packages/meteor/package.js | 22 + .../ios/www/libs/mui/packages/npm/LICENSE.txt | 31 + .../ios/www/libs/mui/packages/npm/README.md | 487 ++ .../ios/www/libs/mui/packages/npm/angular.js | 31 + .../ios/www/libs/mui/packages/npm/index.js | 9 + .../mui/packages/npm/lib/angular/appbar.js | 34 + .../packages/npm/lib/angular/babel-helpers.js | 34 + .../mui/packages/npm/lib/angular/button.js | 100 + .../mui/packages/npm/lib/angular/caret.js | 27 + .../mui/packages/npm/lib/angular/checkbox.js | 35 + .../libs/mui/packages/npm/lib/angular/col.js | 52 + .../mui/packages/npm/lib/angular/container.js | 40 + .../mui/packages/npm/lib/angular/divider.js | 29 + .../packages/npm/lib/angular/dropdown-item.js | 31 + .../mui/packages/npm/lib/angular/dropdown.js | 93 + .../libs/mui/packages/npm/lib/angular/form.js | 28 + .../mui/packages/npm/lib/angular/input.js | 146 + .../mui/packages/npm/lib/angular/panel.js | 34 + .../mui/packages/npm/lib/angular/radio.js | 35 + .../libs/mui/packages/npm/lib/angular/row.js | 34 + .../mui/packages/npm/lib/angular/select.js | 256 + .../libs/mui/packages/npm/lib/angular/tabs.js | 128 + .../www/libs/mui/packages/npm/lib/css/mui.css | 2522 ++++++++ .../libs/mui/packages/npm/lib/css/mui.min.css | 1 + .../libs/mui/packages/npm/lib/js/config.js | 10 + .../libs/mui/packages/npm/lib/js/lib/forms.js | 59 + .../mui/packages/npm/lib/js/lib/jqLite.js | 401 ++ .../libs/mui/packages/npm/lib/js/lib/util.js | 249 + .../libs/mui/packages/npm/lib/js/overlay.js | 192 + .../mui/packages/npm/lib/react/_helpers.js | 11 + .../libs/mui/packages/npm/lib/react/appbar.js | 52 + .../packages/npm/lib/react/babel-helpers.js | 108 + .../libs/mui/packages/npm/lib/react/button.js | 230 + .../libs/mui/packages/npm/lib/react/caret.js | 53 + .../mui/packages/npm/lib/react/checkbox.js | 93 + .../libs/mui/packages/npm/lib/react/col.js | 94 + .../mui/packages/npm/lib/react/container.js | 61 + .../mui/packages/npm/lib/react/divider.js | 53 + .../packages/npm/lib/react/dropdown-item.js | 85 + .../mui/packages/npm/lib/react/dropdown.js | 240 + .../libs/mui/packages/npm/lib/react/form.js | 61 + .../libs/mui/packages/npm/lib/react/input.js | 50 + .../libs/mui/packages/npm/lib/react/option.js | 75 + .../libs/mui/packages/npm/lib/react/panel.js | 52 + .../libs/mui/packages/npm/lib/react/radio.js | 87 + .../libs/mui/packages/npm/lib/react/row.js | 59 + .../libs/mui/packages/npm/lib/react/select.js | 449 ++ .../libs/mui/packages/npm/lib/react/tab.js | 57 + .../libs/mui/packages/npm/lib/react/tabs.js | 146 + .../mui/packages/npm/lib/react/text-field.js | 288 + .../mui/packages/npm/lib/react/textarea.js | 51 + .../mui/packages/npm/lib/sass/mui-colors.scss | 34 + .../libs/mui/packages/npm/lib/sass/mui.scss | 36 + .../packages/npm/lib/sass/mui/_appbar.scss | 44 + .../packages/npm/lib/sass/mui/_buttons.scss | 232 + .../npm/lib/sass/mui/_checkbox-and-radio.scss | 60 + .../packages/npm/lib/sass/mui/_colors.scss | 340 + .../npm/lib/sass/mui/_containers.scss | 24 + .../packages/npm/lib/sass/mui/_divider.scss | 25 + .../packages/npm/lib/sass/mui/_dropdown.scss | 90 + .../mui/packages/npm/lib/sass/mui/_form.scss | 40 + .../mui/packages/npm/lib/sass/mui/_grid.scss | 37 + .../packages/npm/lib/sass/mui/_helpers.scss | 326 + .../packages/npm/lib/sass/mui/_mixins.scss | 4 + .../packages/npm/lib/sass/mui/_overlay.scss | 14 + .../mui/packages/npm/lib/sass/mui/_panel.scss | 22 + .../packages/npm/lib/sass/mui/_reboot.scss | 182 + .../packages/npm/lib/sass/mui/_ripple.scss | 55 + .../packages/npm/lib/sass/mui/_select.scss | 111 + .../mui/packages/npm/lib/sass/mui/_table.scss | 44 + .../mui/packages/npm/lib/sass/mui/_tabs.scss | 75 + .../packages/npm/lib/sass/mui/_textfield.scss | 233 + .../npm/lib/sass/mui/_typography.scss | 51 + .../packages/npm/lib/sass/mui/_variables.scss | 293 + .../npm/lib/sass/mui/mixins/_buttons.scss | 52 + .../lib/sass/mui/mixins/_grid-framework.scss | 51 + .../npm/lib/sass/mui/mixins/_typography.scss | 78 + .../npm/lib/sass/mui/mixins/_util.scss | 45 + .../npm/lib/sass/normalize-3.0.3.scss | 424 ++ .../ios/www/libs/mui/packages/npm/react.js | 27 + .../ios/www/libs/mui/src/angular/appbar.js | 30 + .../ios/www/libs/mui/src/angular/button.js | 94 + .../ios/www/libs/mui/src/angular/caret.js | 23 + .../ios/www/libs/mui/src/angular/checkbox.js | 39 + platforms/ios/www/libs/mui/src/angular/col.js | 48 + .../ios/www/libs/mui/src/angular/container.js | 36 + .../ios/www/libs/mui/src/angular/divider.js | 25 + .../www/libs/mui/src/angular/dropdown-item.js | 27 + .../ios/www/libs/mui/src/angular/dropdown.js | 99 + .../ios/www/libs/mui/src/angular/form.js | 24 + .../ios/www/libs/mui/src/angular/input.js | 159 + .../ios/www/libs/mui/src/angular/panel.js | 30 + .../ios/www/libs/mui/src/angular/radio.js | 39 + platforms/ios/www/libs/mui/src/angular/row.js | 30 + .../ios/www/libs/mui/src/angular/select.js | 284 + .../ios/www/libs/mui/src/angular/tabs.js | 133 + .../libs/mui/src/email/mui-email-inline.scss | 28 + .../mui/src/email/mui-email-styletag.scss | 11 + .../libs/mui/src/email/mui-email/_body.scss | 20 + .../mui/src/email/mui-email/_buttons.scss | 250 + .../mui/src/email/mui-email/_containers.scss | 18 + .../mui/src/email/mui-email/_divider.scss | 25 + .../libs/mui/src/email/mui-email/_grid.scss | 32 + .../mui/src/email/mui-email/_helpers.scss | 46 + .../mui/src/email/mui-email/_normalize.scss | 60 + .../libs/mui/src/email/mui-email/_panel.scss | 13 + .../libs/mui/src/email/mui-email/_reboot.scss | 66 + .../mui/src/email/mui-email/_styletag.scss | 53 + .../mui/src/email/mui-email/_typography.scss | 51 + .../mui/src/email/mui-email/_variables.scss | 135 + platforms/ios/www/libs/mui/src/js/config.js | 10 + platforms/ios/www/libs/mui/src/js/dropdown.js | 111 + .../ios/www/libs/mui/src/js/lib/forms.js | 59 + .../ios/www/libs/mui/src/js/lib/jqLite.js | 401 ++ platforms/ios/www/libs/mui/src/js/lib/util.js | 249 + platforms/ios/www/libs/mui/src/js/overlay.js | 192 + platforms/ios/www/libs/mui/src/js/ripple.js | 104 + platforms/ios/www/libs/mui/src/js/select.js | 363 ++ platforms/ios/www/libs/mui/src/js/tabs.js | 159 + .../ios/www/libs/mui/src/js/textfield.js | 100 + .../ios/www/libs/mui/src/react/_helpers.js | 14 + .../ios/www/libs/mui/src/react/appbar.jsx | 34 + .../ios/www/libs/mui/src/react/button.jsx | 186 + .../ios/www/libs/mui/src/react/caret.jsx | 35 + .../ios/www/libs/mui/src/react/checkbox.jsx | 68 + platforms/ios/www/libs/mui/src/react/col.jsx | 72 + .../ios/www/libs/mui/src/react/container.jsx | 44 + .../ios/www/libs/mui/src/react/divider.jsx | 35 + .../www/libs/mui/src/react/dropdown-item.jsx | 59 + .../ios/www/libs/mui/src/react/dropdown.jsx | 200 + platforms/ios/www/libs/mui/src/react/form.jsx | 44 + .../ios/www/libs/mui/src/react/input.jsx | 35 + .../ios/www/libs/mui/src/react/option.jsx | 46 + .../ios/www/libs/mui/src/react/panel.jsx | 34 + .../ios/www/libs/mui/src/react/radio.jsx | 65 + platforms/ios/www/libs/mui/src/react/row.jsx | 39 + .../ios/www/libs/mui/src/react/select.jsx | 389 ++ platforms/ios/www/libs/mui/src/react/tab.jsx | 40 + platforms/ios/www/libs/mui/src/react/tabs.jsx | 116 + .../ios/www/libs/mui/src/react/text-field.jsx | 239 + .../ios/www/libs/mui/src/react/textarea.jsx | 36 + .../ios/www/libs/mui/src/sass/mui-colors.scss | 34 + platforms/ios/www/libs/mui/src/sass/mui.scss | 36 + .../www/libs/mui/src/sass/mui/_appbar.scss | 44 + .../www/libs/mui/src/sass/mui/_buttons.scss | 232 + .../mui/src/sass/mui/_checkbox-and-radio.scss | 60 + .../www/libs/mui/src/sass/mui/_colors.scss | 340 + .../libs/mui/src/sass/mui/_containers.scss | 24 + .../www/libs/mui/src/sass/mui/_divider.scss | 25 + .../www/libs/mui/src/sass/mui/_dropdown.scss | 90 + .../ios/www/libs/mui/src/sass/mui/_form.scss | 40 + .../ios/www/libs/mui/src/sass/mui/_grid.scss | 37 + .../www/libs/mui/src/sass/mui/_helpers.scss | 326 + .../www/libs/mui/src/sass/mui/_mixins.scss | 4 + .../www/libs/mui/src/sass/mui/_overlay.scss | 14 + .../ios/www/libs/mui/src/sass/mui/_panel.scss | 22 + .../www/libs/mui/src/sass/mui/_reboot.scss | 182 + .../www/libs/mui/src/sass/mui/_ripple.scss | 55 + .../www/libs/mui/src/sass/mui/_select.scss | 111 + .../ios/www/libs/mui/src/sass/mui/_table.scss | 44 + .../ios/www/libs/mui/src/sass/mui/_tabs.scss | 75 + .../www/libs/mui/src/sass/mui/_textfield.scss | 233 + .../libs/mui/src/sass/mui/_typography.scss | 51 + .../www/libs/mui/src/sass/mui/_variables.scss | 293 + .../mui/src/sass/mui/mixins/_buttons.scss | 52 + .../src/sass/mui/mixins/_grid-framework.scss | 51 + .../mui/src/sass/mui/mixins/_typography.scss | 78 + .../libs/mui/src/sass/mui/mixins/_util.scss | 45 + .../libs/mui/src/sass/normalize-3.0.3.scss | 424 ++ .../www/libs/mui/src/webcomponents/buttons.js | 89 + .../www/libs/mui/src/webcomponents/forms.js | 133 + .../cordova-plugin-ble-central/www/ble.js | 167 + platforms/ios/www/test.html | 168 + platforms/platforms.json | 4 + plugins/android.json | 22 + .../cordova-plugin-ble-central/CHANGES.txt | 97 + .../cordova-plugin-ble-central/LICENSE.txt | 13 + plugins/cordova-plugin-ble-central/README.md | 754 +++ .../examples/battery/.npmignore | 2 + .../examples/battery/README.md | 16 + .../examples/battery/config.xml | 13 + .../examples/battery/hooks/README.md | 83 + .../examples/battery/www/css/index.css | 61 + .../examples/battery/www/index.html | 31 + .../examples/battery/www/js/index.js | 105 + .../examples/bluefruitle/.npmignore | 2 + .../examples/bluefruitle/README.md | 19 + .../examples/bluefruitle/config.xml | 12 + .../examples/bluefruitle/hooks/README.md | 83 + .../examples/bluefruitle/www/css/index.css | 77 + .../examples/bluefruitle/www/index.html | 34 + .../examples/bluefruitle/www/js/index.js | 159 + .../examples/heartrate/README.md | 9 + .../examples/heartrate/config.xml | 12 + .../examples/heartrate/hooks/README.md | 196 + .../examples/heartrate/www/css/index.css | 27 + .../examples/heartrate/www/index.html | 20 + .../examples/heartrate/www/js/index.js | 83 + .../examples/metawear/.npmignore | 2 + .../examples/metawear/README.md | 18 + .../examples/metawear/config.xml | 12 + .../examples/metawear/hooks/README.md | 83 + .../examples/metawear/www/css/index.css | 95 + .../examples/metawear/www/index.html | 37 + .../examples/metawear/www/js/index.js | 156 + .../examples/redbearlab/.npmignore | 2 + .../examples/redbearlab/README.md | 18 + .../examples/redbearlab/config.xml | 12 + .../examples/redbearlab/hooks/README.md | 83 + .../examples/redbearlab/www/css/index.css | 77 + .../examples/redbearlab/www/index.html | 34 + .../examples/redbearlab/www/js/index.js | 124 + .../examples/rfduinoLedButton/.npmignore | 2 + .../examples/rfduinoLedButton/README.md | 16 + .../examples/rfduinoLedButton/config.xml | 13 + .../examples/rfduinoLedButton/hooks/README.md | 83 + .../rfduinoLedButton/www/css/index.css | 61 + .../examples/rfduinoLedButton/www/index.html | 31 + .../examples/rfduinoLedButton/www/js/index.js | 186 + .../examples/robosmart/.npmignore | 2 + .../examples/robosmart/README.md | 15 + .../examples/robosmart/config.xml | 13 + .../examples/robosmart/hooks/README.md | 83 + .../examples/robosmart/www/css/index.css | 66 + .../examples/robosmart/www/index.html | 37 + .../examples/robosmart/www/js/index.js | 157 + .../examples/sensortag/.npmignore | 2 + .../examples/sensortag/README.md | 17 + .../examples/sensortag/config.xml | 13 + .../examples/sensortag/hooks/README.md | 83 + .../examples/sensortag/www/css/index.css | 61 + .../examples/sensortag/www/index.html | 31 + .../examples/sensortag/www/js/index.js | 141 + .../examples/sensortag_cc2650/.npmignore | 2 + .../examples/sensortag_cc2650/README.md | 18 + .../examples/sensortag_cc2650/config.xml | 13 + .../examples/sensortag_cc2650/hooks/README.md | 83 + .../sensortag_cc2650/www/css/index.css | 61 + .../examples/sensortag_cc2650/www/index.html | 32 + .../examples/sensortag_cc2650/www/js/index.js | 216 + .../cordova-plugin-ble-central/package.json | 35 + plugins/cordova-plugin-ble-central/plugin.xml | 90 + .../src/android/BLECentralPlugin.java | 587 ++ .../src/android/BLECommand.java | 61 + .../src/android/Helper.java | 158 + .../src/android/Peripheral.java | 645 ++ .../src/android/UUIDHelper.java | 47 + .../src/browser/BLECentralPlugin.js | 78 + .../src/ios/BLECentralPlugin.h | 69 + .../src/ios/BLECentralPlugin.m | 801 +++ .../src/ios/BLECommandContext.h | 16 + .../src/ios/BLECommandContext.m | 10 + .../src/ios/CBPeripheral+Extensions.h | 37 + .../src/ios/CBPeripheral+Extensions.m | 282 + .../src/wp/BLECentralPlugin.cs | 132 + .../tests/plugin.xml | 11 + .../cordova-plugin-ble-central/tests/tests.js | 71 + plugins/cordova-plugin-ble-central/www/ble.js | 164 + plugins/cordova-plugin-compat/README.md | 25 + plugins/cordova-plugin-compat/package.json | 32 + plugins/cordova-plugin-compat/plugin.xml | 36 + .../src/android/PermissionHelper.java | 138 + .../cordova-plugin-whitelist/CONTRIBUTING.md | 37 + plugins/cordova-plugin-whitelist/LICENSE | 202 + plugins/cordova-plugin-whitelist/NOTICE | 5 + plugins/cordova-plugin-whitelist/README.md | 151 + .../cordova-plugin-whitelist/RELEASENOTES.md | 55 + .../cordova-plugin-whitelist/doc/de/README.md | 148 + .../cordova-plugin-whitelist/doc/es/README.md | 148 + .../cordova-plugin-whitelist/doc/fr/README.md | 148 + .../cordova-plugin-whitelist/doc/it/README.md | 148 + .../cordova-plugin-whitelist/doc/ja/README.md | 148 + .../cordova-plugin-whitelist/doc/ko/README.md | 148 + .../cordova-plugin-whitelist/doc/pl/README.md | 148 + .../cordova-plugin-whitelist/doc/zh/README.md | 148 + plugins/cordova-plugin-whitelist/package.json | 28 + plugins/cordova-plugin-whitelist/plugin.xml | 50 + .../src/android/WhitelistPlugin.java | 161 + plugins/fetch.json | 26 + plugins/ios.json | 22 + www/css/app.css | 280 + www/css/index.css | 115 + www/css/material-icons.css | 15 + www/css/mui.css | 1912 ++++++ www/css/mui.custom.css | 1912 ++++++ www/css/mui.min.css | 1 + www/img/logo.png | Bin 0 -> 21814 bytes www/index.html | 91 + www/js/device/CC2650/cc2650_accelerometer.js | 169 + www/js/device/CC2650/cc2650_barometer.js | 106 + www/js/device/CC2650/cc2650_luxometer.js | 103 + www/js/index.js | 224 + www/js/standards/battery.js | 52 + www/js/standards/button.js | 96 + www/js/standards/capability.js | 78 + www/js/test.js | 55 + www/libs/bluebird/.bower.json | 44 + www/libs/bluebird/API.md | 1 + www/libs/bluebird/CONTRIBUTING.md | 9 + www/libs/bluebird/LICENSE | 21 + www/libs/bluebird/README.md | 51 + www/libs/bluebird/bench | 37 + www/libs/bluebird/bower.json | 34 + www/libs/bluebird/build | 2 + www/libs/bluebird/changelog.md | 1 + www/libs/bluebird/deprecated_apis.md | 1 + www/libs/bluebird/docs/Gemfile | 8 + www/libs/bluebird/docs/README.md | 5 + www/libs/bluebird/docs/_config.yml | 35 + www/libs/bluebird/docs/_layouts/api.html | 9 + www/libs/bluebird/docs/_layouts/default.html | 136 + www/libs/bluebird/docs/_layouts/page.html | 14 + www/libs/bluebird/docs/_plugins/mdate.rb | 19 + www/libs/bluebird/docs/_plugins/plugin.rb | 55 + www/libs/bluebird/docs/css/main.css | 181 + www/libs/bluebird/docs/css/mono-blue.css | 80 + www/libs/bluebird/docs/docs/anti-patterns.md | 172 + www/libs/bluebird/docs/docs/api-reference.md | 95 + .../bluebird/docs/docs/api/aggregateerror.md | 49 + www/libs/bluebird/docs/docs/api/all.md | 31 + www/libs/bluebird/docs/docs/api/any.md | 31 + www/libs/bluebird/docs/docs/api/ascallback.md | 114 + www/libs/bluebird/docs/docs/api/bind.md | 31 + .../docs/docs/api/built-in-error-types.md | 31 + www/libs/bluebird/docs/docs/api/call.md | 101 + www/libs/bluebird/docs/docs/api/cancel.md | 33 + .../bluebird/docs/docs/api/cancellation.md | 112 + .../docs/docs/api/cancellationerror.md | 32 + www/libs/bluebird/docs/docs/api/catch.md | 227 + .../bluebird/docs/docs/api/catchreturn.md | 43 + www/libs/bluebird/docs/docs/api/catchthrow.md | 43 + .../bluebird/docs/docs/api/collections.md | 32 + www/libs/bluebird/docs/docs/api/core.md | 27 + .../docs/docs/api/deferred-migration.md | 44 + www/libs/bluebird/docs/docs/api/delay.md | 31 + www/libs/bluebird/docs/docs/api/disposer.md | 158 + www/libs/bluebird/docs/docs/api/done.md | 37 + www/libs/bluebird/docs/docs/api/each.md | 51 + .../docs/docs/api/environment-variables.md | 41 + .../api/error-management-configuration.md | 107 + www/libs/bluebird/docs/docs/api/error.md | 101 + www/libs/bluebird/docs/docs/api/filter.md | 34 + www/libs/bluebird/docs/docs/api/finally.md | 97 + www/libs/bluebird/docs/docs/api/generators.md | 27 + www/libs/bluebird/docs/docs/api/get.md | 59 + .../bluebird/docs/docs/api/iscancelled.md | 31 + .../bluebird/docs/docs/api/isfulfilled.md | 31 + www/libs/bluebird/docs/docs/api/ispending.md | 32 + www/libs/bluebird/docs/docs/api/isrejected.md | 31 + www/libs/bluebird/docs/docs/api/map.md | 34 + www/libs/bluebird/docs/docs/api/mapseries.md | 31 + .../bluebird/docs/docs/api/new-promise.md | 79 + .../docs/docs/api/operationalerror.md | 35 + .../docs/docs/api/progression-migration.md | 105 + .../bluebird/docs/docs/api/promise.all.md | 47 + .../bluebird/docs/docs/api/promise.any.md | 31 + .../bluebird/docs/docs/api/promise.bind.md | 177 + .../bluebird/docs/docs/api/promise.config.md | 84 + .../api/promise.coroutine.addyieldhandler.md | 122 + .../docs/docs/api/promise.coroutine.md | 76 + .../bluebird/docs/docs/api/promise.delay.md | 47 + .../bluebird/docs/docs/api/promise.each.md | 42 + .../bluebird/docs/docs/api/promise.filter.md | 74 + .../docs/docs/api/promise.fromcallback.md | 80 + .../bluebird/docs/docs/api/promise.join.md | 87 + .../docs/docs/api/promise.longstacktraces.md | 93 + .../bluebird/docs/docs/api/promise.map.md | 138 + .../docs/docs/api/promise.mapseries.md | 57 + .../bluebird/docs/docs/api/promise.method.md | 72 + .../docs/docs/api/promise.noconflict.md | 47 + .../promise.onpossiblyunhandledrejection.md | 42 + .../promise.onunhandledrejectionhandled.md | 53 + .../docs/docs/api/promise.promisify.md | 78 + .../docs/docs/api/promise.promisifyall.md | 262 + .../bluebird/docs/docs/api/promise.props.md | 108 + .../bluebird/docs/docs/api/promise.race.md | 33 + .../bluebird/docs/docs/api/promise.reduce.md | 53 + .../bluebird/docs/docs/api/promise.reject.md | 32 + .../bluebird/docs/docs/api/promise.resolve.md | 47 + .../docs/docs/api/promise.setscheduler.md | 54 + .../bluebird/docs/docs/api/promise.some.md | 62 + .../bluebird/docs/docs/api/promise.try.md | 50 + .../bluebird/docs/docs/api/promise.using.md | 116 + .../docs/docs/api/promiseinspection.md | 38 + .../bluebird/docs/docs/api/promisification.md | 150 + www/libs/bluebird/docs/docs/api/props.md | 31 + www/libs/bluebird/docs/docs/api/race.md | 31 + www/libs/bluebird/docs/docs/api/reason.md | 36 + www/libs/bluebird/docs/docs/api/reduce.md | 34 + www/libs/bluebird/docs/docs/api/reflect.md | 66 + .../docs/docs/api/resource-management.md | 67 + www/libs/bluebird/docs/docs/api/return.md | 75 + www/libs/bluebird/docs/docs/api/some.md | 31 + www/libs/bluebird/docs/docs/api/spread.md | 69 + .../docs/api/suppressunhandledrejections.md | 82 + .../docs/docs/api/synchronous-inspection.md | 72 + www/libs/bluebird/docs/docs/api/tap.md | 63 + www/libs/bluebird/docs/docs/api/then.md | 35 + www/libs/bluebird/docs/docs/api/throw.md | 45 + www/libs/bluebird/docs/docs/api/timeout.md | 54 + .../bluebird/docs/docs/api/timeouterror.md | 32 + www/libs/bluebird/docs/docs/api/timers.md | 29 + www/libs/bluebird/docs/docs/api/utility.md | 29 + www/libs/bluebird/docs/docs/api/value.md | 34 + www/libs/bluebird/docs/docs/async-dialogs.md | 6 + .../bluebird/docs/docs/beginners-guide.md | 6 + www/libs/bluebird/docs/docs/benchmarks.md | 115 + www/libs/bluebird/docs/docs/changelog.md | 1884 ++++++ .../docs/docs/coming-from-other-languages.md | 86 + .../docs/docs/coming-from-other-libraries.md | 320 + www/libs/bluebird/docs/docs/contribute.md | 144 + .../bluebird/docs/docs/deprecated-apis.md | 106 + .../bluebird/docs/docs/deprecated_apis.md | 102 + .../docs/docs/download-api-reference.md | 6 + .../bluebird/docs/docs/error-explanations.md | 360 ++ www/libs/bluebird/docs/docs/features.md | 311 + .../bluebird/docs/docs/getting-started.md | 34 + www/libs/bluebird/docs/docs/install.md | 90 + .../bluebird/docs/docs/new-in-bluebird-3.md | 64 + www/libs/bluebird/docs/docs/support.md | 26 + .../docs/docs/warning-explanations.md | 85 + .../docs/docs/what-about-generators.md | 6 + www/libs/bluebird/docs/docs/why-bluebird.md | 22 + .../bluebird/docs/docs/why-performance.md | 6 + www/libs/bluebird/docs/docs/why-promises.md | 127 + .../docs/docs/working-with-callbacks.md | 463 ++ www/libs/bluebird/docs/helpers.rb | 16 + www/libs/bluebird/docs/img/favicon.png | Bin 0 -> 4807 bytes www/libs/bluebird/docs/img/logo.png | Bin 0 -> 8883 bytes www/libs/bluebird/docs/index.html | 8 + www/libs/bluebird/issue_template.md | 12 + www/libs/bluebird/js/browser/bluebird.core.js | 3652 +++++++++++ .../bluebird/js/browser/bluebird.core.min.js | 31 + www/libs/bluebird/js/browser/bluebird.js | 5474 +++++++++++++++++ www/libs/bluebird/js/browser/bluebird.min.js | 31 + www/libs/bluebird/package.json | 76 + www/libs/bluebird/src/any.js | 25 + www/libs/bluebird/src/assert.js | 55 + www/libs/bluebird/src/async.js | 174 + www/libs/bluebird/src/bind.js | 67 + www/libs/bluebird/src/bluebird.js | 11 + www/libs/bluebird/src/call_get.js | 123 + www/libs/bluebird/src/cancel.js | 132 + www/libs/bluebird/src/catch_filter.js | 42 + www/libs/bluebird/src/constants.js | 149 + www/libs/bluebird/src/context.js | 69 + www/libs/bluebird/src/debuggability.js | 887 +++ www/libs/bluebird/src/direct_resolve.js | 46 + www/libs/bluebird/src/each.js | 29 + www/libs/bluebird/src/errors.js | 117 + www/libs/bluebird/src/es5.js | 80 + www/libs/bluebird/src/filter.js | 12 + www/libs/bluebird/src/finally.js | 111 + www/libs/bluebird/src/generators.js | 226 + www/libs/bluebird/src/join.js | 149 + www/libs/bluebird/src/map.js | 181 + www/libs/bluebird/src/method.js | 57 + www/libs/bluebird/src/nodeback.js | 51 + www/libs/bluebird/src/nodeify.js | 62 + www/libs/bluebird/src/promise.js | 773 +++ www/libs/bluebird/src/promise_array.js | 201 + www/libs/bluebird/src/promisify.js | 326 + www/libs/bluebird/src/props.js | 125 + www/libs/bluebird/src/queue.js | 96 + www/libs/bluebird/src/race.js | 50 + www/libs/bluebird/src/reduce.js | 168 + www/libs/bluebird/src/schedule.js | 76 + www/libs/bluebird/src/settle.js | 51 + www/libs/bluebird/src/some.js | 159 + .../bluebird/src/synchronous_inspection.js | 96 + www/libs/bluebird/src/thenables.js | 89 + www/libs/bluebird/src/timers.js | 92 + www/libs/bluebird/src/using.js | 226 + www/libs/bluebird/src/util.js | 381 ++ www/libs/bluebird/tests | 2 + www/libs/bluebird/tools/README.md | 19 + www/libs/bluebird/tools/ast_passes.js | 708 +++ .../bluebird/tools/browser_test_generator.js | 51 + .../bluebird/tools/browser_test_runner.js | 97 + www/libs/bluebird/tools/build.js | 337 + .../bluebird/tools/job-runner/job-runner.js | 557 ++ www/libs/bluebird/tools/jshint.js | 20 + www/libs/bluebird/tools/jshintrc_generator.js | 52 + www/libs/bluebird/tools/mocha_runner.js | 143 + www/libs/bluebird/tools/saucelabs_runner.js | 198 + www/libs/bluebird/tools/test.js | 301 + www/libs/bluebird/tools/utils.js | 218 + www/libs/jquery/.bower.json | 25 + www/libs/jquery/AUTHORS.txt | 278 + www/libs/jquery/LICENSE.txt | 36 + www/libs/jquery/README.md | 65 + www/libs/jquery/bower.json | 14 + www/libs/jquery/sizzle/LICENSE.txt | 36 + www/libs/jquery/src/.jshintrc | 29 + www/libs/jquery/src/ajax.js | 845 +++ www/libs/jquery/src/ajax/jsonp.js | 100 + www/libs/jquery/src/ajax/load.js | 83 + www/libs/jquery/src/ajax/parseJSON.js | 13 + www/libs/jquery/src/ajax/parseXML.js | 27 + www/libs/jquery/src/ajax/script.js | 68 + www/libs/jquery/src/ajax/var/location.js | 3 + www/libs/jquery/src/ajax/var/nonce.js | 5 + www/libs/jquery/src/ajax/var/rquery.js | 3 + www/libs/jquery/src/ajax/xhr.js | 167 + www/libs/jquery/src/attributes.js | 11 + www/libs/jquery/src/attributes/attr.js | 142 + www/libs/jquery/src/attributes/classes.js | 177 + www/libs/jquery/src/attributes/prop.js | 125 + www/libs/jquery/src/attributes/support.js | 36 + www/libs/jquery/src/attributes/val.js | 177 + www/libs/jquery/src/callbacks.js | 232 + www/libs/jquery/src/core.js | 494 ++ www/libs/jquery/src/core/DOMEval.js | 14 + www/libs/jquery/src/core/access.js | 65 + www/libs/jquery/src/core/init.js | 134 + www/libs/jquery/src/core/parseHTML.js | 41 + www/libs/jquery/src/core/ready.js | 103 + www/libs/jquery/src/core/support.js | 18 + www/libs/jquery/src/core/var/rsingleTag.js | 5 + www/libs/jquery/src/css.js | 515 ++ www/libs/jquery/src/css/addGetHookIf.js | 24 + www/libs/jquery/src/css/adjustCSS.js | 65 + www/libs/jquery/src/css/curCSS.js | 60 + www/libs/jquery/src/css/defaultDisplay.js | 72 + .../jquery/src/css/hiddenVisibleSelectors.js | 18 + www/libs/jquery/src/css/showHide.js | 48 + www/libs/jquery/src/css/support.js | 121 + www/libs/jquery/src/css/var/cssExpand.js | 3 + www/libs/jquery/src/css/var/getStyles.js | 15 + www/libs/jquery/src/css/var/isHidden.js | 16 + www/libs/jquery/src/css/var/rmargin.js | 3 + www/libs/jquery/src/css/var/rnumnonpx.js | 5 + www/libs/jquery/src/css/var/swap.js | 24 + www/libs/jquery/src/data.js | 187 + www/libs/jquery/src/data/Data.js | 200 + www/libs/jquery/src/data/accepts.js | 20 + www/libs/jquery/src/data/support.js | 23 + www/libs/jquery/src/data/var/acceptData.js | 18 + www/libs/jquery/src/data/var/dataPriv.js | 5 + www/libs/jquery/src/data/var/dataUser.js | 5 + www/libs/jquery/src/deferred.js | 158 + www/libs/jquery/src/deferred/exceptionHook.js | 19 + www/libs/jquery/src/deprecated.js | 32 + www/libs/jquery/src/dimensions.js | 54 + www/libs/jquery/src/effects.js | 629 ++ www/libs/jquery/src/effects/Tween.js | 121 + .../jquery/src/effects/animatedSelector.js | 13 + www/libs/jquery/src/effects/support.js | 58 + www/libs/jquery/src/event.js | 710 +++ www/libs/jquery/src/event/ajax.js | 20 + www/libs/jquery/src/event/alias.js | 27 + www/libs/jquery/src/event/focusin.js | 53 + www/libs/jquery/src/event/support.js | 9 + www/libs/jquery/src/event/trigger.js | 199 + www/libs/jquery/src/exports/amd.js | 24 + www/libs/jquery/src/exports/global.js | 26 + www/libs/jquery/src/intro.js | 44 + www/libs/jquery/src/jquery.js | 37 + www/libs/jquery/src/manipulation.js | 481 ++ www/libs/jquery/src/manipulation/_evalUrl.js | 20 + .../jquery/src/manipulation/buildFragment.js | 102 + .../src/manipulation/createSafeFragment.js | 20 + www/libs/jquery/src/manipulation/getAll.js | 21 + .../jquery/src/manipulation/setGlobalEval.js | 20 + www/libs/jquery/src/manipulation/support.js | 33 + .../jquery/src/manipulation/var/nodeNames.js | 5 + .../src/manipulation/var/rcheckableType.js | 3 + .../manipulation/var/rleadingWhitespace.js | 3 + .../src/manipulation/var/rscriptType.js | 3 + .../jquery/src/manipulation/var/rtagName.js | 3 + www/libs/jquery/src/manipulation/wrapMap.js | 27 + www/libs/jquery/src/offset.js | 218 + www/libs/jquery/src/outro.js | 2 + www/libs/jquery/src/queue.js | 143 + www/libs/jquery/src/queue/delay.js | 22 + www/libs/jquery/src/selector-native.js | 211 + www/libs/jquery/src/selector-sizzle.js | 14 + www/libs/jquery/src/selector.js | 1 + www/libs/jquery/src/serialize.js | 125 + www/libs/jquery/src/support.js | 63 + www/libs/jquery/src/traversing.js | 175 + www/libs/jquery/src/traversing/findFilter.js | 100 + www/libs/jquery/src/traversing/var/dir.js | 20 + .../src/traversing/var/rneedsContext.js | 6 + .../jquery/src/traversing/var/siblings.js | 15 + www/libs/jquery/src/var/arr.js | 3 + www/libs/jquery/src/var/class2type.js | 5 + www/libs/jquery/src/var/concat.js | 5 + www/libs/jquery/src/var/deletedIds.js | 3 + www/libs/jquery/src/var/document.js | 3 + www/libs/jquery/src/var/documentElement.js | 5 + www/libs/jquery/src/var/hasOwn.js | 5 + www/libs/jquery/src/var/indexOf.js | 5 + www/libs/jquery/src/var/pnum.js | 3 + www/libs/jquery/src/var/push.js | 5 + www/libs/jquery/src/var/rcssNum.js | 7 + www/libs/jquery/src/var/rnotwhite.js | 3 + www/libs/jquery/src/var/slice.js | 5 + www/libs/jquery/src/var/support.js | 5 + www/libs/jquery/src/var/toString.js | 5 + www/libs/jquery/src/wrap.js | 79 + www/libs/mui/.bower.json | 50 + www/libs/mui/AUTHORS.txt | 8 + www/libs/mui/CHANGELOG.md | 382 ++ www/libs/mui/LICENSE.txt | 31 + www/libs/mui/README.md | 165 + www/libs/mui/RELEASE.md | 45 + www/libs/mui/bower.json | 42 + .../mui/packages/cdn/angular/mui-angular.js | 1858 ++++++ .../packages/cdn/angular/mui-angular.min.js | 1 + www/libs/mui/packages/cdn/css/mui.css | 2522 ++++++++ www/libs/mui/packages/cdn/css/mui.min.css | 1 + .../packages/cdn/email/mui-email-inline.css | 686 +++ .../packages/cdn/email/mui-email-styletag.css | 36 + .../cdn/extra/mui-angular-combined.js | 2 + .../mui/packages/cdn/extra/mui-colors.css | 1 + .../mui/packages/cdn/extra/mui-combined.js | 2 + .../packages/cdn/extra/mui-react-combined.js | 2 + www/libs/mui/packages/cdn/js/mui.js | 1809 ++++++ www/libs/mui/packages/cdn/js/mui.min.js | 1 + www/libs/mui/packages/cdn/react/mui-react.js | 3208 ++++++++++ .../mui/packages/cdn/react/mui-react.min.js | 2 + .../cdn/webcomponents/mui-webcomponents.js | 1023 +++ .../webcomponents/mui-webcomponents.min.js | 2 + www/libs/mui/packages/meteor/LICENSE.txt | 31 + www/libs/mui/packages/meteor/README.md | 45 + www/libs/mui/packages/meteor/lib/css/mui.css | 2522 ++++++++ .../mui/packages/meteor/lib/css/mui.min.css | 1 + www/libs/mui/packages/meteor/lib/js/mui.js | 1809 ++++++ .../mui/packages/meteor/lib/js/mui.min.js | 1 + www/libs/mui/packages/meteor/package.js | 22 + www/libs/mui/packages/npm/LICENSE.txt | 31 + www/libs/mui/packages/npm/README.md | 487 ++ www/libs/mui/packages/npm/angular.js | 31 + www/libs/mui/packages/npm/index.js | 9 + .../mui/packages/npm/lib/angular/appbar.js | 34 + .../packages/npm/lib/angular/babel-helpers.js | 34 + .../mui/packages/npm/lib/angular/button.js | 100 + .../mui/packages/npm/lib/angular/caret.js | 27 + .../mui/packages/npm/lib/angular/checkbox.js | 35 + www/libs/mui/packages/npm/lib/angular/col.js | 52 + .../mui/packages/npm/lib/angular/container.js | 40 + .../mui/packages/npm/lib/angular/divider.js | 29 + .../packages/npm/lib/angular/dropdown-item.js | 31 + .../mui/packages/npm/lib/angular/dropdown.js | 93 + www/libs/mui/packages/npm/lib/angular/form.js | 28 + .../mui/packages/npm/lib/angular/input.js | 146 + .../mui/packages/npm/lib/angular/panel.js | 34 + .../mui/packages/npm/lib/angular/radio.js | 35 + www/libs/mui/packages/npm/lib/angular/row.js | 34 + .../mui/packages/npm/lib/angular/select.js | 256 + www/libs/mui/packages/npm/lib/angular/tabs.js | 128 + www/libs/mui/packages/npm/lib/css/mui.css | 2522 ++++++++ www/libs/mui/packages/npm/lib/css/mui.min.css | 1 + www/libs/mui/packages/npm/lib/js/config.js | 10 + www/libs/mui/packages/npm/lib/js/lib/forms.js | 59 + .../mui/packages/npm/lib/js/lib/jqLite.js | 401 ++ www/libs/mui/packages/npm/lib/js/lib/util.js | 249 + www/libs/mui/packages/npm/lib/js/overlay.js | 192 + .../mui/packages/npm/lib/react/_helpers.js | 11 + www/libs/mui/packages/npm/lib/react/appbar.js | 52 + .../packages/npm/lib/react/babel-helpers.js | 108 + www/libs/mui/packages/npm/lib/react/button.js | 230 + www/libs/mui/packages/npm/lib/react/caret.js | 53 + .../mui/packages/npm/lib/react/checkbox.js | 93 + www/libs/mui/packages/npm/lib/react/col.js | 94 + .../mui/packages/npm/lib/react/container.js | 61 + .../mui/packages/npm/lib/react/divider.js | 53 + .../packages/npm/lib/react/dropdown-item.js | 85 + .../mui/packages/npm/lib/react/dropdown.js | 240 + www/libs/mui/packages/npm/lib/react/form.js | 61 + www/libs/mui/packages/npm/lib/react/input.js | 50 + www/libs/mui/packages/npm/lib/react/option.js | 75 + www/libs/mui/packages/npm/lib/react/panel.js | 52 + www/libs/mui/packages/npm/lib/react/radio.js | 87 + www/libs/mui/packages/npm/lib/react/row.js | 59 + www/libs/mui/packages/npm/lib/react/select.js | 449 ++ www/libs/mui/packages/npm/lib/react/tab.js | 57 + www/libs/mui/packages/npm/lib/react/tabs.js | 146 + .../mui/packages/npm/lib/react/text-field.js | 288 + .../mui/packages/npm/lib/react/textarea.js | 51 + .../mui/packages/npm/lib/sass/mui-colors.scss | 34 + www/libs/mui/packages/npm/lib/sass/mui.scss | 36 + .../packages/npm/lib/sass/mui/_appbar.scss | 44 + .../packages/npm/lib/sass/mui/_buttons.scss | 232 + .../npm/lib/sass/mui/_checkbox-and-radio.scss | 60 + .../packages/npm/lib/sass/mui/_colors.scss | 340 + .../npm/lib/sass/mui/_containers.scss | 24 + .../packages/npm/lib/sass/mui/_divider.scss | 25 + .../packages/npm/lib/sass/mui/_dropdown.scss | 90 + .../mui/packages/npm/lib/sass/mui/_form.scss | 40 + .../mui/packages/npm/lib/sass/mui/_grid.scss | 37 + .../packages/npm/lib/sass/mui/_helpers.scss | 326 + .../packages/npm/lib/sass/mui/_mixins.scss | 4 + .../packages/npm/lib/sass/mui/_overlay.scss | 14 + .../mui/packages/npm/lib/sass/mui/_panel.scss | 22 + .../packages/npm/lib/sass/mui/_reboot.scss | 182 + .../packages/npm/lib/sass/mui/_ripple.scss | 55 + .../packages/npm/lib/sass/mui/_select.scss | 111 + .../mui/packages/npm/lib/sass/mui/_table.scss | 44 + .../mui/packages/npm/lib/sass/mui/_tabs.scss | 75 + .../packages/npm/lib/sass/mui/_textfield.scss | 233 + .../npm/lib/sass/mui/_typography.scss | 51 + .../packages/npm/lib/sass/mui/_variables.scss | 293 + .../npm/lib/sass/mui/mixins/_buttons.scss | 52 + .../lib/sass/mui/mixins/_grid-framework.scss | 51 + .../npm/lib/sass/mui/mixins/_typography.scss | 78 + .../npm/lib/sass/mui/mixins/_util.scss | 45 + .../npm/lib/sass/normalize-3.0.3.scss | 424 ++ www/libs/mui/packages/npm/react.js | 27 + www/libs/mui/src/angular/appbar.js | 30 + www/libs/mui/src/angular/button.js | 94 + www/libs/mui/src/angular/caret.js | 23 + www/libs/mui/src/angular/checkbox.js | 39 + www/libs/mui/src/angular/col.js | 48 + www/libs/mui/src/angular/container.js | 36 + www/libs/mui/src/angular/divider.js | 25 + www/libs/mui/src/angular/dropdown-item.js | 27 + www/libs/mui/src/angular/dropdown.js | 99 + www/libs/mui/src/angular/form.js | 24 + www/libs/mui/src/angular/input.js | 159 + www/libs/mui/src/angular/panel.js | 30 + www/libs/mui/src/angular/radio.js | 39 + www/libs/mui/src/angular/row.js | 30 + www/libs/mui/src/angular/select.js | 284 + www/libs/mui/src/angular/tabs.js | 133 + www/libs/mui/src/email/mui-email-inline.scss | 28 + .../mui/src/email/mui-email-styletag.scss | 11 + www/libs/mui/src/email/mui-email/_body.scss | 20 + .../mui/src/email/mui-email/_buttons.scss | 250 + .../mui/src/email/mui-email/_containers.scss | 18 + .../mui/src/email/mui-email/_divider.scss | 25 + www/libs/mui/src/email/mui-email/_grid.scss | 32 + .../mui/src/email/mui-email/_helpers.scss | 46 + .../mui/src/email/mui-email/_normalize.scss | 60 + www/libs/mui/src/email/mui-email/_panel.scss | 13 + www/libs/mui/src/email/mui-email/_reboot.scss | 66 + .../mui/src/email/mui-email/_styletag.scss | 53 + .../mui/src/email/mui-email/_typography.scss | 51 + .../mui/src/email/mui-email/_variables.scss | 135 + www/libs/mui/src/js/config.js | 10 + www/libs/mui/src/js/dropdown.js | 111 + www/libs/mui/src/js/lib/forms.js | 59 + www/libs/mui/src/js/lib/jqLite.js | 401 ++ www/libs/mui/src/js/lib/util.js | 249 + www/libs/mui/src/js/overlay.js | 192 + www/libs/mui/src/js/ripple.js | 104 + www/libs/mui/src/js/select.js | 363 ++ www/libs/mui/src/js/tabs.js | 159 + www/libs/mui/src/js/textfield.js | 100 + www/libs/mui/src/react/_helpers.js | 14 + www/libs/mui/src/react/appbar.jsx | 34 + www/libs/mui/src/react/button.jsx | 186 + www/libs/mui/src/react/caret.jsx | 35 + www/libs/mui/src/react/checkbox.jsx | 68 + www/libs/mui/src/react/col.jsx | 72 + www/libs/mui/src/react/container.jsx | 44 + www/libs/mui/src/react/divider.jsx | 35 + www/libs/mui/src/react/dropdown-item.jsx | 59 + www/libs/mui/src/react/dropdown.jsx | 200 + www/libs/mui/src/react/form.jsx | 44 + www/libs/mui/src/react/input.jsx | 35 + www/libs/mui/src/react/option.jsx | 46 + www/libs/mui/src/react/panel.jsx | 34 + www/libs/mui/src/react/radio.jsx | 65 + www/libs/mui/src/react/row.jsx | 39 + www/libs/mui/src/react/select.jsx | 389 ++ www/libs/mui/src/react/tab.jsx | 40 + www/libs/mui/src/react/tabs.jsx | 116 + www/libs/mui/src/react/text-field.jsx | 239 + www/libs/mui/src/react/textarea.jsx | 36 + www/libs/mui/src/sass/mui-colors.scss | 34 + www/libs/mui/src/sass/mui.scss | 36 + www/libs/mui/src/sass/mui/_appbar.scss | 44 + www/libs/mui/src/sass/mui/_buttons.scss | 232 + .../mui/src/sass/mui/_checkbox-and-radio.scss | 60 + www/libs/mui/src/sass/mui/_colors.scss | 340 + www/libs/mui/src/sass/mui/_containers.scss | 24 + www/libs/mui/src/sass/mui/_divider.scss | 25 + www/libs/mui/src/sass/mui/_dropdown.scss | 90 + www/libs/mui/src/sass/mui/_form.scss | 40 + www/libs/mui/src/sass/mui/_grid.scss | 37 + www/libs/mui/src/sass/mui/_helpers.scss | 326 + www/libs/mui/src/sass/mui/_mixins.scss | 4 + www/libs/mui/src/sass/mui/_overlay.scss | 14 + www/libs/mui/src/sass/mui/_panel.scss | 22 + www/libs/mui/src/sass/mui/_reboot.scss | 182 + www/libs/mui/src/sass/mui/_ripple.scss | 55 + www/libs/mui/src/sass/mui/_select.scss | 111 + www/libs/mui/src/sass/mui/_table.scss | 44 + www/libs/mui/src/sass/mui/_tabs.scss | 75 + www/libs/mui/src/sass/mui/_textfield.scss | 233 + www/libs/mui/src/sass/mui/_typography.scss | 51 + www/libs/mui/src/sass/mui/_variables.scss | 293 + .../mui/src/sass/mui/mixins/_buttons.scss | 52 + .../src/sass/mui/mixins/_grid-framework.scss | 51 + .../mui/src/sass/mui/mixins/_typography.scss | 78 + www/libs/mui/src/sass/mui/mixins/_util.scss | 45 + www/libs/mui/src/sass/normalize-3.0.3.scss | 424 ++ www/libs/mui/src/webcomponents/buttons.js | 89 + www/libs/mui/src/webcomponents/forms.js | 133 + www/test.html | 22 + 1974 files changed, 285445 insertions(+) create mode 100644 .bowerrc create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 .jscsrc create mode 100644 .jshintrc create mode 100644 bower.json create mode 100644 config.xml create mode 100644 hooks/README.md create mode 100644 output.txt create mode 100644 platforms/android/.gitignore create mode 100644 platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties create mode 100644 platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties.lock create mode 100644 platforms/android/.gradle/2.2.1/taskArtifacts/fileHashes.bin create mode 100644 platforms/android/.gradle/2.2.1/taskArtifacts/fileSnapshots.bin create mode 100644 platforms/android/.gradle/2.2.1/taskArtifacts/outputFileStates.bin create mode 100644 platforms/android/.gradle/2.2.1/taskArtifacts/taskArtifacts.bin create mode 100644 platforms/android/AndroidManifest.xml create mode 100755 platforms/android/CordovaLib/AndroidManifest.xml create mode 100644 platforms/android/CordovaLib/build.gradle create mode 100644 platforms/android/CordovaLib/cordova.gradle create mode 100644 platforms/android/CordovaLib/project.properties create mode 100644 platforms/android/CordovaLib/src/org/apache/cordova/AuthenticationToken.java create mode 100644 platforms/android/CordovaLib/src/org/apache/cordova/CallbackContext.java create mode 100644 platforms/android/CordovaLib/src/org/apache/cordova/Config.java create mode 100644 platforms/android/CordovaLib/src/org/apache/cordova/ConfigXmlParser.java create mode 100755 platforms/android/CordovaLib/src/org/apache/cordova/CordovaActivity.java create mode 100644 platforms/android/CordovaLib/src/org/apache/cordova/CordovaArgs.java create mode 100644 platforms/android/CordovaLib/src/org/apache/cordova/CordovaBridge.java create mode 100644 platforms/android/CordovaLib/src/org/apache/cordova/CordovaClientCertRequest.java create mode 100644 platforms/android/CordovaLib/src/org/apache/cordova/CordovaDialogsHelper.java create mode 100644 platforms/android/CordovaLib/src/org/apache/cordova/CordovaHttpAuthHandler.java create mode 100755 platforms/android/CordovaLib/src/org/apache/cordova/CordovaInterface.java create mode 100644 platforms/android/CordovaLib/src/org/apache/cordova/CordovaInterfaceImpl.java create mode 100644 platforms/android/CordovaLib/src/org/apache/cordova/CordovaPlugin.java create mode 100644 platforms/android/CordovaLib/src/org/apache/cordova/CordovaPreferences.java create mode 100644 platforms/android/CordovaLib/src/org/apache/cordova/CordovaResourceApi.java create mode 100644 platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebView.java create mode 100644 platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebViewEngine.java create mode 100644 platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebViewImpl.java create mode 100755 platforms/android/CordovaLib/src/org/apache/cordova/CoreAndroid.java create mode 100644 platforms/android/CordovaLib/src/org/apache/cordova/ExposedJsApi.java create mode 100644 platforms/android/CordovaLib/src/org/apache/cordova/ICordovaClientCertRequest.java create mode 100644 platforms/android/CordovaLib/src/org/apache/cordova/ICordovaCookieManager.java create mode 100644 platforms/android/CordovaLib/src/org/apache/cordova/ICordovaHttpAuthHandler.java create mode 100755 platforms/android/CordovaLib/src/org/apache/cordova/LOG.java create mode 100755 platforms/android/CordovaLib/src/org/apache/cordova/NativeToJsMessageQueue.java create mode 100755 platforms/android/CordovaLib/src/org/apache/cordova/PluginEntry.java create mode 100755 platforms/android/CordovaLib/src/org/apache/cordova/PluginManager.java create mode 100644 platforms/android/CordovaLib/src/org/apache/cordova/PluginResult.java create mode 100644 platforms/android/CordovaLib/src/org/apache/cordova/ResumeCallback.java create mode 100644 platforms/android/CordovaLib/src/org/apache/cordova/Whitelist.java create mode 100644 platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemCookieManager.java create mode 100755 platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemExposedJsApi.java create mode 100755 platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebChromeClient.java create mode 100644 platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebView.java create mode 100755 platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebViewClient.java create mode 100755 platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebViewEngine.java create mode 100644 platforms/android/android.json create mode 100644 platforms/android/assets/www/cordova-js-src/android/nativeapiprovider.js create mode 100644 platforms/android/assets/www/cordova-js-src/android/promptbasednativeapi.js create mode 100644 platforms/android/assets/www/cordova-js-src/exec.js create mode 100644 platforms/android/assets/www/cordova-js-src/platform.js create mode 100644 platforms/android/assets/www/cordova-js-src/plugin/android/app.js create mode 100644 platforms/android/assets/www/cordova.js create mode 100644 platforms/android/assets/www/cordova_plugins.js create mode 100644 platforms/android/assets/www/css/app.css create mode 100644 platforms/android/assets/www/css/index.css create mode 100644 platforms/android/assets/www/css/material-icons.css create mode 100644 platforms/android/assets/www/css/mui.css create mode 100644 platforms/android/assets/www/css/mui.custom.css create mode 100644 platforms/android/assets/www/css/mui.min.css create mode 100644 platforms/android/assets/www/img/logo.png create mode 100644 platforms/android/assets/www/index.html create mode 100644 platforms/android/assets/www/js/device/CC2650/cc2650_accelerometer.js create mode 100644 platforms/android/assets/www/js/device/CC2650/cc2650_barometer.js create mode 100644 platforms/android/assets/www/js/device/CC2650/cc2650_luxometer.js create mode 100644 platforms/android/assets/www/js/index.js create mode 100644 platforms/android/assets/www/js/standards/battery.js create mode 100644 platforms/android/assets/www/js/standards/button.js create mode 100644 platforms/android/assets/www/js/standards/capability.js create mode 100644 platforms/android/assets/www/js/test.js create mode 100644 platforms/android/assets/www/libs/bluebird/.bower.json create mode 100644 platforms/android/assets/www/libs/bluebird/API.md create mode 100644 platforms/android/assets/www/libs/bluebird/CONTRIBUTING.md create mode 100644 platforms/android/assets/www/libs/bluebird/LICENSE create mode 100644 platforms/android/assets/www/libs/bluebird/README.md create mode 100755 platforms/android/assets/www/libs/bluebird/bench create mode 100644 platforms/android/assets/www/libs/bluebird/bower.json create mode 100755 platforms/android/assets/www/libs/bluebird/build create mode 100644 platforms/android/assets/www/libs/bluebird/changelog.md create mode 100644 platforms/android/assets/www/libs/bluebird/deprecated_apis.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/Gemfile create mode 100644 platforms/android/assets/www/libs/bluebird/docs/README.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/_config.yml create mode 100644 platforms/android/assets/www/libs/bluebird/docs/_layouts/api.html create mode 100644 platforms/android/assets/www/libs/bluebird/docs/_layouts/default.html create mode 100644 platforms/android/assets/www/libs/bluebird/docs/_layouts/page.html create mode 100644 platforms/android/assets/www/libs/bluebird/docs/_plugins/mdate.rb create mode 100644 platforms/android/assets/www/libs/bluebird/docs/_plugins/plugin.rb create mode 100644 platforms/android/assets/www/libs/bluebird/docs/css/main.css create mode 100644 platforms/android/assets/www/libs/bluebird/docs/css/mono-blue.css create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/anti-patterns.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api-reference.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/aggregateerror.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/all.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/any.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/ascallback.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/bind.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/built-in-error-types.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/call.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/cancel.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/cancellation.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/cancellationerror.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/catch.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/catchreturn.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/catchthrow.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/collections.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/core.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/deferred-migration.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/delay.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/disposer.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/done.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/each.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/environment-variables.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/error-management-configuration.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/error.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/filter.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/finally.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/generators.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/get.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/iscancelled.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/isfulfilled.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/ispending.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/isrejected.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/map.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/mapseries.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/new-promise.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/operationalerror.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/progression-migration.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.all.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.any.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.bind.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.config.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.coroutine.addyieldhandler.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.coroutine.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.delay.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.each.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.filter.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.fromcallback.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.join.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.longstacktraces.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.map.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.mapseries.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.method.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.noconflict.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.onpossiblyunhandledrejection.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.onunhandledrejectionhandled.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.promisify.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.promisifyall.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.props.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.race.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.reduce.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.reject.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.resolve.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.setscheduler.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.some.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.try.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.using.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/promiseinspection.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/promisification.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/props.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/race.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/reason.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/reduce.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/reflect.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/resource-management.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/return.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/some.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/spread.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/suppressunhandledrejections.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/synchronous-inspection.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/tap.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/then.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/throw.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/timeout.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/timeouterror.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/timers.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/utility.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/api/value.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/async-dialogs.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/beginners-guide.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/benchmarks.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/changelog.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/coming-from-other-languages.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/coming-from-other-libraries.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/contribute.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/deprecated-apis.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/deprecated_apis.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/download-api-reference.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/error-explanations.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/features.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/getting-started.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/install.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/new-in-bluebird-3.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/support.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/warning-explanations.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/what-about-generators.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/why-bluebird.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/why-performance.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/why-promises.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/docs/working-with-callbacks.md create mode 100644 platforms/android/assets/www/libs/bluebird/docs/helpers.rb create mode 100755 platforms/android/assets/www/libs/bluebird/docs/img/favicon.png create mode 100644 platforms/android/assets/www/libs/bluebird/docs/img/logo.png create mode 100644 platforms/android/assets/www/libs/bluebird/docs/index.html create mode 100644 platforms/android/assets/www/libs/bluebird/issue_template.md create mode 100644 platforms/android/assets/www/libs/bluebird/js/browser/bluebird.core.js create mode 100644 platforms/android/assets/www/libs/bluebird/js/browser/bluebird.core.min.js create mode 100644 platforms/android/assets/www/libs/bluebird/js/browser/bluebird.js create mode 100644 platforms/android/assets/www/libs/bluebird/js/browser/bluebird.min.js create mode 100644 platforms/android/assets/www/libs/bluebird/package.json create mode 100644 platforms/android/assets/www/libs/bluebird/src/any.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/assert.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/async.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/bind.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/bluebird.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/call_get.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/cancel.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/catch_filter.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/constants.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/context.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/debuggability.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/direct_resolve.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/each.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/errors.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/es5.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/filter.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/finally.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/generators.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/join.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/map.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/method.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/nodeback.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/nodeify.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/promise.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/promise_array.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/promisify.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/props.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/queue.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/race.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/reduce.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/schedule.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/settle.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/some.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/synchronous_inspection.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/thenables.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/timers.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/using.js create mode 100644 platforms/android/assets/www/libs/bluebird/src/util.js create mode 100755 platforms/android/assets/www/libs/bluebird/tests create mode 100644 platforms/android/assets/www/libs/bluebird/tools/README.md create mode 100644 platforms/android/assets/www/libs/bluebird/tools/ast_passes.js create mode 100644 platforms/android/assets/www/libs/bluebird/tools/browser_test_generator.js create mode 100644 platforms/android/assets/www/libs/bluebird/tools/browser_test_runner.js create mode 100644 platforms/android/assets/www/libs/bluebird/tools/build.js create mode 100644 platforms/android/assets/www/libs/bluebird/tools/job-runner/job-runner.js create mode 100644 platforms/android/assets/www/libs/bluebird/tools/jshint.js create mode 100644 platforms/android/assets/www/libs/bluebird/tools/jshintrc_generator.js create mode 100644 platforms/android/assets/www/libs/bluebird/tools/mocha_runner.js create mode 100644 platforms/android/assets/www/libs/bluebird/tools/saucelabs_runner.js create mode 100644 platforms/android/assets/www/libs/bluebird/tools/test.js create mode 100755 platforms/android/assets/www/libs/bluebird/tools/utils.js create mode 100644 platforms/android/assets/www/libs/jquery/.bower.json create mode 100644 platforms/android/assets/www/libs/jquery/AUTHORS.txt create mode 100644 platforms/android/assets/www/libs/jquery/LICENSE.txt create mode 100644 platforms/android/assets/www/libs/jquery/README.md create mode 100644 platforms/android/assets/www/libs/jquery/bower.json create mode 100644 platforms/android/assets/www/libs/jquery/sizzle/LICENSE.txt create mode 100644 platforms/android/assets/www/libs/jquery/src/.jshintrc create mode 100644 platforms/android/assets/www/libs/jquery/src/ajax.js create mode 100644 platforms/android/assets/www/libs/jquery/src/ajax/jsonp.js create mode 100644 platforms/android/assets/www/libs/jquery/src/ajax/load.js create mode 100644 platforms/android/assets/www/libs/jquery/src/ajax/parseJSON.js create mode 100644 platforms/android/assets/www/libs/jquery/src/ajax/parseXML.js create mode 100644 platforms/android/assets/www/libs/jquery/src/ajax/script.js create mode 100644 platforms/android/assets/www/libs/jquery/src/ajax/var/location.js create mode 100644 platforms/android/assets/www/libs/jquery/src/ajax/var/nonce.js create mode 100644 platforms/android/assets/www/libs/jquery/src/ajax/var/rquery.js create mode 100644 platforms/android/assets/www/libs/jquery/src/ajax/xhr.js create mode 100644 platforms/android/assets/www/libs/jquery/src/attributes.js create mode 100644 platforms/android/assets/www/libs/jquery/src/attributes/attr.js create mode 100644 platforms/android/assets/www/libs/jquery/src/attributes/classes.js create mode 100644 platforms/android/assets/www/libs/jquery/src/attributes/prop.js create mode 100644 platforms/android/assets/www/libs/jquery/src/attributes/support.js create mode 100644 platforms/android/assets/www/libs/jquery/src/attributes/val.js create mode 100644 platforms/android/assets/www/libs/jquery/src/callbacks.js create mode 100644 platforms/android/assets/www/libs/jquery/src/core.js create mode 100644 platforms/android/assets/www/libs/jquery/src/core/DOMEval.js create mode 100644 platforms/android/assets/www/libs/jquery/src/core/access.js create mode 100644 platforms/android/assets/www/libs/jquery/src/core/init.js create mode 100644 platforms/android/assets/www/libs/jquery/src/core/parseHTML.js create mode 100644 platforms/android/assets/www/libs/jquery/src/core/ready.js create mode 100644 platforms/android/assets/www/libs/jquery/src/core/support.js create mode 100644 platforms/android/assets/www/libs/jquery/src/core/var/rsingleTag.js create mode 100644 platforms/android/assets/www/libs/jquery/src/css.js create mode 100644 platforms/android/assets/www/libs/jquery/src/css/addGetHookIf.js create mode 100644 platforms/android/assets/www/libs/jquery/src/css/adjustCSS.js create mode 100644 platforms/android/assets/www/libs/jquery/src/css/curCSS.js create mode 100644 platforms/android/assets/www/libs/jquery/src/css/defaultDisplay.js create mode 100644 platforms/android/assets/www/libs/jquery/src/css/hiddenVisibleSelectors.js create mode 100644 platforms/android/assets/www/libs/jquery/src/css/showHide.js create mode 100644 platforms/android/assets/www/libs/jquery/src/css/support.js create mode 100644 platforms/android/assets/www/libs/jquery/src/css/var/cssExpand.js create mode 100644 platforms/android/assets/www/libs/jquery/src/css/var/getStyles.js create mode 100644 platforms/android/assets/www/libs/jquery/src/css/var/isHidden.js create mode 100644 platforms/android/assets/www/libs/jquery/src/css/var/rmargin.js create mode 100644 platforms/android/assets/www/libs/jquery/src/css/var/rnumnonpx.js create mode 100644 platforms/android/assets/www/libs/jquery/src/css/var/swap.js create mode 100644 platforms/android/assets/www/libs/jquery/src/data.js create mode 100644 platforms/android/assets/www/libs/jquery/src/data/Data.js create mode 100644 platforms/android/assets/www/libs/jquery/src/data/accepts.js create mode 100644 platforms/android/assets/www/libs/jquery/src/data/support.js create mode 100644 platforms/android/assets/www/libs/jquery/src/data/var/acceptData.js create mode 100644 platforms/android/assets/www/libs/jquery/src/data/var/dataPriv.js create mode 100644 platforms/android/assets/www/libs/jquery/src/data/var/dataUser.js create mode 100644 platforms/android/assets/www/libs/jquery/src/deferred.js create mode 100644 platforms/android/assets/www/libs/jquery/src/deferred/exceptionHook.js create mode 100644 platforms/android/assets/www/libs/jquery/src/deprecated.js create mode 100644 platforms/android/assets/www/libs/jquery/src/dimensions.js create mode 100644 platforms/android/assets/www/libs/jquery/src/effects.js create mode 100644 platforms/android/assets/www/libs/jquery/src/effects/Tween.js create mode 100644 platforms/android/assets/www/libs/jquery/src/effects/animatedSelector.js create mode 100644 platforms/android/assets/www/libs/jquery/src/effects/support.js create mode 100644 platforms/android/assets/www/libs/jquery/src/event.js create mode 100644 platforms/android/assets/www/libs/jquery/src/event/ajax.js create mode 100644 platforms/android/assets/www/libs/jquery/src/event/alias.js create mode 100644 platforms/android/assets/www/libs/jquery/src/event/focusin.js create mode 100644 platforms/android/assets/www/libs/jquery/src/event/support.js create mode 100644 platforms/android/assets/www/libs/jquery/src/event/trigger.js create mode 100644 platforms/android/assets/www/libs/jquery/src/exports/amd.js create mode 100644 platforms/android/assets/www/libs/jquery/src/exports/global.js create mode 100644 platforms/android/assets/www/libs/jquery/src/intro.js create mode 100644 platforms/android/assets/www/libs/jquery/src/jquery.js create mode 100644 platforms/android/assets/www/libs/jquery/src/manipulation.js create mode 100644 platforms/android/assets/www/libs/jquery/src/manipulation/_evalUrl.js create mode 100644 platforms/android/assets/www/libs/jquery/src/manipulation/buildFragment.js create mode 100644 platforms/android/assets/www/libs/jquery/src/manipulation/createSafeFragment.js create mode 100644 platforms/android/assets/www/libs/jquery/src/manipulation/getAll.js create mode 100644 platforms/android/assets/www/libs/jquery/src/manipulation/setGlobalEval.js create mode 100644 platforms/android/assets/www/libs/jquery/src/manipulation/support.js create mode 100644 platforms/android/assets/www/libs/jquery/src/manipulation/var/nodeNames.js create mode 100644 platforms/android/assets/www/libs/jquery/src/manipulation/var/rcheckableType.js create mode 100644 platforms/android/assets/www/libs/jquery/src/manipulation/var/rleadingWhitespace.js create mode 100644 platforms/android/assets/www/libs/jquery/src/manipulation/var/rscriptType.js create mode 100644 platforms/android/assets/www/libs/jquery/src/manipulation/var/rtagName.js create mode 100644 platforms/android/assets/www/libs/jquery/src/manipulation/wrapMap.js create mode 100644 platforms/android/assets/www/libs/jquery/src/offset.js create mode 100644 platforms/android/assets/www/libs/jquery/src/outro.js create mode 100644 platforms/android/assets/www/libs/jquery/src/queue.js create mode 100644 platforms/android/assets/www/libs/jquery/src/queue/delay.js create mode 100644 platforms/android/assets/www/libs/jquery/src/selector-native.js create mode 100644 platforms/android/assets/www/libs/jquery/src/selector-sizzle.js create mode 100644 platforms/android/assets/www/libs/jquery/src/selector.js create mode 100644 platforms/android/assets/www/libs/jquery/src/serialize.js create mode 100644 platforms/android/assets/www/libs/jquery/src/support.js create mode 100644 platforms/android/assets/www/libs/jquery/src/traversing.js create mode 100644 platforms/android/assets/www/libs/jquery/src/traversing/findFilter.js create mode 100644 platforms/android/assets/www/libs/jquery/src/traversing/var/dir.js create mode 100644 platforms/android/assets/www/libs/jquery/src/traversing/var/rneedsContext.js create mode 100644 platforms/android/assets/www/libs/jquery/src/traversing/var/siblings.js create mode 100644 platforms/android/assets/www/libs/jquery/src/var/arr.js create mode 100644 platforms/android/assets/www/libs/jquery/src/var/class2type.js create mode 100644 platforms/android/assets/www/libs/jquery/src/var/concat.js create mode 100644 platforms/android/assets/www/libs/jquery/src/var/deletedIds.js create mode 100644 platforms/android/assets/www/libs/jquery/src/var/document.js create mode 100644 platforms/android/assets/www/libs/jquery/src/var/documentElement.js create mode 100644 platforms/android/assets/www/libs/jquery/src/var/hasOwn.js create mode 100644 platforms/android/assets/www/libs/jquery/src/var/indexOf.js create mode 100644 platforms/android/assets/www/libs/jquery/src/var/pnum.js create mode 100644 platforms/android/assets/www/libs/jquery/src/var/push.js create mode 100644 platforms/android/assets/www/libs/jquery/src/var/rcssNum.js create mode 100644 platforms/android/assets/www/libs/jquery/src/var/rnotwhite.js create mode 100644 platforms/android/assets/www/libs/jquery/src/var/slice.js create mode 100644 platforms/android/assets/www/libs/jquery/src/var/support.js create mode 100644 platforms/android/assets/www/libs/jquery/src/var/toString.js create mode 100644 platforms/android/assets/www/libs/jquery/src/wrap.js create mode 100644 platforms/android/assets/www/libs/mui/.bower.json create mode 100644 platforms/android/assets/www/libs/mui/AUTHORS.txt create mode 100644 platforms/android/assets/www/libs/mui/CHANGELOG.md create mode 100644 platforms/android/assets/www/libs/mui/LICENSE.txt create mode 100644 platforms/android/assets/www/libs/mui/README.md create mode 100644 platforms/android/assets/www/libs/mui/RELEASE.md create mode 100644 platforms/android/assets/www/libs/mui/bower.json create mode 100644 platforms/android/assets/www/libs/mui/packages/cdn/angular/mui-angular.js create mode 100644 platforms/android/assets/www/libs/mui/packages/cdn/angular/mui-angular.min.js create mode 100644 platforms/android/assets/www/libs/mui/packages/cdn/css/mui.css create mode 100644 platforms/android/assets/www/libs/mui/packages/cdn/css/mui.min.css create mode 100644 platforms/android/assets/www/libs/mui/packages/cdn/email/mui-email-inline.css create mode 100644 platforms/android/assets/www/libs/mui/packages/cdn/email/mui-email-styletag.css create mode 100644 platforms/android/assets/www/libs/mui/packages/cdn/extra/mui-angular-combined.js create mode 100644 platforms/android/assets/www/libs/mui/packages/cdn/extra/mui-colors.css create mode 100644 platforms/android/assets/www/libs/mui/packages/cdn/extra/mui-combined.js create mode 100644 platforms/android/assets/www/libs/mui/packages/cdn/extra/mui-react-combined.js create mode 100644 platforms/android/assets/www/libs/mui/packages/cdn/js/mui.js create mode 100644 platforms/android/assets/www/libs/mui/packages/cdn/js/mui.min.js create mode 100644 platforms/android/assets/www/libs/mui/packages/cdn/react/mui-react.js create mode 100644 platforms/android/assets/www/libs/mui/packages/cdn/react/mui-react.min.js create mode 100644 platforms/android/assets/www/libs/mui/packages/cdn/webcomponents/mui-webcomponents.js create mode 100644 platforms/android/assets/www/libs/mui/packages/cdn/webcomponents/mui-webcomponents.min.js create mode 100644 platforms/android/assets/www/libs/mui/packages/meteor/LICENSE.txt create mode 100644 platforms/android/assets/www/libs/mui/packages/meteor/README.md create mode 100644 platforms/android/assets/www/libs/mui/packages/meteor/lib/css/mui.css create mode 100644 platforms/android/assets/www/libs/mui/packages/meteor/lib/css/mui.min.css create mode 100644 platforms/android/assets/www/libs/mui/packages/meteor/lib/js/mui.js create mode 100644 platforms/android/assets/www/libs/mui/packages/meteor/lib/js/mui.min.js create mode 100644 platforms/android/assets/www/libs/mui/packages/meteor/package.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/LICENSE.txt create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/README.md create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/angular.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/index.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/angular/appbar.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/angular/babel-helpers.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/angular/button.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/angular/caret.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/angular/checkbox.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/angular/col.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/angular/container.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/angular/divider.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/angular/dropdown-item.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/angular/dropdown.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/angular/form.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/angular/input.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/angular/panel.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/angular/radio.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/angular/row.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/angular/select.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/angular/tabs.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/css/mui.css create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/css/mui.min.css create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/js/config.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/js/lib/forms.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/js/lib/jqLite.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/js/lib/util.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/js/overlay.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/react/_helpers.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/react/appbar.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/react/babel-helpers.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/react/button.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/react/caret.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/react/checkbox.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/react/col.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/react/container.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/react/divider.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/react/dropdown-item.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/react/dropdown.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/react/form.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/react/input.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/react/option.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/react/panel.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/react/radio.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/react/row.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/react/select.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/react/tab.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/react/tabs.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/react/text-field.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/react/textarea.js create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/sass/mui-colors.scss create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/sass/mui.scss create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/sass/mui/_appbar.scss create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/sass/mui/_buttons.scss create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/sass/mui/_checkbox-and-radio.scss create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/sass/mui/_colors.scss create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/sass/mui/_containers.scss create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/sass/mui/_divider.scss create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/sass/mui/_dropdown.scss create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/sass/mui/_form.scss create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/sass/mui/_grid.scss create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/sass/mui/_helpers.scss create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/sass/mui/_mixins.scss create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/sass/mui/_overlay.scss create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/sass/mui/_panel.scss create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/sass/mui/_reboot.scss create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/sass/mui/_ripple.scss create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/sass/mui/_select.scss create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/sass/mui/_table.scss create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/sass/mui/_tabs.scss create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/sass/mui/_textfield.scss create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/sass/mui/_typography.scss create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/sass/mui/_variables.scss create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/sass/mui/mixins/_buttons.scss create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/sass/mui/mixins/_grid-framework.scss create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/sass/mui/mixins/_typography.scss create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/sass/mui/mixins/_util.scss create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/lib/sass/normalize-3.0.3.scss create mode 100644 platforms/android/assets/www/libs/mui/packages/npm/react.js create mode 100644 platforms/android/assets/www/libs/mui/src/angular/appbar.js create mode 100644 platforms/android/assets/www/libs/mui/src/angular/button.js create mode 100644 platforms/android/assets/www/libs/mui/src/angular/caret.js create mode 100644 platforms/android/assets/www/libs/mui/src/angular/checkbox.js create mode 100644 platforms/android/assets/www/libs/mui/src/angular/col.js create mode 100644 platforms/android/assets/www/libs/mui/src/angular/container.js create mode 100644 platforms/android/assets/www/libs/mui/src/angular/divider.js create mode 100644 platforms/android/assets/www/libs/mui/src/angular/dropdown-item.js create mode 100644 platforms/android/assets/www/libs/mui/src/angular/dropdown.js create mode 100644 platforms/android/assets/www/libs/mui/src/angular/form.js create mode 100644 platforms/android/assets/www/libs/mui/src/angular/input.js create mode 100644 platforms/android/assets/www/libs/mui/src/angular/panel.js create mode 100644 platforms/android/assets/www/libs/mui/src/angular/radio.js create mode 100644 platforms/android/assets/www/libs/mui/src/angular/row.js create mode 100644 platforms/android/assets/www/libs/mui/src/angular/select.js create mode 100644 platforms/android/assets/www/libs/mui/src/angular/tabs.js create mode 100644 platforms/android/assets/www/libs/mui/src/email/mui-email-inline.scss create mode 100644 platforms/android/assets/www/libs/mui/src/email/mui-email-styletag.scss create mode 100644 platforms/android/assets/www/libs/mui/src/email/mui-email/_body.scss create mode 100644 platforms/android/assets/www/libs/mui/src/email/mui-email/_buttons.scss create mode 100644 platforms/android/assets/www/libs/mui/src/email/mui-email/_containers.scss create mode 100644 platforms/android/assets/www/libs/mui/src/email/mui-email/_divider.scss create mode 100644 platforms/android/assets/www/libs/mui/src/email/mui-email/_grid.scss create mode 100644 platforms/android/assets/www/libs/mui/src/email/mui-email/_helpers.scss create mode 100644 platforms/android/assets/www/libs/mui/src/email/mui-email/_normalize.scss create mode 100644 platforms/android/assets/www/libs/mui/src/email/mui-email/_panel.scss create mode 100644 platforms/android/assets/www/libs/mui/src/email/mui-email/_reboot.scss create mode 100644 platforms/android/assets/www/libs/mui/src/email/mui-email/_styletag.scss create mode 100644 platforms/android/assets/www/libs/mui/src/email/mui-email/_typography.scss create mode 100644 platforms/android/assets/www/libs/mui/src/email/mui-email/_variables.scss create mode 100644 platforms/android/assets/www/libs/mui/src/js/config.js create mode 100644 platforms/android/assets/www/libs/mui/src/js/dropdown.js create mode 100644 platforms/android/assets/www/libs/mui/src/js/lib/forms.js create mode 100644 platforms/android/assets/www/libs/mui/src/js/lib/jqLite.js create mode 100644 platforms/android/assets/www/libs/mui/src/js/lib/util.js create mode 100644 platforms/android/assets/www/libs/mui/src/js/overlay.js create mode 100644 platforms/android/assets/www/libs/mui/src/js/ripple.js create mode 100644 platforms/android/assets/www/libs/mui/src/js/select.js create mode 100644 platforms/android/assets/www/libs/mui/src/js/tabs.js create mode 100644 platforms/android/assets/www/libs/mui/src/js/textfield.js create mode 100644 platforms/android/assets/www/libs/mui/src/react/_helpers.js create mode 100644 platforms/android/assets/www/libs/mui/src/react/appbar.jsx create mode 100644 platforms/android/assets/www/libs/mui/src/react/button.jsx create mode 100644 platforms/android/assets/www/libs/mui/src/react/caret.jsx create mode 100644 platforms/android/assets/www/libs/mui/src/react/checkbox.jsx create mode 100644 platforms/android/assets/www/libs/mui/src/react/col.jsx create mode 100644 platforms/android/assets/www/libs/mui/src/react/container.jsx create mode 100644 platforms/android/assets/www/libs/mui/src/react/divider.jsx create mode 100644 platforms/android/assets/www/libs/mui/src/react/dropdown-item.jsx create mode 100644 platforms/android/assets/www/libs/mui/src/react/dropdown.jsx create mode 100644 platforms/android/assets/www/libs/mui/src/react/form.jsx create mode 100644 platforms/android/assets/www/libs/mui/src/react/input.jsx create mode 100644 platforms/android/assets/www/libs/mui/src/react/option.jsx create mode 100644 platforms/android/assets/www/libs/mui/src/react/panel.jsx create mode 100644 platforms/android/assets/www/libs/mui/src/react/radio.jsx create mode 100644 platforms/android/assets/www/libs/mui/src/react/row.jsx create mode 100644 platforms/android/assets/www/libs/mui/src/react/select.jsx create mode 100644 platforms/android/assets/www/libs/mui/src/react/tab.jsx create mode 100644 platforms/android/assets/www/libs/mui/src/react/tabs.jsx create mode 100644 platforms/android/assets/www/libs/mui/src/react/text-field.jsx create mode 100644 platforms/android/assets/www/libs/mui/src/react/textarea.jsx create mode 100644 platforms/android/assets/www/libs/mui/src/sass/mui-colors.scss create mode 100644 platforms/android/assets/www/libs/mui/src/sass/mui.scss create mode 100644 platforms/android/assets/www/libs/mui/src/sass/mui/_appbar.scss create mode 100644 platforms/android/assets/www/libs/mui/src/sass/mui/_buttons.scss create mode 100644 platforms/android/assets/www/libs/mui/src/sass/mui/_checkbox-and-radio.scss create mode 100644 platforms/android/assets/www/libs/mui/src/sass/mui/_colors.scss create mode 100644 platforms/android/assets/www/libs/mui/src/sass/mui/_containers.scss create mode 100644 platforms/android/assets/www/libs/mui/src/sass/mui/_divider.scss create mode 100644 platforms/android/assets/www/libs/mui/src/sass/mui/_dropdown.scss create mode 100644 platforms/android/assets/www/libs/mui/src/sass/mui/_form.scss create mode 100644 platforms/android/assets/www/libs/mui/src/sass/mui/_grid.scss create mode 100644 platforms/android/assets/www/libs/mui/src/sass/mui/_helpers.scss create mode 100644 platforms/android/assets/www/libs/mui/src/sass/mui/_mixins.scss create mode 100644 platforms/android/assets/www/libs/mui/src/sass/mui/_overlay.scss create mode 100644 platforms/android/assets/www/libs/mui/src/sass/mui/_panel.scss create mode 100644 platforms/android/assets/www/libs/mui/src/sass/mui/_reboot.scss create mode 100644 platforms/android/assets/www/libs/mui/src/sass/mui/_ripple.scss create mode 100644 platforms/android/assets/www/libs/mui/src/sass/mui/_select.scss create mode 100644 platforms/android/assets/www/libs/mui/src/sass/mui/_table.scss create mode 100644 platforms/android/assets/www/libs/mui/src/sass/mui/_tabs.scss create mode 100644 platforms/android/assets/www/libs/mui/src/sass/mui/_textfield.scss create mode 100644 platforms/android/assets/www/libs/mui/src/sass/mui/_typography.scss create mode 100644 platforms/android/assets/www/libs/mui/src/sass/mui/_variables.scss create mode 100644 platforms/android/assets/www/libs/mui/src/sass/mui/mixins/_buttons.scss create mode 100644 platforms/android/assets/www/libs/mui/src/sass/mui/mixins/_grid-framework.scss create mode 100644 platforms/android/assets/www/libs/mui/src/sass/mui/mixins/_typography.scss create mode 100644 platforms/android/assets/www/libs/mui/src/sass/mui/mixins/_util.scss create mode 100644 platforms/android/assets/www/libs/mui/src/sass/normalize-3.0.3.scss create mode 100644 platforms/android/assets/www/libs/mui/src/webcomponents/buttons.js create mode 100644 platforms/android/assets/www/libs/mui/src/webcomponents/forms.js create mode 100644 platforms/android/assets/www/plugins/cordova-plugin-ble-central/www/ble.js create mode 100644 platforms/android/assets/www/test.html create mode 100644 platforms/android/build.gradle create mode 100644 platforms/android/cordova/.jshintrc create mode 100644 platforms/android/cordova/Api.js create mode 100755 platforms/android/cordova/android_sdk_version create mode 100755 platforms/android/cordova/build create mode 100644 platforms/android/cordova/build.bat create mode 100755 platforms/android/cordova/check_reqs create mode 100644 platforms/android/cordova/check_reqs.bat create mode 100755 platforms/android/cordova/clean create mode 100644 platforms/android/cordova/clean.bat create mode 100644 platforms/android/cordova/defaults.xml create mode 100644 platforms/android/cordova/lib/Adb.js create mode 100644 platforms/android/cordova/lib/AndroidManifest.js create mode 100644 platforms/android/cordova/lib/AndroidProject.js create mode 100644 platforms/android/cordova/lib/ConsoleLogger.js create mode 100755 platforms/android/cordova/lib/android_sdk_version.js create mode 100644 platforms/android/cordova/lib/build.js create mode 100644 platforms/android/cordova/lib/builders/AntBuilder.js create mode 100644 platforms/android/cordova/lib/builders/GenericBuilder.js create mode 100644 platforms/android/cordova/lib/builders/GradleBuilder.js create mode 100644 platforms/android/cordova/lib/builders/builders.js create mode 100644 platforms/android/cordova/lib/check_reqs.js create mode 100644 platforms/android/cordova/lib/device.js create mode 100644 platforms/android/cordova/lib/emulator.js create mode 100755 platforms/android/cordova/lib/install-device create mode 100644 platforms/android/cordova/lib/install-device.bat create mode 100755 platforms/android/cordova/lib/install-emulator create mode 100644 platforms/android/cordova/lib/install-emulator.bat create mode 100755 platforms/android/cordova/lib/list-devices create mode 100644 platforms/android/cordova/lib/list-devices.bat create mode 100755 platforms/android/cordova/lib/list-emulator-images create mode 100644 platforms/android/cordova/lib/list-emulator-images.bat create mode 100755 platforms/android/cordova/lib/list-started-emulators create mode 100644 platforms/android/cordova/lib/list-started-emulators.bat create mode 100644 platforms/android/cordova/lib/log.js create mode 100644 platforms/android/cordova/lib/plugin-build.gradle create mode 100644 platforms/android/cordova/lib/pluginHandlers.js create mode 100644 platforms/android/cordova/lib/prepare.js create mode 100644 platforms/android/cordova/lib/retry.js create mode 100644 platforms/android/cordova/lib/run.js create mode 100755 platforms/android/cordova/lib/start-emulator create mode 100644 platforms/android/cordova/lib/start-emulator.bat create mode 100755 platforms/android/cordova/log create mode 100644 platforms/android/cordova/log.bat create mode 100755 platforms/android/cordova/run create mode 100644 platforms/android/cordova/run.bat create mode 100755 platforms/android/cordova/version create mode 100644 platforms/android/cordova/version.bat create mode 100644 platforms/android/platform_www/cordova-js-src/android/nativeapiprovider.js create mode 100644 platforms/android/platform_www/cordova-js-src/android/promptbasednativeapi.js create mode 100644 platforms/android/platform_www/cordova-js-src/exec.js create mode 100644 platforms/android/platform_www/cordova-js-src/platform.js create mode 100644 platforms/android/platform_www/cordova-js-src/plugin/android/app.js create mode 100644 platforms/android/platform_www/cordova.js create mode 100644 platforms/android/platform_www/cordova_plugins.js create mode 100644 platforms/android/platform_www/plugins/cordova-plugin-ble-central/www/ble.js create mode 100644 platforms/android/project.properties create mode 100644 platforms/android/res/drawable-hdpi/icon.png create mode 100644 platforms/android/res/drawable-land-hdpi/screen.png create mode 100644 platforms/android/res/drawable-land-ldpi/screen.png create mode 100644 platforms/android/res/drawable-land-mdpi/screen.png create mode 100644 platforms/android/res/drawable-land-xhdpi/screen.png create mode 100644 platforms/android/res/drawable-ldpi/icon.png create mode 100644 platforms/android/res/drawable-mdpi/icon.png create mode 100644 platforms/android/res/drawable-port-hdpi/screen.png create mode 100644 platforms/android/res/drawable-port-ldpi/screen.png create mode 100644 platforms/android/res/drawable-port-mdpi/screen.png create mode 100644 platforms/android/res/drawable-port-xhdpi/screen.png create mode 100644 platforms/android/res/drawable-xhdpi/icon.png create mode 100644 platforms/android/res/values/strings.xml create mode 100644 platforms/android/res/xml/config.xml create mode 100644 platforms/android/settings.gradle create mode 100644 platforms/android/src/com/megster/cordova/ble/central/BLECentralPlugin.java create mode 100644 platforms/android/src/com/megster/cordova/ble/central/BLECommand.java create mode 100644 platforms/android/src/com/megster/cordova/ble/central/Helper.java create mode 100644 platforms/android/src/com/megster/cordova/ble/central/Peripheral.java create mode 100644 platforms/android/src/com/megster/cordova/ble/central/UUIDHelper.java create mode 100644 platforms/android/src/org/apache/cordova/PermissionHelper.java create mode 100644 platforms/android/src/org/apache/cordova/whitelist/WhitelistPlugin.java create mode 100644 platforms/android/src/org/censis/sensortoy/MainActivity.java create mode 100644 platforms/ios/.gitignore create mode 100644 platforms/ios/CordovaLib/Classes/Private/CDVDebug.h create mode 100644 platforms/ios/CordovaLib/Classes/Private/CDVJSON_private.h create mode 100644 platforms/ios/CordovaLib/Classes/Private/CDVJSON_private.m create mode 100644 platforms/ios/CordovaLib/Classes/Private/CDVPlugin+Private.h create mode 100644 platforms/ios/CordovaLib/Classes/Private/Plugins/CDVGestureHandler/CDVGestureHandler.h create mode 100644 platforms/ios/CordovaLib/Classes/Private/Plugins/CDVGestureHandler/CDVGestureHandler.m create mode 100644 platforms/ios/CordovaLib/Classes/Private/Plugins/CDVHandleOpenURL/CDVHandleOpenURL.h create mode 100644 platforms/ios/CordovaLib/Classes/Private/Plugins/CDVHandleOpenURL/CDVHandleOpenURL.m create mode 100644 platforms/ios/CordovaLib/Classes/Private/Plugins/CDVIntentAndNavigationFilter/CDVIntentAndNavigationFilter.h create mode 100644 platforms/ios/CordovaLib/Classes/Private/Plugins/CDVIntentAndNavigationFilter/CDVIntentAndNavigationFilter.m create mode 100644 platforms/ios/CordovaLib/Classes/Private/Plugins/CDVLocalStorage/CDVLocalStorage.h create mode 100644 platforms/ios/CordovaLib/Classes/Private/Plugins/CDVLocalStorage/CDVLocalStorage.m create mode 100644 platforms/ios/CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewDelegate.h create mode 100644 platforms/ios/CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewDelegate.m create mode 100644 platforms/ios/CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewEngine.h create mode 100644 platforms/ios/CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewEngine.m create mode 100644 platforms/ios/CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewNavigationDelegate.h create mode 100644 platforms/ios/CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewNavigationDelegate.m create mode 100644 platforms/ios/CordovaLib/Classes/Public/CDV.h create mode 100644 platforms/ios/CordovaLib/Classes/Public/CDVAppDelegate.h create mode 100644 platforms/ios/CordovaLib/Classes/Public/CDVAppDelegate.m create mode 100644 platforms/ios/CordovaLib/Classes/Public/CDVAvailability.h create mode 100644 platforms/ios/CordovaLib/Classes/Public/CDVAvailabilityDeprecated.h create mode 100644 platforms/ios/CordovaLib/Classes/Public/CDVCommandDelegate.h create mode 100644 platforms/ios/CordovaLib/Classes/Public/CDVCommandDelegateImpl.h create mode 100644 platforms/ios/CordovaLib/Classes/Public/CDVCommandDelegateImpl.m create mode 100644 platforms/ios/CordovaLib/Classes/Public/CDVCommandQueue.h create mode 100644 platforms/ios/CordovaLib/Classes/Public/CDVCommandQueue.m create mode 100644 platforms/ios/CordovaLib/Classes/Public/CDVConfigParser.h create mode 100644 platforms/ios/CordovaLib/Classes/Public/CDVConfigParser.m create mode 100644 platforms/ios/CordovaLib/Classes/Public/CDVInvokedUrlCommand.h create mode 100644 platforms/ios/CordovaLib/Classes/Public/CDVInvokedUrlCommand.m create mode 100644 platforms/ios/CordovaLib/Classes/Public/CDVPlugin+Resources.h create mode 100644 platforms/ios/CordovaLib/Classes/Public/CDVPlugin+Resources.m create mode 100644 platforms/ios/CordovaLib/Classes/Public/CDVPlugin.h create mode 100644 platforms/ios/CordovaLib/Classes/Public/CDVPlugin.m create mode 100644 platforms/ios/CordovaLib/Classes/Public/CDVPluginResult.h create mode 100644 platforms/ios/CordovaLib/Classes/Public/CDVPluginResult.m create mode 100644 platforms/ios/CordovaLib/Classes/Public/CDVScreenOrientationDelegate.h create mode 100644 platforms/ios/CordovaLib/Classes/Public/CDVTimer.h create mode 100644 platforms/ios/CordovaLib/Classes/Public/CDVTimer.m create mode 100644 platforms/ios/CordovaLib/Classes/Public/CDVURLProtocol.h create mode 100644 platforms/ios/CordovaLib/Classes/Public/CDVURLProtocol.m create mode 100644 platforms/ios/CordovaLib/Classes/Public/CDVUserAgentUtil.h create mode 100644 platforms/ios/CordovaLib/Classes/Public/CDVUserAgentUtil.m create mode 100644 platforms/ios/CordovaLib/Classes/Public/CDVViewController.h create mode 100644 platforms/ios/CordovaLib/Classes/Public/CDVViewController.m create mode 100644 platforms/ios/CordovaLib/Classes/Public/CDVWebViewEngineProtocol.h create mode 100644 platforms/ios/CordovaLib/Classes/Public/CDVWhitelist.h create mode 100644 platforms/ios/CordovaLib/Classes/Public/CDVWhitelist.m create mode 100644 platforms/ios/CordovaLib/Classes/Public/NSDictionary+CordovaPreferences.h create mode 100644 platforms/ios/CordovaLib/Classes/Public/NSDictionary+CordovaPreferences.m create mode 100644 platforms/ios/CordovaLib/Classes/Public/NSMutableArray+QueueAdditions.h create mode 100644 platforms/ios/CordovaLib/Classes/Public/NSMutableArray+QueueAdditions.m create mode 100644 platforms/ios/CordovaLib/CordovaLib.xcodeproj/project.pbxproj create mode 100644 platforms/ios/CordovaLib/CordovaLib_Prefix.pch create mode 100644 platforms/ios/CordovaLib/VERSION create mode 100644 platforms/ios/CordovaLib/cordova.js create mode 100755 platforms/ios/Sensortoy.xcodeproj/project.pbxproj create mode 100644 platforms/ios/Sensortoy/.gitignore create mode 100644 platforms/ios/Sensortoy/Bridging-Header.h create mode 100644 platforms/ios/Sensortoy/Classes/AppDelegate.h create mode 100644 platforms/ios/Sensortoy/Classes/AppDelegate.m create mode 100644 platforms/ios/Sensortoy/Classes/MainViewController.h create mode 100644 platforms/ios/Sensortoy/Classes/MainViewController.m create mode 100644 platforms/ios/Sensortoy/Classes/MainViewController.xib create mode 100644 platforms/ios/Sensortoy/Images.xcassets/AppIcon.appiconset/Contents.json create mode 100644 platforms/ios/Sensortoy/Images.xcassets/AppIcon.appiconset/icon-40.png create mode 100644 platforms/ios/Sensortoy/Images.xcassets/AppIcon.appiconset/icon-40@2x.png create mode 100644 platforms/ios/Sensortoy/Images.xcassets/AppIcon.appiconset/icon-50.png create mode 100644 platforms/ios/Sensortoy/Images.xcassets/AppIcon.appiconset/icon-50@2x.png create mode 100644 platforms/ios/Sensortoy/Images.xcassets/AppIcon.appiconset/icon-60@2x.png create mode 100644 platforms/ios/Sensortoy/Images.xcassets/AppIcon.appiconset/icon-60@3x.png create mode 100644 platforms/ios/Sensortoy/Images.xcassets/AppIcon.appiconset/icon-72.png create mode 100644 platforms/ios/Sensortoy/Images.xcassets/AppIcon.appiconset/icon-72@2x.png create mode 100644 platforms/ios/Sensortoy/Images.xcassets/AppIcon.appiconset/icon-76.png create mode 100644 platforms/ios/Sensortoy/Images.xcassets/AppIcon.appiconset/icon-76@2x.png create mode 100644 platforms/ios/Sensortoy/Images.xcassets/AppIcon.appiconset/icon-83.5@2x.png create mode 100644 platforms/ios/Sensortoy/Images.xcassets/AppIcon.appiconset/icon-small.png create mode 100644 platforms/ios/Sensortoy/Images.xcassets/AppIcon.appiconset/icon-small@2x.png create mode 100644 platforms/ios/Sensortoy/Images.xcassets/AppIcon.appiconset/icon-small@3x.png create mode 100644 platforms/ios/Sensortoy/Images.xcassets/AppIcon.appiconset/icon.png create mode 100644 platforms/ios/Sensortoy/Images.xcassets/AppIcon.appiconset/icon@2x.png create mode 100644 platforms/ios/Sensortoy/Images.xcassets/LaunchImage.launchimage/Contents.json create mode 100644 platforms/ios/Sensortoy/Images.xcassets/LaunchImage.launchimage/Default-568h@2x~iphone.png create mode 100644 platforms/ios/Sensortoy/Images.xcassets/LaunchImage.launchimage/Default-667h.png create mode 100644 platforms/ios/Sensortoy/Images.xcassets/LaunchImage.launchimage/Default-736h.png create mode 100644 platforms/ios/Sensortoy/Images.xcassets/LaunchImage.launchimage/Default-Landscape-736h.png create mode 100644 platforms/ios/Sensortoy/Images.xcassets/LaunchImage.launchimage/Default-Landscape@2x~ipad.png create mode 100644 platforms/ios/Sensortoy/Images.xcassets/LaunchImage.launchimage/Default-Landscape~ipad.png create mode 100644 platforms/ios/Sensortoy/Images.xcassets/LaunchImage.launchimage/Default-Portrait@2x~ipad.png create mode 100644 platforms/ios/Sensortoy/Images.xcassets/LaunchImage.launchimage/Default-Portrait~ipad.png create mode 100644 platforms/ios/Sensortoy/Images.xcassets/LaunchImage.launchimage/Default@2x~iphone.png create mode 100644 platforms/ios/Sensortoy/Images.xcassets/LaunchImage.launchimage/Default~iphone.png create mode 100644 platforms/ios/Sensortoy/Plugins/README create mode 100644 platforms/ios/Sensortoy/Plugins/cordova-plugin-ble-central/BLECentralPlugin/BLECentralPlugin.h create mode 100644 platforms/ios/Sensortoy/Plugins/cordova-plugin-ble-central/BLECentralPlugin/BLECentralPlugin.m create mode 100644 platforms/ios/Sensortoy/Plugins/cordova-plugin-ble-central/BLECentralPlugin/BLECommandContext.h create mode 100644 platforms/ios/Sensortoy/Plugins/cordova-plugin-ble-central/BLECentralPlugin/BLECommandContext.m create mode 100644 platforms/ios/Sensortoy/Plugins/cordova-plugin-ble-central/BLECentralPlugin/CBPeripheral+Extensions.h create mode 100644 platforms/ios/Sensortoy/Plugins/cordova-plugin-ble-central/BLECentralPlugin/CBPeripheral+Extensions.m create mode 100644 platforms/ios/Sensortoy/Sensortoy-Info.plist create mode 100644 platforms/ios/Sensortoy/Sensortoy-Prefix.pch create mode 100755 platforms/ios/Sensortoy/config.xml create mode 100644 platforms/ios/Sensortoy/main.m create mode 100755 platforms/ios/cordova/Api.js create mode 100755 platforms/ios/cordova/apple_ios_version create mode 100755 platforms/ios/cordova/apple_osx_version create mode 100755 platforms/ios/cordova/apple_xcode_version create mode 100755 platforms/ios/cordova/build create mode 100755 platforms/ios/cordova/build-debug.xcconfig create mode 100755 platforms/ios/cordova/build-extras.xcconfig create mode 100755 platforms/ios/cordova/build-release.xcconfig create mode 100755 platforms/ios/cordova/build.bat create mode 100755 platforms/ios/cordova/build.xcconfig create mode 100755 platforms/ios/cordova/check_reqs create mode 100755 platforms/ios/cordova/check_reqs.bat create mode 100755 platforms/ios/cordova/clean create mode 100755 platforms/ios/cordova/clean.bat create mode 100755 platforms/ios/cordova/defaults.xml create mode 100755 platforms/ios/cordova/lib/build.js create mode 100755 platforms/ios/cordova/lib/check_reqs.js create mode 100755 platforms/ios/cordova/lib/clean.js create mode 100755 platforms/ios/cordova/lib/configMunger.js create mode 100755 platforms/ios/cordova/lib/copy-www-build-step.js create mode 100755 platforms/ios/cordova/lib/list-devices create mode 100755 platforms/ios/cordova/lib/list-emulator-images create mode 100755 platforms/ios/cordova/lib/list-started-emulators create mode 100755 platforms/ios/cordova/lib/plugman/Plugman.js create mode 100755 platforms/ios/cordova/lib/plugman/pluginHandlers.js create mode 100755 platforms/ios/cordova/lib/prepare.js create mode 100755 platforms/ios/cordova/lib/projectFile.js create mode 100755 platforms/ios/cordova/lib/run.js create mode 100755 platforms/ios/cordova/lib/spawn.js create mode 100755 platforms/ios/cordova/lib/start-emulator create mode 100755 platforms/ios/cordova/lib/versions.js create mode 100755 platforms/ios/cordova/log create mode 100755 platforms/ios/cordova/log.bat create mode 100755 platforms/ios/cordova/loggingHelper.js create mode 100755 platforms/ios/cordova/run create mode 100755 platforms/ios/cordova/run.bat create mode 100755 platforms/ios/cordova/version create mode 100755 platforms/ios/cordova/version.bat create mode 100644 platforms/ios/frameworks.json create mode 100644 platforms/ios/ios.json create mode 100644 platforms/ios/platform_www/cordova-js-src/exec.js create mode 100644 platforms/ios/platform_www/cordova-js-src/platform.js create mode 100644 platforms/ios/platform_www/cordova.js create mode 100644 platforms/ios/platform_www/cordova_plugins.js create mode 100644 platforms/ios/platform_www/plugins/cordova-plugin-ble-central/www/ble.js create mode 100644 platforms/ios/www/cordova-js-src/exec.js create mode 100644 platforms/ios/www/cordova-js-src/platform.js create mode 100644 platforms/ios/www/cordova.js create mode 100644 platforms/ios/www/cordova_plugins.js create mode 100644 platforms/ios/www/css/app.css create mode 100644 platforms/ios/www/css/index.css create mode 100644 platforms/ios/www/css/material-icons.css create mode 100644 platforms/ios/www/css/mui.css create mode 100644 platforms/ios/www/css/mui.custom.css create mode 100644 platforms/ios/www/css/mui.min.css create mode 100644 platforms/ios/www/img/logo.png create mode 100644 platforms/ios/www/index.html create mode 100644 platforms/ios/www/js/device/CC2650/cc2650_accelerometer.js create mode 100644 platforms/ios/www/js/device/CC2650/cc2650_barometer.js create mode 100644 platforms/ios/www/js/index.js create mode 100644 platforms/ios/www/js/standards/battery.js create mode 100644 platforms/ios/www/js/standards/button.js create mode 100644 platforms/ios/www/js/standards/capability.js create mode 100644 platforms/ios/www/js/test.js create mode 100644 platforms/ios/www/libs/bluebird/.bower.json create mode 100644 platforms/ios/www/libs/bluebird/API.md create mode 100644 platforms/ios/www/libs/bluebird/CONTRIBUTING.md create mode 100644 platforms/ios/www/libs/bluebird/LICENSE create mode 100644 platforms/ios/www/libs/bluebird/README.md create mode 100755 platforms/ios/www/libs/bluebird/bench create mode 100644 platforms/ios/www/libs/bluebird/bower.json create mode 100755 platforms/ios/www/libs/bluebird/build create mode 100644 platforms/ios/www/libs/bluebird/changelog.md create mode 100644 platforms/ios/www/libs/bluebird/deprecated_apis.md create mode 100644 platforms/ios/www/libs/bluebird/docs/Gemfile create mode 100644 platforms/ios/www/libs/bluebird/docs/README.md create mode 100644 platforms/ios/www/libs/bluebird/docs/_config.yml create mode 100644 platforms/ios/www/libs/bluebird/docs/_layouts/api.html create mode 100644 platforms/ios/www/libs/bluebird/docs/_layouts/default.html create mode 100644 platforms/ios/www/libs/bluebird/docs/_layouts/page.html create mode 100644 platforms/ios/www/libs/bluebird/docs/_plugins/mdate.rb create mode 100644 platforms/ios/www/libs/bluebird/docs/_plugins/plugin.rb create mode 100644 platforms/ios/www/libs/bluebird/docs/css/main.css create mode 100644 platforms/ios/www/libs/bluebird/docs/css/mono-blue.css create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/anti-patterns.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api-reference.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/aggregateerror.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/all.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/any.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/ascallback.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/bind.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/built-in-error-types.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/call.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/cancel.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/cancellation.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/cancellationerror.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/catch.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/catchreturn.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/catchthrow.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/collections.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/core.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/deferred-migration.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/delay.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/disposer.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/done.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/each.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/environment-variables.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/error-management-configuration.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/error.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/filter.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/finally.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/generators.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/get.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/iscancelled.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/isfulfilled.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/ispending.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/isrejected.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/map.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/mapseries.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/new-promise.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/operationalerror.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/progression-migration.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/promise.all.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/promise.any.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/promise.bind.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/promise.config.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/promise.coroutine.addyieldhandler.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/promise.coroutine.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/promise.delay.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/promise.each.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/promise.filter.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/promise.fromcallback.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/promise.join.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/promise.longstacktraces.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/promise.map.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/promise.mapseries.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/promise.method.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/promise.noconflict.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/promise.onpossiblyunhandledrejection.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/promise.onunhandledrejectionhandled.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/promise.promisify.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/promise.promisifyall.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/promise.props.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/promise.race.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/promise.reduce.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/promise.reject.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/promise.resolve.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/promise.setscheduler.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/promise.some.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/promise.try.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/promise.using.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/promiseinspection.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/promisification.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/props.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/race.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/reason.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/reduce.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/reflect.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/resource-management.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/return.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/some.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/spread.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/suppressunhandledrejections.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/synchronous-inspection.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/tap.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/then.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/throw.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/timeout.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/timeouterror.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/timers.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/utility.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/api/value.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/async-dialogs.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/beginners-guide.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/benchmarks.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/changelog.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/coming-from-other-languages.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/coming-from-other-libraries.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/contribute.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/deprecated-apis.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/deprecated_apis.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/download-api-reference.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/error-explanations.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/features.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/getting-started.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/install.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/new-in-bluebird-3.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/support.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/warning-explanations.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/what-about-generators.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/why-bluebird.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/why-performance.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/why-promises.md create mode 100644 platforms/ios/www/libs/bluebird/docs/docs/working-with-callbacks.md create mode 100644 platforms/ios/www/libs/bluebird/docs/helpers.rb create mode 100755 platforms/ios/www/libs/bluebird/docs/img/favicon.png create mode 100644 platforms/ios/www/libs/bluebird/docs/img/logo.png create mode 100644 platforms/ios/www/libs/bluebird/docs/index.html create mode 100644 platforms/ios/www/libs/bluebird/issue_template.md create mode 100644 platforms/ios/www/libs/bluebird/js/browser/bluebird.core.js create mode 100644 platforms/ios/www/libs/bluebird/js/browser/bluebird.core.min.js create mode 100644 platforms/ios/www/libs/bluebird/js/browser/bluebird.js create mode 100644 platforms/ios/www/libs/bluebird/js/browser/bluebird.min.js create mode 100644 platforms/ios/www/libs/bluebird/package.json create mode 100644 platforms/ios/www/libs/bluebird/src/any.js create mode 100644 platforms/ios/www/libs/bluebird/src/assert.js create mode 100644 platforms/ios/www/libs/bluebird/src/async.js create mode 100644 platforms/ios/www/libs/bluebird/src/bind.js create mode 100644 platforms/ios/www/libs/bluebird/src/bluebird.js create mode 100644 platforms/ios/www/libs/bluebird/src/call_get.js create mode 100644 platforms/ios/www/libs/bluebird/src/cancel.js create mode 100644 platforms/ios/www/libs/bluebird/src/catch_filter.js create mode 100644 platforms/ios/www/libs/bluebird/src/constants.js create mode 100644 platforms/ios/www/libs/bluebird/src/context.js create mode 100644 platforms/ios/www/libs/bluebird/src/debuggability.js create mode 100644 platforms/ios/www/libs/bluebird/src/direct_resolve.js create mode 100644 platforms/ios/www/libs/bluebird/src/each.js create mode 100644 platforms/ios/www/libs/bluebird/src/errors.js create mode 100644 platforms/ios/www/libs/bluebird/src/es5.js create mode 100644 platforms/ios/www/libs/bluebird/src/filter.js create mode 100644 platforms/ios/www/libs/bluebird/src/finally.js create mode 100644 platforms/ios/www/libs/bluebird/src/generators.js create mode 100644 platforms/ios/www/libs/bluebird/src/join.js create mode 100644 platforms/ios/www/libs/bluebird/src/map.js create mode 100644 platforms/ios/www/libs/bluebird/src/method.js create mode 100644 platforms/ios/www/libs/bluebird/src/nodeback.js create mode 100644 platforms/ios/www/libs/bluebird/src/nodeify.js create mode 100644 platforms/ios/www/libs/bluebird/src/promise.js create mode 100644 platforms/ios/www/libs/bluebird/src/promise_array.js create mode 100644 platforms/ios/www/libs/bluebird/src/promisify.js create mode 100644 platforms/ios/www/libs/bluebird/src/props.js create mode 100644 platforms/ios/www/libs/bluebird/src/queue.js create mode 100644 platforms/ios/www/libs/bluebird/src/race.js create mode 100644 platforms/ios/www/libs/bluebird/src/reduce.js create mode 100644 platforms/ios/www/libs/bluebird/src/schedule.js create mode 100644 platforms/ios/www/libs/bluebird/src/settle.js create mode 100644 platforms/ios/www/libs/bluebird/src/some.js create mode 100644 platforms/ios/www/libs/bluebird/src/synchronous_inspection.js create mode 100644 platforms/ios/www/libs/bluebird/src/thenables.js create mode 100644 platforms/ios/www/libs/bluebird/src/timers.js create mode 100644 platforms/ios/www/libs/bluebird/src/using.js create mode 100644 platforms/ios/www/libs/bluebird/src/util.js create mode 100755 platforms/ios/www/libs/bluebird/tests create mode 100644 platforms/ios/www/libs/bluebird/tools/README.md create mode 100644 platforms/ios/www/libs/bluebird/tools/ast_passes.js create mode 100644 platforms/ios/www/libs/bluebird/tools/browser_test_generator.js create mode 100644 platforms/ios/www/libs/bluebird/tools/browser_test_runner.js create mode 100644 platforms/ios/www/libs/bluebird/tools/build.js create mode 100644 platforms/ios/www/libs/bluebird/tools/job-runner/job-runner.js create mode 100644 platforms/ios/www/libs/bluebird/tools/jshint.js create mode 100644 platforms/ios/www/libs/bluebird/tools/jshintrc_generator.js create mode 100644 platforms/ios/www/libs/bluebird/tools/mocha_runner.js create mode 100644 platforms/ios/www/libs/bluebird/tools/saucelabs_runner.js create mode 100644 platforms/ios/www/libs/bluebird/tools/test.js create mode 100755 platforms/ios/www/libs/bluebird/tools/utils.js create mode 100644 platforms/ios/www/libs/jquery/.bower.json create mode 100644 platforms/ios/www/libs/jquery/AUTHORS.txt create mode 100644 platforms/ios/www/libs/jquery/LICENSE.txt create mode 100644 platforms/ios/www/libs/jquery/README.md create mode 100644 platforms/ios/www/libs/jquery/bower.json create mode 100644 platforms/ios/www/libs/jquery/sizzle/LICENSE.txt create mode 100644 platforms/ios/www/libs/jquery/src/.jshintrc create mode 100644 platforms/ios/www/libs/jquery/src/ajax.js create mode 100644 platforms/ios/www/libs/jquery/src/ajax/jsonp.js create mode 100644 platforms/ios/www/libs/jquery/src/ajax/load.js create mode 100644 platforms/ios/www/libs/jquery/src/ajax/parseJSON.js create mode 100644 platforms/ios/www/libs/jquery/src/ajax/parseXML.js create mode 100644 platforms/ios/www/libs/jquery/src/ajax/script.js create mode 100644 platforms/ios/www/libs/jquery/src/ajax/var/location.js create mode 100644 platforms/ios/www/libs/jquery/src/ajax/var/nonce.js create mode 100644 platforms/ios/www/libs/jquery/src/ajax/var/rquery.js create mode 100644 platforms/ios/www/libs/jquery/src/ajax/xhr.js create mode 100644 platforms/ios/www/libs/jquery/src/attributes.js create mode 100644 platforms/ios/www/libs/jquery/src/attributes/attr.js create mode 100644 platforms/ios/www/libs/jquery/src/attributes/classes.js create mode 100644 platforms/ios/www/libs/jquery/src/attributes/prop.js create mode 100644 platforms/ios/www/libs/jquery/src/attributes/support.js create mode 100644 platforms/ios/www/libs/jquery/src/attributes/val.js create mode 100644 platforms/ios/www/libs/jquery/src/callbacks.js create mode 100644 platforms/ios/www/libs/jquery/src/core.js create mode 100644 platforms/ios/www/libs/jquery/src/core/DOMEval.js create mode 100644 platforms/ios/www/libs/jquery/src/core/access.js create mode 100644 platforms/ios/www/libs/jquery/src/core/init.js create mode 100644 platforms/ios/www/libs/jquery/src/core/parseHTML.js create mode 100644 platforms/ios/www/libs/jquery/src/core/ready.js create mode 100644 platforms/ios/www/libs/jquery/src/core/support.js create mode 100644 platforms/ios/www/libs/jquery/src/core/var/rsingleTag.js create mode 100644 platforms/ios/www/libs/jquery/src/css.js create mode 100644 platforms/ios/www/libs/jquery/src/css/addGetHookIf.js create mode 100644 platforms/ios/www/libs/jquery/src/css/adjustCSS.js create mode 100644 platforms/ios/www/libs/jquery/src/css/curCSS.js create mode 100644 platforms/ios/www/libs/jquery/src/css/defaultDisplay.js create mode 100644 platforms/ios/www/libs/jquery/src/css/hiddenVisibleSelectors.js create mode 100644 platforms/ios/www/libs/jquery/src/css/showHide.js create mode 100644 platforms/ios/www/libs/jquery/src/css/support.js create mode 100644 platforms/ios/www/libs/jquery/src/css/var/cssExpand.js create mode 100644 platforms/ios/www/libs/jquery/src/css/var/getStyles.js create mode 100644 platforms/ios/www/libs/jquery/src/css/var/isHidden.js create mode 100644 platforms/ios/www/libs/jquery/src/css/var/rmargin.js create mode 100644 platforms/ios/www/libs/jquery/src/css/var/rnumnonpx.js create mode 100644 platforms/ios/www/libs/jquery/src/css/var/swap.js create mode 100644 platforms/ios/www/libs/jquery/src/data.js create mode 100644 platforms/ios/www/libs/jquery/src/data/Data.js create mode 100644 platforms/ios/www/libs/jquery/src/data/accepts.js create mode 100644 platforms/ios/www/libs/jquery/src/data/support.js create mode 100644 platforms/ios/www/libs/jquery/src/data/var/acceptData.js create mode 100644 platforms/ios/www/libs/jquery/src/data/var/dataPriv.js create mode 100644 platforms/ios/www/libs/jquery/src/data/var/dataUser.js create mode 100644 platforms/ios/www/libs/jquery/src/deferred.js create mode 100644 platforms/ios/www/libs/jquery/src/deferred/exceptionHook.js create mode 100644 platforms/ios/www/libs/jquery/src/deprecated.js create mode 100644 platforms/ios/www/libs/jquery/src/dimensions.js create mode 100644 platforms/ios/www/libs/jquery/src/effects.js create mode 100644 platforms/ios/www/libs/jquery/src/effects/Tween.js create mode 100644 platforms/ios/www/libs/jquery/src/effects/animatedSelector.js create mode 100644 platforms/ios/www/libs/jquery/src/effects/support.js create mode 100644 platforms/ios/www/libs/jquery/src/event.js create mode 100644 platforms/ios/www/libs/jquery/src/event/ajax.js create mode 100644 platforms/ios/www/libs/jquery/src/event/alias.js create mode 100644 platforms/ios/www/libs/jquery/src/event/focusin.js create mode 100644 platforms/ios/www/libs/jquery/src/event/support.js create mode 100644 platforms/ios/www/libs/jquery/src/event/trigger.js create mode 100644 platforms/ios/www/libs/jquery/src/exports/amd.js create mode 100644 platforms/ios/www/libs/jquery/src/exports/global.js create mode 100644 platforms/ios/www/libs/jquery/src/intro.js create mode 100644 platforms/ios/www/libs/jquery/src/jquery.js create mode 100644 platforms/ios/www/libs/jquery/src/manipulation.js create mode 100644 platforms/ios/www/libs/jquery/src/manipulation/_evalUrl.js create mode 100644 platforms/ios/www/libs/jquery/src/manipulation/buildFragment.js create mode 100644 platforms/ios/www/libs/jquery/src/manipulation/createSafeFragment.js create mode 100644 platforms/ios/www/libs/jquery/src/manipulation/getAll.js create mode 100644 platforms/ios/www/libs/jquery/src/manipulation/setGlobalEval.js create mode 100644 platforms/ios/www/libs/jquery/src/manipulation/support.js create mode 100644 platforms/ios/www/libs/jquery/src/manipulation/var/nodeNames.js create mode 100644 platforms/ios/www/libs/jquery/src/manipulation/var/rcheckableType.js create mode 100644 platforms/ios/www/libs/jquery/src/manipulation/var/rleadingWhitespace.js create mode 100644 platforms/ios/www/libs/jquery/src/manipulation/var/rscriptType.js create mode 100644 platforms/ios/www/libs/jquery/src/manipulation/var/rtagName.js create mode 100644 platforms/ios/www/libs/jquery/src/manipulation/wrapMap.js create mode 100644 platforms/ios/www/libs/jquery/src/offset.js create mode 100644 platforms/ios/www/libs/jquery/src/outro.js create mode 100644 platforms/ios/www/libs/jquery/src/queue.js create mode 100644 platforms/ios/www/libs/jquery/src/queue/delay.js create mode 100644 platforms/ios/www/libs/jquery/src/selector-native.js create mode 100644 platforms/ios/www/libs/jquery/src/selector-sizzle.js create mode 100644 platforms/ios/www/libs/jquery/src/selector.js create mode 100644 platforms/ios/www/libs/jquery/src/serialize.js create mode 100644 platforms/ios/www/libs/jquery/src/support.js create mode 100644 platforms/ios/www/libs/jquery/src/traversing.js create mode 100644 platforms/ios/www/libs/jquery/src/traversing/findFilter.js create mode 100644 platforms/ios/www/libs/jquery/src/traversing/var/dir.js create mode 100644 platforms/ios/www/libs/jquery/src/traversing/var/rneedsContext.js create mode 100644 platforms/ios/www/libs/jquery/src/traversing/var/siblings.js create mode 100644 platforms/ios/www/libs/jquery/src/var/arr.js create mode 100644 platforms/ios/www/libs/jquery/src/var/class2type.js create mode 100644 platforms/ios/www/libs/jquery/src/var/concat.js create mode 100644 platforms/ios/www/libs/jquery/src/var/deletedIds.js create mode 100644 platforms/ios/www/libs/jquery/src/var/document.js create mode 100644 platforms/ios/www/libs/jquery/src/var/documentElement.js create mode 100644 platforms/ios/www/libs/jquery/src/var/hasOwn.js create mode 100644 platforms/ios/www/libs/jquery/src/var/indexOf.js create mode 100644 platforms/ios/www/libs/jquery/src/var/pnum.js create mode 100644 platforms/ios/www/libs/jquery/src/var/push.js create mode 100644 platforms/ios/www/libs/jquery/src/var/rcssNum.js create mode 100644 platforms/ios/www/libs/jquery/src/var/rnotwhite.js create mode 100644 platforms/ios/www/libs/jquery/src/var/slice.js create mode 100644 platforms/ios/www/libs/jquery/src/var/support.js create mode 100644 platforms/ios/www/libs/jquery/src/var/toString.js create mode 100644 platforms/ios/www/libs/jquery/src/wrap.js create mode 100644 platforms/ios/www/libs/mui/.bower.json create mode 100644 platforms/ios/www/libs/mui/AUTHORS.txt create mode 100644 platforms/ios/www/libs/mui/CHANGELOG.md create mode 100644 platforms/ios/www/libs/mui/LICENSE.txt create mode 100644 platforms/ios/www/libs/mui/README.md create mode 100644 platforms/ios/www/libs/mui/RELEASE.md create mode 100644 platforms/ios/www/libs/mui/bower.json create mode 100644 platforms/ios/www/libs/mui/packages/cdn/angular/mui-angular.js create mode 100644 platforms/ios/www/libs/mui/packages/cdn/angular/mui-angular.min.js create mode 100644 platforms/ios/www/libs/mui/packages/cdn/css/mui.css create mode 100644 platforms/ios/www/libs/mui/packages/cdn/css/mui.min.css create mode 100644 platforms/ios/www/libs/mui/packages/cdn/email/mui-email-inline.css create mode 100644 platforms/ios/www/libs/mui/packages/cdn/email/mui-email-styletag.css create mode 100644 platforms/ios/www/libs/mui/packages/cdn/extra/mui-angular-combined.js create mode 100644 platforms/ios/www/libs/mui/packages/cdn/extra/mui-colors.css create mode 100644 platforms/ios/www/libs/mui/packages/cdn/extra/mui-combined.js create mode 100644 platforms/ios/www/libs/mui/packages/cdn/extra/mui-react-combined.js create mode 100644 platforms/ios/www/libs/mui/packages/cdn/js/mui.js create mode 100644 platforms/ios/www/libs/mui/packages/cdn/js/mui.min.js create mode 100644 platforms/ios/www/libs/mui/packages/cdn/react/mui-react.js create mode 100644 platforms/ios/www/libs/mui/packages/cdn/react/mui-react.min.js create mode 100644 platforms/ios/www/libs/mui/packages/cdn/webcomponents/mui-webcomponents.js create mode 100644 platforms/ios/www/libs/mui/packages/cdn/webcomponents/mui-webcomponents.min.js create mode 100644 platforms/ios/www/libs/mui/packages/meteor/LICENSE.txt create mode 100644 platforms/ios/www/libs/mui/packages/meteor/README.md create mode 100644 platforms/ios/www/libs/mui/packages/meteor/lib/css/mui.css create mode 100644 platforms/ios/www/libs/mui/packages/meteor/lib/css/mui.min.css create mode 100644 platforms/ios/www/libs/mui/packages/meteor/lib/js/mui.js create mode 100644 platforms/ios/www/libs/mui/packages/meteor/lib/js/mui.min.js create mode 100644 platforms/ios/www/libs/mui/packages/meteor/package.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/LICENSE.txt create mode 100644 platforms/ios/www/libs/mui/packages/npm/README.md create mode 100644 platforms/ios/www/libs/mui/packages/npm/angular.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/index.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/angular/appbar.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/angular/babel-helpers.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/angular/button.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/angular/caret.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/angular/checkbox.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/angular/col.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/angular/container.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/angular/divider.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/angular/dropdown-item.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/angular/dropdown.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/angular/form.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/angular/input.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/angular/panel.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/angular/radio.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/angular/row.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/angular/select.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/angular/tabs.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/css/mui.css create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/css/mui.min.css create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/js/config.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/js/lib/forms.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/js/lib/jqLite.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/js/lib/util.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/js/overlay.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/react/_helpers.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/react/appbar.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/react/babel-helpers.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/react/button.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/react/caret.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/react/checkbox.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/react/col.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/react/container.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/react/divider.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/react/dropdown-item.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/react/dropdown.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/react/form.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/react/input.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/react/option.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/react/panel.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/react/radio.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/react/row.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/react/select.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/react/tab.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/react/tabs.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/react/text-field.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/react/textarea.js create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/sass/mui-colors.scss create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/sass/mui.scss create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/sass/mui/_appbar.scss create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/sass/mui/_buttons.scss create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/sass/mui/_checkbox-and-radio.scss create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/sass/mui/_colors.scss create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/sass/mui/_containers.scss create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/sass/mui/_divider.scss create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/sass/mui/_dropdown.scss create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/sass/mui/_form.scss create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/sass/mui/_grid.scss create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/sass/mui/_helpers.scss create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/sass/mui/_mixins.scss create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/sass/mui/_overlay.scss create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/sass/mui/_panel.scss create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/sass/mui/_reboot.scss create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/sass/mui/_ripple.scss create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/sass/mui/_select.scss create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/sass/mui/_table.scss create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/sass/mui/_tabs.scss create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/sass/mui/_textfield.scss create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/sass/mui/_typography.scss create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/sass/mui/_variables.scss create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/sass/mui/mixins/_buttons.scss create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/sass/mui/mixins/_grid-framework.scss create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/sass/mui/mixins/_typography.scss create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/sass/mui/mixins/_util.scss create mode 100644 platforms/ios/www/libs/mui/packages/npm/lib/sass/normalize-3.0.3.scss create mode 100644 platforms/ios/www/libs/mui/packages/npm/react.js create mode 100644 platforms/ios/www/libs/mui/src/angular/appbar.js create mode 100644 platforms/ios/www/libs/mui/src/angular/button.js create mode 100644 platforms/ios/www/libs/mui/src/angular/caret.js create mode 100644 platforms/ios/www/libs/mui/src/angular/checkbox.js create mode 100644 platforms/ios/www/libs/mui/src/angular/col.js create mode 100644 platforms/ios/www/libs/mui/src/angular/container.js create mode 100644 platforms/ios/www/libs/mui/src/angular/divider.js create mode 100644 platforms/ios/www/libs/mui/src/angular/dropdown-item.js create mode 100644 platforms/ios/www/libs/mui/src/angular/dropdown.js create mode 100644 platforms/ios/www/libs/mui/src/angular/form.js create mode 100644 platforms/ios/www/libs/mui/src/angular/input.js create mode 100644 platforms/ios/www/libs/mui/src/angular/panel.js create mode 100644 platforms/ios/www/libs/mui/src/angular/radio.js create mode 100644 platforms/ios/www/libs/mui/src/angular/row.js create mode 100644 platforms/ios/www/libs/mui/src/angular/select.js create mode 100644 platforms/ios/www/libs/mui/src/angular/tabs.js create mode 100644 platforms/ios/www/libs/mui/src/email/mui-email-inline.scss create mode 100644 platforms/ios/www/libs/mui/src/email/mui-email-styletag.scss create mode 100644 platforms/ios/www/libs/mui/src/email/mui-email/_body.scss create mode 100644 platforms/ios/www/libs/mui/src/email/mui-email/_buttons.scss create mode 100644 platforms/ios/www/libs/mui/src/email/mui-email/_containers.scss create mode 100644 platforms/ios/www/libs/mui/src/email/mui-email/_divider.scss create mode 100644 platforms/ios/www/libs/mui/src/email/mui-email/_grid.scss create mode 100644 platforms/ios/www/libs/mui/src/email/mui-email/_helpers.scss create mode 100644 platforms/ios/www/libs/mui/src/email/mui-email/_normalize.scss create mode 100644 platforms/ios/www/libs/mui/src/email/mui-email/_panel.scss create mode 100644 platforms/ios/www/libs/mui/src/email/mui-email/_reboot.scss create mode 100644 platforms/ios/www/libs/mui/src/email/mui-email/_styletag.scss create mode 100644 platforms/ios/www/libs/mui/src/email/mui-email/_typography.scss create mode 100644 platforms/ios/www/libs/mui/src/email/mui-email/_variables.scss create mode 100644 platforms/ios/www/libs/mui/src/js/config.js create mode 100644 platforms/ios/www/libs/mui/src/js/dropdown.js create mode 100644 platforms/ios/www/libs/mui/src/js/lib/forms.js create mode 100644 platforms/ios/www/libs/mui/src/js/lib/jqLite.js create mode 100644 platforms/ios/www/libs/mui/src/js/lib/util.js create mode 100644 platforms/ios/www/libs/mui/src/js/overlay.js create mode 100644 platforms/ios/www/libs/mui/src/js/ripple.js create mode 100644 platforms/ios/www/libs/mui/src/js/select.js create mode 100644 platforms/ios/www/libs/mui/src/js/tabs.js create mode 100644 platforms/ios/www/libs/mui/src/js/textfield.js create mode 100644 platforms/ios/www/libs/mui/src/react/_helpers.js create mode 100644 platforms/ios/www/libs/mui/src/react/appbar.jsx create mode 100644 platforms/ios/www/libs/mui/src/react/button.jsx create mode 100644 platforms/ios/www/libs/mui/src/react/caret.jsx create mode 100644 platforms/ios/www/libs/mui/src/react/checkbox.jsx create mode 100644 platforms/ios/www/libs/mui/src/react/col.jsx create mode 100644 platforms/ios/www/libs/mui/src/react/container.jsx create mode 100644 platforms/ios/www/libs/mui/src/react/divider.jsx create mode 100644 platforms/ios/www/libs/mui/src/react/dropdown-item.jsx create mode 100644 platforms/ios/www/libs/mui/src/react/dropdown.jsx create mode 100644 platforms/ios/www/libs/mui/src/react/form.jsx create mode 100644 platforms/ios/www/libs/mui/src/react/input.jsx create mode 100644 platforms/ios/www/libs/mui/src/react/option.jsx create mode 100644 platforms/ios/www/libs/mui/src/react/panel.jsx create mode 100644 platforms/ios/www/libs/mui/src/react/radio.jsx create mode 100644 platforms/ios/www/libs/mui/src/react/row.jsx create mode 100644 platforms/ios/www/libs/mui/src/react/select.jsx create mode 100644 platforms/ios/www/libs/mui/src/react/tab.jsx create mode 100644 platforms/ios/www/libs/mui/src/react/tabs.jsx create mode 100644 platforms/ios/www/libs/mui/src/react/text-field.jsx create mode 100644 platforms/ios/www/libs/mui/src/react/textarea.jsx create mode 100644 platforms/ios/www/libs/mui/src/sass/mui-colors.scss create mode 100644 platforms/ios/www/libs/mui/src/sass/mui.scss create mode 100644 platforms/ios/www/libs/mui/src/sass/mui/_appbar.scss create mode 100644 platforms/ios/www/libs/mui/src/sass/mui/_buttons.scss create mode 100644 platforms/ios/www/libs/mui/src/sass/mui/_checkbox-and-radio.scss create mode 100644 platforms/ios/www/libs/mui/src/sass/mui/_colors.scss create mode 100644 platforms/ios/www/libs/mui/src/sass/mui/_containers.scss create mode 100644 platforms/ios/www/libs/mui/src/sass/mui/_divider.scss create mode 100644 platforms/ios/www/libs/mui/src/sass/mui/_dropdown.scss create mode 100644 platforms/ios/www/libs/mui/src/sass/mui/_form.scss create mode 100644 platforms/ios/www/libs/mui/src/sass/mui/_grid.scss create mode 100644 platforms/ios/www/libs/mui/src/sass/mui/_helpers.scss create mode 100644 platforms/ios/www/libs/mui/src/sass/mui/_mixins.scss create mode 100644 platforms/ios/www/libs/mui/src/sass/mui/_overlay.scss create mode 100644 platforms/ios/www/libs/mui/src/sass/mui/_panel.scss create mode 100644 platforms/ios/www/libs/mui/src/sass/mui/_reboot.scss create mode 100644 platforms/ios/www/libs/mui/src/sass/mui/_ripple.scss create mode 100644 platforms/ios/www/libs/mui/src/sass/mui/_select.scss create mode 100644 platforms/ios/www/libs/mui/src/sass/mui/_table.scss create mode 100644 platforms/ios/www/libs/mui/src/sass/mui/_tabs.scss create mode 100644 platforms/ios/www/libs/mui/src/sass/mui/_textfield.scss create mode 100644 platforms/ios/www/libs/mui/src/sass/mui/_typography.scss create mode 100644 platforms/ios/www/libs/mui/src/sass/mui/_variables.scss create mode 100644 platforms/ios/www/libs/mui/src/sass/mui/mixins/_buttons.scss create mode 100644 platforms/ios/www/libs/mui/src/sass/mui/mixins/_grid-framework.scss create mode 100644 platforms/ios/www/libs/mui/src/sass/mui/mixins/_typography.scss create mode 100644 platforms/ios/www/libs/mui/src/sass/mui/mixins/_util.scss create mode 100644 platforms/ios/www/libs/mui/src/sass/normalize-3.0.3.scss create mode 100644 platforms/ios/www/libs/mui/src/webcomponents/buttons.js create mode 100644 platforms/ios/www/libs/mui/src/webcomponents/forms.js create mode 100644 platforms/ios/www/plugins/cordova-plugin-ble-central/www/ble.js create mode 100644 platforms/ios/www/test.html create mode 100644 platforms/platforms.json create mode 100644 plugins/android.json create mode 100644 plugins/cordova-plugin-ble-central/CHANGES.txt create mode 100644 plugins/cordova-plugin-ble-central/LICENSE.txt create mode 100644 plugins/cordova-plugin-ble-central/README.md create mode 100644 plugins/cordova-plugin-ble-central/examples/battery/.npmignore create mode 100644 plugins/cordova-plugin-ble-central/examples/battery/README.md create mode 100644 plugins/cordova-plugin-ble-central/examples/battery/config.xml create mode 100644 plugins/cordova-plugin-ble-central/examples/battery/hooks/README.md create mode 100644 plugins/cordova-plugin-ble-central/examples/battery/www/css/index.css create mode 100644 plugins/cordova-plugin-ble-central/examples/battery/www/index.html create mode 100644 plugins/cordova-plugin-ble-central/examples/battery/www/js/index.js create mode 100644 plugins/cordova-plugin-ble-central/examples/bluefruitle/.npmignore create mode 100644 plugins/cordova-plugin-ble-central/examples/bluefruitle/README.md create mode 100644 plugins/cordova-plugin-ble-central/examples/bluefruitle/config.xml create mode 100644 plugins/cordova-plugin-ble-central/examples/bluefruitle/hooks/README.md create mode 100644 plugins/cordova-plugin-ble-central/examples/bluefruitle/www/css/index.css create mode 100644 plugins/cordova-plugin-ble-central/examples/bluefruitle/www/index.html create mode 100644 plugins/cordova-plugin-ble-central/examples/bluefruitle/www/js/index.js create mode 100644 plugins/cordova-plugin-ble-central/examples/heartrate/README.md create mode 100644 plugins/cordova-plugin-ble-central/examples/heartrate/config.xml create mode 100644 plugins/cordova-plugin-ble-central/examples/heartrate/hooks/README.md create mode 100644 plugins/cordova-plugin-ble-central/examples/heartrate/www/css/index.css create mode 100644 plugins/cordova-plugin-ble-central/examples/heartrate/www/index.html create mode 100644 plugins/cordova-plugin-ble-central/examples/heartrate/www/js/index.js create mode 100644 plugins/cordova-plugin-ble-central/examples/metawear/.npmignore create mode 100644 plugins/cordova-plugin-ble-central/examples/metawear/README.md create mode 100644 plugins/cordova-plugin-ble-central/examples/metawear/config.xml create mode 100644 plugins/cordova-plugin-ble-central/examples/metawear/hooks/README.md create mode 100644 plugins/cordova-plugin-ble-central/examples/metawear/www/css/index.css create mode 100644 plugins/cordova-plugin-ble-central/examples/metawear/www/index.html create mode 100644 plugins/cordova-plugin-ble-central/examples/metawear/www/js/index.js create mode 100644 plugins/cordova-plugin-ble-central/examples/redbearlab/.npmignore create mode 100644 plugins/cordova-plugin-ble-central/examples/redbearlab/README.md create mode 100644 plugins/cordova-plugin-ble-central/examples/redbearlab/config.xml create mode 100644 plugins/cordova-plugin-ble-central/examples/redbearlab/hooks/README.md create mode 100644 plugins/cordova-plugin-ble-central/examples/redbearlab/www/css/index.css create mode 100644 plugins/cordova-plugin-ble-central/examples/redbearlab/www/index.html create mode 100644 plugins/cordova-plugin-ble-central/examples/redbearlab/www/js/index.js create mode 100644 plugins/cordova-plugin-ble-central/examples/rfduinoLedButton/.npmignore create mode 100644 plugins/cordova-plugin-ble-central/examples/rfduinoLedButton/README.md create mode 100644 plugins/cordova-plugin-ble-central/examples/rfduinoLedButton/config.xml create mode 100644 plugins/cordova-plugin-ble-central/examples/rfduinoLedButton/hooks/README.md create mode 100644 plugins/cordova-plugin-ble-central/examples/rfduinoLedButton/www/css/index.css create mode 100644 plugins/cordova-plugin-ble-central/examples/rfduinoLedButton/www/index.html create mode 100644 plugins/cordova-plugin-ble-central/examples/rfduinoLedButton/www/js/index.js create mode 100644 plugins/cordova-plugin-ble-central/examples/robosmart/.npmignore create mode 100644 plugins/cordova-plugin-ble-central/examples/robosmart/README.md create mode 100644 plugins/cordova-plugin-ble-central/examples/robosmart/config.xml create mode 100644 plugins/cordova-plugin-ble-central/examples/robosmart/hooks/README.md create mode 100644 plugins/cordova-plugin-ble-central/examples/robosmart/www/css/index.css create mode 100644 plugins/cordova-plugin-ble-central/examples/robosmart/www/index.html create mode 100644 plugins/cordova-plugin-ble-central/examples/robosmart/www/js/index.js create mode 100644 plugins/cordova-plugin-ble-central/examples/sensortag/.npmignore create mode 100644 plugins/cordova-plugin-ble-central/examples/sensortag/README.md create mode 100644 plugins/cordova-plugin-ble-central/examples/sensortag/config.xml create mode 100644 plugins/cordova-plugin-ble-central/examples/sensortag/hooks/README.md create mode 100644 plugins/cordova-plugin-ble-central/examples/sensortag/www/css/index.css create mode 100644 plugins/cordova-plugin-ble-central/examples/sensortag/www/index.html create mode 100644 plugins/cordova-plugin-ble-central/examples/sensortag/www/js/index.js create mode 100644 plugins/cordova-plugin-ble-central/examples/sensortag_cc2650/.npmignore create mode 100644 plugins/cordova-plugin-ble-central/examples/sensortag_cc2650/README.md create mode 100644 plugins/cordova-plugin-ble-central/examples/sensortag_cc2650/config.xml create mode 100644 plugins/cordova-plugin-ble-central/examples/sensortag_cc2650/hooks/README.md create mode 100644 plugins/cordova-plugin-ble-central/examples/sensortag_cc2650/www/css/index.css create mode 100644 plugins/cordova-plugin-ble-central/examples/sensortag_cc2650/www/index.html create mode 100644 plugins/cordova-plugin-ble-central/examples/sensortag_cc2650/www/js/index.js create mode 100644 plugins/cordova-plugin-ble-central/package.json create mode 100644 plugins/cordova-plugin-ble-central/plugin.xml create mode 100644 plugins/cordova-plugin-ble-central/src/android/BLECentralPlugin.java create mode 100644 plugins/cordova-plugin-ble-central/src/android/BLECommand.java create mode 100644 plugins/cordova-plugin-ble-central/src/android/Helper.java create mode 100644 plugins/cordova-plugin-ble-central/src/android/Peripheral.java create mode 100644 plugins/cordova-plugin-ble-central/src/android/UUIDHelper.java create mode 100644 plugins/cordova-plugin-ble-central/src/browser/BLECentralPlugin.js create mode 100644 plugins/cordova-plugin-ble-central/src/ios/BLECentralPlugin.h create mode 100644 plugins/cordova-plugin-ble-central/src/ios/BLECentralPlugin.m create mode 100644 plugins/cordova-plugin-ble-central/src/ios/BLECommandContext.h create mode 100644 plugins/cordova-plugin-ble-central/src/ios/BLECommandContext.m create mode 100644 plugins/cordova-plugin-ble-central/src/ios/CBPeripheral+Extensions.h create mode 100644 plugins/cordova-plugin-ble-central/src/ios/CBPeripheral+Extensions.m create mode 100644 plugins/cordova-plugin-ble-central/src/wp/BLECentralPlugin.cs create mode 100644 plugins/cordova-plugin-ble-central/tests/plugin.xml create mode 100644 plugins/cordova-plugin-ble-central/tests/tests.js create mode 100644 plugins/cordova-plugin-ble-central/www/ble.js create mode 100644 plugins/cordova-plugin-compat/README.md create mode 100644 plugins/cordova-plugin-compat/package.json create mode 100644 plugins/cordova-plugin-compat/plugin.xml create mode 100644 plugins/cordova-plugin-compat/src/android/PermissionHelper.java create mode 100644 plugins/cordova-plugin-whitelist/CONTRIBUTING.md create mode 100644 plugins/cordova-plugin-whitelist/LICENSE create mode 100644 plugins/cordova-plugin-whitelist/NOTICE create mode 100644 plugins/cordova-plugin-whitelist/README.md create mode 100644 plugins/cordova-plugin-whitelist/RELEASENOTES.md create mode 100644 plugins/cordova-plugin-whitelist/doc/de/README.md create mode 100644 plugins/cordova-plugin-whitelist/doc/es/README.md create mode 100644 plugins/cordova-plugin-whitelist/doc/fr/README.md create mode 100644 plugins/cordova-plugin-whitelist/doc/it/README.md create mode 100644 plugins/cordova-plugin-whitelist/doc/ja/README.md create mode 100644 plugins/cordova-plugin-whitelist/doc/ko/README.md create mode 100644 plugins/cordova-plugin-whitelist/doc/pl/README.md create mode 100644 plugins/cordova-plugin-whitelist/doc/zh/README.md create mode 100644 plugins/cordova-plugin-whitelist/package.json create mode 100644 plugins/cordova-plugin-whitelist/plugin.xml create mode 100644 plugins/cordova-plugin-whitelist/src/android/WhitelistPlugin.java create mode 100644 plugins/fetch.json create mode 100644 plugins/ios.json create mode 100644 www/css/app.css create mode 100644 www/css/index.css create mode 100644 www/css/material-icons.css create mode 100644 www/css/mui.css create mode 100644 www/css/mui.custom.css create mode 100644 www/css/mui.min.css create mode 100644 www/img/logo.png create mode 100644 www/index.html create mode 100644 www/js/device/CC2650/cc2650_accelerometer.js create mode 100644 www/js/device/CC2650/cc2650_barometer.js create mode 100644 www/js/device/CC2650/cc2650_luxometer.js create mode 100644 www/js/index.js create mode 100644 www/js/standards/battery.js create mode 100644 www/js/standards/button.js create mode 100644 www/js/standards/capability.js create mode 100644 www/js/test.js create mode 100644 www/libs/bluebird/.bower.json create mode 100644 www/libs/bluebird/API.md create mode 100644 www/libs/bluebird/CONTRIBUTING.md create mode 100644 www/libs/bluebird/LICENSE create mode 100644 www/libs/bluebird/README.md create mode 100755 www/libs/bluebird/bench create mode 100644 www/libs/bluebird/bower.json create mode 100755 www/libs/bluebird/build create mode 100644 www/libs/bluebird/changelog.md create mode 100644 www/libs/bluebird/deprecated_apis.md create mode 100644 www/libs/bluebird/docs/Gemfile create mode 100644 www/libs/bluebird/docs/README.md create mode 100644 www/libs/bluebird/docs/_config.yml create mode 100644 www/libs/bluebird/docs/_layouts/api.html create mode 100644 www/libs/bluebird/docs/_layouts/default.html create mode 100644 www/libs/bluebird/docs/_layouts/page.html create mode 100644 www/libs/bluebird/docs/_plugins/mdate.rb create mode 100644 www/libs/bluebird/docs/_plugins/plugin.rb create mode 100644 www/libs/bluebird/docs/css/main.css create mode 100644 www/libs/bluebird/docs/css/mono-blue.css create mode 100644 www/libs/bluebird/docs/docs/anti-patterns.md create mode 100644 www/libs/bluebird/docs/docs/api-reference.md create mode 100644 www/libs/bluebird/docs/docs/api/aggregateerror.md create mode 100644 www/libs/bluebird/docs/docs/api/all.md create mode 100644 www/libs/bluebird/docs/docs/api/any.md create mode 100644 www/libs/bluebird/docs/docs/api/ascallback.md create mode 100644 www/libs/bluebird/docs/docs/api/bind.md create mode 100644 www/libs/bluebird/docs/docs/api/built-in-error-types.md create mode 100644 www/libs/bluebird/docs/docs/api/call.md create mode 100644 www/libs/bluebird/docs/docs/api/cancel.md create mode 100644 www/libs/bluebird/docs/docs/api/cancellation.md create mode 100644 www/libs/bluebird/docs/docs/api/cancellationerror.md create mode 100644 www/libs/bluebird/docs/docs/api/catch.md create mode 100644 www/libs/bluebird/docs/docs/api/catchreturn.md create mode 100644 www/libs/bluebird/docs/docs/api/catchthrow.md create mode 100644 www/libs/bluebird/docs/docs/api/collections.md create mode 100644 www/libs/bluebird/docs/docs/api/core.md create mode 100644 www/libs/bluebird/docs/docs/api/deferred-migration.md create mode 100644 www/libs/bluebird/docs/docs/api/delay.md create mode 100644 www/libs/bluebird/docs/docs/api/disposer.md create mode 100644 www/libs/bluebird/docs/docs/api/done.md create mode 100644 www/libs/bluebird/docs/docs/api/each.md create mode 100644 www/libs/bluebird/docs/docs/api/environment-variables.md create mode 100644 www/libs/bluebird/docs/docs/api/error-management-configuration.md create mode 100644 www/libs/bluebird/docs/docs/api/error.md create mode 100644 www/libs/bluebird/docs/docs/api/filter.md create mode 100644 www/libs/bluebird/docs/docs/api/finally.md create mode 100644 www/libs/bluebird/docs/docs/api/generators.md create mode 100644 www/libs/bluebird/docs/docs/api/get.md create mode 100644 www/libs/bluebird/docs/docs/api/iscancelled.md create mode 100644 www/libs/bluebird/docs/docs/api/isfulfilled.md create mode 100644 www/libs/bluebird/docs/docs/api/ispending.md create mode 100644 www/libs/bluebird/docs/docs/api/isrejected.md create mode 100644 www/libs/bluebird/docs/docs/api/map.md create mode 100644 www/libs/bluebird/docs/docs/api/mapseries.md create mode 100644 www/libs/bluebird/docs/docs/api/new-promise.md create mode 100644 www/libs/bluebird/docs/docs/api/operationalerror.md create mode 100644 www/libs/bluebird/docs/docs/api/progression-migration.md create mode 100644 www/libs/bluebird/docs/docs/api/promise.all.md create mode 100644 www/libs/bluebird/docs/docs/api/promise.any.md create mode 100644 www/libs/bluebird/docs/docs/api/promise.bind.md create mode 100644 www/libs/bluebird/docs/docs/api/promise.config.md create mode 100644 www/libs/bluebird/docs/docs/api/promise.coroutine.addyieldhandler.md create mode 100644 www/libs/bluebird/docs/docs/api/promise.coroutine.md create mode 100644 www/libs/bluebird/docs/docs/api/promise.delay.md create mode 100644 www/libs/bluebird/docs/docs/api/promise.each.md create mode 100644 www/libs/bluebird/docs/docs/api/promise.filter.md create mode 100644 www/libs/bluebird/docs/docs/api/promise.fromcallback.md create mode 100644 www/libs/bluebird/docs/docs/api/promise.join.md create mode 100644 www/libs/bluebird/docs/docs/api/promise.longstacktraces.md create mode 100644 www/libs/bluebird/docs/docs/api/promise.map.md create mode 100644 www/libs/bluebird/docs/docs/api/promise.mapseries.md create mode 100644 www/libs/bluebird/docs/docs/api/promise.method.md create mode 100644 www/libs/bluebird/docs/docs/api/promise.noconflict.md create mode 100644 www/libs/bluebird/docs/docs/api/promise.onpossiblyunhandledrejection.md create mode 100644 www/libs/bluebird/docs/docs/api/promise.onunhandledrejectionhandled.md create mode 100644 www/libs/bluebird/docs/docs/api/promise.promisify.md create mode 100644 www/libs/bluebird/docs/docs/api/promise.promisifyall.md create mode 100644 www/libs/bluebird/docs/docs/api/promise.props.md create mode 100644 www/libs/bluebird/docs/docs/api/promise.race.md create mode 100644 www/libs/bluebird/docs/docs/api/promise.reduce.md create mode 100644 www/libs/bluebird/docs/docs/api/promise.reject.md create mode 100644 www/libs/bluebird/docs/docs/api/promise.resolve.md create mode 100644 www/libs/bluebird/docs/docs/api/promise.setscheduler.md create mode 100644 www/libs/bluebird/docs/docs/api/promise.some.md create mode 100644 www/libs/bluebird/docs/docs/api/promise.try.md create mode 100644 www/libs/bluebird/docs/docs/api/promise.using.md create mode 100644 www/libs/bluebird/docs/docs/api/promiseinspection.md create mode 100644 www/libs/bluebird/docs/docs/api/promisification.md create mode 100644 www/libs/bluebird/docs/docs/api/props.md create mode 100644 www/libs/bluebird/docs/docs/api/race.md create mode 100644 www/libs/bluebird/docs/docs/api/reason.md create mode 100644 www/libs/bluebird/docs/docs/api/reduce.md create mode 100644 www/libs/bluebird/docs/docs/api/reflect.md create mode 100644 www/libs/bluebird/docs/docs/api/resource-management.md create mode 100644 www/libs/bluebird/docs/docs/api/return.md create mode 100644 www/libs/bluebird/docs/docs/api/some.md create mode 100644 www/libs/bluebird/docs/docs/api/spread.md create mode 100644 www/libs/bluebird/docs/docs/api/suppressunhandledrejections.md create mode 100644 www/libs/bluebird/docs/docs/api/synchronous-inspection.md create mode 100644 www/libs/bluebird/docs/docs/api/tap.md create mode 100644 www/libs/bluebird/docs/docs/api/then.md create mode 100644 www/libs/bluebird/docs/docs/api/throw.md create mode 100644 www/libs/bluebird/docs/docs/api/timeout.md create mode 100644 www/libs/bluebird/docs/docs/api/timeouterror.md create mode 100644 www/libs/bluebird/docs/docs/api/timers.md create mode 100644 www/libs/bluebird/docs/docs/api/utility.md create mode 100644 www/libs/bluebird/docs/docs/api/value.md create mode 100644 www/libs/bluebird/docs/docs/async-dialogs.md create mode 100644 www/libs/bluebird/docs/docs/beginners-guide.md create mode 100644 www/libs/bluebird/docs/docs/benchmarks.md create mode 100644 www/libs/bluebird/docs/docs/changelog.md create mode 100644 www/libs/bluebird/docs/docs/coming-from-other-languages.md create mode 100644 www/libs/bluebird/docs/docs/coming-from-other-libraries.md create mode 100644 www/libs/bluebird/docs/docs/contribute.md create mode 100644 www/libs/bluebird/docs/docs/deprecated-apis.md create mode 100644 www/libs/bluebird/docs/docs/deprecated_apis.md create mode 100644 www/libs/bluebird/docs/docs/download-api-reference.md create mode 100644 www/libs/bluebird/docs/docs/error-explanations.md create mode 100644 www/libs/bluebird/docs/docs/features.md create mode 100644 www/libs/bluebird/docs/docs/getting-started.md create mode 100644 www/libs/bluebird/docs/docs/install.md create mode 100644 www/libs/bluebird/docs/docs/new-in-bluebird-3.md create mode 100644 www/libs/bluebird/docs/docs/support.md create mode 100644 www/libs/bluebird/docs/docs/warning-explanations.md create mode 100644 www/libs/bluebird/docs/docs/what-about-generators.md create mode 100644 www/libs/bluebird/docs/docs/why-bluebird.md create mode 100644 www/libs/bluebird/docs/docs/why-performance.md create mode 100644 www/libs/bluebird/docs/docs/why-promises.md create mode 100644 www/libs/bluebird/docs/docs/working-with-callbacks.md create mode 100644 www/libs/bluebird/docs/helpers.rb create mode 100755 www/libs/bluebird/docs/img/favicon.png create mode 100644 www/libs/bluebird/docs/img/logo.png create mode 100644 www/libs/bluebird/docs/index.html create mode 100644 www/libs/bluebird/issue_template.md create mode 100644 www/libs/bluebird/js/browser/bluebird.core.js create mode 100644 www/libs/bluebird/js/browser/bluebird.core.min.js create mode 100644 www/libs/bluebird/js/browser/bluebird.js create mode 100644 www/libs/bluebird/js/browser/bluebird.min.js create mode 100644 www/libs/bluebird/package.json create mode 100644 www/libs/bluebird/src/any.js create mode 100644 www/libs/bluebird/src/assert.js create mode 100644 www/libs/bluebird/src/async.js create mode 100644 www/libs/bluebird/src/bind.js create mode 100644 www/libs/bluebird/src/bluebird.js create mode 100644 www/libs/bluebird/src/call_get.js create mode 100644 www/libs/bluebird/src/cancel.js create mode 100644 www/libs/bluebird/src/catch_filter.js create mode 100644 www/libs/bluebird/src/constants.js create mode 100644 www/libs/bluebird/src/context.js create mode 100644 www/libs/bluebird/src/debuggability.js create mode 100644 www/libs/bluebird/src/direct_resolve.js create mode 100644 www/libs/bluebird/src/each.js create mode 100644 www/libs/bluebird/src/errors.js create mode 100644 www/libs/bluebird/src/es5.js create mode 100644 www/libs/bluebird/src/filter.js create mode 100644 www/libs/bluebird/src/finally.js create mode 100644 www/libs/bluebird/src/generators.js create mode 100644 www/libs/bluebird/src/join.js create mode 100644 www/libs/bluebird/src/map.js create mode 100644 www/libs/bluebird/src/method.js create mode 100644 www/libs/bluebird/src/nodeback.js create mode 100644 www/libs/bluebird/src/nodeify.js create mode 100644 www/libs/bluebird/src/promise.js create mode 100644 www/libs/bluebird/src/promise_array.js create mode 100644 www/libs/bluebird/src/promisify.js create mode 100644 www/libs/bluebird/src/props.js create mode 100644 www/libs/bluebird/src/queue.js create mode 100644 www/libs/bluebird/src/race.js create mode 100644 www/libs/bluebird/src/reduce.js create mode 100644 www/libs/bluebird/src/schedule.js create mode 100644 www/libs/bluebird/src/settle.js create mode 100644 www/libs/bluebird/src/some.js create mode 100644 www/libs/bluebird/src/synchronous_inspection.js create mode 100644 www/libs/bluebird/src/thenables.js create mode 100644 www/libs/bluebird/src/timers.js create mode 100644 www/libs/bluebird/src/using.js create mode 100644 www/libs/bluebird/src/util.js create mode 100755 www/libs/bluebird/tests create mode 100644 www/libs/bluebird/tools/README.md create mode 100644 www/libs/bluebird/tools/ast_passes.js create mode 100644 www/libs/bluebird/tools/browser_test_generator.js create mode 100644 www/libs/bluebird/tools/browser_test_runner.js create mode 100644 www/libs/bluebird/tools/build.js create mode 100644 www/libs/bluebird/tools/job-runner/job-runner.js create mode 100644 www/libs/bluebird/tools/jshint.js create mode 100644 www/libs/bluebird/tools/jshintrc_generator.js create mode 100644 www/libs/bluebird/tools/mocha_runner.js create mode 100644 www/libs/bluebird/tools/saucelabs_runner.js create mode 100644 www/libs/bluebird/tools/test.js create mode 100755 www/libs/bluebird/tools/utils.js create mode 100644 www/libs/jquery/.bower.json create mode 100644 www/libs/jquery/AUTHORS.txt create mode 100644 www/libs/jquery/LICENSE.txt create mode 100644 www/libs/jquery/README.md create mode 100644 www/libs/jquery/bower.json create mode 100644 www/libs/jquery/sizzle/LICENSE.txt create mode 100644 www/libs/jquery/src/.jshintrc create mode 100644 www/libs/jquery/src/ajax.js create mode 100644 www/libs/jquery/src/ajax/jsonp.js create mode 100644 www/libs/jquery/src/ajax/load.js create mode 100644 www/libs/jquery/src/ajax/parseJSON.js create mode 100644 www/libs/jquery/src/ajax/parseXML.js create mode 100644 www/libs/jquery/src/ajax/script.js create mode 100644 www/libs/jquery/src/ajax/var/location.js create mode 100644 www/libs/jquery/src/ajax/var/nonce.js create mode 100644 www/libs/jquery/src/ajax/var/rquery.js create mode 100644 www/libs/jquery/src/ajax/xhr.js create mode 100644 www/libs/jquery/src/attributes.js create mode 100644 www/libs/jquery/src/attributes/attr.js create mode 100644 www/libs/jquery/src/attributes/classes.js create mode 100644 www/libs/jquery/src/attributes/prop.js create mode 100644 www/libs/jquery/src/attributes/support.js create mode 100644 www/libs/jquery/src/attributes/val.js create mode 100644 www/libs/jquery/src/callbacks.js create mode 100644 www/libs/jquery/src/core.js create mode 100644 www/libs/jquery/src/core/DOMEval.js create mode 100644 www/libs/jquery/src/core/access.js create mode 100644 www/libs/jquery/src/core/init.js create mode 100644 www/libs/jquery/src/core/parseHTML.js create mode 100644 www/libs/jquery/src/core/ready.js create mode 100644 www/libs/jquery/src/core/support.js create mode 100644 www/libs/jquery/src/core/var/rsingleTag.js create mode 100644 www/libs/jquery/src/css.js create mode 100644 www/libs/jquery/src/css/addGetHookIf.js create mode 100644 www/libs/jquery/src/css/adjustCSS.js create mode 100644 www/libs/jquery/src/css/curCSS.js create mode 100644 www/libs/jquery/src/css/defaultDisplay.js create mode 100644 www/libs/jquery/src/css/hiddenVisibleSelectors.js create mode 100644 www/libs/jquery/src/css/showHide.js create mode 100644 www/libs/jquery/src/css/support.js create mode 100644 www/libs/jquery/src/css/var/cssExpand.js create mode 100644 www/libs/jquery/src/css/var/getStyles.js create mode 100644 www/libs/jquery/src/css/var/isHidden.js create mode 100644 www/libs/jquery/src/css/var/rmargin.js create mode 100644 www/libs/jquery/src/css/var/rnumnonpx.js create mode 100644 www/libs/jquery/src/css/var/swap.js create mode 100644 www/libs/jquery/src/data.js create mode 100644 www/libs/jquery/src/data/Data.js create mode 100644 www/libs/jquery/src/data/accepts.js create mode 100644 www/libs/jquery/src/data/support.js create mode 100644 www/libs/jquery/src/data/var/acceptData.js create mode 100644 www/libs/jquery/src/data/var/dataPriv.js create mode 100644 www/libs/jquery/src/data/var/dataUser.js create mode 100644 www/libs/jquery/src/deferred.js create mode 100644 www/libs/jquery/src/deferred/exceptionHook.js create mode 100644 www/libs/jquery/src/deprecated.js create mode 100644 www/libs/jquery/src/dimensions.js create mode 100644 www/libs/jquery/src/effects.js create mode 100644 www/libs/jquery/src/effects/Tween.js create mode 100644 www/libs/jquery/src/effects/animatedSelector.js create mode 100644 www/libs/jquery/src/effects/support.js create mode 100644 www/libs/jquery/src/event.js create mode 100644 www/libs/jquery/src/event/ajax.js create mode 100644 www/libs/jquery/src/event/alias.js create mode 100644 www/libs/jquery/src/event/focusin.js create mode 100644 www/libs/jquery/src/event/support.js create mode 100644 www/libs/jquery/src/event/trigger.js create mode 100644 www/libs/jquery/src/exports/amd.js create mode 100644 www/libs/jquery/src/exports/global.js create mode 100644 www/libs/jquery/src/intro.js create mode 100644 www/libs/jquery/src/jquery.js create mode 100644 www/libs/jquery/src/manipulation.js create mode 100644 www/libs/jquery/src/manipulation/_evalUrl.js create mode 100644 www/libs/jquery/src/manipulation/buildFragment.js create mode 100644 www/libs/jquery/src/manipulation/createSafeFragment.js create mode 100644 www/libs/jquery/src/manipulation/getAll.js create mode 100644 www/libs/jquery/src/manipulation/setGlobalEval.js create mode 100644 www/libs/jquery/src/manipulation/support.js create mode 100644 www/libs/jquery/src/manipulation/var/nodeNames.js create mode 100644 www/libs/jquery/src/manipulation/var/rcheckableType.js create mode 100644 www/libs/jquery/src/manipulation/var/rleadingWhitespace.js create mode 100644 www/libs/jquery/src/manipulation/var/rscriptType.js create mode 100644 www/libs/jquery/src/manipulation/var/rtagName.js create mode 100644 www/libs/jquery/src/manipulation/wrapMap.js create mode 100644 www/libs/jquery/src/offset.js create mode 100644 www/libs/jquery/src/outro.js create mode 100644 www/libs/jquery/src/queue.js create mode 100644 www/libs/jquery/src/queue/delay.js create mode 100644 www/libs/jquery/src/selector-native.js create mode 100644 www/libs/jquery/src/selector-sizzle.js create mode 100644 www/libs/jquery/src/selector.js create mode 100644 www/libs/jquery/src/serialize.js create mode 100644 www/libs/jquery/src/support.js create mode 100644 www/libs/jquery/src/traversing.js create mode 100644 www/libs/jquery/src/traversing/findFilter.js create mode 100644 www/libs/jquery/src/traversing/var/dir.js create mode 100644 www/libs/jquery/src/traversing/var/rneedsContext.js create mode 100644 www/libs/jquery/src/traversing/var/siblings.js create mode 100644 www/libs/jquery/src/var/arr.js create mode 100644 www/libs/jquery/src/var/class2type.js create mode 100644 www/libs/jquery/src/var/concat.js create mode 100644 www/libs/jquery/src/var/deletedIds.js create mode 100644 www/libs/jquery/src/var/document.js create mode 100644 www/libs/jquery/src/var/documentElement.js create mode 100644 www/libs/jquery/src/var/hasOwn.js create mode 100644 www/libs/jquery/src/var/indexOf.js create mode 100644 www/libs/jquery/src/var/pnum.js create mode 100644 www/libs/jquery/src/var/push.js create mode 100644 www/libs/jquery/src/var/rcssNum.js create mode 100644 www/libs/jquery/src/var/rnotwhite.js create mode 100644 www/libs/jquery/src/var/slice.js create mode 100644 www/libs/jquery/src/var/support.js create mode 100644 www/libs/jquery/src/var/toString.js create mode 100644 www/libs/jquery/src/wrap.js create mode 100644 www/libs/mui/.bower.json create mode 100644 www/libs/mui/AUTHORS.txt create mode 100644 www/libs/mui/CHANGELOG.md create mode 100644 www/libs/mui/LICENSE.txt create mode 100644 www/libs/mui/README.md create mode 100644 www/libs/mui/RELEASE.md create mode 100644 www/libs/mui/bower.json create mode 100644 www/libs/mui/packages/cdn/angular/mui-angular.js create mode 100644 www/libs/mui/packages/cdn/angular/mui-angular.min.js create mode 100644 www/libs/mui/packages/cdn/css/mui.css create mode 100644 www/libs/mui/packages/cdn/css/mui.min.css create mode 100644 www/libs/mui/packages/cdn/email/mui-email-inline.css create mode 100644 www/libs/mui/packages/cdn/email/mui-email-styletag.css create mode 100644 www/libs/mui/packages/cdn/extra/mui-angular-combined.js create mode 100644 www/libs/mui/packages/cdn/extra/mui-colors.css create mode 100644 www/libs/mui/packages/cdn/extra/mui-combined.js create mode 100644 www/libs/mui/packages/cdn/extra/mui-react-combined.js create mode 100644 www/libs/mui/packages/cdn/js/mui.js create mode 100644 www/libs/mui/packages/cdn/js/mui.min.js create mode 100644 www/libs/mui/packages/cdn/react/mui-react.js create mode 100644 www/libs/mui/packages/cdn/react/mui-react.min.js create mode 100644 www/libs/mui/packages/cdn/webcomponents/mui-webcomponents.js create mode 100644 www/libs/mui/packages/cdn/webcomponents/mui-webcomponents.min.js create mode 100644 www/libs/mui/packages/meteor/LICENSE.txt create mode 100644 www/libs/mui/packages/meteor/README.md create mode 100644 www/libs/mui/packages/meteor/lib/css/mui.css create mode 100644 www/libs/mui/packages/meteor/lib/css/mui.min.css create mode 100644 www/libs/mui/packages/meteor/lib/js/mui.js create mode 100644 www/libs/mui/packages/meteor/lib/js/mui.min.js create mode 100644 www/libs/mui/packages/meteor/package.js create mode 100644 www/libs/mui/packages/npm/LICENSE.txt create mode 100644 www/libs/mui/packages/npm/README.md create mode 100644 www/libs/mui/packages/npm/angular.js create mode 100644 www/libs/mui/packages/npm/index.js create mode 100644 www/libs/mui/packages/npm/lib/angular/appbar.js create mode 100644 www/libs/mui/packages/npm/lib/angular/babel-helpers.js create mode 100644 www/libs/mui/packages/npm/lib/angular/button.js create mode 100644 www/libs/mui/packages/npm/lib/angular/caret.js create mode 100644 www/libs/mui/packages/npm/lib/angular/checkbox.js create mode 100644 www/libs/mui/packages/npm/lib/angular/col.js create mode 100644 www/libs/mui/packages/npm/lib/angular/container.js create mode 100644 www/libs/mui/packages/npm/lib/angular/divider.js create mode 100644 www/libs/mui/packages/npm/lib/angular/dropdown-item.js create mode 100644 www/libs/mui/packages/npm/lib/angular/dropdown.js create mode 100644 www/libs/mui/packages/npm/lib/angular/form.js create mode 100644 www/libs/mui/packages/npm/lib/angular/input.js create mode 100644 www/libs/mui/packages/npm/lib/angular/panel.js create mode 100644 www/libs/mui/packages/npm/lib/angular/radio.js create mode 100644 www/libs/mui/packages/npm/lib/angular/row.js create mode 100644 www/libs/mui/packages/npm/lib/angular/select.js create mode 100644 www/libs/mui/packages/npm/lib/angular/tabs.js create mode 100644 www/libs/mui/packages/npm/lib/css/mui.css create mode 100644 www/libs/mui/packages/npm/lib/css/mui.min.css create mode 100644 www/libs/mui/packages/npm/lib/js/config.js create mode 100644 www/libs/mui/packages/npm/lib/js/lib/forms.js create mode 100644 www/libs/mui/packages/npm/lib/js/lib/jqLite.js create mode 100644 www/libs/mui/packages/npm/lib/js/lib/util.js create mode 100644 www/libs/mui/packages/npm/lib/js/overlay.js create mode 100644 www/libs/mui/packages/npm/lib/react/_helpers.js create mode 100644 www/libs/mui/packages/npm/lib/react/appbar.js create mode 100644 www/libs/mui/packages/npm/lib/react/babel-helpers.js create mode 100644 www/libs/mui/packages/npm/lib/react/button.js create mode 100644 www/libs/mui/packages/npm/lib/react/caret.js create mode 100644 www/libs/mui/packages/npm/lib/react/checkbox.js create mode 100644 www/libs/mui/packages/npm/lib/react/col.js create mode 100644 www/libs/mui/packages/npm/lib/react/container.js create mode 100644 www/libs/mui/packages/npm/lib/react/divider.js create mode 100644 www/libs/mui/packages/npm/lib/react/dropdown-item.js create mode 100644 www/libs/mui/packages/npm/lib/react/dropdown.js create mode 100644 www/libs/mui/packages/npm/lib/react/form.js create mode 100644 www/libs/mui/packages/npm/lib/react/input.js create mode 100644 www/libs/mui/packages/npm/lib/react/option.js create mode 100644 www/libs/mui/packages/npm/lib/react/panel.js create mode 100644 www/libs/mui/packages/npm/lib/react/radio.js create mode 100644 www/libs/mui/packages/npm/lib/react/row.js create mode 100644 www/libs/mui/packages/npm/lib/react/select.js create mode 100644 www/libs/mui/packages/npm/lib/react/tab.js create mode 100644 www/libs/mui/packages/npm/lib/react/tabs.js create mode 100644 www/libs/mui/packages/npm/lib/react/text-field.js create mode 100644 www/libs/mui/packages/npm/lib/react/textarea.js create mode 100644 www/libs/mui/packages/npm/lib/sass/mui-colors.scss create mode 100644 www/libs/mui/packages/npm/lib/sass/mui.scss create mode 100644 www/libs/mui/packages/npm/lib/sass/mui/_appbar.scss create mode 100644 www/libs/mui/packages/npm/lib/sass/mui/_buttons.scss create mode 100644 www/libs/mui/packages/npm/lib/sass/mui/_checkbox-and-radio.scss create mode 100644 www/libs/mui/packages/npm/lib/sass/mui/_colors.scss create mode 100644 www/libs/mui/packages/npm/lib/sass/mui/_containers.scss create mode 100644 www/libs/mui/packages/npm/lib/sass/mui/_divider.scss create mode 100644 www/libs/mui/packages/npm/lib/sass/mui/_dropdown.scss create mode 100644 www/libs/mui/packages/npm/lib/sass/mui/_form.scss create mode 100644 www/libs/mui/packages/npm/lib/sass/mui/_grid.scss create mode 100644 www/libs/mui/packages/npm/lib/sass/mui/_helpers.scss create mode 100644 www/libs/mui/packages/npm/lib/sass/mui/_mixins.scss create mode 100644 www/libs/mui/packages/npm/lib/sass/mui/_overlay.scss create mode 100644 www/libs/mui/packages/npm/lib/sass/mui/_panel.scss create mode 100644 www/libs/mui/packages/npm/lib/sass/mui/_reboot.scss create mode 100644 www/libs/mui/packages/npm/lib/sass/mui/_ripple.scss create mode 100644 www/libs/mui/packages/npm/lib/sass/mui/_select.scss create mode 100644 www/libs/mui/packages/npm/lib/sass/mui/_table.scss create mode 100644 www/libs/mui/packages/npm/lib/sass/mui/_tabs.scss create mode 100644 www/libs/mui/packages/npm/lib/sass/mui/_textfield.scss create mode 100644 www/libs/mui/packages/npm/lib/sass/mui/_typography.scss create mode 100644 www/libs/mui/packages/npm/lib/sass/mui/_variables.scss create mode 100644 www/libs/mui/packages/npm/lib/sass/mui/mixins/_buttons.scss create mode 100644 www/libs/mui/packages/npm/lib/sass/mui/mixins/_grid-framework.scss create mode 100644 www/libs/mui/packages/npm/lib/sass/mui/mixins/_typography.scss create mode 100644 www/libs/mui/packages/npm/lib/sass/mui/mixins/_util.scss create mode 100644 www/libs/mui/packages/npm/lib/sass/normalize-3.0.3.scss create mode 100644 www/libs/mui/packages/npm/react.js create mode 100644 www/libs/mui/src/angular/appbar.js create mode 100644 www/libs/mui/src/angular/button.js create mode 100644 www/libs/mui/src/angular/caret.js create mode 100644 www/libs/mui/src/angular/checkbox.js create mode 100644 www/libs/mui/src/angular/col.js create mode 100644 www/libs/mui/src/angular/container.js create mode 100644 www/libs/mui/src/angular/divider.js create mode 100644 www/libs/mui/src/angular/dropdown-item.js create mode 100644 www/libs/mui/src/angular/dropdown.js create mode 100644 www/libs/mui/src/angular/form.js create mode 100644 www/libs/mui/src/angular/input.js create mode 100644 www/libs/mui/src/angular/panel.js create mode 100644 www/libs/mui/src/angular/radio.js create mode 100644 www/libs/mui/src/angular/row.js create mode 100644 www/libs/mui/src/angular/select.js create mode 100644 www/libs/mui/src/angular/tabs.js create mode 100644 www/libs/mui/src/email/mui-email-inline.scss create mode 100644 www/libs/mui/src/email/mui-email-styletag.scss create mode 100644 www/libs/mui/src/email/mui-email/_body.scss create mode 100644 www/libs/mui/src/email/mui-email/_buttons.scss create mode 100644 www/libs/mui/src/email/mui-email/_containers.scss create mode 100644 www/libs/mui/src/email/mui-email/_divider.scss create mode 100644 www/libs/mui/src/email/mui-email/_grid.scss create mode 100644 www/libs/mui/src/email/mui-email/_helpers.scss create mode 100644 www/libs/mui/src/email/mui-email/_normalize.scss create mode 100644 www/libs/mui/src/email/mui-email/_panel.scss create mode 100644 www/libs/mui/src/email/mui-email/_reboot.scss create mode 100644 www/libs/mui/src/email/mui-email/_styletag.scss create mode 100644 www/libs/mui/src/email/mui-email/_typography.scss create mode 100644 www/libs/mui/src/email/mui-email/_variables.scss create mode 100644 www/libs/mui/src/js/config.js create mode 100644 www/libs/mui/src/js/dropdown.js create mode 100644 www/libs/mui/src/js/lib/forms.js create mode 100644 www/libs/mui/src/js/lib/jqLite.js create mode 100644 www/libs/mui/src/js/lib/util.js create mode 100644 www/libs/mui/src/js/overlay.js create mode 100644 www/libs/mui/src/js/ripple.js create mode 100644 www/libs/mui/src/js/select.js create mode 100644 www/libs/mui/src/js/tabs.js create mode 100644 www/libs/mui/src/js/textfield.js create mode 100644 www/libs/mui/src/react/_helpers.js create mode 100644 www/libs/mui/src/react/appbar.jsx create mode 100644 www/libs/mui/src/react/button.jsx create mode 100644 www/libs/mui/src/react/caret.jsx create mode 100644 www/libs/mui/src/react/checkbox.jsx create mode 100644 www/libs/mui/src/react/col.jsx create mode 100644 www/libs/mui/src/react/container.jsx create mode 100644 www/libs/mui/src/react/divider.jsx create mode 100644 www/libs/mui/src/react/dropdown-item.jsx create mode 100644 www/libs/mui/src/react/dropdown.jsx create mode 100644 www/libs/mui/src/react/form.jsx create mode 100644 www/libs/mui/src/react/input.jsx create mode 100644 www/libs/mui/src/react/option.jsx create mode 100644 www/libs/mui/src/react/panel.jsx create mode 100644 www/libs/mui/src/react/radio.jsx create mode 100644 www/libs/mui/src/react/row.jsx create mode 100644 www/libs/mui/src/react/select.jsx create mode 100644 www/libs/mui/src/react/tab.jsx create mode 100644 www/libs/mui/src/react/tabs.jsx create mode 100644 www/libs/mui/src/react/text-field.jsx create mode 100644 www/libs/mui/src/react/textarea.jsx create mode 100644 www/libs/mui/src/sass/mui-colors.scss create mode 100644 www/libs/mui/src/sass/mui.scss create mode 100644 www/libs/mui/src/sass/mui/_appbar.scss create mode 100644 www/libs/mui/src/sass/mui/_buttons.scss create mode 100644 www/libs/mui/src/sass/mui/_checkbox-and-radio.scss create mode 100644 www/libs/mui/src/sass/mui/_colors.scss create mode 100644 www/libs/mui/src/sass/mui/_containers.scss create mode 100644 www/libs/mui/src/sass/mui/_divider.scss create mode 100644 www/libs/mui/src/sass/mui/_dropdown.scss create mode 100644 www/libs/mui/src/sass/mui/_form.scss create mode 100644 www/libs/mui/src/sass/mui/_grid.scss create mode 100644 www/libs/mui/src/sass/mui/_helpers.scss create mode 100644 www/libs/mui/src/sass/mui/_mixins.scss create mode 100644 www/libs/mui/src/sass/mui/_overlay.scss create mode 100644 www/libs/mui/src/sass/mui/_panel.scss create mode 100644 www/libs/mui/src/sass/mui/_reboot.scss create mode 100644 www/libs/mui/src/sass/mui/_ripple.scss create mode 100644 www/libs/mui/src/sass/mui/_select.scss create mode 100644 www/libs/mui/src/sass/mui/_table.scss create mode 100644 www/libs/mui/src/sass/mui/_tabs.scss create mode 100644 www/libs/mui/src/sass/mui/_textfield.scss create mode 100644 www/libs/mui/src/sass/mui/_typography.scss create mode 100644 www/libs/mui/src/sass/mui/_variables.scss create mode 100644 www/libs/mui/src/sass/mui/mixins/_buttons.scss create mode 100644 www/libs/mui/src/sass/mui/mixins/_grid-framework.scss create mode 100644 www/libs/mui/src/sass/mui/mixins/_typography.scss create mode 100644 www/libs/mui/src/sass/mui/mixins/_util.scss create mode 100644 www/libs/mui/src/sass/normalize-3.0.3.scss create mode 100644 www/libs/mui/src/webcomponents/buttons.js create mode 100644 www/libs/mui/src/webcomponents/forms.js create mode 100644 www/test.html diff --git a/.bowerrc b/.bowerrc new file mode 100644 index 0000000..f026122 --- /dev/null +++ b/.bowerrc @@ -0,0 +1,5 @@ +{ + "directory": "www/libs/", + "timeout": 120000 +} + diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..e86f5fa --- /dev/null +++ b/.editorconfig @@ -0,0 +1,32 @@ +; http://editorconfig.org + +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +indent_style = space +indent_size = 2 + +[*.txt] +insert_final_newline = false +trim_trailing_whitespace = false + +[*.py] +indent_size = 4 + +[*.m] +indent_size = 4 + +[Makefile] +indent_style = tab +indent_size = 8 + +[*.{js,json}] +indent_style = space +indent_size = 2 + +[*.md] +trim_trailing_whitespace = false diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3b6a41e --- /dev/null +++ b/.gitignore @@ -0,0 +1,180 @@ +# Created by .ignore support plugin (hsz.mobi) +### Archives template +# It's better to unpack these files and commit the raw source because +# git has its own built in compression methods. +*.7z +*.jar +*.rar +*.zip +*.gz +*.bzip +*.bz2 +*.xz +*.lzma +*.cab + +#packing-only formats +*.iso +*.tar + +#package management formats +*.dmg +*.xpi +*.gem +*.egg +*.deb +*.rpm +*.msi +*.msm +*.msp +### Windows template +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msm +*.msp + +# Windows shortcuts +*.lnk +### OSX template +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk +### JetBrains template +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio + +*.iml + +## Directory-based project format: +.idea/ +# if you remove the above rule, at least ignore the following: + +# User-specific stuff: +# .idea/workspace.xml +# .idea/tasks.xml +# .idea/dictionaries + +# Sensitive or high-churn files: +# .idea/dataSources.ids +# .idea/dataSources.xml +# .idea/sqlDataSources.xml +# .idea/dynamic.xml +# .idea/uiDesigner.xml + +# Gradle: +# .idea/gradle.xml +# .idea/libraries + +# Mongo Explorer plugin: +# .idea/mongoSettings.xml + +## File-based project format: +*.ipr +*.iws + +## Plugin-specific files: + +# IntelliJ +/out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +### Node template +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directory +# https://docs.npmjs.com/misc/faq#should-i-check-my-node-modules-folder-into-git +node_modules +bower_components + +### VisualStudioCode template +.settings + +### Xcode template +# Xcode +# +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +## Build generated +build/ +DerivedData + +## Various settings +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata + +## Other +*.xccheckout +*.moved-aside +*.xcuserstate + +dist diff --git a/.jscsrc b/.jscsrc new file mode 100644 index 0000000..480fcc4 --- /dev/null +++ b/.jscsrc @@ -0,0 +1,46 @@ +{ + "disallowKeywords": ["with"], + "disallowKeywordsOnNewLine": ["else"], + "disallowMixedSpacesAndTabs": true, + "disallowMultipleVarDecl": "exceptUndefined", + "disallowNewlineBeforeBlockStatements": true, + "disallowQuotedKeysInObjects": true, + "disallowSpaceAfterObjectKeys": true, + "disallowSpaceAfterPrefixUnaryOperators": true, + "disallowSpacesInFunction": { + "beforeOpeningRoundBrace": true + }, + "disallowSpacesInsideParentheses": true, + "disallowTrailingWhitespace": true, + "maximumLineLength": 160, + "requireCamelCaseOrUpperCaseIdentifiers": false, + "requireCapitalizedComments": true, + "requireCapitalizedConstructors": true, + "requireCurlyBraces": true, + "requireSpaceAfterKeywords": [ + "if", + "else", + "for", + "while", + "do", + "switch", + "case", + "return", + "try", + "catch", + "typeof" + ], + "requireSpaceAfterLineComment": true, + "requireSpaceAfterBinaryOperators": true, + "requireSpaceBeforeBinaryOperators": true, + "requireSpaceBeforeBlockStatements": true, + "requireSpaceBeforeObjectValues": true, + "requireSpacesInFunction": { + "beforeOpeningCurlyBrace": true + }, + "requireTrailingComma": false, + "requireEarlyReturn": false, + "validateIndentation": 2, + "validateLineBreaks": "LF", + "validateQuoteMarks": "'" +} diff --git a/.jshintrc b/.jshintrc new file mode 100644 index 0000000..375085b --- /dev/null +++ b/.jshintrc @@ -0,0 +1,37 @@ +{ + "predef": [ + "Promise", + "$" + ], + "globals": { + "$": false, + "MicroEvent": false + }, + "node":true, + "browser": true, + "boss": true, + "curly": true, + "debug": false, + "devel": true, + "eqeqeq": true, + "evil": true, + "forin": false, + "immed": false, + "laxbreak": false, + "newcap": true, + "noarg": true, + "noempty": false, + "nonew": false, + "nomen": false, + "onevar": false, + "plusplus": false, + "regexp": false, + "undef": true, + "sub": true, + "strict": false, + "white": false, + "eqnull": true, + "esnext": true, + "unused": true, + "supernew":true +} diff --git a/bower.json b/bower.json new file mode 100644 index 0000000..dc28bc1 --- /dev/null +++ b/bower.json @@ -0,0 +1,23 @@ +{ + "name": "sodashserver", + "description": "Smart Office Dashboard Server", + "main": "index.js", + "authors": [ + "Martin Donnelly" + ], + "license": "ISC", + "homepage": "", + "private": true, + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "test", + "tests" + ], + "dependencies": { + "jquery": "^2.2.3", + "mui": "^0.5.3", + "bluebird": "^3.4.0" + } +} diff --git a/config.xml b/config.xml new file mode 100644 index 0000000..16cac18 --- /dev/null +++ b/config.xml @@ -0,0 +1,29 @@ + + + Sensortoy + + A sample Apache Cordova application that responds to the deviceready event. + + + Apache Cordova Team + + + + + + + + + + + + + + + + + + + + + diff --git a/hooks/README.md b/hooks/README.md new file mode 100644 index 0000000..574ad4c --- /dev/null +++ b/hooks/README.md @@ -0,0 +1,23 @@ + +# Cordova Hooks + +Cordova Hooks represent special scripts which could be added by application and plugin developers or even by your own build system to customize cordova commands. See Hooks Guide for more details: http://cordova.apache.org/docs/en/edge/guide_appdev_hooks_index.md.html#Hooks%20Guide. diff --git a/output.txt b/output.txt new file mode 100644 index 0000000..1d1fcd1 --- /dev/null +++ b/output.txt @@ -0,0 +1,53 @@ +cc2650_accelerometer.js:83 Gyro
X: -0.15259
Y: -0.2899169921875
Z: -0.0152587890625
Accel
X: 0.00390625
Y: 0.0062255859375
Z: 0.25042724609375
Mag
X: 64
Y: 102
Z: 4103
+cc2650_luxometer.js:58 ArrayBuffer {} +cc2650_luxometer.js:63 lux a 34 60 +cc2650_luxometer.js:64 lux b 15394 +cc2650_luxometer.js:65 lux b 11110000100010 +cc2650_luxometer.js:68 111111111000100010 +cc2650_luxometer.js:73 Luxometer: undefined +cc2650_barometer.js:59 ArrayBuffer {} +cc2650_barometer.js:76 Barometer: Temperature
26.14°CPressure
1004.11hPa +cc2650_accelerometer.js:40 ArrayBuffer {} +cc2650_accelerometer.js:83 Gyro
X: -0.24414
Y: -0.38909912109375
Z: 0.1068115234375
Accel
X: 0.00372314453125
Y: 0.0062255859375
Z: 0.2489013671875
Mag
X: 61
Y: 102
Z: 4078
+cc2650_luxometer.js:58 ArrayBuffer {} +cc2650_luxometer.js:63 lux a 30 60 +cc2650_luxometer.js:64 lux b 15390 +cc2650_luxometer.js:65 lux b 11110000011110 +cc2650_luxometer.js:68 111111110111111110 +cc2650_luxometer.js:73 Luxometer: undefined +cc2650_barometer.js:59 ArrayBuffer {} +cc2650_barometer.js:76 Barometer: Temperature
26.14°CPressure
1004.1hPa +cc2650_accelerometer.js:40 ArrayBuffer {} +cc2650_accelerometer.js:83 Gyro
X: 0.05341
Y: -0.25177001953125
Z: 0.2288818359375
Accel
X: 0.00421142578125
Y: 0.0068359375
Z: 0.25067138671875
Mag
X: 69
Y: 112
Z: 4107
+cc2650_luxometer.js:58 ArrayBuffer {} +cc2650_luxometer.js:63 lux a 26 60 +cc2650_luxometer.js:64 lux b 15386 +cc2650_luxometer.js:65 lux b 11110000011010 +cc2650_luxometer.js:68 111111110110111010 +cc2650_luxometer.js:73 Luxometer: undefined +cc2650_luxometer.js:58 ArrayBuffer {} +cc2650_luxometer.js:63 lux a 22 60 +cc2650_luxometer.js:64 lux b 15382 +cc2650_luxometer.js:65 lux b 11110000010110 +cc2650_luxometer.js:68 111111110101110110 +cc2650_luxometer.js:73 Luxometer: undefined +cc2650_barometer.js:59 ArrayBuffer {} +cc2650_barometer.js:76 Barometer: Temperature
26.15°CPressure
1004.09hPa +cc2650_accelerometer.js:40 ArrayBuffer {} +cc2650_accelerometer.js:83 Gyro
X: -0.12970
Y: -0.3204345703125
Z: 0.0457763671875
Accel
X: 0.0035400390625
Y: 0.00775146484375
Z: 0.24798583984375
Mag
X: 58
Y: 127
Z: 4063
+cc2650_luxometer.js:58 ArrayBuffer {} +cc2650_luxometer.js:63 lux a 18 60 +cc2650_luxometer.js:64 lux b 15378 +cc2650_luxometer.js:65 lux b 11110000010010 +cc2650_luxometer.js:68 111111110100110010 +cc2650_luxometer.js:73 Luxometer: undefined +cc2650_barometer.js:59 ArrayBuffer {} +cc2650_barometer.js:76 Barometer: Temperature
26.14°CPressure
1004.09hPa +cc2650_accelerometer.js:40 ArrayBuffer {} +cc2650_accelerometer.js:83 Gyro
X: -0.06104
Y: -0.4119873046875
Z: 0.11444091796875
Accel
X: 0.00494384765625
Y: 0.00634765625
Z: 0.2486572265625
Mag
X: 81
Y: 104
Z: 4074
+cc2650_luxometer.js:58 ArrayBuffer {} +cc2650_luxometer.js:63 lux a 30 60 +cc2650_luxometer.js:64 lux b 15390 +cc2650_luxometer.js:65 lux b 11110000011110 +cc2650_luxometer.js:68 111111110111111110 +cc2650_luxometer.js:73 Luxometer: undefined \ No newline at end of file diff --git a/platforms/android/.gitignore b/platforms/android/.gitignore new file mode 100644 index 0000000..6e52445 --- /dev/null +++ b/platforms/android/.gitignore @@ -0,0 +1,14 @@ +# 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 new file mode 100644 index 0000000..6990c04 --- /dev/null +++ b/platforms/android/.gradle/2.2.1/taskArtifacts/cache.properties @@ -0,0 +1 @@ +#Wed May 18 14:10:20 BST 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 new file mode 100644 index 0000000000000000000000000000000000000000..d54e870a810951836768a8f7b1b7cbd64116a878 GIT binary patch literal 17 VcmZQx&{6#8*tO}73}A3;0suhm244UG literal 0 HcmV?d00001 diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/fileHashes.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/fileHashes.bin new file mode 100644 index 0000000000000000000000000000000000000000..3946df244653bf4008f4d46a8f56e5622db74422 GIT binary patch literal 139477 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

0m+~e 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

<1AE}z(Kw|M&PzbyC9 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ΝmXk+t>~rJ#)Q)^?8dwC2;Es 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

1{Nl6N|f}`catV><3?;((4W2PsZ$zK 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≶74Q8rTM#-;v68}fmBmF# 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 K2_sKvRs1gjc};l$ literal 0 HcmV?d00001 diff --git a/platforms/android/.gradle/2.2.1/taskArtifacts/taskArtifacts.bin b/platforms/android/.gradle/2.2.1/taskArtifacts/taskArtifacts.bin new file mode 100644 index 0000000000000000000000000000000000000000..e29395cd98fb7241ed551c64fd22b65353818281 GIT binary patch literal 50699 zcmeHQ349Y({+~%&%Aru{t{})EtNaVK333S{NLyO06zsO;SWt1AOw(y6nJ_bHQ*?nU zN1>dh$bBh?DB_AB9u*P9gUdz#T!IK#*URw z@B7{F_g;4Oqp0SQSJfX1|Agb0*&o5{2K+wnI7QJZ`2CFS6cuK`@0XvYsEBj;{d2!k zRKxS={XPGTYmRB;H$i|PKoB4Z5CjMU1Ob8oL4Y7Y5FiK;1PB5I0fGQQfFM8+AP5iy z2m&`60=ovoh#KNiHSdm7{>S%+kJ*(^QJro9dfN%(rPq4({d_gPrt~RoC87Avf`Lm% zZ%V^-i=@$?>+wrwivi`?m_D$zMqk*m-ocOA*)pcT-9@7>+IS-7?#E6y!SrdnHTtq) zXIkGC74tTx7Yz5%nWHrPsP`d?5ff4 zy0Wazr(-va!1TYSYjpF4`robn$2MiPhoa=WHG1dv`yCzHEN_XgFY4@}r@yu8=}AXk z!1N&z8of)@18?mTb4oD1c%Me^Zk+bsq>5(hyxV(g^!N*<3l_f?E#d3`c0r>jx7_;7 z(w-ennErG}jXrGi!I&4OW#wY}_y!u?K4t#pl5WjAV!G4A4-Ut$oSpwZ{}rYuXK2@t z+V;T9CuVH>5z_|^(dgPMqMtj^Qtc04MSc?m2m%BFf&f8)AV3fx2oMAa0t5kq06~Bt zKoB4Z5CjMU1Ob8oL4Y7Y5FiK;1PB5I0fGQQfFM8+AP5iy2m%BFf&f8)AV3fx2oMAa z0tA5@8G&70V01r0t3Zu@h*p#AmT7dug=#nbm64|ME*s|<0t4U#$J%pLxJ-rLXX<9^1ea2ecUkfn z!oXMt4bDz7ZlE`<_-I|@+0pS84~$OxYI4g4?^X)|e)2TdVTH~uBIlG71iKS3@O%ES zFLi%@z!EAl= z)y1=e7`yUGXNkg%8SoLwkD=;y?qcd>>QXE?WzL?$=COR$8zqCl*jTaYiDfG;6;A2_ zH%iuSBvO&y0S$85Gg)!s+BvNnl^!dGO*}9TV9X$ydaC4dIzg;Lc-ZlhtPI;ZMP@*l zSVb1J8)0!qTx%%iWY&&v zuObws@PBPX0Z`*QJBPyM%)TN`C;g{J4j|h*Y0(b0If#l@5VzT7RU3bCv?B1zhwg+K|B#Y6Z8>h1=E-4U^02Oj-o@) z_GsXKU~@T{V->OS=s|_G9%iKMbXI=5--J2Oy}7BY5$T{4@U-dj>yFw0Eu5wSZbB=UtZdF0QHdWZT7A;%{<{y2xvALo&%0XcqL5+Ui zv?h1omuy_Bv0~iZ$6m2*tcCgGI4d8>>>JPN&K$n{2%|!thQg0%2w&@dH-A=S;2uYH zxQB-o&8o>p9edTEQJ=Y;rHbp&Y|y4W=u5XBQ%B#USA1QA^$4dvwQejF%CnLi8`vX3alXJSAaf6HCODYyw6u_Wdf}*u& zs=EA9&=DesL%4uyX%-G!Ds`s`@qbgb%(1KUpUN{9HXF-ZjYUudEUTRo+i~ahdDer$a~pcMH669BwZ6 z{U2ksf=4YtXQ_+`7SR)+PF49fNf6WUcmkMGecYWnPKk9{g%rWUKw2!MAb|?qC@u1Z z!y>vI;3|kA4T4_j+f^3B@sBzNa+1V3Y}oTjbjV@>0@D+_)Sknc@7pJ5a|j|EruZ&_qUrkjR&F0)^a@Bqz_wm;*``(-P0ae5VLDY(Ujv-JMeZl_F*)ICXxMyI6Q6z3%0K$+e1SqCIqE$mPPz6pW}>W=t-L9mM7*s1ske*`a5FSY?4?XRSCkRc6;Y6J$+sPw=#d60TBi zq(jp_n5dZWu>0T){0^wmDOWDcEHztu&b?AJr2WD{cfF1rTs5i9I5{<+4XOjhSEff` zu8{Dn7z5k)^vP4_L({ssJ-tKQ33VxwyuA?RT3L(8;|{GL_$ z!;`pm&eARdxCASRD0&cZ^9N@n#r9aF{nK|SIeGRt5ht5LjsoeA8dG)+-KE%jLA=Ju zTqXy)Mv(=Xf}o@O(m?lQ-K@nWYhi?Qj&_a8yW+JC$TO2Z7B!|ulvO!-6f;w)HXN+S z6Gc%F>&OqKni2?ziHBP<1wl?gW*;e7JX7)h+7vRypyUfQ&(thgbE~d8#dhwZEkK!a z7!j$DTk}uj{16-@M8nr+(C6sOt1ZH~4c|5DJ3IaKSl5L1+p2fLJYI&Ab3zuv!J0Be z#vuXQ*sHFRRp>78vUW3Ac|(y9Qf1%)dga~_WTtGYAcI9ub~s(w`~idC4?JeF34#q& zB)qi?4tPK34V7%p6EJ^cq3cQ`T{$QPdd9;C8w|F7ah}pF37&)8aAawKM0huP&F$LS=@^zWe0 zDIjR zO#8f&L${!5r`ADRg&KXdVT-W^%@Wxit&$J48F{<3HlTB>m{5oSOv5>+Uj#_&VM7I% zjJzr{!-!^Y(NnAvj+lT51Er{Y|C+i+Vc7`y104~1mCm}~F?&pl#P-arg{R!nGhW^v zgcqu11X(8|vZ_a1)ej9JL#!-_R4UPedITO8bF8uG$<%r*pC>fC9Fmi@a9JE{^*W?= zQRSERm%O2Xk^?fFi5mSwj~DC>xUUzQo;ua`=aWyAgt~NV2tjZIVc=^Y!PE6yul>C4 z))?QSN}~05UO*k*qg)Xr<4h<@DngBZ_m^)9kL;K11D>CLyuvcMQ*8^VwN}jSxpr_M zf#j(M`z+M%{1Yfz<(e7l;`Htk{N=r&jX+^`U z(BPDB!)kim(6gf!RwSGn{!;AJcG-Upt4%sz=t*~{?c$zLyazsT6|^s z?xLP4ukJ4!Fk@i9Yb=M|ckOCGG150c4Qy#qY7a$gZUv1A-%((An;sY4HR;favX}q% zC6_U5M7y)sQUkj`RHQ2TAK=m`Y@vG0A(ZIU=B0YM4id$zQ<3H=m)}dt+SrvCX|!Fg zmfdGUTJq=PBk!2|aIeANHyZpjPe2O-w2YzItCu$$(C||BE5Gdiuqcdx76fQWYQG&R z&+=Kv4^*FUo$H%2{8!|I*aR9#n^$rp{+LBg=L#?lkz2s>YILNxe^D& zK@89nHM)Lu#^4p!qo0nMG&*Y8%J%=zX|2-`a#GM=bNJLOSy?w$AUZ{$P-qG6}Q z7SY~tM1UQgjeORq)N2|kb~jc=o7~|pcxSs(Ok22Z{$RvTG=!8i%F*?q^S)umG*12g z;({DQ!{Va0t#ok6LfA1J$W!onFq}2%hqmte6{qNA?XIaJ<+CG^Sqi3S0M8Ss(UX76 zAKT-g?d17{KGECD&)=()h=#IW9SB$-5mh3045?2+&NWEYAE&Hv<2xlsE6uxkQEJwz zSNqq0F?vGVJyFY^zR~BMl#_-~PP#dM)gmN1i!6?uHs1ifkWRQB+X<;Y4VE7vAOqB|K_jx)--ac#D?zUnVDK$xVVi2cAOb zN_M`+6A~zQsRZ)^-QhJ&-~9=_tDRKE0n+xOrTc!~JJ9K1V-))pAHvBgi~I*AflmTk zeCdgl2LPDJgQ)d%wbxqEmWsRQ1w|}IR~VgLi6BD%Mru2S+OMoX#k}PZ3(KF0o6z~d&uGjB2{hJ0)Qsz-OYfdDwrjt#`{%|cYj+K~p%lZfU#vTlzNzf!OOdZO zdFJBbvKwk}QROQed@*^!sImyAZO?^qXK$#%Ar5VR>cdfWJg_a0qZrr&4{bTSPyH8% zA_i=D9NHn&3}^PAzq3Q{9kUD8J-M^T;tG>4d!daw#RO6T1YNx96#p~S3|Q65E*ueu zaOPW}2~wBe@j9=^=8r@xVK>d5>VT_mWLLHCDRzJ4UDagOL6@!6=XbA&9&-7U!o;Yk zF)yuO_$1M_p0dHJ`$z*GSxR&*IyJW1vslRq7B!qgdXt=BL3FJyx)yoh56L~>NA7OK zSI`ciW?1jo9wkUiEmIb^aQ$oIs-MfMO(>}QeDFbTaZWh3!~!P@2$k|hUxn(FR+}%1 zbwL&b@)xWX&Wp=MUSy*MRf2!kZQ)(kkPe_UzyXvg$q9*r(i36fLVbrS#oTkN+{UNY zp>MT7`DI>G6}-HuAaC-8WQjgqE$JK*l~2P8W$xM9s+Gx;`Oyr=?lzY5Tr09S(bp#9JiZQok+Z z#>s8zc3-2U*p7as4sXT!t8r+k-pxgup_=h=}&*AiVzbS=@fHs6!5iC?RWUyJf1vp$Kq zh*ArUc0hx}4H|7V#&p{lQ@-HT#1pM^*KC^4)+5P9l3c9x9Y!R%h-ByHPcA;Y=kbXN zqbAJX)MsBor{X?6h^P}$C!!wUs|{~{QJ*u+`sx>%NrxYrwD-`?h>y0CedonJ{{hfS_qPB5 literal 0 HcmV?d00001 diff --git a/platforms/android/AndroidManifest.xml b/platforms/android/AndroidManifest.xml new file mode 100644 index 0000000..ae8c96d --- /dev/null +++ b/platforms/android/AndroidManifest.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/platforms/android/CordovaLib/AndroidManifest.xml b/platforms/android/CordovaLib/AndroidManifest.xml new file mode 100755 index 0000000..3feb903 --- /dev/null +++ b/platforms/android/CordovaLib/AndroidManifest.xml @@ -0,0 +1,23 @@ + + + + + diff --git a/platforms/android/CordovaLib/build.gradle b/platforms/android/CordovaLib/build.gradle new file mode 100644 index 0000000..f1c6682 --- /dev/null +++ b/platforms/android/CordovaLib/build.gradle @@ -0,0 +1,61 @@ +/* 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/cordova.gradle b/platforms/android/CordovaLib/cordova.gradle new file mode 100644 index 0000000..7465266 --- /dev/null +++ b/platforms/android/CordovaLib/cordova.gradle @@ -0,0 +1,201 @@ +/* + 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 . 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 new file mode 100644 index 0000000..2342a16 --- /dev/null +++ b/platforms/android/CordovaLib/project.properties @@ -0,0 +1,16 @@ +# 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/CordovaLib/src/org/apache/cordova/AuthenticationToken.java b/platforms/android/CordovaLib/src/org/apache/cordova/AuthenticationToken.java new file mode 100644 index 0000000..d3a231a --- /dev/null +++ b/platforms/android/CordovaLib/src/org/apache/cordova/AuthenticationToken.java @@ -0,0 +1,69 @@ +/* + 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 org.apache.cordova; + +/** + * The Class AuthenticationToken defines the userName and password to be used for authenticating a web resource + */ +public class AuthenticationToken { + private String userName; + private String password; + + /** + * Gets the user name. + * + * @return the user name + */ + public String getUserName() { + return userName; + } + + /** + * Sets the user name. + * + * @param userName + * the new user name + */ + public void setUserName(String userName) { + this.userName = userName; + } + + /** + * Gets the password. + * + * @return the password + */ + public String getPassword() { + return password; + } + + /** + * Sets the password. + * + * @param password + * the new password + */ + public void setPassword(String password) { + this.password = password; + } + + + + +} diff --git a/platforms/android/CordovaLib/src/org/apache/cordova/CallbackContext.java b/platforms/android/CordovaLib/src/org/apache/cordova/CallbackContext.java new file mode 100644 index 0000000..4c0d7b9 --- /dev/null +++ b/platforms/android/CordovaLib/src/org/apache/cordova/CallbackContext.java @@ -0,0 +1,144 @@ +/* + 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 org.apache.cordova; + +import org.json.JSONArray; + +import android.util.Log; + +import org.apache.cordova.CordovaWebView; +import org.apache.cordova.PluginResult; +import org.json.JSONObject; + +public class CallbackContext { + private static final String LOG_TAG = "CordovaPlugin"; + + private String callbackId; + private CordovaWebView webView; + protected boolean finished; + private int changingThreads; + + public CallbackContext(String callbackId, CordovaWebView webView) { + this.callbackId = callbackId; + this.webView = webView; + } + + public boolean isFinished() { + return finished; + } + + public boolean isChangingThreads() { + return changingThreads > 0; + } + + public String getCallbackId() { + return callbackId; + } + + public void sendPluginResult(PluginResult pluginResult) { + synchronized (this) { + if (finished) { + Log.w(LOG_TAG, "Attempted to send a second callback for ID: " + callbackId + "\nResult was: " + pluginResult.getMessage()); + return; + } else { + finished = !pluginResult.getKeepCallback(); + } + } + webView.sendPluginResult(pluginResult, callbackId); + } + + /** + * Helper for success callbacks that just returns the Status.OK by default + * + * @param message The message to add to the success result. + */ + public void success(JSONObject message) { + sendPluginResult(new PluginResult(PluginResult.Status.OK, message)); + } + + /** + * Helper for success callbacks that just returns the Status.OK by default + * + * @param message The message to add to the success result. + */ + public void success(String message) { + sendPluginResult(new PluginResult(PluginResult.Status.OK, message)); + } + + /** + * Helper for success callbacks that just returns the Status.OK by default + * + * @param message The message to add to the success result. + */ + public void success(JSONArray message) { + sendPluginResult(new PluginResult(PluginResult.Status.OK, message)); + } + + /** + * Helper for success callbacks that just returns the Status.OK by default + * + * @param message The message to add to the success result. + */ + public void success(byte[] message) { + sendPluginResult(new PluginResult(PluginResult.Status.OK, message)); + } + + /** + * Helper for success callbacks that just returns the Status.OK by default + * + * @param message The message to add to the success result. + */ + public void success(int message) { + sendPluginResult(new PluginResult(PluginResult.Status.OK, message)); + } + + /** + * Helper for success callbacks that just returns the Status.OK by default + */ + public void success() { + sendPluginResult(new PluginResult(PluginResult.Status.OK)); + } + + /** + * Helper for error callbacks that just returns the Status.ERROR by default + * + * @param message The message to add to the error result. + */ + public void error(JSONObject message) { + sendPluginResult(new PluginResult(PluginResult.Status.ERROR, message)); + } + + /** + * Helper for error callbacks that just returns the Status.ERROR by default + * + * @param message The message to add to the error result. + */ + public void error(String message) { + sendPluginResult(new PluginResult(PluginResult.Status.ERROR, message)); + } + + /** + * Helper for error callbacks that just returns the Status.ERROR by default + * + * @param message The message to add to the error result. + */ + public void error(int message) { + sendPluginResult(new PluginResult(PluginResult.Status.ERROR, message)); + } +} diff --git a/platforms/android/CordovaLib/src/org/apache/cordova/Config.java b/platforms/android/CordovaLib/src/org/apache/cordova/Config.java new file mode 100644 index 0000000..048960b --- /dev/null +++ b/platforms/android/CordovaLib/src/org/apache/cordova/Config.java @@ -0,0 +1,72 @@ +/* + 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 org.apache.cordova; + +import java.util.List; + +import android.app.Activity; +import android.util.Log; + +@Deprecated // Use Whitelist, CordovaPrefences, etc. directly. +public class Config { + private static final String TAG = "Config"; + + static ConfigXmlParser parser; + + private Config() { + } + + public static void init(Activity action) { + parser = new ConfigXmlParser(); + parser.parse(action); + //TODO: Add feature to bring this back. Some preferences should be overridden by intents, but not all + parser.getPreferences().setPreferencesBundle(action.getIntent().getExtras()); + } + + // Intended to be used for testing only; creates an empty configuration. + public static void init() { + if (parser == null) { + parser = new ConfigXmlParser(); + } + } + + public static String getStartUrl() { + if (parser == null) { + return "file:///android_asset/www/index.html"; + } + return parser.getLaunchUrl(); + } + + public static String getErrorUrl() { + return parser.getPreferences().getString("errorurl", null); + } + + public static List getPluginEntries() { + return parser.getPluginEntries(); + } + + public static CordovaPreferences getPreferences() { + return parser.getPreferences(); + } + + public static boolean isInitialized() { + return parser != null; + } +} diff --git a/platforms/android/CordovaLib/src/org/apache/cordova/ConfigXmlParser.java b/platforms/android/CordovaLib/src/org/apache/cordova/ConfigXmlParser.java new file mode 100644 index 0000000..01a97f2 --- /dev/null +++ b/platforms/android/CordovaLib/src/org/apache/cordova/ConfigXmlParser.java @@ -0,0 +1,145 @@ +/* + 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 org.apache.cordova; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Locale; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; + +import android.content.Context; + +public class ConfigXmlParser { + private static String TAG = "ConfigXmlParser"; + + private String launchUrl = "file:///android_asset/www/index.html"; + private CordovaPreferences prefs = new CordovaPreferences(); + private ArrayList pluginEntries = new ArrayList(20); + + public CordovaPreferences getPreferences() { + return prefs; + } + + public ArrayList getPluginEntries() { + return pluginEntries; + } + + public String getLaunchUrl() { + return launchUrl; + } + + public void parse(Context action) { + // First checking the class namespace for config.xml + int id = action.getResources().getIdentifier("config", "xml", action.getClass().getPackage().getName()); + if (id == 0) { + // If we couldn't find config.xml there, we'll look in the namespace from AndroidManifest.xml + id = action.getResources().getIdentifier("config", "xml", action.getPackageName()); + if (id == 0) { + LOG.e(TAG, "res/xml/config.xml is missing!"); + return; + } + } + parse(action.getResources().getXml(id)); + } + + boolean insideFeature = false; + String service = "", pluginClass = "", paramType = ""; + boolean onload = false; + + public void parse(XmlPullParser xml) { + int eventType = -1; + + while (eventType != XmlPullParser.END_DOCUMENT) { + if (eventType == XmlPullParser.START_TAG) { + handleStartTag(xml); + } + else if (eventType == XmlPullParser.END_TAG) + { + handleEndTag(xml); + } + try { + eventType = xml.next(); + } catch (XmlPullParserException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + public void handleStartTag(XmlPullParser xml) { + String strNode = xml.getName(); + if (strNode.equals("feature")) { + //Check for supported feature sets aka. plugins (Accelerometer, Geolocation, etc) + //Set the bit for reading params + insideFeature = true; + service = xml.getAttributeValue(null, "name"); + } + else if (insideFeature && strNode.equals("param")) { + paramType = xml.getAttributeValue(null, "name"); + if (paramType.equals("service")) // check if it is using the older service param + service = xml.getAttributeValue(null, "value"); + else if (paramType.equals("package") || paramType.equals("android-package")) + pluginClass = xml.getAttributeValue(null,"value"); + else if (paramType.equals("onload")) + onload = "true".equals(xml.getAttributeValue(null, "value")); + } + else if (strNode.equals("preference")) { + String name = xml.getAttributeValue(null, "name").toLowerCase(Locale.ENGLISH); + String value = xml.getAttributeValue(null, "value"); + prefs.set(name, value); + } + else if (strNode.equals("content")) { + String src = xml.getAttributeValue(null, "src"); + if (src != null) { + setStartUrl(src); + } + } + } + + public void handleEndTag(XmlPullParser xml) { + String strNode = xml.getName(); + if (strNode.equals("feature")) { + pluginEntries.add(new PluginEntry(service, pluginClass, onload)); + + service = ""; + pluginClass = ""; + insideFeature = false; + onload = false; + } + } + + private void setStartUrl(String src) { + Pattern schemeRegex = Pattern.compile("^[a-z-]+://"); + Matcher matcher = schemeRegex.matcher(src); + if (matcher.find()) { + launchUrl = src; + } else { + if (src.charAt(0) == '/') { + src = src.substring(1); + } + launchUrl = "file:///android_asset/www/" + src; + } + } +} diff --git a/platforms/android/CordovaLib/src/org/apache/cordova/CordovaActivity.java b/platforms/android/CordovaLib/src/org/apache/cordova/CordovaActivity.java new file mode 100755 index 0000000..868b243 --- /dev/null +++ b/platforms/android/CordovaLib/src/org/apache/cordova/CordovaActivity.java @@ -0,0 +1,508 @@ +/* + 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 org.apache.cordova; + +import java.util.ArrayList; +import java.util.Locale; + +import org.json.JSONException; +import org.json.JSONObject; + +import android.app.Activity; +import android.app.AlertDialog; +import android.annotation.SuppressLint; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.res.Configuration; +import android.graphics.Color; +import android.media.AudioManager; +import android.os.Build; +import android.os.Bundle; +import android.util.Log; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.webkit.WebViewClient; +import android.widget.FrameLayout; + +/** + * This class is the main Android activity that represents the Cordova + * application. It should be extended by the user to load the specific + * html file that contains the application. + * + * As an example: + * + *

+ *     package org.apache.cordova.examples;
+ *
+ *     import android.os.Bundle;
+ *     import org.apache.cordova.*;
+ *
+ *     public class Example extends CordovaActivity {
+ *       @Override
+ *       public void onCreate(Bundle savedInstanceState) {
+ *         super.onCreate(savedInstanceState);
+ *         super.init();
+ *         // Load your application
+ *         loadUrl(launchUrl);
+ *       }
+ *     }
+ * 
+ * + * Cordova xml configuration: Cordova uses a configuration file at + * res/xml/config.xml to specify its settings. See "The config.xml File" + * guide in cordova-docs at http://cordova.apache.org/docs for the documentation + * for the configuration. The use of the set*Property() methods is + * deprecated in favor of the config.xml file. + * + */ +public class CordovaActivity extends Activity { + public static String TAG = "CordovaActivity"; + + // The webview for our app + protected CordovaWebView appView; + + private static int ACTIVITY_STARTING = 0; + private static int ACTIVITY_RUNNING = 1; + private static int ACTIVITY_EXITING = 2; + + // Keep app running when pause is received. (default = true) + // If true, then the JavaScript and native code continue to run in the background + // when another application (activity) is started. + protected boolean keepRunning = true; + + // Flag to keep immersive mode if set to fullscreen + protected boolean immersiveMode; + + // Read from config.xml: + protected CordovaPreferences preferences; + protected String launchUrl; + protected ArrayList pluginEntries; + protected CordovaInterfaceImpl cordovaInterface; + + /** + * Called when the activity is first created. + */ + @Override + public void onCreate(Bundle savedInstanceState) { + LOG.i(TAG, "Apache Cordova native platform version " + CordovaWebView.CORDOVA_VERSION + " is starting"); + LOG.d(TAG, "CordovaActivity.onCreate()"); + + // need to activate preferences before super.onCreate to avoid "requestFeature() must be called before adding content" exception + loadConfig(); + if (!preferences.getBoolean("ShowTitle", false)) { + getWindow().requestFeature(Window.FEATURE_NO_TITLE); + } + + if (preferences.getBoolean("SetFullscreen", false)) { + Log.d(TAG, "The SetFullscreen configuration is deprecated in favor of Fullscreen, and will be removed in a future version."); + preferences.set("Fullscreen", true); + } + if (preferences.getBoolean("Fullscreen", false)) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + immersiveMode = true; + } else { + getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, + WindowManager.LayoutParams.FLAG_FULLSCREEN); + } + } else { + getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN, + WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); + } + + super.onCreate(savedInstanceState); + + cordovaInterface = makeCordovaInterface(); + if (savedInstanceState != null) { + cordovaInterface.restoreInstanceState(savedInstanceState); + } + } + + protected void init() { + appView = makeWebView(); + createViews(); + if (!appView.isInitialized()) { + appView.init(cordovaInterface, pluginEntries, preferences); + } + cordovaInterface.onCordovaInit(appView.getPluginManager()); + + // Wire the hardware volume controls to control media if desired. + String volumePref = preferences.getString("DefaultVolumeStream", ""); + if ("media".equals(volumePref.toLowerCase(Locale.ENGLISH))) { + setVolumeControlStream(AudioManager.STREAM_MUSIC); + } + } + + @SuppressWarnings("deprecation") + protected void loadConfig() { + ConfigXmlParser parser = new ConfigXmlParser(); + parser.parse(this); + preferences = parser.getPreferences(); + preferences.setPreferencesBundle(getIntent().getExtras()); + launchUrl = parser.getLaunchUrl(); + pluginEntries = parser.getPluginEntries(); + Config.parser = parser; + } + + //Suppressing warnings in AndroidStudio + @SuppressWarnings({"deprecation", "ResourceType"}) + protected void createViews() { + //Why are we setting a constant as the ID? This should be investigated + appView.getView().setId(100); + appView.getView().setLayoutParams(new FrameLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT)); + + setContentView(appView.getView()); + + if (preferences.contains("BackgroundColor")) { + int backgroundColor = preferences.getInteger("BackgroundColor", Color.BLACK); + // Background of activity: + appView.getView().setBackgroundColor(backgroundColor); + } + + appView.getView().requestFocusFromTouch(); + } + + /** + * Construct the default web view object. + *

+ * Override this to customize the webview that is used. + */ + protected CordovaWebView makeWebView() { + return new CordovaWebViewImpl(makeWebViewEngine()); + } + + protected CordovaWebViewEngine makeWebViewEngine() { + return CordovaWebViewImpl.createEngine(this, preferences); + } + + protected CordovaInterfaceImpl makeCordovaInterface() { + return new CordovaInterfaceImpl(this) { + @Override + public Object onMessage(String id, Object data) { + // Plumb this to CordovaActivity.onMessage for backwards compatibility + return CordovaActivity.this.onMessage(id, data); + } + }; + } + + /** + * Load the url into the webview. + */ + public void loadUrl(String url) { + if (appView == null) { + init(); + } + + // If keepRunning + this.keepRunning = preferences.getBoolean("KeepRunning", true); + + appView.loadUrlIntoView(url, true); + } + + /** + * Called when the system is about to start resuming a previous activity. + */ + @Override + protected void onPause() { + super.onPause(); + LOG.d(TAG, "Paused the activity."); + + if (this.appView != null) { + // CB-9382 If there is an activity that started for result and main activity is waiting for callback + // result, we shoudn't stop WebView Javascript timers, as activity for result might be using them + boolean keepRunning = this.keepRunning || this.cordovaInterface.activityResultCallback != null; + this.appView.handlePause(keepRunning); + } + } + + /** + * Called when the activity receives a new intent + */ + @Override + protected void onNewIntent(Intent intent) { + super.onNewIntent(intent); + //Forward to plugins + if (this.appView != null) + this.appView.onNewIntent(intent); + } + + /** + * Called when the activity will start interacting with the user. + */ + @Override + protected void onResume() { + super.onResume(); + LOG.d(TAG, "Resumed the activity."); + + if (this.appView == null) { + return; + } + // Force window to have focus, so application always + // receive user input. Workaround for some devices (Samsung Galaxy Note 3 at least) + this.getWindow().getDecorView().requestFocus(); + + this.appView.handleResume(this.keepRunning); + } + + /** + * Called when the activity is no longer visible to the user. + */ + @Override + protected void onStop() { + super.onStop(); + LOG.d(TAG, "Stopped the activity."); + + if (this.appView == null) { + return; + } + this.appView.handleStop(); + } + + /** + * Called when the activity is becoming visible to the user. + */ + @Override + protected void onStart() { + super.onStart(); + LOG.d(TAG, "Started the activity."); + + if (this.appView == null) { + return; + } + this.appView.handleStart(); + } + + /** + * The final call you receive before your activity is destroyed. + */ + @Override + public void onDestroy() { + LOG.d(TAG, "CordovaActivity.onDestroy()"); + super.onDestroy(); + + if (this.appView != null) { + appView.handleDestroy(); + } + } + + /** + * Called when view focus is changed + */ + @Override + public void onWindowFocusChanged(boolean hasFocus) { + super.onWindowFocusChanged(hasFocus); + if (hasFocus && immersiveMode) { + final int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_FULLSCREEN + | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; + + getWindow().getDecorView().setSystemUiVisibility(uiOptions); + } + } + + @SuppressLint("NewApi") + @Override + public void startActivityForResult(Intent intent, int requestCode, Bundle options) { + // Capture requestCode here so that it is captured in the setActivityResultCallback() case. + cordovaInterface.setActivityResultRequestCode(requestCode); + super.startActivityForResult(intent, requestCode, options); + } + + /** + * Called when an activity you launched exits, giving you the requestCode you started it with, + * the resultCode it returned, and any additional data from it. + * + * @param requestCode The request code originally supplied to startActivityForResult(), + * allowing you to identify who this result came from. + * @param resultCode The integer result code returned by the child activity through its setResult(). + * @param intent An Intent, which can return result data to the caller (various data can be attached to Intent "extras"). + */ + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent intent) { + LOG.d(TAG, "Incoming Result. Request code = " + requestCode); + super.onActivityResult(requestCode, resultCode, intent); + cordovaInterface.onActivityResult(requestCode, resultCode, intent); + } + + /** + * Report an error to the host application. These errors are unrecoverable (i.e. the main resource is unavailable). + * The errorCode parameter corresponds to one of the ERROR_* constants. + * + * @param errorCode The error code corresponding to an ERROR_* value. + * @param description A String describing the error. + * @param failingUrl The url that failed to load. + */ + public void onReceivedError(final int errorCode, final String description, final String failingUrl) { + final CordovaActivity me = this; + + // If errorUrl specified, then load it + final String errorUrl = preferences.getString("errorUrl", null); + if ((errorUrl != null) && (!failingUrl.equals(errorUrl)) && (appView != null)) { + // Load URL on UI thread + me.runOnUiThread(new Runnable() { + public void run() { + me.appView.showWebPage(errorUrl, false, true, null); + } + }); + } + // If not, then display error dialog + else { + final boolean exit = !(errorCode == WebViewClient.ERROR_HOST_LOOKUP); + me.runOnUiThread(new Runnable() { + public void run() { + if (exit) { + me.appView.getView().setVisibility(View.GONE); + me.displayError("Application Error", description + " (" + failingUrl + ")", "OK", exit); + } + } + }); + } + } + + /** + * Display an error dialog and optionally exit application. + */ + public void displayError(final String title, final String message, final String button, final boolean exit) { + final CordovaActivity me = this; + me.runOnUiThread(new Runnable() { + public void run() { + try { + AlertDialog.Builder dlg = new AlertDialog.Builder(me); + dlg.setMessage(message); + dlg.setTitle(title); + dlg.setCancelable(false); + dlg.setPositiveButton(button, + new AlertDialog.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + if (exit) { + finish(); + } + } + }); + dlg.create(); + dlg.show(); + } catch (Exception e) { + finish(); + } + } + }); + } + + /* + * Hook in Cordova for menu plugins + */ + @Override + public boolean onCreateOptionsMenu(Menu menu) { + if (appView != null) { + appView.getPluginManager().postMessage("onCreateOptionsMenu", menu); + } + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + if (appView != null) { + appView.getPluginManager().postMessage("onPrepareOptionsMenu", menu); + } + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (appView != null) { + appView.getPluginManager().postMessage("onOptionsItemSelected", item); + } + return true; + } + + /** + * Called when a message is sent to plugin. + * + * @param id The message id + * @param data The message data + * @return Object or null + */ + public Object onMessage(String id, Object data) { + if ("onReceivedError".equals(id)) { + JSONObject d = (JSONObject) data; + try { + this.onReceivedError(d.getInt("errorCode"), d.getString("description"), d.getString("url")); + } catch (JSONException e) { + e.printStackTrace(); + } + } else if ("exit".equals(id)) { + finish(); + } + return null; + } + + protected void onSaveInstanceState(Bundle outState) { + cordovaInterface.onSaveInstanceState(outState); + super.onSaveInstanceState(outState); + } + + /** + * Called by the system when the device configuration changes while your activity is running. + * + * @param newConfig The new device configuration + */ + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + if (this.appView == null) { + return; + } + PluginManager pm = this.appView.getPluginManager(); + if (pm != null) { + pm.onConfigurationChanged(newConfig); + } + } + + /** + * Called by the system when the user grants permissions + * + * @param requestCode + * @param permissions + * @param grantResults + */ + @Override + public void onRequestPermissionsResult(int requestCode, String permissions[], + int[] grantResults) { + try + { + cordovaInterface.onRequestPermissionResult(requestCode, permissions, grantResults); + } + catch (JSONException e) + { + LOG.d(TAG, "JSONException: Parameters fed into the method are not valid"); + e.printStackTrace(); + } + + } + +} diff --git a/platforms/android/CordovaLib/src/org/apache/cordova/CordovaArgs.java b/platforms/android/CordovaLib/src/org/apache/cordova/CordovaArgs.java new file mode 100644 index 0000000..d40d26e --- /dev/null +++ b/platforms/android/CordovaLib/src/org/apache/cordova/CordovaArgs.java @@ -0,0 +1,113 @@ +/* + 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 org.apache.cordova; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import android.util.Base64; + +public class CordovaArgs { + private JSONArray baseArgs; + + public CordovaArgs(JSONArray args) { + this.baseArgs = args; + } + + + // Pass through the basics to the base args. + public Object get(int index) throws JSONException { + return baseArgs.get(index); + } + + public boolean getBoolean(int index) throws JSONException { + return baseArgs.getBoolean(index); + } + + public double getDouble(int index) throws JSONException { + return baseArgs.getDouble(index); + } + + public int getInt(int index) throws JSONException { + return baseArgs.getInt(index); + } + + public JSONArray getJSONArray(int index) throws JSONException { + return baseArgs.getJSONArray(index); + } + + public JSONObject getJSONObject(int index) throws JSONException { + return baseArgs.getJSONObject(index); + } + + public long getLong(int index) throws JSONException { + return baseArgs.getLong(index); + } + + public String getString(int index) throws JSONException { + return baseArgs.getString(index); + } + + + public Object opt(int index) { + return baseArgs.opt(index); + } + + public boolean optBoolean(int index) { + return baseArgs.optBoolean(index); + } + + public double optDouble(int index) { + return baseArgs.optDouble(index); + } + + public int optInt(int index) { + return baseArgs.optInt(index); + } + + public JSONArray optJSONArray(int index) { + return baseArgs.optJSONArray(index); + } + + public JSONObject optJSONObject(int index) { + return baseArgs.optJSONObject(index); + } + + public long optLong(int index) { + return baseArgs.optLong(index); + } + + public String optString(int index) { + return baseArgs.optString(index); + } + + public boolean isNull(int index) { + return baseArgs.isNull(index); + } + + + // The interesting custom helpers. + public byte[] getArrayBuffer(int index) throws JSONException { + String encoded = baseArgs.getString(index); + return Base64.decode(encoded, Base64.DEFAULT); + } +} + + diff --git a/platforms/android/CordovaLib/src/org/apache/cordova/CordovaBridge.java b/platforms/android/CordovaLib/src/org/apache/cordova/CordovaBridge.java new file mode 100644 index 0000000..7bc4a55 --- /dev/null +++ b/platforms/android/CordovaLib/src/org/apache/cordova/CordovaBridge.java @@ -0,0 +1,184 @@ +/* + 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 org.apache.cordova; + +import java.security.SecureRandom; + +import org.json.JSONArray; +import org.json.JSONException; + +import android.util.Log; + +/** + * Contains APIs that the JS can call. All functions in here should also have + * an equivalent entry in CordovaChromeClient.java, and be added to + * cordova-js/lib/android/plugin/android/promptbasednativeapi.js + */ +public class CordovaBridge { + private static final String LOG_TAG = "CordovaBridge"; + private PluginManager pluginManager; + private NativeToJsMessageQueue jsMessageQueue; + private volatile int expectedBridgeSecret = -1; // written by UI thread, read by JS thread. + + public CordovaBridge(PluginManager pluginManager, NativeToJsMessageQueue jsMessageQueue) { + this.pluginManager = pluginManager; + this.jsMessageQueue = jsMessageQueue; + } + + public String jsExec(int bridgeSecret, String service, String action, String callbackId, String arguments) throws JSONException, IllegalAccessException { + if (!verifySecret("exec()", bridgeSecret)) { + return null; + } + // If the arguments weren't received, send a message back to JS. It will switch bridge modes and try again. See CB-2666. + // We send a message meant specifically for this case. It starts with "@" so no other message can be encoded into the same string. + if (arguments == null) { + return "@Null arguments."; + } + + jsMessageQueue.setPaused(true); + try { + // Tell the resourceApi what thread the JS is running on. + CordovaResourceApi.jsThread = Thread.currentThread(); + + pluginManager.exec(service, action, callbackId, arguments); + String ret = null; + if (!NativeToJsMessageQueue.DISABLE_EXEC_CHAINING) { + ret = jsMessageQueue.popAndEncode(false); + } + return ret; + } catch (Throwable e) { + e.printStackTrace(); + return ""; + } finally { + jsMessageQueue.setPaused(false); + } + } + + public void jsSetNativeToJsBridgeMode(int bridgeSecret, int value) throws IllegalAccessException { + if (!verifySecret("setNativeToJsBridgeMode()", bridgeSecret)) { + return; + } + jsMessageQueue.setBridgeMode(value); + } + + public String jsRetrieveJsMessages(int bridgeSecret, boolean fromOnlineEvent) throws IllegalAccessException { + if (!verifySecret("retrieveJsMessages()", bridgeSecret)) { + return null; + } + return jsMessageQueue.popAndEncode(fromOnlineEvent); + } + + private boolean verifySecret(String action, int bridgeSecret) throws IllegalAccessException { + if (!jsMessageQueue.isBridgeEnabled()) { + if (bridgeSecret == -1) { + Log.d(LOG_TAG, action + " call made before bridge was enabled."); + } else { + Log.d(LOG_TAG, "Ignoring " + action + " from previous page load."); + } + return false; + } + // Bridge secret wrong and bridge not due to it being from the previous page. + if (expectedBridgeSecret < 0 || bridgeSecret != expectedBridgeSecret) { + Log.e(LOG_TAG, "Bridge access attempt with wrong secret token, possibly from malicious code. Disabling exec() bridge!"); + clearBridgeSecret(); + throw new IllegalAccessException(); + } + return true; + } + + /** Called on page transitions */ + void clearBridgeSecret() { + expectedBridgeSecret = -1; + } + + public boolean isSecretEstablished() { + return expectedBridgeSecret != -1; + } + + /** Called by cordova.js to initialize the bridge. */ + int generateBridgeSecret() { + SecureRandom randGen = new SecureRandom(); + expectedBridgeSecret = randGen.nextInt(Integer.MAX_VALUE); + return expectedBridgeSecret; + } + + public void reset() { + jsMessageQueue.reset(); + clearBridgeSecret(); + } + + public String promptOnJsPrompt(String origin, String message, String defaultValue) { + if (defaultValue != null && defaultValue.length() > 3 && defaultValue.startsWith("gap:")) { + JSONArray array; + try { + array = new JSONArray(defaultValue.substring(4)); + int bridgeSecret = array.getInt(0); + String service = array.getString(1); + String action = array.getString(2); + String callbackId = array.getString(3); + String r = jsExec(bridgeSecret, service, action, callbackId, message); + return r == null ? "" : r; + } catch (JSONException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + return ""; + } + // Sets the native->JS bridge mode. + else if (defaultValue != null && defaultValue.startsWith("gap_bridge_mode:")) { + try { + int bridgeSecret = Integer.parseInt(defaultValue.substring(16)); + jsSetNativeToJsBridgeMode(bridgeSecret, Integer.parseInt(message)); + } catch (NumberFormatException e){ + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + return ""; + } + // Polling for JavaScript messages + else if (defaultValue != null && defaultValue.startsWith("gap_poll:")) { + int bridgeSecret = Integer.parseInt(defaultValue.substring(9)); + try { + String r = jsRetrieveJsMessages(bridgeSecret, "1".equals(message)); + return r == null ? "" : r; + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + return ""; + } + else if (defaultValue != null && defaultValue.startsWith("gap_init:")) { + // Protect against random iframes being able to talk through the bridge. + // Trust only pages which the app would have been allowed to navigate to anyway. + if (pluginManager.shouldAllowBridgeAccess(origin)) { + // Enable the bridge + int bridgeMode = Integer.parseInt(defaultValue.substring(9)); + jsMessageQueue.setBridgeMode(bridgeMode); + // Tell JS the bridge secret. + int secret = generateBridgeSecret(); + return ""+secret; + } else { + Log.e(LOG_TAG, "gap_init called from restricted origin: " + origin); + } + return ""; + } + return null; + } +} diff --git a/platforms/android/CordovaLib/src/org/apache/cordova/CordovaClientCertRequest.java b/platforms/android/CordovaLib/src/org/apache/cordova/CordovaClientCertRequest.java new file mode 100644 index 0000000..5dd0eca --- /dev/null +++ b/platforms/android/CordovaLib/src/org/apache/cordova/CordovaClientCertRequest.java @@ -0,0 +1,96 @@ +/* + 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 org.apache.cordova; + +import java.security.Principal; +import java.security.PrivateKey; +import java.security.cert.X509Certificate; + +import android.webkit.ClientCertRequest; + +/** + * Implementation of the ICordovaClientCertRequest for Android WebView. + */ +public class CordovaClientCertRequest implements ICordovaClientCertRequest { + + private final ClientCertRequest request; + + public CordovaClientCertRequest(ClientCertRequest request) { + this.request = request; + } + + /** + * Cancel this request + */ + public void cancel() + { + request.cancel(); + } + + /* + * Returns the host name of the server requesting the certificate. + */ + public String getHost() + { + return request.getHost(); + } + + /* + * Returns the acceptable types of asymmetric keys (can be null). + */ + public String[] getKeyTypes() + { + return request.getKeyTypes(); + } + + /* + * Returns the port number of the server requesting the certificate. + */ + public int getPort() + { + return request.getPort(); + } + + /* + * Returns the acceptable certificate issuers for the certificate matching the private key (can be null). + */ + public Principal[] getPrincipals() + { + return request.getPrincipals(); + } + + /* + * Ignore the request for now. Do not remember user's choice. + */ + public void ignore() + { + request.ignore(); + } + + /* + * Proceed with the specified private key and client certificate chain. Remember the user's positive choice and use it for future requests. + * + * @param privateKey The privateKey + * @param chain The certificate chain + */ + public void proceed(PrivateKey privateKey, X509Certificate[] chain) + { + request.proceed(privateKey, chain); + } +} diff --git a/platforms/android/CordovaLib/src/org/apache/cordova/CordovaDialogsHelper.java b/platforms/android/CordovaLib/src/org/apache/cordova/CordovaDialogsHelper.java new file mode 100644 index 0000000..a219c99 --- /dev/null +++ b/platforms/android/CordovaLib/src/org/apache/cordova/CordovaDialogsHelper.java @@ -0,0 +1,152 @@ +/* + 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 org.apache.cordova; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.view.KeyEvent; +import android.widget.EditText; + +/** + * Helper class for WebViews to implement prompt(), alert(), confirm() dialogs. + */ +public class CordovaDialogsHelper { + private final Context context; + private AlertDialog lastHandledDialog; + + public CordovaDialogsHelper(Context context) { + this.context = context; + } + + public void showAlert(String message, final Result result) { + AlertDialog.Builder dlg = new AlertDialog.Builder(context); + dlg.setMessage(message); + dlg.setTitle("Alert"); + //Don't let alerts break the back button + dlg.setCancelable(true); + dlg.setPositiveButton(android.R.string.ok, + new AlertDialog.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + result.gotResult(true, null); + } + }); + dlg.setOnCancelListener( + new DialogInterface.OnCancelListener() { + public void onCancel(DialogInterface dialog) { + result.gotResult(false, null); + } + }); + dlg.setOnKeyListener(new DialogInterface.OnKeyListener() { + //DO NOTHING + public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK) + { + result.gotResult(true, null); + return false; + } + else + return true; + } + }); + lastHandledDialog = dlg.show(); + } + + public void showConfirm(String message, final Result result) { + AlertDialog.Builder dlg = new AlertDialog.Builder(context); + dlg.setMessage(message); + dlg.setTitle("Confirm"); + dlg.setCancelable(true); + dlg.setPositiveButton(android.R.string.ok, + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + result.gotResult(true, null); + } + }); + dlg.setNegativeButton(android.R.string.cancel, + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + result.gotResult(false, null); + } + }); + dlg.setOnCancelListener( + new DialogInterface.OnCancelListener() { + public void onCancel(DialogInterface dialog) { + result.gotResult(false, null); + } + }); + dlg.setOnKeyListener(new DialogInterface.OnKeyListener() { + //DO NOTHING + public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK) + { + result.gotResult(false, null); + return false; + } + else + return true; + } + }); + lastHandledDialog = dlg.show(); + } + + /** + * Tell the client to display a prompt dialog to the user. + * If the client returns true, WebView will assume that the client will + * handle the prompt dialog and call the appropriate JsPromptResult method. + * + * Since we are hacking prompts for our own purposes, we should not be using them for + * this purpose, perhaps we should hack console.log to do this instead! + */ + public void showPrompt(String message, String defaultValue, final Result result) { + // Returning false would also show a dialog, but the default one shows the origin (ugly). + AlertDialog.Builder dlg = new AlertDialog.Builder(context); + dlg.setMessage(message); + final EditText input = new EditText(context); + if (defaultValue != null) { + input.setText(defaultValue); + } + dlg.setView(input); + dlg.setCancelable(false); + dlg.setPositiveButton(android.R.string.ok, + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + String userText = input.getText().toString(); + result.gotResult(true, userText); + } + }); + dlg.setNegativeButton(android.R.string.cancel, + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + result.gotResult(false, null); + } + }); + lastHandledDialog = dlg.show(); + } + + public void destroyLastDialog(){ + if (lastHandledDialog != null){ + lastHandledDialog.cancel(); + } + } + + public interface Result { + public void gotResult(boolean success, String value); + } +} \ No newline at end of file diff --git a/platforms/android/CordovaLib/src/org/apache/cordova/CordovaHttpAuthHandler.java b/platforms/android/CordovaLib/src/org/apache/cordova/CordovaHttpAuthHandler.java new file mode 100644 index 0000000..724381e --- /dev/null +++ b/platforms/android/CordovaLib/src/org/apache/cordova/CordovaHttpAuthHandler.java @@ -0,0 +1,51 @@ +/* + 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 org.apache.cordova; + +import android.webkit.HttpAuthHandler; + +/** + * Specifies interface for HTTP auth handler object which is used to handle auth requests and + * specifying user credentials. + */ +public class CordovaHttpAuthHandler implements ICordovaHttpAuthHandler { + + private final HttpAuthHandler handler; + + public CordovaHttpAuthHandler(HttpAuthHandler handler) { + this.handler = handler; + } + + /** + * Instructs the WebView to cancel the authentication request. + */ + public void cancel () { + this.handler.cancel(); + } + + /** + * Instructs the WebView to proceed with the authentication with the given credentials. + * + * @param username + * @param password + */ + public void proceed (String username, String password) { + this.handler.proceed(username, password); + } +} diff --git a/platforms/android/CordovaLib/src/org/apache/cordova/CordovaInterface.java b/platforms/android/CordovaLib/src/org/apache/cordova/CordovaInterface.java new file mode 100755 index 0000000..3b8468f --- /dev/null +++ b/platforms/android/CordovaLib/src/org/apache/cordova/CordovaInterface.java @@ -0,0 +1,88 @@ +/* + 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 org.apache.cordova; + +import android.app.Activity; +import android.content.Intent; + +import org.apache.cordova.CordovaPlugin; + +import java.util.concurrent.ExecutorService; + +/** + * The Activity interface that is implemented by CordovaActivity. + * It is used to isolate plugin development, and remove dependency on entire Cordova library. + */ +public interface CordovaInterface { + + /** + * Launch an activity for which you would like a result when it finished. When this activity exits, + * your onActivityResult() method will be called. + * + * @param command The command object + * @param intent The intent to start + * @param requestCode The request code that is passed to callback to identify the activity + */ + abstract public void startActivityForResult(CordovaPlugin command, Intent intent, int requestCode); + + /** + * Set the plugin to be called when a sub-activity exits. + * + * @param plugin The plugin on which onActivityResult is to be called + */ + abstract public void setActivityResultCallback(CordovaPlugin plugin); + + /** + * Get the Android activity. + * + * @return the Activity + */ + public abstract Activity getActivity(); + + + /** + * Called when a message is sent to plugin. + * + * @param id The message id + * @param data The message data + * @return Object or null + */ + public Object onMessage(String id, Object data); + + /** + * Returns a shared thread pool that can be used for background tasks. + */ + public ExecutorService getThreadPool(); + + /** + * Sends a permission request to the activity for one permission. + */ + public void requestPermission(CordovaPlugin plugin, int requestCode, String permission); + + /** + * Sends a permission request to the activity for a group of permissions + */ + public void requestPermissions(CordovaPlugin plugin, int requestCode, String [] permissions); + + /** + * Check for a permission. Returns true if the permission is granted, false otherwise. + */ + public boolean hasPermission(String permission); + +} diff --git a/platforms/android/CordovaLib/src/org/apache/cordova/CordovaInterfaceImpl.java b/platforms/android/CordovaLib/src/org/apache/cordova/CordovaInterfaceImpl.java new file mode 100644 index 0000000..d1420b6 --- /dev/null +++ b/platforms/android/CordovaLib/src/org/apache/cordova/CordovaInterfaceImpl.java @@ -0,0 +1,243 @@ +/* + 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 org.apache.cordova; + +import android.app.Activity; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.os.Build; +import android.os.Bundle; +import android.util.Log; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +/** + * Default implementation of CordovaInterface. + */ +public class CordovaInterfaceImpl implements CordovaInterface { + private static final String TAG = "CordovaInterfaceImpl"; + protected Activity activity; + protected ExecutorService threadPool; + protected PluginManager pluginManager; + + protected ActivityResultHolder savedResult; + protected CordovaPlugin activityResultCallback; + protected CordovaPlugin permissionResultCallback; + protected String initCallbackService; + protected int activityResultRequestCode; + protected boolean activityWasDestroyed = false; + protected Bundle savedPluginState; + + public CordovaInterfaceImpl(Activity activity) { + this(activity, Executors.newCachedThreadPool()); + } + + public CordovaInterfaceImpl(Activity activity, ExecutorService threadPool) { + this.activity = activity; + this.threadPool = threadPool; + } + + @Override + public void startActivityForResult(CordovaPlugin command, Intent intent, int requestCode) { + setActivityResultCallback(command); + try { + activity.startActivityForResult(intent, requestCode); + } catch (RuntimeException e) { // E.g.: ActivityNotFoundException + activityResultCallback = null; + throw e; + } + } + + @Override + public void setActivityResultCallback(CordovaPlugin plugin) { + // Cancel any previously pending activity. + if (activityResultCallback != null) { + activityResultCallback.onActivityResult(activityResultRequestCode, Activity.RESULT_CANCELED, null); + } + activityResultCallback = plugin; + } + + @Override + public Activity getActivity() { + return activity; + } + + @Override + public Object onMessage(String id, Object data) { + if ("exit".equals(id)) { + activity.finish(); + } + return null; + } + + @Override + public ExecutorService getThreadPool() { + return threadPool; + } + + /** + * Dispatches any pending onActivityResult callbacks and sends the resume event if the + * Activity was destroyed by the OS. + */ + public void onCordovaInit(PluginManager pluginManager) { + this.pluginManager = pluginManager; + if (savedResult != null) { + onActivityResult(savedResult.requestCode, savedResult.resultCode, savedResult.intent); + } else if(activityWasDestroyed) { + // If there was no Activity result, we still need to send out the resume event if the + // Activity was destroyed by the OS + activityWasDestroyed = false; + if(pluginManager != null) + { + CoreAndroid appPlugin = (CoreAndroid) pluginManager.getPlugin(CoreAndroid.PLUGIN_NAME); + if(appPlugin != null) { + JSONObject obj = new JSONObject(); + try { + obj.put("action", "resume"); + } catch (JSONException e) { + LOG.e(TAG, "Failed to create event message", e); + } + appPlugin.sendResumeEvent(new PluginResult(PluginResult.Status.OK, obj)); + } + } + + } + } + + /** + * Routes the result to the awaiting plugin. Returns false if no plugin was waiting. + */ + public boolean onActivityResult(int requestCode, int resultCode, Intent intent) { + CordovaPlugin callback = activityResultCallback; + if(callback == null && initCallbackService != null) { + // The application was restarted, but had defined an initial callback + // before being shut down. + savedResult = new ActivityResultHolder(requestCode, resultCode, intent); + if (pluginManager != null) { + callback = pluginManager.getPlugin(initCallbackService); + if(callback != null) { + callback.onRestoreStateForActivityResult(savedPluginState.getBundle(callback.getServiceName()), + new ResumeCallback(callback.getServiceName(), pluginManager)); + } + } + } + activityResultCallback = null; + + if (callback != null) { + Log.d(TAG, "Sending activity result to plugin"); + initCallbackService = null; + savedResult = null; + callback.onActivityResult(requestCode, resultCode, intent); + return true; + } + Log.w(TAG, "Got an activity result, but no plugin was registered to receive it" + (savedResult != null ? " yet!" : ".")); + return false; + } + + /** + * Call this from your startActivityForResult() overload. This is required to catch the case + * where plugins use Activity.startActivityForResult() + CordovaInterface.setActivityResultCallback() + * rather than CordovaInterface.startActivityForResult(). + */ + public void setActivityResultRequestCode(int requestCode) { + activityResultRequestCode = requestCode; + } + + /** + * Saves parameters for startActivityForResult(). + */ + public void onSaveInstanceState(Bundle outState) { + if (activityResultCallback != null) { + String serviceName = activityResultCallback.getServiceName(); + outState.putString("callbackService", serviceName); + } + if(pluginManager != null){ + outState.putBundle("plugin", pluginManager.onSaveInstanceState()); + } + + } + + /** + * Call this from onCreate() so that any saved startActivityForResult parameters will be restored. + */ + public void restoreInstanceState(Bundle savedInstanceState) { + initCallbackService = savedInstanceState.getString("callbackService"); + savedPluginState = savedInstanceState.getBundle("plugin"); + activityWasDestroyed = true; + } + + private static class ActivityResultHolder { + private int requestCode; + private int resultCode; + private Intent intent; + + public ActivityResultHolder(int requestCode, int resultCode, Intent intent) { + this.requestCode = requestCode; + this.resultCode = resultCode; + this.intent = intent; + } + } + + /** + * Called by the system when the user grants permissions + * + * @param requestCode + * @param permissions + * @param grantResults + */ + public void onRequestPermissionResult(int requestCode, String[] permissions, + int[] grantResults) throws JSONException { + if(permissionResultCallback != null) + { + permissionResultCallback.onRequestPermissionResult(requestCode, permissions, grantResults); + permissionResultCallback = null; + } + } + + public void requestPermission(CordovaPlugin plugin, int requestCode, String permission) { + permissionResultCallback = plugin; + String[] permissions = new String [1]; + permissions[0] = permission; + getActivity().requestPermissions(permissions, requestCode); + } + + public void requestPermissions(CordovaPlugin plugin, int requestCode, String [] permissions) + { + permissionResultCallback = plugin; + getActivity().requestPermissions(permissions, requestCode); + } + + public boolean hasPermission(String permission) + { + if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) + { + int result = activity.checkSelfPermission(permission); + return PackageManager.PERMISSION_GRANTED == result; + } + else + { + return true; + } + } +} diff --git a/platforms/android/CordovaLib/src/org/apache/cordova/CordovaPlugin.java b/platforms/android/CordovaLib/src/org/apache/cordova/CordovaPlugin.java new file mode 100644 index 0000000..41af1db --- /dev/null +++ b/platforms/android/CordovaLib/src/org/apache/cordova/CordovaPlugin.java @@ -0,0 +1,422 @@ +/* + 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 org.apache.cordova; + +import org.apache.cordova.CordovaArgs; +import org.apache.cordova.CordovaWebView; +import org.apache.cordova.CordovaInterface; +import org.apache.cordova.CallbackContext; +import org.json.JSONArray; +import org.json.JSONException; + +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.res.Configuration; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; + +import java.io.FileNotFoundException; +import java.io.IOException; + +/** + * Plugins must extend this class and override one of the execute methods. + */ +public class CordovaPlugin { + public CordovaWebView webView; + public CordovaInterface cordova; + protected CordovaPreferences preferences; + private String serviceName; + + /** + * Call this after constructing to initialize the plugin. + * Final because we want to be able to change args without breaking plugins. + */ + public final void privateInitialize(String serviceName, CordovaInterface cordova, CordovaWebView webView, CordovaPreferences preferences) { + assert this.cordova == null; + this.serviceName = serviceName; + this.cordova = cordova; + this.webView = webView; + this.preferences = preferences; + initialize(cordova, webView); + pluginInitialize(); + } + + /** + * Called after plugin construction and fields have been initialized. + * Prefer to use pluginInitialize instead since there is no value in + * having parameters on the initialize() function. + */ + public void initialize(CordovaInterface cordova, CordovaWebView webView) { + } + + /** + * Called after plugin construction and fields have been initialized. + */ + protected void pluginInitialize() { + } + + /** + * Returns the plugin's service name (what you'd use when calling pluginManger.getPlugin()) + */ + public String getServiceName() { + return serviceName; + } + + /** + * Executes the request. + * + * This method is called from the WebView thread. To do a non-trivial amount of work, use: + * cordova.getThreadPool().execute(runnable); + * + * To run on the UI thread, use: + * cordova.getActivity().runOnUiThread(runnable); + * + * @param action The action to execute. + * @param rawArgs The exec() arguments in JSON form. + * @param callbackContext The callback context used when calling back into JavaScript. + * @return Whether the action was valid. + */ + public boolean execute(String action, String rawArgs, CallbackContext callbackContext) throws JSONException { + JSONArray args = new JSONArray(rawArgs); + return execute(action, args, callbackContext); + } + + /** + * Executes the request. + * + * This method is called from the WebView thread. To do a non-trivial amount of work, use: + * cordova.getThreadPool().execute(runnable); + * + * To run on the UI thread, use: + * cordova.getActivity().runOnUiThread(runnable); + * + * @param action The action to execute. + * @param args The exec() arguments. + * @param callbackContext The callback context used when calling back into JavaScript. + * @return Whether the action was valid. + */ + public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { + CordovaArgs cordovaArgs = new CordovaArgs(args); + return execute(action, cordovaArgs, callbackContext); + } + + /** + * Executes the request. + * + * This method is called from the WebView thread. To do a non-trivial amount of work, use: + * cordova.getThreadPool().execute(runnable); + * + * To run on the UI thread, use: + * cordova.getActivity().runOnUiThread(runnable); + * + * @param action The action to execute. + * @param args The exec() arguments, wrapped with some Cordova helpers. + * @param callbackContext The callback context used when calling back into JavaScript. + * @return Whether the action was valid. + */ + public boolean execute(String action, CordovaArgs args, CallbackContext callbackContext) throws JSONException { + return false; + } + + /** + * Called when the system is about to start resuming a previous activity. + * + * @param multitasking Flag indicating if multitasking is turned on for app + */ + public void onPause(boolean multitasking) { + } + + /** + * Called when the activity will start interacting with the user. + * + * @param multitasking Flag indicating if multitasking is turned on for app + */ + public void onResume(boolean multitasking) { + } + + /** + * Called when the activity is becoming visible to the user. + */ + public void onStart() { + } + + /** + * Called when the activity is no longer visible to the user. + */ + public void onStop() { + } + + /** + * Called when the activity receives a new intent. + */ + public void onNewIntent(Intent intent) { + } + + /** + * The final call you receive before your activity is destroyed. + */ + public void onDestroy() { + } + + /** + * Called when the Activity is being destroyed (e.g. if a plugin calls out to an external + * Activity and the OS kills the CordovaActivity in the background). The plugin should save its + * state in this method only if it is awaiting the result of an external Activity and needs + * to preserve some information so as to handle that result; onRestoreStateForActivityResult() + * will only be called if the plugin is the recipient of an Activity result + * + * @return Bundle containing the state of the plugin or null if state does not need to be saved + */ + public Bundle onSaveInstanceState() { + return null; + } + + /** + * Called when a plugin is the recipient of an Activity result after the CordovaActivity has + * been destroyed. The Bundle will be the same as the one the plugin returned in + * onSaveInstanceState() + * + * @param state Bundle containing the state of the plugin + * @param callbackContext Replacement Context to return the plugin result to + */ + public void onRestoreStateForActivityResult(Bundle state, CallbackContext callbackContext) {} + + /** + * Called when a message is sent to plugin. + * + * @param id The message id + * @param data The message data + * @return Object to stop propagation or null + */ + public Object onMessage(String id, Object data) { + return null; + } + + /** + * Called when an activity you launched exits, giving you the requestCode you started it with, + * the resultCode it returned, and any additional data from it. + * + * @param requestCode The request code originally supplied to startActivityForResult(), + * allowing you to identify who this result came from. + * @param resultCode The integer result code returned by the child activity through its setResult(). + * @param intent An Intent, which can return result data to the caller (various data can be + * attached to Intent "extras"). + */ + public void onActivityResult(int requestCode, int resultCode, Intent intent) { + } + + /** + * Hook for blocking the loading of external resources. + * + * This will be called when the WebView's shouldInterceptRequest wants to + * know whether to open a connection to an external resource. Return false + * to block the request: if any plugin returns false, Cordova will block + * the request. If all plugins return null, the default policy will be + * enforced. If at least one plugin returns true, and no plugins return + * false, then the request will proceed. + * + * Note that this only affects resource requests which are routed through + * WebViewClient.shouldInterceptRequest, such as XMLHttpRequest requests and + * img tag loads. WebSockets and media requests (such as

', { + class: 'mui-panel', id: this.frames[modeID] + }); + + $('
', { class: 'mui-row'}).append($('
', { class: 'mui-col-xs-12 mui--text-title mui-ellipsis-2', text: title})).appendTo(frame); + + $('#frames').append(frame); + this.$id[modeID] = $('#' + this.frames[modeID]); + + // Call the parent displayForm first... + + var row = $('
', {class: 'mui-row'}); + + $('
', { class: 'mui-col-xs-3 mui--text-accent', text: 'X'}).appendTo(row); + $('
', { class: 'mui-col-xs-3 mui--text-accent', text: 'Y'}).appendTo(row); + $('
', { class: 'mui-col-xs-3 mui--text-accent', text: 'Z'}).appendTo(row); + + this.$id[modeID].append(row); + + + row = $('
', {class: 'mui-row'}); + + $('
', { class: 'mui-col-xs-3 mui--text-white', text: '--', id: this.frames[modeID] + '-x' }).appendTo(row); + $('
', { class: 'mui-col-xs-3 mui--text-white', text: '--', id: this.frames[modeID] + '-y'}).appendTo(row); + $('
', { class: 'mui-col-xs-3 mui--text-white', text: '--', id: this.frames[modeID] + '-z'}).appendTo(row); + + this.$id[modeID].append(row); + + this.$result[this.frames[modeID] + '-x'] = $('#' + this.frames[modeID] + '-x'); + this.$result[this.frames[modeID] + '-y'] = $('#' + this.frames[modeID] + '-y'); + this.$result[this.frames[modeID] + '-z'] = $('#' + this.frames[modeID] + '-z'); + }; + +}; + + +inheritsFrom(CC2650_ACCEL, CAPABILITY); diff --git a/platforms/android/assets/www/js/device/CC2650/cc2650_barometer.js b/platforms/android/assets/www/js/device/CC2650/cc2650_barometer.js new file mode 100644 index 0000000..6123dde --- /dev/null +++ b/platforms/android/assets/www/js/device/CC2650/cc2650_barometer.js @@ -0,0 +1,106 @@ +/** + * + * User: Martin Donnelly + * Date: 2016-05-20 + * Time: 10:13 + * + */ +/* global CAPABILITY, inheritsFrom */ +/* global ble */ +/* jshint browser: true , devel: true*/ + +var CC2650_BAR = function(deviceId) { + 'use strict'; + this.name = 'Barometer'; + this.deviceID = deviceId; + this.capabilityID = 'F000AA40-0451-4000-B000-000000000000'; + this.serviceDef = { + service: 'F000AA40-0451-4000-B000-000000000000', + data: 'F000AA41-0451-4000-B000-000000000000', + notification: 'F0002902-0451-4000-B000-000000000000', + configuration: 'F000AA42-0451-4000-B000-000000000000', + period: 'F000AA43-0451-4000-B000-000000000000' + + }; + + this.$result = {temp: null, pressure: null}; + + + + this.startService = function() { + 'use strict'; + if (this.deviceID !== null) { + + console.log('Starting CC2650 Barometer Service on ', this.deviceID); + console.log(this.serviceDef); + this.insertFrame(); + + ble.startNotification(this.deviceID, this.serviceDef.service, this.serviceDef.data, this.onBarometerData.bind(this), this.onError); + + //Turn on barometer + var barometerConfig = new Uint8Array(1); + barometerConfig[0] = 0x01; + ble.write(this.deviceID, this.serviceDef.service, this.serviceDef.configuration, barometerConfig.buffer, + function() { console.log('Started barometer.'); },this.onError); + + + } + + }; + + this.sensorBarometerConvert = function(data) { + return (data / 100); + + }; + + this.onBarometerData = function(data) { + var pStr; + var tStr; + console.log(data); + var message; + var a = new Uint8Array(data); + + //0-2 Temp + //3-5 Pressure + tStr = this.sensorBarometerConvert(a[0] | (a[1] << 8) | (a[2] << 16)) + '°C'; + pStr = this.sensorBarometerConvert(a[3] | (a[4] << 8) | (a[5] << 16)) + 'hPa'; + + message = 'Temperature
' + tStr + + 'Pressure
' + pStr ; + + this.$result.temp.text(tStr); + this.$result.pressure.text(pStr); + + this.state = message; + + console.log('Barometer:', this.state); + }; + + this.insertFrame = function() { + + var self = this; + console.log('Overloading...'); + // Call the parent displayForm first... + this.superClass_.insertFrame.call(self); + + var temp = this.frameID + '-t'; + var pressure = this.frameID + '-p'; + var row = $('
', {class: 'mui-row'}); + + $('
', { class: 'mui-col-xs-3 mui--text-accent', text: 'Temp:'}).appendTo(row); + + $('
', { class: 'mui-col-xs-3 mui--text-white', id: temp}).appendTo(row); + $('
', { class: 'mui-col-xs-3 mui--text-accent', text: 'Pressure:'}).appendTo(row); + + $('
', { class: 'mui-col-xs-3 mui--text-white', id: pressure}).appendTo(row); + + this.$id.append(row); + this.$result.temp = $('#' + temp); + this.$result.pressure = $('#' + pressure); + + }; + +}; + + +inheritsFrom(CC2650_BAR, CAPABILITY); diff --git a/platforms/android/assets/www/js/device/CC2650/cc2650_luxometer.js b/platforms/android/assets/www/js/device/CC2650/cc2650_luxometer.js new file mode 100644 index 0000000..15b4c03 --- /dev/null +++ b/platforms/android/assets/www/js/device/CC2650/cc2650_luxometer.js @@ -0,0 +1,103 @@ +/** + * + * User: Martin Donnelly + * Date: 2016-05-20 + * Time: 10:13 + * + */ +/* global CAPABILITY, inheritsFrom */ +/* global ble */ +/* jshint browser: true , devel: true*/ + +var CC2650_LUX = function(deviceId) { + 'use strict'; + this.name = 'Luxometer'; + this.deviceID = deviceId; + this.capabilityID = 'F000AA70-0451-4000-B000-000000000000'; + this.serviceDef = { + service: 'F000AA70-0451-4000-B000-000000000000', + data: 'F000AA71-0451-4000-B000-000000000000', + notification: 'F0002902-0451-4000-B000-000000000000', + configuration: 'F000AA72-0451-4000-B000-000000000000', + period: 'F000AA73-0451-4000-B000-000000000000' + + }; + + this.$result = {temp: null, pressure: null}; + + + + this.startService = function() { + 'use strict'; + if (this.deviceID !== null) { + + console.log('Starting CC2650 Luxometer Service on ', this.deviceID); + console.log(this.serviceDef); + //this.insertFrame(); + + ble.startNotification(this.deviceID, this.serviceDef.service, this.serviceDef.data, this.onLuxData.bind(this), this.onError); + + //Turn on barometer + var luxConfig = new Uint8Array(1); + luxConfig[0] = 0x01; + ble.write(this.deviceID, this.serviceDef.service, this.serviceDef.configuration, luxConfig.buffer, + function() { console.log('Started luxometer.'); },this.onError); + + } + + }; + + this.sensorBarometerConvert = function(data) { + return (data / 100); + + }; + + this.onLuxData = function(data) { + var pStr; + var tStr; + console.log(data); + var message; + var a = new Uint8Array(data); + var b = new Uint16Array(data); + + console.log('lux a',a[0],a[1]); + console.log('lux b',b[0]); + console.log('lux b',b[0].toString(2)); + +var m = b[0] | b[0] << 4; + console.log(m.toString(2)); + + //0-2 Temp + //3-5 Pressure + + console.log('Luxometer:', this.state); + }; + + this.insertFrame = function() { + + var self = this; + console.log('Overloading...'); + // Call the parent displayForm first... + this.superClass_.insertFrame.call(self); + + var temp = this.frameID + '-t'; + var pressure = this.frameID + '-p'; + var row = $('
', {class: 'mui-row'}); + + $('
', { class: 'mui-col-xs-3 mui--text-accent', text: 'Temp:'}).appendTo(row); + + $('
', { class: 'mui-col-xs-3 mui--text-white', id: temp}).appendTo(row); + $('
', { class: 'mui-col-xs-3 mui--text-accent', text: 'Pressure:'}).appendTo(row); + + $('
', { class: 'mui-col-xs-3 mui--text-white', id: pressure}).appendTo(row); + + this.$id.append(row); + this.$result.temp = $('#' + temp); + this.$result.pressure = $('#' + pressure); + + }; + +}; + + +inheritsFrom(CC2650_LUX, CAPABILITY); diff --git a/platforms/android/assets/www/js/index.js b/platforms/android/assets/www/js/index.js new file mode 100644 index 0000000..e1adade --- /dev/null +++ b/platforms/android/assets/www/js/index.js @@ -0,0 +1,224 @@ +/* + * 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. + */ + +/* global BATTERY, BUTTON */ + +var app = { + activeServices: [], + serviceList: { + 1800: 'Generic Access', + 1801: 'Generic Attribute', + '180a': 'Device Information', + + FFE0: 'Button', + 'F000AA00-0451-4000-B000-000000000000': 'Temperature', + 'F000AA20-0451-4000-B000-000000000000': 'Humidity', + 'F000AA80-0451-4000-B000-000000000000': 'Accelerometer', + 'F000AA40-0451-4000-B000-000000000000': 'Barometer' + + }, + list: {}, + button: { + service: 'FFE0', + data: 'FFE1', // Bit 2: side key, Bit 1- right key, Bit 0 –left key + }, + accelerometer: { + service: 'F000AA80-0451-4000-B000-000000000000', + data: 'F000AA81-0451-4000-B000-000000000000', // Read/notify 3 bytes X : Y : Z + notification: 'F0002902-0451-4000-B000-000000000000', + configuration: 'F000AA82-0451-4000-B000-000000000000', // Read/write 1 byte + period: 'F000AA83-0451-4000-B000-000000000000' // Read/write 1 byte Period = [Input*10]ms + }, + barometer: { + service: 'F000AA40-0451-4000-B000-000000000000', + data: 'F000AA41-0451-4000-B000-000000000000', + notification: 'F0002902-0451-4000-B000-000000000000', + configuration: 'F000AA42-0451-4000-B000-000000000000', + period: 'F000AA43-0451-4000-B000-000000000000' + + }, + // Application Constructor + initialize: function() { + this.bindEvents(); + }, + doScan: function() { + 'use strict'; + + $('#tbody').empty(); + ble.startScan([], function(device) { + console.log(JSON.stringify(device)); + + var newId = device.id.replace(/:/g, ''); + console.log(newId); + + this.list[newId] = device.id; + + var newTR = $(''); + + newTR.append($('').text(device.id)); + + if (device.hasOwnProperty('name')) { + newTR.append($('').text(device.name)); + } else { + newTR.append($('').text('*** Unknown')); + } + + newTR.append($('').text(device.rssi)); + + $('#tbody').append(newTR); + + $('#output').append(JSON.stringify(device) + '
'); + + }.bind(this), function(e) { + 'use strict'; + console.error(e); + }); + + + setTimeout(ble.stopScan, + 5000, + function() { console.log('Scan complete'); }, + function() { console.log('stopScan failed'); } + ); + + }, + // Bind Event Listeners + // + // Bind any events that are required on startup. Common events are: + // 'load', 'deviceready', 'offline', and 'online'. + bindEvents: function() { + var self = this; + document.addEventListener('deviceready', this.onDeviceReady, false); + $('#scan').on('click', function() { + 'use strict'; + this.doScan(); + }.bind(this)); + + + + $('#tbody').on('click','tr', function() { + 'use strict'; + var tID = $(this).context.id; + + var id = self.list[tID]; + + console.log(tID, id); + + self.connect(id); + }); + + + }, + // Deviceready Event Handler + // + // The scope of 'this' is the event. In order to call the 'receivedEvent' + // function, we must explicitly call 'app.receivedEvent(...);' + onDeviceReady: function() { + + + + }, serviceDiscovery: function(services) { + 'use strict'; + + console.log(services); + + }, + sensorMpu9250GyroConvert: function(data) { + return data / (65536 / 500); + }, + + sensorMpu9250AccConvert: function(data) { + // Change /2 to match accel range...i.e. 16 g would be /16 + return data / (32768 / 2); + } + + ,connect: function(deviceId) { + + $('#results').slideUp(); + console.log('Connect to ', deviceId); + + var onConnect = function(a) { + var services = []; + + 'use strict'; + + console.log('A:', a); + + services = a.services; + + for (var t = 0; t < services.length;t++) { + + var ident = services[t].toUpperCase(); + + switch (ident) { + case '180F': + var batteryStat = new BATTERY(deviceId); + batteryStat.startService(); + batteryStat.readBatteryState(); + app.activeServices.push(batteryStat); + + break; + case 'FFE0': + var buttonState = new BUTTON(deviceId); + buttonState.startService(); + app.activeServices.push(buttonState); + break; + + case 'F000AA80-0451-4000-B000-000000000000': + var cc2650_accel = new CC2650_ACCEL(deviceId); + cc2650_accel.startService(); + app.activeServices.push(cc2650_accel); + break; + + case 'F000AA40-0451-4000-B000-000000000000': + var cc2650_bar = new CC2650_BAR(deviceId); + cc2650_bar.startService(); + app.activeServices.push(cc2650_bar); + break; + + case 'F000AA70-0451-4000-B000-000000000000': + var cc2650_lux = new CC2650_LUX(deviceId); + cc2650_lux.startService(); + app.activeServices.push(cc2650_lux); + break; + + default: + console.log('Unknown service: ', ident); + } + } + + + }; + + ble.connect(deviceId, onConnect, function(e) { + 'use strict'; + console.error(e); + }); + + }, + onError: function(reason) { + console.error('ERROR: ' + reason); // Real apps should use notification.alert + }, + updateGyro: function(g) { + 'use strict'; + + } +}; + +app.initialize(); diff --git a/platforms/android/assets/www/js/standards/battery.js b/platforms/android/assets/www/js/standards/battery.js new file mode 100644 index 0000000..8a17160 --- /dev/null +++ b/platforms/android/assets/www/js/standards/battery.js @@ -0,0 +1,52 @@ +/** + * + * User: Martin Donnelly + * Date: 2016-05-20 + * Time: 10:13 + * + */ +/* global CAPABILITY */ +/* global ble */ +/* jshint browser: true , devel: true*/ + +var BATTERY = function() { + this.name = 'Battery'; + this.capabilityID = '180F'; + this.serviceDef = { + service: '180F', + level: '2A19' + }; + + this.onBatteryLevelChange = function(data) { + console.log(data); + var a = new Uint8Array(data); + this.state = a[0]; + console.log('onBatteryLevelChange', this.state); + }; + this.readBatteryState = function() { + console.log('readBatteryState'); + ble.read(this.deviceID, this.serviceDef.service, this.serviceDef.level, this.onReadBatteryLevel.bind(this), this.onError); + }; + + this.onReadBatteryLevel = function(data) { + console.log(data); + var a = new Uint8Array(data); + this.state = a[0]; + console.log('onReadBatteryLevel', this.state); + }; + + this.startService = function() { + 'use strict'; + if (this.deviceID !== null) { + console.log('Starting Battery Service'); + ble.startNotification(this.deviceID, this.serviceDef.service, this.serviceDef.level, this.onBatteryLevelChange.bind(this), this.onError); + } + + this.insertFrame(); + }; + + + +}; + +inheritsFrom(BATTERY, CAPABILITY); diff --git a/platforms/android/assets/www/js/standards/button.js b/platforms/android/assets/www/js/standards/button.js new file mode 100644 index 0000000..cadf69a --- /dev/null +++ b/platforms/android/assets/www/js/standards/button.js @@ -0,0 +1,96 @@ +/** + * + * User: Martin Donnelly + * Date: 2016-05-20 + * Time: 10:13 + * + */ +/* global CAPABILITY, inheritsFrom */ +/* global ble */ +/* jshint browser: true , devel: true*/ + +var BUTTON = function(deviceId) { + 'use strict'; + this.name = 'Button'; + this.deviceID = deviceId; + this.capabilityID = 'FFE0'; + this.serviceDef = { + service: 'FFE0', + data: 'FFE1' // Bit 2: side key, Bit 1- right key, Bit 0 –left key + }; + + this.buttonMatrix = { + LEFT_BUTTON: 1, // 0001 + RIGHT_BUTTON: 2, // 0010 + REED_SWITCH: 4 // 0100 + }; + + this.onButtonData = function(data) { + console.log('+ onButtonData'); + console.log(data); + var state = new Uint8Array(data); + var message = ''; + + if (state === 0) { + message = 'No buttons are pressed.'; + } + + if (state & this.buttonMatrix.LEFT_BUTTON) { + message += 'Left button is pressed. '; + } + + if (state & this.buttonMatrix.RIGHT_BUTTON) { + message += 'Right button is pressed.'; + } + + if (state & this.buttonMatrix.REED_SWITCH) { + message += 'Reed switch is activated.
'; + } + + this.state = message; + + if (this.$result !== null) + { + this.$result.text(this.state); + } + console.log('ButtonState: ', this.state); + + console.log('- onButtonData'); + }; + + this.startService = function() { + 'use strict'; + if (this.deviceID !== null) { + + console.log('Starting Button Service on ', this.deviceID); + console.log(this.serviceDef); + ble.startNotification(this.deviceID, this.serviceDef.service, this.serviceDef.data, this.onButtonData.bind(this), this.onError); + + } + + this.insertFrame(); + }; + + this.insertFrame = function() { + + var self = this; + console.log('Overloading...'); + // Call the parent displayForm first... + this.superClass_.insertFrame.call(self); + + var detail = this.frameID + '-d'; + var row = $('
', {class: 'mui-row'}); + + $('
', { class: 'mui-col-xs-4 mui--text-accent', text: 'Status:'}).appendTo(row); + + $('
', { class: 'mui-col-xs-8 mui--text-white', id: detail}).appendTo(row); + + this.$id.append(row); + this.$result = $('#'+detail); + + }; + +}; + + +inheritsFrom(BUTTON, CAPABILITY); diff --git a/platforms/android/assets/www/js/standards/capability.js b/platforms/android/assets/www/js/standards/capability.js new file mode 100644 index 0000000..a1914d7 --- /dev/null +++ b/platforms/android/assets/www/js/standards/capability.js @@ -0,0 +1,78 @@ +/** + * + * User: Martin Donnelly + * Date: 2016-05-20 + * Time: 10:32 + * + */ +'use strict'; +var CAPABILITY = function(p) { + this.name = '-CAPABILITY-'; + this.capabilityID = p.capabilityID || null; + this.state = ''; + this.serviceDef = p.service || null; + + this.internalID = null; + this.frameID = null; + this.$id = null; + + this.deviceID = null; + +}; + +CAPABILITY.prototype.setInternalID = function() { + this.internalID = (Math.floor(Math.random() * Number.MAX_SAFE_INTEGER) + 1).toString(36); + this.frameID = 'f-' + this.internalID; + }; + +CAPABILITY.prototype.setDeviceID = function(dID) { + this.deviceID = dID; + }; + +CAPABILITY.prototype.getDeviceID = function() { + return this.deviceID ; + }; + +CAPABILITY.prototype.insertFrame = function() { + + this.setInternalID(); + + console.log('FrameID: ' , this.frameID); + + var title = [this.name, ' - ', this.deviceID].join(' '); + + var frame = $('
', { + class: 'mui-panel', + id: this.frameID}); + + $('
', { class: 'mui-row'}).append($('
', { class: 'mui-col-xs-12 mui--text-title', text: title})).appendTo(frame); + + $('#frames').append(frame); + this.$id = $('#' + this.frameID); + }; + + +CAPABILITY.prototype.inherits = function(a, b) { + var c = function() {}; + c.prototype = b.prototype; + a.superClass_ = b.prototype; + a.prototype = new c; + a.prototype.constructor = a; + }; + +CAPABILITY.prototype.onError = function(e) { + console.error(e); + }; + + + + + +var inheritsFrom = function(a, b) { + var c = function() {}; + c.prototype = b.prototype; + a.superClass_ = b.prototype; + a.prototype = new c; + a.prototype.constructor = a; + a.prototype.superClass_ = b.prototype; + }; diff --git a/platforms/android/assets/www/js/test.js b/platforms/android/assets/www/js/test.js new file mode 100644 index 0000000..7fa5c47 --- /dev/null +++ b/platforms/android/assets/www/js/test.js @@ -0,0 +1,55 @@ +/** + * Created by martin on 2016-05-20. + */ +var DEVICEBASE = function(p) { + + this.controller = p.controller || null; + this.settings = p.settings || {}; + this.data = {}; + this.standards = { + + button: { + service: 'FFE0', + data: 'FFE1' // Bit 2: side key, Bit 1- right key, Bit 0 –left key + }, + heartRate: { + service: '180d', + measurement: '2a37' + } + }; + this.custom = {}; + this.capabilities = []; + this.deviceID = null; + + this.inherits = function(a, b) { + var c = function() {}; + c.prototype = b.prototype; + a.superClass_ = b.prototype; + a.prototype = new c; + a.prototype.constructor = a; + }; + + + this.register = function(c) { + c.registerPage(this); + + }; + + this.bytesToString = function(buffer) { + return String.fromCharCode.apply(null, new Uint8Array(buffer)); + }; + + // ASCII only + this.stringToBytes = function(string) { + var array = new Uint8Array(string.length); + for (var i = 0, l = string.length; i < l; i++) { + array[i] = string.charCodeAt(i); + } + return array.buffer; + }; + + + + + this.register(this.controller); +}; diff --git a/platforms/android/assets/www/libs/bluebird/.bower.json b/platforms/android/assets/www/libs/bluebird/.bower.json new file mode 100644 index 0000000..ec9cb5f --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/.bower.json @@ -0,0 +1,44 @@ +{ + "name": "bluebird", + "version": "3.4.0", + "homepage": "https://github.com/petkaantonov/bluebird", + "authors": [ + "Petka Antonov " + ], + "description": "Bluebird is a full featured promise library with unmatched performance.", + "main": "js/browser/bluebird.js", + "license": "MIT", + "ignore": [ + "**/.*", + "benchmark", + "bower_components", + "./browser", + "node_modules", + "test" + ], + "keywords": [ + "promise", + "performance", + "promises", + "promises-a", + "promises-aplus", + "async", + "await", + "deferred", + "deferreds", + "future", + "flow control", + "dsl", + "fluent interface" + ], + "_release": "3.4.0", + "_resolution": { + "type": "version", + "tag": "v3.4.0", + "commit": "3aeb023d26df1e738e37a162a8f81b36afe1c6b9" + }, + "_source": "https://github.com/petkaantonov/bluebird.git", + "_target": "^3.4.0", + "_originalSource": "bluebird", + "_direct": true +} \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/API.md b/platforms/android/assets/www/libs/bluebird/API.md new file mode 100644 index 0000000..257d52c --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/API.md @@ -0,0 +1 @@ +[http://bluebirdjs.com/docs/api-reference.html](http://bluebirdjs.com/docs/api-reference.html) diff --git a/platforms/android/assets/www/libs/bluebird/CONTRIBUTING.md b/platforms/android/assets/www/libs/bluebird/CONTRIBUTING.md new file mode 100644 index 0000000..136bb7e --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/CONTRIBUTING.md @@ -0,0 +1,9 @@ + +# Questions and issues + +Please see [The Support Page](http://bluebirdjs.com/docs/support.html) +The [github issue tracker](https://github.com/petkaantonov/bluebird/issues) is **_only_** for bug reports and feature requests. + +# Contributing to the library + +Contributions are welcome and appreciated. See the [Contribution Page](http://bluebirdjs.com/docs/contribute.html) on bluebirdjs.com diff --git a/platforms/android/assets/www/libs/bluebird/LICENSE b/platforms/android/assets/www/libs/bluebird/LICENSE new file mode 100644 index 0000000..4182a1e --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2013-2015 Petka Antonov + +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/libs/bluebird/README.md b/platforms/android/assets/www/libs/bluebird/README.md new file mode 100644 index 0000000..3772161 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/README.md @@ -0,0 +1,51 @@ + + Promises/A+ logo + +[![Build Status](https://travis-ci.org/petkaantonov/bluebird.svg?branch=master)](https://travis-ci.org/petkaantonov/bluebird) +[![coverage-98%](http://img.shields.io/badge/coverage-98%-brightgreen.svg?style=flat)](http://petkaantonov.github.io/bluebird/coverage/debug/index.html) + +**Got a question?** Join us on [stackoverflow](http://stackoverflow.com/questions/tagged/bluebird), the [mailing list](https://groups.google.com/forum/#!forum/bluebird-js) or chat on [IRC](https://webchat.freenode.net/?channels=#promises) + +# Introduction + +Bluebird is a fully featured promise library with focus on innovative features and performance + +See the [**bluebird website**](http://bluebirdjs.com/docs/getting-started.html) for further documentation, references and instructions. See the [**API reference**](http://bluebirdjs.com/docs/api-reference.html) here. + +For bluebird 2.x documentation and files, see the [2.x tree](https://github.com/petkaantonov/bluebird/tree/2.x). + +# Questions and issues + +The [github issue tracker](https://github.com/petkaantonov/bluebird/issues) is **_only_** for bug reports and feature requests. Anything else, such as questions for help in using the library, should be posted in [StackOverflow](http://stackoverflow.com/questions/tagged/bluebird) under tags `promise` and `bluebird`. + + + +## Thanks + +Thanks to BrowserStack for providing us with a free account which lets us support old browsers like IE8. + +# License + +The MIT License (MIT) + +Copyright (c) 2013-2016 Petka Antonov + +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/libs/bluebird/bench b/platforms/android/assets/www/libs/bluebird/bench new file mode 100755 index 0000000..cdfc2c0 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/bench @@ -0,0 +1,37 @@ +#!/usr/bin/env bash +./build --release --no-debug +benchmark=$1 +nodepath=${2:-node} +shift 2; +cwd=${PWD} + +trap 'cd "$cwd"' EXIT + +if [ "$benchmark" = "doxbee" ]; then + cd "$cwd/benchmark" + npm install + echo "Doxbee sequential" + $nodepath performance.js --n 10000 --t 1 ./doxbee-sequential/*.js --harmony "$@" + exit 0 +elif [ "$benchmark" = "doxbee-errors" ]; then + cd "$cwd/benchmark" + npm install + echo "Doxbee sequential with 10% errors" + $nodepath performance.js --n 10000 --t 1 --e 0.1 ./doxbee-sequential-errors/*.js --harmony "$@" + exit 0 +elif [ "$benchmark" = "parallel" ]; then + cd "$cwd/benchmark" + npm install + echo "Madeup parallel" + $nodepath performance.js --n 10000 --t 1 --p 25 ./madeup-parallel/*.js --harmony "$@" + exit 0 +elif [ "$benchmark" = "analysis" ]; then + cd "$cwd/benchmark" + npm install + echo "analysis" + $nodepath performance.js --n 10000 --t 1 ./analysis/*.js --harmony "$@" + exit 0 +else + echo "Invalid benchmark name $benchmark" + exit -1 +fi diff --git a/platforms/android/assets/www/libs/bluebird/bower.json b/platforms/android/assets/www/libs/bluebird/bower.json new file mode 100644 index 0000000..6e1565f --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/bower.json @@ -0,0 +1,34 @@ +{ + "name": "bluebird", + "version": "3.4.0", + "homepage": "https://github.com/petkaantonov/bluebird", + "authors": [ + "Petka Antonov " + ], + "description": "Bluebird is a full featured promise library with unmatched performance.", + "main": "js/browser/bluebird.js", + "license": "MIT", + "ignore": [ + "**/.*", + "benchmark", + "bower_components", + "./browser", + "node_modules", + "test" + ], + "keywords": [ + "promise", + "performance", + "promises", + "promises-a", + "promises-aplus", + "async", + "await", + "deferred", + "deferreds", + "future", + "flow control", + "dsl", + "fluent interface" + ] +} diff --git a/platforms/android/assets/www/libs/bluebird/build b/platforms/android/assets/www/libs/bluebird/build new file mode 100755 index 0000000..3d26cbd --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/build @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +node tools/build.js "$@" diff --git a/platforms/android/assets/www/libs/bluebird/changelog.md b/platforms/android/assets/www/libs/bluebird/changelog.md new file mode 100644 index 0000000..73b2eb6 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/changelog.md @@ -0,0 +1 @@ +[http://bluebirdjs.com/docs/changelog.html](http://bluebirdjs.com/docs/changelog.html) diff --git a/platforms/android/assets/www/libs/bluebird/deprecated_apis.md b/platforms/android/assets/www/libs/bluebird/deprecated_apis.md new file mode 100644 index 0000000..30506e5 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/deprecated_apis.md @@ -0,0 +1 @@ +[http://bluebirdjs.com/docs/deprecated-apis.html](http://bluebirdjs.com/docs/deprecated-apis.html) diff --git a/platforms/android/assets/www/libs/bluebird/docs/Gemfile b/platforms/android/assets/www/libs/bluebird/docs/Gemfile new file mode 100644 index 0000000..24e86a5 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/Gemfile @@ -0,0 +1,8 @@ +source "https://rubygems.org" + +gem "jekyll" +gem "jekyll-redirect-from" +gem "sanitize", '4.0.1' +gem "redcarpet" +gem "pygments.rb" +gem 'wdm', '>= 0.1.0' if Gem.win_platform? diff --git a/platforms/android/assets/www/libs/bluebird/docs/README.md b/platforms/android/assets/www/libs/bluebird/docs/README.md new file mode 100644 index 0000000..a4296fd --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/README.md @@ -0,0 +1,5 @@ +Requires ruby and [jekyll](http://jekyllrb.com/). See the gem file for dependencies. + +Change directory to `bluebird/docs` and run `jekyll serve`. The docs will be hosted under `/docs` directory in relation to the web root. Typically something like `http://localhost:4000/docs/` + + diff --git a/platforms/android/assets/www/libs/bluebird/docs/_config.yml b/platforms/android/assets/www/libs/bluebird/docs/_config.yml new file mode 100644 index 0000000..4c19c7e --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/_config.yml @@ -0,0 +1,35 @@ +name: bluebird +description: Bluebird is a fully featured JavaScript promises library with unmatched performance. +url: "http://bluebirdjs.com" +baseurl: "" +title: bluebird +timezone: Helsinki/Finland +highlighter: pygments +exclude: + - Gemfile + - Gemfile.lock + - helpers.rb +defaults: + - scope: + path: docs + type: pages + values: + layout: page +markdown: redcarpet +redcarpet: + extensions: + - fenced_code_blocks +version: 3.4.0 +gems: + - jekyll-redirect-from +destination: ../gh-pages/ +keep_files: + - .git + - .gitignore + - logo.png + - CNAME + - coverage +safe: false +encoding: utf-8 +host: 0.0.0.0 + diff --git a/platforms/android/assets/www/libs/bluebird/docs/_layouts/api.html b/platforms/android/assets/www/libs/bluebird/docs/_layouts/api.html new file mode 100644 index 0000000..3510ca2 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/_layouts/api.html @@ -0,0 +1,9 @@ +--- +layout: default +--- + +
+
+ {{ content }} +
+
diff --git a/platforms/android/assets/www/libs/bluebird/docs/_layouts/default.html b/platforms/android/assets/www/libs/bluebird/docs/_layouts/default.html new file mode 100644 index 0000000..7c7f198 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/_layouts/default.html @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + {% if page.title %}{{ page.title }} | {{ site.title }}{% else %}{{ site.title }}{% endif %} + + + + + + + + + + + +
+ +
+
+ +
+ {% if page.path %} + +
+ {% endif %} + {{ content }} +
+
+
+
+ + + + + + + diff --git a/platforms/android/assets/www/libs/bluebird/docs/_layouts/page.html b/platforms/android/assets/www/libs/bluebird/docs/_layouts/page.html new file mode 100644 index 0000000..74c1a11 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/_layouts/page.html @@ -0,0 +1,14 @@ +--- +layout: default +--- +
+ +
+

{{ page.title }}

+
+ +
+ {{ content }} +
+ +
diff --git a/platforms/android/assets/www/libs/bluebird/docs/_plugins/mdate.rb b/platforms/android/assets/www/libs/bluebird/docs/_plugins/mdate.rb new file mode 100644 index 0000000..94fbca8 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/_plugins/mdate.rb @@ -0,0 +1,19 @@ +module Jekyll + module MyFilters + def file_date(input) + File.mtime(input) + end + + def check_active(page_path, link_type) + if (link_type == "support" and page_path =~ /support/) or + (link_type == "install" and page_path =~ /install/) or + (link_type == "docs") + "active" + else + "" + end + end + end +end + +Liquid::Template.register_filter(Jekyll::MyFilters) diff --git a/platforms/android/assets/www/libs/bluebird/docs/_plugins/plugin.rb b/platforms/android/assets/www/libs/bluebird/docs/_plugins/plugin.rb new file mode 100644 index 0000000..f6210a3 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/_plugins/plugin.rb @@ -0,0 +1,55 @@ +require "redcarpet" +require "pygments" +require_relative "../helpers" + + +class Redcarpet::Render::HTML + def header(title, level) + anchor = Helpers.clean(title) + + return <<-eos + + + #{title} + + eos + end + # Hacks to get markdown working inside html blocks .... + def block_html(html) + html.gsub(/([\d\D]+?)<\/markdown>/) {|_| + extensions = {fenced_code_blocks: true} + renderer = Redcarpet::Markdown.new(WithHighlights, extensions) + renderer.render(Regexp.last_match[1]) + } + end + + def link(link, title, content) + if link == "unfinished-article" + return <<-eos +
+ This article is partially or completely unfinished. + You are welcome to create pull requests + to help completing this article. +
+ eos + elsif link == "." + if content =~ /#\d+/ + url = "https://github.com/petkaantonov/bluebird/issues/" + content[1..-1] + else + url = "/docs/api/" + Helpers.clean(content) + ".html" + end + return "#{content}" + else + return "#{content}" + end + end +end + +class WithHighlights < Redcarpet::Render::HTML + def block_code(code, language) + Pygments.highlight(code, :lexer => language) + end +end diff --git a/platforms/android/assets/www/libs/bluebird/docs/css/main.css b/platforms/android/assets/www/libs/bluebird/docs/css/main.css new file mode 100644 index 0000000..60bdce7 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/css/main.css @@ -0,0 +1,181 @@ +body { + font-size: 16px; +} + +body > .container { + padding-bottom: 50px; +} + +.navbar-bluebird { + font-family: 'Raleway', sans-serif; + font-size: 18px; + margin-top: 50px; + text-transform:uppercase; +} + +.nav { + font-family: 'Raleway', sans-serif; +} + +.nav.bb-nav > li > a{ + transition: all 0.3s ease-in-out; + border-bottom: 1px solid rgba(0,0,0,0); +} +.nav.bb-nav > li > a:focus, .nav.bb-nav > li > a:hover, +.nav.bb-nav > li.active > a { + background-color:initial; + border-bottom:1px solid #BE7306; +} + +.nav a { + color: #BE7306; +} + +.nav.left-nav li a { + padding: 2px 0px; + font-size: 14px; + font-family: 'Raleway', sans-serif; +} + +.nav.left-nav li a:focus, .nav.left-nav li a:hover { + background: none; + text-decoration: underline; +} + +.navbar-bluebird li { + text-align:center; +} +h1,h2,h3,h4,h5,h6{ + font-family: 'Raleway', sans-serif; + /*color:#5275B4;*/ + color: #1B4288; +} +.api-code-section h2, code, pre { + font-family: 'Consolas', 'Lucida Console', 'Courier New', 'monospace' +} +body { + margin-top:10px; +} + +.icon-bar { + background-color:#5275B4; +} +.promises-showroom .arrow { + text-align: center; + margin-top: 100px; + color:#EC9313; +} + +pre{ + background-color: initial; + border: none; + margin:0px; + padding:0px; +} +.promises-showroom .hljs{ + border-radius: 6px; + padding-left: 30px; + padding-bottom: 15px; +} +.take-action{ + position:relative; + min-height:300px; + +} + +.take-action .cloud-bg{ + width: 100%; + height: 300px; + border: none; +} + +.take-action .action-buttons{ + position:absolute; + top:50%; + text-align:center; + width:100%; +} +.btn-bb { + font-family: 'Raleway', sans-serif; + color: white; +} +.btn-beak{ + background-color: #EC9313; + border-bottom: 4px solid #BE7306; +} +.btn-wings { + background-color: #265584; + border-bottom: 4px solid #1A3A59; +} +.btn-bb:hover{ + color:white; +} +.undo-margin{ + margin-left:-15px; +} + +.main-line{ + font-family: 'Raleway', sans-serif; + margin-bottom: 59px; + margin-top: -74px; + font-size: 20px; + color:white; +} + +.tagline { + font-family: 'Raleway', sans-serif; + font-size:26px; + color:#5275B4; + font-weight:200; +} + +.nav-child { + margin-left:20px; +} +.title:hover{ + text-decoration:none; +} + +.header-anchor { + opacity: 0; + + -webkit-transition: opacity 0.2s ease-in-out 0.1s; + -moz-transition: opacity 0.2s ease-in-out 0.1s; + -ms-transition: opacity 0.2s ease-in-out 0.1s; + outline: none; +} + +.header-anchor:active, .header-anchor:focus { + outline: none; +} + +h1:hover .header-anchor, +h2:hover .header-anchor, +h3:hover .header-anchor, +h4:hover .header-anchor, +h5:hover .header-anchor, +h6:hover .header-anchor { + opacity: 1; +} + +.api-reference-menu { + -moz-column-count: 2; + -webkit-column-count: 2; + columns: 2; + margin-bottom: 50px; +} + +.post-info { + float: right; +} + +.info-box { + margin-top: 20px; + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; + padding: 15px; + margin-bottom: 20px; + border: 1px dashed #8a6d3b; + border-radius: 4px; +} diff --git a/platforms/android/assets/www/libs/bluebird/docs/css/mono-blue.css b/platforms/android/assets/www/libs/bluebird/docs/css/mono-blue.css new file mode 100644 index 0000000..6b3bf60 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/css/mono-blue.css @@ -0,0 +1,80 @@ +.highlight { + display: block; + overflow-x: auto; + padding: 0.5em; + margin: 15px 0px; + background: #eaeef3; + -webkit-text-size-adjust: none; + color: #00193a; +} + +code { + color: #00193a; + background: #eaeef3; +} + +a code { + color: #337AB7; +} + +.highlight .hll { background-color: #ffffcc } +.highlight .c { color: #738191; font-style: italic } /* Comment */ +.highlight .err { border: 1px solid #FF0000 } /* Error */ +.highlight .k { color: #4c81c9; font-weight: bold } /* Keyword */ +.highlight .o { color: #666666 } /* Operator */ +.highlight .cm { color: #738191; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #BC7A00 } /* Comment.Preproc */ +.highlight .c1 { color: #738191; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #738191; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #808080 } /* Generic.Output */ +.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0040D0 } /* Generic.Traceback */ +.highlight .kc { color: #4c81c9; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #4c81c9; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #4c81c9; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #4c81c9 } /* Keyword.Pseudo */ +.highlight .kr { color: #4c81c9; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #B00040 } /* Keyword.Type */ +.highlight .m { color: #666666 } /* Literal.Number */ +.highlight .s { color: #BE7306;} /* Literal.String */ +.highlight .na { color: #7D9029 } /* Name.Attribute */ +.highlight .nb { color: #4c81c9 } /* Name.Builtin */ +.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */ +.highlight .no { color: #880000 } /* Name.Constant */ +.highlight .nd { color: #AA22FF } /* Name.Decorator */ +.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #0000FF } /* Name.Function */ +.highlight .nl { color: #A0A000 } /* Name.Label */ +.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #4c81c9; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #19177C } /* Name.Variable */ +.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mf { color: #666666 } /* Literal.Number.Float */ +.highlight .mh { color: #666666 } /* Literal.Number.Hex */ +.highlight .mi { color: #666666 } /* Literal.Number.Integer */ +.highlight .mo { color: #666666 } /* Literal.Number.Oct */ +.highlight .sb { color: #BE7306 } /* Literal.String.Backtick */ +.highlight .sc { color: #BE7306 } /* Literal.String.Char */ +.highlight .sd { color: #BE7306; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #BE7306 } /* Literal.String.Double */ +.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #BE7306 } /* Literal.String.Heredoc */ +.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ +.highlight .sx { color: #BE7306 } /* Literal.String.Other */ +.highlight .sr { color: #BB6688 } /* Literal.String.Regex */ +.highlight .s1 { color: #BE7306 } /* Literal.String.Single */ +.highlight .ss { color: #19177C } /* Literal.String.Symbol */ +.highlight .bp { color: #4c81c9 } /* Name.Builtin.Pseudo */ +.highlight .vc { color: #19177C } /* Name.Variable.Class */ +.highlight .vg { color: #19177C } /* Name.Variable.Global */ +.highlight .vi { color: #19177C } /* Name.Variable.Instance */ +.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */ diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/anti-patterns.md b/platforms/android/assets/www/libs/bluebird/docs/docs/anti-patterns.md new file mode 100644 index 0000000..73ba887 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/anti-patterns.md @@ -0,0 +1,172 @@ +--- +id: anti-patterns +title: Anti-patterns +--- + +This page will contain common promise anti-patterns that are exercised in the wild. + + +- [The explicit construction anti-pattern](#the-explicit-construction-anti-pattern) +- [The `.then(success, fail)` anti-pattern](#the-.then) + +##The Explicit Construction Anti-Pattern + +This is the most common anti-pattern. It is easy to fall into this when you don't really understand promises and think of them as glorified event emitters or callback utility. It's also sometimes called the promise constructor anti-pattern. Let's recap: promises are about making asynchronous code retain most of the lost properties of synchronous code such as flat indentation and one exception channel. This pattern is also called the deferred anti-pattern. + +In the explicit construction anti-pattern, promise objects are created for no reason, complicating code. + +First example is creating deferred object when you already have a promise or thenable: + +```js +//Code copyright by Twisternha http://stackoverflow.com/a/19486699/995876 CC BY-SA 2.5 +myApp.factory('Configurations', function (Restangular, MotorRestangular, $q) { + var getConfigurations = function () { + var deferred = $q.defer(); + + MotorRestangular.all('Motors').getList().then(function (Motors) { + //Group by Config + var g = _.groupBy(Motors, 'configuration'); + //Map values + var mapped = _.map(g, function (m) { + return { + id: m[0].configuration, + configuration: m[0].configuration, + sizes: _.map(m, function (a) { + return a.sizeMm + }) + } + }); + deferred.resolve(mapped); + }); + return deferred.promise; + }; + + return { + config: getConfigurations() + } + +}); +``` + +This superfluous wrapping is also dangerous, any kind of errors and rejections are swallowed and not propagated to the caller of this function. + +Instead of using the Deferred anti-pattern, the code should simply return the promise it already has and propagate values using `return`: + +```js +myApp.factory('Configurations', function (Restangular, MotorRestangular, $q) { + var getConfigurations = function () { + //Just return the promise we already have! + return MotorRestangular.all('Motors').getList().then(function (Motors) { + //Group by Cofig + var g = _.groupBy(Motors, 'configuration'); + //Return the mapped array as the value of this promise + return _.map(g, function (m) { + return { + id: m[0].configuration, + configuration: m[0].configuration, + sizes: _.map(m, function (a) { + return a.sizeMm + }) + } + }); + }); + }; + + return { + config: getConfigurations() + } + +}); +``` + +Not only is the code shorter but more importantly, if there is any error it will propagate properly to the final consumer. + +Second example is creating a function that does nothing but manually wrap a callback API and doing a poor job at that: + +```js +function applicationFunction(arg1) { + return new Promise(function(resolve, reject){ //Or Q.defer() in Q + libraryFunction(arg1, function (err, value) { + if (err) { + reject(err); + } else { + resolve(value); + } + }); +} +``` + +This is reinventing the square wheel because any callback API wrapping can and should be done immediately using the promise library's promisification methods: + +```js +var applicationFunction = Promise.promisify(libraryFunction); +``` + +The generic promisification is likely to be faster because it can use internals directly but also handles edge cases like `libraryFunction` throwing synchronously or using multiple success values. + + +**So when should deferred be used?** + +Well simply, when you have to. + +You might have to use a deferred object when wrapping a callback API that doesn't follow the standard convention. Like `setTimeout`: + +```js +//setTimeout that returns a promise +function delay(ms) { + var deferred = Promise.defer(); // warning, defer is deprecated, use the promise constructor + setTimeout(function(){ + deferred.fulfill(); + }, ms); + return deferred.promise; +} +``` + +Such wrappers should be rare, if they're common for the reason that the promise library cannot generically promisify them, you should file an issue. + +If you cannot do static promisification (promisify and promisifyAll perform too slowly to use at runtime), you may use [Promise.fromCallback](.). + +Also see [this StackOverflow question](http://stackoverflow.com/questions/23803743/what-is-the-deferred-antipattern-and-how-do-i-avoid-it) for more examples and a debate around it. + +##The `.then(success, fail)` anti-pattern + +*Almost* a sure sign of using promises as glorified callbacks. Instead of `doThat(function(err, success))` you do `doThat().then(success, err)` and rationalize to yourself that at least the code is "less coupled" or something. + +The `.then` signature is mostly about interop, there is *almost* never a reason to use `.then(success, fail)` in application code. It is even awkward to express it in the sync parallel: + +```js +var t0; +try { + t0 = doThat(); +} +catch(e) { + +} +//deal with t0 here and waste the try-catch +var stuff = JSON.parse(t0); +``` + +It is more likely that you would write this instead in the sync world: + +```js +try { + var stuff = JSON.parse(doThat()); +} +catch(e) { + +} +``` + +So please write the same when using promises too: + +```js +doThat() +.then(function(v) { + return JSON.parse(v); +}) +.catch(function(e) { + +}); +``` + +`.catch` is specified for built-in Javascript promises and is "sugar" for `.then(null, function(){})`. Since the way errors work in promises is almost the entire point (and the only thing jQuery never got right, even if it used `.pipe` as a `.then`), I really hope the implementation you are using provides this method for readability. diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api-reference.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api-reference.md new file mode 100644 index 0000000..ff62a77 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api-reference.md @@ -0,0 +1,95 @@ +--- +id: api-reference +title: API Reference +redirect_from: "/docs/api/index.html" +--- + + +
+ + +- [Core](api/core.html) + - [new Promise](api/new-promise.html) + - [.then](api/then.html) + - [.spread](api/spread.html) + - [.catch](api/catch.html) + - [.error](api/error.html) + - [.finally](api/finally.html) + - [.bind](api/bind.html) + - [Promise.join](api/promise.join.html) + - [Promise.try](api/promise.try.html) + - [Promise.method](api/promise.method.html) + - [Promise.resolve](api/promise.resolve.html) + - [Promise.reject](api/promise.reject.html) +- [Synchronous inspection](api/synchronous-inspection.html) + - [PromiseInspection](api/promiseinspection.html) + - [.isFulfilled](api/isfulfilled.html) + - [.isRejected](api/isrejected.html) + - [.isPending](api/ispending.html) + - [.isCancelled](api/iscancelled.html) + - [.value](api/value.html) + - [.reason](api/reason.html) +- [Collections](api/collections.html) + - [Promise.all](api/promise.all.html) + - [Promise.props](api/promise.props.html) + - [Promise.any](api/promise.any.html) + - [Promise.some](api/promise.some.html) + - [Promise.map](api/promise.map.html) + - [Promise.reduce](api/promise.reduce.html) + - [Promise.filter](api/promise.filter.html) + - [Promise.each](api/promise.each.html) + - [Promise.mapSeries](api/promise.mapseries.html) + - [Promise.race](api/promise.race.html) + - [.all](api/all.html) + - [.props](api/props.html) + - [.any](api/any.html) + - [.some](api/some.html) + - [.map](api/map.html) + - [.reduce](api/reduce.html) + - [.filter](api/filter.html) + - [.each](api/each.html) + - [.mapSeries](api/mapseries.html) +- [Resource management](api/resource-management.html) + - [Promise.using](api/promise.using.html) + - [.disposer](api/disposer.html) +- [Promisification](api/promisification.html) + - [Promise.promisify](api/promise.promisify.html) + - [Promise.promisifyAll](api/promise.promisifyall.html) + - [Promise.fromCallback](api/promise.fromcallback.html) + - [.asCallback](api/ascallback.html) +- [Timers](api/timers.html) + - [.delay](api/delay.html) + - [.timeout](api/timeout.html) +- [Cancellation](api/cancellation.html) + - [.cancel](api/cancel.html) +- [Generators](api/generators.html) + - [Promise.coroutine](api/promise.coroutine.html) + - [Promise.coroutine.addYieldHandler](api/promise.coroutine.addyieldhandler.html) +- [Utility](api/utility.html) + - [.tap](api/tap.html) + - [.call](api/call.html) + - [.get](api/get.html) + - [.return](api/return.html) + - [.throw](api/throw.html) + - [.catchReturn](api/catchreturn.html) + - [.catchThrow](api/catchthrow.html) + - [.reflect](api/reflect.html) + - [Promise.noConflict](api/promise.noconflict.html) + - [Promise.setScheduler](api/promise.setscheduler.html) +- [Built-in error types](api/built-in-error-types.html) + - [OperationalError](api/operationalerror.html) + - [TimeoutError](api/timeouterror.html) + - [CancellationError](api/cancellationerror.html) + - [AggregateError](api/aggregateerror.html) +- [Configuration](api/error-management-configuration.html) + - [Global rejection events](api/error-management-configuration.html#global-rejection-events) + - [Local rejection events](api/promise.onpossiblyunhandledrejection.html) + - [Promise.config](api/promise.config.html) + - [.suppressUnhandledRejections](api/suppressunhandledrejections.html) + - [.done](api/done.html) +- [Progression migration](api/progression-migration.html) +- [Deferred migration](api/deferred-migration.html) +- [Environment variables](api/environment-variables.html) + + +
diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/aggregateerror.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/aggregateerror.md new file mode 100644 index 0000000..020263a --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/aggregateerror.md @@ -0,0 +1,49 @@ +--- +layout: api +id: aggregateerror +title: AggregateError +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##AggregateError + +```js +new AggregateError() extends Array -> AggregateError +``` + + +A collection of errors. `AggregateError` is an array-like object, with numeric indices and a `.length` property. It supports all generic array methods such as `.forEach` directly. + +`AggregateError`s are caught in [`.error`](.) handlers, even if the contained errors are not operational. + +[Promise.some](.) and [Promise.any](.) use `AggregateError` as rejection reason when they fail. + + +Example: + +```js +//Assumes AggregateError has been made global +var err = new AggregateError(); +err.push(new Error("first error")); +err.push(new Error("second error")); +throw err; +``` + +
+
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/all.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/all.md new file mode 100644 index 0000000..c69fec5 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/all.md @@ -0,0 +1,31 @@ +--- +layout: api +id: all +title: .all +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.all + +```js +.all() -> Promise +``` + +Same as [Promise.all(this)](.). +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/any.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/any.md new file mode 100644 index 0000000..6c99ee1 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/any.md @@ -0,0 +1,31 @@ +--- +layout: api +id: any +title: .any +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.any + +```js +.any() -> Promise +``` + +Same as [Promise.any(this)](.). +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/ascallback.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/ascallback.md new file mode 100644 index 0000000..4805a04 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/ascallback.md @@ -0,0 +1,114 @@ +--- +layout: api +id: ascallback +title: .asCallback +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.asCallback + +```js +.asCallback( + [function(any error, any value) callback], + [Object {spread: boolean=false} options] +) -> this +``` +```js +.nodeify( + [function(any error, any value) callback], + [Object {spread: boolean=false} options] +) -> this +``` + +Register a node-style callback on this promise. When this promise is either fulfilled or rejected, the node callback will be called back with the node.js convention where error reason is the first argument and success value is the second argument. The error argument will be `null` in case of success. + +Returns back this promise instead of creating a new one. If the `callback` argument is not a function, this method does not do anything. + +This can be used to create APIs that both accept node-style callbacks and return promises: + +```js +function getDataFor(input, callback) { + return dataFromDataBase(input).asCallback(callback); +} +``` + +The above function can then make everyone happy. + +Promises: + +```js +getDataFor("me").then(function(dataForMe) { + console.log(dataForMe); +}); +``` + +Normal callbacks: + +```js +getDataFor("me", function(err, dataForMe) { + if( err ) { + console.error( err ); + } + console.log(dataForMe); +}); +``` + +Promises can be rejected with falsy values (or no value at all, equal to rejecting with `undefined`), however `.asCallback` will call the callback with an `Error` object if the promise's rejection reason is a falsy value. You can retrieve the original falsy value from the error's `.cause` property. + +Example: + +```js +Promise.reject(null).asCallback(function(err, result) { + // If is executed + if (err) { + // Logs 'null' + console.log(err.cause); + } +}); +``` + +There is no effect on performance if the user doesn't actually pass a node-style callback function. + +####Option: spread + +Some nodebacks expect more than 1 success value but there is no mapping for this in the promise world. You may specify the option `spread` to call the nodeback with multiple values when the fulfillment value is an array: + +```js +Promise.resolve([1,2,3]).asCallback(function(err, result) { + // err == null + // result is the array [1,2,3] +}); + +Promise.resolve([1,2,3]).asCallback(function(err, a, b, c) { + // err == null + // a == 1 + // b == 2 + // c == 3 +}, {spread: true}); + +Promise.resolve(123).asCallback(function(err, a, b, c) { + // err == null + // a == 123 + // b == undefined + // c == undefined +}, {spread: true}); +``` + +
+
+ +
+ + diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/bind.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/bind.md new file mode 100644 index 0000000..240f023 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/bind.md @@ -0,0 +1,31 @@ +--- +layout: api +id: bind +title: .bind +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.bind + +```js +.bind(any|Promise thisArg) -> BoundPromise +``` + +Same as calling [Promise.bind(thisArg, thisPromise)](.). +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/built-in-error-types.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/built-in-error-types.md new file mode 100644 index 0000000..226ed44 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/built-in-error-types.md @@ -0,0 +1,31 @@ +--- +layout: api +id: built-in-error-types +title: Built-in error types +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Built-in error types + +Bluebird includes a few built-in error types for common usage. All error types have the same identity across different copies of bluebird +module so that pattern matching works in [`.catch`](.). All error types have a constructor taking a message string as their first argument, with that message +becoming the `.message` property of the error object. + +By default the error types need to be referenced from the Promise constructor, e.g. to get a reference to [TimeoutError](.), do `var TimeoutError = Promise.TimeoutError`. However, for convenience you will probably want to just make the references global. +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/call.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/call.md new file mode 100644 index 0000000..1740799 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/call.md @@ -0,0 +1,101 @@ +--- +layout: api +id: call +title: .call +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.call + +```js +.call( + String methodName, + [any args...] +) +``` + +This is a convenience method for doing: + +```js +promise.then(function(obj) { + return obj[methodName].call(obj, arg...); +}); +``` + +For example ([`some` is a built-in array method](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/some)): + +```js +var Promise = require("bluebird"); +var fs = Promise.promisifyAll(require("fs")); +var path = require("path"); +var thisPath = process.argv[2] || "."; +var now = Date.now(); + +fs.readdirAsync(thisPath) + .map(function(fileName) { + return fs.statAsync(path.join(thisPath, fileName)); + }) + .call("some", function(stat) { + return (now - new Date(stat.mtime)) < 10000; + }) + .then(function(someFilesHaveBeenModifiedLessThanTenSecondsAgo) { + console.log(someFilesHaveBeenModifiedLessThanTenSecondsAgo) ; + }); +``` + +Chaining lo-dash or underscore methods (Copy-pasteable example): + +```js +var Promise = require("bluebird"); +var pmap = Promise.map; +var props = Promise.props; +var _ = require("lodash"); +var fs = Promise.promisifyAll(require("fs")); + +function getTotalSize(paths) { + return pmap(paths, function(path) { + return fs.statAsync(path).get("size"); + }).reduce(function(a, b) { + return a + b; + }, 0); +} + +fs.readdirAsync(".").then(_) + .call("groupBy", function(fileName) { + return fileName.charAt(0); + }) + .call("map", function(fileNames, firstCh) { + return props({ + firstCh: firstCh, + count: fileNames.length, + totalSize: getTotalSize(fileNames) + }); + }) + // Since the currently wrapped array contains promises we need to unwrap it and call .all() before continuing the chain + // If the currently wrapped thing was an object with properties that might be promises, we would call .props() instead + .call("value").all().then(_) + .call("sortBy", "count") + .call("reverse") + .call("map", function(data) { + return data.count + " total files beginning with " + data.firstCh + " with total size of " + data.totalSize + " bytes"; + }) + .call("join", "\n") + .then(console.log) +``` +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/cancel.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/cancel.md new file mode 100644 index 0000000..31ee451 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/cancel.md @@ -0,0 +1,33 @@ +--- +layout: api +id: cancel +title: .cancel +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.cancel + +```js +.cancel() -> undefined +``` + +Cancel this promise. Will not do anything if this promise is already settled or if the [Cancellation](.) feature has not been enabled. See [Cancellation](.) for how to use cancellation. + +
+
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/cancellation.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/cancellation.md new file mode 100644 index 0000000..963c530 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/cancellation.md @@ -0,0 +1,112 @@ +--- +layout: api +id: cancellation +title: Cancellation +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Cancellation + +Cancellation has been redesigned for bluebird 3.x, any code that relies on 2.x cancellation semantics won't work in 3.x. + +The cancellation feature is **by default turned off**, you can enable it using [Promise.config](.). + +The new cancellation has "don't care" semantics while the old cancellation had abort semantics. Cancelling a promise simply means that its handler callbacks will not be called. + +The advantages of the new cancellation compared to the old cancellation are: + +- [.cancel()](.) is synchronous. +- no setup code required to make cancellation work +- composes with other bluebird features, like [Promise.all](.). +- [reasonable semantics for multiple consumer cancellation](#what-about-promises-that-have-multiple-consumers) + +As an optimization, the cancellation signal propagates upwards the promise chain so that an ongoing operation e.g. network request can be aborted. However, *not* aborting the network request still doesn't make any operational difference as the callbacks are still not called either way. + +You may register an optional cancellation hook at a root promise by using the `onCancel` argument that is passed to the executor function when cancellation is enabled: + +```js +function makeCancellableRequest(url) { + return new Promise(function(resolve, reject, onCancel) { + var xhr = new XMLHttpRequest(); + xhr.on("load", resolve); + xhr.on("error", reject); + xhr.open("GET", url, true); + xhr.send(null); + // Note the onCancel argument only exists if cancellation has been enabled! + onCancel(function() { + xhr.abort(); + }); + }); +} +``` + +Note that the `onCancel` hook is really an optional disconnected optimization, there is no real requirement to register any cancellation hooks for cancellation to work. As such, any errors that may occur while inside the `onCancel` callback are not caught and turned into rejections. + +Example: + +```js +var searchPromise = Promise.resolve(); // Dummy promise to avoid null check. +document.querySelector("#search-input").addEventListener("input", function() { + // The handlers of the previous request must not be called + searchPromise.cancel(); + var url = "/search?term=" + encodeURIComponent(this.value.trim()); + showSpinner(); + searchPromise = makeCancellableRequest(url) + .then(function(results) { + return transformData(results); + }) + .then(function(transformedData) { + document.querySelector("#search-results").innerHTML = transformedData; + }) + .catch(function(e) { + document.querySelector("#search-results").innerHTML = renderErrorBox(e); + }) + .finally(function() { + // This check is necessary because `.finally` handlers are always called. + if (!searchPromise.isCancelled()) { + hideSpinner(); + } + }); +}); + +``` + +As shown in the example the handlers registered with `.finally` are called even if the promise is cancelled. Another such exception is [.reflect()](.). No other types of handlers will be called in case of cancellation. This means that in `.then(onSuccess, onFailure)` neither `onSuccess` or `onFailure` handler is called. This is similar to how [`Generator#return`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator/return) works - only active `finally` blocks are executed and then the generator exits. + +###What about promises that have multiple consumers? + +It is often said that promises cannot be cancellable because they can have multiple consumers. + +For instance: + +```js +var result = makeCancellableRequest(...); + +var firstConsumer = result.then(...); +var secondConsumer = result.then(...); +``` + +Even though in practice most users of promises will never have any need to take advantage of the fact that you can attach multiple consumers to a promise, it is nevertheless possible. The problem: "what should happen if [.cancel()](.) is called on `firstConsumer`?" Propagating the cancellation signal (and therefore making it abort the request) would be very bad as the second consumer might still be interested in the result despite the first consumer's disinterest. + +What actually happens is that `result` keeps track of how many consumers it has, in this case 2, and only if all the consumers signal cancel will the request be aborted. However, as far as `firstConsumer` can tell, the promise was successfully cancelled and its handlers will not be called. + +Note that it is an error to consume an already cancelled promise, doing such a thing will give you a promise that is rejected with `new CancellationError("late cancellation observer")` as the rejection reason. + +
+
+ +
+ + diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/cancellationerror.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/cancellationerror.md new file mode 100644 index 0000000..917f9ca --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/cancellationerror.md @@ -0,0 +1,32 @@ +--- +layout: api +id: cancellationerror +title: CancellationError +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##CancellationError + +```js +new CancellationError(String message) -> CancellationError +``` + + +Signals that an operation has been aborted or cancelled. The default reason used by [`.cancel`](.). +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/catch.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/catch.md new file mode 100644 index 0000000..2fdd3ab --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/catch.md @@ -0,0 +1,227 @@ +--- +layout: api +id: catch +title: .catch +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.catch + +`.catch` is a convenience method for handling errors in promise chains. +It comes in two variants + - A catch-all variant similar to the synchronous `catch(e) {` block. This variant is compatible with native promises. + - A filtered variant (like other non-JS languages typically have) that lets you only handle specific errors. **This variant is usually preferable and is significantly safer**. + +### A note on promise exception handling. + +Promise exception handling mirrors native exception handling in JavaScript. A synchronous function `throw`ing is similar to a promise rejecting. Here is an example to illustrate it: + +```js +function getItems(parma) { + try { + var items = getItemsSync(); + if(!items) throw new InvalidItemsError(); + } catch(e) { + // can address the error here, either from getItemsSync returning a falsey value or throwing itself + throw e; // need to re-throw the error unless I want it to be considered handled. + } + return process(items); +} +``` + +Similarly, with promises: + +```js +function getItems(param) { + return getItemsAsync().then(items => { + if(!items) throw new InvalidItemsError(); + return items; + }).catch(e => { + // can address the error here and recover from it, from getItemsAsync rejects or returns a falsey value + throw e; // Need to rethrow unless we actually recovered, just like in the synchronous version + }).then(process); +} +``` + +### Catch-all + +```js +.catch(function(any error) handler) -> Promise +``` +```js +.caught(function(any error) handler) -> Promise +``` + +This is a catch-all exception handler, shortcut for calling [`.then(null, handler)`](.) on this promise. Any exception happening in a `.then`-chain will propagate to nearest `.catch` handler. + +*For compatibility with earlier ECMAScript versions, an alias `.caught` is provided for [`.catch`](.).* + +### Filtered Catch + +```js +.catch( + class ErrorClass|function(any error)|Object predicate..., + function(any error) handler +) -> Promise +``` +```js +.caught( + class ErrorClass|function(any error)|Object predicate..., + function(any error) handler +) -> Promise +``` +This is an extension to [`.catch`](.) to work more like catch-clauses in languages like Java or C#. Instead of manually checking `instanceof` or `.name === "SomeError"`, you may specify a number of error constructors which are eligible for this catch handler. The catch handler that is first met that has eligible constructors specified, is the one that will be called. + +Example: + +```js +somePromise.then(function() { + return a.b.c.d(); +}).catch(TypeError, function(e) { + //If it is a TypeError, will end up here because + //it is a type error to reference property of undefined +}).catch(ReferenceError, function(e) { + //Will end up here if a was never declared at all +}).catch(function(e) { + //Generic catch-the rest, error wasn't TypeError nor + //ReferenceError +}); + ``` + +You may also add multiple filters for a catch handler: + +```js +somePromise.then(function() { + return a.b.c.d(); +}).catch(TypeError, ReferenceError, function(e) { + //Will end up here on programmer error +}).catch(NetworkError, TimeoutError, function(e) { + //Will end up here on expected everyday network errors +}).catch(function(e) { + //Catch any unexpected errors +}); +``` + +For a parameter to be considered a type of error that you want to filter, you need the constructor to have its `.prototype` property be `instanceof Error`. + +Such a constructor can be minimally created like so: + +```js +function MyCustomError() {} +MyCustomError.prototype = Object.create(Error.prototype); +``` + +Using it: + +```js +Promise.resolve().then(function() { + throw new MyCustomError(); +}).catch(MyCustomError, function(e) { + //will end up here now +}); +``` + +However if you want stack traces and cleaner string output, then you should do: + +*in Node.js and other V8 environments, with support for `Error.captureStackTrace`* + +```js +function MyCustomError(message) { + this.message = message; + this.name = "MyCustomError"; + Error.captureStackTrace(this, MyCustomError); +} +MyCustomError.prototype = Object.create(Error.prototype); +MyCustomError.prototype.constructor = MyCustomError; +``` + +Using CoffeeScript's `class` for the same: + +```coffee +class MyCustomError extends Error + constructor: (@message) -> + @name = "MyCustomError" + Error.captureStackTrace(this, MyCustomError) +``` + +This method also supports predicate-based filters. If you pass a +predicate function instead of an error constructor, the predicate will receive +the error as an argument. The return result of the predicate will be used +determine whether the error handler should be called. + +Predicates should allow for very fine grained control over caught errors: +pattern matching, error-type sets with set operations and many other techniques +can be implemented on top of them. + +Example of using a predicate-based filter: + +```js +var Promise = require("bluebird"); +var request = Promise.promisify(require("request")); + +function ClientError(e) { + return e.code >= 400 && e.code < 500; +} + +request("http://www.google.com").then(function(contents) { + console.log(contents); +}).catch(ClientError, function(e) { + //A client error like 400 Bad Request happened +}); +``` + +Predicate functions that only check properties have a handy shorthand. In place of a predicate function, you can pass an object, and its properties will be checked against the error object for a match: + +```js +fs.readFileAsync(...) + .then(...) + .catch({code: 'ENOENT'}, function(e) { + console.log("file not found: " + e.path); + }); +``` + +The object predicate passed to `.catch` in the above code (`{code: 'ENOENT'}`) is shorthand for a predicate function `function predicate(e) { return isObject(e) && e.code == 'ENOENT' }`, I.E. loose equality is used. + +*For compatibility with earlier ECMAScript version, an alias `.caught` is provided for [`.catch`](.).* +
+ +By not returning a rejected value or `throw`ing from a catch, you "recover from failure" and continue the chain: + +```js +Promise.reject(Error('fail!')) + .catch(function(e) { + // fallback with "recover from failure" + return Promise.resolve('success!'); // promise or value + }) + .then(function(result) { + console.log(result); // will print "success!" + }); +``` + +This is exactly like the synchronous code: + +```js +var result; +try { + throw Error('fail'); +} catch(e) { + result = 'success!'; +} +console.log(result); +``` + +
+ + diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/catchreturn.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/catchreturn.md new file mode 100644 index 0000000..c9b2ca8 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/catchreturn.md @@ -0,0 +1,43 @@ +--- +layout: api +id: catchreturn +title: .catchReturn +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.catchReturn + +```js +.catchReturn( + [class ErrorClass|function(any error) predicate], + any value +) -> Promise +``` + +Convenience method for: + +```js +.catch(function() { + return value; +}); +``` +You may optionally prepend one predicate function or ErrorClass to pattern match the error (the generic [.catch](.) methods accepts multiple) + +Same limitations regarding to the binding time of `value` to apply as with [`.return`](.). +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/catchthrow.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/catchthrow.md new file mode 100644 index 0000000..f51df20 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/catchthrow.md @@ -0,0 +1,43 @@ +--- +layout: api +id: catchthrow +title: .catchThrow +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.catchThrow + +```js +.catchThrow( + [class ErrorClass|function(any error) predicate], + any reason +) -> Promise +``` + +Convenience method for: + +```js +.catch(function() { + throw reason; +}); +``` +You may optionally prepend one predicate function or ErrorClass to pattern match the error (the generic [.catch](.) methods accepts multiple) + +Same limitations regarding to the binding time of `reason` to apply as with [`.return`](.). +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/collections.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/collections.md new file mode 100644 index 0000000..64044c3 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/collections.md @@ -0,0 +1,32 @@ +--- +layout: api +id: collections +title: Collections +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Collections + +Methods of `Promise` instances and core static methods of the Promise class to deal with collections of promises or mixed promises and values. + +All collection methods have a static equivalent on the Promise object, e.g. `somePromise.map(...)...` is same as `Promise.map(somePromise, ...)...`, +`somePromise.all` is same as [`Promise.all`](.) and so on. + +None of the collection methods modify the original input. Holes in arrays are treated as if they were defined with the value `undefined`. +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/core.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/core.md new file mode 100644 index 0000000..5244177 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/core.md @@ -0,0 +1,27 @@ +--- +layout: api +id: core +title: Core +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Core + +Core methods of `Promise` instances and core static methods of the Promise class. +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/deferred-migration.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/deferred-migration.md new file mode 100644 index 0000000..fa06943 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/deferred-migration.md @@ -0,0 +1,44 @@ +--- +layout: api +id: deferred-migration +title: Deferred migration +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Deferred migration + +Deferreds are deprecated in favor of the promise constructor. If you need deferreds for some reason, you can create them trivially using the constructor: + +```js +function defer() { + var resolve, reject; + var promise = new Promise(function() { + resolve = arguments[0]; + reject = arguments[1]; + }); + return { + resolve: resolve, + reject: reject, + promise: promise + }; +} +``` + +For old code that still uses deferred objects, see [the deprecated API docs ](/bluebird/web/docs/deprecated_apis.html#promise-resolution). +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/delay.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/delay.md new file mode 100644 index 0000000..18136f5 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/delay.md @@ -0,0 +1,31 @@ +--- +layout: api +id: delay +title: .delay +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.delay + +```js +.delay(int ms) -> Promise +``` + +Same as calling [Promise.delay(ms, this)](.). +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/disposer.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/disposer.md new file mode 100644 index 0000000..c4f8f1b --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/disposer.md @@ -0,0 +1,158 @@ +--- +layout: api +id: disposer +title: .disposer +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.disposer + +```js +.disposer(function(any resource, Promise usingOutcomePromise) disposer) -> Disposer +``` + +A meta method used to specify the disposer method that cleans up a resource when using `Promise.using`. + +Returns a Disposer object which encapsulates both the resource as well as the method to clean it up. The user can pass this object to `Promise.using` to get access to the resource when it becomes available, as well as to ensure its automatically cleaned up. + +The second argument passed to a disposer is the result promise of the using block, which you can inspect synchronously. + +Example: + +```js +// This function doesn't return a promise but a Disposer +// so it's very hard to use it wrong (not passing it to `using`) +function getConnection() { + return db.connect().disposer(function(connection, promise) { + connection.close(); + }); +} +``` + +In the above example, the connection returned by `getConnection` can only be +used via `Promise.using`, like so: + +```js +function useConnection(query) { + return Promise.using(getConnection(), function(connection) { + return connection.sendQuery(query).then(function(results) { + return process(results); + }) + }); +} +``` + +This will ensure that `connection.close()` will be called once the promise returned +from the `Promise.using` closure is resolved or if an exception was thrown in the closure +body. + +Real example: + +```js +var pg = require("pg"); +// Uncomment if pg has not been properly promisified yet +//var Promise = require("bluebird"); +//Promise.promisifyAll(pg, { +// filter: function(methodName) { +// return methodName === "connect" +// }, +// multiArgs: true +//}); +// Promisify rest of pg normally +//Promise.promisifyAll(pg); + +function getSqlConnection(connectionString) { + var close; + return pg.connectAsync(connectionString).spread(function(client, done) { + close = done; + return client; + }).disposer(function() { + if (close) close(); + }); +} + +module.exports = getSqlConnection; +``` + +Real example 2: + +```js +var mysql = require("mysql"); +// Uncomment if pg has not been properly promisified yet +// var Promise = require("bluebird"); +// Promise.promisifyAll(mysql); +// Promise.promisifyAll(require("mysql/lib/Connection").prototype); +// Promise.promisifyAll(require("mysql/lib/Pool").prototype); +var pool = mysql.createPool({ + connectionLimit: 10, + host: 'example.org', + user: 'bob', + password: 'secret' +}); + +function getSqlConnection() { + return pool.getConnectionAsync().disposer(function(connection) { + connection.release(); + }); +} + +module.exports = getSqlConnection; +``` + +#### Note about disposers in node + +If a disposer method throws or returns a rejected promise, its highly likely that it failed to dispose of the resource. In that case, Bluebird has two options - it can either ignore the error and continue with program execution or throw an exception (crashing the process in node.js). + +In bluebird we've chosen to do the latter because resources are typically scarce. For example, if a database connection cannot be disposed of and Bluebird ignores that, the connection pool will be quickly depleted and the process will become unusable (all requests that query the database will wait forever). Since Bluebird doesn't know how to handle that, the only sensible default is to crash the process. That way, rather than getting a useless process that cannot fulfill more requests, we can swap the faulty worker with a new one letting the OS clean up the resources for us. + +As a result, if you anticipate thrown errors or promise rejections while disposing of the resource you should use a `try..catch` block (or Promise.try) and write the appropriate catch code to handle the errors. If its not possible to sensibly handle the error, letting the process crash is the next best option. + +This also means that disposers should not contain code that does anything other than resource disposal. For example, you cannot write code inside a disposer to commit or rollback a transaction, because there is no mechanism for the disposer to signal a failure of the commit or rollback action without crashing the process. + +For transactions, you can use the following similar pattern instead: + +```js +function withTransaction(fn) { + return Promise.using(pool.acquireConnection(), function(connection) { + var tx = connection.beginTransaction() + return Promise + .try(fn, tx) + .then(function(res) { return connection.commit().thenReturn(res) }, + function(err) { + return connection.rollback() + .catch(function(e) {/* maybe add the rollback error to err */}) + .thenThrow(err); + }); + }); +} + +// If the withTransaction block completes successfully, the transaction is automatically committed +// Any error or rejection will automatically roll it back + +withTransaction(function(tx) { + return tx.queryAsync(...).then(function() { + return tx.queryAsync(...) + }).then(function() { + return tx.queryAsync(...) + }); +}); +``` + +
+
+ +
+ + diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/done.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/done.md new file mode 100644 index 0000000..16e370a --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/done.md @@ -0,0 +1,37 @@ +--- +layout: api +id: done +title: .done +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.done + +```js +.done( + [function(any value) fulfilledHandler], + [function(any error) rejectedHandler] +) -> undefined +``` + + +Like [`.then`](.), but any unhandled rejection that ends up here will crash the process (in node) or be thrown as an error (in browsers). The use of this method is heavily discouraged and it only exists for historical reasons. + +
+
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/each.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/each.md new file mode 100644 index 0000000..a966f6a --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/each.md @@ -0,0 +1,51 @@ +--- +layout: api +id: each +title: .each +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.each + +```js +.each(function(any item, int index, int length) iterator) -> Promise +``` + +Iterate over an array, or a promise of an array, which contains promises (or a mix of promises and values) with the given `iterator` function with the signature `(value, index, length)` where `value` is the resolved value of a respective promise in the input array. Iteration happens serially. If any promise in the input array is rejected the returned promise is rejected as well. + +Resolves to the original array unmodified, this method is meant to be used for side effects. If the iterator function returns a promise or a thenable, then the result of the promise is awaited, before continuing with next iteration. + +Example where you might want to utilize `.each`: + +```js +// Source: http://jakearchibald.com/2014/es7-async-functions/ +function loadStory() { + return getJSON('story.json') + .then(function(story) { + addHtmlToPage(story.heading); + return story.chapterURLs.map(getJSON); + }) + .each(function(chapter) { addHtmlToPage(chapter.html); }) + .then(function() { addTextToPage("All done"); }) + .catch(function(err) { addTextToPage("Argh, broken: " + err.message); }) + .then(function() { document.querySelector('.spinner').style.display = 'none'; }); +} +``` + +
+ +
+ + diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/environment-variables.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/environment-variables.md new file mode 100644 index 0000000..4ed4588 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/environment-variables.md @@ -0,0 +1,41 @@ +--- +layout: api +id: environment-variables +title: Environment variables +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Environment variables + +This section only applies to node.js or io.js. + +You can change bluebird behavior globally with various environment variables. These global variables affect all instances of bluebird that are running in your environment, rather than just the one you have `require`d in your application. The effect an environment variable has depends on the bluebird version. + +Environment variables supported by 2.x: + +- `BLUEBIRD_DEBUG` - Set to any truthy value this will enable long stack traces and warnings +- `NODE_ENV` - If set exactly to `development` it will have the same effect as if the `BLUEBIRD_DEBUG` variable was set. + +Environment variables supported by 3.x: + +- `BLUEBIRD_DEBUG` - If set this will enable long stack traces and warnings, unless those are explicitly disabled. Setting this to exactly `0` can be used to override `NODE_ENV=development` enabling long stack traces and warnings. +- `NODE_ENV` - If set exactly to `development` it will have the same effect as if the `BLUEBIRD_DEBUG` variable was set. +- `BLUEBIRD_WARNINGS` - if set exactly to `0` it will explicitly disable warnings and this overrides any other setting that might enable warnings. If set to any truthy value, it will explicitly enable warnings. +- `BLUEBIRD_LONG_STACK_TRACES` - if set exactly to `0` it will explicitly disable long stack traces and this overrides any other setting that might enable long stack traces. If set to any truthy value, it will explicitly enable long stack traces. +
+ +
+ + diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/error-management-configuration.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/error-management-configuration.md new file mode 100644 index 0000000..a408d7f --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/error-management-configuration.md @@ -0,0 +1,107 @@ +--- +layout: api +id: error-management-configuration +title: Error management configuration +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Error management configuration + +The default approach of bluebird is to immediately log the stack trace when there is an unhandled rejection. This is similar to how uncaught exceptions cause the stack trace to be logged so that you have something to work with when something is not working as expected. + +However because it is possible to handle a rejected promise at any time in the indeterminate future, some programming patterns will result in false positives. Because such programming patterns are not necessary and can always be refactored to never cause false positives, we recommend doing that to keep debugging as easy as possible . You may however feel differently so bluebird provides hooks to implement more complex failure policies. + +Such policies could include: + +- Logging after the promise became GCd (requires a native node.js module) +- Showing a live list of rejected promises +- Using no hooks and using [`.done`](.) to manually to mark end points where rejections will not be handled +- Swallowing all errors (challenge your debugging skills) +- ... + +
+ +###Global rejection events + +Starting from 2.7.0 all bluebird instances also fire rejection events globally so that applications can register one universal hook for them. + +The global events are: + + - `"unhandledRejection"` (corresponds to the local [`Promise.onPossiblyUnhandledRejection`](.)) + - `"rejectionHandled"` (corresponds to the local [`Promise.onUnhandledRejectionHandled`](.)) + + +Attaching global rejection event handlers in **node.js**: + +```js +// NOTE: event name is camelCase as per node convention +process.on("unhandledRejection", function(reason, promise) { + // See Promise.onPossiblyUnhandledRejection for parameter documentation +}); + +// NOTE: event name is camelCase as per node convention +process.on("rejectionHandled", function(promise) { + // See Promise.onUnhandledRejectionHandled for parameter documentation +}); +``` + +Attaching global rejection event handlers in **browsers**: + +Using DOM3 `addEventListener` APIs (support starting from IE9+): + +```js +// NOTE: event name is all lower case as per DOM convention +window.addEventListener("unhandledrejection", function(e) { + // NOTE: e.preventDefault() must be manually called to prevent the default + // action which is currently to log the stack trace to console.warn + e.preventDefault(); + // NOTE: parameters are properties of the event detail property + var reason = e.detail.reason; + var promise = e.detail.promise; + // See Promise.onPossiblyUnhandledRejection for parameter documentation +}); + +// NOTE: event name is all lower case as per DOM convention +window.addEventListener("rejectionhandled", function(e) { + // NOTE: e.preventDefault() must be manually called prevent the default + // action which is currently unset (but might be set to something in the future) + e.preventDefault(); + // NOTE: parameters are properties of the event detail property + var promise = e.detail.promise; + // See Promise.onUnhandledRejectionHandled for parameter documentation +}); +``` + +In Web Workers you may use `self.addEventListener`. + +Using legacy APIs (support starting from IE6+): + +```js +// NOTE: event name is all lower case as per legacy convention +window.onunhandledrejection = function(reason, promise) { + // See Promise.onPossiblyUnhandledRejection for parameter documentation +}; + +// NOTE: event name is all lower case as per legacy convention +window.onrejectionhandled = function(promise) { + // See Promise.onUnhandledRejectionHandled for parameter documentation +}; +``` +
+
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/error.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/error.md new file mode 100644 index 0000000..d1c4d08 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/error.md @@ -0,0 +1,101 @@ +--- +layout: api +id: error +title: .error +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.error + +```js +.error([function(any error) rejectedHandler]) -> Promise +``` + + +Like [`.catch`](.) but instead of catching all types of exceptions, it only catches operational errors. + +*Note, "errors" mean errors, as in objects that are `instanceof Error` - not strings, numbers and so on. See [a string is not an error](http://www.devthought.com/2011/12/22/a-string-is-not-an-error/).* + +It is equivalent to the following [`.catch`](.) pattern: + +```js +// Assumes OperationalError has been made global +function isOperationalError(e) { + if (e == null) return false; + return (e instanceof OperationalError) || (e.isOperational === true); +} + +// Now this bit: +.catch(isOperationalError, function(e) { + // ... +}) + +// Is equivalent to: + +.error(function(e) { + // ... +}); +``` + +For example, if a promisified function errbacks the node-style callback with an error, that could be caught with [`.error`](.). However if the node-style callback **throws** an error, only `.catch` would catch that. + +In the following example you might want to handle just the `SyntaxError` from JSON.parse and Filesystem errors from `fs` but let programmer errors bubble as unhandled rejections: + +```js +var fs = Promise.promisifyAll(require("fs")); + +fs.readFileAsync("myfile.json").then(JSON.parse).then(function (json) { + console.log("Successful json") +}).catch(SyntaxError, function (e) { + console.error("file contains invalid json"); +}).error(function (e) { + console.error("unable to read file, because: ", e.message); +}); +``` + +Now, because there is no catch-all handler, if you typed `console.lag` (causes an error you don't expect), you will see: + +``` +Possibly unhandled TypeError: Object # has no method 'lag' + at application.js:8:13 +From previous event: + at Object. (application.js:7:4) + at Module._compile (module.js:449:26) + at Object.Module._extensions..js (module.js:467:10) + at Module.load (module.js:349:32) + at Function.Module._load (module.js:305:12) + at Function.Module.runMain (module.js:490:10) + at startup (node.js:121:16) + at node.js:761:3 +``` + +*( If you don't get the above - you need to enable [long stack traces](#promiselongstacktraces---undefined) )* + +And if the file contains invalid JSON: + +``` +file contains invalid json +``` + +And if the `fs` module causes an error like file not found: + +``` +unable to read file, because: ENOENT, open 'not_there.txt' +``` +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/filter.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/filter.md new file mode 100644 index 0000000..0c5ddbd --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/filter.md @@ -0,0 +1,34 @@ +--- +layout: api +id: filter +title: .filter +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.filter + +```js +.filter( + function(any item, int index, int length) filterer, + [Object {concurrency: int=Infinity} options] +) -> Promise +``` + +Same as [Promise.filter(this, filterer, options)](.). +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/finally.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/finally.md new file mode 100644 index 0000000..32b8a6a --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/finally.md @@ -0,0 +1,97 @@ +--- +layout: api +id: finally +title: .finally +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.finally + +```js +.finally(function() handler) -> Promise +``` +```js +.lastly(function() handler) -> Promise +``` + + +Pass a handler that will be called regardless of this promise's fate. Returns a new promise chained from this promise. There are special semantics for [`.finally`](.) in that the final value cannot be modified from the handler. + +*Note: using [`.finally`](.) for resource management has better alternatives, see [resource management](/docs/api/resource-management.html)* + +Consider the example: + +```js +function anyway() { + $("#ajax-loader-animation").hide(); +} + +function ajaxGetAsync(url) { + return new Promise(function (resolve, reject) { + var xhr = new XMLHttpRequest; + xhr.addEventListener("error", reject); + xhr.addEventListener("load", resolve); + xhr.open("GET", url); + xhr.send(null); + }).then(anyway, anyway); +} +``` + +This example doesn't work as intended because the `then` handler actually swallows the exception and returns `undefined` for any further chainers. + +The situation can be fixed with `.finally`: + +```js +function ajaxGetAsync(url) { + return new Promise(function (resolve, reject) { + var xhr = new XMLHttpRequest; + xhr.addEventListener("error", reject); + xhr.addEventListener("load", resolve); + xhr.open("GET", url); + xhr.send(null); + }).finally(function() { + $("#ajax-loader-animation").hide(); + }); +} +``` + +Now the animation is hidden but, unless it throws an exception, the function has no effect on the fulfilled or rejected value of the returned promise. This is similar to how the synchronous `finally` keyword behaves. + +If the handler function passed to `.finally` returns a promise, the promise returned by `.finally` will not be settled until the promise returned by the handler is settled. If the handler fulfills its promise, the returned promise will be fulfilled or rejected with the original value. If the handler rejects its promise, the returned promise will be rejected with the handler's value. This is similar to throwing an exception in a synchronous `finally` block, causing the original value or exception to be forgotten. This delay can be useful if the actions performed by the handler are done asynchronously. For example: + +```js +function ajaxGetAsync(url) { + return new Promise(function (resolve, reject) { + var xhr = new XMLHttpRequest; + xhr.addEventListener("error", reject); + xhr.addEventListener("load", resolve); + xhr.open("GET", url); + xhr.send(null); + }).finally(function() { + return Promise.fromCallback(function(callback) { + $("#ajax-loader-animation").fadeOut(1000, callback); + }); + }); +} +``` + +If the fade out completes successfully, the returned promise will be fulfilled or rejected with the value from `xhr`. If `.fadeOut` throws an exception or passes an error to the callback, the returned promise will be rejected with the error from `.fadeOut`. + +*For compatibility with earlier ECMAScript version, an alias `.lastly` is provided for [`.finally`](.).* +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/generators.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/generators.md new file mode 100644 index 0000000..e66a508 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/generators.md @@ -0,0 +1,27 @@ +--- +layout: api +id: generators +title: Generators +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Generators + +Using ECMAScript6 generators feature to implement C# 5.0 `async/await` like syntax. +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/get.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/get.md new file mode 100644 index 0000000..8e46a66 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/get.md @@ -0,0 +1,59 @@ +--- +layout: api +id: get +title: .get +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.get + +```js +.get(String propertyName|int index) -> Promise +``` + + +This is a convenience method for doing: + +```js +promise.then(function(obj) { + return obj[propertyName]; +}); +``` + +For example: + +```js +db.query("...") + .get(0) + .then(function(firstRow) { + + }); +``` + +If `index` is negative, the indexed load will become `obj.length + index`. So that -1 can be used to read last item +in the array, -2 to read the second last and so on. For example: + +```js +Promise.resolve([1,2,3]).get(-1).then(function(value) { + console.log(value); // 3 +}); +``` + +If the `index` is still negative after `obj.length + index`, it will be clamped to 0. +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/iscancelled.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/iscancelled.md new file mode 100644 index 0000000..e63e5f9 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/iscancelled.md @@ -0,0 +1,31 @@ +--- +layout: api +id: iscancelled +title: .isCancelled +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.isCancelled + +```js +.isCancelled() -> boolean +``` + +See if this `promise` has been cancelled. +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/isfulfilled.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/isfulfilled.md new file mode 100644 index 0000000..a68d86b --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/isfulfilled.md @@ -0,0 +1,31 @@ +--- +layout: api +id: isfulfilled +title: .isFulfilled +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.isFulfilled + +```js +.isFulfilled() -> boolean +``` + +See if this `promise` has been fulfilled. +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/ispending.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/ispending.md new file mode 100644 index 0000000..9a8b49c --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/ispending.md @@ -0,0 +1,32 @@ +--- +layout: api +id: ispending +title: .isPending +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.isPending + +```js +.isPending() -> boolean +``` + + +See if this `promise` is pending (not fulfilled or rejected or cancelled). +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/isrejected.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/isrejected.md new file mode 100644 index 0000000..1ac2c4e --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/isrejected.md @@ -0,0 +1,31 @@ +--- +layout: api +id: isrejected +title: .isRejected +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.isRejected + +```js +.isRejected() -> boolean +``` + +See if this `promise` has been rejected. +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/map.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/map.md new file mode 100644 index 0000000..7d97d51 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/map.md @@ -0,0 +1,34 @@ +--- +layout: api +id: map +title: .map +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.map + +```js +.map( + function(any item, int index, int length) mapper, + [Object {concurrency: int=Infinity} options] +) -> Promise +``` + +Same as [Promise.map(this, mapper, options)](.). +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/mapseries.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/mapseries.md new file mode 100644 index 0000000..24db880 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/mapseries.md @@ -0,0 +1,31 @@ +--- +layout: api +id: mapseries +title: .mapseries +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.mapSeries + +```js +.mapSeries(function(any item, int index, int length) mapper) -> Promise +``` + +Same as [Promise.mapSeries(this, iterator)](.). +
+ +
+ + diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/new-promise.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/new-promise.md new file mode 100644 index 0000000..a57d863 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/new-promise.md @@ -0,0 +1,79 @@ +--- +layout: api +id: new-promise +title: new Promise +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##new Promise + +```js +new Promise(function(function resolve, function reject) resolver) -> Promise +``` + + +Create a new promise. The passed in function will receive functions `resolve` and `reject` as its arguments which can be called to seal the fate of the created promise. + +*Note: See [explicit construction anti-pattern]({{ "/docs/anti-patterns.html#the-explicit-construction-anti-pattern" | prepend: site.baseurl }}) before creating promises yourself* + +Example: + +```js +function ajaxGetAsync(url) { + return new Promise(function (resolve, reject) { + var xhr = new XMLHttpRequest; + xhr.addEventListener("error", reject); + xhr.addEventListener("load", resolve); + xhr.open("GET", url); + xhr.send(null); + }); +} +``` + +If you pass a promise object to the `resolve` function, the created promise will follow the state of that promise. + +
+ +To make sure a function that returns a promise is following the implicit but critically important contract of promises, you can start a function with `new Promise` if you cannot start a chain immediately: + +```js +function getConnection(urlString) { + return new Promise(function(resolve) { + //Without new Promise, this throwing will throw an actual exception + var params = parse(urlString); + resolve(getAdapter(params).getConnection()); + }); +} +``` + +The above ensures `getConnection` fulfills the contract of a promise-returning function of never throwing a synchronous exception. Also see [`Promise.try`](.) and [`Promise.method`](.) + +The resolver is called synchronously (the following is for documentation purposes and not idiomatic code): + +```js +function getPromiseResolveFn() { + var res; + new Promise(function (resolve) { + res = resolve; + }); + // res is guaranteed to be set + return res; +} +``` +
+ +
+ + diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/operationalerror.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/operationalerror.md new file mode 100644 index 0000000..3705216 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/operationalerror.md @@ -0,0 +1,35 @@ +--- +layout: api +id: operationalerror +title: OperationalError +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##OperationalError + +```js +new OperationalError(String message) -> OperationalError +``` + + +Represents an error is an explicit promise rejection as opposed to a thrown error. For example, if an error is errbacked by a callback API promisified through undefined or undefined +and is not a typed error, it will be converted to a `OperationalError` which has the original error in the `.cause` property. + +`OperationalError`s are caught in [`.error`](.) handlers. +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/progression-migration.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/progression-migration.md new file mode 100644 index 0000000..3eae3fb --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/progression-migration.md @@ -0,0 +1,105 @@ +--- +layout: api +id: progression-migration +title: Progression migration +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Progression migration + +Progression has been removed as there are composability and chaining issues with APIs that use promise progression handlers. Implementing the common use case of progress bars can be accomplished using a pattern similar to [IProgress](http://blogs.msdn.com/b/dotnet/archive/2012/06/06/async-in-4-5-enabling-progress-and-cancellation-in-async-apis.aspx) in C#. + +For old code that still uses it, see [the progression docs in the deprecated API documentation](/docs/deprecated-apis.html#progression). + +Using jQuery before: + +```js +Promise.resolve($.get(...)) + .progressed(function() { + // ... + }) + .then(function() { + // ... + }) + .catch(function(e) { + // ... + }) +``` + +Using jQuery after: + +```js +Promise.resolve($.get(...).progress(function() { + // ... + })) + .then(function() { + // ... + }) + .catch(function(e) { + // ... + }) +``` + +Implementing general progress interfaces like in C#: + +```js +function returnsPromiseWithProgress(progressHandler) { + return doFirstAction().tap(function() { + progressHandler(0.33); + }).then(doSecondAction).tap(function() { + progressHandler(0.66); + }).then(doThirdAction).tap(function() { + progressHandler(1.00); + }); +} + +returnsPromiseWithProgress(function(progress) { + ui.progressbar.setWidth((progress * 200) + "px"); // update with on client side +}).then(function(value) { // action complete + // entire chain is complete. +}).catch(function(e) { + // error +}); +``` + +Another example using `coroutine`: + +```js +var doNothing = function() {}; +var progressSupportingCoroutine = Promise.coroutine(function* (progress) { + progress = typeof progress === "function" ? progress : doNothing; + var first = yield getFirstValue(); + // 33% done + progress(0.33); + var second = yield getSecondValue(); + progress(0.67); + var third = yield getThirdValue(); + progress(1); + return [first, second, third]; +}); + +var progressConsumingCoroutine = Promise.coroutine(function* () { + var allValues = yield progressSupportingCoroutine(function(p) { + ui.progressbar.setWidth((p * 200) + "px"); + }); + var second = allValues[1]; + // ... +}); +``` +
+ +
+ + diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.all.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.all.md new file mode 100644 index 0000000..fd3703f --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.all.md @@ -0,0 +1,47 @@ +--- +layout: api +id: promise.all +title: Promise.all +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Promise.all + +```js +Promise.all(Iterable|Promise> input) -> Promise +``` + +This method is useful for when you want to wait for more than one promise to complete. + +Given an [`Iterable`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols)\(arrays are `Iterable`\), or a promise of an `Iterable`, which produces promises (or a mix of promises and values), iterate over all the values in the `Iterable` into an array and return a promise that is fulfilled when all the items in the array are fulfilled. The promise's fulfillment value is an array with fulfillment values at respective positions to the original array. If any promise in the array rejects, the returned promise is rejected with the rejection reason. + + +```js +var files = []; +for (var i = 0; i < 100; ++i) { + files.push(fs.writeFileAsync("file-" + i + ".txt", "", "utf-8")); +} +Promise.all(files).then(function() { + console.log("all the files were created"); +}); +``` + + +This method is compatible with [`Promise.all`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all) from native promises. +
+ +
+ + diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.any.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.any.md new file mode 100644 index 0000000..550b9bd --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.any.md @@ -0,0 +1,31 @@ +--- +layout: api +id: promise.any +title: Promise.any +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Promise.any + +```js +Promise.any(Iterable|Promise> input) -> Promise +``` + +Like [Promise.some](.), with 1 as `count`. However, if the promise fulfills, the fulfillment value is not an array of 1 but the value directly. +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.bind.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.bind.md new file mode 100644 index 0000000..77d732c --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.bind.md @@ -0,0 +1,177 @@ +--- +layout: api +id: promise.bind +title: Promise.bind +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Promise.bind + +```js +Promise.bind( + any|Promise thisArg, + [any|Promise value=undefined] +) -> BoundPromise +``` + +Create a promise that follows this promise or in the static method is resolved with the given `value`, but is bound to the given `thisArg` value. A bound promise will call its handlers with the bound value set to `this`. Additionally promises derived from a bound promise will also be bound promises with the same `thisArg` binding as the original promise. + +If `thisArg` is a promise or thenable, its resolution will be awaited for and the bound value will be the promise's fulfillment value. If `thisArg` rejects +then the returned promise is rejected with the `thisArg's` rejection reason. Note that this means you cannot use `this` without checking inside catch handlers for promises that bind to promise because in case of rejection of `thisArg`, `this` will be `undefined`. + +
+ +Without arrow functions that provide lexical `this`, the correspondence between async and sync code breaks down when writing object-oriented code. [`.bind`](.) alleviates this. + +Consider: + +```js +MyClass.prototype.method = function() { + try { + var contents = fs.readFileSync(this.file); + var url = urlParse(contents); + var result = this.httpGetSync(url); + var refined = this.refine(result); + return this.writeRefinedSync(refined); + } + catch (e) { + this.error(e.stack); + } +}; +``` + +The above has a direct translation: + +```js +MyClass.prototype.method = function() { + return fs.readFileAsync(this.file).bind(this) + .then(function(contents) { + var url = urlParse(contents); + return this.httpGetAsync(url); + }).then(function(result) { + var refined = this.refine(result); + return this.writeRefinedAsync(refined); + }).catch(function(e) { + this.error(e.stack); + }); +}; +``` + +`.bind` is the most efficient way of utilizing `this` with promises. The handler functions in the above code are not closures and can therefore even be hoisted out if needed. There is literally no overhead when propagating the bound value from one promise to another. + +
+ +`.bind` also has a useful side purpose - promise handlers don't need to share a function to use shared state: + +```js +somethingAsync().bind({}) +.spread(function (aValue, bValue) { + this.aValue = aValue; + this.bValue = bValue; + return somethingElseAsync(aValue, bValue); +}) +.then(function (cValue) { + return this.aValue + this.bValue + cValue; +}); +``` + +The above without [`.bind`](.) could be achieved with: + +```js +var scope = {}; +somethingAsync() +.spread(function (aValue, bValue) { + scope.aValue = aValue; + scope.bValue = bValue; + return somethingElseAsync(aValue, bValue); +}) +.then(function (cValue) { + return scope.aValue + scope.bValue + cValue; +}); +``` + +However, there are many differences when you look closer: + +- Requires a statement so cannot be used in an expression context +- If not there already, an additional wrapper function is required to aundefined leaking or sharing `scope` +- The handler functions are now closures, thus less efficient and not reusable + +
+ +Note that bind is only propagated with promise transformation. If you create new promise chains inside a handler, those chains are not bound to the "upper" `this`: + +```js +something().bind(var1).then(function() { + //`this` is var1 here + return Promise.all(getStuff()).then(function(results) { + //`this` is undefined here + //refine results here etc + }); +}).then(function() { + //`this` is var1 here +}); +``` + +However, if you are utilizing the full bluebird API offering, you will *almost never* need to resort to nesting promises in the first place. The above should be written more like: + +```js +something().bind(var1).then(function() { + //`this` is var1 here + return getStuff(); +}).map(function(result) { + //`this` is var1 here + //refine result here +}).then(function() { + //`this` is var1 here +}); +``` + +Also see this [Stackoverflow answer](http://stackoverflow.com/a/24412873/191693) as an additional example. + +
+ +If you don't want to return a bound promise to the consumers of a promise, you can rebind the chain at the end: + +```js +MyClass.prototype.method = function() { + return fs.readFileAsync(this.file).bind(this) + .then(function(contents) { + var url = urlParse(contents); + return this.httpGetAsync(url); + }).then(function(result) { + var refined = this.refine(result); + return this.writeRefinedAsync(refined); + }).catch(function(e) { + this.error(e.stack); + }).bind(); //The `thisArg` is implicitly undefined - I.E. the default promise `this` value +}; +``` + +Rebinding can also be abused to do something gratuitous like this: + +```js +Promise.resolve("my-element") + .bind(document) + .then(document.getElementById) + .bind(console) + .then(console.log); +``` + +The above does a `console.log` of `my-element`. Doing it this way is necessary because neither of the methods (`getElementById`, `console.log`) can be called as stand-alone methods. +
+ +
+ + diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.config.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.config.md new file mode 100644 index 0000000..7be07f3 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.config.md @@ -0,0 +1,84 @@ +--- +layout: api +id: promise.config +title: Promise.config +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Promise.config + +```js +Promise.config(Object { + warnings: boolean=false, + longStackTraces: boolean=false, + cancellation: boolean=false, + monitoring: boolean=false +} options) -> undefined; +``` + +Configure long stack traces, warnings, monitoring and cancellation. Note that even though `false` is the default here, a development environment might be detected which automatically enables long stack traces and warnings. + +```js +Promise.config({ + // Enable warnings + warnings: true, + // Enable long stack traces + longStackTraces: true, + // Enable cancellation + cancellation: true, + // Enable monitoring + monitoring: true +}); +``` + +You can configure the warning for checking forgotten return statements with `wForgottenReturn`: + +```js +Promise.config({ + // Enables all warnings except forgotten return statements. + warnings: { + wForgottenReturn: false + } +}); +``` + +`wForgottenReturn` is the only warning type that can be separately configured. The corresponding environmental variable key is `BLUEBIRD_W_FORGOTTEN_RETURN`. + +
+ + + +In Node.js you may configure warnings and long stack traces for the entire process using environment variables: + +``` +BLUEBIRD_LONG_STACK_TRACES=1 BLUEBIRD_WARNINGS=1 node app.js +``` + +Both features are automatically enabled if the `BLUEBIRD_DEBUG` environment variable has been set or if the `NODE_ENV` environment variable is equal to `"development"`. + +Using the value `0` will explicitly disable a feature despite debug environment otherwise activating it: + +``` +# Warnings are disabled despite being in development environment +NODE_ENV=development BLUEBIRD_WARNINGS=0 node app.js +``` + +Cancellation is always configured separately per bluebird instance. + +
+ +
+ + diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.coroutine.addyieldhandler.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.coroutine.addyieldhandler.md new file mode 100644 index 0000000..809cb9c --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.coroutine.addyieldhandler.md @@ -0,0 +1,122 @@ +--- +layout: api +id: promise.coroutine.addyieldhandler +title: Promise.coroutine.addYieldHandler +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Promise.coroutine.addYieldHandler + +```js +Promise.coroutine.addYieldHandler(function handler) -> undefined +``` + + +By default you can only yield Promises and Thenables inside coroutines. You can use this function to add yielding support for arbitrary types. + +For example, if you wanted `yield 500` to be same as `yield Promise.delay`: + +```js +Promise.coroutine.addYieldHandler(function(value) { + if (typeof value === "number") return Promise.delay(value); +}); +``` + +Yield handlers are called when you yield something that is not supported by default. The first yield handler to return a promise or a thenable will be used. +If no yield handler returns a promise or a thenable then an error is raised. + +An example of implementing callback support with `addYieldHandler`: + +*This is a demonstration of how powerful the feature is and not the recommended usage. For best performance you need to use `promisifyAll` and yield promises directly.* + +```js +var Promise = require("bluebird"); +var fs = require("fs"); + +var _ = (function() { + var promise = null; + Promise.coroutine.addYieldHandler(function(v) { + if (v === undefined && promise != null) { + return promise; + } + promise = null; + }); + return function() { + var def = Promise.defer(); + promise = def.promise; + return def.callback; + }; +})(); + + +var readFileJSON = Promise.coroutine(function* (fileName) { + var contents = yield fs.readFile(fileName, "utf8", _()); + return JSON.parse(contents); +}); +``` + +An example of implementing thunks support with `addYieldHandler`: + +*This is a demonstration of how powerful the feature is and not the recommended usage. For best performance you need to use `promisifyAll` and yield promises directly.* + +```js +var Promise = require("bluebird"); +var fs = require("fs"); + +Promise.coroutine.addYieldHandler(function(v) { + if (typeof v === "function") { + return Promise.fromCallback(function(cb) { + v(cb); + }); + } +}); + +var readFileThunk = function(fileName, encoding) { + return function(cb) { + return fs.readFile(fileName, encoding, cb); + }; +}; + +var readFileJSON = Promise.coroutine(function* (fileName) { + var contents = yield readFileThunk(fileName, "utf8"); + return JSON.parse(contents); +}); +``` + +An example of handling promises in parallel by adding an `addYieldHandler` for arrays : + +```js +var Promise = require("bluebird"); +var fs = Promise.promisifyAll(require("fs")); + +Promise.coroutine.addYieldHandler(function(yieldedValue) { + if (Array.isArray(yieldedValue)) return Promise.all(yieldedValue); +}); + +var readFiles = Promise.coroutine(function* (fileNames) { + var promises = []; + + fileNames.forEach(function (fileName) { + promises.push(fs.readFileAsync(fileName, "utf8")); + }); + + return yield promises; +}); +``` +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.coroutine.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.coroutine.md new file mode 100644 index 0000000..af97c6b --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.coroutine.md @@ -0,0 +1,76 @@ +--- +layout: api +id: promise.coroutine +title: Promise.coroutine +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Promise.coroutine + +```js +Promise.coroutine(GeneratorFunction(...arguments) generatorFunction) -> function +``` + +Returns a function that can use `yield` to yield promises. Control is returned back to the generator when the yielded promise settles. This can lead to less verbose code when doing lots of sequential async calls with minimal processing in between. Requires node.js 0.12+, io.js 1.0+ or Google Chrome 40+. + +```js +var Promise = require("bluebird"); + +function PingPong() { + +} + +PingPong.prototype.ping = Promise.coroutine(function* (val) { + console.log("Ping?", val) + yield Promise.delay(500) + this.pong(val+1) +}); + +PingPong.prototype.pong = Promise.coroutine(function* (val) { + console.log("Pong!", val) + yield Promise.delay(500); + this.ping(val+1) +}); + +var a = new PingPong(); +a.ping(0); +``` + +Running the example: + + $ node test.js + Ping? 0 + Pong! 1 + Ping? 2 + Pong! 3 + Ping? 4 + Pong! 5 + Ping? 6 + Pong! 7 + Ping? 8 + ... + +When called, the coroutine function will start an instance of the generator and returns a promise for its final value. + +Doing `Promise.coroutine` is almost like using the C# `async` keyword to mark the function, with `yield` working as the `await` keyword. Promises are somewhat like `Task`s. + +**Tip** + +You are able to yield non-promise values by adding your own yield handler using [`Promise.coroutine.addYieldHandler`](.) +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.delay.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.delay.md new file mode 100644 index 0000000..87cd785 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.delay.md @@ -0,0 +1,47 @@ +--- +layout: api +id: promise.delay +title: Promise.delay +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Promise.delay + +```js +Promise.delay( + int ms, + [any|Promise value=undefined] +) -> Promise +``` + + +Returns a promise that will be resolved with `value` (or `undefined`) after given `ms` milliseconds. If `value` is a promise, the delay will start counting down when it is fulfilled and the returned promise will be fulfilled with the fulfillment value of the `value` promise. + +```js +Promise.delay(500).then(function() { + console.log("500 ms passed"); + return "Hello world"; +}).delay(500).then(function(helloWorldString) { + console.log(helloWorldString); + console.log("another 500 ms passed") ; +}); +``` + +
+
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.each.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.each.md new file mode 100644 index 0000000..ddc3ac1 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.each.md @@ -0,0 +1,42 @@ +--- +layout: api +id: promise.each +title: Promise.each +--- + + + +[← Back To API Reference](/docs/api-reference.html) +
+##Promise.each + +```js +Promise.each( + Iterable|Promise> input, + function(any item, int index, int length) iterator +) -> Promise +``` + +[api/promise.each](unfinished-article) + +Iterate over an array, or a promise of an array, which contains promises (or a mix of promises and values) with the given `iterator` function with the signature `(value, index, length)` where `value` is the resolved value of a respective promise in the input array. Iteration happens serially. If any promise in the input array is rejected the returned promise is rejected as well. + +Resolves to the original array unmodified, this method is meant to be used for side effects. If the iterator function returns a promise or a thenable, then the result of the promise is awaited, before continuing with next iteration. + + +
+
+ +
+ + diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.filter.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.filter.md new file mode 100644 index 0000000..b434aa3 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.filter.md @@ -0,0 +1,74 @@ +--- +layout: api +id: promise.filter +title: Promise.filter +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Promise.filter + +```js +Promise.filter( + Iterable|Promise> input, + function(any item, int index, int length) filterer, + [Object {concurrency: int=Infinity} options] +) -> Promise +``` + +Given an [`Iterable`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols)\(arrays are `Iterable`\), or a promise of an `Iterable`, which produces promises (or a mix of promises and values), iterate over all the values in the `Iterable` into an array and [filter the array to another](http://en.wikipedia.org/wiki/Filter_\(higher-order_function\)) using the given `filterer` function. + + +It is essentially an efficient shortcut for doing a [.map](.) and then [`Array#filter`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter): + +```js +Promise.map(valuesToBeFiltered, function(value, index, length) { + return Promise.all([filterer(value, index, length), value]); +}).then(function(values) { + return values.filter(function(stuff) { + return stuff[0] == true + }).map(function(stuff) { + return stuff[1]; + }); +}); +``` + +Example for filtering files that are accessible directories in the current directory: + +```js +var Promise = require("bluebird"); +var E = require("core-error-predicates"); +var fs = Promise.promisifyAll(require("fs")); + +fs.readdirAsync(process.cwd()).filter(function(fileName) { + return fs.statAsync(fileName) + .then(function(stat) { + return stat.isDirectory(); + }) + .catch(E.FileAccessError, function() { + return false; + }); +}).each(function(directoryName) { + console.log(directoryName, " is an accessible directory"); +}); +``` + +####Filter Option: concurrency + +See [Map Option: concurrency](#map-option-concurrency) +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.fromcallback.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.fromcallback.md new file mode 100644 index 0000000..94e517b --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.fromcallback.md @@ -0,0 +1,80 @@ +--- +layout: api +id: promise.fromcallback +title: Promise.fromCallback +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Promise.fromCallback + +```js +Promise.fromCallback( + function(function callback) resolver, + [Object {multiArgs: boolean=false} options] +) -> Promise +``` +```js +Promise.fromNode( + function(function callback) resolver, + [Object {multiArgs: boolean=false} options] +) -> Promise +``` + +Returns a promise that is resolved by a node style callback function. This is the most fitting way to do on the fly promisification when libraries don't expose classes for automatic promisification by undefined. + +The resolver function is passed a callback that expects to be called back according to error-first node conventions. + +Setting `multiArgs` to `true` means the resulting promise will always fulfill with an array of the callback's success value(s). This is needed because promises only support a single success value while +some callback API's have multiple success value. The default is to ignore all but the first success value of a callback function. + +Using manual resolver: + +```js +var Promise = require("bluebird"); +// "email-templates" doesn't expose prototypes for promisification +var emailTemplates = Promise.promisify(require('email-templates')); +var templatesDir = path.join(__dirname, 'templates'); + + +emailTemplates(templatesDir).then(function(template) { + return Promise.fromCallback(function(callback) { + return template("newsletter", callback); + }, {multiArgs: true}).spread(function(html, text) { + console.log(html, text); + }); +}); +``` + +The same can also be written more concisely with `Function.prototype.bind`: + +```js +var Promise = require("bluebird"); +// "email-templates" doesn't expose prototypes for promisification +var emailTemplates = Promise.promisify(require('email-templates')); +var templatesDir = path.join(__dirname, 'templates'); + + +emailTemplates(templatesDir).then(function(template) { + return Promise.fromCallback(template.bind(null, "newsletter"), {multiArgs: true}) + .spread(function(html, text) { + console.log(html, text); + }); +}); +``` +
+ +
+ + diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.join.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.join.md new file mode 100644 index 0000000..d5f693b --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.join.md @@ -0,0 +1,87 @@ +--- +layout: api +id: promise.join +title: Promise.join +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Promise.join + +```js +Promise.join( + Promise|any values..., + function handler +) -> Promise +``` + + +For coordinating multiple concurrent discrete promises. While [`.all`](.) is good for handling a dynamically sized list of uniform promises, `Promise.join` is much easier (and more performant) to use when you have a fixed amount of discrete promises that you want to coordinate concurrently. The final parameter, handler function, will be invoked with the result values of all of the fufilled promises. For example: + +```js +var Promise = require("bluebird"); +var join = Promise.join; + +join(getPictures(), getComments(), getTweets(), + function(pictures, comments, tweets) { + console.log("in total: " + pictures.length + comments.length + tweets.length); +}); +``` + +```js +var Promise = require("bluebird"); +var fs = Promise.promisifyAll(require("fs")); +var pg = require("pg"); +Promise.promisifyAll(pg, { + filter: function(methodName) { + return methodName === "connect" + }, + multiArgs: true +}); +// Promisify rest of pg normally +Promise.promisifyAll(pg); +var join = Promise.join; +var connectionString = "postgres://username:password@localhost/database"; + +var fContents = fs.readFileAsync("file.txt", "utf8"); +var fStat = fs.statAsync("file.txt"); +var fSqlClient = pg.connectAsync(connectionString).spread(function(client, done) { + client.close = done; + return client; +}); + +join(fContents, fStat, fSqlClient, function(contents, stat, sqlClient) { + var query = " \ + INSERT INTO files (byteSize, contents) \ + VALUES ($1, $2) \ + "; + return sqlClient.queryAsync(query, [stat.size, contents]).thenReturn(query); +}) +.then(function(query) { + console.log("Successfully ran the Query: " + query); +}) +.finally(function() { + // This is why you want to use Promise.using for resource management + if (fSqlClient.isFulfilled()) { + fSqlClient.value().close(); + } +}); +``` + +*Note: In 1.x and 0.x `Promise.join` used to be a `Promise.all` that took the values in as arguments instead of an array. This behavior has been deprecated but is still supported partially - when the last argument is an immediate function value the new semantics will apply* +
+ +
+ + diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.longstacktraces.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.longstacktraces.md new file mode 100644 index 0000000..d994f8f --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.longstacktraces.md @@ -0,0 +1,93 @@ +--- +layout: api +id: promise.longstacktraces +title: Promise.longStackTraces +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+## ~~Promise.longStackTraces~~ + +This method is deprecated. Use [Promise.config](/docs/api/promise.config.html) instead. + +```js +Promise.config({ + longStackTraces: true +}) +``` + +--- + +```js +Promise.longStackTraces() -> undefined +``` + +Call this right after the library is loaded to enabled long stack traces. Long stack traces cannot be disabled after being enabled, and cannot be enabled after promises have alread been created. Long stack traces imply a substantial performance penalty, around 4-5x for throughput and 0.5x for latency. + +Long stack traces are enabled by default in the debug build. + +To enable them in all instances of bluebird in node.js, use the environment variable `BLUEBIRD_DEBUG`: + +``` +BLUEBIRD_DEBUG=1 node server.js +``` + +Setting the environment variable `NODE_ENV` to `"development"` also automatically enables long stack traces. + +You should enabled long stack traces if you want better debugging experience. For example: + +```js +Promise.longStackTraces(); +Promise.resolve().then(function outer() { + return Promise.resolve().then(function inner() { + return Promise.resolve().then(function evenMoreInner() { + a.b.c.d() + }).catch(function catcher(e) { + console.error(e.stack); + }); + }); +}); +``` + +Gives + + ReferenceError: a is not defined + at evenMoreInner (:6:13) + From previous event: + at inner (:5:24) + From previous event: + at outer (:4:20) + From previous event: + at :3:9 + at Object.InjectedScript._evaluateOn (:581:39) + at Object.InjectedScript._evaluateAndWrap (:540:52) + at Object.InjectedScript.evaluate (:459:21) + +While with long stack traces disabled, you would get: + + ReferenceError: a is not defined + at evenMoreInner (:6:13) + at tryCatch1 (:41:19) + at Promise$_resolvePromise [as _resolvePromise] (:1739:13) + at Promise$_resolveLast [as _resolveLast] (:1520:14) + at Async$_consumeFunctionBuffer [as _consumeFunctionBuffer] (:560:33) + at Async$consumeFunctionBuffer (:515:14) + at MutationObserver.Promise$_Deferred (:433:17) + +On client side, long stack traces currently only work in recent Firefoxes, Chrome and Internet Explorer 10+. +
+ +
+ + diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.map.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.map.md new file mode 100644 index 0000000..e8b2674 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.map.md @@ -0,0 +1,138 @@ +--- +layout: api +id: promise.map +title: Promise.map +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Promise.map + +```js +Promise.map( + Iterable|Promise> input, + function(any item, int index, int length) mapper, + [Object {concurrency: int=Infinity} options] +) -> Promise +``` + +Given an [`Iterable`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols)\(arrays are `Iterable`\), or a promise of an `Iterable`, which produces promises (or a mix of promises and values), iterate over all the values in the `Iterable` into an array and [map the array to another](http://en.wikipedia.org/wiki/Map_\(higher-order_function\)) using the given `mapper` function. + +Promises returned by the `mapper` function are awaited for and the returned promise doesn't fulfill until all mapped promises have fulfilled as well. If any promise in the array is rejected, or any promise returned by the `mapper` function is rejected, the returned promise is rejected as well. + +The mapper function for a given item is called as soon as possible, that is, when the promise for that item's index in the input array is fulfilled. This doesn't mean that the result array has items in random order, it means that `.map` can be used for concurrency coordination unlike `.all`. + +A common use of `Promise.map` is to replace the `.push`+`Promise.all` boilerplate: + +```js +var promises = []; +for (var i = 0; i < fileNames.length; ++i) { + promises.push(fs.readFileAsync(fileNames[i])); +} +Promise.all(promises).then(function() { + console.log("done"); +}); + +// Using Promise.map: +Promise.map(fileNames, function(fileName) { + // Promise.map awaits for returned promises as well. + return fs.readFileAsync(fileName); +}).then(function() { + console.log("done"); +}); + +``` + +A more involved example: + +```js +var Promise = require("bluebird"); +var join = Promise.join; +var fs = Promise.promisifyAll(require("fs")); +fs.readdirAsync(".").map(function(fileName) { + var stat = fs.statAsync(fileName); + var contents = fs.readFileAsync(fileName).catch(function ignore() {}); + return join(stat, contents, function(stat, contents) { + return { + stat: stat, + fileName: fileName, + contents: contents + } + }); +// The return value of .map is a promise that is fulfilled with an array of the mapped values +// That means we only get here after all the files have been statted and their contents read +// into memory. If you need to do more operations per file, they should be chained in the map +// callback for concurrency. +}).call("sort", function(a, b) { + return a.fileName.localeCompare(b.fileName); +}).each(function(file) { + var contentLength = file.stat.isDirectory() ? "(directory)" : file.contents.length + " bytes"; + console.log(file.fileName + " last modified " + file.stat.mtime + " " + contentLength) +}); +``` + +####Map Option: concurrency + +You may optionally specify a concurrency limit: + +```js +...map(..., {concurrency: 3}); +``` + +The concurrency limit applies to Promises returned by the mapper function and it basically limits the number of Promises created. For example, if `concurrency` is `3` and the mapper callback has been called enough so that there are three returned Promises currently pending, no further callbacks are called until one of the pending Promises resolves. So the mapper function will be called three times and it will be called again only after at least one of the Promises resolves. + +Playing with the first example with and without limits, and seeing how it affects the duration when reading 20 files: + +```js +var Promise = require("bluebird"); +var join = Promise.join; +var fs = Promise.promisifyAll(require("fs")); +var concurrency = parseFloat(process.argv[2] || "Infinity"); +console.time("reading files"); +fs.readdirAsync(".").map(function(fileName) { + var stat = fs.statAsync(fileName); + var contents = fs.readFileAsync(fileName).catch(function ignore() {}); + return join(stat, contents, function(stat, contents) { + return { + stat: stat, + fileName: fileName, + contents: contents + } + }); +// The return value of .map is a promise that is fulfilled with an array of the mapped values +// That means we only get here after all the files have been statted and their contents read +// into memory. If you need to do more operations per file, they should be chained in the map +// callback for concurrency. +}, {concurrency: concurrency}).call("sort", function(a, b) { + return a.fileName.localeCompare(b.fileName); +}).then(function() { + console.timeEnd("reading files"); +}); +``` + +```bash +$ sync && echo 3 > /proc/sys/vm/drop_caches +$ node test.js 1 +reading files 35ms +$ sync && echo 3 > /proc/sys/vm/drop_caches +$ node test.js Infinity +reading files: 9ms +``` + +The order `map` calls the mapper function on the array elements is not specified, there is no guarantee on the order in which it'll execute the `map`er on the elements. For order guarantee in sequential execution - see [Promise.mapSeries](.). +
+ +
+ + diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.mapseries.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.mapseries.md new file mode 100644 index 0000000..9959088 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.mapseries.md @@ -0,0 +1,57 @@ +--- +layout: api +id: promise.mapseries +title: Promise.mapSeries +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Promise.mapSeries + +```js +Promise.mapSeries( + Iterable|Promise> input, + function(any item, int index, int length) mapper +) -> Promise +``` + +Given an [`Iterable`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols)\(arrays are `Iterable`\), or a promise of an `Iterable`, which produces promises (or a mix of promises and values), iterate over all the values in the `Iterable` into an array and iterate over the array serially, in-order. + +Returns a promise for an array that contains the values returned by the `iterator` function in their respective positions. The iterator won't be called for an item until its previous item, and the promise returned by the iterator for that item are fulfilled. This results in a `mapSeries` kind of utility but it can also be used simply as a side effect iterator similar to [`Array#forEach`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach). + +If any promise in the input array is rejected or any promise returned by the iterator function is rejected, the result will be rejected as well. + +Example where [.mapSeries](.)\(the instance method\) is used for iterating with side effects: + +```js +// Source: http://jakearchibald.com/2014/es7-async-functions/ +function loadStory() { + return getJSON('story.json') + .then(function(story) { + addHtmlToPage(story.heading); + return story.chapterURLs.map(getJSON); + }) + .mapSeries(function(chapter) { addHtmlToPage(chapter.html); }) + .then(function() { addTextToPage("All done"); }) + .catch(function(err) { addTextToPage("Argh, broken: " + err.message); }) + .then(function() { document.querySelector('.spinner').style.display = 'none'; }); +} +``` + +
+
+ +
+ + diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.method.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.method.md new file mode 100644 index 0000000..a935178 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.method.md @@ -0,0 +1,72 @@ +--- +layout: api +id: promise.method +title: Promise.method +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Promise.method + +```js +Promise.method(function(...arguments) fn) -> function +``` + + +Returns a new function that wraps the given function `fn`. The new function will always return a promise that is fulfilled with the original functions return values or rejected with thrown exceptions from the original function. + +This method is convenient when a function can sometimes return synchronously or throw synchronously. + +Example without using `Promise.method`: + +```js +MyClass.prototype.method = function(input) { + if (!this.isValid(input)) { + return Promise.reject(new TypeError("input is not valid")); + } + + if (this.cache(input)) { + return Promise.resolve(this.someCachedValue); + } + + return db.queryAsync(input).bind(this).then(function(value) { + this.someCachedValue = value; + return value; + }); +}; +``` + +Using the same function `Promise.method`, there is no need to manually wrap direct return or throw values into a promise: + +```js +MyClass.prototype.method = Promise.method(function(input) { + if (!this.isValid(input)) { + throw new TypeError("input is not valid"); + } + + if (this.cache(input)) { + return this.someCachedValue; + } + + return db.queryAsync(input).bind(this).then(function(value) { + this.someCachedValue = value; + return value; + }); +}); +``` +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.noconflict.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.noconflict.md new file mode 100644 index 0000000..219ac3d --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.noconflict.md @@ -0,0 +1,47 @@ +--- +layout: api +id: promise.noconflict +title: Promise.noConflict +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Promise.noConflict + +```js +Promise.noConflict() -> Object +``` + + +This is relevant to browser environments with no module loader. + +Release control of the `Promise` namespace to whatever it was before this library was loaded. Returns a reference to the library namespace so you can attach it to something else. + +```html + + + + +``` +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.onpossiblyunhandledrejection.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.onpossiblyunhandledrejection.md new file mode 100644 index 0000000..61817db --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.onpossiblyunhandledrejection.md @@ -0,0 +1,42 @@ +--- +layout: api +id: promise.onpossiblyunhandledrejection +title: Promise.onPossiblyUnhandledRejection +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Promise.onPossiblyUnhandledRejection + +```js +Promise.onPossiblyUnhandledRejection(function(any error, Promise promise) handler) -> undefined +``` + + +*Note: this hook is specific to the bluebird instance its called on, application developers should use [global rejection events](/docs/api/error-management-configuration.html#global-rejection-events)* + +Add `handler` as the handler to call when there is a possibly unhandled rejection. The default handler logs the error stack to stderr or `console.error` in browsers. + +```js +Promise.onPossiblyUnhandledRejection(function(e, promise) { + throw e; +}); +``` + +Passing no value or a non-function will have the effect of removing any kind of handling for possibly unhandled rejections. +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.onunhandledrejectionhandled.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.onunhandledrejectionhandled.md new file mode 100644 index 0000000..88d41a3 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.onunhandledrejectionhandled.md @@ -0,0 +1,53 @@ +--- +layout: api +id: promise.onunhandledrejectionhandled +title: Promise.onUnhandledRejectionHandled +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Promise.onUnhandledRejectionHandled + +```js +Promise.onUnhandledRejectionHandled(function(Promise promise) handler) -> undefined +``` + + +*Note: this hook is specific to the bluebird instance its called on, application developers should use [global rejection events](/docs/api/error-management-configuration.html#global-rejection-events)* + +Add `handler` as the handler to call when a rejected promise that was reported as "possibly unhandled rejection" became handled. + +Together with `onPossiblyUnhandledRejection` these hooks can be used to implement a debugger that will show a list +of unhandled promise rejections updated in real time as promises become handled. + +For example: + +```js +var unhandledPromises = []; +Promise.onPossiblyUnhandledRejection(function(reason, promise) { + unhandledPromises.push(promise); + //Update some debugger UI +}); + +Promise.onUnhandledRejectionHandled(function(promise) { + var index = unhandledPromises.indexOf(promise); + unhandledPromises.splice(index, 1); + //Update the debugger UI +}); +``` +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.promisify.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.promisify.md new file mode 100644 index 0000000..553a479 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.promisify.md @@ -0,0 +1,78 @@ +--- +layout: api +id: promise.promisify +title: Promise.promisify +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Promise.promisify + +```js +Promise.promisify( + function(any arguments..., function callback) nodeFunction, + [Object { + multiArgs: boolean=false, + context: any=this + } options] +) -> function +``` + +Returns a function that will wrap the given `nodeFunction`. Instead of taking a callback, the returned function will return a promise whose fate is decided by the callback behavior of the given node function. The node function should conform to node.js convention of accepting a callback as last argument and calling that callback with error as the first argument and success value on the second argument. + +If the `nodeFunction` calls its callback with multiple success values, the fulfillment value will be the first fulfillment item. + +Setting `multiArgs` to `true` means the resulting promise will always fulfill with an array of the callback's success value(s). This is needed because promises only support a single success value while some callback API's have multiple success value. The default is to ignore all but the first success value of a callback function. + +If you pass a `context`, the `nodeFunction` will be called as a method on the `context`. + +Example of promisifying the asynchronous `readFile` of node.js `fs`-module: + +```js +var readFile = Promise.promisify(require("fs").readFile); + +readFile("myfile.js", "utf8").then(function(contents) { + return eval(contents); +}).then(function(result) { + console.log("The result of evaluating myfile.js", result); +}).catch(SyntaxError, function(e) { + console.log("File had syntax error", e); +//Catch any other error +}).catch(function(e) { + console.log("Error reading file", e); +}); +``` + +Note that if the node function is a method of some object, you can pass the object as the second argument like so: + +```js +var redisGet = Promise.promisify(redisClient.get, {context: redisClient}); +redisGet('foo').then(function() { + //... +}); +``` + +But this will also work: + +```js +var getAsync = Promise.promisify(redisClient.get); +getAsync.call(redisClient, 'foo').then(function() { + //... +}); +``` +
+ +
+ + diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.promisifyall.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.promisifyall.md new file mode 100644 index 0000000..3043ec9 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.promisifyall.md @@ -0,0 +1,262 @@ +--- +layout: api +id: promise.promisifyall +title: Promise.promisifyAll +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Promise.promisifyAll + +```js +Promise.promisifyAll( + Object target, + [Object { + suffix: String="Async", + multiArgs: boolean=false, + filter: boolean function(String name, function func, Object target, boolean passesDefaultFilter), + promisifier: function(function originalFunction, function defaultPromisifier) + } options] +) -> Object +``` + +Promisifies the entire object by going through the object's properties and creating an async equivalent of each function on the object and its prototype chain. The promisified method name will be the original method name suffixed with `suffix` (default is `"Async"`). Any class properties of the object (which is the case for the main export of many modules) are also promisified, both static and instance methods. Class property is a property with a function value that has a non-empty `.prototype` object. Returns the input object. + +Note that the original methods on the object are not overwritten but new methods are created with the `Async`-suffix. For example, if you `promisifyAll` the node.js `fs` object use `fs.statAsync` to call the promisified `stat` method. + +Example: + +```js +Promise.promisifyAll(require("redis")); + +//Later on, all redis client instances have promise returning functions: + +redisClient.hexistsAsync("myhash", "field").then(function(v) { + +}).catch(function(e) { + +}); +``` + +It also works on singletons or specific instances: + +```js +var fs = Promise.promisifyAll(require("fs")); + +fs.readFileAsync("myfile.js", "utf8").then(function(contents) { + console.log(contents); +}).catch(function(e) { + console.error(e.stack); +}); +``` + +See [promisification](#promisification) for more examples. + +The entire prototype chain of the object is promisified on the object. Only enumerable are considered. If the object already has a promisified version of the method, it will be skipped. The target methods are assumed to conform to node.js callback convention of accepting a callback as last argument and calling that callback with error as the first argument and success value on the second argument. If the node method calls its callback with multiple success values, the fulfillment value will be an array of them. + +If a method name already has an `"Async"`-suffix, it will be duplicated. E.g. `getAsync`'s promisified name is `getAsyncAsync`. + +####Option: suffix + +Optionally, you can define a custom suffix through the options object: + +```js +var fs = Promise.promisifyAll(require("fs"), {suffix: "MySuffix"}); +fs.readFileMySuffix(...).then(...); +``` + +All the above limitations apply to custom suffices: + +- Choose the suffix carefully, it must not collide with anything +- PascalCase the suffix +- The suffix must be a valid JavaScript identifier using ASCII letters +- Always use the same suffix everywhere in your application, you could create a wrapper to make this easier: + +```js +module.exports = function myPromisifyAll(target) { + return Promise.promisifyAll(target, {suffix: "MySuffix"}); +}; +``` + +####Option: multiArgs + +Setting `multiArgs` to `true` means the resulting promise will always fulfill with an array of the callback's success value(s). This is needed because promises only support a single success value while some callback API's have multiple success value. The default is to ignore all but the first success value of a callback function. + +If a module has multiple argument callbacks as an exception rather than the rule, you can filter out the multiple argument methods in first go and then promisify rest of the module in second go: + +```js +Promise.promisifyAll(something, { + filter: function(name) { + return name === "theMultiArgMethodIwant"; + }, + multiArgs: true +}); +// Rest of the methods +Promise.promisifyAll(something); +``` + +####Option: filter + +Optionally, you can define a custom filter through the options object: + +```js +Promise.promisifyAll(..., { + filter: function(name, func, target, passesDefaultFilter) { + // name = the property name to be promisified without suffix + // func = the function + // target = the target object where the promisified func will be put with name + suffix + // passesDefaultFilter = whether the default filter would be passed + // return boolean (return value is coerced, so not returning anything is same as returning false) + + return passesDefaultFilter && ... + } +}) +``` + +The default filter function will ignore properties that start with a leading underscore, properties that are not valid JavaScript identifiers and constructor functions (function which have enumerable properties in their `.prototype`). + + +####Option: promisifier + +Optionally, you can define a custom promisifier, so you could promisifyAll e.g. the chrome APIs used in Chrome extensions. + +The promisifier gets a reference to the original method and should return a function which returns a promise. + +```js +function DOMPromisifier(originalMethod) { + // return a function + return function promisified() { + var args = [].slice.call(arguments); + // Needed so that the original method can be called with the correct receiver + var self = this; + // which returns a promise + return new Promise(function(resolve, reject) { + args.push(resolve, reject); + originalMethod.apply(self, args); + }); + }; +} + +// Promisify e.g. chrome.browserAction +Promise.promisifyAll(chrome.browserAction, {promisifier: DOMPromisifier}); + +// Later +chrome.browserAction.getTitleAsync({tabId: 1}) + .then(function(result) { + + }); +``` + +Combining `filter` with `promisifier` for the restler module to promisify event emitter: + +```js +var Promise = require("bluebird"); +var restler = require("restler"); +var methodNamesToPromisify = "get post put del head patch json postJson putJson".split(" "); + +function EventEmitterPromisifier(originalMethod) { + // return a function + return function promisified() { + var args = [].slice.call(arguments); + // Needed so that the original method can be called with the correct receiver + var self = this; + // which returns a promise + return new Promise(function(resolve, reject) { + // We call the originalMethod here because if it throws, + // it will reject the returned promise with the thrown error + var emitter = originalMethod.apply(self, args); + + emitter + .on("success", function(data, response) { + resolve([data, response]); + }) + .on("fail", function(data, response) { + // Erroneous response like 400 + resolve([data, response]); + }) + .on("error", function(err) { + reject(err); + }) + .on("abort", function() { + reject(new Promise.CancellationError()); + }) + .on("timeout", function() { + reject(new Promise.TimeoutError()); + }); + }); + }; +}; + +Promise.promisifyAll(restler, { + filter: function(name) { + return methodNamesToPromisify.indexOf(name) > -1; + }, + promisifier: EventEmitterPromisifier +}); + +// ... + +// Later in some other file + +var restler = require("restler"); +restler.getAsync("http://...", ...,).spread(function(data, response) { + +}) +``` + +Using `defaultPromisifier` parameter to add enhancements on top of normal node +promisification: + +```js +var fs = Promise.promisifyAll(require("fs"), { + promisifier: function(originalFunction, defaultPromisifer) { + var promisified = defaultPromisifier(originalFunction); + + return function() { + // Enhance normal promisification by supporting promises as + // arguments + + var args = [].slice.call(arguments); + var self = this; + return Promise.all(args).then(function(awaitedArgs) { + return promisified.apply(self, awaitedArgs); + }); + }; + } +}); + +// All promisified fs functions now await their arguments if they are promises +var version = fs.readFileAsync("package.json", "utf8").then(JSON.parse).get("version"); +fs.writeFileAsync("the-version.txt", version, "utf8"); +``` + +####Promisifying multiple classes in one go + +You can promisify multiple classes in one go by constructing an array out of the classes and passing it to `promisifyAll`: + +```js +var Pool = require("mysql/lib/Pool"); +var Connection = require("mysql/lib/Connection"); +Promise.promisifyAll([Pool, Connection]); +``` + +This works because the array acts as a "module" where the indices are the "module"'s properties for classes. + + + +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.props.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.props.md new file mode 100644 index 0000000..35e9fa9 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.props.md @@ -0,0 +1,108 @@ +--- +layout: api +id: promise.props +title: Promise.props +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Promise.props + +```js +Promise.props(Object|Map|Promise input) -> Promise +``` + +Like [`.all`](.) but for object properties or `Map`s\* entries instead of iterated values. Returns a promise that is fulfilled when all the properties of the object or the `Map`'s' values\*\* are fulfilled. The promise's fulfillment value is an object or a `Map` with fulfillment values at respective keys to the original object or a `Map`. If any promise in the object or `Map` rejects, the returned promise is rejected with the rejection reason. + +If `object` is a trusted `Promise`, then it will be treated as a promise for object rather than for its properties. All other objects (except `Map`s) are treated for their properties as is returned by `Object.keys` - the object's own enumerable properties. + +*\*Only the native [ECMAScript 6 `Map`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) implementation that is provided by the environment as is is supported* + +*\*\*If the map's keys happen to be `Promise`s, they are not awaited for and the resulting `Map` will still have those same `Promise` instances as keys* + + +```js +Promise.props({ + pictures: getPictures(), + comments: getComments(), + tweets: getTweets() +}).then(function(result) { + console.log(result.tweets, result.pictures, result.comments); +}); +``` + +```js +var Promise = require("bluebird"); +var fs = Promise.promisifyAll(require("fs")); +var _ = require("lodash"); +var path = require("path"); +var util = require("util"); + +function directorySizeInfo(root) { + var counts = {dirs: 0, files: 0}; + var stats = (function reader(root) { + return fs.readdirAsync(root).map(function(fileName) { + var filePath = path.join(root, fileName); + return fs.statAsync(filePath).then(function(stat) { + stat.filePath = filePath; + if (stat.isDirectory()) { + counts.dirs++; + return reader(filePath) + } + counts.files++; + return stat; + }); + }).then(_.flatten); + })(root).then(_); + + var smallest = stats.call("min", "size").call("pick", "size", "filePath").call("value"); + var largest = stats.call("max", "size").call("pick", "size", "filePath").call("value"); + var totalSize = stats.call("pluck", "size").call("reduce", function(a, b) { + return a + b; + }, 0); + + return Promise.props({ + counts: counts, + smallest: smallest, + largest: largest, + totalSize: totalSize + }); +} + + +directorySizeInfo(process.argv[2] || ".").then(function(sizeInfo) { + console.log(util.format(" \n\ + %d directories, %d files \n\ + Total size: %d bytes \n\ + Smallest file: %s with %d bytes \n\ + Largest file: %s with %d bytes \n\ + ", sizeInfo.counts.dirs, sizeInfo.counts.files, sizeInfo.totalSize, + sizeInfo.smallest.filePath, sizeInfo.smallest.size, + sizeInfo.largest.filePath, sizeInfo.largest.size)); +}); +``` + +Note that if you have no use for the result object other than retrieving the properties, it is more convenient to use [`Promise.join`](.): + +```js +Promise.join(getPictures(), getComments(), getTweets(), + function(pictures, comments, tweets) { + console.log(pictures, comments, tweets); +}); +``` +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.race.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.race.md new file mode 100644 index 0000000..c791829 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.race.md @@ -0,0 +1,33 @@ +--- +layout: api +id: promise.race +title: Promise.race +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Promise.race + +```js +Promise.race(Iterable|Promise> input) -> Promise +``` + +Given an [`Iterable`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols)\(arrays are `Iterable`\), or a promise of an `Iterable`, which produces promises (or a mix of promises and values), iterate over all the values in the `Iterable` into an array and return a promise that is fulfilled or rejected as soon as a promise in the array is fulfilled or rejected with the respective rejection reason or fulfillment value. + +This method is only implemented because it's in the ES6 standard. If you want to race promises to fulfillment the [`.any`](.) method is more appropriate as it doesn't qualify a rejected promise as the winner. It also has less surprises: `.race` must become infinitely pending if an empty array is passed but passing an empty array to [`.any`](.) is more usefully a `RangeError` +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.reduce.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.reduce.md new file mode 100644 index 0000000..f505065 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.reduce.md @@ -0,0 +1,53 @@ +--- +layout: api +id: promise.reduce +title: Promise.reduce +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Promise.reduce + +```js +Promise.reduce( + Iterable|Promise> input, + function(any accumulator, any item, int index, int length) reducer, + [any initialValue] +) -> Promise +``` + +Given an [`Iterable`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols)\(arrays are `Iterable`\), or a promise of an `Iterable`, which produces promises (or a mix of promises and values), iterate over all the values in the `Iterable` into an array and [reduce the array to a value](http://en.wikipedia.org/wiki/Fold_\(higher-order_function\)) using the given `reducer` function. + +If the reducer function returns a promise, then the result of the promise is awaited, before continuing with next iteration. If any promise in the array is rejected or a promise returned by the reducer function is rejected, the result is rejected as well. + +Read given files sequentially while summing their contents as an integer. Each file contains just the text `10`. + +```js +Promise.reduce(["file1.txt", "file2.txt", "file3.txt"], function(total, fileName) { + return fs.readFileAsync(fileName, "utf8").then(function(contents) { + return total + parseInt(contents, 10); + }); +}, 0).then(function(total) { + //Total is 30 +}); +``` + +*If `initialValue` is `undefined` (or a promise that resolves to `undefined`) and the iterable contains only 1 item, the callback will not be called and the iterable's single item is returned. If the iterable is empty, the callback will not be called and `initialValue` is returned (which may be `undefined`).* + +`Promise.reduce` will start calling the reducer as soon as possible, this is why you might want to use it over `Promise.all` (which awaits for the entire array before you can call [`Array#reduce`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce) on it). +
+ +
+ + diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.reject.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.reject.md new file mode 100644 index 0000000..c1502d1 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.reject.md @@ -0,0 +1,32 @@ +--- +layout: api +id: promise.reject +title: Promise.reject +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Promise.reject + +```js +Promise.reject(any error) -> Promise +``` + + +Create a promise that is rejected with the given `error`. +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.resolve.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.resolve.md new file mode 100644 index 0000000..ed5e2dc --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.resolve.md @@ -0,0 +1,47 @@ +--- +layout: api +id: promise.resolve +title: Promise.resolve +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Promise.resolve + +```js +Promise.resolve(Promise|any value) -> Promise +``` + + +Create a promise that is resolved with the given value. If `value` is already a trusted `Promise`, it is returned as is. If `value` is not a thenable, a fulfilled Promise is returned with `value` as its fulfillment value. If `value` is a thenable (Promise-like object, like those returned by jQuery's `$.ajax`), returns a trusted Promise that assimilates the state of the thenable. + +Example: (`$` is jQuery) + +```js +Promise.resolve($.get("http://www.google.com")).then(function() { + //Returning a thenable from a handler is automatically + //cast to a trusted Promise as per Promises/A+ specification + return $.post("http://www.yahoo.com"); +}).then(function() { + +}).catch(function(e) { + //jQuery doesn't throw real errors so use catch-all + console.log(e.statusText); +}); +``` +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.setscheduler.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.setscheduler.md new file mode 100644 index 0000000..fcc1284 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.setscheduler.md @@ -0,0 +1,54 @@ +--- +layout: api +id: promise.setscheduler +title: Promise.setScheduler +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Promise.setScheduler + +```js +Promise.setScheduler(function(function fn) scheduler) -> function +``` + + +Scheduler should be a function that asynchronously schedules the calling of the passed in function: + +```js +// This is just an example of how to use the api, there is no reason to do this +Promise.setScheduler(function(fn) { + setTimeout(fn, 0); +}); +``` + +Setting a custom scheduler could be necessary when you need a faster way to schedule functions than bluebird does by default. It also makes bluebird possible to use in platforms where normal timing constructs like `setTimeout` and `process.nextTick` are not available (like Nashhorn). + +You can also use it as a hook: + +```js +// This will synchronize bluebird promise queue flushing with angulars queue flushing +// Angular is also now responsible for choosing the actual scheduler +Promise.setScheduler(function(fn) { + $rootScope.$evalAsync(fn); +}); +``` + +> **Danger** - in order to keep bluebird promises [Promises/A+](http://www.promisesaplus) compliant a scheduler that executes the function asynchronously (like the examples in this page) must be used. + +
+ +
+ + diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.some.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.some.md new file mode 100644 index 0000000..ec309ec --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.some.md @@ -0,0 +1,62 @@ +--- +layout: api +id: promise.some +title: Promise.some +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Promise.some + +```js +Promise.some( + Iterable|Promise> input, + int count +) -> Promise +``` + +Given an [`Iterable`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols)\(arrays are `Iterable`\), or a promise of an `Iterable`, which produces promises (or a mix of promises and values), iterate over all the values in the `Iterable` into an array and return a promise that is fulfilled as soon `count` promises are fulfilled in the array. The fulfillment value is an array with `count` values in the order they were fulfilled. + +This example pings 4 nameservers, and logs the fastest 2 on console: + +```js +Promise.some([ + ping("ns1.example.com"), + ping("ns2.example.com"), + ping("ns3.example.com"), + ping("ns4.example.com") +], 2).spread(function(first, second) { + console.log(first, second); +}); +``` + +If too many promises are rejected so that the promise can never become fulfilled, it will be immediately rejected with an [AggregateError](.) of the rejection reasons in the order they were thrown in. + +You can get a reference to [AggregateError](.) from `Promise.AggregateError`. + +```js +Promise.some(...) + .then(...) + .then(...) + .catch(Promise.AggregateError, function(err) { + err.forEach(function(e) { + console.error(e.stack); + }); + }); +``` +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.try.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.try.md new file mode 100644 index 0000000..2ae28d8 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.try.md @@ -0,0 +1,50 @@ +--- +layout: api +id: promise.try +title: Promise.try +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Promise.try + +```js +Promise.try(function() fn) -> Promise +``` +```js +Promise.attempt(function() fn) -> Promise +``` + + +Start the chain of promises with `Promise.try`. Any synchronous exceptions will be turned into rejections on the returned promise. + +```js +function getUserById(id) { + return Promise.try(function() { + if (typeof id !== "number") { + throw new Error("id must be a number"); + } + return db.getUserById(id); + }); +} +``` + +Now if someone uses this function, they will catch all errors in their Promise `.catch` handlers instead of having to handle both synchronous and asynchronous exception flows. + +*For compatibility with earlier ECMAScript version, an alias `Promise.attempt` is provided for [`Promise.try`](.).* +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.using.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.using.md new file mode 100644 index 0000000..7bc3975 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promise.using.md @@ -0,0 +1,116 @@ +--- +layout: api +id: promise.using +title: Promise.using +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Promise.using + +```js +Promise.using( + Promise|Disposer|any resource, + Promise|Disposer|any resource..., + function(any resources...) handler +) -> Promise +``` +```js +Promise.using( + Array resources, + function(Array resources) handler +) -> Promise +``` + + +In conjunction with [`.disposer`](.), `using` will make sure that no matter what, the specified disposer will be called when the promise returned by the callback passed to `using` has settled. The disposer is necessary because there is no standard interface in node for disposing resources. + +Here is a simple example (where `getConnection()` has been defined to return a proper Disposer object) + +```js +using(getConnection(), function(connection) { + // Don't leak the `connection` variable anywhere from here + // it is only guaranteed to be open while the promise returned from + // this callback is still pending + return connection.queryAsync("SELECT * FROM TABLE"); + // Code that is chained from the promise created in the line above + // still has access to `connection` +}).then(function(rows) { + // The connection has been closed by now + console.log(rows); +}); +``` + +Using multiple resources: + +```js +using(getConnection(), function(conn1) { + return using(getConnection(), function(conn2) { + // use conn1 and conn 2 here + }); +}).then(function() { + // Both connections closed by now +}) +``` + +The above can also be written as (with a caveat, see below) + +```js +using(getConnection(), getConnection(), function(conn1, conn2) { + // use conn1 and conn2 +}).then(function() { + // Both connections closed by now +}) +``` + +However, if the second `getConnection` throws **synchronously**, the first connection is leaked. This will not happen +when using APIs through bluebird promisified methods though. You can wrap functions that could throw in [`Promise.method`](.) which will turn synchronous rejections into rejected promises. + +Note that you can mix promises and disposers, so that you can acquire all the things you need in parallel instead of sequentially + +```js +// The files don't need resource management but you should +// still start the process of reading them even before you have the connection +// instead of waiting for the connection + +// The connection is always closed, no matter what fails at what point +using(readFile("1.txt"), readFile("2.txt"), getConnection(), function(txt1, txt2, conn) { + // use conn and have access to txt1 and txt2 +}); +``` + + +
+ +You can also pass the resources in an array in the first argument. In this case the handler function will only be called with one argument that is the array containing the resolved resources in respective positions in the array. Example: + +```js +var connectionPromises = [getConnection(), getConnection()]; + +using(connectionPromises, function(connections) { + var conn1 = connections[0]; + var conn2 = connections[1]; + // use conn1 and conn2 +}).then(function() { + // Both connections closed by now +}) + +``` + + +
+ +
+ + diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/promiseinspection.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promiseinspection.md new file mode 100644 index 0000000..72bc10a --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promiseinspection.md @@ -0,0 +1,38 @@ +--- +layout: api +id: promiseinspection +title: PromiseInspection +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##PromiseInspection + +```js +interface PromiseInspection { + any reason() + any value() + boolean isPending() + boolean isRejected() + boolean isFulfilled() + boolean isCancelled() +} +``` + +This interface is implemented by `Promise` instances as well as the `PromiseInspection` result given by [.reflect()](.). +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/promisification.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promisification.md new file mode 100644 index 0000000..15ea485 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/promisification.md @@ -0,0 +1,150 @@ +--- +layout: api +id: promisification +title: Promisification +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Promisification + +Promisification means converting an existing promise-unaware API to a promise-returning API. + +The usual way to use promises in node is to [Promise.promisifyAll](.) some API and start exclusively calling promise returning versions of the APIs methods. E.g. + +```js +var fs = require("fs"); +Promise.promisifyAll(fs); +// Now you can use fs as if it was designed to use bluebird promises from the beginning + +fs.readFileAsync("file.js", "utf8").then(...) +``` + +Note that the above is an exceptional case because `fs` is a singleton instance. Most libraries can be promisified by requiring the library's classes (constructor functions) and calling promisifyAll on the `.prototype`. This only needs to be done once in the entire application's lifetime and after that you may use the library's methods exactly as they are documented, except by appending the `"Async"`-suffix to method calls and using the promise interface instead of the callback interface. + +As a notable exception in `fs`, `fs.existsAsync` doesn't work as expected, because Node's `fs.exists` doesn't call back with error as first argument. More at [#418](.). One possible workaround is using `fs.statAsync`. + +Some examples of the above practice applied to some popular libraries: + +```js +// The most popular redis module +var Promise = require("bluebird"); +Promise.promisifyAll(require("redis")); +``` + +```js +// The most popular mongodb module +var Promise = require("bluebird"); +Promise.promisifyAll(require("mongodb")); +``` + +```js +// The most popular mysql module +var Promise = require("bluebird"); +// Note that the library's classes are not properties of the main export +// so we require and promisifyAll them manually +Promise.promisifyAll(require("mysql/lib/Connection").prototype); +Promise.promisifyAll(require("mysql/lib/Pool").prototype); +``` + +```js +// Mongoose +var Promise = require("bluebird"); +Promise.promisifyAll(require("mongoose")); +``` + +```js +// Request +var Promise = require("bluebird"); +Promise.promisifyAll(require("request")); +// Use request.getAsync(...) not request(..), it will not return a promise +``` + +```js +// mkdir +var Promise = require("bluebird"); +Promise.promisifyAll(require("mkdirp")); +// Use mkdirp.mkdirpAsync not mkdirp(..), it will not return a promise +``` + +```js +// winston +var Promise = require("bluebird"); +Promise.promisifyAll(require("winston")); +``` + +```js +// rimraf +var Promise = require("bluebird"); +// The module isn't promisified but the function returned is +var rimrafAsync = Promise.promisify(require("rimraf")); +``` + +```js +// xml2js +var Promise = require("bluebird"); +Promise.promisifyAll(require("xml2js")); +``` + +```js +// jsdom +var Promise = require("bluebird"); +Promise.promisifyAll(require("jsdom")); +``` + +```js +// fs-extra +var Promise = require("bluebird"); +Promise.promisifyAll(require("fs-extra")); +``` + +```js +// prompt +var Promise = require("bluebird"); +Promise.promisifyAll(require("prompt")); +``` + +```js +// Nodemailer +var Promise = require("bluebird"); +Promise.promisifyAll(require("nodemailer")); +``` + +```js +// ncp +var Promise = require("bluebird"); +Promise.promisifyAll(require("ncp")); +``` + +```js +// pg +var Promise = require("bluebird"); +Promise.promisifyAll(require("pg")); +``` + +In all of the above cases the library made its classes available in one way or another. If this is not the case, you can still promisify by creating a throwaway instance: + +```js +var ParanoidLib = require("..."); +var throwAwayInstance = ParanoidLib.createInstance(); +Promise.promisifyAll(Object.getPrototypeOf(throwAwayInstance)); +// Like before, from this point on, all new instances + even the throwAwayInstance suddenly support promises +``` + +See also [`Promise.promisifyAll`](.). +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/props.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/props.md new file mode 100644 index 0000000..be2e5a4 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/props.md @@ -0,0 +1,31 @@ +--- +layout: api +id: props +title: .props +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.props + +```js +.props() -> Promise +``` + +Same as [Promise.props(this)](.). +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/race.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/race.md new file mode 100644 index 0000000..d511c14 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/race.md @@ -0,0 +1,31 @@ +--- +layout: api +id: race +title: .race +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.race + +```js +.race() -> Promise +``` + +Same as [Promise.race(this)](.). +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/reason.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/reason.md new file mode 100644 index 0000000..8f5a92e --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/reason.md @@ -0,0 +1,36 @@ +--- +layout: api +id: reason +title: .reason +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.reason + +```js +.reason() -> any +``` + + +Get the rejection reason of this promise. Throws an error if the promise isn't rejected - it is a bug to call this method on an unrejected promise. + +You should check if this promise is [.isRejected()](.) in code paths where it's guaranteed that this promise is rejected. + +
+
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/reduce.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/reduce.md new file mode 100644 index 0000000..979ee36 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/reduce.md @@ -0,0 +1,34 @@ +--- +layout: api +id: reduce +title: .reduce +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.reduce + +```js +.reduce( + function(any previousValue, any currentValue, int index, int length) reducer, + [any initialValue] +) -> Promise +``` + +Same as [Promise.reduce(this, reducer, initialValue)](.). +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/reflect.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/reflect.md new file mode 100644 index 0000000..00d1ce8 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/reflect.md @@ -0,0 +1,66 @@ +--- +layout: api +id: reflect +title: .reflect +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.reflect + +```js +.reflect() -> Promise +``` + + +The [`.reflect`](.) method returns a promise that is always successful when this promise is settled. Its fulfillment value is an object that implements the [PromiseInspection](.) interface and reflects the resolution of this promise. + +Using `.reflect()` to implement `settleAll` (wait until all promises in an array are either rejected or fulfilled) functionality + +```js +var promises = [getPromise(), getPromise(), getPromise()]; +Promise.all(promises.map(function(promise) { + return promise.reflect(); +})).each(function(inspection) { + if (inspection.isFulfilled()) { + console.log("A promise in the array was fulfilled with", inspection.value()); + } else { + console.error("A promise in the array was rejected with", inspection.reason()); + } +}); +``` + +Using `.reflect()` to implement `settleProps` (like settleAll for an object's properties) functionality + +```js +var object = { + first: getPromise1(), + second: getPromise2() +}; +Promise.props(Object.keys(object).reduce(function(newObject, key) { + newObject[key] = object[key].reflect(); + return newObject; +}, {})).then(function(object) { + if (object.first.isFulfilled()) { + console.log("first was fulfilled with", object.first.value()); + } else { + console.error("first was rejected with", object.first.reason()); + } +}) +``` +
+ +
+ + diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/resource-management.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/resource-management.md new file mode 100644 index 0000000..8c07b40 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/resource-management.md @@ -0,0 +1,67 @@ +--- +layout: api +id: resource-management +title: Resource management +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Resource management + +Managing resources properly without leaks can be challenging. Simply using `.finally` is not enough as the following example demonstrates: + +```js +function doStuff() { + return Promise.all([ + connectionPool.getConnectionAsync(), + fs.readFileAsync("file.sql", "utf8") + ]).spread(function(connection, fileContents) { + return connection.query(fileContents).finally(function() { + connection.close(); + }); + }).then(function() { + console.log("query successful and connection closed"); + }); +} +``` + +It is very subtle but over time this code will exhaust the entire connection pool and the server needs to be restarted. This is because +reading the file may fail and then of course `.spread` is not called at all and thus the connection is not closed. + +One could solve this by either reading the file first or connecting first, and only proceeding if the first step succeeds. However, +this would lose a lot of the benefits of using asynchronity and we might almost as well go back to using simple synchronous code. + +We can do better, retaining concurrency and not leaking resources, by using: + +* [disposers](disposer.html), objects that wrap a resource and a method to release that resource, together with +* [`Promise.using`](promise.using.html), a function to safely use disposers in a way that automatically calls their release method + +```js +var using = Promise.using; + +using(getConnection(), + fs.readFileAsync("file.sql", "utf8"), function(connection, fileContents) { + return connection.query(fileContents); +}).then(function() { + console.log("query successful and connection closed"); +}); +``` + +Continue by reading about [disposers](disposer.html) and [`Promise.using`](promise.using.html) + +
+ +
+ + diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/return.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/return.md new file mode 100644 index 0000000..60efa5d --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/return.md @@ -0,0 +1,75 @@ +--- +layout: api +id: return +title: .return +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.return + +```js +.return(any value) -> Promise +``` +```js +.thenReturn(any value) -> Promise +``` + +Convenience method for: + +```js +.then(function() { + return value; +}); +``` + +in the case where `value` doesn't change its value because its binding time is different than when using a closure. + +That means `value` is bound at the time of calling [`.return`](.) so this will not work as expected: + +```js +function getData() { + var data; + + return query().then(function(result) { + data = result; + }).return(data); +} +``` + +because `data` is `undefined` at the time `.return` is called. + +Function that returns the full path of the written file: + +```js +var Promise = require("bluebird"); +var fs = Promise.promisifyAll(require("fs")); +var baseDir = process.argv[2] || "."; + +function writeFile(path, contents) { + var fullpath = require("path").join(baseDir, path); + return fs.writeFileAsync(fullpath, contents).thenReturn(fullpath); +} + +writeFile("test.txt", "this is text").then(function(fullPath) { + console.log("Successfully file at: " + fullPath); +}); +``` + +*For compatibility with earlier ECMAScript version, an alias `.thenReturn` is provided for [`.return`](.).* +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/some.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/some.md new file mode 100644 index 0000000..661700d --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/some.md @@ -0,0 +1,31 @@ +--- +layout: api +id: some +title: .some +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.some + +```js +.some(int count) -> Promise +``` + +Same as [Promise.some(this, count)](.). +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/spread.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/spread.md new file mode 100644 index 0000000..eb3ff99 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/spread.md @@ -0,0 +1,69 @@ +--- +layout: api +id: spread +title: .spread +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.spread + +```js +.spread( + [function(any values...) fulfilledHandler] +) -> Promise +``` + + +Like calling `.then`, but the fulfillment value _must be_ an array, which is flattened to the formal parameters of the fulfillment handler. + + +```js +Promise.delay(500).then(function() { + return [fs.readFileAsync("file1.txt"), + fs.readFileAsync("file2.txt")] ; +}).spread(function(file1text, file2text) { + if (file1text !== file2text) { + console.log("files are equal"); + } + else { + console.log("files are not equal"); + } +}); +``` + +If using ES6, the above can be replaced with [.then()](.) and destructuring: + +```js +Promise.delay(500).then(function() { + return [fs.readFileAsync("file1.txt"), + fs.readFileAsync("file2.txt")] ; +}).all().then(function([file1text, file2text]) { + if (file1text === file2text) { + console.log("files are equal"); + } + else { + console.log("files are not equal"); + } +}); +``` + +Note that [.spread()](.) implicitly does [.all()](.) but the ES6 destructuring syntax doesn't, hence the manual `.all()` call in the above code. + +If you want to coordinate several discrete concurrent promises, use [`Promise.join`](.) +
+ +
+ + diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/suppressunhandledrejections.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/suppressunhandledrejections.md new file mode 100644 index 0000000..874bc0f --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/suppressunhandledrejections.md @@ -0,0 +1,82 @@ +--- +layout: api +id: suppressunhandledrejections +title: .suppressUnhandledRejections +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.suppressUnhandledRejections + +```js +.suppressUnhandledRejections() -> undefined +``` + +Basically sugar for doing: + +```js +somePromise.catch(function(){}); +``` + +Which is needed in case error handlers are attached asynchronously to the promise later, which would otherwise result in premature unhandled rejection reporting. + +Example: + +```js +var tweets = fetchTweets(); +$(document).on("ready", function() { + tweets.then(function() { + // Render tweets + }).catch(function(e) { + alert("failed to fetch tweets because: " + e); + }); +}); +``` + +If fetching tweets fails before the document is ready the rejection is reported as unhandled even though it will be eventually handled when the document is ready. This is of course impossible to determine automatically, but you can explicitly do so using `.suppressUnhandledRejections()`: + +```js +var tweets = fetchTweets(); +tweets.suppressUnhandledRejections(); +$(document).on("ready", function() { + tweets.then(function() { + // Render tweets + }).catch(function(e) { + alert("failed to fetch tweets because: " + e); + }); +}); +``` + +It should be noted that there is no real need to attach the handlers asynchronously. Exactly the same effect can be achieved with: + +```js +fetchTweets() + .finally(function() { + return $.ready.promise(); + }) + // DOM guaranteed to be ready after this point + .then(function() { + // Render tweets + }) + .catch(function(e) { + alert("failed to fetch tweets because: " + e); + }); +``` + +The advantage of using `.suppressUnhandledRejections()` over `.catch(function(){})` is that it doesn't increment the branch count of the promise. Branch counts matter when using cancellation because a promise will only be cancelled if all of its branches want to cancel it. +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/synchronous-inspection.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/synchronous-inspection.md new file mode 100644 index 0000000..90fcab4 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/synchronous-inspection.md @@ -0,0 +1,72 @@ +--- +layout: api +id: synchronous-inspection +title: Synchronous inspection +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Synchronous inspection + +Often it is known in certain code paths that a promise is guaranteed to be fulfilled at that point - it would then be extremely inconvenient to use [`.then`](.) to get at the promise's value as the callback is always called asynchronously. + + +**Note**: In recent versions of Bluebird a design choice was made to expose [.reason()](.) and [.value()](.) as well as other inspection methods on promises directly in order to make the below use case easier to work with. Every promise implements the [PromiseInspection](.) interface. + +For example, if you need to use values of earlier promises in the chain, you could nest: + + +```js +// From Q Docs https://github.com/kriskowal/q/#chaining +// MIT License Copyright 2009–2014 Kristopher Michael Kowal. +function authenticate() { + return getUsername().then(function (username) { + return getUser(username); + // chained because we will not need the user name in the next event + }).then(function (user) { + // nested because we need both user and password next + return getPassword().then(function (password) { + if (user.passwordHash !== hash(password)) { + throw new Error("Can't authenticate"); + } + }); + }); +} +``` + +Or you could take advantage of the fact that if we reach password validation, then the user promise must be fulfilled: + +```js +function authenticate() { + var user = getUsername().then(function(username) { + return getUser(username); + }); + + return user.then(function(user) { + return getPassword(); + }).then(function(password) { + // Guaranteed that user promise is fulfilled, so .value() can be called here + if (user.value().passwordHash !== hash(password)) { + throw new Error("Can't authenticate"); + } + }); +} +``` + +In the latter the indentation stays flat no matter how many previous variables you need, whereas with the former each additional previous value would require an additional nesting level. +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/tap.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/tap.md new file mode 100644 index 0000000..505e2c2 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/tap.md @@ -0,0 +1,63 @@ +--- +layout: api +id: tap +title: .tap +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.tap + +```js +.tap(function(any value) handler) -> Promise +``` + + +Like [`.finally`](.) that is not called for rejections. + +```js +getUser().tap(function(user) { + //Like in finally, if you return a promise from the handler + //the promise is awaited for before passing the original value through + return recordStatsAsync(); +}).then(function(user) { + //user is the user from getUser(), not recordStatsAsync() +}); +``` + +Common case includes adding logging to an existing promise chain: + +```js +doSomething() + .then(...) + .then(...) + .then(...) + .then(...) +``` + +```js +doSomething() + .then(...) + .then(...) + .tap(console.log) + .then(...) + .then(...) +``` + +*Note: in browsers it is necessary to call `.tap` with `console.log.bind(console)` because console methods can not be called as stand-alone functions.* +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/then.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/then.md new file mode 100644 index 0000000..04473ff --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/then.md @@ -0,0 +1,35 @@ +--- +layout: api +id: then +title: .then +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.then + +```js +.then( + [function(any value) fulfilledHandler], + [function(any error) rejectedHandler] +) -> Promise +``` + + +[Promises/A+ `.then`](http://promises-aplus.github.io/promises-spec/). If you are new to promises, see the [Beginner's Guide]({{ "/docs/beginners-guide.html" | prepend: site.baseurl }}). +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/throw.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/throw.md new file mode 100644 index 0000000..681449c --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/throw.md @@ -0,0 +1,45 @@ +--- +layout: api +id: throw +title: .throw +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.throw + +```js +.throw(any reason) -> Promise +``` +```js +.thenThrow(any reason) -> Promise +``` + + +Convenience method for: + +```js +.then(function() { + throw reason; +}); +``` + +Same limitations regarding to the binding time of `reason` to apply as with [`.return`](.). + +*For compatibility with earlier ECMAScript version, an alias `.thenThrow` is provided for [`.throw`](.).* +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/timeout.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/timeout.md new file mode 100644 index 0000000..37b38f7 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/timeout.md @@ -0,0 +1,54 @@ +--- +layout: api +id: timeout +title: .timeout +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.timeout + +```js +.timeout( + int ms, + [String message="operation timed out"] +) -> Promise +``` +```js +.timeout( + int ms, + [Error error] +) -> Promise +``` + + +Returns a promise that will be fulfilled with this promise's fulfillment value or rejection reason. However, if this promise is not fulfilled or rejected within `ms` milliseconds, the returned promise is rejected with a [`TimeoutError`](.) or the `error` as the reason. + +When using the first signature, you may specify a custom error message with the `message` parameter. + + +```js +var Promise = require("bluebird"); +var fs = Promise.promisifyAll(require('fs')); +fs.readFileAsync("huge-file.txt").timeout(100).then(function(fileContents) { + +}).catch(Promise.TimeoutError, function(e) { + console.log("could not read file within 100ms"); +}); +``` +
+ +
+ + diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/timeouterror.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/timeouterror.md new file mode 100644 index 0000000..0ebd843 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/timeouterror.md @@ -0,0 +1,32 @@ +--- +layout: api +id: timeouterror +title: TimeoutError +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##TimeoutError + +```js +new TimeoutError(String message) -> TimeoutError +``` + + +Signals that an operation has timed out. Used as a custom cancellation reason in [`.timeout`](.). +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/timers.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/timers.md new file mode 100644 index 0000000..890e658 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/timers.md @@ -0,0 +1,29 @@ +--- +layout: api +id: timers +title: Timers +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Timers + +Methods to delay and time promises out. + +
+
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/utility.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/utility.md new file mode 100644 index 0000000..3b76258 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/utility.md @@ -0,0 +1,29 @@ +--- +layout: api +id: utility +title: Utility +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##Utility + +Functions that could potentially be handy in some situations. + +
+
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/api/value.md b/platforms/android/assets/www/libs/bluebird/docs/docs/api/value.md new file mode 100644 index 0000000..a91df40 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/api/value.md @@ -0,0 +1,34 @@ +--- +layout: api +id: value +title: .value +--- + + +[← Back To API Reference](/docs/api-reference.html) +
+##.value + +```js +.value() -> any +``` + + +Get the fulfillment value of this promise. Throws an error if the promise isn't fulfilled - it is a bug to call this method on an unfulfilled promise. + +You should check if this promise is [.isFulfilled()](.) in code paths where it's guaranteed that this promise is fulfilled. +
+ +
+ + \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/async-dialogs.md b/platforms/android/assets/www/libs/bluebird/docs/docs/async-dialogs.md new file mode 100644 index 0000000..cee29cd --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/async-dialogs.md @@ -0,0 +1,6 @@ +--- +id: async-dialogs +title: Async Dialogs +--- + +[async-dialogs](unfinished-article) diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/beginners-guide.md b/platforms/android/assets/www/libs/bluebird/docs/docs/beginners-guide.md new file mode 100644 index 0000000..00339f6 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/beginners-guide.md @@ -0,0 +1,6 @@ +--- +id: beginners-guide +title: Beginner's Guide +--- + +[beginners-guide](unfinished-article) diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/benchmarks.md b/platforms/android/assets/www/libs/bluebird/docs/docs/benchmarks.md new file mode 100644 index 0000000..fda2342 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/benchmarks.md @@ -0,0 +1,115 @@ +--- +id: benchmarks +title: Benchmarks +--- + +Benchmarks have been ran with the following versions of modules. + +``` +├── async@1.5.0 +├── babel@5.8.29 +├── davy@1.0.1 +├── deferred@0.7.3 +├── kew@0.7.0 +├── lie@3.0.1 +├── neo-async@1.6.0 +├── optimist@0.6.1 +├── promise@7.0.4 +├── q@1.4.1 +├── rsvp@3.1.0 +├── streamline@1.0.7 +├── text-table@0.2.0 +├── vow@0.4.11 +└── when@3.7.4 +``` + +###1\. DoxBee sequential + +This is Gorki Kosev's benchmark used in the article [Analysis of generators and other async patterns in node](http://spion.github.io/posts/analysis-generators-and-other-async-patterns-node.html). The benchmark emulates a situation where N=10000 requests are being made concurrently to execute some mixed async/sync action with fast I/O response times. + +This is a throughput benchmark. + +Every implementation runs in a freshly created isolated process which is warmed up to the benchmark code before timing it. The memory column represents the highest snapshotted RSS memory (as reported by `process.memoryUsage().rss`) during processing. + +Command: `./bench doxbee` (needs cloned repository) + +The implementations for this benchmark are found in [`benchmark/doxbee-sequential`](https://github.com/petkaantonov/bluebird/tree/master/benchmark/doxbee-sequential) directory. + + +``` +results for 10000 parallel executions, 1 ms per I/O op + +file time(ms) memory(MB) +callbacks-baseline.js 160 44.53 +callbacks-suguru03-neo-async-waterfall.js 227 47.89 +promises-bluebird-generator.js 247 37.76 +streamline-callbacks.js 302 45.64 +promises-bluebird.js 322 31.92 +promises-cujojs-when.js 357 60.88 +promises-tildeio-rsvp.js 419 64.88 +promises-lvivski-davy.js 543 109.81 +callbacks-caolan-async-waterfall.js 557 102.08 +promises-then-promise.js 609 124.34 +promises-dfilatov-vow.js 632 138.27 +streamline-generators.js 647 73.85 +promises-calvinmetcalf-lie.js 661 130.81 +generators-tj-co.js 789 137.84 +promises-ecmascript6-native.js 847 182.71 +promises-obvious-kew.js 1240 254.99 +promises-medikoo-deferred.js 2053 201.29 +observables-Reactive-Extensions-RxJS.js 2430 279.24 +observables-pozadi-kefir.js 2559 159.62 +observables-baconjs-bacon.js.js 18482 883.22 +promises-kriskowal-q.js 23081 876.11 +observables-caolan-highland.js 28138 517.57 + +Platform info: +Linux 3.13.0-32-generic x64 +Node.JS 4.2.1 +V8 4.5.103.35 +Intel(R) Core(TM) i7-4900MQ CPU @ 2.80GHz × 8 +``` + +###2\. Parallel + +This made-up scenario runs 25 shimmed queries in parallel per each request (N=10000) with fast I/O response times. + +This is a throughput benchmark. + +Every implementation runs in a freshly created isolated process which is warmed up to the benchmark code before timing it. The memory column represents the highest snapshotted RSS memory (as reported by `process.memoryUsage().rss`) during processing. + +Command: `./bench parallel` (needs cloned repository) + +The implementations for this benchmark are found in [`benchmark/madeup-parallel`](https://github.com/petkaantonov/bluebird/tree/master/benchmark/madeup-parallel) directory. + +``` +results for 10000 parallel executions, 1 ms per I/O op + +file time(ms) memory(MB) +callbacks-baseline.js 290 49.25 +promises-bluebird.js 382 72.45 +promises-bluebird-generator.js 407 76.25 +callbacks-suguru03-neo-async-parallel.js 472 97.05 +promises-tildeio-rsvp.js 597 182.07 +promises-cujojs-when.js 610 142.19 +callbacks-caolan-async-parallel.js 804 157.11 +promises-lvivski-davy.js 1229 262.84 +promises-calvinmetcalf-lie.js 1301 338.68 +promises-then-promise.js 1585 367.77 +streamline-callbacks.js 1800 315.59 +promises-ecmascript6-native.js 1816 481.08 +promises-dfilatov-vow.js 1980 489.30 +promises-medikoo-deferred.js 4181 522.04 +promises-obvious-kew.js 5473 1075.70 +streamline-generators.js 7980 840.97 + +Platform info: +Linux 3.13.0-32-generic x64 +Node.JS 4.2.1 +V8 4.5.103.35 +Intel(R) Core(TM) i7-4900MQ CPU @ 2.80GHz × 8 +``` + +###3\. Latency benchmarks + +For reasonably fast promise implementations latency is going to be fully determined by the scheduler being used and is therefore not interesting to benchmark. [JSPerfs](https://jsperf.com/) that benchmark promises tend to benchmark latency. diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/changelog.md b/platforms/android/assets/www/libs/bluebird/docs/docs/changelog.md new file mode 100644 index 0000000..8bd3e5d --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/changelog.md @@ -0,0 +1,1884 @@ +--- +id: changelog +title: Changelog +--- + +## 3.3.5 (2016-04-12) + +Bugfixes: + + - Fix then sometimes not being called on iOS/Firefox ([#1022](.)). + - Fix custom schedulers not being called when using promisified functions ([#1023](.)). + - Fix unexpected error being thrown when promisifed function is called with no arguments ([#1063](.)). + +## 3.3.4 (2016-03-07) + +Features: + + - Warnings about created promises that are not returned are no longer given if the handler promise has not been chained. This should reduce the amount of false positives with this warning. + +## 3.3.3 (2016-02-25) + +Bugfixes: + + - Fix stack overflow error when a promise returned by promisified function rejects early in a huge array when using [Promise.mapSeries](.) or [Promise.each](.) + + +## 3.3.2 (2016-02-25) + +Bugfixes: + + - Fix missing newline in stack trace reported by [.done()](.) ([#1020](.)). + - Detect deep circular resolutions + +## 3.3.1 (2016-02-13) + +Bugfixes: + + - Fix crash when cancelling a [.tap()](.) handler promise ([#1006](.)). + +## 3.3.0 (2016-02-12) + +Features: + + - Cancelling Promise returned from [Promise.delay()](.) and [.delay()](.) now calls `clearTimeout` ([#1000](.)) + - Add [monitoring and lifecycle hooks](http://bluebirdjs.com/docs/features.html#promise-monitoring) + - Add `'warning'` hook for warnings ([#980](.)) + +Bugfixes: + + - Fix warnings for "promise was rejected with non-error" being output when promises are rejected with errors from different realm ([#990](.)) + + +## 3.2.2 (2016-02-05) + +Bugfixes: + + - Make build script's output work without TTY + +## 3.2.1 (2016-02-01) + +Bugfixes: + + - Revert monitoring feature due to crash in browser + + +## 3.2.0 (2016-02-01) + +- Broken build + +## 3.1.5 (2016-01-26) + +Dummy release to trigger CDN update. + +## 3.1.4 (2016-01-25) + +Bugfixes: + + - Fix broken npm prepublish script release + + +## 3.1.3 (2016-01-25) + +Bugfixes: + + - Fix generators crashing in node 0.12 ([#978](.)) + - Add minimal build files to build ([#976](.), [#757](.)) + +## 3.1.2 (2016-01-23) + +Features: + + - [.timeout()](.) now `clearTimeout`s the timer if the resulting promise is cancelled ([#926](.)) + - [Promise.coroutine](.) now returns function with same `.length` as the original function ([#927](.), [#933](.)) + +Bugfixes: + + - Fix long stack traces not working when promise is created from [Promise.fromCallback](.) ([#971](.)) + - Fix [.finally()](.) handlers not being called when promise is cancelled while a domain is active ([#963](.)) + - Fix [.timeout()](.) trying to cancel a promise even if cancellation is disabled ([#970](.)) + +## 3.1.1 (2015-12-16) + +Bugfixes: + + - Disable wForgottenWarning when all warnings are disabled + + +## 3.1.0 (2015-12-16) + +Features: + + - Added ability to configure the [forgotten return statement](http://bluebirdjs.com/docs/warning-explanations.html#warning-a-promise-was-created-in-a-handler-but-none-were-returned-from-it) warning separately \([#920](.)\). + +Bugfixes: + +- Fixed the bug where returning a value from [.finally](.) or [.tap](.) handler did not make a warning about a forgotten return go away \([#846](.)\). +- Fixed the bug where setTimeout is used in Chrome instead of MutationObserver \([#915](.)\) +- Fixed the bug where using [.bind](.) suppressed unhandled rejections \([#841](.)\) + +## 3.0.6 (2015-12-01) + +Bugfixes: + + - Fix [.timeout()](.) not cancelling parent \([#891](.)\) + - Fix long stack traces when using [Promise.resolve()](.) \([#861](.)\) + - Fix [Promise.config()](.) not disabling long stack traces when passing `longStackTraces: false` \([#897](.)\) + +## 3.0.5 (2015-11-01) + +Bugfixes: + + - Added [forgotten return warnings](http://bluebirdjs.com/docs/warning-explanations.html#warning-a-promise-was-created-in-a-handler-but-none-were-returned-from-it) to [Promise.try](.) and [Promise.method](.) + +## 3.0.4 (2015-11-01) + +Bugfixes: + + - The stack trace for [forgotten return warnings](http://bluebirdjs.com/docs/warning-explanations.html#warning-a-promise-was-created-in-a-handler-but-none-were-returned-from-it) is more useful now. + + +## 3.0.3 (2015-11-01) + +Bugfixes: + + - 3rd party libraries rejecting promises with non-errors no longer causes warnings + - When `NODE_ENV` environment variable is `"development"` setting `BLUEBIRD_DEBUG` environment variable to `0` can now be used to disable debug mode + +## 3.0.2 (2015-10-29) + +Bugfixes: + + - Fix crash when using node.js domains [#829](.) + +## 3.0.1 (2015-10-28) + +See [New in 3.0](new-in-bluebird-3.html). + +## 3.0.0 (2015-10-27) + +See [New in 3.0](new-in-bluebird-3.html). + +## 2.10.2 (2015-10-01) + +Features: + + - [.timeout()](.) now takes a custom error object as second argument + +## 2.10.1 (2015-09-21) + + - Fix error "Cannot promisify an API that has normal methods with 'Async'-suffix" when promisifying certain objects with a custom promisifier + +## 2.10.0 (2015-09-08) + +Features: + + - `Promise.using` can now take the promises-for-resources as an array ([#733](.)). + - Browser builds for minimal core are now hosted on CDN ([#724](.)). + +Bugfixes: + + - Disabling debug mode with `BLUEBIRD_DEBUG=0` environment variable now works ([#719](.)). + - Fix unhandled rejection reporting when passing rejected promise to `.return()` ([#721](.)). + - Fix unbound promise's then handlers being called with wrong `this` value ([#738](.)). + +## 2.9.34 (2015-07-15) + +Bugfixes: + +- Correct domain for .map, .each, .filter, .reduce callbacks ([#701](.)). + - Preserve bound-with-promise promises across the entire chain ([#702](.)). + +## 2.9.33 (2015-07-09) + +Bugfixes: + + - Methods on `Function.prototype` are no longer promisified ([#680](.)). + +## 2.9.32 (2015-07-03) + +Bugfixes: + + - Fix `.return(primitiveValue)` returning a wrapped version of the primitive value when a Node.js domain is active ([#689](.)). + +## 2.9.31 (2015-07-03) + +Bugfixes: + + - Fix Promises/A+ compliance issue regarding circular thenables: the correct behavior is to go into an infinite loop instead of warning with an error (Fixes [#682](.)). + - Fix "(node) warning: possible EventEmitter memory leak detected" ([#661](.)). + - Fix callbacks sometimes being called with a wrong node.js domain ([#664](.)). + - Fix callbacks sometimes not being called at all in iOS 8.1 WebApp mode ([#666](.), [#687](.)). + +## 2.9.30 (2015-06-14) + +Bugfixes: + + - Fix regression with `promisifyAll` not promisifying certain methods + +## 2.9.29 (2015-06-14) + +Bugfixes: + + - Improve `promisifyAll` detection of functions that are class constructors. Fixes mongodb 2.x promisification. + +## 2.9.28 (2015-06-14) + +Bugfixes: + + - Fix handled rejection being reported as unhandled in certain scenarios when using [.all](.) or [Promise.join](.) ([#645](.)) + - Fix custom scheduler not being called in Google Chrome when long stack traces are enabled ([#650](.)) + +## 2.9.27 (2015-05-30) + +Bugfixes: + + - Fix `sinon.useFakeTimers()` breaking scheduler ([#631](.)) + +Misc: + + - Add nw testing facilities (`node tools/test --nw`) + +## 2.9.26 (2015-05-25) + +Bugfixes: + + - Fix crash in NW [#624](.) + - Fix [`.return()`](.) not supporting `undefined` as return value [#627](.) + +## 2.9.25 (2015-04-28) + +Bugfixes: + + - Fix crash in node 0.8 + +## 2.9.24 (2015-04-02) + +Bugfixes: + + - Fix not being able to load multiple bluebird copies introduced in 2.9.22 ([#559](.), [#561](.), [#560](.)). + +## 2.9.23 (2015-04-02) + +Bugfixes: + + - Fix node.js domain propagation ([#521](.)). + +## 2.9.22 (2015-04-02) + + - Fix `.promisify` crashing in phantom JS ([#556](.)) + +## 2.9.21 (2015-03-30) + + - Fix error object's `'stack'`' overwriting causing an error when its defined to be a setter that throws an error ([#552](.)). + +## 2.9.20 (2015-03-29) + +Bugfixes: + + - Fix regression where there is a long delay between calling `.cancel()` and promise actually getting cancelled in Chrome when long stack traces are enabled + +## 2.9.19 (2015-03-29) + +Bugfixes: + + - Fix crashing in Chrome when long stack traces are disabled + +## 2.9.18 (2015-03-29) + +Bugfixes: + + - Fix settlePromises using trampoline + +## 2.9.17 (2015-03-29) + + +Bugfixes: + + - Fix Chrome DevTools async stack traceability ([#542](.)). + +## 2.9.16 (2015-03-28) + +Features: + + - Use setImmediate if available + +## 2.9.15 (2015-03-26) + +Features: + + - Added `.asCallback` alias for `.nodeify`. + +Bugfixes: + + - Don't always use nextTick, but try to pick up setImmediate or setTimeout in NW. Fixes [#534](.), [#525](.) + - Make progress a core feature. Fixes [#535](.) Note that progress has been removed in 3.x - this is only a fix necessary for 2.x custom builds. + +## 2.9.14 (2015-03-12) + +Bugfixes: + + - Always use process.nextTick. Fixes [#525](.) + +## 2.9.13 (2015-02-27) + +Bugfixes: + + - Fix .each, .filter, .reduce and .map callbacks being called synchornously if the input is immediate. ([#513](.)) + +## 2.9.12 (2015-02-19) + +Bugfixes: + + - Fix memory leak introduced in 2.9.0 ([#502](.)) + +## 2.9.11 (2015-02-19) + +Bugfixes: + + - Fix [#503](.) + +## 2.9.10 (2015-02-18) + +Bugfixes: + + - Fix [#501](.) + +## 2.9.9 (2015-02-12) + +Bugfixes: + + - Fix `TypeError: Cannot assign to read only property 'length'` when jsdom has declared a read-only length for all objects to inherit. + +## 2.9.8 (2015-02-10) + +Bugfixes: + + - Fix regression introduced in 2.9.7 where promisify didn't properly dynamically look up methods on `this` + +## 2.9.7 (2015-02-08) + +Bugfixes: + + - Fix `promisify` not retaining custom properties of the function. This enables promisifying the `"request"` module's export function and its methods at the same time. + - Fix `promisifyAll` methods being dependent on `this` when they are not originally dependent on `this`. This enables e.g. passing promisified `fs` functions directly as callbacks without having to bind them to `fs`. + - Fix `process.nextTick` being used over `setImmediate` in node. + +## 2.9.6 (2015-02-02) + +Bugfixes: + + - Node environment detection can no longer be fooled + +## 2.9.5 (2015-02-02) + +Misc: + + - Warn when [`.then()`](.) is passed non-functions + +## 2.9.4 (2015-01-30) + +Bugfixes: + + - Fix [.timeout()](.) not calling `clearTimeout` with the proper handle in node causing the process to wait for unneeded timeout. This was a regression introduced in 2.9.1. + +## 2.9.3 (2015-01-27) + +Bugfixes: + + - Fix node-webkit compatibility issue ([#467](https://github.com/petkaantonov/bluebird/pull/467)) + - Fix long stack trace support in recent firefox versions + +## 2.9.2 (2015-01-26) + +Bugfixes: + + - Fix critical bug regarding to using promisifyAll in browser that was introduced in 2.9.0 ([#466](https://github.com/petkaantonov/bluebird/issues/466)). + +Misc: + + - Add `"browser"` entry point to package.json + +## 2.9.1 (2015-01-24) + +Features: + + - If a bound promise is returned by the callback to [`Promise.method`](.) and [`Promise.try`](.), the returned promise will be bound to the same value + +## 2.9.0 (2015-01-24) + +Features: + + - Add [`Promise.fromNode`](.) + - Add new paramter `value` for [`Promise.bind`](.) + +Bugfixes: + + - Fix several issues with [`cancellation`](.) and [`.bind()`](.) interoperation when `thisArg` is a promise or thenable + - Fix promises created in [`disposers`](.) not having proper long stack trace context + - Fix [`Promise.join`](.) sometimes passing the passed in callback function as the last argument to itself. + +Misc: + + - Reduce minified full browser build file size by not including unused code generation functionality. + - Major internal refactoring related to testing code and source code file layout + +## 2.8.2 (2015-01-20) + +Features: + + - [Global rejection events](https://github.com/petkaantonov/bluebird/blob/master/API.md#global-rejection-events) are now fired both as DOM3 events and as legacy events in browsers + +## 2.8.1 (2015-01-20) + +Bugfixes: + + - Fix long stack trace stiching consistency when rejected from thenables + +## 2.8.0 (2015-01-19) + +Features: + + - Major debuggability improvements: + - Long stack traces have been re-designed. They are now much more readable, + succint, relevant and consistent across bluebird features. + - Long stack traces are supported now in IE10+ + +## 2.7.1 (2015-01-15) + +Bugfixes: + + - Fix [#447](.) + +## 2.7.0 (2015-01-15) + +Features: + + - Added more context to stack traces originating from coroutines ([#421](https://github.com/petkaantonov/bluebird/issues/421)) + - Implemented [global rejection events](https://github.com/petkaantonov/bluebird/blob/master/API.md#global-rejection-events) ([#428](https://github.com/petkaantonov/bluebird/issues/428), [#357](https://github.com/petkaantonov/bluebird/issues/357)) + - [Custom promisifiers](https://github.com/petkaantonov/bluebird/blob/master/API.md#option-promisifier) are now passed the default promisifier which can be used to add enhancements on top of normal node promisification + - [Promisification filters](https://github.com/petkaantonov/bluebird/blob/master/API.md#option-filter) are now passed `passesDefaultFilter` boolean + +Bugfixes: + + - Fix `.noConflict()` call signature ([#446]()) + - Fix `Promise.method`ified functions being called with `undefined` when they were called with no arguments + +## 2.6.4 (2015-01-12) + +Bugfixes: + + - `OperationalErrors` thrown by promisified functions retain custom properties, such as `.code` and `.path`. + +## 2.6.3 (2015-01-12) + +Bugfixes: + + - Fix [#429](https://github.com/petkaantonov/bluebird/issues/429) + - Fix [#432](https://github.com/petkaantonov/bluebird/issues/432) + - Fix [#433](https://github.com/petkaantonov/bluebird/issues/433) + +## 2.6.2 (2015-01-07) + +Bugfixes: + + - Fix [#426](https://github.com/petkaantonov/bluebird/issues/426) + +## 2.6.1 (2015-01-07) + +Bugfixes: + + - Fixed built browser files not being included in the git tag release for bower + +## 2.6.0 (2015-01-06) + +Features: + + - Significantly improve parallel promise performance and memory usage (+50% faster, -50% less memory) + + +## 2.5.3 (2014-12-30) + +## 2.5.2 (2014-12-29) + +Bugfixes: + + - Fix bug where already resolved promise gets attached more handlers while calling its handlers resulting in some handlers not being called + - Fix bug where then handlers are not called in the same order as they would run if Promises/A+ 2.3.2 was implemented as adoption + - Fix bug where using `Object.create(null)` as a rejection reason would crash bluebird + +## 2.5.1 (2014-12-29) + +Bugfixes: + + - Fix `.finally` throwing null error when it is derived from a promise that is resolved with a promise that is resolved with a promise + +## 2.5.0 (2014-12-28) + +Features: + + - [`.get`](.) now supports negative indexing. + +Bugfixes: + + - Fix bug with `Promise.method` wrapped function returning a promise that never resolves if the function returns a promise that is resolved with another promise + - Fix bug with `Promise.delay` never resolving if the value is a promise that is resolved with another promise + +## 2.4.3 (2014-12-28) + +Bugfixes: + + - Fix memory leak as described in [this Promises/A+ spec issue](https://github.com/promises-aplus/promises-spec/issues/179). + +## 2.4.2 (2014-12-21) + +Bugfixes: + + - Fix bug where spread rejected handler is ignored in case of rejection + - Fix synchronous scheduler passed to `setScheduler` causing infinite loop + +## 2.4.1 (2014-12-20) + +Features: + + - Error messages now have links to wiki pages for additional information + - Promises now clean up all references (to handlers, child promises etc) as soon as possible. + +## 2.4.0 (2014-12-18) + +Features: + + - Better filtering of bluebird internal calls in long stack traces, especially when using minified file in browsers + - Small performance improvements for all collection methods + - Promises now delete references to handlers attached to them as soon as possible + - Additional stack traces are now output on stderr/`console.warn` for errors that are thrown in the process/window from rejected `.done()` promises. See [#411](https://github.com/petkaantonov/bluebird/issues/411) + +## 2.3.11 (2014-10-31) + +Bugfixes: + + - Fix [#371](https://github.com/petkaantonov/bluebird/issues/371), [#373](https://github.com/petkaantonov/bluebird/issues/373) + + +## 2.3.10 (2014-10-28) + +Features: + + - `Promise.method` no longer wraps primitive errors + - `Promise.try` no longer wraps primitive errors + +## 2.3.7 (2014-10-25) + +Bugfixes: + + - Fix [#359](https://github.com/petkaantonov/bluebird/issues/359), [#362](https://github.com/petkaantonov/bluebird/issues/362) and [#364](https://github.com/petkaantonov/bluebird/issues/364) + +## 2.3.6 (2014-10-15) + +Features: + + - Implement [`.reflect()`](.) + +## 2.3.5 (2014-10-06) + +Bugfixes: + + - Fix issue when promisifying methods whose names contain the string 'args' + +## 2.3.4 (2014-09-27) + + - `P` alias was not declared inside WebWorkers + +## 2.3.3 (2014-09-27) + +Bugfixes: + + - Fix [#318](https://github.com/petkaantonov/bluebird/issues/318), [#314](https://github.com/petkaantonov/bluebird/issues/#314) + +## 2.3.2 (2014-08-25) + +Bugfixes: + + - `P` alias for `Promise` now exists in global scope when using browser builds without a module loader, fixing an issue with firefox extensions + +## 2.3.1 (2014-08-23) + +Features: + + - `.using` can now be used with disposers created from different bluebird copy + +## 2.3.0 (2014-08-13) + +Features: + + - [`.bind()`](.) and [`Promise.bind()`](.) now await for the resolution of the `thisArg` if it's a promise or a thenable + +Bugfixes: + + - Fix [#276](https://github.com/petkaantonov/bluebird/issues/276) + +## 2.2.2 (2014-07-14) + + - Fix [#259](https://github.com/petkaantonov/bluebird/issues/259) + +## 2.2.1 (2014-07-07) + + - Fix multiline error messages only showing the first line + +## 2.2.0 (2014-07-07) + +Bugfixes: + + - `.any` and `.some` now consistently reject with RangeError when input array contains too few promises + - Fix iteration bug with `.reduce` when input array contains already fulfilled promises + +## 2.1.3 (2014-06-18) + +Bugfixes: + + - Fix [#235](https://github.com/petkaantonov/bluebird/issues/235) + +## 2.1.2 (2014-06-15) + +Bugfixes: + + - Fix [#232](https://github.com/petkaantonov/bluebird/issues/232) + +## 2.1.1 (2014-06-11) + +## 2.1.0 (2014-06-11) + +Features: + + - Add [`promisifier`](.) option to `Promise.promisifyAll()` + - Improve performance of `.props()` and collection methods when used with immediate values + + +Bugfixes: + + - Fix a bug where .reduce calls the callback for an already visited item + - Fix a bug where stack trace limit is calculated to be too small, which resulted in too short stack traces + +Add undocumented experimental `yieldHandler` option to `Promise.coroutine` + +## 2.0.7 (2014-06-08) +## 2.0.6 (2014-06-07) +## 2.0.5 (2014-06-05) +## 2.0.4 (2014-06-05) +## 2.0.3 (2014-06-05) +## 2.0.2 (2014-06-04) +## 2.0.1 (2014-06-04) + +## 2.0.0 (2014-06-04) + +#What's new in 2.0 + +- [Resource management](api-reference.html#resource-management) - never leak resources again +- [Promisification](api-reference.html#promisification) on steroids - entire modules can now be promisified with one line of code +- [`.map()`](.), [`.each()`](.), [`.filter()`](.), [`.reduce()`](.) reimagined from simple sugar to powerful concurrency coordination tools +- [API Documentation](api-reference.html) has been reorganized and more elaborate examples added +- Deprecated [progression](#progression-migration) and [deferreds](#deferred-migration) +- Improved performance and readability + +Features: + +- Added [`using()`](.) and [`disposer()`](.) +- [`.map()`](.) now calls the handler as soon as items in the input array become fulfilled +- Added a concurrency option to [`.map()`](.) +- [`.filter()`](.) now calls the handler as soon as items in the input array become fulfilled +- Added a concurrency option to [`.filter()`](.) +- [`.reduce()`](.) now calls the handler as soon as items in the input array become fulfilled, but in-order +- Added [`.each()`](.) +- [`Promise.resolve()`](.) behaves like `Promise.cast`. `Promise.cast` deprecated. +- [Synchronous inspection](api-reference.html#synchronous-inspection): Removed `.inspect()`, added [`.value()`](.) and [`.reason()`](.) +- [`Promise.join()`](.) now takes a function as the last argument +- Added [`Promise.setScheduler()`](.) +- [`.cancel()`](.) supports a custom cancellation reason +- [`.timeout()`](.) now cancels the promise instead of rejecting it +- [`.nodeify()`](.) now supports passing multiple success results when mapping promises to nodebacks +- Added `suffix` and `filter` options to [`Promise.promisifyAll()`](.) + +Breaking changes: + +- Sparse array holes are not skipped by collection methods but treated as existing elements with `undefined` value +- `.map()` and `.filter()` do not call the given mapper or filterer function in any specific order +- Removed the `.inspect()` method +- Yielding an array from a coroutine is not supported by default. You can use [`coroutine.addYieldHandler()`](.) to configure the old behavior (or any behavior you want). +- [`.any()`](.) and [`.some()`](.) no longer use an array as the rejection reason. [`AggregateError`](.) is used instead. + + +## 1.2.4 (2014-04-27) + +Bugfixes: + + - Fix promisifyAll causing a syntax error when a method name is not a valid identifier + - Fix syntax error when es5.js is used in strict mode + +## 1.2.3 (2014-04-17) + +Bugfixes: + + - Fix [#179](https://github.com/petkaantonov/bluebird/issues/179) + +## 1.2.2 (2014-04-09) + +Bugfixes: + + - Promisified methods from promisifyAll no longer call the original method when it is overriden + - Nodeify doesn't pass second argument to the callback if the promise is fulfilled with `undefined` + +## 1.2.1 (2014-03-31) + +Bugfixes: + + - Fix [#168](https://github.com/petkaantonov/bluebird/issues/168) + +## 1.2.0 (2014-03-29) + +Features: + + - New method: [`.value()`](https://github.com/petkaantonov/bluebird/blob/master/API.md#value---dynamic) + - New method: [`.reason()`](https://github.com/petkaantonov/bluebird/blob/master/API.md#reason---dynamic) + - New method: [`Promise.onUnhandledRejectionHandled()`](https://github.com/petkaantonov/bluebird/blob/master/API.md#promiseonunhandledrejectionhandledfunction-handler---undefined) + - `Promise.map()`, `.map()`, `Promise.filter()` and `.filter()` start calling their callbacks as soon as possible while retaining a correct order. See [`8085922f`](https://github.com/petkaantonov/bluebird/commit/8085922fb95a9987fda0cf2337598ab4a98dc315). + +Bugfixes: + + - Fix [#165](https://github.com/petkaantonov/bluebird/issues/165) + - Fix [#166](https://github.com/petkaantonov/bluebird/issues/166) + +## 1.1.1 (2014-03-18) + +Bugfixes: + + - [#138](https://github.com/petkaantonov/bluebird/issues/138) + - [#144](https://github.com/petkaantonov/bluebird/issues/144) + - [#148](https://github.com/petkaantonov/bluebird/issues/148) + - [#151](https://github.com/petkaantonov/bluebird/issues/151) + +## 1.1.0 (2014-03-08) + +Features: + + - Implement [`Promise.prototype.tap()`](https://github.com/petkaantonov/bluebird/blob/master/API.md#tapfunction-handler---promise) + - Implement [`Promise.coroutine.addYieldHandler()`](https://github.com/petkaantonov/bluebird/blob/master/API.md#promisecoroutineaddyieldhandlerfunction-handler---void) + - Deprecate `Promise.prototype.spawn` + +Bugfixes: + + - Fix already rejected promises being reported as unhandled when handled through collection methods + - Fix browserisfy crashing from checking `process.version.indexOf` + +## 1.0.8 (2014-03-03) + +Bugfixes: + + - Fix active domain being lost across asynchronous boundaries in Node.JS 10.xx + +## 1.0.7 (2014-02-25) + +Bugfixes: + + - Fix handled errors being reported + +## 1.0.6 (2014-02-17) + +Bugfixes: + + - Fix bug with unhandled rejections not being reported + when using `Promise.try` or `Promise.method` without + attaching further handlers + +## 1.0.5 (2014-02-15) + +Features: + + - Node.js performance: promisified functions try to check amount of passed arguments in most optimal order + - Node.js promisified functions will have same `.length` as the original function minus one (for the callback parameter) + +## 1.0.4 (2014-02-09) + +Features: + + - Possibly unhandled rejection handler will always get a stack trace, even if the rejection or thrown error was not an error + - Unhandled rejections are tracked per promise, not per error. So if you create multiple branches from a single ancestor and that ancestor gets rejected, each branch with no error handler with the end will cause a possibly unhandled rejection handler invocation + +Bugfixes: + + - Fix unhandled non-writable objects or primitives not reported by possibly unhandled rejection handler + +## 1.0.3 (2014-02-05) + +Bugfixes: + + - [#93](https://github.com/petkaantonov/bluebird/issues/88) + +## 1.0.2 (2014-02-04) + +Features: + + - Significantly improve performance of foreign bluebird thenables + +Bugfixes: + + - [#88](https://github.com/petkaantonov/bluebird/issues/88) + +## 1.0.1 (2014-01-28) + +Features: + + - Error objects that have property `.isAsync = true` will now be caught by `.error()` + +Bugfixes: + + - Fix TypeError and RangeError shims not working without `new` operator + +## 1.0.0 (2014-01-12) + +Features: + + - `.filter`, `.map`, and `.reduce` no longer skip sparse array holes. This is a backwards incompatible change. + - Like `.map` and `.filter`, `.reduce` now allows returning promises and thenables from the iteration function. + +Bugfixes: + + - [#58](https://github.com/petkaantonov/bluebird/issues/58) + - [#61](https://github.com/petkaantonov/bluebird/issues/61) + - [#64](https://github.com/petkaantonov/bluebird/issues/64) + - [#60](https://github.com/petkaantonov/bluebird/issues/60) + +## 0.11.6-1 (2013-12-29) + +## 0.11.6-0 (2013-12-29) + +Features: + + - You may now return promises and thenables from the filterer function used in `Promise.filter` and `Promise.prototype.filter`. + + - `.error()` now catches additional sources of rejections: + + - Rejections originating from `Promise.reject` + + - Rejections originating from thenables using + the `reject` callback + + - Rejections originating from promisified callbacks + which use the `errback` argument + + - Rejections originating from `new Promise` constructor + where the `reject` callback is called explicitly + + - Rejections originating from `PromiseResolver` where + `.reject()` method is called explicitly + +Bugfixes: + + - Fix `captureStackTrace` being called when it was `null` + - Fix `Promise.map` not unwrapping thenables + +## 0.11.5-1 (2013-12-15) + +## 0.11.5-0 (2013-12-03) + +Features: + + - Improve performance of collection methods + - Improve performance of promise chains + +## 0.11.4-1 (2013-12-02) + +## 0.11.4-0 (2013-12-02) + +Bugfixes: + + - Fix `Promise.some` behavior with arguments like negative integers, 0... + - Fix stack traces of synchronously throwing promisified functions' + +## 0.11.3-0 (2013-12-02) + +Features: + + - Improve performance of generators + +Bugfixes: + + - Fix critical bug with collection methods. + +## 0.11.2-0 (2013-12-02) + +Features: + + - Improve performance of all collection methods + +## 0.11.1-0 (2013-12-02) + +Features: + +- Improve overall performance. +- Improve performance of promisified functions. +- Improve performance of catch filters. +- Improve performance of .finally. + +Bugfixes: + +- Fix `.finally()` rejecting if passed non-function. It will now ignore non-functions like `.then`. +- Fix `.finally()` not converting thenables returned from the handler to promises. +- `.spread()` now rejects if the ultimate value given to it is not spreadable. + +## 0.11.0-0 (2013-12-02) + +Features: + + - Improve overall performance when not using `.bind()` or cancellation. + - Promises are now not cancellable by default. This is backwards incompatible change - see [`.cancellable()`](https://github.com/petkaantonov/bluebird/blob/master/API.md#cancellable---promise) + - [`Promise.delay`](https://github.com/petkaantonov/bluebird/blob/master/API.md#promisedelaydynamic-value-int-ms---promise) + - [`.delay()`](https://github.com/petkaantonov/bluebird/blob/master/API.md#delayint-ms---promise) + - [`.timeout()`](https://github.com/petkaantonov/bluebird/blob/master/API.md#timeoutint-ms--string-message---promise) + +## 0.10.14-0 (2013-12-01) + +Bugfixes: + + - Fix race condition when mixing 3rd party asynchrony. + +## 0.10.13-1 (2013-11-30) + +## 0.10.13-0 (2013-11-30) + +Bugfixes: + + - Fix another bug with progression. + +## 0.10.12-0 (2013-11-30) + +Bugfixes: + + - Fix bug with progression. + +## 0.10.11-4 (2013-11-29) + +## 0.10.11-2 (2013-11-29) + +Bugfixes: + + - Fix `.race()` not propagating bound values. + +## 0.10.11-1 (2013-11-29) + +Features: + + - Improve performance of `Promise.race` + +## 0.10.11-0 (2013-11-29) + +Bugfixes: + + - Fixed `Promise.promisifyAll` invoking property accessors. Only data properties with function values are considered. + +## 0.10.10-0 (2013-11-28) + +Features: + + - Disable long stack traces in browsers by default. Call `Promise.longStackTraces()` to enable them. + +## 0.10.9-1 (2013-11-27) + +Bugfixes: + + - Fail early when `new Promise` is constructed incorrectly + +## 0.10.9-0 (2013-11-27) + +Bugfixes: + + - Promise.props now takes a [thenable-for-collection](https://github.com/petkaantonov/bluebird/blob/f41edac61b7c421608ff439bb5a09b7cffeadcf9/test/mocha/props.js#L197-L217) + - All promise collection methods now reject when a promise-or-thenable-for-collection turns out not to give a collection + +## 0.10.8-0 (2013-11-25) + +Features: + + - All static collection methods take thenable-for-collection + +## 0.10.7-0 (2013-11-25) + +Features: + + - throw TypeError when thenable resolves with itself + - Make .race() and Promise.race() forever pending on empty collections + +## 0.10.6-0 (2013-11-25) + +Bugfixes: + + - Promise.resolve and PromiseResolver.resolve follow thenables too. + +## 0.10.5-0 (2013-11-24) + +Bugfixes: + + - Fix infinite loop when thenable resolves with itself + +## 0.10.4-1 (2013-11-24) + +Bugfixes: + + - Fix a file missing from build. (Critical fix) + +## 0.10.4-0 (2013-11-24) + +Features: + + - Remove dependency of es5-shim and es5-sham when using ES3. + +## 0.10.3-0 (2013-11-24) + +Features: + + - Improve performance of `Promise.method` + +## 0.10.2-1 (2013-11-24) + +Features: + + - Rename PromiseResolver#asCallback to PromiseResolver#callback + +## 0.10.2-0 (2013-11-24) + +Features: + + - Remove memoization of thenables + +## 0.10.1-0 (2013-11-21) + +Features: + + - Add methods `Promise.resolve()`, `Promise.reject()`, `Promise.defer()` and `.resolve()`. + +## 0.10.0-1 (2013-11-17) + +## 0.10.0-0 (2013-11-17) + +Features: + + - Implement `Promise.method()` + - Implement `.return()` + - Implement `.throw()` + +Bugfixes: + + - Fix promises being able to use themselves as resolution or follower value + +## 0.9.11-1 (2013-11-14) + +Features: + + - Implicit `Promise.all()` when yielding an array from generators + +## 0.9.11-0 (2013-11-13) + +Bugfixes: + + - Fix `.spread` not unwrapping thenables + +## 0.9.10-2 (2013-11-13) + +Features: + + - Improve performance of promisified functions on V8 + +Bugfixes: + + - Report unhandled rejections even when long stack traces are disabled + - Fix `.error()` showing up in stack traces + +## 0.9.10-1 (2013-11-05) + +Bugfixes: + + - Catch filter method calls showing in stack traces + +## 0.9.10-0 (2013-11-05) + +Bugfixes: + + - Support primitives in catch filters + +## 0.9.9-0 (2013-11-05) + +Features: + + - Add `Promise.race()` and `.race()` + +## 0.9.8-0 (2013-11-01) + +Bugfixes: + + - Fix bug with `Promise.try` not unwrapping returned promises and thenables + +## 0.9.7-0 (2013-10-29) + +Bugfixes: + + - Fix bug with build files containing duplicated code for promise.js + +## 0.9.6-0 (2013-10-28) + +Features: + + - Improve output of reporting unhandled non-errors + - Implement RejectionError wrapping and `.error()` method + +## 0.9.5-0 (2013-10-27) + +Features: + + - Allow fresh copies of the library to be made + +## 0.9.4-1 (2013-10-27) + +## 0.9.4-0 (2013-10-27) + +Bugfixes: + + - Rollback non-working multiple fresh copies feature + +## 0.9.3-0 (2013-10-27) + +Features: + + - Allow fresh copies of the library to be made + - Add more components to customized builds + +## 0.9.2-1 (2013-10-25) + +## 0.9.2-0 (2013-10-25) + +Features: + + - Allow custom builds + +## 0.9.1-1 (2013-10-22) + +Bugfixes: + + - Fix unhandled rethrown exceptions not reported + +## 0.9.1-0 (2013-10-22) + +Features: + + - Improve performance of `Promise.try` + - Extend `Promise.try` to accept arguments and ctx to make it more usable in promisification of synchronous functions. + +## 0.9.0-0 (2013-10-18) + +Features: + + - Implement `.bind` and `Promise.bind` + +Bugfixes: + + - Fix `.some()` when argument is a pending promise that later resolves to an array + +## 0.8.5-1 (2013-10-17) + +Features: + + - Enable process wide long stack traces through BLUEBIRD_DEBUG environment variable + +## 0.8.5-0 (2013-10-16) + +Features: + + - Improve performance of all collection methods + +Bugfixes: + + - Fix .finally passing the value to handlers + - Remove kew from benchmarks due to bugs in the library breaking the benchmark + - Fix some bluebird library calls potentially appearing in stack traces + +## 0.8.4-1 (2013-10-15) + +Bugfixes: + + - Fix .pending() call showing in long stack traces + +## 0.8.4-0 (2013-10-15) + +Bugfixes: + + - Fix PromiseArray and its sub-classes swallowing possibly unhandled rejections + +## 0.8.3-3 (2013-10-14) + +Bugfixes: + + - Fix AMD-declaration using named module. + +## 0.8.3-2 (2013-10-14) + +Features: + + - The mortals that can handle it may now release Zalgo by `require("bluebird/zalgo");` + +## 0.8.3-1 (2013-10-14) + +Bugfixes: + + - Fix memory leak when using the same promise to attach handlers over and over again + +## 0.8.3-0 (2013-10-13) + +Features: + + - Add `Promise.props()` and `Promise.prototype.props()`. They work like `.all()` for object properties. + +Bugfixes: + + - Fix bug with .some returning garbage when sparse arrays have rejections + +## 0.8.2-2 (2013-10-13) + +Features: + + - Improve performance of `.reduce()` when `initialValue` can be synchronously cast to a value + +## 0.8.2-1 (2013-10-12) + +Bugfixes: + + - Fix .npmignore having irrelevant files + +## 0.8.2-0 (2013-10-12) + +Features: + + - Improve performance of `.some()` + +## 0.8.1-0 (2013-10-11) + +Bugfixes: + + - Remove uses of dynamic evaluation (`new Function`, `eval` etc) when strictly not necessary. Use feature detection to use static evaluation to avoid errors when dynamic evaluation is prohibited. + +## 0.8.0-3 (2013-10-10) + +Features: + + - Add `.asCallback` property to `PromiseResolver`s + +## 0.8.0-2 (2013-10-10) + +## 0.8.0-1 (2013-10-09) + +Features: + + - Improve overall performance. Be able to sustain infinite recursion when using promises. + +## 0.8.0-0 (2013-10-09) + +Bugfixes: + + - Fix stackoverflow error when function calls itself "synchronously" from a promise handler + +## 0.7.12-2 (2013-10-09) + +Bugfixes: + + - Fix safari 6 not using `MutationObserver` as a scheduler + - Fix process exceptions interfering with internal queue flushing + +## 0.7.12-1 (2013-10-09) + +Bugfixes: + + - Don't try to detect if generators are available to allow shims to be used + +## 0.7.12-0 (2013-10-08) + +Features: + + - Promisification now consider all functions on the object and its prototype chain + - Individual promisifcation uses current `this` if no explicit receiver is given + - Give better stack traces when promisified callbacks throw or errback primitives such as strings by wrapping them in an `Error` object. + +Bugfixes: + + - Fix runtime APIs throwing synchronous errors + +## 0.7.11-0 (2013-10-08) + +Features: + + - Deprecate `Promise.promisify(Object target)` in favor of `Promise.promisifyAll(Object target)` to avoid confusion with function objects + - Coroutines now throw error when a non-promise is `yielded` + +## 0.7.10-1 (2013-10-05) + +Features: + + - Make tests pass Internet Explorer 8 + +## 0.7.10-0 (2013-10-05) + +Features: + + - Create browser tests + +## 0.7.9-1 (2013-10-03) + +Bugfixes: + + - Fix promise cast bug when thenable fulfills using itself as the fulfillment value + +## 0.7.9-0 (2013-10-03) + +Features: + + - More performance improvements when long stack traces are enabled + +## 0.7.8-1 (2013-10-02) + +Features: + + - Performance improvements when long stack traces are enabled + +## 0.7.8-0 (2013-10-02) + +Bugfixes: + + - Fix promisified methods not turning synchronous exceptions into rejections + +## 0.7.7-1 (2013-10-02) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.7.7-0 (2013-10-01) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.7.6-0 (2013-09-29) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.7.5-0 (2013-09-28) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.7.4-1 (2013-09-28) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.7.4-0 (2013-09-28) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.7.3-1 (2013-09-28) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.7.3-0 (2013-09-27) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.7.2-0 (2013-09-27) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.7.1-5 (2013-09-26) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.7.1-4 (2013-09-25) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.7.1-3 (2013-09-25) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.7.1-2 (2013-09-24) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.7.1-1 (2013-09-24) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.7.1-0 (2013-09-24) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.7.0-1 (2013-09-23) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.7.0-0 (2013-09-23) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.6.5-2 (2013-09-20) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.6.5-1 (2013-09-18) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.6.5-0 (2013-09-18) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.6.4-1 (2013-09-18) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.6.4-0 (2013-09-18) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.6.3-4 (2013-09-18) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.6.3-3 (2013-09-18) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.6.3-2 (2013-09-16) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.6.3-1 (2013-09-16) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.6.3-0 (2013-09-15) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.6.2-1 (2013-09-14) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.6.2-0 (2013-09-14) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.6.1-0 (2013-09-14) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.6.0-0 (2013-09-13) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.5.9-6 (2013-09-12) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.5.9-5 (2013-09-12) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.5.9-4 (2013-09-12) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.5.9-3 (2013-09-11) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.5.9-2 (2013-09-11) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.5.9-1 (2013-09-11) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.5.9-0 (2013-09-11) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.5.8-1 (2013-09-11) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.5.8-0 (2013-09-11) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.5.7-0 (2013-09-11) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.5.6-1 (2013-09-10) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.5.6-0 (2013-09-10) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.5.5-1 (2013-09-10) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.5.5-0 (2013-09-09) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.5.4-1 (2013-09-08) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.5.4-0 (2013-09-08) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.5.3-0 (2013-09-07) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.5.2-0 (2013-09-07) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.5.1-0 (2013-09-07) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.5.0-0 (2013-09-07) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.4.0-0 (2013-09-06) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.3.0-1 (2013-09-06) + +Features: + + - feature + +Bugfixes: + + - bugfix + +## 0.3.0 (2013-09-06) diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/coming-from-other-languages.md b/platforms/android/assets/www/libs/bluebird/docs/docs/coming-from-other-languages.md new file mode 100644 index 0000000..336d554 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/coming-from-other-languages.md @@ -0,0 +1,86 @@ +--- +id: coming-from-other-languages +title: Coming from Other Languages +--- + +This page describes parallels of using promises in other languages. Promises as a pattern are very common in other languages and knowing what they map to in other languages might help you with grasping them conceptually + + - [C#](#c) + - [Scala](#scala) + - [Python](#python) + - [C++](#c) + - [Haskell](#haskell) + - [Java](#java) + - [Android Java](#android-java) + - [Objective-C](#objective-c) + + +## C# + +A promise is similar to a C# `Task`. They both represent the result of an operation. + +A promise's `then` method is similar to a Task's `ContinueWith` method in that both allow attaching a continuation to the promise. Bluebird's [Promise.coroutine](.) is analogous to C#'s `async/await` syntax. + +A `TaskCompletionSource` is analogous to the promise constructor. Although usually promisification is preferred (see the API reference or working with callbacks section). + +`Task.FromResult` is analogous to [Promise.resolve](.). + +The difference between a `Task` and a promise are that a task might not be started and might require a `.Start` call where a promise always represents an already started operation. + +In addition promises are always unwrapped. A promise implicitly has `Task.Unwrap` called on it - that is, promises perform recursive assimilation of promises within them. + +See [this question on StackOverflow](http://stackoverflow.com/questions/26136389/how-can-i-realize-pattern-promise-deffered) for more differences. + +##Scala + +A bluebird promise is similar to a Scala `Future`. A scala `Promise` is similar to how the promise constructor can be used (previously, to a bluebird Deferred). + +Just like a future, a promise represents a value over time. The value can resolve to either a fulfilled (ok completion) or rejected (error completion) state. + +Where blocking on a Future in scala is discouraged, in JavaScript it's downright impossible. + +In addition promises are always unwrapped. That is, promises perform recursive assimilation of promises within them. You can't have a `Promise>` where a `Future[Future[T]]` is valid in Scala. + +See [this question on StackOverflow](http://stackoverflow.com/questions/22724883/js-deferred-promise-future-compared-to-functional-languages-like-scala) for more differences. + +##Python + +A promise is similar to a Twisted Deferred object. In fact the first JavaScript implementations of promises were based on it. However, the APIs have diverged since. The mental model is still very similar. + +A promise is _not_ similar to a Python `concurrent.Future` which does not chain actions. + +Asyncio coroutines are similar to bluebird coroutines in what they let you do, however bluebird coroutines also enable functional-style chaining. + +##C++ + +A bluebird promise is similar to a `std::future` and the promise constructor is similar to an `std::promise` although it should rarely be used in practice (see the promisification section). + +However, a bluebird promise is more powerful than the current implementation of `std::future` since while chaining has been discussed it is not yet implemented. Promises can be chained together. + +Boost futures expose a `.then` method similar to promises and allow this functionality. + +##Haskell + +A promise is a monadic construct with `.then` filling the role of `>>=` (bind). The major difference is that `.then` performs recursive assimilation which acts like a `flatMap` or a map. The type signature of `then` is quote complicated. If we omit the error argument and not throw - it's similar to: + +```hs +then::Promise a -> a -> (Either (Promise b) b) -> Promise B +``` + +That is, you can return either a promise _or a plain value_ from a `then` without wrapping it. + +Promises perform a role similar to `IO` in that they allow for easy chaining of asynchronous non-blocking operations. `Promise.coroutine` can be seen as similar to `do` notation although in practice it's not an accurate comparison. + +##Java + +A promise is similar to a guava `Future` with `chain` being similar to `then`. + +If your'e familiar with Java 8 lambdas, you can think of a promise as a `Future` you can `map` to another future. + +##Android Java + +Several popular Android libraries use promises - for example the Parse Java API returns `Task`s which are similar to JavaScript promises. + +##Objective-C + +If you're familiar with PromiseKit, it is based on a same specification bluebird is based on so the API should feel familiar right away. diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/coming-from-other-libraries.md b/platforms/android/assets/www/libs/bluebird/docs/docs/coming-from-other-libraries.md new file mode 100644 index 0000000..b88177d --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/coming-from-other-libraries.md @@ -0,0 +1,320 @@ +--- +id: coming-from-other-libraries +title: Coming from Other Libraries +--- + +This page is a reference for migrating to bluebird from other flow control or promise libraries. See [installation](install.html) on how to use bluebird in your environment. + + - [Coming from native promises](#coming-from-native-promises) + - [Coming from jQuery deferreds](#coming-from-jquery-deferreds) + - [Coming from `async` module](#coming-from-async-module) + - [Coming from Q](#coming-from-q) + - [Coming from co/koa](#coming-from-co) + - [Coming from highland, RxJS or BaconJS](#coming-from-highland) + +##Coming from native promises + +Bluebird promises are a drop-in replacement for native promises except for subclassing. Additionally you might want to replace usages of the often incorrectly used [Promise.race](.) with bluebird's [Promise.any](.) which does what is usually mistakenly expected from [Promise.race](.). For maximum compatibility, bluebird does provide [Promise.race](.) with ES6 semantics. + +You can also refactor some looping patterns to a more natural form that would [leak memory when using native promises](https://github.com/promises-aplus/promises-spec/issues/179). + +##Coming from jQuery deferreds + +Bluebird treats jQuery deferreds and promises interchangeably. Wherever you can take a promise or return a promise, you can take or return a jQuery deferred instead and it works the same. + +For instance, there is no need to write something like this: + +```js +var firstRequest = new Promise(function(resolve, reject) { + $.ajax({...}).done(resolve).fail(reject); +}); +var secondRequest = new Promise(function(resolve, reject) { + $.ajax({...}).done(resolve).fail(reject); +}); + +Promise.all([firstRequest, secondRequest]).then(function() { + // ... +}); +``` + +Since [Promise.all](.) takes promises, it must also take jQuery deferreds, so the above can be shortened to: + +```js +var firstRequest = $.ajax({...}); +var secondRequest = $.ajax({...}); + +Promise.all([firstRequest, secondRequest]).then(function() { + // ... +}); +``` + +That said, if you have code written using jQuery deferred methods, such as `.then`, `.done` and so on, you cannot drop-in replace the jQuery deferred with a bluebird promise in that code. Despite having the same names, jQuery deferred methods have different semantics than bluebird promise methods. These differences are due to the completely different goals of the implementations. Bluebird is [an internal DSL](http://en.wikipedia.org/wiki/Domain-specific_language) for the domain of asynchronous control flow while jQuery deferreds are a callback aggregator utility ("glorified event emitters"). + +If you do have some code using jQuery deferred methods extensively try to see if some of these jQuery deferred patterns and their replacements can be applied: + +```js +// jQuery +$.when.apply($, someArray).then(...) +// bluebird +Promise.all(someArray).then(...) +``` + +```js +// jQuery +var data = [1,2,3,4]; +var processItemsDeferred = []; + +for(var i = 0; i < data.length; i++) { + processItemsDeferred.push(processItem(data[i])); +} + +$.when.apply($, processItemsDeferred).then(everythingDone); + +// bluebird +var data = [1,2,3,4]; +Promise.map(data, function(item) { + return processItem(item); +}).then(everythingDone); +``` + +```js +// jQuery +var d = $.Deferred(); +d.resolve("value"); +// bluebird +var d = Promise.resolve("value"); +``` + +```js +// jQuery +var d = $.Deferred(); +d.reject(new Error("error")); +// bluebird +var d = Promise.reject(new Error("error")); +``` + +```js +// jQuery +var clicked = $.Deferred(); +$("body").one("click", function(e) { + clicked.resolve(e); +}); +// bluebird +var clicked = new Promise(function(resolve) { + $("body").one("click", resolve); +}); +``` + +```js +// jQuery +.always(removeSpinner); +// bluebird +.finally(removeSpinner); +``` + +##Coming from `async` module + +When working with promises the philosophy is basically a complete opposite than when using `async`. Async provides a huge bag of uncomposable helper functions that work at a very low level of abstraction. When using promises you can get the utility otherwise provided by uncountable amount of inflexible helper functions by just combining and composing a few existing functions and concepts. + +That means when you have a problem there probably isn't an existing function tailored exactly to that problem but instead you can just combine the existing utilities to arrive at a solution. The upside of this is that you don't need to come up with all these different functions to solve problems that are not that different from each other. The most important thing to do when migrating from async to bluebird is this profound shift in philosophy. + +This section lists the most common async module replacements. + +###`async.waterfall` + +If the waterfall elements are static, you can just replace it with a normal promise chain. For waterfalls with dynamic steps, use [Promise.each](.). Multiple arguments can be ferried in an array. + +Implementing the example from [async homepage](https://github.com/caolan/async#waterfalltasks-callback) + +```js +async.waterfall([ + function(callback) { + callback(null, 'one', 'two'); + }, + function(arg1, arg2, callback) { + // arg1 now equals 'one' and arg2 now equals 'two' + callback(null, 'three'); + }, + function(arg1, callback) { + // arg1 now equals 'three' + callback(null, 'done'); + } +], function (err, result) { + // result now equals 'done' +}); +``` + +Since the array passed to waterfall is static (always the same 3 functions) a plain old promise chain is used: + +```js +Promise.resolve(['one', 'two']).spread(function(arg1, arg2) { + // arg1 now equals 'one' and arg2 now equals 'two' + return 'three'; +}).then(function(arg1) { + // arg1 now equals 'three' + return 'done'; +}).then(function(result) { + // result now equals 'done' +}); +``` + +If destructuring parameters are supported, `.spread(function(arg1, arg2) {})` can be replaced with `.then(function([arg1, arg2]){})`. + +###`async.series` + +Using [Promise.mapSeries](.) to implement the example from [async homepage](https://github.com/caolan/async#seriestasks-callback): + +```js +async.series([ + function(callback){ + setTimeout(function(){ + callback(null, 1); + }, 200); + }, + function(callback){ + setTimeout(function(){ + callback(null, 2); + }, 100); + } +], +// optional callback +function(err, results){ + // results is now equal to [1, 2] +}); +``` + +```js +Promise.mapSeries([{timeout: 200, value: 1}, + {timeout: 100, value: 2}], function(item) { + return Promise.delay(item.timeout, item.value); +}).then(function(results) { + // results is now equal to [1, 2] +}); +``` + + +###`async.parallel` + +Using [Promise.all](.) to implement the example from [async homepage](https://github.com/caolan/async#parallel): + +```js +async.parallel([ + function(callback){ + setTimeout(function(){ + callback(null, 'one'); + }, 200); + }, + function(callback){ + setTimeout(function(){ + callback(null, 'two'); + }, 100); + } +], +// optional callback +function(err, results){ + // the results array will equal ['one','two'] even though + // the second function had a shorter timeout. +}); +``` + +```js +Promise.all([Promise.delay('one', 200), + Promise.delay('two', 100)]).then(function(results) { + // the results array will equal ['one','two'] even though + // the second function had a shorter timeout. +}); +``` + +###`async.mapSeries` + +Using [Promise.each](.) to implement the example from [async homepage](https://github.com/caolan/async#maparr-iterator-callback): + +```js +var fs = require('fs'); +async.mapSeries(['file1','file2','file3'], fs.stat, function(err, results){ + // results is now an array of stats for each file +}); +``` + +```js +var fs = Promise.promisifyAll(require('fs')); +Promise.each(['file1','file2','file3'], function(fileName, index, length) { + return fs.statAsync(fileName); +}).then(function(results) { + // results is now an array of stats for each file +}); +``` + +###`async.map` + +Using [Promise.map](.) to implement the example from [async homepage](https://github.com/caolan/async#maparr-iterator-callback): + +```js +var fs = require('fs'); +async.map(['file1','file2','file3'], fs.stat, function(err, results){ + // results is now an array of stats for each file +}); +``` + +```js +var fs = Promise.promisifyAll(require('fs')); +Promise.map(['file1','file2','file3'], function(fileName, index, length) { + return fs.statAsync(fileName); +}).then(function(results) { + // results is now an array of stats for each file +}); +``` + +###`async.whilst` + +Using recursion to implement the example from [async homepage](https://github.com/caolan/async#whilsttest-fn-callback): + +```js +var count = 0; +async.whilst( + function () { return count < 5; }, + function (callback) { + count++; + setTimeout(callback, 1000); + }, + function (err) { + // 5 seconds have passed + } +); +``` +```js +(function loop() { + if (count < 5) { + count++; + return Promise.delay(1000).then(loop); + } + return Promise.resolve(); +})().then(function() { + // 5 seconds have passed +}); +``` + +Be warned that the above example implementations are only superficially equivalent. Callbacks, even with the help of async, require too much boilerplate code to provide the same guarantees as promises. + +##Coming from Q + +Q and bluebird share a lot of common methods that nevertheless have different names: + +- `Q(...)` -> [Promise.resolve()](.) +- `.fail()` -> [.catch()](.) or `.caught()` +- `.fin()` -> [.finally()](.) or `.lastly()` +- `Q.fcall()` -> [Promise.try](.) or `Promise.attempt()` +- `.thenResolve()` -> [.return()](.) or `.thenReturn()` +- `.thenReject()` -> [.throw()](.) or `thenThrow()` + +##Coming from co/koa + +In recent versions generator libraries started abandoning old ideas of special tokens passed to callbacks and started using promises for what's being yielded. + +Bluebird's [Promise.coroutine](.) is a superset of the `co` library, being more extensible as well as supporting cancellation (in environments where [`Generator#return`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator/return) is implemented). + +##Coming from highland, RxJS or BaconJS + +Stream libraries tend to serve a different purpose than promise libraries. Unlike promise libraries streams can represent multiple values. + +Check out the benchmarks section for examples of transitioning an API from Bacon/Rx to promises. diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/contribute.md b/platforms/android/assets/www/libs/bluebird/docs/docs/contribute.md new file mode 100644 index 0000000..c2c2216 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/contribute.md @@ -0,0 +1,144 @@ +--- +id: contribute +title: Contribute +--- + +For development tasks such as contributing, running benchmarks or testing, you need to clone the repository and install dev-dependencies. + +Install [node](http://nodejs.org/) + + git clone git@github.com:petkaantonov/bluebird.git + cd bluebird + npm install + +- [Directory structure](#directory-structure) +- [Style guide](#style-guide) +- [Building](#building) + - [Supported options by the build tool](#supported-options-by-the-build-tool) +- [Testing](#testing) + - [Testing in browsers](#testing-in-browsers) + - [Supported options by the test tool](#supported-options-by-the-test-tool) +- [Benchmarking](#benchmarking) + +## Directory structure + +- `/benchmark` contains benchmark scripts and stats of benchmarks + +- `/tools` contains building and testing tools and scripts + +- `/src` contains the source code + +- `/test` contains test code + + - `/test/mocha` contains tests using the mocha testing framework + - `/test/browser` a directory that can be statically served using a webserver to run tests in browsers. See [testing in browsers](README.md#testing-in-browsers). + + +## Style guide + +Use the same style as is used in the surrounding code. + +###Whitespace + +- No more than 80 columns per line +- 4 space indentation +- No trailing whitespace +- LF at end of files +- Curly braces can be left out of single statement `if/else/else if`s when it is obvious there will never be multiple statements such as null check at the top of a function for an early return. +- Add an additional new line between logical sections of code. + +###Variables + +- Use multiple `var` statements instead of a single one with comma separator. Do not declare variables until you need them. + +###Equality and type checks + +- Always use `===` except when checking for null or undefined. To check for null or undefined, use `x == null`. +- For checks that can be done with `typeof`: do not make helper functions, save results of `typeof` to a variable or make the type string a non-constant. Always write the check in the form `typeof expression === "constant string"` even if it feels like repeating yourself. + +##Building + +``` +node tools/build --debug --release --zalgo --browser --minify +``` + +###Supported options by the build tool + +The value of boolean flags is determined by presence, if you want to pass false value for a boolean flag, use the `no-`-prefix e.g. `--no-debug`. + + - `--release` - Whether to build the release build. The release build is placed at `js/release` directory. Default `false`. + - `--debug` - Whether to build the debug build. The debug build is placed at `js/debug` directory. Default `false`. + - `--zalgo` - Whether to build the zalgo build. The zalgo build is placed at `js/zalgo` directory. Default `false`. + - `--browser` - Whether to compile the browser build. The browser build file is placed at `js/browser/bluebird.js` Default `false`. + - `--minify` - Whether to minify the compiled browser build. The minified browser build file is placed at `js/browser/bluebird.min.js` Default `true`. + +##Testing + +To run all tests, run + + node tools/test + +If you need to run generator tests in older versions of NodeJS run the `tool/test.js` script with `--harmony` argument and 0.11+: + + node-dev --harmony tools/test + +In recent versions of NodeJS where generators are enabled by default: + + node tools/test + +You may specify an individual test file to run with the `--run` script flag: + + node tools/test --run=cancel.js + + +This enables output from the test and may give a better idea where the test is failing. The paramter to `--run` can be any file name located in `test/mocha` folder. + +###Testing in browsers + +To run the test in a browser instead of node, pass the flag `--browser` to the test tool + + node tools/test --run=cancel.js --browser + +This will automatically create a server (default port 9999) and open it in your default browser once the tests have been compiled. + +Keep the test tab active because some tests are timing-sensitive and will fail if the browser is throttling timeouts. Chrome will do this for example when the tab is not active. + +###Supported options by the test tool + +The value of boolean flags is determined by presence, if you want to pass false value for a boolean flag, use the `no-`-prefix e.g. `--no-browser`. + + - `--run=String`. Which tests to run (or compile when testing in browser). Default `"all"`. Can also be a glob string (relative to ./test/mocha folder) + - `--cover=String`. Create code coverage using the String as istanbul reporter. Coverage is created in the ./coverage folder. No coverage is created by default, default reporter is `"html"` (use `--cover` to use default reporter). + - `--browser` - Whether to compile tests for browsers. Default `false`. + - `--port=Number` - Whe port where local server is hosted when testing in browser. Default `9999` + - `--execute-browser-tests` - Whether to execute the compiled tests for browser when using `--browser`. Default `true`. + - `--open-browser` - Whether to open the default browser when executing browser tests. Default `true`. + - `--fake-timers` - Whether to use fake timers (`setTimeout` etc) when running tests in node. Default `true`. + - `--js-hint` - Whether to run JSHint on source files. Default `true`. + - `--saucelabs` Wheter to create a tunnel to sauce labs and run tests in their VMs instead of your browser when compiling tests for browser.Default `false`. + +##Benchmarking + +To run a benchmark, run the given command for a benchmark while on the project root. Requires bash (on windows the mingw32 that comes with git works fine too). + +Each benchmark must + + - Have implementations that do the same thing + - Run each implementation of a benchmark in a separate freshly created process + - Warmup each implementation before timing + +###1\. DoxBee sequential + +Currently the most relevant benchmark is @gorkikosev's benchmark in the article [Analysis of generators and other async patterns in node](http://spion.github.io/posts/analysis-generators-and-other-async-patterns-node.html). The benchmark emulates a situation where n amount of users are making a request in parallel to execute some mixed async/sync action. + +Command: `bench doxbee` + +The implementations for this benchmark are found in `benchmark/doxbee-sequential` directory. + +###2\. Parallel + +This made-up scenario runs 25 shimmed queries in parallel. + +Command: `bench parallel` + +The implementations for this benchmark are found in `benchmark/madeup-parallel` directory. diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/deprecated-apis.md b/platforms/android/assets/www/libs/bluebird/docs/docs/deprecated-apis.md new file mode 100644 index 0000000..cfbd768 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/deprecated-apis.md @@ -0,0 +1,106 @@ +--- +id: deprecated-apis +title: Deprecated APIs +--- + +[deprecated-apis](unfinished-article) + +This file contains documentation for APIs that are no longer supported by Bluebird. +These APIs still work in Bluebird but will be removed at a future version of the library. + +For every use case that the methods below solve there exists a better alternative in [the API reference](/docs/api-reference.html). + +- [Progression](#progression) + - [`.progressed(Function handler)`](#progressedfunction-handler---promise) + - [`.then([Function fulfilledHandler] [, Function rejectedHandler ] [, Function progressHandler ])`](#thenfunction-fulfilledhandler--function-rejectedhandler---function-progresshandler----promise) + - [`.done([Function fulfilledHandler] [, Function rejectedHandler ] [, Function progressHandler ])`](#donefunction-fulfilledhandler--function-rejectedhandler---function-progresshandler----promise) + - [`.fork([Function fulfilledHandler] [, Function rejectedHandler ] [, Function progressHandler ])`](#forkfunction-fulfilledhandler--function-rejectedhandler---function-progresshandler----promise) + +- [Promise resolution](#promise-resolution) + - [`.resolve(dynamic value)`](#resolvedynamic-value---undefined) + - [`.reject(dynamic reason)`](#rejectdynamic-reason---undefined) + - [`.progress(dynamic value)`](#progressdynamic-value---undefined) + - [`.callback`](#callback---function) + + + +##Progression + +The old progression API was meant to be used for tracking the progress of promise resolution. In retrospect, it did not work or compose very well. We understand that problem better now and the use case could be better solved without it. + +See [Progression Migration](./progression-migration.html) for migration assistance and examples of how to convert APIs that use progression to ones that do not. + +#####`.progressed(Function handler)` -> `Promise` + + +Shorthand for `.then(null, null, handler);`. Attach a progress handler that will be called if this promise is progressed. Returns a new promise chained from this promise. + +
+ +#####`.then([Function fulfilledHandler] [, Function rejectedHandler ] [, Function progressHandler ])` -> `Promise` + +The standard [Promises/A+ `.then()`](http://promises-aplus.github.io/promises-spec/) is still supported by Bluebird and support for it will continue indefinitely . However, the variant accepting a third `progressHandler` argument is no longer supported. + +
+ + +#####`.done([Function fulfilledHandler] [, Function rejectedHandler ] [, Function progressHandler ])` -> `void` + +Like `.then()`, but any unhandled rejection that ends up here will be thrown as an error. Again, only the variant with the progression handler is deprecated here. `.done` is still fully supported. + +
+ + +#####`.fork([Function fulfilledHandler] [, Function rejectedHandler ] [, Function progressHandler ])` -> `Promise` + +Like `.then()`, but cancellation of the the returned promise or any of its descendant will not propagate cancellation to this promise or this promise's ancestors. Again, only the variant with the progression handler is deprecated here. `.fork` is still fully supported. + +
+ + +##Promise resolution + +A `PromiseResolver` can be used to control the fate of a promise. It is like "Deferred" in jQuery or `$q.defer` in $q. The `PromiseResolver` objects have a `.promise` property which returns a reference to the controlled promise that can be passed to clients. `.promise` of a `PromiseResolver` is not a getter function to match other implementations. + +The methods of a `PromiseResolver` have no effect if the fate of the underlying promise is already decided (follow, reject, fulfill). + +**The use of `Promise.defer` and deferred objects is discouraged - it is much more awkward and error-prone than using `new Promise`.** + +
+ +#####`.resolve(dynamic value)` -> `undefined` + +Resolve the underlying promise with `value` as the resolution value. If `value` is a thenable or a promise, the underlying promise will assume its state. + +
+ +#####`.reject(dynamic reason)` -> `undefined` + +Reject the underlying promise with `reason` as the rejection reason. + +
+ +#####`.progress(dynamic value)` -> `undefined` + +Progress the underlying promise with `value` as the progression value. + +Example + +```js +function delay(ms) { + var resolver = Promise.defer(); + var now = Date.now(); + setTimeout(function(){ + resolver.resolve(Date.now() - now); + }, ms); + return resolver.promise; +} + +delay(500).then(function(ms){ + console.log(ms + " ms passed"); +}); +``` + +
+ + diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/deprecated_apis.md b/platforms/android/assets/www/libs/bluebird/docs/docs/deprecated_apis.md new file mode 100644 index 0000000..4a2e594 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/deprecated_apis.md @@ -0,0 +1,102 @@ +--- +id: deprecated_apis +title: Deprecated APIs +--- + +This file contains documentation for APIs that are no longer supported by Bluebird. +These APIs still work in Bluebird but will be removed at a future version of the library. + +For every use case that the methods below solve there exists a better alternative in [the API reference](./API.md). + +- [Progression](#progression) + - [`.progressed(Function handler)`](#.progressed) + - [`.then([Function fulfilledHandler] [, Function rejectedHandler ] [, Function progressHandler ])`](#.then) + - [`.done([Function fulfilledHandler] [, Function rejectedHandler ] [, Function progressHandler ])`](#.done) + - [`.fork([Function fulfilledHandler] [, Function rejectedHandler ] [, Function progressHandler ])`](#.fork) + +- [Promise resolution](#promise-resolution) + - [`.resolve(dynamic value)`](#.resolve) + - [`.reject(dynamic reason)`](#.reject) + - [`.progress(dynamic value)`](#.progress) + - [`.callback`](#.callback) + + + +##Progression + +The old progression API was meant to be used for tracking the progress of promise resolution. In retrospect, it did not work or compose very well. We understand that problem better now and the use case could be better solved without it. + +See [Progression Migration](./API.md#progression-migration) for migration assistance and examples of how to convert APIs that use progression to ones that do not. + +#####`.progressed(Function handler)` -> `Promise` + + +Shorthand for [`.then(null, null, handler);`](.). Attach a progress handler that will be called if this promise is progressed. Returns a new promise chained from this promise. + +
+ +#####`.then([Function fulfilledHandler] [, Function rejectedHandler ] [, Function progressHandler ])` -> `Promise` + +The standard [Promises/A+ `.then()`](http://promises-aplus.github.io/promises-spec/) is still supported by Bluebird and support for it will continue indefinitely. However, the variant accepting a third `progressHandler` argument is no longer supported. + +
+ + +#####`.done([Function fulfilledHandler] [, Function rejectedHandler ] [, Function progressHandler ])` -> `void` + +Like [`.then()`](.), but any unhandled rejection that ends up here will be thrown as an error. Again, only the variant with the progression handler is deprecated here. `.done` is still fully supported. + +
+ + +#####`.fork([Function fulfilledHandler] [, Function rejectedHandler ] [, Function progressHandler ])` -> `Promise` + +Like [`.then()`](.), but cancellation of the returned promise or any of its descendant will not propagate cancellation to this promise or this promise's ancestors. Again, only the variant with the progression handler is deprecated here. `.fork` is still fully supported. + +
+ + +##Promise resolution + +A `PromiseResolver` can be used to control the fate of a promise. It is like "Deferred" in jQuery or `$q.defer` in $q. The `PromiseResolver` objects have a `.promise` property which is a reference to the controlled promise that can be passed to clients. `.promise` of a `PromiseResolver` is not a getter function to match other implementations. + +The methods of a `PromiseResolver` have no effect if the fate of the underlying promise is already decided (follow, reject, fulfill). + +**The use of `Promise.defer` and deferred objects is discouraged - it is much more awkward and error-prone than using `new Promise`.** + +
+ +#####`.resolve(dynamic value)` -> `undefined` + +Resolve the underlying promise with `value` as the resolution value. If `value` is a thenable or a promise, the underlying promise will assume its state. + +
+ +#####`.reject(dynamic reason)` -> `undefined` + +Reject the underlying promise with `reason` as the rejection reason. + +
+ +#####`.progress(dynamic value)` -> `undefined` + +Progress the underlying promise with `value` as the progression value. + +Example + +```js +function delay(ms) { + var resolver = Promise.defer(); + var now = Date.now(); + setTimeout(function() { + resolver.resolve(Date.now() - now); + }, ms); + return resolver.promise; +} + +delay(500).then(function(ms) { + console.log(ms + " ms passed"); +}); +``` + +
diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/download-api-reference.md b/platforms/android/assets/www/libs/bluebird/docs/docs/download-api-reference.md new file mode 100644 index 0000000..1072112 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/download-api-reference.md @@ -0,0 +1,6 @@ +--- +id: download-api-reference +title: Download API Reference +--- + +[download-api-reference](unfinished-article) diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/error-explanations.md b/platforms/android/assets/www/libs/bluebird/docs/docs/error-explanations.md new file mode 100644 index 0000000..7dd9d24 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/error-explanations.md @@ -0,0 +1,360 @@ +--- +id: error-explanations +title: Error Explanations +--- + + - [Error: Promise.promisify called on an object](#error-promise.promisify-called-on-an-object) + - [Error: the promise constructor requires a resolver function](#error-the-promise-constructor-requires-a-resolver-function) + - [Error: the promise constructor cannot be invoked directly](#error-the-promise-constructor-cannot-be-invoked-directly) + - [Error: expecting an array, a promise or a thenable](#error-expecting-an-array-a-promise-or-a-thenable) + - [Error: generatorFunction must be a function](#error-generatorfunction-must-be-a-function) + - [Error: fn must be a function](#error-fn-must-be-a-function) + - [Error: cannot enable long stack traces after promises have been created](#error-cannot-enable-long-stack-traces-after-promises-have-been-created) + - [Error: cannot get fulfillment value of a non-fulfilled promise](#error-cannot-get-fulfillment-value-of-a-non-fulfilled-promise) + - [Error: cannot get rejection reason of a non-rejected promise](#error-cannot-get-rejection-reason-of-a-non-rejected-promise) + - [Error: the target of promisifyAll must be an object or a function](#error-the-target-of-promisifyall-must-be-an-object-or-a-function) + - [Error: circular promise resolution chain](#error-circular-promise-resolution-chain) + - [Error: cannot await properties of a non-object](#error-cannot-await-properties-of-a-non-object) + - [Error: expecting a positive integer](#error-expecting-a-positive-integer) + - [Error: A value was yielded that could not be treated as a promise](#error-a-value-was-yielded-that-could-not-be-treated-as-a-promise) + - [Error: cannot await properties of a non object](#error-cannot-await-properties-of-a-non-object) + - [Error: Cannot promisify an API that has normal methods](#error-cannot-promisify-an-api-that-has-normal-methods) + - [Error: Catch filter must inherit from Error or be a simple predicate function](#error-catch-filter-must-inherit-from-error-or-be-a-simple-predicate-function) + - [Error: No async scheduler available](#error-no-async-scheduler-available) + + +##Error: Promise.promisify called on an object + + +You got this this error because you've used `Promise.promisify` on an object, for example: + +```js +var fs = Promise.promisify(require("fs")); +``` + +Instead, use [`Promise.promisifyAll`](.) : + +```js +var fs = Promise.promisifyAll(require("fs")); +``` + +##Error: the promise constructor requires a resolver function + +You got this error because you used `new Promise()` or `new Promise(something)` without passing a function as the parameter. + +If you want to wrap an API with a promise manually, the correct syntax is: + +```js +function wrapWithPromise(parameter) { + return new Promise(function (resolve, reject) { + doSomethingAsync({ + error:reject, + success:resolve + }); + }); +} +``` + +Please consider reading about [new Promise](.) and also consider checking out automatic [promisification](.) as well as [Promise.method](.) + +##Error: the promise constructor cannot be invoked directly + +You can get this error for several reasons: + +####1. You forgot to use `new` when creating a new promise using `new Promise(resolver)` syntax. + +This can happen when you tried to do something like: + + return Promise(function(resolve,reject){ + //... + }) + +You can correct this by doing: + + return new Promise(function(resolve,reject){ + //... + }) + +Please consider reading about [new Promise](.) and also consider checking out automatic [promisification](.) as well as [Promise.method](.) + +####2. You are trying to subclass `Promise` + +Bluebird does not support extending promises this way. Instead, see [scoped prototypes](features.html#scoped-prototypes). + +##Error: expecting an array, a promise or a thenable + +The function being called expects a Promise, but is given something different. There are two main reasons why this may occur. + +**1. Working with collections (like arrays) but pass a single, non-collection element instead** + +Example: + +```js +function returnThree(){ return 3;} + +Promise.resolve(5).map(returnThree).then(function(val){ + console.log("Hello Value!",val); +}); +``` + +The `map` operation is expecting an array here (or a promise on one) and instead gets the number `5`. + +```js +function returnThree(){ return 3;} + +Promise.resolve([5]).map(returnThree).then(function(val){ + console.log("Hello Value!",val); +}); +``` +```map``` is given an array with a single element (see ```[5]``` instead of ```5```), so this statement will work (but is bad practice). + +--- + +**2.```return``` is forgotten in a 'fat' arrow / anonymous function call ```=>```:** + +When debugging or performing a one-time operation on a variable before passing it to a function, a return variable is forgotten. + +Example: + +```js +function nextFunction(something){ return Promise.resolve(something*3); } + +myFunction() + .then(result => nextFunction(result)); // We are implicitly returning a Promise +``` + +Debugging, we want to see the value of result, so we add a ```console.log()``` line: + +```js +function nextFunction(something){ return Promise.resolve(something*3); } + +myFunction().then(result => { + console.log("Debug:", result); + nextFunction(result)); // The chain is broken! We don't return anything to the .then() call +}); +``` + +As this is an anonymous function call, we need to **return** something, which is not currently happening. + +To fix, simply remember to add ```return``` in front of your promise-complying function: + +```js +function nextFunction(something){ return Promise.resolve(something*3); } + +myFunction().then(result => { + console.log("Debug:", result); + return nextFunction(result)); // The anonymous function returns the function which returns the promise .then() needs +}); +``` + + +##Error: generatorFunction must be a function + +You are getting this error when trying to use [Promise.coroutine](.) and not passing it a generator function as a parameter. For example: + +```js +Promise.coroutine(function* () { // Note the * + var data = yield $.get("http://www.example.com"); + var moreUrls = data.split("\n"); + var contents = []; + for( var i = 0, len = moreUrls.length; i < len; ++i ) { + contents.push(yield $.get(moreUrls[i])); + } + return contents; +}); +``` + +Please refer to the relevant section in the documentation about [Generators](.) in order to get usage instructions: + +**Note**: Bluebird used to eagerly check for generators which caused problems with transpilers. Because of this, you might get an error similar to `TypeError: Cannot read property 'next' of undefined` if you pass a function instead of a generator function to Bluebird. + +[Promise.coroutine](.) is built to work with generators to form C# like `async/await` + +##Error: fn must be a function + +You passed a non-function where a function was expected. + +##Error: cannot enable long stack traces after promises have been created + +You are getting this error because you are enabling long stack traces after a promise has already been created. + +When using `longStackTraces` the first line in your code after requiring Bluebird should be: + +```js +Promise.config({ + longStackTraces: true +}); +``` + +See the API page about [Promise.longStackTraces](.) + +##Error: cannot get fulfillment value of a non-fulfilled promise + +You can get this error when you're trying to call `.value` or `.error` when inspecting a promise where the promise has not been fulfilled or rejected yet. + +For example: + +```js +var p = Promise.delay(1000); +p.inspect().value(); +``` + +Consider using [.isPending()](.) [.isFulfilled()](.) and [.isRejected()](.) in order to inspect the promise for status. + +Please consider reading more about [synchronous inspection](.) + +##Error: cannot get rejection reason of a non-rejected promise + +You can get this error when you're trying to call `.value` or `.error` when inspecting a promise where the promise has not been fulfilled or rejected yet. + +For example: + +```js +var p = Promise.delay(1000); +p.inspect().value(); +``` + +Consider using [.isPending()](.) [.isFulfilled()](.) and [.isRejected()](.) in order to inspect the promise for status. + +Please consider reading more about [synchronous inspection](.) + + +##Error: the target of promisifyAll must be an object or a function + +This can happen when you are calling [Promise.promisifyAll](.) on a function and invoking it instead of passing it. + +In general, the usage of [Promise.promisifyAll](.) is along the lines of `var fs = Promise.promisifyAll(require("fs"))`. + +Consider reading the section about [promisification](.) + +##Error: circular promise resolution chain + +This usually happens when you have a promise that resolves or rejects with itself. + +For example: `var p = Promise.delay(100).then(function(){ return p});` . + +In this case, the promise resolves with itself which was is not intended. + +This also happens when implementing live-updating models with a `.then` method that indicates when the model is "ready". A promise is a process, it starts and it ends. + +Promises do not aim to solve such live updating problems directly. One option would be to use an intermediate promise - for example a `.loaded` property on the model that fulfills with nothing. + +resolving it with itself tells it "it is done when it is done" + +##Error: cannot await properties of a non-object + +The `.props` method expects to receive an object. + +For example: + +```js +Promise.props({ + pictures: getPictures(), + comments: getComments(), + tweets: getTweets() +}).then(function(result){ + console.log(result.tweets, result.pictures, result.comments); +}); +``` + +This happens when a non object value or a promise that resolves with something that is not an object is being passed instead. + +##Error: expecting a positive integer + +This happens when you call `.some` passing it a negative value or a non-integer. + +One possible cause is using `.indexOf` which returns `-1` when it doesn't find the value being searched for. + +Please consider reading the API docs for [`.some`](.) + +##Error: A value was yielded that could not be treated as a promise + +You are getting this error because you have tried to `yield` something in a coroutine without a yield handler, for example: + +```js +var coroutine = Promise.coroutine(function*(){ + var bar = yield "Foo"; + console.log(bar); +}); +``` + +The solution is to either convert it to a promise by calling `Promise.resolve` on it or `Promise.promisify` if it's a callback: + +```js +var coroutine = Promise.coroutine(function*(){ + var bar = yield Promise.resolve("Foo"); + console.log(bar); +}); +``` + +Or to use [Promise.coroutine.addYieldHandler`](.) to teach [Promise.coroutine](.) to accept these sort of values. + +##Error: cannot await properties of a non object + +The `.props` method expects to receive an object. + +For example: + +```js +Promise.props({ + pictures: getPictures(), + comments: getComments(), + tweets: getTweets() +}).then(function(result){ + console.log(result.tweets, result.pictures, result.comments); +}); +``` + +This happens when a non object value or a promise that resolves with something that is not an object is being passed instead. + + +##Error: Cannot promisify an API that has normal methods + +This error indicates you have tried to call [Promise.promisifyAll](.) on an object that already has a property with the `Async` suffix: + +```js +var myApi = { foo: function(cb){ ... }, fooAsync(cb) { ... } +``` + +This is because Bluebird adds the `Async` suffix to distinguish the original method from the promisified one, so `fooAsync` would have been overridden. In order to avoid this - either rename `fooAsync` before promisifying the API, or call [Promise.promisify](.) manually on select properties. + +You may also use the custom suffix option to choose another suffix that doesn't result in conflicts. + +If you find this issue in a common library please [open an issue](https://github.com/petkaantonov/bluebird/issues/new). + +##Error: Catch filter must inherit from Error or be a simple predicate function + +Bluebird supports typed and predicate [.catch()](.) calls]. However in order to use the typed/predicate catch syntax for error handling you must do one of two things. + +Pass it a constructor that inherits from `Error`: + + }).catch(ReferenceError, function(e) { // this is fine + }).catch(Array, function(e) { // arrays don't capture stack traces + +This is to enable better stack trace support and to have more consistent and logical code. + +Alternatively, if you provide it a predicate be sure it's a simple function: + + }).catch(function(e){ return false; }, function(e) { // this catches nothing + }).catch(function(e){ return e.someProp = 5; }, function(e) { // this is fine + +Please see the API docs of [.catch()](.) on how to use predicate catches. + +##Error: No async scheduler available + +Async scheduler is a function that takes a callback function and calls the callback function as soon as possible, but asynchronously. For example `setTimeout`. + +By default bluebird only tries a few common async schedulers, such as `setTimeout`, `process.nextTick` and `MutationObserver`. However if your JavaScript runtime environment doesn't expose any of these, you will see this error. + +You may use [Promise.setScheduler](.) to pass a custom scheduler that your environment supports. For example in DukTape: + +```js +Promise.setScheduler(function(fn){ // fn is what to execute + var timer = uv.new_timer.call({}); + uv.timer_start(timer, 0, 0, fn); // add the function as a callback to the timer +}); +``` + + + + diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/features.md b/platforms/android/assets/www/libs/bluebird/docs/docs/features.md new file mode 100644 index 0000000..bac4070 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/features.md @@ -0,0 +1,311 @@ +--- +id: features +title: Features +--- + +[features](unfinished-article) + + +- [Synchronous inspection](#synchronous-inspection) +- [Concurrency coordination](#concurrency-coordination) +- [Promisification on steroids](#promisification-on-steroids) +- [Debuggability and error handling](#debuggability-and-error-handling) +- [Resource management](#resource-management) +- [Cancellation and timeouts](#cancellation-and-timeouts) +- [Scoped prototypes](#scoped-prototypes) +- [Promise monitoring](#promise-monitoring) +- [Async/Await](#async-await) + +##Synchronous inspection + +Synchronous inspection allows you to retrieve the fulfillment value of an already fulfilled promise or the rejection reason of an already rejected promise synchronously. + +Often it is known in certain code paths that a promise is guaranteed to be fulfilled at that point - it would then be extremely inconvenient to use [`.then`](.) to get at the promise's value as the callback is always called asynchronously. + +See the API on [synchronous inspection](.) for more information. + +##Concurrency coordination + +Through the use of [.each](.) and [.map](.) doing things just at the right concurrency level becomes a breeze. + +##Promisification on steroids + +Promisification means converting an existing promise-unaware API to a promise-returning API. + +The usual way to use promises in node is to [Promise.promisifyAll](.) some API and start exclusively calling promise returning versions of the APIs methods. E.g. + +```js +var fs = require("fs"); +Promise.promisifyAll(fs); +// Now you can use fs as if it was designed to use bluebird promises from the beginning + +fs.readFileAsync("file.js", "utf8").then(...) +``` + +Note that the above is an exceptional case because `fs` is a singleton instance. Most libraries can be promisified by requiring the library's classes (constructor functions) and calling promisifyAll on the `.prototype`. This only needs to be done once in the entire application's lifetime and after that you may use the library's methods exactly as they are documented, except by appending the `"Async"`-suffix to method calls and using the promise interface instead of the callback interface. + +As a notable exception in `fs`, `fs.existsAsync` doesn't work as expected, because Node's `fs.exists` doesn't call back with error as first argument. More at [#418](.). One possible workaround is using `fs.statAsync`. + +Some examples of the above practice applied to some popular libraries: + +```js +// The most popular redis module +var Promise = require("bluebird"); +Promise.promisifyAll(require("redis")); +``` + +```js +// The most popular mongodb module +var Promise = require("bluebird"); +Promise.promisifyAll(require("mongodb")); +``` + +```js +// The most popular mysql module +var Promise = require("bluebird"); +// Note that the library's classes are not properties of the main export +// so we require and promisifyAll them manually +Promise.promisifyAll(require("mysql/lib/Connection").prototype); +Promise.promisifyAll(require("mysql/lib/Pool").prototype); +``` + +```js +// Mongoose +var Promise = require("bluebird"); +Promise.promisifyAll(require("mongoose")); +``` + +```js +// Request +var Promise = require("bluebird"); +Promise.promisifyAll(require("request")); +// Use request.getAsync(...) not request(..), it will not return a promise +``` + +```js +// mkdir +var Promise = require("bluebird"); +Promise.promisifyAll(require("mkdirp")); +// Use mkdirp.mkdirpAsync not mkdirp(..), it will not return a promise +``` + +```js +// winston +var Promise = require("bluebird"); +Promise.promisifyAll(require("winston")); +``` + +```js +// rimraf +var Promise = require("bluebird"); +// The module isn't promisified but the function returned is +var rimrafAsync = Promise.promisify(require("rimraf")); +``` + +```js +// xml2js +var Promise = require("bluebird"); +Promise.promisifyAll(require("xml2js")); +``` + +```js +// jsdom +var Promise = require("bluebird"); +Promise.promisifyAll(require("jsdom")); +``` + +```js +// fs-extra +var Promise = require("bluebird"); +Promise.promisifyAll(require("fs-extra")); +``` + +```js +// prompt +var Promise = require("bluebird"); +Promise.promisifyAll(require("prompt")); +``` + +```js +// Nodemailer +var Promise = require("bluebird"); +Promise.promisifyAll(require("nodemailer")); +``` + +```js +// ncp +var Promise = require("bluebird"); +Promise.promisifyAll(require("ncp")); +``` + +```js +// pg +var Promise = require("bluebird"); +Promise.promisifyAll(require("pg")); +``` + +In all of the above cases the library made its classes available in one way or another. If this is not the case, you can still promisify by creating a throwaway instance: + +```js +var ParanoidLib = require("..."); +var throwAwayInstance = ParanoidLib.createInstance(); +Promise.promisifyAll(Object.getPrototypeOf(throwAwayInstance)); +// Like before, from this point on, all new instances + even the throwAwayInstance suddenly support promises +``` + +See also [`Promise.promisifyAll`](.). + +##Debuggability and error handling + + - [Surfacing unhandled errors](#surfacing-unhandled-errors) + - [Long stack traces](#long-stack-traces) + - [Error pattern matching](#error-pattern-matching) + - [Warnings](#warnings) + +###Surfacing unhandled errors + +The default approach of bluebird is to immediately log the stack trace when there is an unhandled rejection. This is similar to how uncaught exceptions cause the stack trace to be logged so that you have something to work with when something is not working as expected. + +However because it is possible to handle a rejected promise at any time in the indeterminate future, some programming patterns will result in false positives. Because such programming patterns are not necessary and can always be refactored to never cause false positives, we recommend doing that to keep debugging as easy as possible . You may however feel differently so bluebird provides hooks to implement more complex failure policies. + +Such policies could include: + +- Logging after the promise became GCd (requires a native node.js module) +- Showing a live list of rejected promises +- Using no hooks and using [`.done`](.) to manually to mark end points where rejections will not be handled +- Swallowing all errors (challenge your debugging skills) +- ... + +See [global rejection events](http://bluebirdjs.com/docs/api/error-management-configuration.html#global-rejection-events) to learn more about the hooks. + +###Long stack traces + +Normally stack traces don't go beyond asynchronous boundaries so their utility is greatly reduced in asynchronous code: + +```js +setTimeout(function() { + setTimeout(function() { + setTimeout(function() { + a.b.c; + }, 1); + }, 1) +}, 1) +``` + +``` +ReferenceError: a is not defined + at null._onTimeout file.js:4:13 + at Timer.listOnTimeout (timers.js:90:15) +``` + +Of course you could use hacks like monkey patching or domains but these break down when something can't be monkey patched or new apis are introduced. + +Since in bluebird [promisification](.) is made trivial, you can get long stack traces all the time: + +```js +var Promise = require("bluebird"); + +Promise.delay(1) + .delay(1) + .delay(1).then(function() { + a.b.c; + }); +``` + +``` +Unhandled rejection ReferenceError: a is not defined + at file.js:6:9 + at processImmediate [as _immediateCallback] (timers.js:321:17) +From previous event: + at Object. (file.js:5:15) + at Module._compile (module.js:446:26) + at Object.Module._extensions..js (module.js:464:10) + at Module.load (module.js:341:32) + at Function.Module._load (module.js:296:12) + at Function.Module.runMain (module.js:487:10) + at startup (node.js:111:16) + at node.js:799:3 +``` + +And there is more. Bluebird's long stack traces additionally eliminate cycles, don't leak memory, are not limited to a certain amount of asynchronous boundaries and are fast enough for most applications to be used in production. All these are non-trivial problems that haunt straight-forward long stack trace implementations. + +See [installation](install.html) on how to enable long stack traces in your environment. + +###Error pattern matching + +Perhaps the greatest thing about promises is that it unifies all error handling into one mechanism where errors propagate automatically and have to be explicitly ignored. + +###Warnings + +Promises can have a steep learning curve and it doesn't help that promise standards go out of their way to make it even harder. Bluebird works around the limitations by providing warnings where the standards disallow throwing errors when incorrect usage is detected. See [Warning Explanations](warning-explanations.html) for the possible warnings that bluebird covers. + +See [installation](install.html) on how to enable warnings in your environment. + +###Promise monitoring + +This feature enables subscription to promise lifecycle events via standard global events mechanisms in browsers and Node.js. + +The following lifecycle events are available: + + - `"promiseCreated"` - Fired when a promise is created through the constructor. + - `"promiseChained"` - Fired when a promise is created through chaining (e.g. [.then](.)). + - `"promiseFulfilled"` - Fired when a promise is fulfilled. + - `"promiseRejected"` - Fired when a promise is rejected. + - `"promiseResolved"` - Fired when a promise adopts another's state. + - `"promiseCancelled"` - Fired when a promise is cancelled. + +This feature has to be explicitly enabled by calling [Promise.config](.) with `monitoring: true`. + +The actual subscription API depends on the environment. + +1\. In Node.js, use `process.on`: + +```js +// Note the event name is in camelCase, as per Node.js convention. +process.on("promiseChained", function(promise, child) { + // promise - The parent promise the child was chained from + // child - The created child promise. +}); +``` + +2\. In modern browsers use `window.addEventListener` (window context) or `self.addEventListener()` (web worker or window context) method: + +```js +// Note the event names are in mashedtogetherlowercase, as per DOM convention. +self.addEventListener("promisechained", function(event) { + // event.details.promise - The parent promise the child was chained from + // event.details.child - The created child promise. +}); +``` + +3\. In legacy browsers use `window.oneventname = handlerFunction;`. + +```js +// Note the event names are in mashedtogetherlowercase, as per legacy convention. +window.onpromisechained = function(promise, child) { + // event.details.promise - The parent promise the child was chained from + // event.details.child - The created child promise. +}; +``` + +##Resource management + +##Cancellation and timeouts + +##Scoped prototypes + +Building a library that depends on bluebird? You should know about the "scoped prototype" feature. + +If your library needs to do something obtrusive like adding or modifying methods on the `Promise` prototype, uses long stack traces or uses a custom unhandled rejection handler then... that's totally ok as long as you don't use `require("bluebird")`. Instead you should create a file +that creates an isolated copy. For example, creating a file called `bluebird-extended.js` that contains: + +```js + //NOTE the function call right after +module.exports = require("bluebird/js/main/promise")(); +``` + +Your library can then use `var Promise = require("bluebird-extended");` and do whatever it wants with it. Then if the application or other library uses their own bluebird promises they will all play well together because of Promises/A+ thenable assimilation magic. + + +##Async/Await + diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/getting-started.md b/platforms/android/assets/www/libs/bluebird/docs/docs/getting-started.md new file mode 100644 index 0000000..e01f82d --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/getting-started.md @@ -0,0 +1,34 @@ +--- +id: getting-started +title: Getting Started +redirect_from: "/index.html" +redirect_from: "/docs/index.html" +--- + +[getting-started](unfinished-article) + +## Node.js + + npm install bluebird + +Then: + +```js +var Promise = require("bluebird"); +``` + +## Browsers + +(See also [Installation](install.html).) + +There are many ways to use bluebird in browsers: + +- Direct downloads + - Full build [bluebird.js](https://cdn.jsdelivr.net/bluebird/latest/bluebird.js) + - Full build minified [bluebird.min.js](https://cdn.jsdelivr.net/bluebird/latest/bluebird.min.js) + - Core build [bluebird.core.js](https://cdn.jsdelivr.net/bluebird/latest/bluebird.core.js) + - Core build minified [bluebird.core.min.js](https://cdn.jsdelivr.net/bluebird/latest/bluebird.core.min.js) +- You may use browserify on the main export +- You may use the [bower](http://bower.io) package. + +When using script tags the global variables `Promise` and `P` (alias for `Promise`) become available. Bluebird runs on a wide variety of browsers including older versions. We'd like to thank BrowserStack for giving us a free account which helps us test that. diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/install.md b/platforms/android/assets/www/libs/bluebird/docs/docs/install.md new file mode 100644 index 0000000..d2b112c --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/install.md @@ -0,0 +1,90 @@ +--- +id: install +title: Installation +--- + +- [Browser installation](#browser-installation) +- [Node installation](#node-installation) +- [Supported platforms](#supported-platforms) + +##Browser installation + +Download bluebird {{ site.version }} (development) + +Unminified source file meant to be used in development. Warnings and long stack traces are enabled which are taxing on performance. + +```html + +``` + +Download bluebird {{ site.version }} (production) + +Minified source file meant to be used in production. Warnings and long straces are disabled. The gzipped size is 17.76KB. + +```html + +``` + +Unless an AMD loader is installed, the script tag installation exposes the library in the `Promise` and `P` namespaces. If you want to restore the `Promise` namespace, use `var Bluebird = Promise.noConflict()`. + +###Bower + +``` +$ bower install --save bluebird +``` + +###Browserify and Webpack + +``` +$ npm install --save bluebird +``` + +```js +var Promise = require("bluebird"); +// Configure +Promise.config({ + longStackTraces: true, + warnings: true +}) +``` + +##Node installation + +``` +$ npm install --save bluebird +``` + +```js +var Promise = require("bluebird"); +``` + +To enable long stack traces and warnings in node development: + +``` +$ NODE_ENV=development node server.js +``` + +To enable long stack traces and warnings in node production: + +``` +$ BLUEBIRD_DEBUG=1 node server.js +``` + +See [Environment Variables](.). + +##Supported platforms + +Bluebird officially supports and is tested on node.js, iojs and browsers starting from IE7. Unofficial platforms are supported with best effort only. + +IE7 and IE8 do not support using keywords as property names, so if supporting these browsers is required you need to use the compatibility aliases: + + +- [`Promise.try()`](.) -> `Promise.attempt()` +- [`.catch()`](.) -> `.caught()` +- [`.finally()`](.) -> `.lastly()` +- [`.return()`](.) -> `.thenReturn()` +- [`.throw()`](.) -> `.thenThrow()` + +Long stack traces are only supported in Chrome, recent Firefoxes and Internet Explorer 10+ + +[![Selenium Test Status](https://saucelabs.com/browser-matrix/petka_antonov.svg)](https://saucelabs.com/u/petka_antonov) diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/new-in-bluebird-3.md b/platforms/android/assets/www/libs/bluebird/docs/docs/new-in-bluebird-3.md new file mode 100644 index 0000000..1042e81 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/new-in-bluebird-3.md @@ -0,0 +1,64 @@ +--- +id: new-in-bluebird-3 +title: New in bluebird 3.0 +--- + +##Cancellation overhaul + +Cancellation has been redesigned for bluebird 3.0. Any code that relies on 2.x cancellation semantics won't work in 3.0 or later. See [Cancellation](.) for more information. + +##Promisification API changes + +Both promisification \([Promise.promisify](.) and [Promise.promisifyAll](.)\) methods and [Promise.fromCallback](.) now by default ignore multiple arguments passed to the callback adapter and instead only the first argument is used to resolve the promise. The behavior in 2.x is to construct an array of the arguments and resolve the promise with it when more than one argument is passed to the callback adapter. The problems with this approach and reasons for the change are discussed in [#307](.). + +[Promise.promisify](.)'s second argument is now an options object, so any code using the second argument needs to change: + +```js +// 2.x +Promise.promisify(fn, ctx); +// 3.0 +Promise.promisify(fn, {context: ctx}); +``` + +Both promisification \([Promise.promisify](.) and [Promise.promisifyAll](.)\) methods and [Promise.fromCallback](.) all take a new boolean option `multiArgs` which defaults to `false`. Enabling this option will make the adapter callback *always* construct an array of the passed arguments regardless of amount of arguments. This can be used to reliably get access to all arguments rather than just the first one. + +##Collection method changes + +All collection methods now support objects that implement [ES6's *iterable*](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols) protocol along with regular arrays. + +[Promise.props](.) and [.props](.) now support [ES6 `Map`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) objects along with normal objects. Actual `Map` objects are only considered for their entries in the map instead of both entries and properties. + + +##Warnings + +Warnings have been added to report usages which are very likely to be programmer errors. See [Promise.config](.) for how to enable warnings. See [Warning Explanations](warning-explanations.html) for list of the warnings and their explanations. + +##Feature additions + +- [.catch\(\)](.) now supports an object predicate as a filter: `.catch({code: 'ENOENT'}, e => ...)`. +- Added [.suppressUnhandledRejections\(\)](.). +- Added [.catchThrow\(\)](.). +- Added [.catchReturn\(\)](.). +- Added [Promise.mapSeries\(\)](.) and [.mapSeries\(\)](.) + +##Deprecations + +- `Promise.settle` has been deprecated. Use [.reflect](.) instead. +- `Promise.spawn` has been deprecated. Use [Promise.coroutine](.) instead. +- [Promise.try](.)'s `ctx` and `arg` arguments have been deprecated. +- `.nodeify` is now better known as [.asCallback](.) +- `.fromNode` is now better known as [Promise.fromCallback](.) + + +##Summary of breaking changes + +- Promisifier APIs. +- Cancellation redesign. +- Promise progression has been completely removed. +- [.spread](.)'s second argument has been removed. +- [.done](.) causes an irrecoverable fatal error in Node.js environments now. See [#471](.) for rationale. +- Errors created with [Promise.reject](.) or `reject` callback of [new Promise](.) are no longer marked as [OperationalError](.)s. + +##3.0.1 update + +Note that the 3.0.1 update is strictly speaking backward-incompatible with 3.0.0. Version 3.0.0 changed the previous behavior of the `.each` method and made it work more same as the new `.mapSeries` - 3.0.1 unrolls this change by reverting to the `.tap`-like behavior found in 2.x However, this would only affect users who updated to 3.0.0 during the short time that it wasn't deprecated and started relying on the new `.each` behavior. This seems unlikely, and therefore the major version was not changed. diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/support.md b/platforms/android/assets/www/libs/bluebird/docs/docs/support.md new file mode 100644 index 0000000..c295075 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/support.md @@ -0,0 +1,26 @@ +--- +id: support +title: Support +--- + +Depending on the nature of your problem there are a few possible ways of getting help with your problem. + +###Stack Overflow + +Stack Overflow has an active community answering questions on both the [bluebird](http://stackoverflow.com/questions/tagged/bluebird) and [promise](http://stackoverflow.com/questions/tagged/promise) tags. If you are unfamiliar with Stack Overflow, do review [the asking guidelines](http://stackoverflow.com/help/asking) before asking a new question there. + +###Google Groups mailing list + +The [bluebird-js@googlegroups.com](https://groups.google.com/forum/#!forum/bluebird-js) mailing list is the best place to ask any question that cannot be easily fit in the stack overflow question format. + +###IRC + +You can usually get fast answers on the freenode.net channels [#bluebird](irc://chat.freenode.net/bluebird) and [#promises](irc://chat.freenode.net/promises). + +###Gitter + +If you are not comfortable using IRC you can also join the [bluebird gitter chat](https://gitter.im/petkaantonov/bluebird) + +###Github issue tracker + +If you feel that your problem is caused by a bug or a missing feature that should be added, you should use the [Github issue tracker](https://github.com/petkaantonov/bluebird/issues/) to report it. However in any other case the issue tracker is not the appropriate channel. diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/warning-explanations.md b/platforms/android/assets/www/libs/bluebird/docs/docs/warning-explanations.md new file mode 100644 index 0000000..fe44375 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/warning-explanations.md @@ -0,0 +1,85 @@ +--- +id: warning-explanations +title: Warning Explanations +--- + +[warning-explanations](unfinished-article) + + - [Warning: .then() only accepts functions](#warning-then-only-accepts-functions) + - [Warning: a promise was rejected with a non-error](#warning-a-promise-was-rejected-with-a-non-error) + - [Warning: a promise was created in a handler but was not returned from it](#warning-a-promise-was-created-in-a-handler-but-was-not-returned-from-it) + + +##Warning: .then() only accepts functions + +If you see this warning your code is probably not doing what you expect it to, the most common reason is passing the *result* of calling a function to [.then()](.) instead of the function *itself*: + +```js +function processImage(image) { + // Code that processes image +} + +getImage().then(processImage()); +``` + +The above calls the function `processImage()` *immediately* and passes the result to [.then()](.) (which is most likely `undefined` - the default return value when a function doesn't return anything). + +To fix it, simply pass the function reference to [.then()](.) as is: + +```js +getImage().then(processImage) +``` + +*If you are wondering why this is a warning and not a simple TypeError it is because the due to historic reasons Promises/A+ specification requires that incorrect usage is silently ignored.* + +##Warning: a promise was rejected with a non-error + +Due to a historic mistake in JavaScript, the `throw` statement is allowed to be used with any value, not just errors, and Promises/A+ choosing to inherit this mistake, it is possible to reject a promise with a value that is not an error. + +An error is an object that is a `instanceof Error`. It will at minimum have the properties `.stack` and `.message`, which are an absolute must to have for any value that is being used in an automatic propagation mechanism such as exceptions and rejections. This is because errors are usually handled many levels above from where they actually originated from - the error object must have sufficient metadata about it so that its ultimate handler many levels above will have all the information needed for creating a useful high level error report. + +Since all objects support having properties you might still wonder why exactly does it have to be an error object and not just any object. In addition to supporting properties, an equally important feature necessary for values that are automatically propagated is the stack trace property (`.stack`). A stack trace allows you easily find where an error originated from. + +You should heed this warning because rejecting a promise with a non-error makes debugging extremely hard and costly. Additionally, if you reject with simple primitives such as `undefined` (commonly caused by simple calling `reject()`) you cannot handle errors at all because it's impossible to tell from `undefined` what exactly went wrong. All you can tell the user is that "something went wrong" and lose them forever. + + +##Warning: a promise was created in a handler but was not returned from it + +This usually means that you simply forgot a `return` statement somewhere which will cause a runaway promise that is not connected to any promise chain. + +For example: + +```js +getUser().then(function(user) { + getUserData(user); +}).then(function(userData) { + // userData is undefined +}); +``` + +Because the result of `getUserData()` is not returned from the first then handler, it becomes a runaway promise that is not awaited for by the second then. The second [.then()](.) simply gets immediately called with `undefined` (because `undefined` is the default return value when you don't return anything). + +To fix it, you need to `return` the promise: + +```js +getUser().then(function(user) { + return getUserData(user); +}).then(function(userData) { + // userData is the user's data +}); +``` + +
+ +If you know what you're doing and don't want to silence all warnings, you can create runaway promises without causing this warning by returning e.g. `null`: + +```js +getUser().then(function(user) { + // Perform this in the "background" and don't care about it's result at all + saveAnalytics(user); + // return a non-undefined value to signal that we didn't forget to return + return null; +}); +``` + + diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/what-about-generators.md b/platforms/android/assets/www/libs/bluebird/docs/docs/what-about-generators.md new file mode 100644 index 0000000..4f5d1c8 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/what-about-generators.md @@ -0,0 +1,6 @@ +--- +id: what-about-generators +title: What About Generators? +--- + +[what-about-generators](unfinished-article) diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/why-bluebird.md b/platforms/android/assets/www/libs/bluebird/docs/docs/why-bluebird.md new file mode 100644 index 0000000..3fea3dd --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/why-bluebird.md @@ -0,0 +1,22 @@ +--- +id: why-bluebird +title: Why bluebird? +--- + +There are many third party promise libraries available for JavaScript and even the standard library contains a promise implementation in newer versions of browsers and node/io.js. This page will explore why one might use bluebird promises over other third party or the standard library implementations. For reasons why to use promises in general, see the [Why Promises?](why-promises.html) article. + +###Bluebird design principles + +Bluebird is built with the following design principles in mind: + + - **Pragmatic and not theoretical.** - Bluebird will always pick the pragmatic route vs the theoretically elegant one when there is a conflict. The library's API was created based on real-life use cases and after a lot of consideration. + - **Fully featured without bloat** - Bluebird provides all the tools and utilities needed to realize a highly expressive and fluent DSL for asynchronous JavaScript without suffering from bloat by avoiding incorporating features that are solely motivated by theoretical arguments, have extremely narrow applicability or have limited synergy and composability with existing features. + - **Easy to debug** - A major consequence of choosing pragmatism over theoretical elegancy, a property that among promise libraries taken to this extent is unique to bluebird. + - Bluebird ships with the best cross-platform long stack traces out there and a warning system. This helps you recognize common and devastating promise usage mistakes early before they lead to hard to debug code later. + - Unhandled errors are not silently swallowed by default but reported along with helpful stack traces where applicable. All of this is of course configurable. + - **Zero overhead abstraction** - In server-side applications the performance of a promise implementation matters. Bluebird's server side performance is measured with highly relevant realistic end-to-end macro [benchmarks](benchmarks.html) and consistently comes out on top. We understand that if bluebird is as close to a zero cost abstraction as possible, developers won't be tempted to short-circuit and absorb complexity themselves. + - **Runs everywhere** - Bluebird runs on pretty much every platform. This makes bluebird ideal for projects who care about providing consistent cross-platform and cross-version experience. It runs on old IE, it has even been known to run on Netscape 7. + - **Spec compatible** - bluebird can work as a drop-in replacement for native promises for an instant performance boost. It passes the Promises/A+ test suite and is fully spec compliant. + + + diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/why-performance.md b/platforms/android/assets/www/libs/bluebird/docs/docs/why-performance.md new file mode 100644 index 0000000..c92aca2 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/why-performance.md @@ -0,0 +1,6 @@ +--- +id: why-performance +title: Why Performance? +--- + +[why-performance](unfinished-article) diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/why-promises.md b/platforms/android/assets/www/libs/bluebird/docs/docs/why-promises.md new file mode 100644 index 0000000..a538a9d --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/why-promises.md @@ -0,0 +1,127 @@ +--- +id: why-promises +title: Why Promises? +--- + +Promises are a concurrency primitive with a proven track record and language integration in most modern programming languages. They have been extensively studied since the 80s and will make your life much easier. + +You should use promises to turn this: + +```js +fs.readFile("file.json", function (err, val) { + if (err) { + console.error("unable to read file"); + } + else { + try { + val = JSON.parse(val); + console.log(val.success); + } + catch (e) { + console.error("invalid json in file"); + } + } +}); +``` + +Into this: + +```js +fs.readFileAsync("file.json").then(JSON.parse).then(function (val) { + console.log(val.success); +}) +.catch(SyntaxError, function (e) { + console.error("invalid json in file"); +}) +.catch(function (e) { + console.error("unable to read file"); +}); +``` + +*If you're thinking, "There's no `readFileAsync` method on `fs` that returns a promise!" see [promisification](api/promisification.html)* + +You might notice that the promise approach looks very similar to using synchronous I/O: + +```js +try { + var val = JSON.parse(fs.readFileSync("file.json")); + console.log(val.success); +} +// Gecko-only syntax; used for illustrative purposes +catch (e if e instanceof SyntaxError) { + console.error("invalid json in file"); +} +catch (e) { + console.error("unable to read file"); +} +``` + +This is the point—to have something that works like `return` and `throw` in synchronous code. + +You can also use promises to improve code that was written with callbacks: + +```js +//Copyright Plato http://stackoverflow.com/a/19385911/995876 +//CC BY-SA 2.5 +mapSeries(URLs, function (URL, done) { + var options = {}; + needle.get(URL, options, function (error, response, body) { + if (error) { + return done(error); + } + try { + var ret = JSON.parse(body); + return done(null, ret); + } + catch (e) { + done(e); + } + }); +}, function (err, results) { + if (err) { + console.log(err); + } else { + console.log('All Needle requests successful'); + // results is a 1 to 1 mapping in order of URLs > needle.body + processAndSaveAllInDB(results, function (err) { + if (err) { + return done(err); + } + console.log('All Needle requests saved'); + done(null); + }); + } +}); +``` + +This is far more readable when done with promises: + +```js +Promise.promisifyAll(needle); +var options = {}; + +var current = Promise.resolve(); +Promise.map(URLs, function (URL) { + current = current.then(function () { + return needle.getAsync(URL, options); + }); + return current; +}).map(function (responseAndBody) { + return JSON.parse(responseAndBody[1]); +}).then(function (results) { + return processAndSaveAllInDB(results); +}).then(function () { + console.log('All Needle requests saved'); +}).catch(function (e) { + console.log(e); +}); +``` + +Also, promises don't just give you correspondences for synchronous features; they can also be used as limited event emitters or callback aggregators. + +More reading: + + - [Promise nuggets](https://promise-nuggets.github.io/) + - [Why I am switching to promises](http://spion.github.io/posts/why-i-am-switching-to-promises.html) + - [What is the the point of promises](http://domenic.me/2012/10/14/youre-missing-the-point-of-promises/#toc_1) + - [Aren't Promises Just Callbacks?](http://stackoverflow.com/questions/22539815/arent-promises-just-callbacks) diff --git a/platforms/android/assets/www/libs/bluebird/docs/docs/working-with-callbacks.md b/platforms/android/assets/www/libs/bluebird/docs/docs/working-with-callbacks.md new file mode 100644 index 0000000..a420826 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/docs/working-with-callbacks.md @@ -0,0 +1,463 @@ +--- +id: working-with-callbacks +title: Working with Callbacks +--- + +This page explains how to interface your code with existing callback APIs and libraries you're using. We'll see that making bluebird work with callback APIs is not only easy - it's also fast. + +We'll cover several subjects. If you want to get the tl;dr what you need is likely the [Working with callback APIs using the Node convention](#working-with-callback-apis-using-the-node-convention) section. + +First to make sure we're on the same page: + +Promises have state, they start as pending and can settle to: + + - __fulfilled__ meaning that the computation completed successfully. + - __rejected__ meaning that the computation failed. + +Promise returning functions _should never throw_, they should always successfully return a promise which is rejected in the case of an error. Throwing from a promise returning function will force you to use both a `} catch { ` _and_ a `.catch`. People using promisified APIs do not expect promises to throw. If you're not sure how async APIs work in JS - please [see this answer](http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-asynchronous-call/16825593#16825593) first. + + * [Automatic vs. Manual conversion](#automatic-vs.-manual-conversion) + * [Working with callback APIs using the Node convention](#working-with-callback-apis-using-the-node-convention) + * [Working with one time events.](#working-with-one-time-events) + * [Working with delays](#working-with-delays/setTimeout) + * [Working with browser APIs](#working-with-browser-apis) + * [Working with databases](#working-with-databases) + * [More Common Examples](#more-common-examples) + * [Working with any other APIs](#working-with-any-other-apis) + +There is also [this more general StackOverflow question](http://stackoverflow.com/questions/22519784/how-do-i-convert-an-existing-callback-api-to-promises) about conversion of callback APIs to promises. If you find anything missing in this guide however, please do open an issue or pull request. + +###Automatic vs. Manual conversion + +There are two primary methods of converting callback based APIs into promise based ones. You can either manually map the API calls to promise returning functions or you can let the bluebird do it for you. We **strongly** recommend the latter. + +Promises provide a lot of really cool and powerful guarantees like throw safety which are hard to provide when manually converting APIs to use promises. Thus, whenever it is possible to use the `Promise.promisify` and `Promise.promisifyAll` methods - we recommend you use them. Not only are they the safest form of conversion - they also use techniques of dynamic recompilation to introduce very little overhead. + +###Working with callback APIs using the Node convention + +In Node/io.js most APIs follow a convention of ['error-first, single-parameter'](https://gist.github.com/CrabDude/10907185) as such: + +```js +function getStuff(data, callback) { + ... +} + +getStuff("dataParam", function(err, data) { + if (!err) { + + } +}); +``` + +This APIs are what most core modules in Node/io use and bluebird comes with a fast and efficient way to convert them to promise based APIs through the `Promise.promisify` and `Promise.promisifyAll` function calls. + + - [Promise.promisify](.) - converts a _single_ callback taking function into a promise returning function. It does not alter the original function and returns the modified version. + - [Promise.promisifyAll](.) - takes an _object_ full of functions and _converts each function_ into the new one with the `Async` suffix (by default). It does not change the original functions but instead adds new ones. + +> **Note** - please check the linked docs for more parameters and usage examples. + +Here's an example of `fs.readFile` with or without promises: + +```js +// callbacks +var fs = require("fs"); +fs.readFile("name", "utf8", function(err, data) { + +}); +``` + +Promises: + +```js +var fs = Promise.promisifyAll(require("fs")); +fs.readFileAsync("name", "utf8").then(function(data) { + +}); +``` + +Note the new method is suffixed with `Async`, as in `fs.readFileAsync`. It did not replace the `fs.readFile` function. Single functions can also be promisified for example: + +```js +var request = Promise.promisify(require("request")); +request("foo.bar").then(function(result) { + +}); +``` + +> **Note** `Promise.promisify` and `Promise.promisifyAll` use dynamic recompilation for really fast wrappers and thus calling them should be done only once. [Promise.fromCallback](.) exists for cases where this is not possible. + +###Working with one time events + +Sometimes we want to find out when a single one time event has finished. For example - a stream is done. For this we can use [new Promise](.). Note that this option should be considered only if [automatic conversion](#working-with-callback-apis-using-the-node-convention) isn't possible. + +Note that promises model a _single value through time_, they only resolve _once_ - so while they're a good fit for a single event, they are not recommended for multiple event APIs. + +For example, let's say you have a window `onload` event you want to bind to. We can use the promise construction and resolve when the window has loaded as such: + +```js +// onload example, the promise constructor takes a +// 'resolver' function that tells the promise when +// to resolve and fire off its `then` handlers. +var loaded = new Promise(function(resolve, reject) { + window.addEventListener("load", resolve); +}); + +loaded.then(function() { + // window is loaded here +}); +``` + +Here is another example with an API that lets us know when when a connection is ready. The attempt here is imperfect and we'll describe why soon: + +```js +function connect() { + var connection = myConnector.getConnection(); // Synchronous. + return new Promise(function(resolve, reject) { + connection.on("ready", function() { + // When a connection has been established + // mark the promise as fulfilled. + resolve(connection); + }); + connection.on("error", function(e) { + // If it failed connecting, mark it + // as rejected. + reject(e); // e is preferably an `Error`. + }); + }); +} +``` + +The problem with the above is that `getConnection` itself might throw for some reason and if it does we'll get a synchronous rejection. An asynchronous operation should always be asynchronous to prevent double guarding and race conditions so it's best to always put the sync parts inside the promise constructor as such: + +```js +function connect() { + return new Promise(function(resolve, reject) { + // If getConnection throws here instead of getting + // an exception we're getting a rejection thus + // producing a much more consistent API. + var connection = myConnector.getConnection(); + connection.on("ready", function() { + // When a connection has been established + // mark the promise as fulfilled. + resolve(connection); + }); + connection.on("error", function(e) { + // If it failed connecting, mark it + // as rejected. + reject(e); // e is preferably an `Error` + }); + }); +} +``` +###Working with delays/setTimeout + +There is no need to convert timeouts/delays to a bluebird API, bluebird already ships with the [Promise.delay](.) function for this use case. Please consult the [timers](.) section of the docs on usage and examples. + +###Working with browser APIs + +Often browser APIs are nonstandard and automatic promisification will fail for them. If you're running into an API that you can't promisify with [promisify](.) and [promisifyAll](.) - please consult the [working with other APIs section](#working-with-any-other-apis) + +###Working with databases + +For resource management in general and databases in particular, bluebird includes the powerful [Promise.using](.) and disposers system. This is similar to `with` in Python, `using` in C#, try/resource in Java or RAII in C++ in that it lets you handle resource management in an automatic way. + +Several examples of databases follow. + +> **Note** for more examples please see the [Promise.using](.) section. + +####Mongoose/MongoDB + +Mongoose works with persistent connections and the driver takes care of reconnections/disposals. For this reason using `using` with it isn't required - instead connect on server startup and use promisification to expose promises. + +Note that Mongoose already ships with promise support but the promises it offers are significantly slower and don't report unhandled rejections so it is recommended to use automatic promisification with it anyway: + +```js +var Mongoose = Promise.promisifyAll(require("mongoose")); +``` + +####Sequelize + +Sequelize already uses Bluebird promises internally and has promise returning APIs. Use those. + +####RethinkDB + +Rethink already uses Bluebird promises internally and has promise returning APIs. Use those. + +####Bookshelf + +Bookshelf already uses Bluebird promises internally and has promise returning APIs. Use those. + + +####PostgreSQL + +Here is how to create a disposer for the PostgreSQL driver: + +```js +var pg = require("pg"); +// Uncomment if pg has not been properly promisified yet. +//var Promise = require("bluebird"); +//Promise.promisifyAll(pg, { +// filter: function(methodName) { +// return methodName === "connect" +// }, +// multiArgs: true +//}); +// Promisify rest of pg normally. +//Promise.promisifyAll(pg); + +function getSqlConnection(connectionString) { + var close; + return pg.connectAsync(connectionString).spread(function(client, done) { + close = done; + return client; + }).disposer(function() { + if (close) close(); + }); +} + +module.exports = getSqlConnection; +``` + +Which would allow you to use: + +```js +var using = Promise.using; + +using(getSqlConnection(), function(conn) { + // use connection here and _return the promise_ + +}).then(function(result) { + // connection already disposed here + +}); +``` + +It's also possible to use disposers for transaction management: + +```js +var pg = require('pg'); +// uncomment if necessary +//var Promise = require("bluebird"); +//Promise.promisifyAll(pg, { +// filter: function(methodName) { +// return methodName === "connect" +// }, +// multiArgs: true +//}); +// Promisify rest of pg normally +//Promise.promisifyAll(pg); + +function getTransaction(connectionString) { + var close; + return pg.connectAsync(connectionString).spread(function(client, done) { + close = done; + return client.queryAsync('BEGIN').then(function () { + return client; + }); + }).disposer(function(client, promise) { + if (promise.isFulfilled()) { + return client.queryAsync('COMMIT').then(closeClient); + } else { + return client.queryAsync('ROLLBACK').then(closeClient); + } + function closeClient() { + if (close) close(client); + } + }); +} + +exports.getTransaction = getTransaction; +``` + +Which would let you do: + +```js +using(getTransaction(), function(tx) { + return tx.queryAsync(...).then(function() { + return tx.queryAsync(...) + }).then(function() { + return tx.queryAsync(...) + }); +}); +``` + +####MySQL + +Here is how to create a disposer for the MySQL driver: + +```js +var mysql = require("mysql"); +// Uncomment if mysql has not been properly promisified yet +// var Promise = require("bluebird"); +// Promise.promisifyAll(mysql); +// Promise.promisifyAll(require("mysql/lib/Connection").prototype); +// Promise.promisifyAll(require("mysql/lib/Pool").prototype); +var pool = mysql.createPool({ + connectionLimit: 10, + host: 'example.org', + user: 'bob', + password: 'secret' +}); + +function getSqlConnection() { + return pool.getConnectionAsync().disposer(function(connection) { + connection.release(); + }); +} + +module.exports = getSqlConnection; +``` + +The usage pattern is similar to the PostgreSQL example above. You can also create a disposer for transactions and use it safely: + +```js +function getTransaction() { + return db.getTransactionAsync().disposer(function(tx, promise) { + return promise.isFulfilled() ? tx.commitAsync() : tx.rollbackAsync(); + }); +} + + +// If the using block completes successfully, the transaction is automatically committed +// Any error or rejection will automatically roll it back +using(getTransaction(), function(tx) { + return tx.queryAsync(...).then(function() { + return tx.queryAsync(...) + }).then(function() { + return tx.queryAsync(...) + }); +}); +``` + +###More common examples + + +Some examples of the above practice applied to some popular libraries: + +```js +// The most popular redis module +var Promise = require("bluebird"); +Promise.promisifyAll(require("redis")); +``` + +```js +// The most popular mongodb module +var Promise = require("bluebird"); +Promise.promisifyAll(require("mongodb")); +``` + +```js +// The most popular mysql module +var Promise = require("bluebird"); +// Note that the library's classes are not properties of the main export +// so we require and promisifyAll them manually +Promise.promisifyAll(require("mysql/lib/Connection").prototype); +Promise.promisifyAll(require("mysql/lib/Pool").prototype); +``` + +```js +// Mongoose +var Promise = require("bluebird"); +Promise.promisifyAll(require("mongoose")); +``` + +```js +// Request +var Promise = require("bluebird"); +Promise.promisifyAll(require("request")); +// Use request.getAsync(...) not request(..), it will not return a promise +``` + +```js +// mkdir +var Promise = require("bluebird"); +Promise.promisifyAll(require("mkdirp")); +// Use mkdirp.mkdirpAsync not mkdirp(..), it will not return a promise +``` + +```js +// winston +var Promise = require("bluebird"); +Promise.promisifyAll(require("winston")); +``` + +```js +// rimraf +var Promise = require("bluebird"); +// The module isn't promisified but the function returned is +var rimrafAsync = Promise.promisify(require("rimraf")); +``` + +```js +// xml2js +var Promise = require("bluebird"); +Promise.promisifyAll(require("xml2js")); +``` + +```js +// jsdom +var Promise = require("bluebird"); +Promise.promisifyAll(require("jsdom")); +``` + +```js +// fs-extra +var Promise = require("bluebird"); +Promise.promisifyAll(require("fs-extra")); +``` + +```js +// prompt +var Promise = require("bluebird"); +Promise.promisifyAll(require("prompt")); +``` + +```js +// Nodemailer +var Promise = require("bluebird"); +Promise.promisifyAll(require("nodemailer")); +``` + +```js +// ncp +var Promise = require("bluebird"); +Promise.promisifyAll(require("ncp")); +``` + +```js +// pg +var Promise = require("bluebird"); +Promise.promisifyAll(require("pg")); +``` + +In all of the above cases the library made its classes available in one way or another. If this is not the case, you can still promisify by creating a throwaway instance: + +```js +var ParanoidLib = require("..."); +var throwAwayInstance = ParanoidLib.createInstance(); +Promise.promisifyAll(Object.getPrototypeOf(throwAwayInstance)); +// Like before, from this point on, all new instances + even the throwAwayInstance suddenly support promises +``` + +###Working with any other APIs + +Sometimes you have to work with APIs that are inconsistent and do not follow a common convention. + +> **Note** Promise returning function should never throw + +For example, something like: + +```js +function getUserData(userId, onLoad, onFail) { ... +``` + +We can use the promise constructor to convert it to a promise returning function: + +```js +function getUserDataAsync(userId) { + return new Promise(function(resolve, reject) { + // Put all your code here, this section is throw-safe. + getUserData(userId, resolve, reject); + }); +} +``` diff --git a/platforms/android/assets/www/libs/bluebird/docs/helpers.rb b/platforms/android/assets/www/libs/bluebird/docs/helpers.rb new file mode 100644 index 0000000..b875736 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/docs/helpers.rb @@ -0,0 +1,16 @@ +require "sanitize" + +class Helpers + def self.clean(input) + return Sanitize.fragment(input) + .downcase + .gsub(/\s+/, "-") + .gsub(/^([A-Za-z0-9\-_.:]+).*?$/, "\\1") + .gsub(/^\./, "") + .gsub(/\.$/, "") + .gsub(/[^A-Za-z0-9\-_.]/, "") + .sub(/^-+/, "") + .sub(/-+$/, "") + + end +end diff --git a/platforms/android/assets/www/libs/bluebird/docs/img/favicon.png b/platforms/android/assets/www/libs/bluebird/docs/img/favicon.png new file mode 100755 index 0000000000000000000000000000000000000000..80755c284e5268bc382de8b67cbff73528b946fe GIT binary patch literal 4807 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 R=f#^EKu6O6(xC1T`#+nQ8eISY literal 0 HcmV?d00001 diff --git a/platforms/android/assets/www/libs/bluebird/docs/img/logo.png b/platforms/android/assets/www/libs/bluebird/docs/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c6e72f1146bdb915132721ad6d7de2aa5e4de5a6 GIT binary patch literal 8883 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 + +Redirecting... + + +

Redirecting...

+Click here if you are not redirected. + diff --git a/platforms/android/assets/www/libs/bluebird/issue_template.md b/platforms/android/assets/www/libs/bluebird/issue_template.md new file mode 100644 index 0000000..35e5c6c --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/issue_template.md @@ -0,0 +1,12 @@ +(This issue tracker is only for bug reports or feature requests, if this is neither, please choose appropriate channel from http://bluebirdjs.com/docs/support.html) + +Please answer the questions the best you can: + +1) What version of bluebird is the issue happening on? + +2) What platform and version? (For example Node.js 0.12 or Google Chrome 32) + +3) Did this issue happen with earlier version of bluebird? + +(Write description of your issue here, stack traces from errors and code that reproduces the issue are helpful) + diff --git a/platforms/android/assets/www/libs/bluebird/js/browser/bluebird.core.js b/platforms/android/assets/www/libs/bluebird/js/browser/bluebird.core.js new file mode 100644 index 0000000..9b40dee --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/js/browser/bluebird.core.js @@ -0,0 +1,3652 @@ +/* @preserve + * The MIT License (MIT) + * + * Copyright (c) 2013-2015 Petka Antonov + * + * 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. + * + */ +/** + * bluebird build version 3.4.0 + * Features enabled: core + * Features disabled: race, call_get, generators, map, nodeify, promisify, props, reduce, settle, some, using, timers, filter, any, each +*/ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.Promise=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof _dereq_=="function"&&_dereq_;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof _dereq_=="function"&&_dereq_;for(var o=0;o 0) { + var fn = queue.shift(); + if (typeof fn !== "function") { + fn._settlePromises(); + continue; + } + var receiver = queue.shift(); + var arg = queue.shift(); + fn.call(receiver, arg); + } +}; + +Async.prototype._drainQueues = function () { + this._drainQueue(this._normalQueue); + this._reset(); + this._haveDrainedQueues = true; + this._drainQueue(this._lateQueue); +}; + +Async.prototype._queueTick = function () { + if (!this._isTickUsed) { + this._isTickUsed = true; + this._schedule(this.drainQueues); + } +}; + +Async.prototype._reset = function () { + this._isTickUsed = false; +}; + +module.exports = Async; +module.exports.firstLineError = firstLineError; + +},{"./queue":17,"./schedule":18,"./util":21}],2:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, INTERNAL, tryConvertToPromise, debug) { +var calledBind = false; +var rejectThis = function(_, e) { + this._reject(e); +}; + +var targetRejected = function(e, context) { + context.promiseRejectionQueued = true; + context.bindingPromise._then(rejectThis, rejectThis, null, this, e); +}; + +var bindingResolved = function(thisArg, context) { + if (((this._bitField & 50397184) === 0)) { + this._resolveCallback(context.target); + } +}; + +var bindingRejected = function(e, context) { + if (!context.promiseRejectionQueued) this._reject(e); +}; + +Promise.prototype.bind = function (thisArg) { + if (!calledBind) { + calledBind = true; + Promise.prototype._propagateFrom = debug.propagateFromFunction(); + Promise.prototype._boundValue = debug.boundValueFunction(); + } + var maybePromise = tryConvertToPromise(thisArg); + var ret = new Promise(INTERNAL); + ret._propagateFrom(this, 1); + var target = this._target(); + ret._setBoundTo(maybePromise); + if (maybePromise instanceof Promise) { + var context = { + promiseRejectionQueued: false, + promise: ret, + target: target, + bindingPromise: maybePromise + }; + target._then(INTERNAL, targetRejected, undefined, ret, context); + maybePromise._then( + bindingResolved, bindingRejected, undefined, ret, context); + ret._setOnCancel(maybePromise); + } else { + ret._resolveCallback(target); + } + return ret; +}; + +Promise.prototype._setBoundTo = function (obj) { + if (obj !== undefined) { + this._bitField = this._bitField | 2097152; + this._boundTo = obj; + } else { + this._bitField = this._bitField & (~2097152); + } +}; + +Promise.prototype._isBound = function () { + return (this._bitField & 2097152) === 2097152; +}; + +Promise.bind = function (thisArg, value) { + return Promise.resolve(value).bind(thisArg); +}; +}; + +},{}],3:[function(_dereq_,module,exports){ +"use strict"; +var old; +if (typeof Promise !== "undefined") old = Promise; +function noConflict() { + try { if (Promise === bluebird) Promise = old; } + catch (e) {} + return bluebird; +} +var bluebird = _dereq_("./promise")(); +bluebird.noConflict = noConflict; +module.exports = bluebird; + +},{"./promise":15}],4:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, PromiseArray, apiRejection, debug) { +var util = _dereq_("./util"); +var tryCatch = util.tryCatch; +var errorObj = util.errorObj; +var async = Promise._async; + +Promise.prototype["break"] = Promise.prototype.cancel = function() { + if (!debug.cancellation()) return this._warn("cancellation is disabled"); + + var promise = this; + var child = promise; + while (promise.isCancellable()) { + if (!promise._cancelBy(child)) { + if (child._isFollowing()) { + child._followee().cancel(); + } else { + child._cancelBranched(); + } + break; + } + + var parent = promise._cancellationParent; + if (parent == null || !parent.isCancellable()) { + if (promise._isFollowing()) { + promise._followee().cancel(); + } else { + promise._cancelBranched(); + } + break; + } else { + if (promise._isFollowing()) promise._followee().cancel(); + child = promise; + promise = parent; + } + } +}; + +Promise.prototype._branchHasCancelled = function() { + this._branchesRemainingToCancel--; +}; + +Promise.prototype._enoughBranchesHaveCancelled = function() { + return this._branchesRemainingToCancel === undefined || + this._branchesRemainingToCancel <= 0; +}; + +Promise.prototype._cancelBy = function(canceller) { + if (canceller === this) { + this._branchesRemainingToCancel = 0; + this._invokeOnCancel(); + return true; + } else { + this._branchHasCancelled(); + if (this._enoughBranchesHaveCancelled()) { + this._invokeOnCancel(); + return true; + } + } + return false; +}; + +Promise.prototype._cancelBranched = function() { + if (this._enoughBranchesHaveCancelled()) { + this._cancel(); + } +}; + +Promise.prototype._cancel = function() { + if (!this.isCancellable()) return; + + this._setCancelled(); + async.invoke(this._cancelPromises, this, undefined); +}; + +Promise.prototype._cancelPromises = function() { + if (this._length() > 0) this._settlePromises(); +}; + +Promise.prototype._unsetOnCancel = function() { + this._onCancelField = undefined; +}; + +Promise.prototype.isCancellable = function() { + return this.isPending() && !this.isCancelled(); +}; + +Promise.prototype._doInvokeOnCancel = function(onCancelCallback, internalOnly) { + if (util.isArray(onCancelCallback)) { + for (var i = 0; i < onCancelCallback.length; ++i) { + this._doInvokeOnCancel(onCancelCallback[i], internalOnly); + } + } else if (onCancelCallback !== undefined) { + if (typeof onCancelCallback === "function") { + if (!internalOnly) { + var e = tryCatch(onCancelCallback).call(this._boundValue()); + if (e === errorObj) { + this._attachExtraTrace(e.e); + async.throwLater(e.e); + } + } + } else { + onCancelCallback._resultCancelled(this); + } + } +}; + +Promise.prototype._invokeOnCancel = function() { + var onCancelCallback = this._onCancel(); + this._unsetOnCancel(); + async.invoke(this._doInvokeOnCancel, this, onCancelCallback); +}; + +Promise.prototype._invokeInternalOnCancel = function() { + if (this.isCancellable()) { + this._doInvokeOnCancel(this._onCancel(), true); + this._unsetOnCancel(); + } +}; + +Promise.prototype._resultCancelled = function() { + this.cancel(); +}; + +}; + +},{"./util":21}],5:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(NEXT_FILTER) { +var util = _dereq_("./util"); +var getKeys = _dereq_("./es5").keys; +var tryCatch = util.tryCatch; +var errorObj = util.errorObj; + +function catchFilter(instances, cb, promise) { + return function(e) { + var boundTo = promise._boundValue(); + predicateLoop: for (var i = 0; i < instances.length; ++i) { + var item = instances[i]; + + if (item === Error || + (item != null && item.prototype instanceof Error)) { + if (e instanceof item) { + return tryCatch(cb).call(boundTo, e); + } + } else if (typeof item === "function") { + var matchesPredicate = tryCatch(item).call(boundTo, e); + if (matchesPredicate === errorObj) { + return matchesPredicate; + } else if (matchesPredicate) { + return tryCatch(cb).call(boundTo, e); + } + } else if (util.isObject(e)) { + var keys = getKeys(item); + for (var j = 0; j < keys.length; ++j) { + var key = keys[j]; + if (item[key] != e[key]) { + continue predicateLoop; + } + } + return tryCatch(cb).call(boundTo, e); + } + } + return NEXT_FILTER; + }; +} + +return catchFilter; +}; + +},{"./es5":10,"./util":21}],6:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise) { +var longStackTraces = false; +var contextStack = []; + +Promise.prototype._promiseCreated = function() {}; +Promise.prototype._pushContext = function() {}; +Promise.prototype._popContext = function() {return null;}; +Promise._peekContext = Promise.prototype._peekContext = function() {}; + +function Context() { + this._trace = new Context.CapturedTrace(peekContext()); +} +Context.prototype._pushContext = function () { + if (this._trace !== undefined) { + this._trace._promiseCreated = null; + contextStack.push(this._trace); + } +}; + +Context.prototype._popContext = function () { + if (this._trace !== undefined) { + var trace = contextStack.pop(); + var ret = trace._promiseCreated; + trace._promiseCreated = null; + return ret; + } + return null; +}; + +function createContext() { + if (longStackTraces) return new Context(); +} + +function peekContext() { + var lastIndex = contextStack.length - 1; + if (lastIndex >= 0) { + return contextStack[lastIndex]; + } + return undefined; +} +Context.CapturedTrace = null; +Context.create = createContext; +Context.deactivateLongStackTraces = function() {}; +Context.activateLongStackTraces = function() { + var Promise_pushContext = Promise.prototype._pushContext; + var Promise_popContext = Promise.prototype._popContext; + var Promise_PeekContext = Promise._peekContext; + var Promise_peekContext = Promise.prototype._peekContext; + var Promise_promiseCreated = Promise.prototype._promiseCreated; + Context.deactivateLongStackTraces = function() { + Promise.prototype._pushContext = Promise_pushContext; + Promise.prototype._popContext = Promise_popContext; + Promise._peekContext = Promise_PeekContext; + Promise.prototype._peekContext = Promise_peekContext; + Promise.prototype._promiseCreated = Promise_promiseCreated; + longStackTraces = false; + }; + longStackTraces = true; + Promise.prototype._pushContext = Context.prototype._pushContext; + Promise.prototype._popContext = Context.prototype._popContext; + Promise._peekContext = Promise.prototype._peekContext = peekContext; + Promise.prototype._promiseCreated = function() { + var ctx = this._peekContext(); + if (ctx && ctx._promiseCreated == null) ctx._promiseCreated = this; + }; +}; +return Context; +}; + +},{}],7:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, Context) { +var getDomain = Promise._getDomain; +var async = Promise._async; +var Warning = _dereq_("./errors").Warning; +var util = _dereq_("./util"); +var canAttachTrace = util.canAttachTrace; +var unhandledRejectionHandled; +var possiblyUnhandledRejection; +var bluebirdFramePattern = + /[\\\/]bluebird[\\\/]js[\\\/](release|debug|instrumented)/; +var stackFramePattern = null; +var formatStack = null; +var indentStackFrames = false; +var printWarning; +var debugging = !!(util.env("BLUEBIRD_DEBUG") != 0 && + (true || + util.env("BLUEBIRD_DEBUG") || + util.env("NODE_ENV") === "development")); + +var warnings = !!(util.env("BLUEBIRD_WARNINGS") != 0 && + (debugging || util.env("BLUEBIRD_WARNINGS"))); + +var longStackTraces = !!(util.env("BLUEBIRD_LONG_STACK_TRACES") != 0 && + (debugging || util.env("BLUEBIRD_LONG_STACK_TRACES"))); + +var wForgottenReturn = util.env("BLUEBIRD_W_FORGOTTEN_RETURN") != 0 && + (warnings || !!util.env("BLUEBIRD_W_FORGOTTEN_RETURN")); + +Promise.prototype.suppressUnhandledRejections = function() { + var target = this._target(); + target._bitField = ((target._bitField & (~1048576)) | + 524288); +}; + +Promise.prototype._ensurePossibleRejectionHandled = function () { + if ((this._bitField & 524288) !== 0) return; + this._setRejectionIsUnhandled(); + async.invokeLater(this._notifyUnhandledRejection, this, undefined); +}; + +Promise.prototype._notifyUnhandledRejectionIsHandled = function () { + fireRejectionEvent("rejectionHandled", + unhandledRejectionHandled, undefined, this); +}; + +Promise.prototype._setReturnedNonUndefined = function() { + this._bitField = this._bitField | 268435456; +}; + +Promise.prototype._returnedNonUndefined = function() { + return (this._bitField & 268435456) !== 0; +}; + +Promise.prototype._notifyUnhandledRejection = function () { + if (this._isRejectionUnhandled()) { + var reason = this._settledValue(); + this._setUnhandledRejectionIsNotified(); + fireRejectionEvent("unhandledRejection", + possiblyUnhandledRejection, reason, this); + } +}; + +Promise.prototype._setUnhandledRejectionIsNotified = function () { + this._bitField = this._bitField | 262144; +}; + +Promise.prototype._unsetUnhandledRejectionIsNotified = function () { + this._bitField = this._bitField & (~262144); +}; + +Promise.prototype._isUnhandledRejectionNotified = function () { + return (this._bitField & 262144) > 0; +}; + +Promise.prototype._setRejectionIsUnhandled = function () { + this._bitField = this._bitField | 1048576; +}; + +Promise.prototype._unsetRejectionIsUnhandled = function () { + this._bitField = this._bitField & (~1048576); + if (this._isUnhandledRejectionNotified()) { + this._unsetUnhandledRejectionIsNotified(); + this._notifyUnhandledRejectionIsHandled(); + } +}; + +Promise.prototype._isRejectionUnhandled = function () { + return (this._bitField & 1048576) > 0; +}; + +Promise.prototype._warn = function(message, shouldUseOwnTrace, promise) { + return warn(message, shouldUseOwnTrace, promise || this); +}; + +Promise.onPossiblyUnhandledRejection = function (fn) { + var domain = getDomain(); + possiblyUnhandledRejection = + typeof fn === "function" ? (domain === null ? fn : domain.bind(fn)) + : undefined; +}; + +Promise.onUnhandledRejectionHandled = function (fn) { + var domain = getDomain(); + unhandledRejectionHandled = + typeof fn === "function" ? (domain === null ? fn : domain.bind(fn)) + : undefined; +}; + +var disableLongStackTraces = function() {}; +Promise.longStackTraces = function () { + if (async.haveItemsQueued() && !config.longStackTraces) { + throw new Error("cannot enable long stack traces after promises have been created\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + if (!config.longStackTraces && longStackTracesIsSupported()) { + var Promise_captureStackTrace = Promise.prototype._captureStackTrace; + var Promise_attachExtraTrace = Promise.prototype._attachExtraTrace; + config.longStackTraces = true; + disableLongStackTraces = function() { + if (async.haveItemsQueued() && !config.longStackTraces) { + throw new Error("cannot enable long stack traces after promises have been created\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + Promise.prototype._captureStackTrace = Promise_captureStackTrace; + Promise.prototype._attachExtraTrace = Promise_attachExtraTrace; + Context.deactivateLongStackTraces(); + async.enableTrampoline(); + config.longStackTraces = false; + }; + Promise.prototype._captureStackTrace = longStackTracesCaptureStackTrace; + Promise.prototype._attachExtraTrace = longStackTracesAttachExtraTrace; + Context.activateLongStackTraces(); + async.disableTrampolineIfNecessary(); + } +}; + +Promise.hasLongStackTraces = function () { + return config.longStackTraces && longStackTracesIsSupported(); +}; + +var fireDomEvent = (function() { + try { + var event = document.createEvent("CustomEvent"); + event.initCustomEvent("testingtheevent", false, true, {}); + util.global.dispatchEvent(event); + return function(name, event) { + var domEvent = document.createEvent("CustomEvent"); + domEvent.initCustomEvent(name.toLowerCase(), false, true, event); + return !util.global.dispatchEvent(domEvent); + }; + } catch (e) {} + return function() { + return false; + }; +})(); + +var fireGlobalEvent = (function() { + if (util.isNode) { + return function() { + return process.emit.apply(process, arguments); + }; + } else { + if (!util.global) { + return function() { + return false; + }; + } + return function(name) { + var methodName = "on" + name.toLowerCase(); + var method = util.global[methodName]; + if (!method) return false; + method.apply(util.global, [].slice.call(arguments, 1)); + return true; + }; + } +})(); + +function generatePromiseLifecycleEventObject(name, promise) { + return {promise: promise}; +} + +var eventToObjectGenerator = { + promiseCreated: generatePromiseLifecycleEventObject, + promiseFulfilled: generatePromiseLifecycleEventObject, + promiseRejected: generatePromiseLifecycleEventObject, + promiseResolved: generatePromiseLifecycleEventObject, + promiseCancelled: generatePromiseLifecycleEventObject, + promiseChained: function(name, promise, child) { + return {promise: promise, child: child}; + }, + warning: function(name, warning) { + return {warning: warning}; + }, + unhandledRejection: function (name, reason, promise) { + return {reason: reason, promise: promise}; + }, + rejectionHandled: generatePromiseLifecycleEventObject +}; + +var activeFireEvent = function (name) { + var globalEventFired = false; + try { + globalEventFired = fireGlobalEvent.apply(null, arguments); + } catch (e) { + async.throwLater(e); + globalEventFired = true; + } + + var domEventFired = false; + try { + domEventFired = fireDomEvent(name, + eventToObjectGenerator[name].apply(null, arguments)); + } catch (e) { + async.throwLater(e); + domEventFired = true; + } + + return domEventFired || globalEventFired; +}; + +Promise.config = function(opts) { + opts = Object(opts); + if ("longStackTraces" in opts) { + if (opts.longStackTraces) { + Promise.longStackTraces(); + } else if (!opts.longStackTraces && Promise.hasLongStackTraces()) { + disableLongStackTraces(); + } + } + if ("warnings" in opts) { + var warningsOption = opts.warnings; + config.warnings = !!warningsOption; + wForgottenReturn = config.warnings; + + if (util.isObject(warningsOption)) { + if ("wForgottenReturn" in warningsOption) { + wForgottenReturn = !!warningsOption.wForgottenReturn; + } + } + } + if ("cancellation" in opts && opts.cancellation && !config.cancellation) { + if (async.haveItemsQueued()) { + throw new Error( + "cannot enable cancellation after promises are in use"); + } + Promise.prototype._clearCancellationData = + cancellationClearCancellationData; + Promise.prototype._propagateFrom = cancellationPropagateFrom; + Promise.prototype._onCancel = cancellationOnCancel; + Promise.prototype._setOnCancel = cancellationSetOnCancel; + Promise.prototype._attachCancellationCallback = + cancellationAttachCancellationCallback; + Promise.prototype._execute = cancellationExecute; + propagateFromFunction = cancellationPropagateFrom; + config.cancellation = true; + } + if ("monitoring" in opts) { + if (opts.monitoring && !config.monitoring) { + config.monitoring = true; + Promise.prototype._fireEvent = activeFireEvent; + } else if (!opts.monitoring && config.monitoring) { + config.monitoring = false; + Promise.prototype._fireEvent = defaultFireEvent; + } + } +}; + +function defaultFireEvent() { return false; } + +Promise.prototype._fireEvent = defaultFireEvent; +Promise.prototype._execute = function(executor, resolve, reject) { + try { + executor(resolve, reject); + } catch (e) { + return e; + } +}; +Promise.prototype._onCancel = function () {}; +Promise.prototype._setOnCancel = function (handler) { ; }; +Promise.prototype._attachCancellationCallback = function(onCancel) { + ; +}; +Promise.prototype._captureStackTrace = function () {}; +Promise.prototype._attachExtraTrace = function () {}; +Promise.prototype._clearCancellationData = function() {}; +Promise.prototype._propagateFrom = function (parent, flags) { + ; + ; +}; + +function cancellationExecute(executor, resolve, reject) { + var promise = this; + try { + executor(resolve, reject, function(onCancel) { + if (typeof onCancel !== "function") { + throw new TypeError("onCancel must be a function, got: " + + util.toString(onCancel)); + } + promise._attachCancellationCallback(onCancel); + }); + } catch (e) { + return e; + } +} + +function cancellationAttachCancellationCallback(onCancel) { + if (!this.isCancellable()) return this; + + var previousOnCancel = this._onCancel(); + if (previousOnCancel !== undefined) { + if (util.isArray(previousOnCancel)) { + previousOnCancel.push(onCancel); + } else { + this._setOnCancel([previousOnCancel, onCancel]); + } + } else { + this._setOnCancel(onCancel); + } +} + +function cancellationOnCancel() { + return this._onCancelField; +} + +function cancellationSetOnCancel(onCancel) { + this._onCancelField = onCancel; +} + +function cancellationClearCancellationData() { + this._cancellationParent = undefined; + this._onCancelField = undefined; +} + +function cancellationPropagateFrom(parent, flags) { + if ((flags & 1) !== 0) { + this._cancellationParent = parent; + var branchesRemainingToCancel = parent._branchesRemainingToCancel; + if (branchesRemainingToCancel === undefined) { + branchesRemainingToCancel = 0; + } + parent._branchesRemainingToCancel = branchesRemainingToCancel + 1; + } + if ((flags & 2) !== 0 && parent._isBound()) { + this._setBoundTo(parent._boundTo); + } +} + +function bindingPropagateFrom(parent, flags) { + if ((flags & 2) !== 0 && parent._isBound()) { + this._setBoundTo(parent._boundTo); + } +} +var propagateFromFunction = bindingPropagateFrom; + +function boundValueFunction() { + var ret = this._boundTo; + if (ret !== undefined) { + if (ret instanceof Promise) { + if (ret.isFulfilled()) { + return ret.value(); + } else { + return undefined; + } + } + } + return ret; +} + +function longStackTracesCaptureStackTrace() { + this._trace = new CapturedTrace(this._peekContext()); +} + +function longStackTracesAttachExtraTrace(error, ignoreSelf) { + if (canAttachTrace(error)) { + var trace = this._trace; + if (trace !== undefined) { + if (ignoreSelf) trace = trace._parent; + } + if (trace !== undefined) { + trace.attachExtraTrace(error); + } else if (!error.__stackCleaned__) { + var parsed = parseStackAndMessage(error); + util.notEnumerableProp(error, "stack", + parsed.message + "\n" + parsed.stack.join("\n")); + util.notEnumerableProp(error, "__stackCleaned__", true); + } + } +} + +function checkForgottenReturns(returnValue, promiseCreated, name, promise, + parent) { + if (returnValue === undefined && promiseCreated !== null && + wForgottenReturn) { + if (parent !== undefined && parent._returnedNonUndefined()) return; + if ((promise._bitField & 65535) === 0) return; + + if (name) name = name + " "; + var msg = "a promise was created in a " + name + + "handler but was not returned from it"; + promise._warn(msg, true, promiseCreated); + } +} + +function deprecated(name, replacement) { + var message = name + + " is deprecated and will be removed in a future version."; + if (replacement) message += " Use " + replacement + " instead."; + return warn(message); +} + +function warn(message, shouldUseOwnTrace, promise) { + if (!config.warnings) return; + var warning = new Warning(message); + var ctx; + if (shouldUseOwnTrace) { + promise._attachExtraTrace(warning); + } else if (config.longStackTraces && (ctx = Promise._peekContext())) { + ctx.attachExtraTrace(warning); + } else { + var parsed = parseStackAndMessage(warning); + warning.stack = parsed.message + "\n" + parsed.stack.join("\n"); + } + + if (!activeFireEvent("warning", warning)) { + formatAndLogError(warning, "", true); + } +} + +function reconstructStack(message, stacks) { + for (var i = 0; i < stacks.length - 1; ++i) { + stacks[i].push("From previous event:"); + stacks[i] = stacks[i].join("\n"); + } + if (i < stacks.length) { + stacks[i] = stacks[i].join("\n"); + } + return message + "\n" + stacks.join("\n"); +} + +function removeDuplicateOrEmptyJumps(stacks) { + for (var i = 0; i < stacks.length; ++i) { + if (stacks[i].length === 0 || + ((i + 1 < stacks.length) && stacks[i][0] === stacks[i+1][0])) { + stacks.splice(i, 1); + i--; + } + } +} + +function removeCommonRoots(stacks) { + var current = stacks[0]; + for (var i = 1; i < stacks.length; ++i) { + var prev = stacks[i]; + var currentLastIndex = current.length - 1; + var currentLastLine = current[currentLastIndex]; + var commonRootMeetPoint = -1; + + for (var j = prev.length - 1; j >= 0; --j) { + if (prev[j] === currentLastLine) { + commonRootMeetPoint = j; + break; + } + } + + for (var j = commonRootMeetPoint; j >= 0; --j) { + var line = prev[j]; + if (current[currentLastIndex] === line) { + current.pop(); + currentLastIndex--; + } else { + break; + } + } + current = prev; + } +} + +function cleanStack(stack) { + var ret = []; + for (var i = 0; i < stack.length; ++i) { + var line = stack[i]; + var isTraceLine = " (No stack trace)" === line || + stackFramePattern.test(line); + var isInternalFrame = isTraceLine && shouldIgnore(line); + if (isTraceLine && !isInternalFrame) { + if (indentStackFrames && line.charAt(0) !== " ") { + line = " " + line; + } + ret.push(line); + } + } + return ret; +} + +function stackFramesAsArray(error) { + var stack = error.stack.replace(/\s+$/g, "").split("\n"); + for (var i = 0; i < stack.length; ++i) { + var line = stack[i]; + if (" (No stack trace)" === line || stackFramePattern.test(line)) { + break; + } + } + if (i > 0) { + stack = stack.slice(i); + } + return stack; +} + +function parseStackAndMessage(error) { + var stack = error.stack; + var message = error.toString(); + stack = typeof stack === "string" && stack.length > 0 + ? stackFramesAsArray(error) : [" (No stack trace)"]; + return { + message: message, + stack: cleanStack(stack) + }; +} + +function formatAndLogError(error, title, isSoft) { + if (typeof console !== "undefined") { + var message; + if (util.isObject(error)) { + var stack = error.stack; + message = title + formatStack(stack, error); + } else { + message = title + String(error); + } + if (typeof printWarning === "function") { + printWarning(message, isSoft); + } else if (typeof console.log === "function" || + typeof console.log === "object") { + console.log(message); + } + } +} + +function fireRejectionEvent(name, localHandler, reason, promise) { + var localEventFired = false; + try { + if (typeof localHandler === "function") { + localEventFired = true; + if (name === "rejectionHandled") { + localHandler(promise); + } else { + localHandler(reason, promise); + } + } + } catch (e) { + async.throwLater(e); + } + + if (name === "unhandledRejection") { + if (!activeFireEvent(name, reason, promise) && !localEventFired) { + formatAndLogError(reason, "Unhandled rejection "); + } + } else { + activeFireEvent(name, promise); + } +} + +function formatNonError(obj) { + var str; + if (typeof obj === "function") { + str = "[function " + + (obj.name || "anonymous") + + "]"; + } else { + str = obj && typeof obj.toString === "function" + ? obj.toString() : util.toString(obj); + var ruselessToString = /\[object [a-zA-Z0-9$_]+\]/; + if (ruselessToString.test(str)) { + try { + var newStr = JSON.stringify(obj); + str = newStr; + } + catch(e) { + + } + } + if (str.length === 0) { + str = "(empty array)"; + } + } + return ("(<" + snip(str) + ">, no stack trace)"); +} + +function snip(str) { + var maxChars = 41; + if (str.length < maxChars) { + return str; + } + return str.substr(0, maxChars - 3) + "..."; +} + +function longStackTracesIsSupported() { + return typeof captureStackTrace === "function"; +} + +var shouldIgnore = function() { return false; }; +var parseLineInfoRegex = /[\/<\(]([^:\/]+):(\d+):(?:\d+)\)?\s*$/; +function parseLineInfo(line) { + var matches = line.match(parseLineInfoRegex); + if (matches) { + return { + fileName: matches[1], + line: parseInt(matches[2], 10) + }; + } +} + +function setBounds(firstLineError, lastLineError) { + if (!longStackTracesIsSupported()) return; + var firstStackLines = firstLineError.stack.split("\n"); + var lastStackLines = lastLineError.stack.split("\n"); + var firstIndex = -1; + var lastIndex = -1; + var firstFileName; + var lastFileName; + for (var i = 0; i < firstStackLines.length; ++i) { + var result = parseLineInfo(firstStackLines[i]); + if (result) { + firstFileName = result.fileName; + firstIndex = result.line; + break; + } + } + for (var i = 0; i < lastStackLines.length; ++i) { + var result = parseLineInfo(lastStackLines[i]); + if (result) { + lastFileName = result.fileName; + lastIndex = result.line; + break; + } + } + if (firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName || + firstFileName !== lastFileName || firstIndex >= lastIndex) { + return; + } + + shouldIgnore = function(line) { + if (bluebirdFramePattern.test(line)) return true; + var info = parseLineInfo(line); + if (info) { + if (info.fileName === firstFileName && + (firstIndex <= info.line && info.line <= lastIndex)) { + return true; + } + } + return false; + }; +} + +function CapturedTrace(parent) { + this._parent = parent; + this._promisesCreated = 0; + var length = this._length = 1 + (parent === undefined ? 0 : parent._length); + captureStackTrace(this, CapturedTrace); + if (length > 32) this.uncycle(); +} +util.inherits(CapturedTrace, Error); +Context.CapturedTrace = CapturedTrace; + +CapturedTrace.prototype.uncycle = function() { + var length = this._length; + if (length < 2) return; + var nodes = []; + var stackToIndex = {}; + + for (var i = 0, node = this; node !== undefined; ++i) { + nodes.push(node); + node = node._parent; + } + length = this._length = i; + for (var i = length - 1; i >= 0; --i) { + var stack = nodes[i].stack; + if (stackToIndex[stack] === undefined) { + stackToIndex[stack] = i; + } + } + for (var i = 0; i < length; ++i) { + var currentStack = nodes[i].stack; + var index = stackToIndex[currentStack]; + if (index !== undefined && index !== i) { + if (index > 0) { + nodes[index - 1]._parent = undefined; + nodes[index - 1]._length = 1; + } + nodes[i]._parent = undefined; + nodes[i]._length = 1; + var cycleEdgeNode = i > 0 ? nodes[i - 1] : this; + + if (index < length - 1) { + cycleEdgeNode._parent = nodes[index + 1]; + cycleEdgeNode._parent.uncycle(); + cycleEdgeNode._length = + cycleEdgeNode._parent._length + 1; + } else { + cycleEdgeNode._parent = undefined; + cycleEdgeNode._length = 1; + } + var currentChildLength = cycleEdgeNode._length + 1; + for (var j = i - 2; j >= 0; --j) { + nodes[j]._length = currentChildLength; + currentChildLength++; + } + return; + } + } +}; + +CapturedTrace.prototype.attachExtraTrace = function(error) { + if (error.__stackCleaned__) return; + this.uncycle(); + var parsed = parseStackAndMessage(error); + var message = parsed.message; + var stacks = [parsed.stack]; + + var trace = this; + while (trace !== undefined) { + stacks.push(cleanStack(trace.stack.split("\n"))); + trace = trace._parent; + } + removeCommonRoots(stacks); + removeDuplicateOrEmptyJumps(stacks); + util.notEnumerableProp(error, "stack", reconstructStack(message, stacks)); + util.notEnumerableProp(error, "__stackCleaned__", true); +}; + +var captureStackTrace = (function stackDetection() { + var v8stackFramePattern = /^\s*at\s*/; + var v8stackFormatter = function(stack, error) { + if (typeof stack === "string") return stack; + + if (error.name !== undefined && + error.message !== undefined) { + return error.toString(); + } + return formatNonError(error); + }; + + if (typeof Error.stackTraceLimit === "number" && + typeof Error.captureStackTrace === "function") { + Error.stackTraceLimit += 6; + stackFramePattern = v8stackFramePattern; + formatStack = v8stackFormatter; + var captureStackTrace = Error.captureStackTrace; + + shouldIgnore = function(line) { + return bluebirdFramePattern.test(line); + }; + return function(receiver, ignoreUntil) { + Error.stackTraceLimit += 6; + captureStackTrace(receiver, ignoreUntil); + Error.stackTraceLimit -= 6; + }; + } + var err = new Error(); + + if (typeof err.stack === "string" && + err.stack.split("\n")[0].indexOf("stackDetection@") >= 0) { + stackFramePattern = /@/; + formatStack = v8stackFormatter; + indentStackFrames = true; + return function captureStackTrace(o) { + o.stack = new Error().stack; + }; + } + + var hasStackAfterThrow; + try { throw new Error(); } + catch(e) { + hasStackAfterThrow = ("stack" in e); + } + if (!("stack" in err) && hasStackAfterThrow && + typeof Error.stackTraceLimit === "number") { + stackFramePattern = v8stackFramePattern; + formatStack = v8stackFormatter; + return function captureStackTrace(o) { + Error.stackTraceLimit += 6; + try { throw new Error(); } + catch(e) { o.stack = e.stack; } + Error.stackTraceLimit -= 6; + }; + } + + formatStack = function(stack, error) { + if (typeof stack === "string") return stack; + + if ((typeof error === "object" || + typeof error === "function") && + error.name !== undefined && + error.message !== undefined) { + return error.toString(); + } + return formatNonError(error); + }; + + return null; + +})([]); + +if (typeof console !== "undefined" && typeof console.warn !== "undefined") { + printWarning = function (message) { + console.warn(message); + }; + if (util.isNode && process.stderr.isTTY) { + printWarning = function(message, isSoft) { + var color = isSoft ? "\u001b[33m" : "\u001b[31m"; + console.warn(color + message + "\u001b[0m\n"); + }; + } else if (!util.isNode && typeof (new Error().stack) === "string") { + printWarning = function(message, isSoft) { + console.warn("%c" + message, + isSoft ? "color: darkorange" : "color: red"); + }; + } +} + +var config = { + warnings: warnings, + longStackTraces: false, + cancellation: false, + monitoring: false +}; + +if (longStackTraces) Promise.longStackTraces(); + +return { + longStackTraces: function() { + return config.longStackTraces; + }, + warnings: function() { + return config.warnings; + }, + cancellation: function() { + return config.cancellation; + }, + monitoring: function() { + return config.monitoring; + }, + propagateFromFunction: function() { + return propagateFromFunction; + }, + boundValueFunction: function() { + return boundValueFunction; + }, + checkForgottenReturns: checkForgottenReturns, + setBounds: setBounds, + warn: warn, + deprecated: deprecated, + CapturedTrace: CapturedTrace, + fireDomEvent: fireDomEvent, + fireGlobalEvent: fireGlobalEvent +}; +}; + +},{"./errors":9,"./util":21}],8:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise) { +function returner() { + return this.value; +} +function thrower() { + throw this.reason; +} + +Promise.prototype["return"] = +Promise.prototype.thenReturn = function (value) { + if (value instanceof Promise) value.suppressUnhandledRejections(); + return this._then( + returner, undefined, undefined, {value: value}, undefined); +}; + +Promise.prototype["throw"] = +Promise.prototype.thenThrow = function (reason) { + return this._then( + thrower, undefined, undefined, {reason: reason}, undefined); +}; + +Promise.prototype.catchThrow = function (reason) { + if (arguments.length <= 1) { + return this._then( + undefined, thrower, undefined, {reason: reason}, undefined); + } else { + var _reason = arguments[1]; + var handler = function() {throw _reason;}; + return this.caught(reason, handler); + } +}; + +Promise.prototype.catchReturn = function (value) { + if (arguments.length <= 1) { + if (value instanceof Promise) value.suppressUnhandledRejections(); + return this._then( + undefined, returner, undefined, {value: value}, undefined); + } else { + var _value = arguments[1]; + if (_value instanceof Promise) _value.suppressUnhandledRejections(); + var handler = function() {return _value;}; + return this.caught(value, handler); + } +}; +}; + +},{}],9:[function(_dereq_,module,exports){ +"use strict"; +var es5 = _dereq_("./es5"); +var Objectfreeze = es5.freeze; +var util = _dereq_("./util"); +var inherits = util.inherits; +var notEnumerableProp = util.notEnumerableProp; + +function subError(nameProperty, defaultMessage) { + function SubError(message) { + if (!(this instanceof SubError)) return new SubError(message); + notEnumerableProp(this, "message", + typeof message === "string" ? message : defaultMessage); + notEnumerableProp(this, "name", nameProperty); + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } else { + Error.call(this); + } + } + inherits(SubError, Error); + return SubError; +} + +var _TypeError, _RangeError; +var Warning = subError("Warning", "warning"); +var CancellationError = subError("CancellationError", "cancellation error"); +var TimeoutError = subError("TimeoutError", "timeout error"); +var AggregateError = subError("AggregateError", "aggregate error"); +try { + _TypeError = TypeError; + _RangeError = RangeError; +} catch(e) { + _TypeError = subError("TypeError", "type error"); + _RangeError = subError("RangeError", "range error"); +} + +var methods = ("join pop push shift unshift slice filter forEach some " + + "every map indexOf lastIndexOf reduce reduceRight sort reverse").split(" "); + +for (var i = 0; i < methods.length; ++i) { + if (typeof Array.prototype[methods[i]] === "function") { + AggregateError.prototype[methods[i]] = Array.prototype[methods[i]]; + } +} + +es5.defineProperty(AggregateError.prototype, "length", { + value: 0, + configurable: false, + writable: true, + enumerable: true +}); +AggregateError.prototype["isOperational"] = true; +var level = 0; +AggregateError.prototype.toString = function() { + var indent = Array(level * 4 + 1).join(" "); + var ret = "\n" + indent + "AggregateError of:" + "\n"; + level++; + indent = Array(level * 4 + 1).join(" "); + for (var i = 0; i < this.length; ++i) { + var str = this[i] === this ? "[Circular AggregateError]" : this[i] + ""; + var lines = str.split("\n"); + for (var j = 0; j < lines.length; ++j) { + lines[j] = indent + lines[j]; + } + str = lines.join("\n"); + ret += str + "\n"; + } + level--; + return ret; +}; + +function OperationalError(message) { + if (!(this instanceof OperationalError)) + return new OperationalError(message); + notEnumerableProp(this, "name", "OperationalError"); + notEnumerableProp(this, "message", message); + this.cause = message; + this["isOperational"] = true; + + if (message instanceof Error) { + notEnumerableProp(this, "message", message.message); + notEnumerableProp(this, "stack", message.stack); + } else if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } + +} +inherits(OperationalError, Error); + +var errorTypes = Error["__BluebirdErrorTypes__"]; +if (!errorTypes) { + errorTypes = Objectfreeze({ + CancellationError: CancellationError, + TimeoutError: TimeoutError, + OperationalError: OperationalError, + RejectionError: OperationalError, + AggregateError: AggregateError + }); + es5.defineProperty(Error, "__BluebirdErrorTypes__", { + value: errorTypes, + writable: false, + enumerable: false, + configurable: false + }); +} + +module.exports = { + Error: Error, + TypeError: _TypeError, + RangeError: _RangeError, + CancellationError: errorTypes.CancellationError, + OperationalError: errorTypes.OperationalError, + TimeoutError: errorTypes.TimeoutError, + AggregateError: errorTypes.AggregateError, + Warning: Warning +}; + +},{"./es5":10,"./util":21}],10:[function(_dereq_,module,exports){ +var isES5 = (function(){ + "use strict"; + return this === undefined; +})(); + +if (isES5) { + module.exports = { + freeze: Object.freeze, + defineProperty: Object.defineProperty, + getDescriptor: Object.getOwnPropertyDescriptor, + keys: Object.keys, + names: Object.getOwnPropertyNames, + getPrototypeOf: Object.getPrototypeOf, + isArray: Array.isArray, + isES5: isES5, + propertyIsWritable: function(obj, prop) { + var descriptor = Object.getOwnPropertyDescriptor(obj, prop); + return !!(!descriptor || descriptor.writable || descriptor.set); + } + }; +} else { + var has = {}.hasOwnProperty; + var str = {}.toString; + var proto = {}.constructor.prototype; + + var ObjectKeys = function (o) { + var ret = []; + for (var key in o) { + if (has.call(o, key)) { + ret.push(key); + } + } + return ret; + }; + + var ObjectGetDescriptor = function(o, key) { + return {value: o[key]}; + }; + + var ObjectDefineProperty = function (o, key, desc) { + o[key] = desc.value; + return o; + }; + + var ObjectFreeze = function (obj) { + return obj; + }; + + var ObjectGetPrototypeOf = function (obj) { + try { + return Object(obj).constructor.prototype; + } + catch (e) { + return proto; + } + }; + + var ArrayIsArray = function (obj) { + try { + return str.call(obj) === "[object Array]"; + } + catch(e) { + return false; + } + }; + + module.exports = { + isArray: ArrayIsArray, + keys: ObjectKeys, + names: ObjectKeys, + defineProperty: ObjectDefineProperty, + getDescriptor: ObjectGetDescriptor, + freeze: ObjectFreeze, + getPrototypeOf: ObjectGetPrototypeOf, + isES5: isES5, + propertyIsWritable: function() { + return true; + } + }; +} + +},{}],11:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, tryConvertToPromise) { +var util = _dereq_("./util"); +var CancellationError = Promise.CancellationError; +var errorObj = util.errorObj; + +function PassThroughHandlerContext(promise, type, handler) { + this.promise = promise; + this.type = type; + this.handler = handler; + this.called = false; + this.cancelPromise = null; +} + +PassThroughHandlerContext.prototype.isFinallyHandler = function() { + return this.type === 0; +}; + +function FinallyHandlerCancelReaction(finallyHandler) { + this.finallyHandler = finallyHandler; +} + +FinallyHandlerCancelReaction.prototype._resultCancelled = function() { + checkCancel(this.finallyHandler); +}; + +function checkCancel(ctx, reason) { + if (ctx.cancelPromise != null) { + if (arguments.length > 1) { + ctx.cancelPromise._reject(reason); + } else { + ctx.cancelPromise._cancel(); + } + ctx.cancelPromise = null; + return true; + } + return false; +} + +function succeed() { + return finallyHandler.call(this, this.promise._target()._settledValue()); +} +function fail(reason) { + if (checkCancel(this, reason)) return; + errorObj.e = reason; + return errorObj; +} +function finallyHandler(reasonOrValue) { + var promise = this.promise; + var handler = this.handler; + + if (!this.called) { + this.called = true; + var ret = this.isFinallyHandler() + ? handler.call(promise._boundValue()) + : handler.call(promise._boundValue(), reasonOrValue); + if (ret !== undefined) { + promise._setReturnedNonUndefined(); + var maybePromise = tryConvertToPromise(ret, promise); + if (maybePromise instanceof Promise) { + if (this.cancelPromise != null) { + if (maybePromise.isCancelled()) { + var reason = + new CancellationError("late cancellation observer"); + promise._attachExtraTrace(reason); + errorObj.e = reason; + return errorObj; + } else if (maybePromise.isPending()) { + maybePromise._attachCancellationCallback( + new FinallyHandlerCancelReaction(this)); + } + } + return maybePromise._then( + succeed, fail, undefined, this, undefined); + } + } + } + + if (promise.isRejected()) { + checkCancel(this); + errorObj.e = reasonOrValue; + return errorObj; + } else { + checkCancel(this); + return reasonOrValue; + } +} + +Promise.prototype._passThrough = function(handler, type, success, fail) { + if (typeof handler !== "function") return this.then(); + return this._then(success, + fail, + undefined, + new PassThroughHandlerContext(this, type, handler), + undefined); +}; + +Promise.prototype.lastly = +Promise.prototype["finally"] = function (handler) { + return this._passThrough(handler, + 0, + finallyHandler, + finallyHandler); +}; + +Promise.prototype.tap = function (handler) { + return this._passThrough(handler, 1, finallyHandler); +}; + +return PassThroughHandlerContext; +}; + +},{"./util":21}],12:[function(_dereq_,module,exports){ +"use strict"; +module.exports = +function(Promise, PromiseArray, tryConvertToPromise, INTERNAL) { +var util = _dereq_("./util"); +var canEvaluate = util.canEvaluate; +var tryCatch = util.tryCatch; +var errorObj = util.errorObj; +var reject; + +if (!true) { +if (canEvaluate) { + var thenCallback = function(i) { + return new Function("value", "holder", " \n\ + 'use strict'; \n\ + holder.pIndex = value; \n\ + holder.checkFulfillment(this); \n\ + ".replace(/Index/g, i)); + }; + + var promiseSetter = function(i) { + return new Function("promise", "holder", " \n\ + 'use strict'; \n\ + holder.pIndex = promise; \n\ + ".replace(/Index/g, i)); + }; + + var generateHolderClass = function(total) { + var props = new Array(total); + for (var i = 0; i < props.length; ++i) { + props[i] = "this.p" + (i+1); + } + var assignment = props.join(" = ") + " = null;"; + var cancellationCode= "var promise;\n" + props.map(function(prop) { + return " \n\ + promise = " + prop + "; \n\ + if (promise instanceof Promise) { \n\ + promise.cancel(); \n\ + } \n\ + "; + }).join("\n"); + var passedArguments = props.join(", "); + var name = "Holder$" + total; + + + var code = "return function(tryCatch, errorObj, Promise) { \n\ + 'use strict'; \n\ + function [TheName](fn) { \n\ + [TheProperties] \n\ + this.fn = fn; \n\ + this.now = 0; \n\ + } \n\ + [TheName].prototype.checkFulfillment = function(promise) { \n\ + var now = ++this.now; \n\ + if (now === [TheTotal]) { \n\ + promise._pushContext(); \n\ + var callback = this.fn; \n\ + var ret = tryCatch(callback)([ThePassedArguments]); \n\ + promise._popContext(); \n\ + if (ret === errorObj) { \n\ + promise._rejectCallback(ret.e, false); \n\ + } else { \n\ + promise._resolveCallback(ret); \n\ + } \n\ + } \n\ + }; \n\ + \n\ + [TheName].prototype._resultCancelled = function() { \n\ + [CancellationCode] \n\ + }; \n\ + \n\ + return [TheName]; \n\ + }(tryCatch, errorObj, Promise); \n\ + "; + + code = code.replace(/\[TheName\]/g, name) + .replace(/\[TheTotal\]/g, total) + .replace(/\[ThePassedArguments\]/g, passedArguments) + .replace(/\[TheProperties\]/g, assignment) + .replace(/\[CancellationCode\]/g, cancellationCode); + + return new Function("tryCatch", "errorObj", "Promise", code) + (tryCatch, errorObj, Promise); + }; + + var holderClasses = []; + var thenCallbacks = []; + var promiseSetters = []; + + for (var i = 0; i < 8; ++i) { + holderClasses.push(generateHolderClass(i + 1)); + thenCallbacks.push(thenCallback(i + 1)); + promiseSetters.push(promiseSetter(i + 1)); + } + + reject = function (reason) { + this._reject(reason); + }; +}} + +Promise.join = function () { + var last = arguments.length - 1; + var fn; + if (last > 0 && typeof arguments[last] === "function") { + fn = arguments[last]; + if (!true) { + if (last <= 8 && canEvaluate) { + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + var HolderClass = holderClasses[last - 1]; + var holder = new HolderClass(fn); + var callbacks = thenCallbacks; + + for (var i = 0; i < last; ++i) { + var maybePromise = tryConvertToPromise(arguments[i], ret); + if (maybePromise instanceof Promise) { + maybePromise = maybePromise._target(); + var bitField = maybePromise._bitField; + ; + if (((bitField & 50397184) === 0)) { + maybePromise._then(callbacks[i], reject, + undefined, ret, holder); + promiseSetters[i](maybePromise, holder); + } else if (((bitField & 33554432) !== 0)) { + callbacks[i].call(ret, + maybePromise._value(), holder); + } else if (((bitField & 16777216) !== 0)) { + ret._reject(maybePromise._reason()); + } else { + ret._cancel(); + } + } else { + callbacks[i].call(ret, maybePromise, holder); + } + } + if (!ret._isFateSealed()) { + ret._setAsyncGuaranteed(); + ret._setOnCancel(holder); + } + return ret; + } + } + } + var args = [].slice.call(arguments);; + if (fn) args.pop(); + var ret = new PromiseArray(args).promise(); + return fn !== undefined ? ret.spread(fn) : ret; +}; + +}; + +},{"./util":21}],13:[function(_dereq_,module,exports){ +"use strict"; +module.exports = +function(Promise, INTERNAL, tryConvertToPromise, apiRejection, debug) { +var util = _dereq_("./util"); +var tryCatch = util.tryCatch; + +Promise.method = function (fn) { + if (typeof fn !== "function") { + throw new Promise.TypeError("expecting a function but got " + util.classString(fn)); + } + return function () { + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + ret._pushContext(); + var value = tryCatch(fn).apply(this, arguments); + var promiseCreated = ret._popContext(); + debug.checkForgottenReturns( + value, promiseCreated, "Promise.method", ret); + ret._resolveFromSyncValue(value); + return ret; + }; +}; + +Promise.attempt = Promise["try"] = function (fn) { + if (typeof fn !== "function") { + return apiRejection("expecting a function but got " + util.classString(fn)); + } + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + ret._pushContext(); + var value; + if (arguments.length > 1) { + debug.deprecated("calling Promise.try with more than 1 argument"); + var arg = arguments[1]; + var ctx = arguments[2]; + value = util.isArray(arg) ? tryCatch(fn).apply(ctx, arg) + : tryCatch(fn).call(ctx, arg); + } else { + value = tryCatch(fn)(); + } + var promiseCreated = ret._popContext(); + debug.checkForgottenReturns( + value, promiseCreated, "Promise.try", ret); + ret._resolveFromSyncValue(value); + return ret; +}; + +Promise.prototype._resolveFromSyncValue = function (value) { + if (value === util.errorObj) { + this._rejectCallback(value.e, false); + } else { + this._resolveCallback(value, true); + } +}; +}; + +},{"./util":21}],14:[function(_dereq_,module,exports){ +"use strict"; +var util = _dereq_("./util"); +var maybeWrapAsError = util.maybeWrapAsError; +var errors = _dereq_("./errors"); +var OperationalError = errors.OperationalError; +var es5 = _dereq_("./es5"); + +function isUntypedError(obj) { + return obj instanceof Error && + es5.getPrototypeOf(obj) === Error.prototype; +} + +var rErrorKey = /^(?:name|message|stack|cause)$/; +function wrapAsOperationalError(obj) { + var ret; + if (isUntypedError(obj)) { + ret = new OperationalError(obj); + ret.name = obj.name; + ret.message = obj.message; + ret.stack = obj.stack; + var keys = es5.keys(obj); + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + if (!rErrorKey.test(key)) { + ret[key] = obj[key]; + } + } + return ret; + } + util.markAsOriginatingFromRejection(obj); + return obj; +} + +function nodebackForPromise(promise, multiArgs) { + return function(err, value) { + if (promise === null) return; + if (err) { + var wrapped = wrapAsOperationalError(maybeWrapAsError(err)); + promise._attachExtraTrace(wrapped); + promise._reject(wrapped); + } else if (!multiArgs) { + promise._fulfill(value); + } else { + var args = [].slice.call(arguments, 1);; + promise._fulfill(args); + } + promise = null; + }; +} + +module.exports = nodebackForPromise; + +},{"./errors":9,"./es5":10,"./util":21}],15:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function() { +var makeSelfResolutionError = function () { + return new TypeError("circular promise resolution chain\u000a\u000a See http://goo.gl/MqrFmX\u000a"); +}; +var reflectHandler = function() { + return new Promise.PromiseInspection(this._target()); +}; +var apiRejection = function(msg) { + return Promise.reject(new TypeError(msg)); +}; +function Proxyable() {} +var UNDEFINED_BINDING = {}; +var util = _dereq_("./util"); + +var getDomain; +if (util.isNode) { + getDomain = function() { + var ret = process.domain; + if (ret === undefined) ret = null; + return ret; + }; +} else { + getDomain = function() { + return null; + }; +} +util.notEnumerableProp(Promise, "_getDomain", getDomain); + +var es5 = _dereq_("./es5"); +var Async = _dereq_("./async"); +var async = new Async(); +es5.defineProperty(Promise, "_async", {value: async}); +var errors = _dereq_("./errors"); +var TypeError = Promise.TypeError = errors.TypeError; +Promise.RangeError = errors.RangeError; +var CancellationError = Promise.CancellationError = errors.CancellationError; +Promise.TimeoutError = errors.TimeoutError; +Promise.OperationalError = errors.OperationalError; +Promise.RejectionError = errors.OperationalError; +Promise.AggregateError = errors.AggregateError; +var INTERNAL = function(){}; +var APPLY = {}; +var NEXT_FILTER = {}; +var tryConvertToPromise = _dereq_("./thenables")(Promise, INTERNAL); +var PromiseArray = + _dereq_("./promise_array")(Promise, INTERNAL, + tryConvertToPromise, apiRejection, Proxyable); +var Context = _dereq_("./context")(Promise); + /*jshint unused:false*/ +var createContext = Context.create; +var debug = _dereq_("./debuggability")(Promise, Context); +var CapturedTrace = debug.CapturedTrace; +var PassThroughHandlerContext = + _dereq_("./finally")(Promise, tryConvertToPromise); +var catchFilter = _dereq_("./catch_filter")(NEXT_FILTER); +var nodebackForPromise = _dereq_("./nodeback"); +var errorObj = util.errorObj; +var tryCatch = util.tryCatch; +function check(self, executor) { + if (typeof executor !== "function") { + throw new TypeError("expecting a function but got " + util.classString(executor)); + } + if (self.constructor !== Promise) { + throw new TypeError("the promise constructor cannot be invoked directly\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } +} + +function Promise(executor) { + this._bitField = 0; + this._fulfillmentHandler0 = undefined; + this._rejectionHandler0 = undefined; + this._promise0 = undefined; + this._receiver0 = undefined; + if (executor !== INTERNAL) { + check(this, executor); + this._resolveFromExecutor(executor); + } + this._promiseCreated(); + this._fireEvent("promiseCreated", this); +} + +Promise.prototype.toString = function () { + return "[object Promise]"; +}; + +Promise.prototype.caught = Promise.prototype["catch"] = function (fn) { + var len = arguments.length; + if (len > 1) { + var catchInstances = new Array(len - 1), + j = 0, i; + for (i = 0; i < len - 1; ++i) { + var item = arguments[i]; + if (util.isObject(item)) { + catchInstances[j++] = item; + } else { + return apiRejection("expecting an object but got " + util.classString(item)); + } + } + catchInstances.length = j; + fn = arguments[i]; + return this.then(undefined, catchFilter(catchInstances, fn, this)); + } + return this.then(undefined, fn); +}; + +Promise.prototype.reflect = function () { + return this._then(reflectHandler, + reflectHandler, undefined, this, undefined); +}; + +Promise.prototype.then = function (didFulfill, didReject) { + if (debug.warnings() && arguments.length > 0 && + typeof didFulfill !== "function" && + typeof didReject !== "function") { + var msg = ".then() only accepts functions but was passed: " + + util.classString(didFulfill); + if (arguments.length > 1) { + msg += ", " + util.classString(didReject); + } + this._warn(msg); + } + return this._then(didFulfill, didReject, undefined, undefined, undefined); +}; + +Promise.prototype.done = function (didFulfill, didReject) { + var promise = + this._then(didFulfill, didReject, undefined, undefined, undefined); + promise._setIsFinal(); +}; + +Promise.prototype.spread = function (fn) { + if (typeof fn !== "function") { + return apiRejection("expecting a function but got " + util.classString(fn)); + } + return this.all()._then(fn, undefined, undefined, APPLY, undefined); +}; + +Promise.prototype.toJSON = function () { + var ret = { + isFulfilled: false, + isRejected: false, + fulfillmentValue: undefined, + rejectionReason: undefined + }; + if (this.isFulfilled()) { + ret.fulfillmentValue = this.value(); + ret.isFulfilled = true; + } else if (this.isRejected()) { + ret.rejectionReason = this.reason(); + ret.isRejected = true; + } + return ret; +}; + +Promise.prototype.all = function () { + if (arguments.length > 0) { + this._warn(".all() was passed arguments but it does not take any"); + } + return new PromiseArray(this).promise(); +}; + +Promise.prototype.error = function (fn) { + return this.caught(util.originatesFromRejection, fn); +}; + +Promise.is = function (val) { + return val instanceof Promise; +}; + +Promise.fromNode = Promise.fromCallback = function(fn) { + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + var multiArgs = arguments.length > 1 ? !!Object(arguments[1]).multiArgs + : false; + var result = tryCatch(fn)(nodebackForPromise(ret, multiArgs)); + if (result === errorObj) { + ret._rejectCallback(result.e, true); + } + if (!ret._isFateSealed()) ret._setAsyncGuaranteed(); + return ret; +}; + +Promise.all = function (promises) { + return new PromiseArray(promises).promise(); +}; + +Promise.cast = function (obj) { + var ret = tryConvertToPromise(obj); + if (!(ret instanceof Promise)) { + ret = new Promise(INTERNAL); + ret._captureStackTrace(); + ret._setFulfilled(); + ret._rejectionHandler0 = obj; + } + return ret; +}; + +Promise.resolve = Promise.fulfilled = Promise.cast; + +Promise.reject = Promise.rejected = function (reason) { + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + ret._rejectCallback(reason, true); + return ret; +}; + +Promise.setScheduler = function(fn) { + if (typeof fn !== "function") { + throw new TypeError("expecting a function but got " + util.classString(fn)); + } + return async.setScheduler(fn); +}; + +Promise.prototype._then = function ( + didFulfill, + didReject, + _, receiver, + internalData +) { + var haveInternalData = internalData !== undefined; + var promise = haveInternalData ? internalData : new Promise(INTERNAL); + var target = this._target(); + var bitField = target._bitField; + + if (!haveInternalData) { + promise._propagateFrom(this, 3); + promise._captureStackTrace(); + if (receiver === undefined && + ((this._bitField & 2097152) !== 0)) { + if (!((bitField & 50397184) === 0)) { + receiver = this._boundValue(); + } else { + receiver = target === this ? undefined : this._boundTo; + } + } + this._fireEvent("promiseChained", this, promise); + } + + var domain = getDomain(); + if (!((bitField & 50397184) === 0)) { + var handler, value, settler = target._settlePromiseCtx; + if (((bitField & 33554432) !== 0)) { + value = target._rejectionHandler0; + handler = didFulfill; + } else if (((bitField & 16777216) !== 0)) { + value = target._fulfillmentHandler0; + handler = didReject; + target._unsetRejectionIsUnhandled(); + } else { + settler = target._settlePromiseLateCancellationObserver; + value = new CancellationError("late cancellation observer"); + target._attachExtraTrace(value); + handler = didReject; + } + + async.invoke(settler, target, { + handler: domain === null ? handler + : (typeof handler === "function" && domain.bind(handler)), + promise: promise, + receiver: receiver, + value: value + }); + } else { + target._addCallbacks(didFulfill, didReject, promise, receiver, domain); + } + + return promise; +}; + +Promise.prototype._length = function () { + return this._bitField & 65535; +}; + +Promise.prototype._isFateSealed = function () { + return (this._bitField & 117506048) !== 0; +}; + +Promise.prototype._isFollowing = function () { + return (this._bitField & 67108864) === 67108864; +}; + +Promise.prototype._setLength = function (len) { + this._bitField = (this._bitField & -65536) | + (len & 65535); +}; + +Promise.prototype._setFulfilled = function () { + this._bitField = this._bitField | 33554432; + this._fireEvent("promiseFulfilled", this); +}; + +Promise.prototype._setRejected = function () { + this._bitField = this._bitField | 16777216; + this._fireEvent("promiseRejected", this); +}; + +Promise.prototype._setFollowing = function () { + this._bitField = this._bitField | 67108864; + this._fireEvent("promiseResolved", this); +}; + +Promise.prototype._setIsFinal = function () { + this._bitField = this._bitField | 4194304; +}; + +Promise.prototype._isFinal = function () { + return (this._bitField & 4194304) > 0; +}; + +Promise.prototype._unsetCancelled = function() { + this._bitField = this._bitField & (~65536); +}; + +Promise.prototype._setCancelled = function() { + this._bitField = this._bitField | 65536; + this._fireEvent("promiseCancelled", this); +}; + +Promise.prototype._setAsyncGuaranteed = function() { + if (async.hasCustomScheduler()) return; + this._bitField = this._bitField | 134217728; +}; + +Promise.prototype._receiverAt = function (index) { + var ret = index === 0 ? this._receiver0 : this[ + index * 4 - 4 + 3]; + if (ret === UNDEFINED_BINDING) { + return undefined; + } else if (ret === undefined && this._isBound()) { + return this._boundValue(); + } + return ret; +}; + +Promise.prototype._promiseAt = function (index) { + return this[ + index * 4 - 4 + 2]; +}; + +Promise.prototype._fulfillmentHandlerAt = function (index) { + return this[ + index * 4 - 4 + 0]; +}; + +Promise.prototype._rejectionHandlerAt = function (index) { + return this[ + index * 4 - 4 + 1]; +}; + +Promise.prototype._boundValue = function() {}; + +Promise.prototype._migrateCallback0 = function (follower) { + var bitField = follower._bitField; + var fulfill = follower._fulfillmentHandler0; + var reject = follower._rejectionHandler0; + var promise = follower._promise0; + var receiver = follower._receiverAt(0); + if (receiver === undefined) receiver = UNDEFINED_BINDING; + this._addCallbacks(fulfill, reject, promise, receiver, null); +}; + +Promise.prototype._migrateCallbackAt = function (follower, index) { + var fulfill = follower._fulfillmentHandlerAt(index); + var reject = follower._rejectionHandlerAt(index); + var promise = follower._promiseAt(index); + var receiver = follower._receiverAt(index); + if (receiver === undefined) receiver = UNDEFINED_BINDING; + this._addCallbacks(fulfill, reject, promise, receiver, null); +}; + +Promise.prototype._addCallbacks = function ( + fulfill, + reject, + promise, + receiver, + domain +) { + var index = this._length(); + + if (index >= 65535 - 4) { + index = 0; + this._setLength(0); + } + + if (index === 0) { + this._promise0 = promise; + this._receiver0 = receiver; + if (typeof fulfill === "function") { + this._fulfillmentHandler0 = + domain === null ? fulfill : domain.bind(fulfill); + } + if (typeof reject === "function") { + this._rejectionHandler0 = + domain === null ? reject : domain.bind(reject); + } + } else { + var base = index * 4 - 4; + this[base + 2] = promise; + this[base + 3] = receiver; + if (typeof fulfill === "function") { + this[base + 0] = + domain === null ? fulfill : domain.bind(fulfill); + } + if (typeof reject === "function") { + this[base + 1] = + domain === null ? reject : domain.bind(reject); + } + } + this._setLength(index + 1); + return index; +}; + +Promise.prototype._proxy = function (proxyable, arg) { + this._addCallbacks(undefined, undefined, arg, proxyable, null); +}; + +Promise.prototype._resolveCallback = function(value, shouldBind) { + if (((this._bitField & 117506048) !== 0)) return; + if (value === this) + return this._rejectCallback(makeSelfResolutionError(), false); + var maybePromise = tryConvertToPromise(value, this); + if (!(maybePromise instanceof Promise)) return this._fulfill(value); + + if (shouldBind) this._propagateFrom(maybePromise, 2); + + var promise = maybePromise._target(); + + if (promise === this) { + this._reject(makeSelfResolutionError()); + return; + } + + var bitField = promise._bitField; + if (((bitField & 50397184) === 0)) { + var len = this._length(); + if (len > 0) promise._migrateCallback0(this); + for (var i = 1; i < len; ++i) { + promise._migrateCallbackAt(this, i); + } + this._setFollowing(); + this._setLength(0); + this._setFollowee(promise); + } else if (((bitField & 33554432) !== 0)) { + this._fulfill(promise._value()); + } else if (((bitField & 16777216) !== 0)) { + this._reject(promise._reason()); + } else { + var reason = new CancellationError("late cancellation observer"); + promise._attachExtraTrace(reason); + this._reject(reason); + } +}; + +Promise.prototype._rejectCallback = +function(reason, synchronous, ignoreNonErrorWarnings) { + var trace = util.ensureErrorObject(reason); + var hasStack = trace === reason; + if (!hasStack && !ignoreNonErrorWarnings && debug.warnings()) { + var message = "a promise was rejected with a non-error: " + + util.classString(reason); + this._warn(message, true); + } + this._attachExtraTrace(trace, synchronous ? hasStack : false); + this._reject(reason); +}; + +Promise.prototype._resolveFromExecutor = function (executor) { + var promise = this; + this._captureStackTrace(); + this._pushContext(); + var synchronous = true; + var r = this._execute(executor, function(value) { + promise._resolveCallback(value); + }, function (reason) { + promise._rejectCallback(reason, synchronous); + }); + synchronous = false; + this._popContext(); + + if (r !== undefined) { + promise._rejectCallback(r, true); + } +}; + +Promise.prototype._settlePromiseFromHandler = function ( + handler, receiver, value, promise +) { + var bitField = promise._bitField; + if (((bitField & 65536) !== 0)) return; + promise._pushContext(); + var x; + if (receiver === APPLY) { + if (!value || typeof value.length !== "number") { + x = errorObj; + x.e = new TypeError("cannot .spread() a non-array: " + + util.classString(value)); + } else { + x = tryCatch(handler).apply(this._boundValue(), value); + } + } else { + x = tryCatch(handler).call(receiver, value); + } + var promiseCreated = promise._popContext(); + bitField = promise._bitField; + if (((bitField & 65536) !== 0)) return; + + if (x === NEXT_FILTER) { + promise._reject(value); + } else if (x === errorObj) { + promise._rejectCallback(x.e, false); + } else { + debug.checkForgottenReturns(x, promiseCreated, "", promise, this); + promise._resolveCallback(x); + } +}; + +Promise.prototype._target = function() { + var ret = this; + while (ret._isFollowing()) ret = ret._followee(); + return ret; +}; + +Promise.prototype._followee = function() { + return this._rejectionHandler0; +}; + +Promise.prototype._setFollowee = function(promise) { + this._rejectionHandler0 = promise; +}; + +Promise.prototype._settlePromise = function(promise, handler, receiver, value) { + var isPromise = promise instanceof Promise; + var bitField = this._bitField; + var asyncGuaranteed = ((bitField & 134217728) !== 0); + if (((bitField & 65536) !== 0)) { + if (isPromise) promise._invokeInternalOnCancel(); + + if (receiver instanceof PassThroughHandlerContext && + receiver.isFinallyHandler()) { + receiver.cancelPromise = promise; + if (tryCatch(handler).call(receiver, value) === errorObj) { + promise._reject(errorObj.e); + } + } else if (handler === reflectHandler) { + promise._fulfill(reflectHandler.call(receiver)); + } else if (receiver instanceof Proxyable) { + receiver._promiseCancelled(promise); + } else if (isPromise || promise instanceof PromiseArray) { + promise._cancel(); + } else { + receiver.cancel(); + } + } else if (typeof handler === "function") { + if (!isPromise) { + handler.call(receiver, value, promise); + } else { + if (asyncGuaranteed) promise._setAsyncGuaranteed(); + this._settlePromiseFromHandler(handler, receiver, value, promise); + } + } else if (receiver instanceof Proxyable) { + if (!receiver._isResolved()) { + if (((bitField & 33554432) !== 0)) { + receiver._promiseFulfilled(value, promise); + } else { + receiver._promiseRejected(value, promise); + } + } + } else if (isPromise) { + if (asyncGuaranteed) promise._setAsyncGuaranteed(); + if (((bitField & 33554432) !== 0)) { + promise._fulfill(value); + } else { + promise._reject(value); + } + } +}; + +Promise.prototype._settlePromiseLateCancellationObserver = function(ctx) { + var handler = ctx.handler; + var promise = ctx.promise; + var receiver = ctx.receiver; + var value = ctx.value; + if (typeof handler === "function") { + if (!(promise instanceof Promise)) { + handler.call(receiver, value, promise); + } else { + this._settlePromiseFromHandler(handler, receiver, value, promise); + } + } else if (promise instanceof Promise) { + promise._reject(value); + } +}; + +Promise.prototype._settlePromiseCtx = function(ctx) { + this._settlePromise(ctx.promise, ctx.handler, ctx.receiver, ctx.value); +}; + +Promise.prototype._settlePromise0 = function(handler, value, bitField) { + var promise = this._promise0; + var receiver = this._receiverAt(0); + this._promise0 = undefined; + this._receiver0 = undefined; + this._settlePromise(promise, handler, receiver, value); +}; + +Promise.prototype._clearCallbackDataAtIndex = function(index) { + var base = index * 4 - 4; + this[base + 2] = + this[base + 3] = + this[base + 0] = + this[base + 1] = undefined; +}; + +Promise.prototype._fulfill = function (value) { + var bitField = this._bitField; + if (((bitField & 117506048) >>> 16)) return; + if (value === this) { + var err = makeSelfResolutionError(); + this._attachExtraTrace(err); + return this._reject(err); + } + this._setFulfilled(); + this._rejectionHandler0 = value; + + if ((bitField & 65535) > 0) { + if (((bitField & 134217728) !== 0)) { + this._settlePromises(); + } else { + async.settlePromises(this); + } + } +}; + +Promise.prototype._reject = function (reason) { + var bitField = this._bitField; + if (((bitField & 117506048) >>> 16)) return; + this._setRejected(); + this._fulfillmentHandler0 = reason; + + if (this._isFinal()) { + return async.fatalError(reason, util.isNode); + } + + if ((bitField & 65535) > 0) { + async.settlePromises(this); + } else { + this._ensurePossibleRejectionHandled(); + } +}; + +Promise.prototype._fulfillPromises = function (len, value) { + for (var i = 1; i < len; i++) { + var handler = this._fulfillmentHandlerAt(i); + var promise = this._promiseAt(i); + var receiver = this._receiverAt(i); + this._clearCallbackDataAtIndex(i); + this._settlePromise(promise, handler, receiver, value); + } +}; + +Promise.prototype._rejectPromises = function (len, reason) { + for (var i = 1; i < len; i++) { + var handler = this._rejectionHandlerAt(i); + var promise = this._promiseAt(i); + var receiver = this._receiverAt(i); + this._clearCallbackDataAtIndex(i); + this._settlePromise(promise, handler, receiver, reason); + } +}; + +Promise.prototype._settlePromises = function () { + var bitField = this._bitField; + var len = (bitField & 65535); + + if (len > 0) { + if (((bitField & 16842752) !== 0)) { + var reason = this._fulfillmentHandler0; + this._settlePromise0(this._rejectionHandler0, reason, bitField); + this._rejectPromises(len, reason); + } else { + var value = this._rejectionHandler0; + this._settlePromise0(this._fulfillmentHandler0, value, bitField); + this._fulfillPromises(len, value); + } + this._setLength(0); + } + this._clearCancellationData(); +}; + +Promise.prototype._settledValue = function() { + var bitField = this._bitField; + if (((bitField & 33554432) !== 0)) { + return this._rejectionHandler0; + } else if (((bitField & 16777216) !== 0)) { + return this._fulfillmentHandler0; + } +}; + +function deferResolve(v) {this.promise._resolveCallback(v);} +function deferReject(v) {this.promise._rejectCallback(v, false);} + +Promise.defer = Promise.pending = function() { + debug.deprecated("Promise.defer", "new Promise"); + var promise = new Promise(INTERNAL); + return { + promise: promise, + resolve: deferResolve, + reject: deferReject + }; +}; + +util.notEnumerableProp(Promise, + "_makeSelfResolutionError", + makeSelfResolutionError); + +_dereq_("./method")(Promise, INTERNAL, tryConvertToPromise, apiRejection, + debug); +_dereq_("./bind")(Promise, INTERNAL, tryConvertToPromise, debug); +_dereq_("./cancel")(Promise, PromiseArray, apiRejection, debug); +_dereq_("./direct_resolve")(Promise); +_dereq_("./synchronous_inspection")(Promise); +_dereq_("./join")( + Promise, PromiseArray, tryConvertToPromise, INTERNAL, debug); +Promise.Promise = Promise; +Promise.version = "3.4.0"; + + util.toFastProperties(Promise); + util.toFastProperties(Promise.prototype); + function fillTypes(value) { + var p = new Promise(INTERNAL); + p._fulfillmentHandler0 = value; + p._rejectionHandler0 = value; + p._promise0 = value; + p._receiver0 = value; + } + // Complete slack tracking, opt out of field-type tracking and + // stabilize map + fillTypes({a: 1}); + fillTypes({b: 2}); + fillTypes({c: 3}); + fillTypes(1); + fillTypes(function(){}); + fillTypes(undefined); + fillTypes(false); + fillTypes(new Promise(INTERNAL)); + debug.setBounds(Async.firstLineError, util.lastLineError); + return Promise; + +}; + +},{"./async":1,"./bind":2,"./cancel":4,"./catch_filter":5,"./context":6,"./debuggability":7,"./direct_resolve":8,"./errors":9,"./es5":10,"./finally":11,"./join":12,"./method":13,"./nodeback":14,"./promise_array":16,"./synchronous_inspection":19,"./thenables":20,"./util":21}],16:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, INTERNAL, tryConvertToPromise, + apiRejection, Proxyable) { +var util = _dereq_("./util"); +var isArray = util.isArray; + +function toResolutionValue(val) { + switch(val) { + case -2: return []; + case -3: return {}; + } +} + +function PromiseArray(values) { + var promise = this._promise = new Promise(INTERNAL); + if (values instanceof Promise) { + promise._propagateFrom(values, 3); + } + promise._setOnCancel(this); + this._values = values; + this._length = 0; + this._totalResolved = 0; + this._init(undefined, -2); +} +util.inherits(PromiseArray, Proxyable); + +PromiseArray.prototype.length = function () { + return this._length; +}; + +PromiseArray.prototype.promise = function () { + return this._promise; +}; + +PromiseArray.prototype._init = function init(_, resolveValueIfEmpty) { + var values = tryConvertToPromise(this._values, this._promise); + if (values instanceof Promise) { + values = values._target(); + var bitField = values._bitField; + ; + this._values = values; + + if (((bitField & 50397184) === 0)) { + this._promise._setAsyncGuaranteed(); + return values._then( + init, + this._reject, + undefined, + this, + resolveValueIfEmpty + ); + } else if (((bitField & 33554432) !== 0)) { + values = values._value(); + } else if (((bitField & 16777216) !== 0)) { + return this._reject(values._reason()); + } else { + return this._cancel(); + } + } + values = util.asArray(values); + if (values === null) { + var err = apiRejection( + "expecting an array or an iterable object but got " + util.classString(values)).reason(); + this._promise._rejectCallback(err, false); + return; + } + + if (values.length === 0) { + if (resolveValueIfEmpty === -5) { + this._resolveEmptyArray(); + } + else { + this._resolve(toResolutionValue(resolveValueIfEmpty)); + } + return; + } + this._iterate(values); +}; + +PromiseArray.prototype._iterate = function(values) { + var len = this.getActualLength(values.length); + this._length = len; + this._values = this.shouldCopyValues() ? new Array(len) : this._values; + var result = this._promise; + var isResolved = false; + var bitField = null; + for (var i = 0; i < len; ++i) { + var maybePromise = tryConvertToPromise(values[i], result); + + if (maybePromise instanceof Promise) { + maybePromise = maybePromise._target(); + bitField = maybePromise._bitField; + } else { + bitField = null; + } + + if (isResolved) { + if (bitField !== null) { + maybePromise.suppressUnhandledRejections(); + } + } else if (bitField !== null) { + if (((bitField & 50397184) === 0)) { + maybePromise._proxy(this, i); + this._values[i] = maybePromise; + } else if (((bitField & 33554432) !== 0)) { + isResolved = this._promiseFulfilled(maybePromise._value(), i); + } else if (((bitField & 16777216) !== 0)) { + isResolved = this._promiseRejected(maybePromise._reason(), i); + } else { + isResolved = this._promiseCancelled(i); + } + } else { + isResolved = this._promiseFulfilled(maybePromise, i); + } + } + if (!isResolved) result._setAsyncGuaranteed(); +}; + +PromiseArray.prototype._isResolved = function () { + return this._values === null; +}; + +PromiseArray.prototype._resolve = function (value) { + this._values = null; + this._promise._fulfill(value); +}; + +PromiseArray.prototype._cancel = function() { + if (this._isResolved() || !this._promise.isCancellable()) return; + this._values = null; + this._promise._cancel(); +}; + +PromiseArray.prototype._reject = function (reason) { + this._values = null; + this._promise._rejectCallback(reason, false); +}; + +PromiseArray.prototype._promiseFulfilled = function (value, index) { + this._values[index] = value; + var totalResolved = ++this._totalResolved; + if (totalResolved >= this._length) { + this._resolve(this._values); + return true; + } + return false; +}; + +PromiseArray.prototype._promiseCancelled = function() { + this._cancel(); + return true; +}; + +PromiseArray.prototype._promiseRejected = function (reason) { + this._totalResolved++; + this._reject(reason); + return true; +}; + +PromiseArray.prototype._resultCancelled = function() { + if (this._isResolved()) return; + var values = this._values; + this._cancel(); + if (values instanceof Promise) { + values.cancel(); + } else { + for (var i = 0; i < values.length; ++i) { + if (values[i] instanceof Promise) { + values[i].cancel(); + } + } + } +}; + +PromiseArray.prototype.shouldCopyValues = function () { + return true; +}; + +PromiseArray.prototype.getActualLength = function (len) { + return len; +}; + +return PromiseArray; +}; + +},{"./util":21}],17:[function(_dereq_,module,exports){ +"use strict"; +function arrayMove(src, srcIndex, dst, dstIndex, len) { + for (var j = 0; j < len; ++j) { + dst[j + dstIndex] = src[j + srcIndex]; + src[j + srcIndex] = void 0; + } +} + +function Queue(capacity) { + this._capacity = capacity; + this._length = 0; + this._front = 0; +} + +Queue.prototype._willBeOverCapacity = function (size) { + return this._capacity < size; +}; + +Queue.prototype._pushOne = function (arg) { + var length = this.length(); + this._checkCapacity(length + 1); + var i = (this._front + length) & (this._capacity - 1); + this[i] = arg; + this._length = length + 1; +}; + +Queue.prototype._unshiftOne = function(value) { + var capacity = this._capacity; + this._checkCapacity(this.length() + 1); + var front = this._front; + var i = (((( front - 1 ) & + ( capacity - 1) ) ^ capacity ) - capacity ); + this[i] = value; + this._front = i; + this._length = this.length() + 1; +}; + +Queue.prototype.unshift = function(fn, receiver, arg) { + this._unshiftOne(arg); + this._unshiftOne(receiver); + this._unshiftOne(fn); +}; + +Queue.prototype.push = function (fn, receiver, arg) { + var length = this.length() + 3; + if (this._willBeOverCapacity(length)) { + this._pushOne(fn); + this._pushOne(receiver); + this._pushOne(arg); + return; + } + var j = this._front + length - 3; + this._checkCapacity(length); + var wrapMask = this._capacity - 1; + this[(j + 0) & wrapMask] = fn; + this[(j + 1) & wrapMask] = receiver; + this[(j + 2) & wrapMask] = arg; + this._length = length; +}; + +Queue.prototype.shift = function () { + var front = this._front, + ret = this[front]; + + this[front] = undefined; + this._front = (front + 1) & (this._capacity - 1); + this._length--; + return ret; +}; + +Queue.prototype.length = function () { + return this._length; +}; + +Queue.prototype._checkCapacity = function (size) { + if (this._capacity < size) { + this._resizeTo(this._capacity << 1); + } +}; + +Queue.prototype._resizeTo = function (capacity) { + var oldCapacity = this._capacity; + this._capacity = capacity; + var front = this._front; + var length = this._length; + var moveItemsCount = (front + length) & (oldCapacity - 1); + arrayMove(this, 0, this, oldCapacity, moveItemsCount); +}; + +module.exports = Queue; + +},{}],18:[function(_dereq_,module,exports){ +"use strict"; +var util = _dereq_("./util"); +var schedule; +var noAsyncScheduler = function() { + throw new Error("No async scheduler available\u000a\u000a See http://goo.gl/MqrFmX\u000a"); +}; +var NativePromise = util.getNativePromise(); +if (util.isNode && typeof MutationObserver === "undefined") { + var GlobalSetImmediate = global.setImmediate; + var ProcessNextTick = process.nextTick; + schedule = util.isRecentNode + ? function(fn) { GlobalSetImmediate.call(global, fn); } + : function(fn) { ProcessNextTick.call(process, fn); }; +} else if (typeof NativePromise === "function") { + var nativePromise = NativePromise.resolve(); + schedule = function(fn) { + nativePromise.then(fn); + }; +} else if ((typeof MutationObserver !== "undefined") && + !(typeof window !== "undefined" && + window.navigator && + window.navigator.standalone)) { + schedule = (function() { + var div = document.createElement("div"); + var opts = {attributes: true}; + var toggleScheduled = false; + var div2 = document.createElement("div"); + var o2 = new MutationObserver(function() { + div.classList.toggle("foo"); + toggleScheduled = false; + }); + o2.observe(div2, opts); + + var scheduleToggle = function() { + if (toggleScheduled) return; + toggleScheduled = true; + div2.classList.toggle("foo"); + }; + + return function schedule(fn) { + var o = new MutationObserver(function() { + o.disconnect(); + fn(); + }); + o.observe(div, opts); + scheduleToggle(); + }; + })(); +} else if (typeof setImmediate !== "undefined") { + schedule = function (fn) { + setImmediate(fn); + }; +} else if (typeof setTimeout !== "undefined") { + schedule = function (fn) { + setTimeout(fn, 0); + }; +} else { + schedule = noAsyncScheduler; +} +module.exports = schedule; + +},{"./util":21}],19:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise) { +function PromiseInspection(promise) { + if (promise !== undefined) { + promise = promise._target(); + this._bitField = promise._bitField; + this._settledValueField = promise._isFateSealed() + ? promise._settledValue() : undefined; + } + else { + this._bitField = 0; + this._settledValueField = undefined; + } +} + +PromiseInspection.prototype._settledValue = function() { + return this._settledValueField; +}; + +var value = PromiseInspection.prototype.value = function () { + if (!this.isFulfilled()) { + throw new TypeError("cannot get fulfillment value of a non-fulfilled promise\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + return this._settledValue(); +}; + +var reason = PromiseInspection.prototype.error = +PromiseInspection.prototype.reason = function () { + if (!this.isRejected()) { + throw new TypeError("cannot get rejection reason of a non-rejected promise\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + return this._settledValue(); +}; + +var isFulfilled = PromiseInspection.prototype.isFulfilled = function() { + return (this._bitField & 33554432) !== 0; +}; + +var isRejected = PromiseInspection.prototype.isRejected = function () { + return (this._bitField & 16777216) !== 0; +}; + +var isPending = PromiseInspection.prototype.isPending = function () { + return (this._bitField & 50397184) === 0; +}; + +var isResolved = PromiseInspection.prototype.isResolved = function () { + return (this._bitField & 50331648) !== 0; +}; + +PromiseInspection.prototype.isCancelled = +Promise.prototype._isCancelled = function() { + return (this._bitField & 65536) === 65536; +}; + +Promise.prototype.isCancelled = function() { + return this._target()._isCancelled(); +}; + +Promise.prototype.isPending = function() { + return isPending.call(this._target()); +}; + +Promise.prototype.isRejected = function() { + return isRejected.call(this._target()); +}; + +Promise.prototype.isFulfilled = function() { + return isFulfilled.call(this._target()); +}; + +Promise.prototype.isResolved = function() { + return isResolved.call(this._target()); +}; + +Promise.prototype.value = function() { + return value.call(this._target()); +}; + +Promise.prototype.reason = function() { + var target = this._target(); + target._unsetRejectionIsUnhandled(); + return reason.call(target); +}; + +Promise.prototype._value = function() { + return this._settledValue(); +}; + +Promise.prototype._reason = function() { + this._unsetRejectionIsUnhandled(); + return this._settledValue(); +}; + +Promise.PromiseInspection = PromiseInspection; +}; + +},{}],20:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, INTERNAL) { +var util = _dereq_("./util"); +var errorObj = util.errorObj; +var isObject = util.isObject; + +function tryConvertToPromise(obj, context) { + if (isObject(obj)) { + if (obj instanceof Promise) return obj; + var then = getThen(obj); + if (then === errorObj) { + if (context) context._pushContext(); + var ret = Promise.reject(then.e); + if (context) context._popContext(); + return ret; + } else if (typeof then === "function") { + if (isAnyBluebirdPromise(obj)) { + var ret = new Promise(INTERNAL); + obj._then( + ret._fulfill, + ret._reject, + undefined, + ret, + null + ); + return ret; + } + return doThenable(obj, then, context); + } + } + return obj; +} + +function doGetThen(obj) { + return obj.then; +} + +function getThen(obj) { + try { + return doGetThen(obj); + } catch (e) { + errorObj.e = e; + return errorObj; + } +} + +var hasProp = {}.hasOwnProperty; +function isAnyBluebirdPromise(obj) { + try { + return hasProp.call(obj, "_promise0"); + } catch (e) { + return false; + } +} + +function doThenable(x, then, context) { + var promise = new Promise(INTERNAL); + var ret = promise; + if (context) context._pushContext(); + promise._captureStackTrace(); + if (context) context._popContext(); + var synchronous = true; + var result = util.tryCatch(then).call(x, resolve, reject); + synchronous = false; + + if (promise && result === errorObj) { + promise._rejectCallback(result.e, true, true); + promise = null; + } + + function resolve(value) { + if (!promise) return; + promise._resolveCallback(value); + promise = null; + } + + function reject(reason) { + if (!promise) return; + promise._rejectCallback(reason, synchronous, true); + promise = null; + } + return ret; +} + +return tryConvertToPromise; +}; + +},{"./util":21}],21:[function(_dereq_,module,exports){ +"use strict"; +var es5 = _dereq_("./es5"); +var canEvaluate = typeof navigator == "undefined"; + +var errorObj = {e: {}}; +var tryCatchTarget; +var globalObject = typeof self !== "undefined" ? self : + typeof window !== "undefined" ? window : + typeof global !== "undefined" ? global : + this !== undefined ? this : null; + +function tryCatcher() { + try { + var target = tryCatchTarget; + tryCatchTarget = null; + return target.apply(this, arguments); + } catch (e) { + errorObj.e = e; + return errorObj; + } +} +function tryCatch(fn) { + tryCatchTarget = fn; + return tryCatcher; +} + +var inherits = function(Child, Parent) { + var hasProp = {}.hasOwnProperty; + + function T() { + this.constructor = Child; + this.constructor$ = Parent; + for (var propertyName in Parent.prototype) { + if (hasProp.call(Parent.prototype, propertyName) && + propertyName.charAt(propertyName.length-1) !== "$" + ) { + this[propertyName + "$"] = Parent.prototype[propertyName]; + } + } + } + T.prototype = Parent.prototype; + Child.prototype = new T(); + return Child.prototype; +}; + + +function isPrimitive(val) { + return val == null || val === true || val === false || + typeof val === "string" || typeof val === "number"; + +} + +function isObject(value) { + return typeof value === "function" || + typeof value === "object" && value !== null; +} + +function maybeWrapAsError(maybeError) { + if (!isPrimitive(maybeError)) return maybeError; + + return new Error(safeToString(maybeError)); +} + +function withAppended(target, appendee) { + var len = target.length; + var ret = new Array(len + 1); + var i; + for (i = 0; i < len; ++i) { + ret[i] = target[i]; + } + ret[i] = appendee; + return ret; +} + +function getDataPropertyOrDefault(obj, key, defaultValue) { + if (es5.isES5) { + var desc = Object.getOwnPropertyDescriptor(obj, key); + + if (desc != null) { + return desc.get == null && desc.set == null + ? desc.value + : defaultValue; + } + } else { + return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined; + } +} + +function notEnumerableProp(obj, name, value) { + if (isPrimitive(obj)) return obj; + var descriptor = { + value: value, + configurable: true, + enumerable: false, + writable: true + }; + es5.defineProperty(obj, name, descriptor); + return obj; +} + +function thrower(r) { + throw r; +} + +var inheritedDataKeys = (function() { + var excludedPrototypes = [ + Array.prototype, + Object.prototype, + Function.prototype + ]; + + var isExcludedProto = function(val) { + for (var i = 0; i < excludedPrototypes.length; ++i) { + if (excludedPrototypes[i] === val) { + return true; + } + } + return false; + }; + + if (es5.isES5) { + var getKeys = Object.getOwnPropertyNames; + return function(obj) { + var ret = []; + var visitedKeys = Object.create(null); + while (obj != null && !isExcludedProto(obj)) { + var keys; + try { + keys = getKeys(obj); + } catch (e) { + return ret; + } + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + if (visitedKeys[key]) continue; + visitedKeys[key] = true; + var desc = Object.getOwnPropertyDescriptor(obj, key); + if (desc != null && desc.get == null && desc.set == null) { + ret.push(key); + } + } + obj = es5.getPrototypeOf(obj); + } + return ret; + }; + } else { + var hasProp = {}.hasOwnProperty; + return function(obj) { + if (isExcludedProto(obj)) return []; + var ret = []; + + /*jshint forin:false */ + enumeration: for (var key in obj) { + if (hasProp.call(obj, key)) { + ret.push(key); + } else { + for (var i = 0; i < excludedPrototypes.length; ++i) { + if (hasProp.call(excludedPrototypes[i], key)) { + continue enumeration; + } + } + ret.push(key); + } + } + return ret; + }; + } + +})(); + +var thisAssignmentPattern = /this\s*\.\s*\S+\s*=/; +function isClass(fn) { + try { + if (typeof fn === "function") { + var keys = es5.names(fn.prototype); + + var hasMethods = es5.isES5 && keys.length > 1; + var hasMethodsOtherThanConstructor = keys.length > 0 && + !(keys.length === 1 && keys[0] === "constructor"); + var hasThisAssignmentAndStaticMethods = + thisAssignmentPattern.test(fn + "") && es5.names(fn).length > 0; + + if (hasMethods || hasMethodsOtherThanConstructor || + hasThisAssignmentAndStaticMethods) { + return true; + } + } + return false; + } catch (e) { + return false; + } +} + +function toFastProperties(obj) { + /*jshint -W027,-W055,-W031*/ + function FakeConstructor() {} + FakeConstructor.prototype = obj; + var l = 8; + while (l--) new FakeConstructor(); + return obj; + eval(obj); +} + +var rident = /^[a-z$_][a-z$_0-9]*$/i; +function isIdentifier(str) { + return rident.test(str); +} + +function filledRange(count, prefix, suffix) { + var ret = new Array(count); + for(var i = 0; i < count; ++i) { + ret[i] = prefix + i + suffix; + } + return ret; +} + +function safeToString(obj) { + try { + return obj + ""; + } catch (e) { + return "[no string representation]"; + } +} + +function isError(obj) { + return obj !== null && + typeof obj === "object" && + typeof obj.message === "string" && + typeof obj.name === "string"; +} + +function markAsOriginatingFromRejection(e) { + try { + notEnumerableProp(e, "isOperational", true); + } + catch(ignore) {} +} + +function originatesFromRejection(e) { + if (e == null) return false; + return ((e instanceof Error["__BluebirdErrorTypes__"].OperationalError) || + e["isOperational"] === true); +} + +function canAttachTrace(obj) { + return isError(obj) && es5.propertyIsWritable(obj, "stack"); +} + +var ensureErrorObject = (function() { + if (!("stack" in new Error())) { + return function(value) { + if (canAttachTrace(value)) return value; + try {throw new Error(safeToString(value));} + catch(err) {return err;} + }; + } else { + return function(value) { + if (canAttachTrace(value)) return value; + return new Error(safeToString(value)); + }; + } +})(); + +function classString(obj) { + return {}.toString.call(obj); +} + +function copyDescriptors(from, to, filter) { + var keys = es5.names(from); + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + if (filter(key)) { + try { + es5.defineProperty(to, key, es5.getDescriptor(from, key)); + } catch (ignore) {} + } + } +} + +var asArray = function(v) { + if (es5.isArray(v)) { + return v; + } + return null; +}; + +if (typeof Symbol !== "undefined" && Symbol.iterator) { + var ArrayFrom = typeof Array.from === "function" ? function(v) { + return Array.from(v); + } : function(v) { + var ret = []; + var it = v[Symbol.iterator](); + var itResult; + while (!((itResult = it.next()).done)) { + ret.push(itResult.value); + } + return ret; + }; + + asArray = function(v) { + if (es5.isArray(v)) { + return v; + } else if (v != null && typeof v[Symbol.iterator] === "function") { + return ArrayFrom(v); + } + return null; + }; +} + +var isNode = typeof process !== "undefined" && + classString(process).toLowerCase() === "[object process]"; + +function env(key, def) { + return isNode ? process.env[key] : def; +} + +function getNativePromise() { + if (typeof Promise === "function") { + try { + var promise = new Promise(function(){}); + if ({}.toString.call(promise) === "[object Promise]") { + return Promise; + } + } catch (e) {} + } +} + +var ret = { + isClass: isClass, + isIdentifier: isIdentifier, + inheritedDataKeys: inheritedDataKeys, + getDataPropertyOrDefault: getDataPropertyOrDefault, + thrower: thrower, + isArray: es5.isArray, + asArray: asArray, + notEnumerableProp: notEnumerableProp, + isPrimitive: isPrimitive, + isObject: isObject, + isError: isError, + canEvaluate: canEvaluate, + errorObj: errorObj, + tryCatch: tryCatch, + inherits: inherits, + withAppended: withAppended, + maybeWrapAsError: maybeWrapAsError, + toFastProperties: toFastProperties, + filledRange: filledRange, + toString: safeToString, + canAttachTrace: canAttachTrace, + ensureErrorObject: ensureErrorObject, + originatesFromRejection: originatesFromRejection, + markAsOriginatingFromRejection: markAsOriginatingFromRejection, + classString: classString, + copyDescriptors: copyDescriptors, + hasDevTools: typeof chrome !== "undefined" && chrome && + typeof chrome.loadTimes === "function", + isNode: isNode, + env: env, + global: globalObject, + getNativePromise: getNativePromise +}; +ret.isRecentNode = ret.isNode && (function() { + var version = process.versions.node.split(".").map(Number); + return (version[0] === 0 && version[1] > 10) || (version[0] > 0); +})(); + +if (ret.isNode) ret.toFastProperties(process); + +try {throw new Error(); } catch (e) {ret.lastLineError = e;} +module.exports = ret; + +},{"./es5":10}]},{},[3])(3) +}); ;if (typeof window !== 'undefined' && window !== null) { window.P = window.Promise; } else if (typeof self !== 'undefined' && self !== null) { self.P = self.Promise; } \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/js/browser/bluebird.core.min.js b/platforms/android/assets/www/libs/bluebird/js/browser/bluebird.core.min.js new file mode 100644 index 0000000..29abd8c --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/js/browser/bluebird.core.min.js @@ -0,0 +1,31 @@ +/* @preserve + * The MIT License (MIT) + * + * Copyright (c) 2013-2015 Petka Antonov + * + * 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. + * + */ +/** + * bluebird build version 3.4.0 + * Features enabled: core + * Features disabled: race, call_get, generators, map, nodeify, promisify, props, reduce, settle, some, using, timers, filter, any, each +*/ +!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;"undefined"!=typeof window?e=window:"undefined"!=typeof global?e=global:"undefined"!=typeof self&&(e=self),e.Promise=t()}}(function(){var t,e,n;return function r(t,e,n){function i(a,s){if(!e[a]){if(!t[a]){var c="function"==typeof _dereq_&&_dereq_;if(!s&&c)return c(a,!0);if(o)return o(a,!0);var l=new Error("Cannot find module '"+a+"'");throw l.code="MODULE_NOT_FOUND",l}var u=e[a]={exports:{}};t[a][0].call(u.exports,function(e){var n=t[a][1][e];return i(n?n:e)},u,u.exports,r,t,e,n)}return e[a].exports}for(var o="function"==typeof _dereq_&&_dereq_,a=0;a0;){var e=t.shift();if("function"==typeof e){var n=t.shift(),r=t.shift();e.call(n,r)}else e._settlePromises()}},r.prototype._drainQueues=function(){this._drainQueue(this._normalQueue),this._reset(),this._haveDrainedQueues=!0,this._drainQueue(this._lateQueue)},r.prototype._queueTick=function(){this._isTickUsed||(this._isTickUsed=!0,this._schedule(this.drainQueues))},r.prototype._reset=function(){this._isTickUsed=!1},e.exports=r,e.exports.firstLineError=s},{"./queue":17,"./schedule":18,"./util":21}],2:[function(t,e,n){"use strict";e.exports=function(t,e,n,r){var i=!1,o=function(t,e){this._reject(e)},a=function(t,e){e.promiseRejectionQueued=!0,e.bindingPromise._then(o,o,null,this,t)},s=function(t,e){0===(50397184&this._bitField)&&this._resolveCallback(e.target)},c=function(t,e){e.promiseRejectionQueued||this._reject(t)};t.prototype.bind=function(o){i||(i=!0,t.prototype._propagateFrom=r.propagateFromFunction(),t.prototype._boundValue=r.boundValueFunction());var l=n(o),u=new t(e);u._propagateFrom(this,1);var p=this._target();if(u._setBoundTo(l),l instanceof t){var f={promiseRejectionQueued:!1,promise:u,target:p,bindingPromise:l};p._then(e,a,void 0,u,f),l._then(s,c,void 0,u,f),u._setOnCancel(l)}else u._resolveCallback(p);return u},t.prototype._setBoundTo=function(t){void 0!==t?(this._bitField=2097152|this._bitField,this._boundTo=t):this._bitField=-2097153&this._bitField},t.prototype._isBound=function(){return 2097152===(2097152&this._bitField)},t.bind=function(e,n){return t.resolve(n).bind(e)}}},{}],3:[function(t,e,n){"use strict";function r(){try{Promise===o&&(Promise=i)}catch(t){}return o}var i;"undefined"!=typeof Promise&&(i=Promise);var o=t("./promise")();o.noConflict=r,e.exports=o},{"./promise":15}],4:[function(t,e,n){"use strict";e.exports=function(e,n,r,i){var o=t("./util"),a=o.tryCatch,s=o.errorObj,c=e._async;e.prototype["break"]=e.prototype.cancel=function(){if(!i.cancellation())return this._warn("cancellation is disabled");for(var t=this,e=t;t.isCancellable();){if(!t._cancelBy(e)){e._isFollowing()?e._followee().cancel():e._cancelBranched();break}var n=t._cancellationParent;if(null==n||!n.isCancellable()){t._isFollowing()?t._followee().cancel():t._cancelBranched();break}t._isFollowing()&&t._followee().cancel(),e=t,t=n}},e.prototype._branchHasCancelled=function(){this._branchesRemainingToCancel--},e.prototype._enoughBranchesHaveCancelled=function(){return void 0===this._branchesRemainingToCancel||this._branchesRemainingToCancel<=0},e.prototype._cancelBy=function(t){return t===this?(this._branchesRemainingToCancel=0,this._invokeOnCancel(),!0):(this._branchHasCancelled(),this._enoughBranchesHaveCancelled()?(this._invokeOnCancel(),!0):!1)},e.prototype._cancelBranched=function(){this._enoughBranchesHaveCancelled()&&this._cancel()},e.prototype._cancel=function(){this.isCancellable()&&(this._setCancelled(),c.invoke(this._cancelPromises,this,void 0))},e.prototype._cancelPromises=function(){this._length()>0&&this._settlePromises()},e.prototype._unsetOnCancel=function(){this._onCancelField=void 0},e.prototype.isCancellable=function(){return this.isPending()&&!this.isCancelled()},e.prototype._doInvokeOnCancel=function(t,e){if(o.isArray(t))for(var n=0;n=0?o[t]:void 0}var i=!1,o=[];return t.prototype._promiseCreated=function(){},t.prototype._pushContext=function(){},t.prototype._popContext=function(){return null},t._peekContext=t.prototype._peekContext=function(){},e.prototype._pushContext=function(){void 0!==this._trace&&(this._trace._promiseCreated=null,o.push(this._trace))},e.prototype._popContext=function(){if(void 0!==this._trace){var t=o.pop(),e=t._promiseCreated;return t._promiseCreated=null,e}return null},e.CapturedTrace=null,e.create=n,e.deactivateLongStackTraces=function(){},e.activateLongStackTraces=function(){var n=t.prototype._pushContext,o=t.prototype._popContext,a=t._peekContext,s=t.prototype._peekContext,c=t.prototype._promiseCreated;e.deactivateLongStackTraces=function(){t.prototype._pushContext=n,t.prototype._popContext=o,t._peekContext=a,t.prototype._peekContext=s,t.prototype._promiseCreated=c,i=!1},i=!0,t.prototype._pushContext=e.prototype._pushContext,t.prototype._popContext=e.prototype._popContext,t._peekContext=t.prototype._peekContext=r,t.prototype._promiseCreated=function(){var t=this._peekContext();t&&null==t._promiseCreated&&(t._promiseCreated=this)}},e}},{}],7:[function(t,e,n){"use strict";e.exports=function(e,n){function r(t,e){return{promise:e}}function i(){return!1}function o(t,e,n){var r=this;try{t(e,n,function(t){if("function"!=typeof t)throw new TypeError("onCancel must be a function, got: "+H.toString(t));r._attachCancellationCallback(t)})}catch(i){return i}}function a(t){if(!this.isCancellable())return this;var e=this._onCancel();void 0!==e?H.isArray(e)?e.push(t):this._setOnCancel([e,t]):this._setOnCancel(t)}function s(){return this._onCancelField}function c(t){this._onCancelField=t}function l(){this._cancellationParent=void 0,this._onCancelField=void 0}function u(t,e){if(0!==(1&e)){this._cancellationParent=t;var n=t._branchesRemainingToCancel;void 0===n&&(n=0),t._branchesRemainingToCancel=n+1}0!==(2&e)&&t._isBound()&&this._setBoundTo(t._boundTo)}function p(t,e){0!==(2&e)&&t._isBound()&&this._setBoundTo(t._boundTo)}function f(){var t=this._boundTo;return void 0!==t&&t instanceof e?t.isFulfilled()?t.value():void 0:t}function h(){this._trace=new S(this._peekContext())}function _(t,e){if(B(t)){var n=this._trace;if(void 0!==n&&e&&(n=n._parent),void 0!==n)n.attachExtraTrace(t);else if(!t.__stackCleaned__){var r=w(t);H.notEnumerableProp(t,"stack",r.message+"\n"+r.stack.join("\n")),H.notEnumerableProp(t,"__stackCleaned__",!0)}}}function d(t,e,n,r,i){if(void 0===t&&null!==e&&$){if(void 0!==i&&i._returnedNonUndefined())return;if(0===(65535&r._bitField))return;n&&(n+=" ");var o="a promise was created in a "+n+"handler but was not returned from it";r._warn(o,!0,e)}}function v(t,e){var n=t+" is deprecated and will be removed in a future version.";return e&&(n+=" Use "+e+" instead."),y(n)}function y(t,n,r){if(rt.warnings){var i,o=new U(t);if(n)r._attachExtraTrace(o);else if(rt.longStackTraces&&(i=e._peekContext()))i.attachExtraTrace(o);else{var a=w(o);o.stack=a.message+"\n"+a.stack.join("\n")}Y("warning",o)||E(o,"",!0)}}function g(t,e){for(var n=0;n=0;--s)if(r[s]===o){a=s;break}for(var s=a;s>=0;--s){var c=r[s];if(e[i]!==c)break;e.pop(),i--}e=r}}function C(t){for(var e=[],n=0;n0&&(e=e.slice(n)),e}function w(t){var e=t.stack,n=t.toString();return e="string"==typeof e&&e.length>0?k(t):[" (No stack trace)"],{message:n,stack:C(e)}}function E(t,e,n){if("undefined"!=typeof console){var r;if(H.isObject(t)){var i=t.stack;r=e+Q(i,t)}else r=e+String(t);"function"==typeof N?N(r,n):("function"==typeof console.log||"object"==typeof console.log)&&console.log(r)}}function j(t,e,n,r){var i=!1;try{"function"==typeof e&&(i=!0,"rejectionHandled"===t?e(r):e(n,r))}catch(o){I.throwLater(o)}"unhandledRejection"===t?Y(t,n,r)||i||E(n,"Unhandled rejection "):Y(t,r)}function F(t){var e;if("function"==typeof t)e="[function "+(t.name||"anonymous")+"]";else{e=t&&"function"==typeof t.toString?t.toString():H.toString(t);var n=/\[object [a-zA-Z0-9$_]+\]/;if(n.test(e))try{var r=JSON.stringify(t);e=r}catch(i){}0===e.length&&(e="(empty array)")}return"(<"+T(e)+">, no stack trace)"}function T(t){var e=41;return t.lengtha||0>s||!n||!r||n!==r||a>=s||(tt=function(t){if(D.test(t))return!0;var e=P(t);return e&&e.fileName===n&&a<=e.line&&e.line<=s?!0:!1})}}function S(t){this._parent=t,this._promisesCreated=0;var e=this._length=1+(void 0===t?0:t._length);nt(this,S),e>32&&this.uncycle()}var x,A,N,L=e._getDomain,I=e._async,U=t("./errors").Warning,H=t("./util"),B=H.canAttachTrace,D=/[\\\/]bluebird[\\\/]js[\\\/](release|debug|instrumented)/,V=null,Q=null,q=!1,G=!(0==H.env("BLUEBIRD_DEBUG")||!H.env("BLUEBIRD_DEBUG")&&"development"!==H.env("NODE_ENV")),M=!(0==H.env("BLUEBIRD_WARNINGS")||!G&&!H.env("BLUEBIRD_WARNINGS")),W=!(0==H.env("BLUEBIRD_LONG_STACK_TRACES")||!G&&!H.env("BLUEBIRD_LONG_STACK_TRACES")),$=0!=H.env("BLUEBIRD_W_FORGOTTEN_RETURN")&&(M||!!H.env("BLUEBIRD_W_FORGOTTEN_RETURN"));e.prototype.suppressUnhandledRejections=function(){var t=this._target();t._bitField=-1048577&t._bitField|524288},e.prototype._ensurePossibleRejectionHandled=function(){0===(524288&this._bitField)&&(this._setRejectionIsUnhandled(),I.invokeLater(this._notifyUnhandledRejection,this,void 0))},e.prototype._notifyUnhandledRejectionIsHandled=function(){j("rejectionHandled",x,void 0,this)},e.prototype._setReturnedNonUndefined=function(){this._bitField=268435456|this._bitField},e.prototype._returnedNonUndefined=function(){return 0!==(268435456&this._bitField)},e.prototype._notifyUnhandledRejection=function(){if(this._isRejectionUnhandled()){var t=this._settledValue();this._setUnhandledRejectionIsNotified(),j("unhandledRejection",A,t,this)}},e.prototype._setUnhandledRejectionIsNotified=function(){this._bitField=262144|this._bitField},e.prototype._unsetUnhandledRejectionIsNotified=function(){this._bitField=-262145&this._bitField},e.prototype._isUnhandledRejectionNotified=function(){return(262144&this._bitField)>0},e.prototype._setRejectionIsUnhandled=function(){this._bitField=1048576|this._bitField},e.prototype._unsetRejectionIsUnhandled=function(){this._bitField=-1048577&this._bitField,this._isUnhandledRejectionNotified()&&(this._unsetUnhandledRejectionIsNotified(),this._notifyUnhandledRejectionIsHandled())},e.prototype._isRejectionUnhandled=function(){return(1048576&this._bitField)>0},e.prototype._warn=function(t,e,n){return y(t,e,n||this)},e.onPossiblyUnhandledRejection=function(t){var e=L();A="function"==typeof t?null===e?t:e.bind(t):void 0},e.onUnhandledRejectionHandled=function(t){var e=L();x="function"==typeof t?null===e?t:e.bind(t):void 0};var z=function(){};e.longStackTraces=function(){if(I.haveItemsQueued()&&!rt.longStackTraces)throw new Error("cannot enable long stack traces after promises have been created\n\n See http://goo.gl/MqrFmX\n");if(!rt.longStackTraces&&O()){var t=e.prototype._captureStackTrace,r=e.prototype._attachExtraTrace;rt.longStackTraces=!0,z=function(){if(I.haveItemsQueued()&&!rt.longStackTraces)throw new Error("cannot enable long stack traces after promises have been created\n\n See http://goo.gl/MqrFmX\n");e.prototype._captureStackTrace=t,e.prototype._attachExtraTrace=r,n.deactivateLongStackTraces(),I.enableTrampoline(),rt.longStackTraces=!1},e.prototype._captureStackTrace=h,e.prototype._attachExtraTrace=_,n.activateLongStackTraces(),I.disableTrampolineIfNecessary()}},e.hasLongStackTraces=function(){return rt.longStackTraces&&O()};var X=function(){try{var t=document.createEvent("CustomEvent");return t.initCustomEvent("testingtheevent",!1,!0,{}),H.global.dispatchEvent(t),function(t,e){var n=document.createEvent("CustomEvent");return n.initCustomEvent(t.toLowerCase(),!1,!0,e),!H.global.dispatchEvent(n)}}catch(e){}return function(){return!1}}(),K=function(){return H.isNode?function(){return process.emit.apply(process,arguments)}:H.global?function(t){var e="on"+t.toLowerCase(),n=H.global[e];return n?(n.apply(H.global,[].slice.call(arguments,1)),!0):!1}:function(){return!1}}(),J={promiseCreated:r,promiseFulfilled:r,promiseRejected:r,promiseResolved:r,promiseCancelled:r,promiseChained:function(t,e,n){return{promise:e,child:n}},warning:function(t,e){return{warning:e}},unhandledRejection:function(t,e,n){return{reason:e,promise:n}},rejectionHandled:r},Y=function(t){var e=!1;try{e=K.apply(null,arguments)}catch(n){I.throwLater(n),e=!0}var r=!1;try{r=X(t,J[t].apply(null,arguments))}catch(n){I.throwLater(n),r=!0}return r||e};e.config=function(t){if(t=Object(t),"longStackTraces"in t&&(t.longStackTraces?e.longStackTraces():!t.longStackTraces&&e.hasLongStackTraces()&&z()),"warnings"in t){var n=t.warnings;rt.warnings=!!n,$=rt.warnings,H.isObject(n)&&"wForgottenReturn"in n&&($=!!n.wForgottenReturn)}if("cancellation"in t&&t.cancellation&&!rt.cancellation){if(I.haveItemsQueued())throw new Error("cannot enable cancellation after promises are in use");e.prototype._clearCancellationData=l,e.prototype._propagateFrom=u,e.prototype._onCancel=s,e.prototype._setOnCancel=c,e.prototype._attachCancellationCallback=a,e.prototype._execute=o,Z=u,rt.cancellation=!0}"monitoring"in t&&(t.monitoring&&!rt.monitoring?(rt.monitoring=!0,e.prototype._fireEvent=Y):!t.monitoring&&rt.monitoring&&(rt.monitoring=!1,e.prototype._fireEvent=i))},e.prototype._fireEvent=i,e.prototype._execute=function(t,e,n){try{t(e,n)}catch(r){return r}},e.prototype._onCancel=function(){},e.prototype._setOnCancel=function(t){},e.prototype._attachCancellationCallback=function(t){},e.prototype._captureStackTrace=function(){},e.prototype._attachExtraTrace=function(){},e.prototype._clearCancellationData=function(){},e.prototype._propagateFrom=function(t,e){};var Z=p,tt=function(){return!1},et=/[\/<\(]([^:\/]+):(\d+):(?:\d+)\)?\s*$/;H.inherits(S,Error),n.CapturedTrace=S,S.prototype.uncycle=function(){var t=this._length;if(!(2>t)){for(var e=[],n={},r=0,i=this;void 0!==i;++r)e.push(i),i=i._parent;t=this._length=r;for(var r=t-1;r>=0;--r){var o=e[r].stack;void 0===n[o]&&(n[o]=r)}for(var r=0;t>r;++r){var a=e[r].stack,s=n[a];if(void 0!==s&&s!==r){s>0&&(e[s-1]._parent=void 0,e[s-1]._length=1),e[r]._parent=void 0,e[r]._length=1;var c=r>0?e[r-1]:this;t-1>s?(c._parent=e[s+1],c._parent.uncycle(),c._length=c._parent._length+1):(c._parent=void 0,c._length=1);for(var l=c._length+1,u=r-2;u>=0;--u)e[u]._length=l,l++;return}}}},S.prototype.attachExtraTrace=function(t){if(!t.__stackCleaned__){this.uncycle();for(var e=w(t),n=e.message,r=[e.stack],i=this;void 0!==i;)r.push(C(i.stack.split("\n"))),i=i._parent;b(r),m(r),H.notEnumerableProp(t,"stack",g(n,r)),H.notEnumerableProp(t,"__stackCleaned__",!0)}};var nt=function(){var t=/^\s*at\s*/,e=function(t,e){return"string"==typeof t?t:void 0!==e.name&&void 0!==e.message?e.toString():F(e)};if("number"==typeof Error.stackTraceLimit&&"function"==typeof Error.captureStackTrace){Error.stackTraceLimit+=6,V=t,Q=e;var n=Error.captureStackTrace;return tt=function(t){return D.test(t)},function(t,e){Error.stackTraceLimit+=6,n(t,e),Error.stackTraceLimit-=6}}var r=new Error;if("string"==typeof r.stack&&r.stack.split("\n")[0].indexOf("stackDetection@")>=0)return V=/@/,Q=e,q=!0,function(t){t.stack=(new Error).stack};var i;try{throw new Error}catch(o){i="stack"in o}return"stack"in r||!i||"number"!=typeof Error.stackTraceLimit?(Q=function(t,e){return"string"==typeof t?t:"object"!=typeof e&&"function"!=typeof e||void 0===e.name||void 0===e.message?F(e):e.toString()},null):(V=t,Q=e,function(t){Error.stackTraceLimit+=6;try{throw new Error}catch(e){t.stack=e.stack}Error.stackTraceLimit-=6})}([]);"undefined"!=typeof console&&"undefined"!=typeof console.warn&&(N=function(t){console.warn(t)},H.isNode&&process.stderr.isTTY?N=function(t,e){var n=e?"":"";console.warn(n+t+"\n")}:H.isNode||"string"!=typeof(new Error).stack||(N=function(t,e){console.warn("%c"+t,e?"color: darkorange":"color: red")}));var rt={warnings:M,longStackTraces:!1,cancellation:!1,monitoring:!1};return W&&e.longStackTraces(),{longStackTraces:function(){return rt.longStackTraces},warnings:function(){return rt.warnings},cancellation:function(){return rt.cancellation},monitoring:function(){return rt.monitoring},propagateFromFunction:function(){return Z},boundValueFunction:function(){return f},checkForgottenReturns:d,setBounds:R,warn:y,deprecated:v,CapturedTrace:S,fireDomEvent:X,fireGlobalEvent:K}}},{"./errors":9,"./util":21}],8:[function(t,e,n){"use strict";e.exports=function(t){function e(){return this.value}function n(){throw this.reason}t.prototype["return"]=t.prototype.thenReturn=function(n){return n instanceof t&&n.suppressUnhandledRejections(),this._then(e,void 0,void 0,{value:n},void 0)},t.prototype["throw"]=t.prototype.thenThrow=function(t){return this._then(n,void 0,void 0,{reason:t},void 0)},t.prototype.catchThrow=function(t){if(arguments.length<=1)return this._then(void 0,n,void 0,{reason:t},void 0);var e=arguments[1],r=function(){throw e};return this.caught(t,r)},t.prototype.catchReturn=function(n){if(arguments.length<=1)return n instanceof t&&n.suppressUnhandledRejections(),this._then(void 0,e,void 0,{value:n},void 0);var r=arguments[1];r instanceof t&&r.suppressUnhandledRejections();var i=function(){return r};return this.caught(n,i)}}},{}],9:[function(t,e,n){"use strict";function r(t,e){function n(r){return this instanceof n?(p(this,"message","string"==typeof r?r:e),p(this,"name",t),void(Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):Error.call(this))):new n(r)}return u(n,Error),n}function i(t){return this instanceof i?(p(this,"name","OperationalError"),p(this,"message",t),this.cause=t,this.isOperational=!0,void(t instanceof Error?(p(this,"message",t.message),p(this,"stack",t.stack)):Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor))):new i(t)}var o,a,s=t("./es5"),c=s.freeze,l=t("./util"),u=l.inherits,p=l.notEnumerableProp,f=r("Warning","warning"),h=r("CancellationError","cancellation error"),_=r("TimeoutError","timeout error"),d=r("AggregateError","aggregate error");try{o=TypeError,a=RangeError}catch(v){o=r("TypeError","type error"),a=r("RangeError","range error")}for(var y="join pop push shift unshift slice filter forEach some every map indexOf lastIndexOf reduce reduceRight sort reverse".split(" "),g=0;g1?t.cancelPromise._reject(e):t.cancelPromise._cancel(),t.cancelPromise=null,!0):!1}function a(){return c.call(this,this.promise._target()._settledValue())}function s(t){return o(this,t)?void 0:(p.e=t,p)}function c(t){var r=this.promise,c=this.handler;if(!this.called){this.called=!0;var l=this.isFinallyHandler()?c.call(r._boundValue()):c.call(r._boundValue(),t);if(void 0!==l){r._setReturnedNonUndefined();var f=n(l,r);if(f instanceof e){if(null!=this.cancelPromise){if(f.isCancelled()){var h=new u("late cancellation observer");return r._attachExtraTrace(h),p.e=h,p}f.isPending()&&f._attachCancellationCallback(new i(this))}return f._then(a,s,void 0,this,void 0)}}}return r.isRejected()?(o(this),p.e=t,p):(o(this),t)}var l=t("./util"),u=e.CancellationError,p=l.errorObj;return r.prototype.isFinallyHandler=function(){return 0===this.type},i.prototype._resultCancelled=function(){o(this.finallyHandler)},e.prototype._passThrough=function(t,e,n,i){return"function"!=typeof t?this.then():this._then(n,i,void 0,new r(this,e,t),void 0)},e.prototype.lastly=e.prototype["finally"]=function(t){return this._passThrough(t,0,c,c)},e.prototype.tap=function(t){return this._passThrough(t,1,c)},r}},{"./util":21}],12:[function(t,e,n){"use strict";e.exports=function(e,n,r,i){var o=t("./util");o.canEvaluate,o.tryCatch,o.errorObj;e.join=function(){var t,e=arguments.length-1;if(e>0&&"function"==typeof arguments[e]){t=arguments[e];var r}var i=[].slice.call(arguments);t&&i.pop();var r=new n(i).promise();return void 0!==t?r.spread(t):r}}},{"./util":21}],13:[function(t,e,n){"use strict";e.exports=function(e,n,r,i,o){var a=t("./util"),s=a.tryCatch;e.method=function(t){if("function"!=typeof t)throw new e.TypeError("expecting a function but got "+a.classString(t));return function(){var r=new e(n);r._captureStackTrace(),r._pushContext();var i=s(t).apply(this,arguments),a=r._popContext();return o.checkForgottenReturns(i,a,"Promise.method",r),r._resolveFromSyncValue(i),r}},e.attempt=e["try"]=function(t){if("function"!=typeof t)return i("expecting a function but got "+a.classString(t));var r=new e(n);r._captureStackTrace(),r._pushContext();var c;if(arguments.length>1){o.deprecated("calling Promise.try with more than 1 argument");var l=arguments[1],u=arguments[2];c=a.isArray(l)?s(t).apply(u,l):s(t).call(u,l)}else c=s(t)();var p=r._popContext();return o.checkForgottenReturns(c,p,"Promise.try",r),r._resolveFromSyncValue(c),r},e.prototype._resolveFromSyncValue=function(t){t===a.errorObj?this._rejectCallback(t.e,!1):this._resolveCallback(t,!0)}}},{"./util":21}],14:[function(t,e,n){"use strict";function r(t){return t instanceof Error&&u.getPrototypeOf(t)===Error.prototype}function i(t){var e;if(r(t)){e=new l(t),e.name=t.name,e.message=t.message,e.stack=t.stack;for(var n=u.keys(t),i=0;i1){var n,r=new Array(e-1),i=0;for(n=0;e-1>n;++n){var o=arguments[n];if(!f.isObject(o))return u("expecting an object but got "+f.classString(o));r[i++]=o}return r.length=i,t=arguments[n],this.then(void 0,T(r,t,this))}return this.then(void 0,t)},r.prototype.reflect=function(){return this._then(l,l,void 0,this,void 0)},r.prototype.then=function(t,e){if(j.warnings()&&arguments.length>0&&"function"!=typeof t&&"function"!=typeof e){var n=".then() only accepts functions but was passed: "+f.classString(t);arguments.length>1&&(n+=", "+f.classString(e)),this._warn(n)}return this._then(t,e,void 0,void 0,void 0)},r.prototype.done=function(t,e){var n=this._then(t,e,void 0,void 0,void 0);n._setIsFinal()},r.prototype.spread=function(t){return"function"!=typeof t?u("expecting a function but got "+f.classString(t)):this.all()._then(t,void 0,void 0,b,void 0)},r.prototype.toJSON=function(){var t={isFulfilled:!1,isRejected:!1,fulfillmentValue:void 0,rejectionReason:void 0};return this.isFulfilled()?(t.fulfillmentValue=this.value(),t.isFulfilled=!0):this.isRejected()&&(t.rejectionReason=this.reason(),t.isRejected=!0),t},r.prototype.all=function(){return arguments.length>0&&this._warn(".all() was passed arguments but it does not take any"),new w(this).promise()},r.prototype.error=function(t){return this.caught(f.originatesFromRejection,t)},r.is=function(t){return t instanceof r},r.fromNode=r.fromCallback=function(t){var e=new r(m);e._captureStackTrace();var n=arguments.length>1?!!Object(arguments[1]).multiArgs:!1,i=R(t)(O(e,n));return i===P&&e._rejectCallback(i.e,!0),e._isFateSealed()||e._setAsyncGuaranteed(),e},r.all=function(t){return new w(t).promise()},r.cast=function(t){var e=k(t);return e instanceof r||(e=new r(m),e._captureStackTrace(),e._setFulfilled(),e._rejectionHandler0=t),e},r.resolve=r.fulfilled=r.cast,r.reject=r.rejected=function(t){var e=new r(m);return e._captureStackTrace(),e._rejectCallback(t,!0),e},r.setScheduler=function(t){if("function"!=typeof t)throw new y("expecting a function but got "+f.classString(t));return d.setScheduler(t)},r.prototype._then=function(t,e,n,i,o){var a=void 0!==o,c=a?o:new r(m),l=this._target(),u=l._bitField;a||(c._propagateFrom(this,3), +c._captureStackTrace(),void 0===i&&0!==(2097152&this._bitField)&&(i=0!==(50397184&u)?this._boundValue():l===this?void 0:this._boundTo),this._fireEvent("promiseChained",this,c));var p=s();if(0!==(50397184&u)){var f,h,_=l._settlePromiseCtx;0!==(33554432&u)?(h=l._rejectionHandler0,f=t):0!==(16777216&u)?(h=l._fulfillmentHandler0,f=e,l._unsetRejectionIsUnhandled()):(_=l._settlePromiseLateCancellationObserver,h=new g("late cancellation observer"),l._attachExtraTrace(h),f=e),d.invoke(_,l,{handler:null===p?f:"function"==typeof f&&p.bind(f),promise:c,receiver:i,value:h})}else l._addCallbacks(t,e,c,i,p);return c},r.prototype._length=function(){return 65535&this._bitField},r.prototype._isFateSealed=function(){return 0!==(117506048&this._bitField)},r.prototype._isFollowing=function(){return 67108864===(67108864&this._bitField)},r.prototype._setLength=function(t){this._bitField=-65536&this._bitField|65535&t},r.prototype._setFulfilled=function(){this._bitField=33554432|this._bitField,this._fireEvent("promiseFulfilled",this)},r.prototype._setRejected=function(){this._bitField=16777216|this._bitField,this._fireEvent("promiseRejected",this)},r.prototype._setFollowing=function(){this._bitField=67108864|this._bitField,this._fireEvent("promiseResolved",this)},r.prototype._setIsFinal=function(){this._bitField=4194304|this._bitField},r.prototype._isFinal=function(){return(4194304&this._bitField)>0},r.prototype._unsetCancelled=function(){this._bitField=-65537&this._bitField},r.prototype._setCancelled=function(){this._bitField=65536|this._bitField,this._fireEvent("promiseCancelled",this)},r.prototype._setAsyncGuaranteed=function(){d.hasCustomScheduler()||(this._bitField=134217728|this._bitField)},r.prototype._receiverAt=function(t){var e=0===t?this._receiver0:this[4*t-4+3];return e===p?void 0:void 0===e&&this._isBound()?this._boundValue():e},r.prototype._promiseAt=function(t){return this[4*t-4+2]},r.prototype._fulfillmentHandlerAt=function(t){return this[4*t-4+0]},r.prototype._rejectionHandlerAt=function(t){return this[4*t-4+1]},r.prototype._boundValue=function(){},r.prototype._migrateCallback0=function(t){var e=(t._bitField,t._fulfillmentHandler0),n=t._rejectionHandler0,r=t._promise0,i=t._receiverAt(0);void 0===i&&(i=p),this._addCallbacks(e,n,r,i,null)},r.prototype._migrateCallbackAt=function(t,e){var n=t._fulfillmentHandlerAt(e),r=t._rejectionHandlerAt(e),i=t._promiseAt(e),o=t._receiverAt(e);void 0===o&&(o=p),this._addCallbacks(n,r,i,o,null)},r.prototype._addCallbacks=function(t,e,n,r,i){var o=this._length();if(o>=65531&&(o=0,this._setLength(0)),0===o)this._promise0=n,this._receiver0=r,"function"==typeof t&&(this._fulfillmentHandler0=null===i?t:i.bind(t)),"function"==typeof e&&(this._rejectionHandler0=null===i?e:i.bind(e));else{var a=4*o-4;this[a+2]=n,this[a+3]=r,"function"==typeof t&&(this[a+0]=null===i?t:i.bind(t)),"function"==typeof e&&(this[a+1]=null===i?e:i.bind(e))}return this._setLength(o+1),o},r.prototype._proxy=function(t,e){this._addCallbacks(void 0,void 0,e,t,null)},r.prototype._resolveCallback=function(t,e){if(0===(117506048&this._bitField)){if(t===this)return this._rejectCallback(c(),!1);var n=k(t,this);if(!(n instanceof r))return this._fulfill(t);e&&this._propagateFrom(n,2);var i=n._target();if(i===this)return void this._reject(c());var o=i._bitField;if(0===(50397184&o)){var a=this._length();a>0&&i._migrateCallback0(this);for(var s=1;a>s;++s)i._migrateCallbackAt(this,s);this._setFollowing(),this._setLength(0),this._setFollowee(i)}else if(0!==(33554432&o))this._fulfill(i._value());else if(0!==(16777216&o))this._reject(i._reason());else{var l=new g("late cancellation observer");i._attachExtraTrace(l),this._reject(l)}}},r.prototype._rejectCallback=function(t,e,n){var r=f.ensureErrorObject(t),i=r===t;if(!i&&!n&&j.warnings()){var o="a promise was rejected with a non-error: "+f.classString(t);this._warn(o,!0)}this._attachExtraTrace(r,e?i:!1),this._reject(t)},r.prototype._resolveFromExecutor=function(t){var e=this;this._captureStackTrace(),this._pushContext();var n=!0,r=this._execute(t,function(t){e._resolveCallback(t)},function(t){e._rejectCallback(t,n)});n=!1,this._popContext(),void 0!==r&&e._rejectCallback(r,!0)},r.prototype._settlePromiseFromHandler=function(t,e,n,r){var i=r._bitField;if(0===(65536&i)){r._pushContext();var o;e===b?n&&"number"==typeof n.length?o=R(t).apply(this._boundValue(),n):(o=P,o.e=new y("cannot .spread() a non-array: "+f.classString(n))):o=R(t).call(e,n);var a=r._popContext();i=r._bitField,0===(65536&i)&&(o===C?r._reject(n):o===P?r._rejectCallback(o.e,!1):(j.checkForgottenReturns(o,a,"",r,this),r._resolveCallback(o)))}},r.prototype._target=function(){for(var t=this;t._isFollowing();)t=t._followee();return t},r.prototype._followee=function(){return this._rejectionHandler0},r.prototype._setFollowee=function(t){this._rejectionHandler0=t},r.prototype._settlePromise=function(t,n,i,o){var a=t instanceof r,s=this._bitField,c=0!==(134217728&s);0!==(65536&s)?(a&&t._invokeInternalOnCancel(),i instanceof F&&i.isFinallyHandler()?(i.cancelPromise=t,R(n).call(i,o)===P&&t._reject(P.e)):n===l?t._fulfill(l.call(i)):i instanceof e?i._promiseCancelled(t):a||t instanceof w?t._cancel():i.cancel()):"function"==typeof n?a?(c&&t._setAsyncGuaranteed(),this._settlePromiseFromHandler(n,i,o,t)):n.call(i,o,t):i instanceof e?i._isResolved()||(0!==(33554432&s)?i._promiseFulfilled(o,t):i._promiseRejected(o,t)):a&&(c&&t._setAsyncGuaranteed(),0!==(33554432&s)?t._fulfill(o):t._reject(o))},r.prototype._settlePromiseLateCancellationObserver=function(t){var e=t.handler,n=t.promise,i=t.receiver,o=t.value;"function"==typeof e?n instanceof r?this._settlePromiseFromHandler(e,i,o,n):e.call(i,o,n):n instanceof r&&n._reject(o)},r.prototype._settlePromiseCtx=function(t){this._settlePromise(t.promise,t.handler,t.receiver,t.value)},r.prototype._settlePromise0=function(t,e,n){var r=this._promise0,i=this._receiverAt(0);this._promise0=void 0,this._receiver0=void 0,this._settlePromise(r,t,i,e)},r.prototype._clearCallbackDataAtIndex=function(t){var e=4*t-4;this[e+2]=this[e+3]=this[e+0]=this[e+1]=void 0},r.prototype._fulfill=function(t){var e=this._bitField;if(!((117506048&e)>>>16)){if(t===this){var n=c();return this._attachExtraTrace(n),this._reject(n)}this._setFulfilled(),this._rejectionHandler0=t,(65535&e)>0&&(0!==(134217728&e)?this._settlePromises():d.settlePromises(this))}},r.prototype._reject=function(t){var e=this._bitField;if(!((117506048&e)>>>16))return this._setRejected(),this._fulfillmentHandler0=t,this._isFinal()?d.fatalError(t,f.isNode):void((65535&e)>0?d.settlePromises(this):this._ensurePossibleRejectionHandled())},r.prototype._fulfillPromises=function(t,e){for(var n=1;t>n;n++){var r=this._fulfillmentHandlerAt(n),i=this._promiseAt(n),o=this._receiverAt(n);this._clearCallbackDataAtIndex(n),this._settlePromise(i,r,o,e)}},r.prototype._rejectPromises=function(t,e){for(var n=1;t>n;n++){var r=this._rejectionHandlerAt(n),i=this._promiseAt(n),o=this._receiverAt(n);this._clearCallbackDataAtIndex(n),this._settlePromise(i,r,o,e)}},r.prototype._settlePromises=function(){var t=this._bitField,e=65535&t;if(e>0){if(0!==(16842752&t)){var n=this._fulfillmentHandler0;this._settlePromise0(this._rejectionHandler0,n,t),this._rejectPromises(e,n)}else{var r=this._rejectionHandler0;this._settlePromise0(this._fulfillmentHandler0,r,t),this._fulfillPromises(e,r)}this._setLength(0)}this._clearCancellationData()},r.prototype._settledValue=function(){var t=this._bitField;return 0!==(33554432&t)?this._rejectionHandler0:0!==(16777216&t)?this._fulfillmentHandler0:void 0},r.defer=r.pending=function(){j.deprecated("Promise.defer","new Promise");var t=new r(m);return{promise:t,resolve:i,reject:o}},f.notEnumerableProp(r,"_makeSelfResolutionError",c),t("./method")(r,m,k,u,j),t("./bind")(r,m,k,j),t("./cancel")(r,w,u,j),t("./direct_resolve")(r),t("./synchronous_inspection")(r),t("./join")(r,w,k,m,j),r.Promise=r,r.version="3.4.0",f.toFastProperties(r),f.toFastProperties(r.prototype),a({a:1}),a({b:2}),a({c:3}),a(1),a(function(){}),a(void 0),a(!1),a(new r(m)),j.setBounds(_.firstLineError,f.lastLineError),r}},{"./async":1,"./bind":2,"./cancel":4,"./catch_filter":5,"./context":6,"./debuggability":7,"./direct_resolve":8,"./errors":9,"./es5":10,"./finally":11,"./join":12,"./method":13,"./nodeback":14,"./promise_array":16,"./synchronous_inspection":19,"./thenables":20,"./util":21}],16:[function(t,e,n){"use strict";e.exports=function(e,n,r,i,o){function a(t){switch(t){case-2:return[];case-3:return{}}}function s(t){var r=this._promise=new e(n);t instanceof e&&r._propagateFrom(t,3),r._setOnCancel(this),this._values=t,this._length=0,this._totalResolved=0,this._init(void 0,-2)}var c=t("./util");c.isArray;return c.inherits(s,o),s.prototype.length=function(){return this._length},s.prototype.promise=function(){return this._promise},s.prototype._init=function l(t,n){var o=r(this._values,this._promise);if(o instanceof e){o=o._target();var s=o._bitField;if(this._values=o,0===(50397184&s))return this._promise._setAsyncGuaranteed(),o._then(l,this._reject,void 0,this,n);if(0===(33554432&s))return 0!==(16777216&s)?this._reject(o._reason()):this._cancel();o=o._value()}if(o=c.asArray(o),null===o){var u=i("expecting an array or an iterable object but got "+c.classString(o)).reason();return void this._promise._rejectCallback(u,!1)}return 0===o.length?void(-5===n?this._resolveEmptyArray():this._resolve(a(n))):void this._iterate(o)},s.prototype._iterate=function(t){var n=this.getActualLength(t.length);this._length=n,this._values=this.shouldCopyValues()?new Array(n):this._values;for(var i=this._promise,o=!1,a=null,s=0;n>s;++s){var c=r(t[s],i);c instanceof e?(c=c._target(),a=c._bitField):a=null,o?null!==a&&c.suppressUnhandledRejections():null!==a?0===(50397184&a)?(c._proxy(this,s),this._values[s]=c):o=0!==(33554432&a)?this._promiseFulfilled(c._value(),s):0!==(16777216&a)?this._promiseRejected(c._reason(),s):this._promiseCancelled(s):o=this._promiseFulfilled(c,s)}o||i._setAsyncGuaranteed()},s.prototype._isResolved=function(){return null===this._values},s.prototype._resolve=function(t){this._values=null,this._promise._fulfill(t)},s.prototype._cancel=function(){!this._isResolved()&&this._promise.isCancellable()&&(this._values=null,this._promise._cancel())},s.prototype._reject=function(t){this._values=null,this._promise._rejectCallback(t,!1)},s.prototype._promiseFulfilled=function(t,e){this._values[e]=t;var n=++this._totalResolved;return n>=this._length?(this._resolve(this._values),!0):!1},s.prototype._promiseCancelled=function(){return this._cancel(),!0},s.prototype._promiseRejected=function(t){return this._totalResolved++,this._reject(t),!0},s.prototype._resultCancelled=function(){if(!this._isResolved()){var t=this._values;if(this._cancel(),t instanceof e)t.cancel();else for(var n=0;no;++o)n[o+r]=t[o+e],t[o+e]=void 0}function i(t){this._capacity=t,this._length=0,this._front=0}i.prototype._willBeOverCapacity=function(t){return this._capacityn;++n)i[n]=t[n];return i[n]=e,i}function l(t,e,n){if(!j.isES5)return{}.hasOwnProperty.call(t,e)?t[e]:void 0;var r=Object.getOwnPropertyDescriptor(t,e);return null!=r?null==r.get&&null==r.set?r.value:n:void 0}function u(t,e,n){if(o(t))return t;var r={value:n,configurable:!0,enumerable:!1,writable:!0};return j.defineProperty(t,e,r),t}function p(t){throw t}function f(t){try{if("function"==typeof t){var e=j.names(t.prototype),n=j.isES5&&e.length>1,r=e.length>0&&!(1===e.length&&"constructor"===e[0]),i=x.test(t+"")&&j.names(t).length>0;if(n||r||i)return!0}return!1}catch(o){return!1}}function h(t){function e(){}e.prototype=t;for(var n=8;n--;)new e;return t}function _(t){return A.test(t)}function d(t,e,n){for(var r=new Array(t),i=0;t>i;++i)r[i]=e+i+n;return r}function v(t){try{return t+""}catch(e){return"[no string representation]"}}function y(t){return null!==t&&"object"==typeof t&&"string"==typeof t.message&&"string"==typeof t.name}function g(t){try{u(t,"isOperational",!0)}catch(e){}}function m(t){return null==t?!1:t instanceof Error.__BluebirdErrorTypes__.OperationalError||t.isOperational===!0}function b(t){return y(t)&&j.propertyIsWritable(t,"stack")}function C(t){return{}.toString.call(t)}function k(t,e,n){for(var r=j.names(t),i=0;i10||t[0]>0}(),H.isNode&&H.toFastProperties(process);try{throw new Error}catch(B){H.lastLineError=B}e.exports=H},{"./es5":10}]},{},[3])(3)}),"undefined"!=typeof window&&null!==window?window.P=window.Promise:"undefined"!=typeof self&&null!==self&&(self.P=self.Promise); \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/js/browser/bluebird.js b/platforms/android/assets/www/libs/bluebird/js/browser/bluebird.js new file mode 100644 index 0000000..e88de46 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/js/browser/bluebird.js @@ -0,0 +1,5474 @@ +/* @preserve + * The MIT License (MIT) + * + * Copyright (c) 2013-2015 Petka Antonov + * + * 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. + * + */ +/** + * bluebird build version 3.4.0 + * Features enabled: core, race, call_get, generators, map, nodeify, promisify, props, reduce, settle, some, using, timers, filter, any, each +*/ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.Promise=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof _dereq_=="function"&&_dereq_;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof _dereq_=="function"&&_dereq_;for(var o=0;o 0) { + var fn = queue.shift(); + if (typeof fn !== "function") { + fn._settlePromises(); + continue; + } + var receiver = queue.shift(); + var arg = queue.shift(); + fn.call(receiver, arg); + } +}; + +Async.prototype._drainQueues = function () { + this._drainQueue(this._normalQueue); + this._reset(); + this._haveDrainedQueues = true; + this._drainQueue(this._lateQueue); +}; + +Async.prototype._queueTick = function () { + if (!this._isTickUsed) { + this._isTickUsed = true; + this._schedule(this.drainQueues); + } +}; + +Async.prototype._reset = function () { + this._isTickUsed = false; +}; + +module.exports = Async; +module.exports.firstLineError = firstLineError; + +},{"./queue":26,"./schedule":29,"./util":36}],3:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, INTERNAL, tryConvertToPromise, debug) { +var calledBind = false; +var rejectThis = function(_, e) { + this._reject(e); +}; + +var targetRejected = function(e, context) { + context.promiseRejectionQueued = true; + context.bindingPromise._then(rejectThis, rejectThis, null, this, e); +}; + +var bindingResolved = function(thisArg, context) { + if (((this._bitField & 50397184) === 0)) { + this._resolveCallback(context.target); + } +}; + +var bindingRejected = function(e, context) { + if (!context.promiseRejectionQueued) this._reject(e); +}; + +Promise.prototype.bind = function (thisArg) { + if (!calledBind) { + calledBind = true; + Promise.prototype._propagateFrom = debug.propagateFromFunction(); + Promise.prototype._boundValue = debug.boundValueFunction(); + } + var maybePromise = tryConvertToPromise(thisArg); + var ret = new Promise(INTERNAL); + ret._propagateFrom(this, 1); + var target = this._target(); + ret._setBoundTo(maybePromise); + if (maybePromise instanceof Promise) { + var context = { + promiseRejectionQueued: false, + promise: ret, + target: target, + bindingPromise: maybePromise + }; + target._then(INTERNAL, targetRejected, undefined, ret, context); + maybePromise._then( + bindingResolved, bindingRejected, undefined, ret, context); + ret._setOnCancel(maybePromise); + } else { + ret._resolveCallback(target); + } + return ret; +}; + +Promise.prototype._setBoundTo = function (obj) { + if (obj !== undefined) { + this._bitField = this._bitField | 2097152; + this._boundTo = obj; + } else { + this._bitField = this._bitField & (~2097152); + } +}; + +Promise.prototype._isBound = function () { + return (this._bitField & 2097152) === 2097152; +}; + +Promise.bind = function (thisArg, value) { + return Promise.resolve(value).bind(thisArg); +}; +}; + +},{}],4:[function(_dereq_,module,exports){ +"use strict"; +var old; +if (typeof Promise !== "undefined") old = Promise; +function noConflict() { + try { if (Promise === bluebird) Promise = old; } + catch (e) {} + return bluebird; +} +var bluebird = _dereq_("./promise")(); +bluebird.noConflict = noConflict; +module.exports = bluebird; + +},{"./promise":22}],5:[function(_dereq_,module,exports){ +"use strict"; +var cr = Object.create; +if (cr) { + var callerCache = cr(null); + var getterCache = cr(null); + callerCache[" size"] = getterCache[" size"] = 0; +} + +module.exports = function(Promise) { +var util = _dereq_("./util"); +var canEvaluate = util.canEvaluate; +var isIdentifier = util.isIdentifier; + +var getMethodCaller; +var getGetter; +if (!true) { +var makeMethodCaller = function (methodName) { + return new Function("ensureMethod", " \n\ + return function(obj) { \n\ + 'use strict' \n\ + var len = this.length; \n\ + ensureMethod(obj, 'methodName'); \n\ + switch(len) { \n\ + case 1: return obj.methodName(this[0]); \n\ + case 2: return obj.methodName(this[0], this[1]); \n\ + case 3: return obj.methodName(this[0], this[1], this[2]); \n\ + case 0: return obj.methodName(); \n\ + default: \n\ + return obj.methodName.apply(obj, this); \n\ + } \n\ + }; \n\ + ".replace(/methodName/g, methodName))(ensureMethod); +}; + +var makeGetter = function (propertyName) { + return new Function("obj", " \n\ + 'use strict'; \n\ + return obj.propertyName; \n\ + ".replace("propertyName", propertyName)); +}; + +var getCompiled = function(name, compiler, cache) { + var ret = cache[name]; + if (typeof ret !== "function") { + if (!isIdentifier(name)) { + return null; + } + ret = compiler(name); + cache[name] = ret; + cache[" size"]++; + if (cache[" size"] > 512) { + var keys = Object.keys(cache); + for (var i = 0; i < 256; ++i) delete cache[keys[i]]; + cache[" size"] = keys.length - 256; + } + } + return ret; +}; + +getMethodCaller = function(name) { + return getCompiled(name, makeMethodCaller, callerCache); +}; + +getGetter = function(name) { + return getCompiled(name, makeGetter, getterCache); +}; +} + +function ensureMethod(obj, methodName) { + var fn; + if (obj != null) fn = obj[methodName]; + if (typeof fn !== "function") { + var message = "Object " + util.classString(obj) + " has no method '" + + util.toString(methodName) + "'"; + throw new Promise.TypeError(message); + } + return fn; +} + +function caller(obj) { + var methodName = this.pop(); + var fn = ensureMethod(obj, methodName); + return fn.apply(obj, this); +} +Promise.prototype.call = function (methodName) { + var args = [].slice.call(arguments, 1);; + if (!true) { + if (canEvaluate) { + var maybeCaller = getMethodCaller(methodName); + if (maybeCaller !== null) { + return this._then( + maybeCaller, undefined, undefined, args, undefined); + } + } + } + args.push(methodName); + return this._then(caller, undefined, undefined, args, undefined); +}; + +function namedGetter(obj) { + return obj[this]; +} +function indexedGetter(obj) { + var index = +this; + if (index < 0) index = Math.max(0, index + obj.length); + return obj[index]; +} +Promise.prototype.get = function (propertyName) { + var isIndex = (typeof propertyName === "number"); + var getter; + if (!isIndex) { + if (canEvaluate) { + var maybeGetter = getGetter(propertyName); + getter = maybeGetter !== null ? maybeGetter : namedGetter; + } else { + getter = namedGetter; + } + } else { + getter = indexedGetter; + } + return this._then(getter, undefined, undefined, propertyName, undefined); +}; +}; + +},{"./util":36}],6:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, PromiseArray, apiRejection, debug) { +var util = _dereq_("./util"); +var tryCatch = util.tryCatch; +var errorObj = util.errorObj; +var async = Promise._async; + +Promise.prototype["break"] = Promise.prototype.cancel = function() { + if (!debug.cancellation()) return this._warn("cancellation is disabled"); + + var promise = this; + var child = promise; + while (promise.isCancellable()) { + if (!promise._cancelBy(child)) { + if (child._isFollowing()) { + child._followee().cancel(); + } else { + child._cancelBranched(); + } + break; + } + + var parent = promise._cancellationParent; + if (parent == null || !parent.isCancellable()) { + if (promise._isFollowing()) { + promise._followee().cancel(); + } else { + promise._cancelBranched(); + } + break; + } else { + if (promise._isFollowing()) promise._followee().cancel(); + child = promise; + promise = parent; + } + } +}; + +Promise.prototype._branchHasCancelled = function() { + this._branchesRemainingToCancel--; +}; + +Promise.prototype._enoughBranchesHaveCancelled = function() { + return this._branchesRemainingToCancel === undefined || + this._branchesRemainingToCancel <= 0; +}; + +Promise.prototype._cancelBy = function(canceller) { + if (canceller === this) { + this._branchesRemainingToCancel = 0; + this._invokeOnCancel(); + return true; + } else { + this._branchHasCancelled(); + if (this._enoughBranchesHaveCancelled()) { + this._invokeOnCancel(); + return true; + } + } + return false; +}; + +Promise.prototype._cancelBranched = function() { + if (this._enoughBranchesHaveCancelled()) { + this._cancel(); + } +}; + +Promise.prototype._cancel = function() { + if (!this.isCancellable()) return; + + this._setCancelled(); + async.invoke(this._cancelPromises, this, undefined); +}; + +Promise.prototype._cancelPromises = function() { + if (this._length() > 0) this._settlePromises(); +}; + +Promise.prototype._unsetOnCancel = function() { + this._onCancelField = undefined; +}; + +Promise.prototype.isCancellable = function() { + return this.isPending() && !this.isCancelled(); +}; + +Promise.prototype._doInvokeOnCancel = function(onCancelCallback, internalOnly) { + if (util.isArray(onCancelCallback)) { + for (var i = 0; i < onCancelCallback.length; ++i) { + this._doInvokeOnCancel(onCancelCallback[i], internalOnly); + } + } else if (onCancelCallback !== undefined) { + if (typeof onCancelCallback === "function") { + if (!internalOnly) { + var e = tryCatch(onCancelCallback).call(this._boundValue()); + if (e === errorObj) { + this._attachExtraTrace(e.e); + async.throwLater(e.e); + } + } + } else { + onCancelCallback._resultCancelled(this); + } + } +}; + +Promise.prototype._invokeOnCancel = function() { + var onCancelCallback = this._onCancel(); + this._unsetOnCancel(); + async.invoke(this._doInvokeOnCancel, this, onCancelCallback); +}; + +Promise.prototype._invokeInternalOnCancel = function() { + if (this.isCancellable()) { + this._doInvokeOnCancel(this._onCancel(), true); + this._unsetOnCancel(); + } +}; + +Promise.prototype._resultCancelled = function() { + this.cancel(); +}; + +}; + +},{"./util":36}],7:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(NEXT_FILTER) { +var util = _dereq_("./util"); +var getKeys = _dereq_("./es5").keys; +var tryCatch = util.tryCatch; +var errorObj = util.errorObj; + +function catchFilter(instances, cb, promise) { + return function(e) { + var boundTo = promise._boundValue(); + predicateLoop: for (var i = 0; i < instances.length; ++i) { + var item = instances[i]; + + if (item === Error || + (item != null && item.prototype instanceof Error)) { + if (e instanceof item) { + return tryCatch(cb).call(boundTo, e); + } + } else if (typeof item === "function") { + var matchesPredicate = tryCatch(item).call(boundTo, e); + if (matchesPredicate === errorObj) { + return matchesPredicate; + } else if (matchesPredicate) { + return tryCatch(cb).call(boundTo, e); + } + } else if (util.isObject(e)) { + var keys = getKeys(item); + for (var j = 0; j < keys.length; ++j) { + var key = keys[j]; + if (item[key] != e[key]) { + continue predicateLoop; + } + } + return tryCatch(cb).call(boundTo, e); + } + } + return NEXT_FILTER; + }; +} + +return catchFilter; +}; + +},{"./es5":13,"./util":36}],8:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise) { +var longStackTraces = false; +var contextStack = []; + +Promise.prototype._promiseCreated = function() {}; +Promise.prototype._pushContext = function() {}; +Promise.prototype._popContext = function() {return null;}; +Promise._peekContext = Promise.prototype._peekContext = function() {}; + +function Context() { + this._trace = new Context.CapturedTrace(peekContext()); +} +Context.prototype._pushContext = function () { + if (this._trace !== undefined) { + this._trace._promiseCreated = null; + contextStack.push(this._trace); + } +}; + +Context.prototype._popContext = function () { + if (this._trace !== undefined) { + var trace = contextStack.pop(); + var ret = trace._promiseCreated; + trace._promiseCreated = null; + return ret; + } + return null; +}; + +function createContext() { + if (longStackTraces) return new Context(); +} + +function peekContext() { + var lastIndex = contextStack.length - 1; + if (lastIndex >= 0) { + return contextStack[lastIndex]; + } + return undefined; +} +Context.CapturedTrace = null; +Context.create = createContext; +Context.deactivateLongStackTraces = function() {}; +Context.activateLongStackTraces = function() { + var Promise_pushContext = Promise.prototype._pushContext; + var Promise_popContext = Promise.prototype._popContext; + var Promise_PeekContext = Promise._peekContext; + var Promise_peekContext = Promise.prototype._peekContext; + var Promise_promiseCreated = Promise.prototype._promiseCreated; + Context.deactivateLongStackTraces = function() { + Promise.prototype._pushContext = Promise_pushContext; + Promise.prototype._popContext = Promise_popContext; + Promise._peekContext = Promise_PeekContext; + Promise.prototype._peekContext = Promise_peekContext; + Promise.prototype._promiseCreated = Promise_promiseCreated; + longStackTraces = false; + }; + longStackTraces = true; + Promise.prototype._pushContext = Context.prototype._pushContext; + Promise.prototype._popContext = Context.prototype._popContext; + Promise._peekContext = Promise.prototype._peekContext = peekContext; + Promise.prototype._promiseCreated = function() { + var ctx = this._peekContext(); + if (ctx && ctx._promiseCreated == null) ctx._promiseCreated = this; + }; +}; +return Context; +}; + +},{}],9:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, Context) { +var getDomain = Promise._getDomain; +var async = Promise._async; +var Warning = _dereq_("./errors").Warning; +var util = _dereq_("./util"); +var canAttachTrace = util.canAttachTrace; +var unhandledRejectionHandled; +var possiblyUnhandledRejection; +var bluebirdFramePattern = + /[\\\/]bluebird[\\\/]js[\\\/](release|debug|instrumented)/; +var stackFramePattern = null; +var formatStack = null; +var indentStackFrames = false; +var printWarning; +var debugging = !!(util.env("BLUEBIRD_DEBUG") != 0 && + (true || + util.env("BLUEBIRD_DEBUG") || + util.env("NODE_ENV") === "development")); + +var warnings = !!(util.env("BLUEBIRD_WARNINGS") != 0 && + (debugging || util.env("BLUEBIRD_WARNINGS"))); + +var longStackTraces = !!(util.env("BLUEBIRD_LONG_STACK_TRACES") != 0 && + (debugging || util.env("BLUEBIRD_LONG_STACK_TRACES"))); + +var wForgottenReturn = util.env("BLUEBIRD_W_FORGOTTEN_RETURN") != 0 && + (warnings || !!util.env("BLUEBIRD_W_FORGOTTEN_RETURN")); + +Promise.prototype.suppressUnhandledRejections = function() { + var target = this._target(); + target._bitField = ((target._bitField & (~1048576)) | + 524288); +}; + +Promise.prototype._ensurePossibleRejectionHandled = function () { + if ((this._bitField & 524288) !== 0) return; + this._setRejectionIsUnhandled(); + async.invokeLater(this._notifyUnhandledRejection, this, undefined); +}; + +Promise.prototype._notifyUnhandledRejectionIsHandled = function () { + fireRejectionEvent("rejectionHandled", + unhandledRejectionHandled, undefined, this); +}; + +Promise.prototype._setReturnedNonUndefined = function() { + this._bitField = this._bitField | 268435456; +}; + +Promise.prototype._returnedNonUndefined = function() { + return (this._bitField & 268435456) !== 0; +}; + +Promise.prototype._notifyUnhandledRejection = function () { + if (this._isRejectionUnhandled()) { + var reason = this._settledValue(); + this._setUnhandledRejectionIsNotified(); + fireRejectionEvent("unhandledRejection", + possiblyUnhandledRejection, reason, this); + } +}; + +Promise.prototype._setUnhandledRejectionIsNotified = function () { + this._bitField = this._bitField | 262144; +}; + +Promise.prototype._unsetUnhandledRejectionIsNotified = function () { + this._bitField = this._bitField & (~262144); +}; + +Promise.prototype._isUnhandledRejectionNotified = function () { + return (this._bitField & 262144) > 0; +}; + +Promise.prototype._setRejectionIsUnhandled = function () { + this._bitField = this._bitField | 1048576; +}; + +Promise.prototype._unsetRejectionIsUnhandled = function () { + this._bitField = this._bitField & (~1048576); + if (this._isUnhandledRejectionNotified()) { + this._unsetUnhandledRejectionIsNotified(); + this._notifyUnhandledRejectionIsHandled(); + } +}; + +Promise.prototype._isRejectionUnhandled = function () { + return (this._bitField & 1048576) > 0; +}; + +Promise.prototype._warn = function(message, shouldUseOwnTrace, promise) { + return warn(message, shouldUseOwnTrace, promise || this); +}; + +Promise.onPossiblyUnhandledRejection = function (fn) { + var domain = getDomain(); + possiblyUnhandledRejection = + typeof fn === "function" ? (domain === null ? fn : domain.bind(fn)) + : undefined; +}; + +Promise.onUnhandledRejectionHandled = function (fn) { + var domain = getDomain(); + unhandledRejectionHandled = + typeof fn === "function" ? (domain === null ? fn : domain.bind(fn)) + : undefined; +}; + +var disableLongStackTraces = function() {}; +Promise.longStackTraces = function () { + if (async.haveItemsQueued() && !config.longStackTraces) { + throw new Error("cannot enable long stack traces after promises have been created\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + if (!config.longStackTraces && longStackTracesIsSupported()) { + var Promise_captureStackTrace = Promise.prototype._captureStackTrace; + var Promise_attachExtraTrace = Promise.prototype._attachExtraTrace; + config.longStackTraces = true; + disableLongStackTraces = function() { + if (async.haveItemsQueued() && !config.longStackTraces) { + throw new Error("cannot enable long stack traces after promises have been created\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + Promise.prototype._captureStackTrace = Promise_captureStackTrace; + Promise.prototype._attachExtraTrace = Promise_attachExtraTrace; + Context.deactivateLongStackTraces(); + async.enableTrampoline(); + config.longStackTraces = false; + }; + Promise.prototype._captureStackTrace = longStackTracesCaptureStackTrace; + Promise.prototype._attachExtraTrace = longStackTracesAttachExtraTrace; + Context.activateLongStackTraces(); + async.disableTrampolineIfNecessary(); + } +}; + +Promise.hasLongStackTraces = function () { + return config.longStackTraces && longStackTracesIsSupported(); +}; + +var fireDomEvent = (function() { + try { + var event = document.createEvent("CustomEvent"); + event.initCustomEvent("testingtheevent", false, true, {}); + util.global.dispatchEvent(event); + return function(name, event) { + var domEvent = document.createEvent("CustomEvent"); + domEvent.initCustomEvent(name.toLowerCase(), false, true, event); + return !util.global.dispatchEvent(domEvent); + }; + } catch (e) {} + return function() { + return false; + }; +})(); + +var fireGlobalEvent = (function() { + if (util.isNode) { + return function() { + return process.emit.apply(process, arguments); + }; + } else { + if (!util.global) { + return function() { + return false; + }; + } + return function(name) { + var methodName = "on" + name.toLowerCase(); + var method = util.global[methodName]; + if (!method) return false; + method.apply(util.global, [].slice.call(arguments, 1)); + return true; + }; + } +})(); + +function generatePromiseLifecycleEventObject(name, promise) { + return {promise: promise}; +} + +var eventToObjectGenerator = { + promiseCreated: generatePromiseLifecycleEventObject, + promiseFulfilled: generatePromiseLifecycleEventObject, + promiseRejected: generatePromiseLifecycleEventObject, + promiseResolved: generatePromiseLifecycleEventObject, + promiseCancelled: generatePromiseLifecycleEventObject, + promiseChained: function(name, promise, child) { + return {promise: promise, child: child}; + }, + warning: function(name, warning) { + return {warning: warning}; + }, + unhandledRejection: function (name, reason, promise) { + return {reason: reason, promise: promise}; + }, + rejectionHandled: generatePromiseLifecycleEventObject +}; + +var activeFireEvent = function (name) { + var globalEventFired = false; + try { + globalEventFired = fireGlobalEvent.apply(null, arguments); + } catch (e) { + async.throwLater(e); + globalEventFired = true; + } + + var domEventFired = false; + try { + domEventFired = fireDomEvent(name, + eventToObjectGenerator[name].apply(null, arguments)); + } catch (e) { + async.throwLater(e); + domEventFired = true; + } + + return domEventFired || globalEventFired; +}; + +Promise.config = function(opts) { + opts = Object(opts); + if ("longStackTraces" in opts) { + if (opts.longStackTraces) { + Promise.longStackTraces(); + } else if (!opts.longStackTraces && Promise.hasLongStackTraces()) { + disableLongStackTraces(); + } + } + if ("warnings" in opts) { + var warningsOption = opts.warnings; + config.warnings = !!warningsOption; + wForgottenReturn = config.warnings; + + if (util.isObject(warningsOption)) { + if ("wForgottenReturn" in warningsOption) { + wForgottenReturn = !!warningsOption.wForgottenReturn; + } + } + } + if ("cancellation" in opts && opts.cancellation && !config.cancellation) { + if (async.haveItemsQueued()) { + throw new Error( + "cannot enable cancellation after promises are in use"); + } + Promise.prototype._clearCancellationData = + cancellationClearCancellationData; + Promise.prototype._propagateFrom = cancellationPropagateFrom; + Promise.prototype._onCancel = cancellationOnCancel; + Promise.prototype._setOnCancel = cancellationSetOnCancel; + Promise.prototype._attachCancellationCallback = + cancellationAttachCancellationCallback; + Promise.prototype._execute = cancellationExecute; + propagateFromFunction = cancellationPropagateFrom; + config.cancellation = true; + } + if ("monitoring" in opts) { + if (opts.monitoring && !config.monitoring) { + config.monitoring = true; + Promise.prototype._fireEvent = activeFireEvent; + } else if (!opts.monitoring && config.monitoring) { + config.monitoring = false; + Promise.prototype._fireEvent = defaultFireEvent; + } + } +}; + +function defaultFireEvent() { return false; } + +Promise.prototype._fireEvent = defaultFireEvent; +Promise.prototype._execute = function(executor, resolve, reject) { + try { + executor(resolve, reject); + } catch (e) { + return e; + } +}; +Promise.prototype._onCancel = function () {}; +Promise.prototype._setOnCancel = function (handler) { ; }; +Promise.prototype._attachCancellationCallback = function(onCancel) { + ; +}; +Promise.prototype._captureStackTrace = function () {}; +Promise.prototype._attachExtraTrace = function () {}; +Promise.prototype._clearCancellationData = function() {}; +Promise.prototype._propagateFrom = function (parent, flags) { + ; + ; +}; + +function cancellationExecute(executor, resolve, reject) { + var promise = this; + try { + executor(resolve, reject, function(onCancel) { + if (typeof onCancel !== "function") { + throw new TypeError("onCancel must be a function, got: " + + util.toString(onCancel)); + } + promise._attachCancellationCallback(onCancel); + }); + } catch (e) { + return e; + } +} + +function cancellationAttachCancellationCallback(onCancel) { + if (!this.isCancellable()) return this; + + var previousOnCancel = this._onCancel(); + if (previousOnCancel !== undefined) { + if (util.isArray(previousOnCancel)) { + previousOnCancel.push(onCancel); + } else { + this._setOnCancel([previousOnCancel, onCancel]); + } + } else { + this._setOnCancel(onCancel); + } +} + +function cancellationOnCancel() { + return this._onCancelField; +} + +function cancellationSetOnCancel(onCancel) { + this._onCancelField = onCancel; +} + +function cancellationClearCancellationData() { + this._cancellationParent = undefined; + this._onCancelField = undefined; +} + +function cancellationPropagateFrom(parent, flags) { + if ((flags & 1) !== 0) { + this._cancellationParent = parent; + var branchesRemainingToCancel = parent._branchesRemainingToCancel; + if (branchesRemainingToCancel === undefined) { + branchesRemainingToCancel = 0; + } + parent._branchesRemainingToCancel = branchesRemainingToCancel + 1; + } + if ((flags & 2) !== 0 && parent._isBound()) { + this._setBoundTo(parent._boundTo); + } +} + +function bindingPropagateFrom(parent, flags) { + if ((flags & 2) !== 0 && parent._isBound()) { + this._setBoundTo(parent._boundTo); + } +} +var propagateFromFunction = bindingPropagateFrom; + +function boundValueFunction() { + var ret = this._boundTo; + if (ret !== undefined) { + if (ret instanceof Promise) { + if (ret.isFulfilled()) { + return ret.value(); + } else { + return undefined; + } + } + } + return ret; +} + +function longStackTracesCaptureStackTrace() { + this._trace = new CapturedTrace(this._peekContext()); +} + +function longStackTracesAttachExtraTrace(error, ignoreSelf) { + if (canAttachTrace(error)) { + var trace = this._trace; + if (trace !== undefined) { + if (ignoreSelf) trace = trace._parent; + } + if (trace !== undefined) { + trace.attachExtraTrace(error); + } else if (!error.__stackCleaned__) { + var parsed = parseStackAndMessage(error); + util.notEnumerableProp(error, "stack", + parsed.message + "\n" + parsed.stack.join("\n")); + util.notEnumerableProp(error, "__stackCleaned__", true); + } + } +} + +function checkForgottenReturns(returnValue, promiseCreated, name, promise, + parent) { + if (returnValue === undefined && promiseCreated !== null && + wForgottenReturn) { + if (parent !== undefined && parent._returnedNonUndefined()) return; + if ((promise._bitField & 65535) === 0) return; + + if (name) name = name + " "; + var msg = "a promise was created in a " + name + + "handler but was not returned from it"; + promise._warn(msg, true, promiseCreated); + } +} + +function deprecated(name, replacement) { + var message = name + + " is deprecated and will be removed in a future version."; + if (replacement) message += " Use " + replacement + " instead."; + return warn(message); +} + +function warn(message, shouldUseOwnTrace, promise) { + if (!config.warnings) return; + var warning = new Warning(message); + var ctx; + if (shouldUseOwnTrace) { + promise._attachExtraTrace(warning); + } else if (config.longStackTraces && (ctx = Promise._peekContext())) { + ctx.attachExtraTrace(warning); + } else { + var parsed = parseStackAndMessage(warning); + warning.stack = parsed.message + "\n" + parsed.stack.join("\n"); + } + + if (!activeFireEvent("warning", warning)) { + formatAndLogError(warning, "", true); + } +} + +function reconstructStack(message, stacks) { + for (var i = 0; i < stacks.length - 1; ++i) { + stacks[i].push("From previous event:"); + stacks[i] = stacks[i].join("\n"); + } + if (i < stacks.length) { + stacks[i] = stacks[i].join("\n"); + } + return message + "\n" + stacks.join("\n"); +} + +function removeDuplicateOrEmptyJumps(stacks) { + for (var i = 0; i < stacks.length; ++i) { + if (stacks[i].length === 0 || + ((i + 1 < stacks.length) && stacks[i][0] === stacks[i+1][0])) { + stacks.splice(i, 1); + i--; + } + } +} + +function removeCommonRoots(stacks) { + var current = stacks[0]; + for (var i = 1; i < stacks.length; ++i) { + var prev = stacks[i]; + var currentLastIndex = current.length - 1; + var currentLastLine = current[currentLastIndex]; + var commonRootMeetPoint = -1; + + for (var j = prev.length - 1; j >= 0; --j) { + if (prev[j] === currentLastLine) { + commonRootMeetPoint = j; + break; + } + } + + for (var j = commonRootMeetPoint; j >= 0; --j) { + var line = prev[j]; + if (current[currentLastIndex] === line) { + current.pop(); + currentLastIndex--; + } else { + break; + } + } + current = prev; + } +} + +function cleanStack(stack) { + var ret = []; + for (var i = 0; i < stack.length; ++i) { + var line = stack[i]; + var isTraceLine = " (No stack trace)" === line || + stackFramePattern.test(line); + var isInternalFrame = isTraceLine && shouldIgnore(line); + if (isTraceLine && !isInternalFrame) { + if (indentStackFrames && line.charAt(0) !== " ") { + line = " " + line; + } + ret.push(line); + } + } + return ret; +} + +function stackFramesAsArray(error) { + var stack = error.stack.replace(/\s+$/g, "").split("\n"); + for (var i = 0; i < stack.length; ++i) { + var line = stack[i]; + if (" (No stack trace)" === line || stackFramePattern.test(line)) { + break; + } + } + if (i > 0) { + stack = stack.slice(i); + } + return stack; +} + +function parseStackAndMessage(error) { + var stack = error.stack; + var message = error.toString(); + stack = typeof stack === "string" && stack.length > 0 + ? stackFramesAsArray(error) : [" (No stack trace)"]; + return { + message: message, + stack: cleanStack(stack) + }; +} + +function formatAndLogError(error, title, isSoft) { + if (typeof console !== "undefined") { + var message; + if (util.isObject(error)) { + var stack = error.stack; + message = title + formatStack(stack, error); + } else { + message = title + String(error); + } + if (typeof printWarning === "function") { + printWarning(message, isSoft); + } else if (typeof console.log === "function" || + typeof console.log === "object") { + console.log(message); + } + } +} + +function fireRejectionEvent(name, localHandler, reason, promise) { + var localEventFired = false; + try { + if (typeof localHandler === "function") { + localEventFired = true; + if (name === "rejectionHandled") { + localHandler(promise); + } else { + localHandler(reason, promise); + } + } + } catch (e) { + async.throwLater(e); + } + + if (name === "unhandledRejection") { + if (!activeFireEvent(name, reason, promise) && !localEventFired) { + formatAndLogError(reason, "Unhandled rejection "); + } + } else { + activeFireEvent(name, promise); + } +} + +function formatNonError(obj) { + var str; + if (typeof obj === "function") { + str = "[function " + + (obj.name || "anonymous") + + "]"; + } else { + str = obj && typeof obj.toString === "function" + ? obj.toString() : util.toString(obj); + var ruselessToString = /\[object [a-zA-Z0-9$_]+\]/; + if (ruselessToString.test(str)) { + try { + var newStr = JSON.stringify(obj); + str = newStr; + } + catch(e) { + + } + } + if (str.length === 0) { + str = "(empty array)"; + } + } + return ("(<" + snip(str) + ">, no stack trace)"); +} + +function snip(str) { + var maxChars = 41; + if (str.length < maxChars) { + return str; + } + return str.substr(0, maxChars - 3) + "..."; +} + +function longStackTracesIsSupported() { + return typeof captureStackTrace === "function"; +} + +var shouldIgnore = function() { return false; }; +var parseLineInfoRegex = /[\/<\(]([^:\/]+):(\d+):(?:\d+)\)?\s*$/; +function parseLineInfo(line) { + var matches = line.match(parseLineInfoRegex); + if (matches) { + return { + fileName: matches[1], + line: parseInt(matches[2], 10) + }; + } +} + +function setBounds(firstLineError, lastLineError) { + if (!longStackTracesIsSupported()) return; + var firstStackLines = firstLineError.stack.split("\n"); + var lastStackLines = lastLineError.stack.split("\n"); + var firstIndex = -1; + var lastIndex = -1; + var firstFileName; + var lastFileName; + for (var i = 0; i < firstStackLines.length; ++i) { + var result = parseLineInfo(firstStackLines[i]); + if (result) { + firstFileName = result.fileName; + firstIndex = result.line; + break; + } + } + for (var i = 0; i < lastStackLines.length; ++i) { + var result = parseLineInfo(lastStackLines[i]); + if (result) { + lastFileName = result.fileName; + lastIndex = result.line; + break; + } + } + if (firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName || + firstFileName !== lastFileName || firstIndex >= lastIndex) { + return; + } + + shouldIgnore = function(line) { + if (bluebirdFramePattern.test(line)) return true; + var info = parseLineInfo(line); + if (info) { + if (info.fileName === firstFileName && + (firstIndex <= info.line && info.line <= lastIndex)) { + return true; + } + } + return false; + }; +} + +function CapturedTrace(parent) { + this._parent = parent; + this._promisesCreated = 0; + var length = this._length = 1 + (parent === undefined ? 0 : parent._length); + captureStackTrace(this, CapturedTrace); + if (length > 32) this.uncycle(); +} +util.inherits(CapturedTrace, Error); +Context.CapturedTrace = CapturedTrace; + +CapturedTrace.prototype.uncycle = function() { + var length = this._length; + if (length < 2) return; + var nodes = []; + var stackToIndex = {}; + + for (var i = 0, node = this; node !== undefined; ++i) { + nodes.push(node); + node = node._parent; + } + length = this._length = i; + for (var i = length - 1; i >= 0; --i) { + var stack = nodes[i].stack; + if (stackToIndex[stack] === undefined) { + stackToIndex[stack] = i; + } + } + for (var i = 0; i < length; ++i) { + var currentStack = nodes[i].stack; + var index = stackToIndex[currentStack]; + if (index !== undefined && index !== i) { + if (index > 0) { + nodes[index - 1]._parent = undefined; + nodes[index - 1]._length = 1; + } + nodes[i]._parent = undefined; + nodes[i]._length = 1; + var cycleEdgeNode = i > 0 ? nodes[i - 1] : this; + + if (index < length - 1) { + cycleEdgeNode._parent = nodes[index + 1]; + cycleEdgeNode._parent.uncycle(); + cycleEdgeNode._length = + cycleEdgeNode._parent._length + 1; + } else { + cycleEdgeNode._parent = undefined; + cycleEdgeNode._length = 1; + } + var currentChildLength = cycleEdgeNode._length + 1; + for (var j = i - 2; j >= 0; --j) { + nodes[j]._length = currentChildLength; + currentChildLength++; + } + return; + } + } +}; + +CapturedTrace.prototype.attachExtraTrace = function(error) { + if (error.__stackCleaned__) return; + this.uncycle(); + var parsed = parseStackAndMessage(error); + var message = parsed.message; + var stacks = [parsed.stack]; + + var trace = this; + while (trace !== undefined) { + stacks.push(cleanStack(trace.stack.split("\n"))); + trace = trace._parent; + } + removeCommonRoots(stacks); + removeDuplicateOrEmptyJumps(stacks); + util.notEnumerableProp(error, "stack", reconstructStack(message, stacks)); + util.notEnumerableProp(error, "__stackCleaned__", true); +}; + +var captureStackTrace = (function stackDetection() { + var v8stackFramePattern = /^\s*at\s*/; + var v8stackFormatter = function(stack, error) { + if (typeof stack === "string") return stack; + + if (error.name !== undefined && + error.message !== undefined) { + return error.toString(); + } + return formatNonError(error); + }; + + if (typeof Error.stackTraceLimit === "number" && + typeof Error.captureStackTrace === "function") { + Error.stackTraceLimit += 6; + stackFramePattern = v8stackFramePattern; + formatStack = v8stackFormatter; + var captureStackTrace = Error.captureStackTrace; + + shouldIgnore = function(line) { + return bluebirdFramePattern.test(line); + }; + return function(receiver, ignoreUntil) { + Error.stackTraceLimit += 6; + captureStackTrace(receiver, ignoreUntil); + Error.stackTraceLimit -= 6; + }; + } + var err = new Error(); + + if (typeof err.stack === "string" && + err.stack.split("\n")[0].indexOf("stackDetection@") >= 0) { + stackFramePattern = /@/; + formatStack = v8stackFormatter; + indentStackFrames = true; + return function captureStackTrace(o) { + o.stack = new Error().stack; + }; + } + + var hasStackAfterThrow; + try { throw new Error(); } + catch(e) { + hasStackAfterThrow = ("stack" in e); + } + if (!("stack" in err) && hasStackAfterThrow && + typeof Error.stackTraceLimit === "number") { + stackFramePattern = v8stackFramePattern; + formatStack = v8stackFormatter; + return function captureStackTrace(o) { + Error.stackTraceLimit += 6; + try { throw new Error(); } + catch(e) { o.stack = e.stack; } + Error.stackTraceLimit -= 6; + }; + } + + formatStack = function(stack, error) { + if (typeof stack === "string") return stack; + + if ((typeof error === "object" || + typeof error === "function") && + error.name !== undefined && + error.message !== undefined) { + return error.toString(); + } + return formatNonError(error); + }; + + return null; + +})([]); + +if (typeof console !== "undefined" && typeof console.warn !== "undefined") { + printWarning = function (message) { + console.warn(message); + }; + if (util.isNode && process.stderr.isTTY) { + printWarning = function(message, isSoft) { + var color = isSoft ? "\u001b[33m" : "\u001b[31m"; + console.warn(color + message + "\u001b[0m\n"); + }; + } else if (!util.isNode && typeof (new Error().stack) === "string") { + printWarning = function(message, isSoft) { + console.warn("%c" + message, + isSoft ? "color: darkorange" : "color: red"); + }; + } +} + +var config = { + warnings: warnings, + longStackTraces: false, + cancellation: false, + monitoring: false +}; + +if (longStackTraces) Promise.longStackTraces(); + +return { + longStackTraces: function() { + return config.longStackTraces; + }, + warnings: function() { + return config.warnings; + }, + cancellation: function() { + return config.cancellation; + }, + monitoring: function() { + return config.monitoring; + }, + propagateFromFunction: function() { + return propagateFromFunction; + }, + boundValueFunction: function() { + return boundValueFunction; + }, + checkForgottenReturns: checkForgottenReturns, + setBounds: setBounds, + warn: warn, + deprecated: deprecated, + CapturedTrace: CapturedTrace, + fireDomEvent: fireDomEvent, + fireGlobalEvent: fireGlobalEvent +}; +}; + +},{"./errors":12,"./util":36}],10:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise) { +function returner() { + return this.value; +} +function thrower() { + throw this.reason; +} + +Promise.prototype["return"] = +Promise.prototype.thenReturn = function (value) { + if (value instanceof Promise) value.suppressUnhandledRejections(); + return this._then( + returner, undefined, undefined, {value: value}, undefined); +}; + +Promise.prototype["throw"] = +Promise.prototype.thenThrow = function (reason) { + return this._then( + thrower, undefined, undefined, {reason: reason}, undefined); +}; + +Promise.prototype.catchThrow = function (reason) { + if (arguments.length <= 1) { + return this._then( + undefined, thrower, undefined, {reason: reason}, undefined); + } else { + var _reason = arguments[1]; + var handler = function() {throw _reason;}; + return this.caught(reason, handler); + } +}; + +Promise.prototype.catchReturn = function (value) { + if (arguments.length <= 1) { + if (value instanceof Promise) value.suppressUnhandledRejections(); + return this._then( + undefined, returner, undefined, {value: value}, undefined); + } else { + var _value = arguments[1]; + if (_value instanceof Promise) _value.suppressUnhandledRejections(); + var handler = function() {return _value;}; + return this.caught(value, handler); + } +}; +}; + +},{}],11:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, INTERNAL) { +var PromiseReduce = Promise.reduce; +var PromiseAll = Promise.all; + +function promiseAllThis() { + return PromiseAll(this); +} + +function PromiseMapSeries(promises, fn) { + return PromiseReduce(promises, fn, INTERNAL, INTERNAL); +} + +Promise.prototype.each = function (fn) { + return this.mapSeries(fn) + ._then(promiseAllThis, undefined, undefined, this, undefined); +}; + +Promise.prototype.mapSeries = function (fn) { + return PromiseReduce(this, fn, INTERNAL, INTERNAL); +}; + +Promise.each = function (promises, fn) { + return PromiseMapSeries(promises, fn) + ._then(promiseAllThis, undefined, undefined, promises, undefined); +}; + +Promise.mapSeries = PromiseMapSeries; +}; + +},{}],12:[function(_dereq_,module,exports){ +"use strict"; +var es5 = _dereq_("./es5"); +var Objectfreeze = es5.freeze; +var util = _dereq_("./util"); +var inherits = util.inherits; +var notEnumerableProp = util.notEnumerableProp; + +function subError(nameProperty, defaultMessage) { + function SubError(message) { + if (!(this instanceof SubError)) return new SubError(message); + notEnumerableProp(this, "message", + typeof message === "string" ? message : defaultMessage); + notEnumerableProp(this, "name", nameProperty); + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } else { + Error.call(this); + } + } + inherits(SubError, Error); + return SubError; +} + +var _TypeError, _RangeError; +var Warning = subError("Warning", "warning"); +var CancellationError = subError("CancellationError", "cancellation error"); +var TimeoutError = subError("TimeoutError", "timeout error"); +var AggregateError = subError("AggregateError", "aggregate error"); +try { + _TypeError = TypeError; + _RangeError = RangeError; +} catch(e) { + _TypeError = subError("TypeError", "type error"); + _RangeError = subError("RangeError", "range error"); +} + +var methods = ("join pop push shift unshift slice filter forEach some " + + "every map indexOf lastIndexOf reduce reduceRight sort reverse").split(" "); + +for (var i = 0; i < methods.length; ++i) { + if (typeof Array.prototype[methods[i]] === "function") { + AggregateError.prototype[methods[i]] = Array.prototype[methods[i]]; + } +} + +es5.defineProperty(AggregateError.prototype, "length", { + value: 0, + configurable: false, + writable: true, + enumerable: true +}); +AggregateError.prototype["isOperational"] = true; +var level = 0; +AggregateError.prototype.toString = function() { + var indent = Array(level * 4 + 1).join(" "); + var ret = "\n" + indent + "AggregateError of:" + "\n"; + level++; + indent = Array(level * 4 + 1).join(" "); + for (var i = 0; i < this.length; ++i) { + var str = this[i] === this ? "[Circular AggregateError]" : this[i] + ""; + var lines = str.split("\n"); + for (var j = 0; j < lines.length; ++j) { + lines[j] = indent + lines[j]; + } + str = lines.join("\n"); + ret += str + "\n"; + } + level--; + return ret; +}; + +function OperationalError(message) { + if (!(this instanceof OperationalError)) + return new OperationalError(message); + notEnumerableProp(this, "name", "OperationalError"); + notEnumerableProp(this, "message", message); + this.cause = message; + this["isOperational"] = true; + + if (message instanceof Error) { + notEnumerableProp(this, "message", message.message); + notEnumerableProp(this, "stack", message.stack); + } else if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } + +} +inherits(OperationalError, Error); + +var errorTypes = Error["__BluebirdErrorTypes__"]; +if (!errorTypes) { + errorTypes = Objectfreeze({ + CancellationError: CancellationError, + TimeoutError: TimeoutError, + OperationalError: OperationalError, + RejectionError: OperationalError, + AggregateError: AggregateError + }); + es5.defineProperty(Error, "__BluebirdErrorTypes__", { + value: errorTypes, + writable: false, + enumerable: false, + configurable: false + }); +} + +module.exports = { + Error: Error, + TypeError: _TypeError, + RangeError: _RangeError, + CancellationError: errorTypes.CancellationError, + OperationalError: errorTypes.OperationalError, + TimeoutError: errorTypes.TimeoutError, + AggregateError: errorTypes.AggregateError, + Warning: Warning +}; + +},{"./es5":13,"./util":36}],13:[function(_dereq_,module,exports){ +var isES5 = (function(){ + "use strict"; + return this === undefined; +})(); + +if (isES5) { + module.exports = { + freeze: Object.freeze, + defineProperty: Object.defineProperty, + getDescriptor: Object.getOwnPropertyDescriptor, + keys: Object.keys, + names: Object.getOwnPropertyNames, + getPrototypeOf: Object.getPrototypeOf, + isArray: Array.isArray, + isES5: isES5, + propertyIsWritable: function(obj, prop) { + var descriptor = Object.getOwnPropertyDescriptor(obj, prop); + return !!(!descriptor || descriptor.writable || descriptor.set); + } + }; +} else { + var has = {}.hasOwnProperty; + var str = {}.toString; + var proto = {}.constructor.prototype; + + var ObjectKeys = function (o) { + var ret = []; + for (var key in o) { + if (has.call(o, key)) { + ret.push(key); + } + } + return ret; + }; + + var ObjectGetDescriptor = function(o, key) { + return {value: o[key]}; + }; + + var ObjectDefineProperty = function (o, key, desc) { + o[key] = desc.value; + return o; + }; + + var ObjectFreeze = function (obj) { + return obj; + }; + + var ObjectGetPrototypeOf = function (obj) { + try { + return Object(obj).constructor.prototype; + } + catch (e) { + return proto; + } + }; + + var ArrayIsArray = function (obj) { + try { + return str.call(obj) === "[object Array]"; + } + catch(e) { + return false; + } + }; + + module.exports = { + isArray: ArrayIsArray, + keys: ObjectKeys, + names: ObjectKeys, + defineProperty: ObjectDefineProperty, + getDescriptor: ObjectGetDescriptor, + freeze: ObjectFreeze, + getPrototypeOf: ObjectGetPrototypeOf, + isES5: isES5, + propertyIsWritable: function() { + return true; + } + }; +} + +},{}],14:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, INTERNAL) { +var PromiseMap = Promise.map; + +Promise.prototype.filter = function (fn, options) { + return PromiseMap(this, fn, options, INTERNAL); +}; + +Promise.filter = function (promises, fn, options) { + return PromiseMap(promises, fn, options, INTERNAL); +}; +}; + +},{}],15:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, tryConvertToPromise) { +var util = _dereq_("./util"); +var CancellationError = Promise.CancellationError; +var errorObj = util.errorObj; + +function PassThroughHandlerContext(promise, type, handler) { + this.promise = promise; + this.type = type; + this.handler = handler; + this.called = false; + this.cancelPromise = null; +} + +PassThroughHandlerContext.prototype.isFinallyHandler = function() { + return this.type === 0; +}; + +function FinallyHandlerCancelReaction(finallyHandler) { + this.finallyHandler = finallyHandler; +} + +FinallyHandlerCancelReaction.prototype._resultCancelled = function() { + checkCancel(this.finallyHandler); +}; + +function checkCancel(ctx, reason) { + if (ctx.cancelPromise != null) { + if (arguments.length > 1) { + ctx.cancelPromise._reject(reason); + } else { + ctx.cancelPromise._cancel(); + } + ctx.cancelPromise = null; + return true; + } + return false; +} + +function succeed() { + return finallyHandler.call(this, this.promise._target()._settledValue()); +} +function fail(reason) { + if (checkCancel(this, reason)) return; + errorObj.e = reason; + return errorObj; +} +function finallyHandler(reasonOrValue) { + var promise = this.promise; + var handler = this.handler; + + if (!this.called) { + this.called = true; + var ret = this.isFinallyHandler() + ? handler.call(promise._boundValue()) + : handler.call(promise._boundValue(), reasonOrValue); + if (ret !== undefined) { + promise._setReturnedNonUndefined(); + var maybePromise = tryConvertToPromise(ret, promise); + if (maybePromise instanceof Promise) { + if (this.cancelPromise != null) { + if (maybePromise.isCancelled()) { + var reason = + new CancellationError("late cancellation observer"); + promise._attachExtraTrace(reason); + errorObj.e = reason; + return errorObj; + } else if (maybePromise.isPending()) { + maybePromise._attachCancellationCallback( + new FinallyHandlerCancelReaction(this)); + } + } + return maybePromise._then( + succeed, fail, undefined, this, undefined); + } + } + } + + if (promise.isRejected()) { + checkCancel(this); + errorObj.e = reasonOrValue; + return errorObj; + } else { + checkCancel(this); + return reasonOrValue; + } +} + +Promise.prototype._passThrough = function(handler, type, success, fail) { + if (typeof handler !== "function") return this.then(); + return this._then(success, + fail, + undefined, + new PassThroughHandlerContext(this, type, handler), + undefined); +}; + +Promise.prototype.lastly = +Promise.prototype["finally"] = function (handler) { + return this._passThrough(handler, + 0, + finallyHandler, + finallyHandler); +}; + +Promise.prototype.tap = function (handler) { + return this._passThrough(handler, 1, finallyHandler); +}; + +return PassThroughHandlerContext; +}; + +},{"./util":36}],16:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, + apiRejection, + INTERNAL, + tryConvertToPromise, + Proxyable, + debug) { +var errors = _dereq_("./errors"); +var TypeError = errors.TypeError; +var util = _dereq_("./util"); +var errorObj = util.errorObj; +var tryCatch = util.tryCatch; +var yieldHandlers = []; + +function promiseFromYieldHandler(value, yieldHandlers, traceParent) { + for (var i = 0; i < yieldHandlers.length; ++i) { + traceParent._pushContext(); + var result = tryCatch(yieldHandlers[i])(value); + traceParent._popContext(); + if (result === errorObj) { + traceParent._pushContext(); + var ret = Promise.reject(errorObj.e); + traceParent._popContext(); + return ret; + } + var maybePromise = tryConvertToPromise(result, traceParent); + if (maybePromise instanceof Promise) return maybePromise; + } + return null; +} + +function PromiseSpawn(generatorFunction, receiver, yieldHandler, stack) { + if (debug.cancellation()) { + var internal = new Promise(INTERNAL); + var _finallyPromise = this._finallyPromise = new Promise(INTERNAL); + this._promise = internal.lastly(function() { + return _finallyPromise; + }); + internal._captureStackTrace(); + internal._setOnCancel(this); + } else { + var promise = this._promise = new Promise(INTERNAL); + promise._captureStackTrace(); + } + this._stack = stack; + this._generatorFunction = generatorFunction; + this._receiver = receiver; + this._generator = undefined; + this._yieldHandlers = typeof yieldHandler === "function" + ? [yieldHandler].concat(yieldHandlers) + : yieldHandlers; + this._yieldedPromise = null; + this._cancellationPhase = false; +} +util.inherits(PromiseSpawn, Proxyable); + +PromiseSpawn.prototype._isResolved = function() { + return this._promise === null; +}; + +PromiseSpawn.prototype._cleanup = function() { + this._promise = this._generator = null; + if (debug.cancellation() && this._finallyPromise !== null) { + this._finallyPromise._fulfill(); + this._finallyPromise = null; + } +}; + +PromiseSpawn.prototype._promiseCancelled = function() { + if (this._isResolved()) return; + var implementsReturn = typeof this._generator["return"] !== "undefined"; + + var result; + if (!implementsReturn) { + var reason = new Promise.CancellationError( + "generator .return() sentinel"); + Promise.coroutine.returnSentinel = reason; + this._promise._attachExtraTrace(reason); + this._promise._pushContext(); + result = tryCatch(this._generator["throw"]).call(this._generator, + reason); + this._promise._popContext(); + } else { + this._promise._pushContext(); + result = tryCatch(this._generator["return"]).call(this._generator, + undefined); + this._promise._popContext(); + } + this._cancellationPhase = true; + this._yieldedPromise = null; + this._continue(result); +}; + +PromiseSpawn.prototype._promiseFulfilled = function(value) { + this._yieldedPromise = null; + this._promise._pushContext(); + var result = tryCatch(this._generator.next).call(this._generator, value); + this._promise._popContext(); + this._continue(result); +}; + +PromiseSpawn.prototype._promiseRejected = function(reason) { + this._yieldedPromise = null; + this._promise._attachExtraTrace(reason); + this._promise._pushContext(); + var result = tryCatch(this._generator["throw"]) + .call(this._generator, reason); + this._promise._popContext(); + this._continue(result); +}; + +PromiseSpawn.prototype._resultCancelled = function() { + if (this._yieldedPromise instanceof Promise) { + var promise = this._yieldedPromise; + this._yieldedPromise = null; + promise.cancel(); + } +}; + +PromiseSpawn.prototype.promise = function () { + return this._promise; +}; + +PromiseSpawn.prototype._run = function () { + this._generator = this._generatorFunction.call(this._receiver); + this._receiver = + this._generatorFunction = undefined; + this._promiseFulfilled(undefined); +}; + +PromiseSpawn.prototype._continue = function (result) { + var promise = this._promise; + if (result === errorObj) { + this._cleanup(); + if (this._cancellationPhase) { + return promise.cancel(); + } else { + return promise._rejectCallback(result.e, false); + } + } + + var value = result.value; + if (result.done === true) { + this._cleanup(); + if (this._cancellationPhase) { + return promise.cancel(); + } else { + return promise._resolveCallback(value); + } + } else { + var maybePromise = tryConvertToPromise(value, this._promise); + if (!(maybePromise instanceof Promise)) { + maybePromise = + promiseFromYieldHandler(maybePromise, + this._yieldHandlers, + this._promise); + if (maybePromise === null) { + this._promiseRejected( + new TypeError( + "A value %s was yielded that could not be treated as a promise\u000a\u000a See http://goo.gl/MqrFmX\u000a\u000a".replace("%s", value) + + "From coroutine:\u000a" + + this._stack.split("\n").slice(1, -7).join("\n") + ) + ); + return; + } + } + maybePromise = maybePromise._target(); + var bitField = maybePromise._bitField; + ; + if (((bitField & 50397184) === 0)) { + this._yieldedPromise = maybePromise; + maybePromise._proxy(this, null); + } else if (((bitField & 33554432) !== 0)) { + this._promiseFulfilled(maybePromise._value()); + } else if (((bitField & 16777216) !== 0)) { + this._promiseRejected(maybePromise._reason()); + } else { + this._promiseCancelled(); + } + } +}; + +Promise.coroutine = function (generatorFunction, options) { + if (typeof generatorFunction !== "function") { + throw new TypeError("generatorFunction must be a function\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + var yieldHandler = Object(options).yieldHandler; + var PromiseSpawn$ = PromiseSpawn; + var stack = new Error().stack; + return function () { + var generator = generatorFunction.apply(this, arguments); + var spawn = new PromiseSpawn$(undefined, undefined, yieldHandler, + stack); + var ret = spawn.promise(); + spawn._generator = generator; + spawn._promiseFulfilled(undefined); + return ret; + }; +}; + +Promise.coroutine.addYieldHandler = function(fn) { + if (typeof fn !== "function") { + throw new TypeError("expecting a function but got " + util.classString(fn)); + } + yieldHandlers.push(fn); +}; + +Promise.spawn = function (generatorFunction) { + debug.deprecated("Promise.spawn()", "Promise.coroutine()"); + if (typeof generatorFunction !== "function") { + return apiRejection("generatorFunction must be a function\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + var spawn = new PromiseSpawn(generatorFunction, this); + var ret = spawn.promise(); + spawn._run(Promise.spawn); + return ret; +}; +}; + +},{"./errors":12,"./util":36}],17:[function(_dereq_,module,exports){ +"use strict"; +module.exports = +function(Promise, PromiseArray, tryConvertToPromise, INTERNAL) { +var util = _dereq_("./util"); +var canEvaluate = util.canEvaluate; +var tryCatch = util.tryCatch; +var errorObj = util.errorObj; +var reject; + +if (!true) { +if (canEvaluate) { + var thenCallback = function(i) { + return new Function("value", "holder", " \n\ + 'use strict'; \n\ + holder.pIndex = value; \n\ + holder.checkFulfillment(this); \n\ + ".replace(/Index/g, i)); + }; + + var promiseSetter = function(i) { + return new Function("promise", "holder", " \n\ + 'use strict'; \n\ + holder.pIndex = promise; \n\ + ".replace(/Index/g, i)); + }; + + var generateHolderClass = function(total) { + var props = new Array(total); + for (var i = 0; i < props.length; ++i) { + props[i] = "this.p" + (i+1); + } + var assignment = props.join(" = ") + " = null;"; + var cancellationCode= "var promise;\n" + props.map(function(prop) { + return " \n\ + promise = " + prop + "; \n\ + if (promise instanceof Promise) { \n\ + promise.cancel(); \n\ + } \n\ + "; + }).join("\n"); + var passedArguments = props.join(", "); + var name = "Holder$" + total; + + + var code = "return function(tryCatch, errorObj, Promise) { \n\ + 'use strict'; \n\ + function [TheName](fn) { \n\ + [TheProperties] \n\ + this.fn = fn; \n\ + this.now = 0; \n\ + } \n\ + [TheName].prototype.checkFulfillment = function(promise) { \n\ + var now = ++this.now; \n\ + if (now === [TheTotal]) { \n\ + promise._pushContext(); \n\ + var callback = this.fn; \n\ + var ret = tryCatch(callback)([ThePassedArguments]); \n\ + promise._popContext(); \n\ + if (ret === errorObj) { \n\ + promise._rejectCallback(ret.e, false); \n\ + } else { \n\ + promise._resolveCallback(ret); \n\ + } \n\ + } \n\ + }; \n\ + \n\ + [TheName].prototype._resultCancelled = function() { \n\ + [CancellationCode] \n\ + }; \n\ + \n\ + return [TheName]; \n\ + }(tryCatch, errorObj, Promise); \n\ + "; + + code = code.replace(/\[TheName\]/g, name) + .replace(/\[TheTotal\]/g, total) + .replace(/\[ThePassedArguments\]/g, passedArguments) + .replace(/\[TheProperties\]/g, assignment) + .replace(/\[CancellationCode\]/g, cancellationCode); + + return new Function("tryCatch", "errorObj", "Promise", code) + (tryCatch, errorObj, Promise); + }; + + var holderClasses = []; + var thenCallbacks = []; + var promiseSetters = []; + + for (var i = 0; i < 8; ++i) { + holderClasses.push(generateHolderClass(i + 1)); + thenCallbacks.push(thenCallback(i + 1)); + promiseSetters.push(promiseSetter(i + 1)); + } + + reject = function (reason) { + this._reject(reason); + }; +}} + +Promise.join = function () { + var last = arguments.length - 1; + var fn; + if (last > 0 && typeof arguments[last] === "function") { + fn = arguments[last]; + if (!true) { + if (last <= 8 && canEvaluate) { + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + var HolderClass = holderClasses[last - 1]; + var holder = new HolderClass(fn); + var callbacks = thenCallbacks; + + for (var i = 0; i < last; ++i) { + var maybePromise = tryConvertToPromise(arguments[i], ret); + if (maybePromise instanceof Promise) { + maybePromise = maybePromise._target(); + var bitField = maybePromise._bitField; + ; + if (((bitField & 50397184) === 0)) { + maybePromise._then(callbacks[i], reject, + undefined, ret, holder); + promiseSetters[i](maybePromise, holder); + } else if (((bitField & 33554432) !== 0)) { + callbacks[i].call(ret, + maybePromise._value(), holder); + } else if (((bitField & 16777216) !== 0)) { + ret._reject(maybePromise._reason()); + } else { + ret._cancel(); + } + } else { + callbacks[i].call(ret, maybePromise, holder); + } + } + if (!ret._isFateSealed()) { + ret._setAsyncGuaranteed(); + ret._setOnCancel(holder); + } + return ret; + } + } + } + var args = [].slice.call(arguments);; + if (fn) args.pop(); + var ret = new PromiseArray(args).promise(); + return fn !== undefined ? ret.spread(fn) : ret; +}; + +}; + +},{"./util":36}],18:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, + PromiseArray, + apiRejection, + tryConvertToPromise, + INTERNAL, + debug) { +var getDomain = Promise._getDomain; +var util = _dereq_("./util"); +var tryCatch = util.tryCatch; +var errorObj = util.errorObj; +var EMPTY_ARRAY = []; + +function MappingPromiseArray(promises, fn, limit, _filter) { + this.constructor$(promises); + this._promise._captureStackTrace(); + var domain = getDomain(); + this._callback = domain === null ? fn : domain.bind(fn); + this._preservedValues = _filter === INTERNAL + ? new Array(this.length()) + : null; + this._limit = limit; + this._inFlight = 0; + this._queue = limit >= 1 ? [] : EMPTY_ARRAY; + this._init$(undefined, -2); +} +util.inherits(MappingPromiseArray, PromiseArray); + +MappingPromiseArray.prototype._init = function () {}; + +MappingPromiseArray.prototype._promiseFulfilled = function (value, index) { + var values = this._values; + var length = this.length(); + var preservedValues = this._preservedValues; + var limit = this._limit; + + if (index < 0) { + index = (index * -1) - 1; + values[index] = value; + if (limit >= 1) { + this._inFlight--; + this._drainQueue(); + if (this._isResolved()) return true; + } + } else { + if (limit >= 1 && this._inFlight >= limit) { + values[index] = value; + this._queue.push(index); + return false; + } + if (preservedValues !== null) preservedValues[index] = value; + + var promise = this._promise; + var callback = this._callback; + var receiver = promise._boundValue(); + promise._pushContext(); + var ret = tryCatch(callback).call(receiver, value, index, length); + var promiseCreated = promise._popContext(); + debug.checkForgottenReturns( + ret, + promiseCreated, + preservedValues !== null ? "Promise.filter" : "Promise.map", + promise + ); + if (ret === errorObj) { + this._reject(ret.e); + return true; + } + + var maybePromise = tryConvertToPromise(ret, this._promise); + if (maybePromise instanceof Promise) { + maybePromise = maybePromise._target(); + var bitField = maybePromise._bitField; + ; + if (((bitField & 50397184) === 0)) { + if (limit >= 1) this._inFlight++; + values[index] = maybePromise; + maybePromise._proxy(this, (index + 1) * -1); + return false; + } else if (((bitField & 33554432) !== 0)) { + ret = maybePromise._value(); + } else if (((bitField & 16777216) !== 0)) { + this._reject(maybePromise._reason()); + return true; + } else { + this._cancel(); + return true; + } + } + values[index] = ret; + } + var totalResolved = ++this._totalResolved; + if (totalResolved >= length) { + if (preservedValues !== null) { + this._filter(values, preservedValues); + } else { + this._resolve(values); + } + return true; + } + return false; +}; + +MappingPromiseArray.prototype._drainQueue = function () { + var queue = this._queue; + var limit = this._limit; + var values = this._values; + while (queue.length > 0 && this._inFlight < limit) { + if (this._isResolved()) return; + var index = queue.pop(); + this._promiseFulfilled(values[index], index); + } +}; + +MappingPromiseArray.prototype._filter = function (booleans, values) { + var len = values.length; + var ret = new Array(len); + var j = 0; + for (var i = 0; i < len; ++i) { + if (booleans[i]) ret[j++] = values[i]; + } + ret.length = j; + this._resolve(ret); +}; + +MappingPromiseArray.prototype.preservedValues = function () { + return this._preservedValues; +}; + +function map(promises, fn, options, _filter) { + if (typeof fn !== "function") { + return apiRejection("expecting a function but got " + util.classString(fn)); + } + + var limit = 0; + if (options !== undefined) { + if (typeof options === "object" && options !== null) { + if (typeof options.concurrency !== "number") { + return Promise.reject( + new TypeError("'concurrency' must be a number but it is " + + util.classString(options.concurrency))); + } + limit = options.concurrency; + } else { + return Promise.reject(new TypeError( + "options argument must be an object but it is " + + util.classString(options))); + } + } + limit = typeof limit === "number" && + isFinite(limit) && limit >= 1 ? limit : 0; + return new MappingPromiseArray(promises, fn, limit, _filter).promise(); +} + +Promise.prototype.map = function (fn, options) { + return map(this, fn, options, null); +}; + +Promise.map = function (promises, fn, options, _filter) { + return map(promises, fn, options, _filter); +}; + + +}; + +},{"./util":36}],19:[function(_dereq_,module,exports){ +"use strict"; +module.exports = +function(Promise, INTERNAL, tryConvertToPromise, apiRejection, debug) { +var util = _dereq_("./util"); +var tryCatch = util.tryCatch; + +Promise.method = function (fn) { + if (typeof fn !== "function") { + throw new Promise.TypeError("expecting a function but got " + util.classString(fn)); + } + return function () { + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + ret._pushContext(); + var value = tryCatch(fn).apply(this, arguments); + var promiseCreated = ret._popContext(); + debug.checkForgottenReturns( + value, promiseCreated, "Promise.method", ret); + ret._resolveFromSyncValue(value); + return ret; + }; +}; + +Promise.attempt = Promise["try"] = function (fn) { + if (typeof fn !== "function") { + return apiRejection("expecting a function but got " + util.classString(fn)); + } + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + ret._pushContext(); + var value; + if (arguments.length > 1) { + debug.deprecated("calling Promise.try with more than 1 argument"); + var arg = arguments[1]; + var ctx = arguments[2]; + value = util.isArray(arg) ? tryCatch(fn).apply(ctx, arg) + : tryCatch(fn).call(ctx, arg); + } else { + value = tryCatch(fn)(); + } + var promiseCreated = ret._popContext(); + debug.checkForgottenReturns( + value, promiseCreated, "Promise.try", ret); + ret._resolveFromSyncValue(value); + return ret; +}; + +Promise.prototype._resolveFromSyncValue = function (value) { + if (value === util.errorObj) { + this._rejectCallback(value.e, false); + } else { + this._resolveCallback(value, true); + } +}; +}; + +},{"./util":36}],20:[function(_dereq_,module,exports){ +"use strict"; +var util = _dereq_("./util"); +var maybeWrapAsError = util.maybeWrapAsError; +var errors = _dereq_("./errors"); +var OperationalError = errors.OperationalError; +var es5 = _dereq_("./es5"); + +function isUntypedError(obj) { + return obj instanceof Error && + es5.getPrototypeOf(obj) === Error.prototype; +} + +var rErrorKey = /^(?:name|message|stack|cause)$/; +function wrapAsOperationalError(obj) { + var ret; + if (isUntypedError(obj)) { + ret = new OperationalError(obj); + ret.name = obj.name; + ret.message = obj.message; + ret.stack = obj.stack; + var keys = es5.keys(obj); + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + if (!rErrorKey.test(key)) { + ret[key] = obj[key]; + } + } + return ret; + } + util.markAsOriginatingFromRejection(obj); + return obj; +} + +function nodebackForPromise(promise, multiArgs) { + return function(err, value) { + if (promise === null) return; + if (err) { + var wrapped = wrapAsOperationalError(maybeWrapAsError(err)); + promise._attachExtraTrace(wrapped); + promise._reject(wrapped); + } else if (!multiArgs) { + promise._fulfill(value); + } else { + var args = [].slice.call(arguments, 1);; + promise._fulfill(args); + } + promise = null; + }; +} + +module.exports = nodebackForPromise; + +},{"./errors":12,"./es5":13,"./util":36}],21:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise) { +var util = _dereq_("./util"); +var async = Promise._async; +var tryCatch = util.tryCatch; +var errorObj = util.errorObj; + +function spreadAdapter(val, nodeback) { + var promise = this; + if (!util.isArray(val)) return successAdapter.call(promise, val, nodeback); + var ret = + tryCatch(nodeback).apply(promise._boundValue(), [null].concat(val)); + if (ret === errorObj) { + async.throwLater(ret.e); + } +} + +function successAdapter(val, nodeback) { + var promise = this; + var receiver = promise._boundValue(); + var ret = val === undefined + ? tryCatch(nodeback).call(receiver, null) + : tryCatch(nodeback).call(receiver, null, val); + if (ret === errorObj) { + async.throwLater(ret.e); + } +} +function errorAdapter(reason, nodeback) { + var promise = this; + if (!reason) { + var newReason = new Error(reason + ""); + newReason.cause = reason; + reason = newReason; + } + var ret = tryCatch(nodeback).call(promise._boundValue(), reason); + if (ret === errorObj) { + async.throwLater(ret.e); + } +} + +Promise.prototype.asCallback = Promise.prototype.nodeify = function (nodeback, + options) { + if (typeof nodeback == "function") { + var adapter = successAdapter; + if (options !== undefined && Object(options).spread) { + adapter = spreadAdapter; + } + this._then( + adapter, + errorAdapter, + undefined, + this, + nodeback + ); + } + return this; +}; +}; + +},{"./util":36}],22:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function() { +var makeSelfResolutionError = function () { + return new TypeError("circular promise resolution chain\u000a\u000a See http://goo.gl/MqrFmX\u000a"); +}; +var reflectHandler = function() { + return new Promise.PromiseInspection(this._target()); +}; +var apiRejection = function(msg) { + return Promise.reject(new TypeError(msg)); +}; +function Proxyable() {} +var UNDEFINED_BINDING = {}; +var util = _dereq_("./util"); + +var getDomain; +if (util.isNode) { + getDomain = function() { + var ret = process.domain; + if (ret === undefined) ret = null; + return ret; + }; +} else { + getDomain = function() { + return null; + }; +} +util.notEnumerableProp(Promise, "_getDomain", getDomain); + +var es5 = _dereq_("./es5"); +var Async = _dereq_("./async"); +var async = new Async(); +es5.defineProperty(Promise, "_async", {value: async}); +var errors = _dereq_("./errors"); +var TypeError = Promise.TypeError = errors.TypeError; +Promise.RangeError = errors.RangeError; +var CancellationError = Promise.CancellationError = errors.CancellationError; +Promise.TimeoutError = errors.TimeoutError; +Promise.OperationalError = errors.OperationalError; +Promise.RejectionError = errors.OperationalError; +Promise.AggregateError = errors.AggregateError; +var INTERNAL = function(){}; +var APPLY = {}; +var NEXT_FILTER = {}; +var tryConvertToPromise = _dereq_("./thenables")(Promise, INTERNAL); +var PromiseArray = + _dereq_("./promise_array")(Promise, INTERNAL, + tryConvertToPromise, apiRejection, Proxyable); +var Context = _dereq_("./context")(Promise); + /*jshint unused:false*/ +var createContext = Context.create; +var debug = _dereq_("./debuggability")(Promise, Context); +var CapturedTrace = debug.CapturedTrace; +var PassThroughHandlerContext = + _dereq_("./finally")(Promise, tryConvertToPromise); +var catchFilter = _dereq_("./catch_filter")(NEXT_FILTER); +var nodebackForPromise = _dereq_("./nodeback"); +var errorObj = util.errorObj; +var tryCatch = util.tryCatch; +function check(self, executor) { + if (typeof executor !== "function") { + throw new TypeError("expecting a function but got " + util.classString(executor)); + } + if (self.constructor !== Promise) { + throw new TypeError("the promise constructor cannot be invoked directly\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } +} + +function Promise(executor) { + this._bitField = 0; + this._fulfillmentHandler0 = undefined; + this._rejectionHandler0 = undefined; + this._promise0 = undefined; + this._receiver0 = undefined; + if (executor !== INTERNAL) { + check(this, executor); + this._resolveFromExecutor(executor); + } + this._promiseCreated(); + this._fireEvent("promiseCreated", this); +} + +Promise.prototype.toString = function () { + return "[object Promise]"; +}; + +Promise.prototype.caught = Promise.prototype["catch"] = function (fn) { + var len = arguments.length; + if (len > 1) { + var catchInstances = new Array(len - 1), + j = 0, i; + for (i = 0; i < len - 1; ++i) { + var item = arguments[i]; + if (util.isObject(item)) { + catchInstances[j++] = item; + } else { + return apiRejection("expecting an object but got " + util.classString(item)); + } + } + catchInstances.length = j; + fn = arguments[i]; + return this.then(undefined, catchFilter(catchInstances, fn, this)); + } + return this.then(undefined, fn); +}; + +Promise.prototype.reflect = function () { + return this._then(reflectHandler, + reflectHandler, undefined, this, undefined); +}; + +Promise.prototype.then = function (didFulfill, didReject) { + if (debug.warnings() && arguments.length > 0 && + typeof didFulfill !== "function" && + typeof didReject !== "function") { + var msg = ".then() only accepts functions but was passed: " + + util.classString(didFulfill); + if (arguments.length > 1) { + msg += ", " + util.classString(didReject); + } + this._warn(msg); + } + return this._then(didFulfill, didReject, undefined, undefined, undefined); +}; + +Promise.prototype.done = function (didFulfill, didReject) { + var promise = + this._then(didFulfill, didReject, undefined, undefined, undefined); + promise._setIsFinal(); +}; + +Promise.prototype.spread = function (fn) { + if (typeof fn !== "function") { + return apiRejection("expecting a function but got " + util.classString(fn)); + } + return this.all()._then(fn, undefined, undefined, APPLY, undefined); +}; + +Promise.prototype.toJSON = function () { + var ret = { + isFulfilled: false, + isRejected: false, + fulfillmentValue: undefined, + rejectionReason: undefined + }; + if (this.isFulfilled()) { + ret.fulfillmentValue = this.value(); + ret.isFulfilled = true; + } else if (this.isRejected()) { + ret.rejectionReason = this.reason(); + ret.isRejected = true; + } + return ret; +}; + +Promise.prototype.all = function () { + if (arguments.length > 0) { + this._warn(".all() was passed arguments but it does not take any"); + } + return new PromiseArray(this).promise(); +}; + +Promise.prototype.error = function (fn) { + return this.caught(util.originatesFromRejection, fn); +}; + +Promise.is = function (val) { + return val instanceof Promise; +}; + +Promise.fromNode = Promise.fromCallback = function(fn) { + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + var multiArgs = arguments.length > 1 ? !!Object(arguments[1]).multiArgs + : false; + var result = tryCatch(fn)(nodebackForPromise(ret, multiArgs)); + if (result === errorObj) { + ret._rejectCallback(result.e, true); + } + if (!ret._isFateSealed()) ret._setAsyncGuaranteed(); + return ret; +}; + +Promise.all = function (promises) { + return new PromiseArray(promises).promise(); +}; + +Promise.cast = function (obj) { + var ret = tryConvertToPromise(obj); + if (!(ret instanceof Promise)) { + ret = new Promise(INTERNAL); + ret._captureStackTrace(); + ret._setFulfilled(); + ret._rejectionHandler0 = obj; + } + return ret; +}; + +Promise.resolve = Promise.fulfilled = Promise.cast; + +Promise.reject = Promise.rejected = function (reason) { + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + ret._rejectCallback(reason, true); + return ret; +}; + +Promise.setScheduler = function(fn) { + if (typeof fn !== "function") { + throw new TypeError("expecting a function but got " + util.classString(fn)); + } + return async.setScheduler(fn); +}; + +Promise.prototype._then = function ( + didFulfill, + didReject, + _, receiver, + internalData +) { + var haveInternalData = internalData !== undefined; + var promise = haveInternalData ? internalData : new Promise(INTERNAL); + var target = this._target(); + var bitField = target._bitField; + + if (!haveInternalData) { + promise._propagateFrom(this, 3); + promise._captureStackTrace(); + if (receiver === undefined && + ((this._bitField & 2097152) !== 0)) { + if (!((bitField & 50397184) === 0)) { + receiver = this._boundValue(); + } else { + receiver = target === this ? undefined : this._boundTo; + } + } + this._fireEvent("promiseChained", this, promise); + } + + var domain = getDomain(); + if (!((bitField & 50397184) === 0)) { + var handler, value, settler = target._settlePromiseCtx; + if (((bitField & 33554432) !== 0)) { + value = target._rejectionHandler0; + handler = didFulfill; + } else if (((bitField & 16777216) !== 0)) { + value = target._fulfillmentHandler0; + handler = didReject; + target._unsetRejectionIsUnhandled(); + } else { + settler = target._settlePromiseLateCancellationObserver; + value = new CancellationError("late cancellation observer"); + target._attachExtraTrace(value); + handler = didReject; + } + + async.invoke(settler, target, { + handler: domain === null ? handler + : (typeof handler === "function" && domain.bind(handler)), + promise: promise, + receiver: receiver, + value: value + }); + } else { + target._addCallbacks(didFulfill, didReject, promise, receiver, domain); + } + + return promise; +}; + +Promise.prototype._length = function () { + return this._bitField & 65535; +}; + +Promise.prototype._isFateSealed = function () { + return (this._bitField & 117506048) !== 0; +}; + +Promise.prototype._isFollowing = function () { + return (this._bitField & 67108864) === 67108864; +}; + +Promise.prototype._setLength = function (len) { + this._bitField = (this._bitField & -65536) | + (len & 65535); +}; + +Promise.prototype._setFulfilled = function () { + this._bitField = this._bitField | 33554432; + this._fireEvent("promiseFulfilled", this); +}; + +Promise.prototype._setRejected = function () { + this._bitField = this._bitField | 16777216; + this._fireEvent("promiseRejected", this); +}; + +Promise.prototype._setFollowing = function () { + this._bitField = this._bitField | 67108864; + this._fireEvent("promiseResolved", this); +}; + +Promise.prototype._setIsFinal = function () { + this._bitField = this._bitField | 4194304; +}; + +Promise.prototype._isFinal = function () { + return (this._bitField & 4194304) > 0; +}; + +Promise.prototype._unsetCancelled = function() { + this._bitField = this._bitField & (~65536); +}; + +Promise.prototype._setCancelled = function() { + this._bitField = this._bitField | 65536; + this._fireEvent("promiseCancelled", this); +}; + +Promise.prototype._setAsyncGuaranteed = function() { + if (async.hasCustomScheduler()) return; + this._bitField = this._bitField | 134217728; +}; + +Promise.prototype._receiverAt = function (index) { + var ret = index === 0 ? this._receiver0 : this[ + index * 4 - 4 + 3]; + if (ret === UNDEFINED_BINDING) { + return undefined; + } else if (ret === undefined && this._isBound()) { + return this._boundValue(); + } + return ret; +}; + +Promise.prototype._promiseAt = function (index) { + return this[ + index * 4 - 4 + 2]; +}; + +Promise.prototype._fulfillmentHandlerAt = function (index) { + return this[ + index * 4 - 4 + 0]; +}; + +Promise.prototype._rejectionHandlerAt = function (index) { + return this[ + index * 4 - 4 + 1]; +}; + +Promise.prototype._boundValue = function() {}; + +Promise.prototype._migrateCallback0 = function (follower) { + var bitField = follower._bitField; + var fulfill = follower._fulfillmentHandler0; + var reject = follower._rejectionHandler0; + var promise = follower._promise0; + var receiver = follower._receiverAt(0); + if (receiver === undefined) receiver = UNDEFINED_BINDING; + this._addCallbacks(fulfill, reject, promise, receiver, null); +}; + +Promise.prototype._migrateCallbackAt = function (follower, index) { + var fulfill = follower._fulfillmentHandlerAt(index); + var reject = follower._rejectionHandlerAt(index); + var promise = follower._promiseAt(index); + var receiver = follower._receiverAt(index); + if (receiver === undefined) receiver = UNDEFINED_BINDING; + this._addCallbacks(fulfill, reject, promise, receiver, null); +}; + +Promise.prototype._addCallbacks = function ( + fulfill, + reject, + promise, + receiver, + domain +) { + var index = this._length(); + + if (index >= 65535 - 4) { + index = 0; + this._setLength(0); + } + + if (index === 0) { + this._promise0 = promise; + this._receiver0 = receiver; + if (typeof fulfill === "function") { + this._fulfillmentHandler0 = + domain === null ? fulfill : domain.bind(fulfill); + } + if (typeof reject === "function") { + this._rejectionHandler0 = + domain === null ? reject : domain.bind(reject); + } + } else { + var base = index * 4 - 4; + this[base + 2] = promise; + this[base + 3] = receiver; + if (typeof fulfill === "function") { + this[base + 0] = + domain === null ? fulfill : domain.bind(fulfill); + } + if (typeof reject === "function") { + this[base + 1] = + domain === null ? reject : domain.bind(reject); + } + } + this._setLength(index + 1); + return index; +}; + +Promise.prototype._proxy = function (proxyable, arg) { + this._addCallbacks(undefined, undefined, arg, proxyable, null); +}; + +Promise.prototype._resolveCallback = function(value, shouldBind) { + if (((this._bitField & 117506048) !== 0)) return; + if (value === this) + return this._rejectCallback(makeSelfResolutionError(), false); + var maybePromise = tryConvertToPromise(value, this); + if (!(maybePromise instanceof Promise)) return this._fulfill(value); + + if (shouldBind) this._propagateFrom(maybePromise, 2); + + var promise = maybePromise._target(); + + if (promise === this) { + this._reject(makeSelfResolutionError()); + return; + } + + var bitField = promise._bitField; + if (((bitField & 50397184) === 0)) { + var len = this._length(); + if (len > 0) promise._migrateCallback0(this); + for (var i = 1; i < len; ++i) { + promise._migrateCallbackAt(this, i); + } + this._setFollowing(); + this._setLength(0); + this._setFollowee(promise); + } else if (((bitField & 33554432) !== 0)) { + this._fulfill(promise._value()); + } else if (((bitField & 16777216) !== 0)) { + this._reject(promise._reason()); + } else { + var reason = new CancellationError("late cancellation observer"); + promise._attachExtraTrace(reason); + this._reject(reason); + } +}; + +Promise.prototype._rejectCallback = +function(reason, synchronous, ignoreNonErrorWarnings) { + var trace = util.ensureErrorObject(reason); + var hasStack = trace === reason; + if (!hasStack && !ignoreNonErrorWarnings && debug.warnings()) { + var message = "a promise was rejected with a non-error: " + + util.classString(reason); + this._warn(message, true); + } + this._attachExtraTrace(trace, synchronous ? hasStack : false); + this._reject(reason); +}; + +Promise.prototype._resolveFromExecutor = function (executor) { + var promise = this; + this._captureStackTrace(); + this._pushContext(); + var synchronous = true; + var r = this._execute(executor, function(value) { + promise._resolveCallback(value); + }, function (reason) { + promise._rejectCallback(reason, synchronous); + }); + synchronous = false; + this._popContext(); + + if (r !== undefined) { + promise._rejectCallback(r, true); + } +}; + +Promise.prototype._settlePromiseFromHandler = function ( + handler, receiver, value, promise +) { + var bitField = promise._bitField; + if (((bitField & 65536) !== 0)) return; + promise._pushContext(); + var x; + if (receiver === APPLY) { + if (!value || typeof value.length !== "number") { + x = errorObj; + x.e = new TypeError("cannot .spread() a non-array: " + + util.classString(value)); + } else { + x = tryCatch(handler).apply(this._boundValue(), value); + } + } else { + x = tryCatch(handler).call(receiver, value); + } + var promiseCreated = promise._popContext(); + bitField = promise._bitField; + if (((bitField & 65536) !== 0)) return; + + if (x === NEXT_FILTER) { + promise._reject(value); + } else if (x === errorObj) { + promise._rejectCallback(x.e, false); + } else { + debug.checkForgottenReturns(x, promiseCreated, "", promise, this); + promise._resolveCallback(x); + } +}; + +Promise.prototype._target = function() { + var ret = this; + while (ret._isFollowing()) ret = ret._followee(); + return ret; +}; + +Promise.prototype._followee = function() { + return this._rejectionHandler0; +}; + +Promise.prototype._setFollowee = function(promise) { + this._rejectionHandler0 = promise; +}; + +Promise.prototype._settlePromise = function(promise, handler, receiver, value) { + var isPromise = promise instanceof Promise; + var bitField = this._bitField; + var asyncGuaranteed = ((bitField & 134217728) !== 0); + if (((bitField & 65536) !== 0)) { + if (isPromise) promise._invokeInternalOnCancel(); + + if (receiver instanceof PassThroughHandlerContext && + receiver.isFinallyHandler()) { + receiver.cancelPromise = promise; + if (tryCatch(handler).call(receiver, value) === errorObj) { + promise._reject(errorObj.e); + } + } else if (handler === reflectHandler) { + promise._fulfill(reflectHandler.call(receiver)); + } else if (receiver instanceof Proxyable) { + receiver._promiseCancelled(promise); + } else if (isPromise || promise instanceof PromiseArray) { + promise._cancel(); + } else { + receiver.cancel(); + } + } else if (typeof handler === "function") { + if (!isPromise) { + handler.call(receiver, value, promise); + } else { + if (asyncGuaranteed) promise._setAsyncGuaranteed(); + this._settlePromiseFromHandler(handler, receiver, value, promise); + } + } else if (receiver instanceof Proxyable) { + if (!receiver._isResolved()) { + if (((bitField & 33554432) !== 0)) { + receiver._promiseFulfilled(value, promise); + } else { + receiver._promiseRejected(value, promise); + } + } + } else if (isPromise) { + if (asyncGuaranteed) promise._setAsyncGuaranteed(); + if (((bitField & 33554432) !== 0)) { + promise._fulfill(value); + } else { + promise._reject(value); + } + } +}; + +Promise.prototype._settlePromiseLateCancellationObserver = function(ctx) { + var handler = ctx.handler; + var promise = ctx.promise; + var receiver = ctx.receiver; + var value = ctx.value; + if (typeof handler === "function") { + if (!(promise instanceof Promise)) { + handler.call(receiver, value, promise); + } else { + this._settlePromiseFromHandler(handler, receiver, value, promise); + } + } else if (promise instanceof Promise) { + promise._reject(value); + } +}; + +Promise.prototype._settlePromiseCtx = function(ctx) { + this._settlePromise(ctx.promise, ctx.handler, ctx.receiver, ctx.value); +}; + +Promise.prototype._settlePromise0 = function(handler, value, bitField) { + var promise = this._promise0; + var receiver = this._receiverAt(0); + this._promise0 = undefined; + this._receiver0 = undefined; + this._settlePromise(promise, handler, receiver, value); +}; + +Promise.prototype._clearCallbackDataAtIndex = function(index) { + var base = index * 4 - 4; + this[base + 2] = + this[base + 3] = + this[base + 0] = + this[base + 1] = undefined; +}; + +Promise.prototype._fulfill = function (value) { + var bitField = this._bitField; + if (((bitField & 117506048) >>> 16)) return; + if (value === this) { + var err = makeSelfResolutionError(); + this._attachExtraTrace(err); + return this._reject(err); + } + this._setFulfilled(); + this._rejectionHandler0 = value; + + if ((bitField & 65535) > 0) { + if (((bitField & 134217728) !== 0)) { + this._settlePromises(); + } else { + async.settlePromises(this); + } + } +}; + +Promise.prototype._reject = function (reason) { + var bitField = this._bitField; + if (((bitField & 117506048) >>> 16)) return; + this._setRejected(); + this._fulfillmentHandler0 = reason; + + if (this._isFinal()) { + return async.fatalError(reason, util.isNode); + } + + if ((bitField & 65535) > 0) { + async.settlePromises(this); + } else { + this._ensurePossibleRejectionHandled(); + } +}; + +Promise.prototype._fulfillPromises = function (len, value) { + for (var i = 1; i < len; i++) { + var handler = this._fulfillmentHandlerAt(i); + var promise = this._promiseAt(i); + var receiver = this._receiverAt(i); + this._clearCallbackDataAtIndex(i); + this._settlePromise(promise, handler, receiver, value); + } +}; + +Promise.prototype._rejectPromises = function (len, reason) { + for (var i = 1; i < len; i++) { + var handler = this._rejectionHandlerAt(i); + var promise = this._promiseAt(i); + var receiver = this._receiverAt(i); + this._clearCallbackDataAtIndex(i); + this._settlePromise(promise, handler, receiver, reason); + } +}; + +Promise.prototype._settlePromises = function () { + var bitField = this._bitField; + var len = (bitField & 65535); + + if (len > 0) { + if (((bitField & 16842752) !== 0)) { + var reason = this._fulfillmentHandler0; + this._settlePromise0(this._rejectionHandler0, reason, bitField); + this._rejectPromises(len, reason); + } else { + var value = this._rejectionHandler0; + this._settlePromise0(this._fulfillmentHandler0, value, bitField); + this._fulfillPromises(len, value); + } + this._setLength(0); + } + this._clearCancellationData(); +}; + +Promise.prototype._settledValue = function() { + var bitField = this._bitField; + if (((bitField & 33554432) !== 0)) { + return this._rejectionHandler0; + } else if (((bitField & 16777216) !== 0)) { + return this._fulfillmentHandler0; + } +}; + +function deferResolve(v) {this.promise._resolveCallback(v);} +function deferReject(v) {this.promise._rejectCallback(v, false);} + +Promise.defer = Promise.pending = function() { + debug.deprecated("Promise.defer", "new Promise"); + var promise = new Promise(INTERNAL); + return { + promise: promise, + resolve: deferResolve, + reject: deferReject + }; +}; + +util.notEnumerableProp(Promise, + "_makeSelfResolutionError", + makeSelfResolutionError); + +_dereq_("./method")(Promise, INTERNAL, tryConvertToPromise, apiRejection, + debug); +_dereq_("./bind")(Promise, INTERNAL, tryConvertToPromise, debug); +_dereq_("./cancel")(Promise, PromiseArray, apiRejection, debug); +_dereq_("./direct_resolve")(Promise); +_dereq_("./synchronous_inspection")(Promise); +_dereq_("./join")( + Promise, PromiseArray, tryConvertToPromise, INTERNAL, debug); +Promise.Promise = Promise; +Promise.version = "3.4.0"; +_dereq_('./map.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug); +_dereq_('./call_get.js')(Promise); +_dereq_('./using.js')(Promise, apiRejection, tryConvertToPromise, createContext, INTERNAL, debug); +_dereq_('./timers.js')(Promise, INTERNAL, debug); +_dereq_('./generators.js')(Promise, apiRejection, INTERNAL, tryConvertToPromise, Proxyable, debug); +_dereq_('./nodeify.js')(Promise); +_dereq_('./promisify.js')(Promise, INTERNAL); +_dereq_('./props.js')(Promise, PromiseArray, tryConvertToPromise, apiRejection); +_dereq_('./race.js')(Promise, INTERNAL, tryConvertToPromise, apiRejection); +_dereq_('./reduce.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug); +_dereq_('./settle.js')(Promise, PromiseArray, debug); +_dereq_('./some.js')(Promise, PromiseArray, apiRejection); +_dereq_('./filter.js')(Promise, INTERNAL); +_dereq_('./each.js')(Promise, INTERNAL); +_dereq_('./any.js')(Promise); + + util.toFastProperties(Promise); + util.toFastProperties(Promise.prototype); + function fillTypes(value) { + var p = new Promise(INTERNAL); + p._fulfillmentHandler0 = value; + p._rejectionHandler0 = value; + p._promise0 = value; + p._receiver0 = value; + } + // Complete slack tracking, opt out of field-type tracking and + // stabilize map + fillTypes({a: 1}); + fillTypes({b: 2}); + fillTypes({c: 3}); + fillTypes(1); + fillTypes(function(){}); + fillTypes(undefined); + fillTypes(false); + fillTypes(new Promise(INTERNAL)); + debug.setBounds(Async.firstLineError, util.lastLineError); + return Promise; + +}; + +},{"./any.js":1,"./async":2,"./bind":3,"./call_get.js":5,"./cancel":6,"./catch_filter":7,"./context":8,"./debuggability":9,"./direct_resolve":10,"./each.js":11,"./errors":12,"./es5":13,"./filter.js":14,"./finally":15,"./generators.js":16,"./join":17,"./map.js":18,"./method":19,"./nodeback":20,"./nodeify.js":21,"./promise_array":23,"./promisify.js":24,"./props.js":25,"./race.js":27,"./reduce.js":28,"./settle.js":30,"./some.js":31,"./synchronous_inspection":32,"./thenables":33,"./timers.js":34,"./using.js":35,"./util":36}],23:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, INTERNAL, tryConvertToPromise, + apiRejection, Proxyable) { +var util = _dereq_("./util"); +var isArray = util.isArray; + +function toResolutionValue(val) { + switch(val) { + case -2: return []; + case -3: return {}; + } +} + +function PromiseArray(values) { + var promise = this._promise = new Promise(INTERNAL); + if (values instanceof Promise) { + promise._propagateFrom(values, 3); + } + promise._setOnCancel(this); + this._values = values; + this._length = 0; + this._totalResolved = 0; + this._init(undefined, -2); +} +util.inherits(PromiseArray, Proxyable); + +PromiseArray.prototype.length = function () { + return this._length; +}; + +PromiseArray.prototype.promise = function () { + return this._promise; +}; + +PromiseArray.prototype._init = function init(_, resolveValueIfEmpty) { + var values = tryConvertToPromise(this._values, this._promise); + if (values instanceof Promise) { + values = values._target(); + var bitField = values._bitField; + ; + this._values = values; + + if (((bitField & 50397184) === 0)) { + this._promise._setAsyncGuaranteed(); + return values._then( + init, + this._reject, + undefined, + this, + resolveValueIfEmpty + ); + } else if (((bitField & 33554432) !== 0)) { + values = values._value(); + } else if (((bitField & 16777216) !== 0)) { + return this._reject(values._reason()); + } else { + return this._cancel(); + } + } + values = util.asArray(values); + if (values === null) { + var err = apiRejection( + "expecting an array or an iterable object but got " + util.classString(values)).reason(); + this._promise._rejectCallback(err, false); + return; + } + + if (values.length === 0) { + if (resolveValueIfEmpty === -5) { + this._resolveEmptyArray(); + } + else { + this._resolve(toResolutionValue(resolveValueIfEmpty)); + } + return; + } + this._iterate(values); +}; + +PromiseArray.prototype._iterate = function(values) { + var len = this.getActualLength(values.length); + this._length = len; + this._values = this.shouldCopyValues() ? new Array(len) : this._values; + var result = this._promise; + var isResolved = false; + var bitField = null; + for (var i = 0; i < len; ++i) { + var maybePromise = tryConvertToPromise(values[i], result); + + if (maybePromise instanceof Promise) { + maybePromise = maybePromise._target(); + bitField = maybePromise._bitField; + } else { + bitField = null; + } + + if (isResolved) { + if (bitField !== null) { + maybePromise.suppressUnhandledRejections(); + } + } else if (bitField !== null) { + if (((bitField & 50397184) === 0)) { + maybePromise._proxy(this, i); + this._values[i] = maybePromise; + } else if (((bitField & 33554432) !== 0)) { + isResolved = this._promiseFulfilled(maybePromise._value(), i); + } else if (((bitField & 16777216) !== 0)) { + isResolved = this._promiseRejected(maybePromise._reason(), i); + } else { + isResolved = this._promiseCancelled(i); + } + } else { + isResolved = this._promiseFulfilled(maybePromise, i); + } + } + if (!isResolved) result._setAsyncGuaranteed(); +}; + +PromiseArray.prototype._isResolved = function () { + return this._values === null; +}; + +PromiseArray.prototype._resolve = function (value) { + this._values = null; + this._promise._fulfill(value); +}; + +PromiseArray.prototype._cancel = function() { + if (this._isResolved() || !this._promise.isCancellable()) return; + this._values = null; + this._promise._cancel(); +}; + +PromiseArray.prototype._reject = function (reason) { + this._values = null; + this._promise._rejectCallback(reason, false); +}; + +PromiseArray.prototype._promiseFulfilled = function (value, index) { + this._values[index] = value; + var totalResolved = ++this._totalResolved; + if (totalResolved >= this._length) { + this._resolve(this._values); + return true; + } + return false; +}; + +PromiseArray.prototype._promiseCancelled = function() { + this._cancel(); + return true; +}; + +PromiseArray.prototype._promiseRejected = function (reason) { + this._totalResolved++; + this._reject(reason); + return true; +}; + +PromiseArray.prototype._resultCancelled = function() { + if (this._isResolved()) return; + var values = this._values; + this._cancel(); + if (values instanceof Promise) { + values.cancel(); + } else { + for (var i = 0; i < values.length; ++i) { + if (values[i] instanceof Promise) { + values[i].cancel(); + } + } + } +}; + +PromiseArray.prototype.shouldCopyValues = function () { + return true; +}; + +PromiseArray.prototype.getActualLength = function (len) { + return len; +}; + +return PromiseArray; +}; + +},{"./util":36}],24:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, INTERNAL) { +var THIS = {}; +var util = _dereq_("./util"); +var nodebackForPromise = _dereq_("./nodeback"); +var withAppended = util.withAppended; +var maybeWrapAsError = util.maybeWrapAsError; +var canEvaluate = util.canEvaluate; +var TypeError = _dereq_("./errors").TypeError; +var defaultSuffix = "Async"; +var defaultPromisified = {__isPromisified__: true}; +var noCopyProps = [ + "arity", "length", + "name", + "arguments", + "caller", + "callee", + "prototype", + "__isPromisified__" +]; +var noCopyPropsPattern = new RegExp("^(?:" + noCopyProps.join("|") + ")$"); + +var defaultFilter = function(name) { + return util.isIdentifier(name) && + name.charAt(0) !== "_" && + name !== "constructor"; +}; + +function propsFilter(key) { + return !noCopyPropsPattern.test(key); +} + +function isPromisified(fn) { + try { + return fn.__isPromisified__ === true; + } + catch (e) { + return false; + } +} + +function hasPromisified(obj, key, suffix) { + var val = util.getDataPropertyOrDefault(obj, key + suffix, + defaultPromisified); + return val ? isPromisified(val) : false; +} +function checkValid(ret, suffix, suffixRegexp) { + for (var i = 0; i < ret.length; i += 2) { + var key = ret[i]; + if (suffixRegexp.test(key)) { + var keyWithoutAsyncSuffix = key.replace(suffixRegexp, ""); + for (var j = 0; j < ret.length; j += 2) { + if (ret[j] === keyWithoutAsyncSuffix) { + throw new TypeError("Cannot promisify an API that has normal methods with '%s'-suffix\u000a\u000a See http://goo.gl/MqrFmX\u000a" + .replace("%s", suffix)); + } + } + } + } +} + +function promisifiableMethods(obj, suffix, suffixRegexp, filter) { + var keys = util.inheritedDataKeys(obj); + var ret = []; + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + var value = obj[key]; + var passesDefaultFilter = filter === defaultFilter + ? true : defaultFilter(key, value, obj); + if (typeof value === "function" && + !isPromisified(value) && + !hasPromisified(obj, key, suffix) && + filter(key, value, obj, passesDefaultFilter)) { + ret.push(key, value); + } + } + checkValid(ret, suffix, suffixRegexp); + return ret; +} + +var escapeIdentRegex = function(str) { + return str.replace(/([$])/, "\\$"); +}; + +var makeNodePromisifiedEval; +if (!true) { +var switchCaseArgumentOrder = function(likelyArgumentCount) { + var ret = [likelyArgumentCount]; + var min = Math.max(0, likelyArgumentCount - 1 - 3); + for(var i = likelyArgumentCount - 1; i >= min; --i) { + ret.push(i); + } + for(var i = likelyArgumentCount + 1; i <= 3; ++i) { + ret.push(i); + } + return ret; +}; + +var argumentSequence = function(argumentCount) { + return util.filledRange(argumentCount, "_arg", ""); +}; + +var parameterDeclaration = function(parameterCount) { + return util.filledRange( + Math.max(parameterCount, 3), "_arg", ""); +}; + +var parameterCount = function(fn) { + if (typeof fn.length === "number") { + return Math.max(Math.min(fn.length, 1023 + 1), 0); + } + return 0; +}; + +makeNodePromisifiedEval = +function(callback, receiver, originalName, fn, _, multiArgs) { + var newParameterCount = Math.max(0, parameterCount(fn) - 1); + var argumentOrder = switchCaseArgumentOrder(newParameterCount); + var shouldProxyThis = typeof callback === "string" || receiver === THIS; + + function generateCallForArgumentCount(count) { + var args = argumentSequence(count).join(", "); + var comma = count > 0 ? ", " : ""; + var ret; + if (shouldProxyThis) { + ret = "ret = callback.call(this, {{args}}, nodeback); break;\n"; + } else { + ret = receiver === undefined + ? "ret = callback({{args}}, nodeback); break;\n" + : "ret = callback.call(receiver, {{args}}, nodeback); break;\n"; + } + return ret.replace("{{args}}", args).replace(", ", comma); + } + + function generateArgumentSwitchCase() { + var ret = ""; + for (var i = 0; i < argumentOrder.length; ++i) { + ret += "case " + argumentOrder[i] +":" + + generateCallForArgumentCount(argumentOrder[i]); + } + + ret += " \n\ + default: \n\ + var args = new Array(len + 1); \n\ + var i = 0; \n\ + for (var i = 0; i < len; ++i) { \n\ + args[i] = arguments[i]; \n\ + } \n\ + args[i] = nodeback; \n\ + [CodeForCall] \n\ + break; \n\ + ".replace("[CodeForCall]", (shouldProxyThis + ? "ret = callback.apply(this, args);\n" + : "ret = callback.apply(receiver, args);\n")); + return ret; + } + + var getFunctionCode = typeof callback === "string" + ? ("this != null ? this['"+callback+"'] : fn") + : "fn"; + var body = "'use strict'; \n\ + var ret = function (Parameters) { \n\ + 'use strict'; \n\ + var len = arguments.length; \n\ + var promise = new Promise(INTERNAL); \n\ + promise._captureStackTrace(); \n\ + var nodeback = nodebackForPromise(promise, " + multiArgs + "); \n\ + var ret; \n\ + var callback = tryCatch([GetFunctionCode]); \n\ + switch(len) { \n\ + [CodeForSwitchCase] \n\ + } \n\ + if (ret === errorObj) { \n\ + promise._rejectCallback(maybeWrapAsError(ret.e), true, true);\n\ + } \n\ + if (!promise._isFateSealed()) promise._setAsyncGuaranteed(); \n\ + return promise; \n\ + }; \n\ + notEnumerableProp(ret, '__isPromisified__', true); \n\ + return ret; \n\ + ".replace("[CodeForSwitchCase]", generateArgumentSwitchCase()) + .replace("[GetFunctionCode]", getFunctionCode); + body = body.replace("Parameters", parameterDeclaration(newParameterCount)); + return new Function("Promise", + "fn", + "receiver", + "withAppended", + "maybeWrapAsError", + "nodebackForPromise", + "tryCatch", + "errorObj", + "notEnumerableProp", + "INTERNAL", + body)( + Promise, + fn, + receiver, + withAppended, + maybeWrapAsError, + nodebackForPromise, + util.tryCatch, + util.errorObj, + util.notEnumerableProp, + INTERNAL); +}; +} + +function makeNodePromisifiedClosure(callback, receiver, _, fn, __, multiArgs) { + var defaultThis = (function() {return this;})(); + var method = callback; + if (typeof method === "string") { + callback = fn; + } + function promisified() { + var _receiver = receiver; + if (receiver === THIS) _receiver = this; + var promise = new Promise(INTERNAL); + promise._captureStackTrace(); + var cb = typeof method === "string" && this !== defaultThis + ? this[method] : callback; + var fn = nodebackForPromise(promise, multiArgs); + try { + cb.apply(_receiver, withAppended(arguments, fn)); + } catch(e) { + promise._rejectCallback(maybeWrapAsError(e), true, true); + } + if (!promise._isFateSealed()) promise._setAsyncGuaranteed(); + return promise; + } + util.notEnumerableProp(promisified, "__isPromisified__", true); + return promisified; +} + +var makeNodePromisified = canEvaluate + ? makeNodePromisifiedEval + : makeNodePromisifiedClosure; + +function promisifyAll(obj, suffix, filter, promisifier, multiArgs) { + var suffixRegexp = new RegExp(escapeIdentRegex(suffix) + "$"); + var methods = + promisifiableMethods(obj, suffix, suffixRegexp, filter); + + for (var i = 0, len = methods.length; i < len; i+= 2) { + var key = methods[i]; + var fn = methods[i+1]; + var promisifiedKey = key + suffix; + if (promisifier === makeNodePromisified) { + obj[promisifiedKey] = + makeNodePromisified(key, THIS, key, fn, suffix, multiArgs); + } else { + var promisified = promisifier(fn, function() { + return makeNodePromisified(key, THIS, key, + fn, suffix, multiArgs); + }); + util.notEnumerableProp(promisified, "__isPromisified__", true); + obj[promisifiedKey] = promisified; + } + } + util.toFastProperties(obj); + return obj; +} + +function promisify(callback, receiver, multiArgs) { + return makeNodePromisified(callback, receiver, undefined, + callback, null, multiArgs); +} + +Promise.promisify = function (fn, options) { + if (typeof fn !== "function") { + throw new TypeError("expecting a function but got " + util.classString(fn)); + } + if (isPromisified(fn)) { + return fn; + } + options = Object(options); + var receiver = options.context === undefined ? THIS : options.context; + var multiArgs = !!options.multiArgs; + var ret = promisify(fn, receiver, multiArgs); + util.copyDescriptors(fn, ret, propsFilter); + return ret; +}; + +Promise.promisifyAll = function (target, options) { + if (typeof target !== "function" && typeof target !== "object") { + throw new TypeError("the target of promisifyAll must be an object or a function\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + options = Object(options); + var multiArgs = !!options.multiArgs; + var suffix = options.suffix; + if (typeof suffix !== "string") suffix = defaultSuffix; + var filter = options.filter; + if (typeof filter !== "function") filter = defaultFilter; + var promisifier = options.promisifier; + if (typeof promisifier !== "function") promisifier = makeNodePromisified; + + if (!util.isIdentifier(suffix)) { + throw new RangeError("suffix must be a valid identifier\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + + var keys = util.inheritedDataKeys(target); + for (var i = 0; i < keys.length; ++i) { + var value = target[keys[i]]; + if (keys[i] !== "constructor" && + util.isClass(value)) { + promisifyAll(value.prototype, suffix, filter, promisifier, + multiArgs); + promisifyAll(value, suffix, filter, promisifier, multiArgs); + } + } + + return promisifyAll(target, suffix, filter, promisifier, multiArgs); +}; +}; + + +},{"./errors":12,"./nodeback":20,"./util":36}],25:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function( + Promise, PromiseArray, tryConvertToPromise, apiRejection) { +var util = _dereq_("./util"); +var isObject = util.isObject; +var es5 = _dereq_("./es5"); +var Es6Map; +if (typeof Map === "function") Es6Map = Map; + +var mapToEntries = (function() { + var index = 0; + var size = 0; + + function extractEntry(value, key) { + this[index] = value; + this[index + size] = key; + index++; + } + + return function mapToEntries(map) { + size = map.size; + index = 0; + var ret = new Array(map.size * 2); + map.forEach(extractEntry, ret); + return ret; + }; +})(); + +var entriesToMap = function(entries) { + var ret = new Es6Map(); + var length = entries.length / 2 | 0; + for (var i = 0; i < length; ++i) { + var key = entries[length + i]; + var value = entries[i]; + ret.set(key, value); + } + return ret; +}; + +function PropertiesPromiseArray(obj) { + var isMap = false; + var entries; + if (Es6Map !== undefined && obj instanceof Es6Map) { + entries = mapToEntries(obj); + isMap = true; + } else { + var keys = es5.keys(obj); + var len = keys.length; + entries = new Array(len * 2); + for (var i = 0; i < len; ++i) { + var key = keys[i]; + entries[i] = obj[key]; + entries[i + len] = key; + } + } + this.constructor$(entries); + this._isMap = isMap; + this._init$(undefined, -3); +} +util.inherits(PropertiesPromiseArray, PromiseArray); + +PropertiesPromiseArray.prototype._init = function () {}; + +PropertiesPromiseArray.prototype._promiseFulfilled = function (value, index) { + this._values[index] = value; + var totalResolved = ++this._totalResolved; + if (totalResolved >= this._length) { + var val; + if (this._isMap) { + val = entriesToMap(this._values); + } else { + val = {}; + var keyOffset = this.length(); + for (var i = 0, len = this.length(); i < len; ++i) { + val[this._values[i + keyOffset]] = this._values[i]; + } + } + this._resolve(val); + return true; + } + return false; +}; + +PropertiesPromiseArray.prototype.shouldCopyValues = function () { + return false; +}; + +PropertiesPromiseArray.prototype.getActualLength = function (len) { + return len >> 1; +}; + +function props(promises) { + var ret; + var castValue = tryConvertToPromise(promises); + + if (!isObject(castValue)) { + return apiRejection("cannot await properties of a non-object\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } else if (castValue instanceof Promise) { + ret = castValue._then( + Promise.props, undefined, undefined, undefined, undefined); + } else { + ret = new PropertiesPromiseArray(castValue).promise(); + } + + if (castValue instanceof Promise) { + ret._propagateFrom(castValue, 2); + } + return ret; +} + +Promise.prototype.props = function () { + return props(this); +}; + +Promise.props = function (promises) { + return props(promises); +}; +}; + +},{"./es5":13,"./util":36}],26:[function(_dereq_,module,exports){ +"use strict"; +function arrayMove(src, srcIndex, dst, dstIndex, len) { + for (var j = 0; j < len; ++j) { + dst[j + dstIndex] = src[j + srcIndex]; + src[j + srcIndex] = void 0; + } +} + +function Queue(capacity) { + this._capacity = capacity; + this._length = 0; + this._front = 0; +} + +Queue.prototype._willBeOverCapacity = function (size) { + return this._capacity < size; +}; + +Queue.prototype._pushOne = function (arg) { + var length = this.length(); + this._checkCapacity(length + 1); + var i = (this._front + length) & (this._capacity - 1); + this[i] = arg; + this._length = length + 1; +}; + +Queue.prototype._unshiftOne = function(value) { + var capacity = this._capacity; + this._checkCapacity(this.length() + 1); + var front = this._front; + var i = (((( front - 1 ) & + ( capacity - 1) ) ^ capacity ) - capacity ); + this[i] = value; + this._front = i; + this._length = this.length() + 1; +}; + +Queue.prototype.unshift = function(fn, receiver, arg) { + this._unshiftOne(arg); + this._unshiftOne(receiver); + this._unshiftOne(fn); +}; + +Queue.prototype.push = function (fn, receiver, arg) { + var length = this.length() + 3; + if (this._willBeOverCapacity(length)) { + this._pushOne(fn); + this._pushOne(receiver); + this._pushOne(arg); + return; + } + var j = this._front + length - 3; + this._checkCapacity(length); + var wrapMask = this._capacity - 1; + this[(j + 0) & wrapMask] = fn; + this[(j + 1) & wrapMask] = receiver; + this[(j + 2) & wrapMask] = arg; + this._length = length; +}; + +Queue.prototype.shift = function () { + var front = this._front, + ret = this[front]; + + this[front] = undefined; + this._front = (front + 1) & (this._capacity - 1); + this._length--; + return ret; +}; + +Queue.prototype.length = function () { + return this._length; +}; + +Queue.prototype._checkCapacity = function (size) { + if (this._capacity < size) { + this._resizeTo(this._capacity << 1); + } +}; + +Queue.prototype._resizeTo = function (capacity) { + var oldCapacity = this._capacity; + this._capacity = capacity; + var front = this._front; + var length = this._length; + var moveItemsCount = (front + length) & (oldCapacity - 1); + arrayMove(this, 0, this, oldCapacity, moveItemsCount); +}; + +module.exports = Queue; + +},{}],27:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function( + Promise, INTERNAL, tryConvertToPromise, apiRejection) { +var util = _dereq_("./util"); + +var raceLater = function (promise) { + return promise.then(function(array) { + return race(array, promise); + }); +}; + +function race(promises, parent) { + var maybePromise = tryConvertToPromise(promises); + + if (maybePromise instanceof Promise) { + return raceLater(maybePromise); + } else { + promises = util.asArray(promises); + if (promises === null) + return apiRejection("expecting an array or an iterable object but got " + util.classString(promises)); + } + + var ret = new Promise(INTERNAL); + if (parent !== undefined) { + ret._propagateFrom(parent, 3); + } + var fulfill = ret._fulfill; + var reject = ret._reject; + for (var i = 0, len = promises.length; i < len; ++i) { + var val = promises[i]; + + if (val === undefined && !(i in promises)) { + continue; + } + + Promise.cast(val)._then(fulfill, reject, undefined, ret, null); + } + return ret; +} + +Promise.race = function (promises) { + return race(promises, undefined); +}; + +Promise.prototype.race = function () { + return race(this, undefined); +}; + +}; + +},{"./util":36}],28:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, + PromiseArray, + apiRejection, + tryConvertToPromise, + INTERNAL, + debug) { +var getDomain = Promise._getDomain; +var util = _dereq_("./util"); +var tryCatch = util.tryCatch; + +function ReductionPromiseArray(promises, fn, initialValue, _each) { + this.constructor$(promises); + var domain = getDomain(); + this._fn = domain === null ? fn : domain.bind(fn); + if (initialValue !== undefined) { + initialValue = Promise.resolve(initialValue); + initialValue._attachCancellationCallback(this); + } + this._initialValue = initialValue; + this._currentCancellable = null; + this._eachValues = _each === INTERNAL ? [] : undefined; + this._promise._captureStackTrace(); + this._init$(undefined, -5); +} +util.inherits(ReductionPromiseArray, PromiseArray); + +ReductionPromiseArray.prototype._gotAccum = function(accum) { + if (this._eachValues !== undefined && accum !== INTERNAL) { + this._eachValues.push(accum); + } +}; + +ReductionPromiseArray.prototype._eachComplete = function(value) { + this._eachValues.push(value); + return this._eachValues; +}; + +ReductionPromiseArray.prototype._init = function() {}; + +ReductionPromiseArray.prototype._resolveEmptyArray = function() { + this._resolve(this._eachValues !== undefined ? this._eachValues + : this._initialValue); +}; + +ReductionPromiseArray.prototype.shouldCopyValues = function () { + return false; +}; + +ReductionPromiseArray.prototype._resolve = function(value) { + this._promise._resolveCallback(value); + this._values = null; +}; + +ReductionPromiseArray.prototype._resultCancelled = function(sender) { + if (sender === this._initialValue) return this._cancel(); + if (this._isResolved()) return; + this._resultCancelled$(); + if (this._currentCancellable instanceof Promise) { + this._currentCancellable.cancel(); + } + if (this._initialValue instanceof Promise) { + this._initialValue.cancel(); + } +}; + +ReductionPromiseArray.prototype._iterate = function (values) { + this._values = values; + var value; + var i; + var length = values.length; + if (this._initialValue !== undefined) { + value = this._initialValue; + i = 0; + } else { + value = Promise.resolve(values[0]); + i = 1; + } + + this._currentCancellable = value; + + if (!value.isRejected()) { + for (; i < length; ++i) { + var ctx = { + accum: null, + value: values[i], + index: i, + length: length, + array: this + }; + value = value._then(gotAccum, undefined, undefined, ctx, undefined); + } + } + + if (this._eachValues !== undefined) { + value = value + ._then(this._eachComplete, undefined, undefined, this, undefined); + } + value._then(completed, completed, undefined, value, this); +}; + +Promise.prototype.reduce = function (fn, initialValue) { + return reduce(this, fn, initialValue, null); +}; + +Promise.reduce = function (promises, fn, initialValue, _each) { + return reduce(promises, fn, initialValue, _each); +}; + +function completed(valueOrReason, array) { + if (this.isFulfilled()) { + array._resolve(valueOrReason); + } else { + array._reject(valueOrReason); + } +} + +function reduce(promises, fn, initialValue, _each) { + if (typeof fn !== "function") { + return apiRejection("expecting a function but got " + util.classString(fn)); + } + var array = new ReductionPromiseArray(promises, fn, initialValue, _each); + return array.promise(); +} + +function gotAccum(accum) { + this.accum = accum; + this.array._gotAccum(accum); + var value = tryConvertToPromise(this.value, this.array._promise); + if (value instanceof Promise) { + this.array._currentCancellable = value; + return value._then(gotValue, undefined, undefined, this, undefined); + } else { + return gotValue.call(this, value); + } +} + +function gotValue(value) { + var array = this.array; + var promise = array._promise; + var fn = tryCatch(array._fn); + promise._pushContext(); + var ret; + if (array._eachValues !== undefined) { + ret = fn.call(promise._boundValue(), value, this.index, this.length); + } else { + ret = fn.call(promise._boundValue(), + this.accum, value, this.index, this.length); + } + if (ret instanceof Promise) { + array._currentCancellable = ret; + } + var promiseCreated = promise._popContext(); + debug.checkForgottenReturns( + ret, + promiseCreated, + array._eachValues !== undefined ? "Promise.each" : "Promise.reduce", + promise + ); + return ret; +} +}; + +},{"./util":36}],29:[function(_dereq_,module,exports){ +"use strict"; +var util = _dereq_("./util"); +var schedule; +var noAsyncScheduler = function() { + throw new Error("No async scheduler available\u000a\u000a See http://goo.gl/MqrFmX\u000a"); +}; +var NativePromise = util.getNativePromise(); +if (util.isNode && typeof MutationObserver === "undefined") { + var GlobalSetImmediate = global.setImmediate; + var ProcessNextTick = process.nextTick; + schedule = util.isRecentNode + ? function(fn) { GlobalSetImmediate.call(global, fn); } + : function(fn) { ProcessNextTick.call(process, fn); }; +} else if (typeof NativePromise === "function") { + var nativePromise = NativePromise.resolve(); + schedule = function(fn) { + nativePromise.then(fn); + }; +} else if ((typeof MutationObserver !== "undefined") && + !(typeof window !== "undefined" && + window.navigator && + window.navigator.standalone)) { + schedule = (function() { + var div = document.createElement("div"); + var opts = {attributes: true}; + var toggleScheduled = false; + var div2 = document.createElement("div"); + var o2 = new MutationObserver(function() { + div.classList.toggle("foo"); + toggleScheduled = false; + }); + o2.observe(div2, opts); + + var scheduleToggle = function() { + if (toggleScheduled) return; + toggleScheduled = true; + div2.classList.toggle("foo"); + }; + + return function schedule(fn) { + var o = new MutationObserver(function() { + o.disconnect(); + fn(); + }); + o.observe(div, opts); + scheduleToggle(); + }; + })(); +} else if (typeof setImmediate !== "undefined") { + schedule = function (fn) { + setImmediate(fn); + }; +} else if (typeof setTimeout !== "undefined") { + schedule = function (fn) { + setTimeout(fn, 0); + }; +} else { + schedule = noAsyncScheduler; +} +module.exports = schedule; + +},{"./util":36}],30:[function(_dereq_,module,exports){ +"use strict"; +module.exports = + function(Promise, PromiseArray, debug) { +var PromiseInspection = Promise.PromiseInspection; +var util = _dereq_("./util"); + +function SettledPromiseArray(values) { + this.constructor$(values); +} +util.inherits(SettledPromiseArray, PromiseArray); + +SettledPromiseArray.prototype._promiseResolved = function (index, inspection) { + this._values[index] = inspection; + var totalResolved = ++this._totalResolved; + if (totalResolved >= this._length) { + this._resolve(this._values); + return true; + } + return false; +}; + +SettledPromiseArray.prototype._promiseFulfilled = function (value, index) { + var ret = new PromiseInspection(); + ret._bitField = 33554432; + ret._settledValueField = value; + return this._promiseResolved(index, ret); +}; +SettledPromiseArray.prototype._promiseRejected = function (reason, index) { + var ret = new PromiseInspection(); + ret._bitField = 16777216; + ret._settledValueField = reason; + return this._promiseResolved(index, ret); +}; + +Promise.settle = function (promises) { + debug.deprecated(".settle()", ".reflect()"); + return new SettledPromiseArray(promises).promise(); +}; + +Promise.prototype.settle = function () { + return Promise.settle(this); +}; +}; + +},{"./util":36}],31:[function(_dereq_,module,exports){ +"use strict"; +module.exports = +function(Promise, PromiseArray, apiRejection) { +var util = _dereq_("./util"); +var RangeError = _dereq_("./errors").RangeError; +var AggregateError = _dereq_("./errors").AggregateError; +var isArray = util.isArray; +var CANCELLATION = {}; + + +function SomePromiseArray(values) { + this.constructor$(values); + this._howMany = 0; + this._unwrap = false; + this._initialized = false; +} +util.inherits(SomePromiseArray, PromiseArray); + +SomePromiseArray.prototype._init = function () { + if (!this._initialized) { + return; + } + if (this._howMany === 0) { + this._resolve([]); + return; + } + this._init$(undefined, -5); + var isArrayResolved = isArray(this._values); + if (!this._isResolved() && + isArrayResolved && + this._howMany > this._canPossiblyFulfill()) { + this._reject(this._getRangeError(this.length())); + } +}; + +SomePromiseArray.prototype.init = function () { + this._initialized = true; + this._init(); +}; + +SomePromiseArray.prototype.setUnwrap = function () { + this._unwrap = true; +}; + +SomePromiseArray.prototype.howMany = function () { + return this._howMany; +}; + +SomePromiseArray.prototype.setHowMany = function (count) { + this._howMany = count; +}; + +SomePromiseArray.prototype._promiseFulfilled = function (value) { + this._addFulfilled(value); + if (this._fulfilled() === this.howMany()) { + this._values.length = this.howMany(); + if (this.howMany() === 1 && this._unwrap) { + this._resolve(this._values[0]); + } else { + this._resolve(this._values); + } + return true; + } + return false; + +}; +SomePromiseArray.prototype._promiseRejected = function (reason) { + this._addRejected(reason); + return this._checkOutcome(); +}; + +SomePromiseArray.prototype._promiseCancelled = function () { + if (this._values instanceof Promise || this._values == null) { + return this._cancel(); + } + this._addRejected(CANCELLATION); + return this._checkOutcome(); +}; + +SomePromiseArray.prototype._checkOutcome = function() { + if (this.howMany() > this._canPossiblyFulfill()) { + var e = new AggregateError(); + for (var i = this.length(); i < this._values.length; ++i) { + if (this._values[i] !== CANCELLATION) { + e.push(this._values[i]); + } + } + if (e.length > 0) { + this._reject(e); + } else { + this._cancel(); + } + return true; + } + return false; +}; + +SomePromiseArray.prototype._fulfilled = function () { + return this._totalResolved; +}; + +SomePromiseArray.prototype._rejected = function () { + return this._values.length - this.length(); +}; + +SomePromiseArray.prototype._addRejected = function (reason) { + this._values.push(reason); +}; + +SomePromiseArray.prototype._addFulfilled = function (value) { + this._values[this._totalResolved++] = value; +}; + +SomePromiseArray.prototype._canPossiblyFulfill = function () { + return this.length() - this._rejected(); +}; + +SomePromiseArray.prototype._getRangeError = function (count) { + var message = "Input array must contain at least " + + this._howMany + " items but contains only " + count + " items"; + return new RangeError(message); +}; + +SomePromiseArray.prototype._resolveEmptyArray = function () { + this._reject(this._getRangeError(0)); +}; + +function some(promises, howMany) { + if ((howMany | 0) !== howMany || howMany < 0) { + return apiRejection("expecting a positive integer\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + var ret = new SomePromiseArray(promises); + var promise = ret.promise(); + ret.setHowMany(howMany); + ret.init(); + return promise; +} + +Promise.some = function (promises, howMany) { + return some(promises, howMany); +}; + +Promise.prototype.some = function (howMany) { + return some(this, howMany); +}; + +Promise._SomePromiseArray = SomePromiseArray; +}; + +},{"./errors":12,"./util":36}],32:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise) { +function PromiseInspection(promise) { + if (promise !== undefined) { + promise = promise._target(); + this._bitField = promise._bitField; + this._settledValueField = promise._isFateSealed() + ? promise._settledValue() : undefined; + } + else { + this._bitField = 0; + this._settledValueField = undefined; + } +} + +PromiseInspection.prototype._settledValue = function() { + return this._settledValueField; +}; + +var value = PromiseInspection.prototype.value = function () { + if (!this.isFulfilled()) { + throw new TypeError("cannot get fulfillment value of a non-fulfilled promise\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + return this._settledValue(); +}; + +var reason = PromiseInspection.prototype.error = +PromiseInspection.prototype.reason = function () { + if (!this.isRejected()) { + throw new TypeError("cannot get rejection reason of a non-rejected promise\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + return this._settledValue(); +}; + +var isFulfilled = PromiseInspection.prototype.isFulfilled = function() { + return (this._bitField & 33554432) !== 0; +}; + +var isRejected = PromiseInspection.prototype.isRejected = function () { + return (this._bitField & 16777216) !== 0; +}; + +var isPending = PromiseInspection.prototype.isPending = function () { + return (this._bitField & 50397184) === 0; +}; + +var isResolved = PromiseInspection.prototype.isResolved = function () { + return (this._bitField & 50331648) !== 0; +}; + +PromiseInspection.prototype.isCancelled = +Promise.prototype._isCancelled = function() { + return (this._bitField & 65536) === 65536; +}; + +Promise.prototype.isCancelled = function() { + return this._target()._isCancelled(); +}; + +Promise.prototype.isPending = function() { + return isPending.call(this._target()); +}; + +Promise.prototype.isRejected = function() { + return isRejected.call(this._target()); +}; + +Promise.prototype.isFulfilled = function() { + return isFulfilled.call(this._target()); +}; + +Promise.prototype.isResolved = function() { + return isResolved.call(this._target()); +}; + +Promise.prototype.value = function() { + return value.call(this._target()); +}; + +Promise.prototype.reason = function() { + var target = this._target(); + target._unsetRejectionIsUnhandled(); + return reason.call(target); +}; + +Promise.prototype._value = function() { + return this._settledValue(); +}; + +Promise.prototype._reason = function() { + this._unsetRejectionIsUnhandled(); + return this._settledValue(); +}; + +Promise.PromiseInspection = PromiseInspection; +}; + +},{}],33:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, INTERNAL) { +var util = _dereq_("./util"); +var errorObj = util.errorObj; +var isObject = util.isObject; + +function tryConvertToPromise(obj, context) { + if (isObject(obj)) { + if (obj instanceof Promise) return obj; + var then = getThen(obj); + if (then === errorObj) { + if (context) context._pushContext(); + var ret = Promise.reject(then.e); + if (context) context._popContext(); + return ret; + } else if (typeof then === "function") { + if (isAnyBluebirdPromise(obj)) { + var ret = new Promise(INTERNAL); + obj._then( + ret._fulfill, + ret._reject, + undefined, + ret, + null + ); + return ret; + } + return doThenable(obj, then, context); + } + } + return obj; +} + +function doGetThen(obj) { + return obj.then; +} + +function getThen(obj) { + try { + return doGetThen(obj); + } catch (e) { + errorObj.e = e; + return errorObj; + } +} + +var hasProp = {}.hasOwnProperty; +function isAnyBluebirdPromise(obj) { + try { + return hasProp.call(obj, "_promise0"); + } catch (e) { + return false; + } +} + +function doThenable(x, then, context) { + var promise = new Promise(INTERNAL); + var ret = promise; + if (context) context._pushContext(); + promise._captureStackTrace(); + if (context) context._popContext(); + var synchronous = true; + var result = util.tryCatch(then).call(x, resolve, reject); + synchronous = false; + + if (promise && result === errorObj) { + promise._rejectCallback(result.e, true, true); + promise = null; + } + + function resolve(value) { + if (!promise) return; + promise._resolveCallback(value); + promise = null; + } + + function reject(reason) { + if (!promise) return; + promise._rejectCallback(reason, synchronous, true); + promise = null; + } + return ret; +} + +return tryConvertToPromise; +}; + +},{"./util":36}],34:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, INTERNAL, debug) { +var util = _dereq_("./util"); +var TimeoutError = Promise.TimeoutError; + +function HandleWrapper(handle) { + this.handle = handle; +} + +HandleWrapper.prototype._resultCancelled = function() { + clearTimeout(this.handle); +}; + +var afterValue = function(value) { return delay(+this).thenReturn(value); }; +var delay = Promise.delay = function (ms, value) { + var ret; + var handle; + if (value !== undefined) { + ret = Promise.resolve(value) + ._then(afterValue, null, null, ms, undefined); + if (debug.cancellation() && value instanceof Promise) { + ret._setOnCancel(value); + } + } else { + ret = new Promise(INTERNAL); + handle = setTimeout(function() { ret._fulfill(); }, +ms); + if (debug.cancellation()) { + ret._setOnCancel(new HandleWrapper(handle)); + } + } + ret._setAsyncGuaranteed(); + return ret; +}; + +Promise.prototype.delay = function (ms) { + return delay(ms, this); +}; + +var afterTimeout = function (promise, message, parent) { + var err; + if (typeof message !== "string") { + if (message instanceof Error) { + err = message; + } else { + err = new TimeoutError("operation timed out"); + } + } else { + err = new TimeoutError(message); + } + util.markAsOriginatingFromRejection(err); + promise._attachExtraTrace(err); + promise._reject(err); + + if (parent != null) { + parent.cancel(); + } +}; + +function successClear(value) { + clearTimeout(this.handle); + return value; +} + +function failureClear(reason) { + clearTimeout(this.handle); + throw reason; +} + +Promise.prototype.timeout = function (ms, message) { + ms = +ms; + var ret, parent; + + var handleWrapper = new HandleWrapper(setTimeout(function timeoutTimeout() { + if (ret.isPending()) { + afterTimeout(ret, message, parent); + } + }, ms)); + + if (debug.cancellation()) { + parent = this.then(); + ret = parent._then(successClear, failureClear, + undefined, handleWrapper, undefined); + ret._setOnCancel(handleWrapper); + } else { + ret = this._then(successClear, failureClear, + undefined, handleWrapper, undefined); + } + + return ret; +}; + +}; + +},{"./util":36}],35:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function (Promise, apiRejection, tryConvertToPromise, + createContext, INTERNAL, debug) { + var util = _dereq_("./util"); + var TypeError = _dereq_("./errors").TypeError; + var inherits = _dereq_("./util").inherits; + var errorObj = util.errorObj; + var tryCatch = util.tryCatch; + var NULL = {}; + + function thrower(e) { + setTimeout(function(){throw e;}, 0); + } + + function castPreservingDisposable(thenable) { + var maybePromise = tryConvertToPromise(thenable); + if (maybePromise !== thenable && + typeof thenable._isDisposable === "function" && + typeof thenable._getDisposer === "function" && + thenable._isDisposable()) { + maybePromise._setDisposable(thenable._getDisposer()); + } + return maybePromise; + } + function dispose(resources, inspection) { + var i = 0; + var len = resources.length; + var ret = new Promise(INTERNAL); + function iterator() { + if (i >= len) return ret._fulfill(); + var maybePromise = castPreservingDisposable(resources[i++]); + if (maybePromise instanceof Promise && + maybePromise._isDisposable()) { + try { + maybePromise = tryConvertToPromise( + maybePromise._getDisposer().tryDispose(inspection), + resources.promise); + } catch (e) { + return thrower(e); + } + if (maybePromise instanceof Promise) { + return maybePromise._then(iterator, thrower, + null, null, null); + } + } + iterator(); + } + iterator(); + return ret; + } + + function Disposer(data, promise, context) { + this._data = data; + this._promise = promise; + this._context = context; + } + + Disposer.prototype.data = function () { + return this._data; + }; + + Disposer.prototype.promise = function () { + return this._promise; + }; + + Disposer.prototype.resource = function () { + if (this.promise().isFulfilled()) { + return this.promise().value(); + } + return NULL; + }; + + Disposer.prototype.tryDispose = function(inspection) { + var resource = this.resource(); + var context = this._context; + if (context !== undefined) context._pushContext(); + var ret = resource !== NULL + ? this.doDispose(resource, inspection) : null; + if (context !== undefined) context._popContext(); + this._promise._unsetDisposable(); + this._data = null; + return ret; + }; + + Disposer.isDisposer = function (d) { + return (d != null && + typeof d.resource === "function" && + typeof d.tryDispose === "function"); + }; + + function FunctionDisposer(fn, promise, context) { + this.constructor$(fn, promise, context); + } + inherits(FunctionDisposer, Disposer); + + FunctionDisposer.prototype.doDispose = function (resource, inspection) { + var fn = this.data(); + return fn.call(resource, resource, inspection); + }; + + function maybeUnwrapDisposer(value) { + if (Disposer.isDisposer(value)) { + this.resources[this.index]._setDisposable(value); + return value.promise(); + } + return value; + } + + function ResourceList(length) { + this.length = length; + this.promise = null; + this[length-1] = null; + } + + ResourceList.prototype._resultCancelled = function() { + var len = this.length; + for (var i = 0; i < len; ++i) { + var item = this[i]; + if (item instanceof Promise) { + item.cancel(); + } + } + }; + + Promise.using = function () { + var len = arguments.length; + if (len < 2) return apiRejection( + "you must pass at least 2 arguments to Promise.using"); + var fn = arguments[len - 1]; + if (typeof fn !== "function") { + return apiRejection("expecting a function but got " + util.classString(fn)); + } + var input; + var spreadArgs = true; + if (len === 2 && Array.isArray(arguments[0])) { + input = arguments[0]; + len = input.length; + spreadArgs = false; + } else { + input = arguments; + len--; + } + var resources = new ResourceList(len); + for (var i = 0; i < len; ++i) { + var resource = input[i]; + if (Disposer.isDisposer(resource)) { + var disposer = resource; + resource = resource.promise(); + resource._setDisposable(disposer); + } else { + var maybePromise = tryConvertToPromise(resource); + if (maybePromise instanceof Promise) { + resource = + maybePromise._then(maybeUnwrapDisposer, null, null, { + resources: resources, + index: i + }, undefined); + } + } + resources[i] = resource; + } + + var reflectedResources = new Array(resources.length); + for (var i = 0; i < reflectedResources.length; ++i) { + reflectedResources[i] = Promise.resolve(resources[i]).reflect(); + } + + var resultPromise = Promise.all(reflectedResources) + .then(function(inspections) { + for (var i = 0; i < inspections.length; ++i) { + var inspection = inspections[i]; + if (inspection.isRejected()) { + errorObj.e = inspection.error(); + return errorObj; + } else if (!inspection.isFulfilled()) { + resultPromise.cancel(); + return; + } + inspections[i] = inspection.value(); + } + promise._pushContext(); + + fn = tryCatch(fn); + var ret = spreadArgs + ? fn.apply(undefined, inspections) : fn(inspections); + var promiseCreated = promise._popContext(); + debug.checkForgottenReturns( + ret, promiseCreated, "Promise.using", promise); + return ret; + }); + + var promise = resultPromise.lastly(function() { + var inspection = new Promise.PromiseInspection(resultPromise); + return dispose(resources, inspection); + }); + resources.promise = promise; + promise._setOnCancel(resources); + return promise; + }; + + Promise.prototype._setDisposable = function (disposer) { + this._bitField = this._bitField | 131072; + this._disposer = disposer; + }; + + Promise.prototype._isDisposable = function () { + return (this._bitField & 131072) > 0; + }; + + Promise.prototype._getDisposer = function () { + return this._disposer; + }; + + Promise.prototype._unsetDisposable = function () { + this._bitField = this._bitField & (~131072); + this._disposer = undefined; + }; + + Promise.prototype.disposer = function (fn) { + if (typeof fn === "function") { + return new FunctionDisposer(fn, this, createContext()); + } + throw new TypeError(); + }; + +}; + +},{"./errors":12,"./util":36}],36:[function(_dereq_,module,exports){ +"use strict"; +var es5 = _dereq_("./es5"); +var canEvaluate = typeof navigator == "undefined"; + +var errorObj = {e: {}}; +var tryCatchTarget; +var globalObject = typeof self !== "undefined" ? self : + typeof window !== "undefined" ? window : + typeof global !== "undefined" ? global : + this !== undefined ? this : null; + +function tryCatcher() { + try { + var target = tryCatchTarget; + tryCatchTarget = null; + return target.apply(this, arguments); + } catch (e) { + errorObj.e = e; + return errorObj; + } +} +function tryCatch(fn) { + tryCatchTarget = fn; + return tryCatcher; +} + +var inherits = function(Child, Parent) { + var hasProp = {}.hasOwnProperty; + + function T() { + this.constructor = Child; + this.constructor$ = Parent; + for (var propertyName in Parent.prototype) { + if (hasProp.call(Parent.prototype, propertyName) && + propertyName.charAt(propertyName.length-1) !== "$" + ) { + this[propertyName + "$"] = Parent.prototype[propertyName]; + } + } + } + T.prototype = Parent.prototype; + Child.prototype = new T(); + return Child.prototype; +}; + + +function isPrimitive(val) { + return val == null || val === true || val === false || + typeof val === "string" || typeof val === "number"; + +} + +function isObject(value) { + return typeof value === "function" || + typeof value === "object" && value !== null; +} + +function maybeWrapAsError(maybeError) { + if (!isPrimitive(maybeError)) return maybeError; + + return new Error(safeToString(maybeError)); +} + +function withAppended(target, appendee) { + var len = target.length; + var ret = new Array(len + 1); + var i; + for (i = 0; i < len; ++i) { + ret[i] = target[i]; + } + ret[i] = appendee; + return ret; +} + +function getDataPropertyOrDefault(obj, key, defaultValue) { + if (es5.isES5) { + var desc = Object.getOwnPropertyDescriptor(obj, key); + + if (desc != null) { + return desc.get == null && desc.set == null + ? desc.value + : defaultValue; + } + } else { + return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined; + } +} + +function notEnumerableProp(obj, name, value) { + if (isPrimitive(obj)) return obj; + var descriptor = { + value: value, + configurable: true, + enumerable: false, + writable: true + }; + es5.defineProperty(obj, name, descriptor); + return obj; +} + +function thrower(r) { + throw r; +} + +var inheritedDataKeys = (function() { + var excludedPrototypes = [ + Array.prototype, + Object.prototype, + Function.prototype + ]; + + var isExcludedProto = function(val) { + for (var i = 0; i < excludedPrototypes.length; ++i) { + if (excludedPrototypes[i] === val) { + return true; + } + } + return false; + }; + + if (es5.isES5) { + var getKeys = Object.getOwnPropertyNames; + return function(obj) { + var ret = []; + var visitedKeys = Object.create(null); + while (obj != null && !isExcludedProto(obj)) { + var keys; + try { + keys = getKeys(obj); + } catch (e) { + return ret; + } + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + if (visitedKeys[key]) continue; + visitedKeys[key] = true; + var desc = Object.getOwnPropertyDescriptor(obj, key); + if (desc != null && desc.get == null && desc.set == null) { + ret.push(key); + } + } + obj = es5.getPrototypeOf(obj); + } + return ret; + }; + } else { + var hasProp = {}.hasOwnProperty; + return function(obj) { + if (isExcludedProto(obj)) return []; + var ret = []; + + /*jshint forin:false */ + enumeration: for (var key in obj) { + if (hasProp.call(obj, key)) { + ret.push(key); + } else { + for (var i = 0; i < excludedPrototypes.length; ++i) { + if (hasProp.call(excludedPrototypes[i], key)) { + continue enumeration; + } + } + ret.push(key); + } + } + return ret; + }; + } + +})(); + +var thisAssignmentPattern = /this\s*\.\s*\S+\s*=/; +function isClass(fn) { + try { + if (typeof fn === "function") { + var keys = es5.names(fn.prototype); + + var hasMethods = es5.isES5 && keys.length > 1; + var hasMethodsOtherThanConstructor = keys.length > 0 && + !(keys.length === 1 && keys[0] === "constructor"); + var hasThisAssignmentAndStaticMethods = + thisAssignmentPattern.test(fn + "") && es5.names(fn).length > 0; + + if (hasMethods || hasMethodsOtherThanConstructor || + hasThisAssignmentAndStaticMethods) { + return true; + } + } + return false; + } catch (e) { + return false; + } +} + +function toFastProperties(obj) { + /*jshint -W027,-W055,-W031*/ + function FakeConstructor() {} + FakeConstructor.prototype = obj; + var l = 8; + while (l--) new FakeConstructor(); + return obj; + eval(obj); +} + +var rident = /^[a-z$_][a-z$_0-9]*$/i; +function isIdentifier(str) { + return rident.test(str); +} + +function filledRange(count, prefix, suffix) { + var ret = new Array(count); + for(var i = 0; i < count; ++i) { + ret[i] = prefix + i + suffix; + } + return ret; +} + +function safeToString(obj) { + try { + return obj + ""; + } catch (e) { + return "[no string representation]"; + } +} + +function isError(obj) { + return obj !== null && + typeof obj === "object" && + typeof obj.message === "string" && + typeof obj.name === "string"; +} + +function markAsOriginatingFromRejection(e) { + try { + notEnumerableProp(e, "isOperational", true); + } + catch(ignore) {} +} + +function originatesFromRejection(e) { + if (e == null) return false; + return ((e instanceof Error["__BluebirdErrorTypes__"].OperationalError) || + e["isOperational"] === true); +} + +function canAttachTrace(obj) { + return isError(obj) && es5.propertyIsWritable(obj, "stack"); +} + +var ensureErrorObject = (function() { + if (!("stack" in new Error())) { + return function(value) { + if (canAttachTrace(value)) return value; + try {throw new Error(safeToString(value));} + catch(err) {return err;} + }; + } else { + return function(value) { + if (canAttachTrace(value)) return value; + return new Error(safeToString(value)); + }; + } +})(); + +function classString(obj) { + return {}.toString.call(obj); +} + +function copyDescriptors(from, to, filter) { + var keys = es5.names(from); + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + if (filter(key)) { + try { + es5.defineProperty(to, key, es5.getDescriptor(from, key)); + } catch (ignore) {} + } + } +} + +var asArray = function(v) { + if (es5.isArray(v)) { + return v; + } + return null; +}; + +if (typeof Symbol !== "undefined" && Symbol.iterator) { + var ArrayFrom = typeof Array.from === "function" ? function(v) { + return Array.from(v); + } : function(v) { + var ret = []; + var it = v[Symbol.iterator](); + var itResult; + while (!((itResult = it.next()).done)) { + ret.push(itResult.value); + } + return ret; + }; + + asArray = function(v) { + if (es5.isArray(v)) { + return v; + } else if (v != null && typeof v[Symbol.iterator] === "function") { + return ArrayFrom(v); + } + return null; + }; +} + +var isNode = typeof process !== "undefined" && + classString(process).toLowerCase() === "[object process]"; + +function env(key, def) { + return isNode ? process.env[key] : def; +} + +function getNativePromise() { + if (typeof Promise === "function") { + try { + var promise = new Promise(function(){}); + if ({}.toString.call(promise) === "[object Promise]") { + return Promise; + } + } catch (e) {} + } +} + +var ret = { + isClass: isClass, + isIdentifier: isIdentifier, + inheritedDataKeys: inheritedDataKeys, + getDataPropertyOrDefault: getDataPropertyOrDefault, + thrower: thrower, + isArray: es5.isArray, + asArray: asArray, + notEnumerableProp: notEnumerableProp, + isPrimitive: isPrimitive, + isObject: isObject, + isError: isError, + canEvaluate: canEvaluate, + errorObj: errorObj, + tryCatch: tryCatch, + inherits: inherits, + withAppended: withAppended, + maybeWrapAsError: maybeWrapAsError, + toFastProperties: toFastProperties, + filledRange: filledRange, + toString: safeToString, + canAttachTrace: canAttachTrace, + ensureErrorObject: ensureErrorObject, + originatesFromRejection: originatesFromRejection, + markAsOriginatingFromRejection: markAsOriginatingFromRejection, + classString: classString, + copyDescriptors: copyDescriptors, + hasDevTools: typeof chrome !== "undefined" && chrome && + typeof chrome.loadTimes === "function", + isNode: isNode, + env: env, + global: globalObject, + getNativePromise: getNativePromise +}; +ret.isRecentNode = ret.isNode && (function() { + var version = process.versions.node.split(".").map(Number); + return (version[0] === 0 && version[1] > 10) || (version[0] > 0); +})(); + +if (ret.isNode) ret.toFastProperties(process); + +try {throw new Error(); } catch (e) {ret.lastLineError = e;} +module.exports = ret; + +},{"./es5":13}]},{},[4])(4) +}); ;if (typeof window !== 'undefined' && window !== null) { window.P = window.Promise; } else if (typeof self !== 'undefined' && self !== null) { self.P = self.Promise; } \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/js/browser/bluebird.min.js b/platforms/android/assets/www/libs/bluebird/js/browser/bluebird.min.js new file mode 100644 index 0000000..7f4400b --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/js/browser/bluebird.min.js @@ -0,0 +1,31 @@ +/* @preserve + * The MIT License (MIT) + * + * Copyright (c) 2013-2015 Petka Antonov + * + * 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. + * + */ +/** + * bluebird build version 3.4.0 + * Features enabled: core, race, call_get, generators, map, nodeify, promisify, props, reduce, settle, some, using, timers, filter, any, each +*/ +!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;"undefined"!=typeof window?e=window:"undefined"!=typeof global?e=global:"undefined"!=typeof self&&(e=self),e.Promise=t()}}(function(){var t,e,n;return function r(t,e,n){function i(s,a){if(!e[s]){if(!t[s]){var c="function"==typeof _dereq_&&_dereq_;if(!a&&c)return c(s,!0);if(o)return o(s,!0);var l=new Error("Cannot find module '"+s+"'");throw l.code="MODULE_NOT_FOUND",l}var u=e[s]={exports:{}};t[s][0].call(u.exports,function(e){var n=t[s][1][e];return i(n?n:e)},u,u.exports,r,t,e,n)}return e[s].exports}for(var o="function"==typeof _dereq_&&_dereq_,s=0;s0;){var e=t.shift();if("function"==typeof e){var n=t.shift(),r=t.shift();e.call(n,r)}else e._settlePromises()}},r.prototype._drainQueues=function(){this._drainQueue(this._normalQueue),this._reset(),this._haveDrainedQueues=!0,this._drainQueue(this._lateQueue)},r.prototype._queueTick=function(){this._isTickUsed||(this._isTickUsed=!0,this._schedule(this.drainQueues))},r.prototype._reset=function(){this._isTickUsed=!1},e.exports=r,e.exports.firstLineError=a},{"./queue":26,"./schedule":29,"./util":36}],3:[function(t,e,n){"use strict";e.exports=function(t,e,n,r){var i=!1,o=function(t,e){this._reject(e)},s=function(t,e){e.promiseRejectionQueued=!0,e.bindingPromise._then(o,o,null,this,t)},a=function(t,e){0===(50397184&this._bitField)&&this._resolveCallback(e.target)},c=function(t,e){e.promiseRejectionQueued||this._reject(t)};t.prototype.bind=function(o){i||(i=!0,t.prototype._propagateFrom=r.propagateFromFunction(),t.prototype._boundValue=r.boundValueFunction());var l=n(o),u=new t(e);u._propagateFrom(this,1);var p=this._target();if(u._setBoundTo(l),l instanceof t){var h={promiseRejectionQueued:!1,promise:u,target:p,bindingPromise:l};p._then(e,s,void 0,u,h),l._then(a,c,void 0,u,h),u._setOnCancel(l)}else u._resolveCallback(p);return u},t.prototype._setBoundTo=function(t){void 0!==t?(this._bitField=2097152|this._bitField,this._boundTo=t):this._bitField=-2097153&this._bitField},t.prototype._isBound=function(){return 2097152===(2097152&this._bitField)},t.bind=function(e,n){return t.resolve(n).bind(e)}}},{}],4:[function(t,e,n){"use strict";function r(){try{Promise===o&&(Promise=i)}catch(t){}return o}var i;"undefined"!=typeof Promise&&(i=Promise);var o=t("./promise")();o.noConflict=r,e.exports=o},{"./promise":22}],5:[function(t,e,n){"use strict";var r=Object.create;if(r){var i=r(null),o=r(null);i[" size"]=o[" size"]=0}e.exports=function(e){function n(t,n){var r;if(null!=t&&(r=t[n]),"function"!=typeof r){var i="Object "+a.classString(t)+" has no method '"+a.toString(n)+"'";throw new e.TypeError(i)}return r}function r(t){var e=this.pop(),r=n(t,e);return r.apply(t,this)}function i(t){return t[this]}function o(t){var e=+this;return 0>e&&(e=Math.max(0,e+t.length)),t[e]}var s,a=t("./util"),c=a.canEvaluate;a.isIdentifier;e.prototype.call=function(t){var e=[].slice.call(arguments,1);return e.push(t),this._then(r,void 0,void 0,e,void 0)},e.prototype.get=function(t){var e,n="number"==typeof t;if(n)e=o;else if(c){var r=s(t);e=null!==r?r:i}else e=i;return this._then(e,void 0,void 0,t,void 0)}}},{"./util":36}],6:[function(t,e,n){"use strict";e.exports=function(e,n,r,i){var o=t("./util"),s=o.tryCatch,a=o.errorObj,c=e._async;e.prototype["break"]=e.prototype.cancel=function(){if(!i.cancellation())return this._warn("cancellation is disabled");for(var t=this,e=t;t.isCancellable();){if(!t._cancelBy(e)){e._isFollowing()?e._followee().cancel():e._cancelBranched();break}var n=t._cancellationParent;if(null==n||!n.isCancellable()){t._isFollowing()?t._followee().cancel():t._cancelBranched();break}t._isFollowing()&&t._followee().cancel(),e=t,t=n}},e.prototype._branchHasCancelled=function(){this._branchesRemainingToCancel--},e.prototype._enoughBranchesHaveCancelled=function(){return void 0===this._branchesRemainingToCancel||this._branchesRemainingToCancel<=0},e.prototype._cancelBy=function(t){return t===this?(this._branchesRemainingToCancel=0,this._invokeOnCancel(),!0):(this._branchHasCancelled(),this._enoughBranchesHaveCancelled()?(this._invokeOnCancel(),!0):!1)},e.prototype._cancelBranched=function(){this._enoughBranchesHaveCancelled()&&this._cancel()},e.prototype._cancel=function(){this.isCancellable()&&(this._setCancelled(),c.invoke(this._cancelPromises,this,void 0))},e.prototype._cancelPromises=function(){this._length()>0&&this._settlePromises()},e.prototype._unsetOnCancel=function(){this._onCancelField=void 0},e.prototype.isCancellable=function(){return this.isPending()&&!this.isCancelled()},e.prototype._doInvokeOnCancel=function(t,e){if(o.isArray(t))for(var n=0;n=0?o[t]:void 0}var i=!1,o=[];return t.prototype._promiseCreated=function(){},t.prototype._pushContext=function(){},t.prototype._popContext=function(){return null},t._peekContext=t.prototype._peekContext=function(){},e.prototype._pushContext=function(){void 0!==this._trace&&(this._trace._promiseCreated=null,o.push(this._trace))},e.prototype._popContext=function(){if(void 0!==this._trace){var t=o.pop(),e=t._promiseCreated;return t._promiseCreated=null,e}return null},e.CapturedTrace=null,e.create=n,e.deactivateLongStackTraces=function(){},e.activateLongStackTraces=function(){var n=t.prototype._pushContext,o=t.prototype._popContext,s=t._peekContext,a=t.prototype._peekContext,c=t.prototype._promiseCreated;e.deactivateLongStackTraces=function(){t.prototype._pushContext=n,t.prototype._popContext=o,t._peekContext=s,t.prototype._peekContext=a,t.prototype._promiseCreated=c,i=!1},i=!0,t.prototype._pushContext=e.prototype._pushContext,t.prototype._popContext=e.prototype._popContext,t._peekContext=t.prototype._peekContext=r,t.prototype._promiseCreated=function(){var t=this._peekContext();t&&null==t._promiseCreated&&(t._promiseCreated=this)}},e}},{}],9:[function(t,e,n){"use strict";e.exports=function(e,n){function r(t,e){return{promise:e}}function i(){return!1}function o(t,e,n){var r=this;try{t(e,n,function(t){if("function"!=typeof t)throw new TypeError("onCancel must be a function, got: "+H.toString(t));r._attachCancellationCallback(t)})}catch(i){return i}}function s(t){if(!this.isCancellable())return this;var e=this._onCancel();void 0!==e?H.isArray(e)?e.push(t):this._setOnCancel([e,t]):this._setOnCancel(t)}function a(){return this._onCancelField}function c(t){this._onCancelField=t}function l(){this._cancellationParent=void 0,this._onCancelField=void 0}function u(t,e){if(0!==(1&e)){this._cancellationParent=t;var n=t._branchesRemainingToCancel;void 0===n&&(n=0),t._branchesRemainingToCancel=n+1}0!==(2&e)&&t._isBound()&&this._setBoundTo(t._boundTo)}function p(t,e){0!==(2&e)&&t._isBound()&&this._setBoundTo(t._boundTo)}function h(){var t=this._boundTo;return void 0!==t&&t instanceof e?t.isFulfilled()?t.value():void 0:t}function f(){this._trace=new S(this._peekContext())}function _(t,e){if(N(t)){var n=this._trace;if(void 0!==n&&e&&(n=n._parent),void 0!==n)n.attachExtraTrace(t);else if(!t.__stackCleaned__){var r=j(t);H.notEnumerableProp(t,"stack",r.message+"\n"+r.stack.join("\n")),H.notEnumerableProp(t,"__stackCleaned__",!0)}}}function d(t,e,n,r,i){if(void 0===t&&null!==e&&z){if(void 0!==i&&i._returnedNonUndefined())return;if(0===(65535&r._bitField))return;n&&(n+=" ");var o="a promise was created in a "+n+"handler but was not returned from it";r._warn(o,!0,e)}}function v(t,e){var n=t+" is deprecated and will be removed in a future version.";return e&&(n+=" Use "+e+" instead."),y(n)}function y(t,n,r){if(rt.warnings){var i,o=new L(t);if(n)r._attachExtraTrace(o);else if(rt.longStackTraces&&(i=e._peekContext()))i.attachExtraTrace(o);else{var s=j(o);o.stack=s.message+"\n"+s.stack.join("\n")}Y("warning",o)||k(o,"",!0)}}function m(t,e){for(var n=0;n=0;--a)if(r[a]===o){s=a;break}for(var a=s;a>=0;--a){var c=r[a];if(e[i]!==c)break;e.pop(),i--}e=r}}function w(t){for(var e=[],n=0;n0&&(e=e.slice(n)),e}function j(t){var e=t.stack,n=t.toString();return e="string"==typeof e&&e.length>0?C(t):[" (No stack trace)"],{message:n,stack:w(e)}}function k(t,e,n){if("undefined"!=typeof console){var r;if(H.isObject(t)){var i=t.stack;r=e+M(i,t)}else r=e+String(t);"function"==typeof D?D(r,n):("function"==typeof console.log||"object"==typeof console.log)&&console.log(r)}}function E(t,e,n,r){var i=!1;try{"function"==typeof e&&(i=!0,"rejectionHandled"===t?e(r):e(n,r))}catch(o){I.throwLater(o)}"unhandledRejection"===t?Y(t,n,r)||i||k(n,"Unhandled rejection "):Y(t,r)}function F(t){var e;if("function"==typeof t)e="[function "+(t.name||"anonymous")+"]";else{e=t&&"function"==typeof t.toString?t.toString():H.toString(t);var n=/\[object [a-zA-Z0-9$_]+\]/;if(n.test(e))try{var r=JSON.stringify(t);e=r}catch(i){}0===e.length&&(e="(empty array)")}return"(<"+x(e)+">, no stack trace)"}function x(t){var e=41;return t.lengths||0>a||!n||!r||n!==r||s>=a||(tt=function(t){if(U.test(t))return!0;var e=P(t);return e&&e.fileName===n&&s<=e.line&&e.line<=a?!0:!1})}}function S(t){this._parent=t,this._promisesCreated=0;var e=this._length=1+(void 0===t?0:t._length);nt(this,S),e>32&&this.uncycle()}var O,A,D,V=e._getDomain,I=e._async,L=t("./errors").Warning,H=t("./util"),N=H.canAttachTrace,U=/[\\\/]bluebird[\\\/]js[\\\/](release|debug|instrumented)/,B=null,M=null,q=!1,Q=!(0==H.env("BLUEBIRD_DEBUG")||!H.env("BLUEBIRD_DEBUG")&&"development"!==H.env("NODE_ENV")),$=!(0==H.env("BLUEBIRD_WARNINGS")||!Q&&!H.env("BLUEBIRD_WARNINGS")),G=!(0==H.env("BLUEBIRD_LONG_STACK_TRACES")||!Q&&!H.env("BLUEBIRD_LONG_STACK_TRACES")),z=0!=H.env("BLUEBIRD_W_FORGOTTEN_RETURN")&&($||!!H.env("BLUEBIRD_W_FORGOTTEN_RETURN"));e.prototype.suppressUnhandledRejections=function(){var t=this._target();t._bitField=-1048577&t._bitField|524288},e.prototype._ensurePossibleRejectionHandled=function(){0===(524288&this._bitField)&&(this._setRejectionIsUnhandled(),I.invokeLater(this._notifyUnhandledRejection,this,void 0))},e.prototype._notifyUnhandledRejectionIsHandled=function(){E("rejectionHandled",O,void 0,this)},e.prototype._setReturnedNonUndefined=function(){this._bitField=268435456|this._bitField},e.prototype._returnedNonUndefined=function(){return 0!==(268435456&this._bitField)},e.prototype._notifyUnhandledRejection=function(){if(this._isRejectionUnhandled()){var t=this._settledValue();this._setUnhandledRejectionIsNotified(),E("unhandledRejection",A,t,this)}},e.prototype._setUnhandledRejectionIsNotified=function(){this._bitField=262144|this._bitField},e.prototype._unsetUnhandledRejectionIsNotified=function(){this._bitField=-262145&this._bitField},e.prototype._isUnhandledRejectionNotified=function(){return(262144&this._bitField)>0},e.prototype._setRejectionIsUnhandled=function(){this._bitField=1048576|this._bitField},e.prototype._unsetRejectionIsUnhandled=function(){this._bitField=-1048577&this._bitField,this._isUnhandledRejectionNotified()&&(this._unsetUnhandledRejectionIsNotified(),this._notifyUnhandledRejectionIsHandled())},e.prototype._isRejectionUnhandled=function(){return(1048576&this._bitField)>0},e.prototype._warn=function(t,e,n){return y(t,e,n||this)},e.onPossiblyUnhandledRejection=function(t){var e=V();A="function"==typeof t?null===e?t:e.bind(t):void 0},e.onUnhandledRejectionHandled=function(t){var e=V();O="function"==typeof t?null===e?t:e.bind(t):void 0};var X=function(){};e.longStackTraces=function(){if(I.haveItemsQueued()&&!rt.longStackTraces)throw new Error("cannot enable long stack traces after promises have been created\n\n See http://goo.gl/MqrFmX\n");if(!rt.longStackTraces&&T()){var t=e.prototype._captureStackTrace,r=e.prototype._attachExtraTrace;rt.longStackTraces=!0,X=function(){if(I.haveItemsQueued()&&!rt.longStackTraces)throw new Error("cannot enable long stack traces after promises have been created\n\n See http://goo.gl/MqrFmX\n");e.prototype._captureStackTrace=t,e.prototype._attachExtraTrace=r,n.deactivateLongStackTraces(),I.enableTrampoline(),rt.longStackTraces=!1},e.prototype._captureStackTrace=f,e.prototype._attachExtraTrace=_,n.activateLongStackTraces(),I.disableTrampolineIfNecessary()}},e.hasLongStackTraces=function(){return rt.longStackTraces&&T()};var W=function(){try{var t=document.createEvent("CustomEvent");return t.initCustomEvent("testingtheevent",!1,!0,{}),H.global.dispatchEvent(t),function(t,e){var n=document.createEvent("CustomEvent");return n.initCustomEvent(t.toLowerCase(),!1,!0,e),!H.global.dispatchEvent(n)}}catch(e){}return function(){return!1}}(),K=function(){return H.isNode?function(){return process.emit.apply(process,arguments)}:H.global?function(t){var e="on"+t.toLowerCase(),n=H.global[e];return n?(n.apply(H.global,[].slice.call(arguments,1)),!0):!1}:function(){return!1}}(),J={promiseCreated:r,promiseFulfilled:r,promiseRejected:r,promiseResolved:r,promiseCancelled:r,promiseChained:function(t,e,n){return{promise:e,child:n}},warning:function(t,e){return{warning:e}},unhandledRejection:function(t,e,n){return{reason:e,promise:n}},rejectionHandled:r},Y=function(t){var e=!1;try{e=K.apply(null,arguments)}catch(n){I.throwLater(n),e=!0}var r=!1;try{r=W(t,J[t].apply(null,arguments))}catch(n){I.throwLater(n),r=!0}return r||e};e.config=function(t){if(t=Object(t),"longStackTraces"in t&&(t.longStackTraces?e.longStackTraces():!t.longStackTraces&&e.hasLongStackTraces()&&X()),"warnings"in t){var n=t.warnings;rt.warnings=!!n,z=rt.warnings,H.isObject(n)&&"wForgottenReturn"in n&&(z=!!n.wForgottenReturn)}if("cancellation"in t&&t.cancellation&&!rt.cancellation){if(I.haveItemsQueued())throw new Error("cannot enable cancellation after promises are in use");e.prototype._clearCancellationData=l,e.prototype._propagateFrom=u,e.prototype._onCancel=a,e.prototype._setOnCancel=c,e.prototype._attachCancellationCallback=s,e.prototype._execute=o,Z=u,rt.cancellation=!0}"monitoring"in t&&(t.monitoring&&!rt.monitoring?(rt.monitoring=!0,e.prototype._fireEvent=Y):!t.monitoring&&rt.monitoring&&(rt.monitoring=!1,e.prototype._fireEvent=i))},e.prototype._fireEvent=i,e.prototype._execute=function(t,e,n){try{t(e,n)}catch(r){return r}},e.prototype._onCancel=function(){},e.prototype._setOnCancel=function(t){},e.prototype._attachCancellationCallback=function(t){},e.prototype._captureStackTrace=function(){},e.prototype._attachExtraTrace=function(){},e.prototype._clearCancellationData=function(){},e.prototype._propagateFrom=function(t,e){};var Z=p,tt=function(){return!1},et=/[\/<\(]([^:\/]+):(\d+):(?:\d+)\)?\s*$/;H.inherits(S,Error),n.CapturedTrace=S,S.prototype.uncycle=function(){var t=this._length;if(!(2>t)){for(var e=[],n={},r=0,i=this;void 0!==i;++r)e.push(i),i=i._parent;t=this._length=r;for(var r=t-1;r>=0;--r){var o=e[r].stack;void 0===n[o]&&(n[o]=r)}for(var r=0;t>r;++r){var s=e[r].stack,a=n[s];if(void 0!==a&&a!==r){a>0&&(e[a-1]._parent=void 0,e[a-1]._length=1),e[r]._parent=void 0,e[r]._length=1;var c=r>0?e[r-1]:this;t-1>a?(c._parent=e[a+1],c._parent.uncycle(),c._length=c._parent._length+1):(c._parent=void 0,c._length=1);for(var l=c._length+1,u=r-2;u>=0;--u)e[u]._length=l,l++;return}}}},S.prototype.attachExtraTrace=function(t){if(!t.__stackCleaned__){this.uncycle();for(var e=j(t),n=e.message,r=[e.stack],i=this;void 0!==i;)r.push(w(i.stack.split("\n"))),i=i._parent;b(r),g(r),H.notEnumerableProp(t,"stack",m(n,r)),H.notEnumerableProp(t,"__stackCleaned__",!0)}};var nt=function(){var t=/^\s*at\s*/,e=function(t,e){return"string"==typeof t?t:void 0!==e.name&&void 0!==e.message?e.toString():F(e)};if("number"==typeof Error.stackTraceLimit&&"function"==typeof Error.captureStackTrace){Error.stackTraceLimit+=6,B=t,M=e;var n=Error.captureStackTrace;return tt=function(t){return U.test(t)},function(t,e){Error.stackTraceLimit+=6,n(t,e),Error.stackTraceLimit-=6}}var r=new Error;if("string"==typeof r.stack&&r.stack.split("\n")[0].indexOf("stackDetection@")>=0)return B=/@/,M=e,q=!0,function(t){t.stack=(new Error).stack};var i;try{throw new Error}catch(o){i="stack"in o}return"stack"in r||!i||"number"!=typeof Error.stackTraceLimit?(M=function(t,e){return"string"==typeof t?t:"object"!=typeof e&&"function"!=typeof e||void 0===e.name||void 0===e.message?F(e):e.toString()},null):(B=t,M=e,function(t){Error.stackTraceLimit+=6;try{throw new Error}catch(e){t.stack=e.stack}Error.stackTraceLimit-=6})}([]);"undefined"!=typeof console&&"undefined"!=typeof console.warn&&(D=function(t){console.warn(t)},H.isNode&&process.stderr.isTTY?D=function(t,e){var n=e?"":"";console.warn(n+t+"\n")}:H.isNode||"string"!=typeof(new Error).stack||(D=function(t,e){console.warn("%c"+t,e?"color: darkorange":"color: red")}));var rt={warnings:$,longStackTraces:!1,cancellation:!1,monitoring:!1};return G&&e.longStackTraces(),{longStackTraces:function(){return rt.longStackTraces},warnings:function(){return rt.warnings},cancellation:function(){return rt.cancellation},monitoring:function(){return rt.monitoring},propagateFromFunction:function(){return Z},boundValueFunction:function(){return h},checkForgottenReturns:d,setBounds:R,warn:y,deprecated:v,CapturedTrace:S,fireDomEvent:W,fireGlobalEvent:K}}},{"./errors":12,"./util":36}],10:[function(t,e,n){"use strict";e.exports=function(t){function e(){return this.value}function n(){throw this.reason}t.prototype["return"]=t.prototype.thenReturn=function(n){return n instanceof t&&n.suppressUnhandledRejections(),this._then(e,void 0,void 0,{value:n},void 0)},t.prototype["throw"]=t.prototype.thenThrow=function(t){return this._then(n,void 0,void 0,{reason:t},void 0)},t.prototype.catchThrow=function(t){if(arguments.length<=1)return this._then(void 0,n,void 0,{reason:t},void 0);var e=arguments[1],r=function(){throw e};return this.caught(t,r)},t.prototype.catchReturn=function(n){if(arguments.length<=1)return n instanceof t&&n.suppressUnhandledRejections(),this._then(void 0,e,void 0,{value:n},void 0);var r=arguments[1];r instanceof t&&r.suppressUnhandledRejections();var i=function(){return r};return this.caught(n,i)}}},{}],11:[function(t,e,n){"use strict";e.exports=function(t,e){function n(){return o(this)}function r(t,n){return i(t,n,e,e)}var i=t.reduce,o=t.all;t.prototype.each=function(t){return this.mapSeries(t)._then(n,void 0,void 0,this,void 0)},t.prototype.mapSeries=function(t){return i(this,t,e,e)},t.each=function(t,e){return r(t,e)._then(n,void 0,void 0,t,void 0)},t.mapSeries=r}},{}],12:[function(t,e,n){"use strict";function r(t,e){function n(r){return this instanceof n?(p(this,"message","string"==typeof r?r:e),p(this,"name",t),void(Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):Error.call(this))):new n(r)}return u(n,Error),n}function i(t){return this instanceof i?(p(this,"name","OperationalError"),p(this,"message",t),this.cause=t,this.isOperational=!0,void(t instanceof Error?(p(this,"message",t.message),p(this,"stack",t.stack)):Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor))):new i(t)}var o,s,a=t("./es5"),c=a.freeze,l=t("./util"),u=l.inherits,p=l.notEnumerableProp,h=r("Warning","warning"),f=r("CancellationError","cancellation error"),_=r("TimeoutError","timeout error"),d=r("AggregateError","aggregate error");try{o=TypeError,s=RangeError}catch(v){o=r("TypeError","type error"),s=r("RangeError","range error")}for(var y="join pop push shift unshift slice filter forEach some every map indexOf lastIndexOf reduce reduceRight sort reverse".split(" "),m=0;m1?t.cancelPromise._reject(e):t.cancelPromise._cancel(),t.cancelPromise=null,!0):!1}function s(){return c.call(this,this.promise._target()._settledValue())}function a(t){return o(this,t)?void 0:(p.e=t,p)}function c(t){var r=this.promise,c=this.handler;if(!this.called){this.called=!0;var l=this.isFinallyHandler()?c.call(r._boundValue()):c.call(r._boundValue(),t);if(void 0!==l){r._setReturnedNonUndefined();var h=n(l,r);if(h instanceof e){if(null!=this.cancelPromise){if(h.isCancelled()){var f=new u("late cancellation observer");return r._attachExtraTrace(f),p.e=f,p}h.isPending()&&h._attachCancellationCallback(new i(this))}return h._then(s,a,void 0,this,void 0)}}}return r.isRejected()?(o(this),p.e=t,p):(o(this),t)}var l=t("./util"),u=e.CancellationError,p=l.errorObj;return r.prototype.isFinallyHandler=function(){return 0===this.type},i.prototype._resultCancelled=function(){o(this.finallyHandler)},e.prototype._passThrough=function(t,e,n,i){return"function"!=typeof t?this.then():this._then(n,i,void 0,new r(this,e,t),void 0)},e.prototype.lastly=e.prototype["finally"]=function(t){return this._passThrough(t,0,c,c)},e.prototype.tap=function(t){return this._passThrough(t,1,c)},r}},{"./util":36}],16:[function(t,e,n){"use strict";e.exports=function(e,n,r,i,o,s){function a(t,n,r){for(var o=0;o0&&"function"==typeof arguments[e]){t=arguments[e];var r}var i=[].slice.call(arguments);t&&i.pop();var r=new n(i).promise();return void 0!==t?r.spread(t):r}}},{"./util":36}],18:[function(t,e,n){"use strict";e.exports=function(e,n,r,i,o,s){function a(t,e,n,r){this.constructor$(t),this._promise._captureStackTrace();var i=l();this._callback=null===i?e:i.bind(e), +this._preservedValues=r===o?new Array(this.length()):null,this._limit=n,this._inFlight=0,this._queue=n>=1?[]:f,this._init$(void 0,-2)}function c(t,n,i,o){if("function"!=typeof n)return r("expecting a function but got "+u.classString(n));var s=0;if(void 0!==i){if("object"!=typeof i||null===i)return e.reject(new TypeError("options argument must be an object but it is "+u.classString(i)));if("number"!=typeof i.concurrency)return e.reject(new TypeError("'concurrency' must be a number but it is "+u.classString(i.concurrency)));s=i.concurrency}return s="number"==typeof s&&isFinite(s)&&s>=1?s:0,new a(t,n,s,o).promise()}var l=e._getDomain,u=t("./util"),p=u.tryCatch,h=u.errorObj,f=[];u.inherits(a,n),a.prototype._init=function(){},a.prototype._promiseFulfilled=function(t,n){var r=this._values,o=this.length(),a=this._preservedValues,c=this._limit;if(0>n){if(n=-1*n-1,r[n]=t,c>=1&&(this._inFlight--,this._drainQueue(),this._isResolved()))return!0}else{if(c>=1&&this._inFlight>=c)return r[n]=t,this._queue.push(n),!1;null!==a&&(a[n]=t);var l=this._promise,u=this._callback,f=l._boundValue();l._pushContext();var _=p(u).call(f,t,n,o),d=l._popContext();if(s.checkForgottenReturns(_,d,null!==a?"Promise.filter":"Promise.map",l),_===h)return this._reject(_.e),!0;var v=i(_,this._promise);if(v instanceof e){v=v._target();var y=v._bitField;if(0===(50397184&y))return c>=1&&this._inFlight++,r[n]=v,v._proxy(this,-1*(n+1)),!1;if(0===(33554432&y))return 0!==(16777216&y)?(this._reject(v._reason()),!0):(this._cancel(),!0);_=v._value()}r[n]=_}var m=++this._totalResolved;return m>=o?(null!==a?this._filter(r,a):this._resolve(r),!0):!1},a.prototype._drainQueue=function(){for(var t=this._queue,e=this._limit,n=this._values;t.length>0&&this._inFlighto;++o)t[o]&&(r[i++]=e[o]);r.length=i,this._resolve(r)},a.prototype.preservedValues=function(){return this._preservedValues},e.prototype.map=function(t,e){return c(this,t,e,null)},e.map=function(t,e,n,r){return c(t,e,n,r)}}},{"./util":36}],19:[function(t,e,n){"use strict";e.exports=function(e,n,r,i,o){var s=t("./util"),a=s.tryCatch;e.method=function(t){if("function"!=typeof t)throw new e.TypeError("expecting a function but got "+s.classString(t));return function(){var r=new e(n);r._captureStackTrace(),r._pushContext();var i=a(t).apply(this,arguments),s=r._popContext();return o.checkForgottenReturns(i,s,"Promise.method",r),r._resolveFromSyncValue(i),r}},e.attempt=e["try"]=function(t){if("function"!=typeof t)return i("expecting a function but got "+s.classString(t));var r=new e(n);r._captureStackTrace(),r._pushContext();var c;if(arguments.length>1){o.deprecated("calling Promise.try with more than 1 argument");var l=arguments[1],u=arguments[2];c=s.isArray(l)?a(t).apply(u,l):a(t).call(u,l)}else c=a(t)();var p=r._popContext();return o.checkForgottenReturns(c,p,"Promise.try",r),r._resolveFromSyncValue(c),r},e.prototype._resolveFromSyncValue=function(t){t===s.errorObj?this._rejectCallback(t.e,!1):this._resolveCallback(t,!0)}}},{"./util":36}],20:[function(t,e,n){"use strict";function r(t){return t instanceof Error&&u.getPrototypeOf(t)===Error.prototype}function i(t){var e;if(r(t)){e=new l(t),e.name=t.name,e.message=t.message,e.stack=t.stack;for(var n=u.keys(t),i=0;i1){var n,r=new Array(e-1),i=0;for(n=0;e-1>n;++n){var o=arguments[n];if(!h.isObject(o))return u("expecting an object but got "+h.classString(o));r[i++]=o}return r.length=i,t=arguments[n],this.then(void 0,T(r,t,this))}return this.then(void 0,t)},r.prototype.reflect=function(){return this._then(l,l,void 0,this,void 0)},r.prototype.then=function(t,e){if(F.warnings()&&arguments.length>0&&"function"!=typeof t&&"function"!=typeof e){var n=".then() only accepts functions but was passed: "+h.classString(t);arguments.length>1&&(n+=", "+h.classString(e)),this._warn(n)}return this._then(t,e,void 0,void 0,void 0)},r.prototype.done=function(t,e){var n=this._then(t,e,void 0,void 0,void 0);n._setIsFinal()},r.prototype.spread=function(t){return"function"!=typeof t?u("expecting a function but got "+h.classString(t)):this.all()._then(t,void 0,void 0,b,void 0)},r.prototype.toJSON=function(){var t={isFulfilled:!1,isRejected:!1,fulfillmentValue:void 0,rejectionReason:void 0};return this.isFulfilled()?(t.fulfillmentValue=this.value(),t.isFulfilled=!0):this.isRejected()&&(t.rejectionReason=this.reason(),t.isRejected=!0),t},r.prototype.all=function(){return arguments.length>0&&this._warn(".all() was passed arguments but it does not take any"),new j(this).promise()},r.prototype.error=function(t){return this.caught(h.originatesFromRejection,t)},r.is=function(t){return t instanceof r},r.fromNode=r.fromCallback=function(t){var e=new r(g);e._captureStackTrace();var n=arguments.length>1?!!Object(arguments[1]).multiArgs:!1,i=S(t)(P(e,n));return i===R&&e._rejectCallback(i.e,!0),e._isFateSealed()||e._setAsyncGuaranteed(),e},r.all=function(t){return new j(t).promise()},r.cast=function(t){var e=C(t);return e instanceof r||(e=new r(g),e._captureStackTrace(),e._setFulfilled(),e._rejectionHandler0=t),e},r.resolve=r.fulfilled=r.cast,r.reject=r.rejected=function(t){var e=new r(g);return e._captureStackTrace(),e._rejectCallback(t,!0),e},r.setScheduler=function(t){if("function"!=typeof t)throw new y("expecting a function but got "+h.classString(t));return d.setScheduler(t)},r.prototype._then=function(t,e,n,i,o){var s=void 0!==o,c=s?o:new r(g),l=this._target(),u=l._bitField;s||(c._propagateFrom(this,3),c._captureStackTrace(),void 0===i&&0!==(2097152&this._bitField)&&(i=0!==(50397184&u)?this._boundValue():l===this?void 0:this._boundTo),this._fireEvent("promiseChained",this,c));var p=a();if(0!==(50397184&u)){var h,f,_=l._settlePromiseCtx;0!==(33554432&u)?(f=l._rejectionHandler0,h=t):0!==(16777216&u)?(f=l._fulfillmentHandler0,h=e,l._unsetRejectionIsUnhandled()):(_=l._settlePromiseLateCancellationObserver,f=new m("late cancellation observer"),l._attachExtraTrace(f),h=e),d.invoke(_,l,{handler:null===p?h:"function"==typeof h&&p.bind(h),promise:c,receiver:i,value:f})}else l._addCallbacks(t,e,c,i,p);return c},r.prototype._length=function(){return 65535&this._bitField},r.prototype._isFateSealed=function(){return 0!==(117506048&this._bitField)},r.prototype._isFollowing=function(){return 67108864===(67108864&this._bitField)},r.prototype._setLength=function(t){this._bitField=-65536&this._bitField|65535&t},r.prototype._setFulfilled=function(){this._bitField=33554432|this._bitField,this._fireEvent("promiseFulfilled",this)},r.prototype._setRejected=function(){this._bitField=16777216|this._bitField,this._fireEvent("promiseRejected",this)},r.prototype._setFollowing=function(){this._bitField=67108864|this._bitField,this._fireEvent("promiseResolved",this)},r.prototype._setIsFinal=function(){this._bitField=4194304|this._bitField},r.prototype._isFinal=function(){return(4194304&this._bitField)>0},r.prototype._unsetCancelled=function(){this._bitField=-65537&this._bitField},r.prototype._setCancelled=function(){this._bitField=65536|this._bitField,this._fireEvent("promiseCancelled",this)},r.prototype._setAsyncGuaranteed=function(){d.hasCustomScheduler()||(this._bitField=134217728|this._bitField)},r.prototype._receiverAt=function(t){var e=0===t?this._receiver0:this[4*t-4+3];return e===p?void 0:void 0===e&&this._isBound()?this._boundValue():e},r.prototype._promiseAt=function(t){return this[4*t-4+2]},r.prototype._fulfillmentHandlerAt=function(t){return this[4*t-4+0]},r.prototype._rejectionHandlerAt=function(t){return this[4*t-4+1]},r.prototype._boundValue=function(){},r.prototype._migrateCallback0=function(t){var e=(t._bitField,t._fulfillmentHandler0),n=t._rejectionHandler0,r=t._promise0,i=t._receiverAt(0);void 0===i&&(i=p),this._addCallbacks(e,n,r,i,null)},r.prototype._migrateCallbackAt=function(t,e){var n=t._fulfillmentHandlerAt(e),r=t._rejectionHandlerAt(e),i=t._promiseAt(e),o=t._receiverAt(e);void 0===o&&(o=p),this._addCallbacks(n,r,i,o,null)},r.prototype._addCallbacks=function(t,e,n,r,i){var o=this._length();if(o>=65531&&(o=0,this._setLength(0)),0===o)this._promise0=n,this._receiver0=r,"function"==typeof t&&(this._fulfillmentHandler0=null===i?t:i.bind(t)),"function"==typeof e&&(this._rejectionHandler0=null===i?e:i.bind(e));else{var s=4*o-4;this[s+2]=n,this[s+3]=r,"function"==typeof t&&(this[s+0]=null===i?t:i.bind(t)),"function"==typeof e&&(this[s+1]=null===i?e:i.bind(e))}return this._setLength(o+1),o},r.prototype._proxy=function(t,e){this._addCallbacks(void 0,void 0,e,t,null)},r.prototype._resolveCallback=function(t,e){if(0===(117506048&this._bitField)){if(t===this)return this._rejectCallback(c(),!1);var n=C(t,this);if(!(n instanceof r))return this._fulfill(t);e&&this._propagateFrom(n,2);var i=n._target();if(i===this)return void this._reject(c());var o=i._bitField;if(0===(50397184&o)){var s=this._length();s>0&&i._migrateCallback0(this);for(var a=1;s>a;++a)i._migrateCallbackAt(this,a);this._setFollowing(),this._setLength(0),this._setFollowee(i)}else if(0!==(33554432&o))this._fulfill(i._value());else if(0!==(16777216&o))this._reject(i._reason());else{var l=new m("late cancellation observer");i._attachExtraTrace(l),this._reject(l)}}},r.prototype._rejectCallback=function(t,e,n){var r=h.ensureErrorObject(t),i=r===t;if(!i&&!n&&F.warnings()){var o="a promise was rejected with a non-error: "+h.classString(t);this._warn(o,!0)}this._attachExtraTrace(r,e?i:!1),this._reject(t)},r.prototype._resolveFromExecutor=function(t){var e=this;this._captureStackTrace(),this._pushContext();var n=!0,r=this._execute(t,function(t){e._resolveCallback(t)},function(t){e._rejectCallback(t,n)});n=!1,this._popContext(),void 0!==r&&e._rejectCallback(r,!0)},r.prototype._settlePromiseFromHandler=function(t,e,n,r){var i=r._bitField;if(0===(65536&i)){r._pushContext();var o;e===b?n&&"number"==typeof n.length?o=S(t).apply(this._boundValue(),n):(o=R,o.e=new y("cannot .spread() a non-array: "+h.classString(n))):o=S(t).call(e,n);var s=r._popContext();i=r._bitField,0===(65536&i)&&(o===w?r._reject(n):o===R?r._rejectCallback(o.e,!1):(F.checkForgottenReturns(o,s,"",r,this),r._resolveCallback(o)))}},r.prototype._target=function(){for(var t=this;t._isFollowing();)t=t._followee();return t},r.prototype._followee=function(){return this._rejectionHandler0},r.prototype._setFollowee=function(t){this._rejectionHandler0=t},r.prototype._settlePromise=function(t,n,i,o){var s=t instanceof r,a=this._bitField,c=0!==(134217728&a);0!==(65536&a)?(s&&t._invokeInternalOnCancel(),i instanceof x&&i.isFinallyHandler()?(i.cancelPromise=t,S(n).call(i,o)===R&&t._reject(R.e)):n===l?t._fulfill(l.call(i)):i instanceof e?i._promiseCancelled(t):s||t instanceof j?t._cancel():i.cancel()):"function"==typeof n?s?(c&&t._setAsyncGuaranteed(),this._settlePromiseFromHandler(n,i,o,t)):n.call(i,o,t):i instanceof e?i._isResolved()||(0!==(33554432&a)?i._promiseFulfilled(o,t):i._promiseRejected(o,t)):s&&(c&&t._setAsyncGuaranteed(),0!==(33554432&a)?t._fulfill(o):t._reject(o))},r.prototype._settlePromiseLateCancellationObserver=function(t){var e=t.handler,n=t.promise,i=t.receiver,o=t.value;"function"==typeof e?n instanceof r?this._settlePromiseFromHandler(e,i,o,n):e.call(i,o,n):n instanceof r&&n._reject(o)},r.prototype._settlePromiseCtx=function(t){this._settlePromise(t.promise,t.handler,t.receiver,t.value)},r.prototype._settlePromise0=function(t,e,n){var r=this._promise0,i=this._receiverAt(0);this._promise0=void 0,this._receiver0=void 0,this._settlePromise(r,t,i,e)},r.prototype._clearCallbackDataAtIndex=function(t){var e=4*t-4;this[e+2]=this[e+3]=this[e+0]=this[e+1]=void 0},r.prototype._fulfill=function(t){var e=this._bitField;if(!((117506048&e)>>>16)){if(t===this){var n=c();return this._attachExtraTrace(n),this._reject(n)}this._setFulfilled(),this._rejectionHandler0=t,(65535&e)>0&&(0!==(134217728&e)?this._settlePromises():d.settlePromises(this))}},r.prototype._reject=function(t){var e=this._bitField;if(!((117506048&e)>>>16))return this._setRejected(),this._fulfillmentHandler0=t,this._isFinal()?d.fatalError(t,h.isNode):void((65535&e)>0?d.settlePromises(this):this._ensurePossibleRejectionHandled())},r.prototype._fulfillPromises=function(t,e){for(var n=1;t>n;n++){var r=this._fulfillmentHandlerAt(n),i=this._promiseAt(n),o=this._receiverAt(n);this._clearCallbackDataAtIndex(n),this._settlePromise(i,r,o,e)}},r.prototype._rejectPromises=function(t,e){for(var n=1;t>n;n++){var r=this._rejectionHandlerAt(n),i=this._promiseAt(n),o=this._receiverAt(n);this._clearCallbackDataAtIndex(n),this._settlePromise(i,r,o,e)}},r.prototype._settlePromises=function(){var t=this._bitField,e=65535&t;if(e>0){if(0!==(16842752&t)){var n=this._fulfillmentHandler0;this._settlePromise0(this._rejectionHandler0,n,t),this._rejectPromises(e,n)}else{var r=this._rejectionHandler0;this._settlePromise0(this._fulfillmentHandler0,r,t),this._fulfillPromises(e,r)}this._setLength(0)}this._clearCancellationData()},r.prototype._settledValue=function(){var t=this._bitField;return 0!==(33554432&t)?this._rejectionHandler0:0!==(16777216&t)?this._fulfillmentHandler0:void 0},r.defer=r.pending=function(){F.deprecated("Promise.defer","new Promise");var t=new r(g);return{promise:t,resolve:i,reject:o}},h.notEnumerableProp(r,"_makeSelfResolutionError",c),t("./method")(r,g,C,u,F),t("./bind")(r,g,C,F),t("./cancel")(r,j,u,F),t("./direct_resolve")(r),t("./synchronous_inspection")(r),t("./join")(r,j,C,g,F),r.Promise=r,r.version="3.4.0",t("./map.js")(r,j,u,C,g,F),t("./call_get.js")(r),t("./using.js")(r,u,C,E,g,F),t("./timers.js")(r,g,F),t("./generators.js")(r,u,g,C,e,F),t("./nodeify.js")(r),t("./promisify.js")(r,g),t("./props.js")(r,j,C,u),t("./race.js")(r,g,C,u),t("./reduce.js")(r,j,u,C,g,F),t("./settle.js")(r,j,F),t("./some.js")(r,j,u),t("./filter.js")(r,g),t("./each.js")(r,g),t("./any.js")(r),h.toFastProperties(r),h.toFastProperties(r.prototype),s({a:1}),s({b:2}),s({c:3}),s(1),s(function(){}),s(void 0),s(!1),s(new r(g)),F.setBounds(_.firstLineError,h.lastLineError),r}},{"./any.js":1,"./async":2,"./bind":3,"./call_get.js":5,"./cancel":6,"./catch_filter":7,"./context":8,"./debuggability":9,"./direct_resolve":10,"./each.js":11,"./errors":12,"./es5":13,"./filter.js":14,"./finally":15,"./generators.js":16,"./join":17,"./map.js":18,"./method":19,"./nodeback":20,"./nodeify.js":21,"./promise_array":23,"./promisify.js":24,"./props.js":25,"./race.js":27,"./reduce.js":28,"./settle.js":30,"./some.js":31,"./synchronous_inspection":32,"./thenables":33,"./timers.js":34,"./using.js":35,"./util":36}],23:[function(t,e,n){"use strict";e.exports=function(e,n,r,i,o){function s(t){switch(t){case-2:return[];case-3:return{}}}function a(t){var r=this._promise=new e(n);t instanceof e&&r._propagateFrom(t,3),r._setOnCancel(this),this._values=t,this._length=0,this._totalResolved=0,this._init(void 0,-2)}var c=t("./util");c.isArray;return c.inherits(a,o),a.prototype.length=function(){return this._length},a.prototype.promise=function(){return this._promise},a.prototype._init=function l(t,n){var o=r(this._values,this._promise);if(o instanceof e){o=o._target();var a=o._bitField;if(this._values=o,0===(50397184&a))return this._promise._setAsyncGuaranteed(),o._then(l,this._reject,void 0,this,n);if(0===(33554432&a))return 0!==(16777216&a)?this._reject(o._reason()):this._cancel();o=o._value()}if(o=c.asArray(o),null===o){var u=i("expecting an array or an iterable object but got "+c.classString(o)).reason();return void this._promise._rejectCallback(u,!1)}return 0===o.length?void(-5===n?this._resolveEmptyArray():this._resolve(s(n))):void this._iterate(o)},a.prototype._iterate=function(t){var n=this.getActualLength(t.length);this._length=n,this._values=this.shouldCopyValues()?new Array(n):this._values;for(var i=this._promise,o=!1,s=null,a=0;n>a;++a){var c=r(t[a],i);c instanceof e?(c=c._target(),s=c._bitField):s=null,o?null!==s&&c.suppressUnhandledRejections():null!==s?0===(50397184&s)?(c._proxy(this,a),this._values[a]=c):o=0!==(33554432&s)?this._promiseFulfilled(c._value(),a):0!==(16777216&s)?this._promiseRejected(c._reason(),a):this._promiseCancelled(a):o=this._promiseFulfilled(c,a)}o||i._setAsyncGuaranteed()},a.prototype._isResolved=function(){return null===this._values},a.prototype._resolve=function(t){this._values=null,this._promise._fulfill(t)},a.prototype._cancel=function(){!this._isResolved()&&this._promise.isCancellable()&&(this._values=null,this._promise._cancel())},a.prototype._reject=function(t){this._values=null,this._promise._rejectCallback(t,!1)},a.prototype._promiseFulfilled=function(t,e){this._values[e]=t;var n=++this._totalResolved;return n>=this._length?(this._resolve(this._values),!0):!1},a.prototype._promiseCancelled=function(){return this._cancel(),!0},a.prototype._promiseRejected=function(t){return this._totalResolved++,this._reject(t),!0},a.prototype._resultCancelled=function(){if(!this._isResolved()){var t=this._values;if(this._cancel(),t instanceof e)t.cancel();else for(var n=0;nc;c+=2){var u=s[c],p=s[c+1],_=u+e;if(r===E)t[_]=E(u,h,u,p,e,i);else{var d=r(p,function(){return E(u,h,u,p,e,i)});f.notEnumerableProp(d,"__isPromisified__",!0),t[_]=d}}return f.toFastProperties(t),t}function u(t,e,n){return E(t,e,void 0,t,null,n)}var p,h={},f=t("./util"),_=t("./nodeback"),d=f.withAppended,v=f.maybeWrapAsError,y=f.canEvaluate,m=t("./errors").TypeError,g="Async",b={__isPromisified__:!0},w=["arity","length","name","arguments","caller","callee","prototype","__isPromisified__"],C=new RegExp("^(?:"+w.join("|")+")$"),j=function(t){return f.isIdentifier(t)&&"_"!==t.charAt(0)&&"constructor"!==t},k=function(t){return t.replace(/([$])/,"\\$")},E=y?p:c;e.promisify=function(t,e){if("function"!=typeof t)throw new m("expecting a function but got "+f.classString(t));if(i(t))return t;e=Object(e);var n=void 0===e.context?h:e.context,o=!!e.multiArgs,s=u(t,n,o);return f.copyDescriptors(t,s,r),s},e.promisifyAll=function(t,e){if("function"!=typeof t&&"object"!=typeof t)throw new m("the target of promisifyAll must be an object or a function\n\n See http://goo.gl/MqrFmX\n");e=Object(e);var n=!!e.multiArgs,r=e.suffix;"string"!=typeof r&&(r=g);var i=e.filter;"function"!=typeof i&&(i=j);var o=e.promisifier;if("function"!=typeof o&&(o=E),!f.isIdentifier(r))throw new RangeError("suffix must be a valid identifier\n\n See http://goo.gl/MqrFmX\n");for(var s=f.inheritedDataKeys(t),a=0;ao;++o){var s=r[o];e[o]=t[s],e[o+i]=s}}this.constructor$(e),this._isMap=n,this._init$(void 0,-3)}function s(t){var n,s=r(t);return l(s)?(n=s instanceof e?s._then(e.props,void 0,void 0,void 0,void 0):new o(s).promise(),s instanceof e&&n._propagateFrom(s,2),n):i("cannot await properties of a non-object\n\n See http://goo.gl/MqrFmX\n")}var a,c=t("./util"),l=c.isObject,u=t("./es5");"function"==typeof Map&&(a=Map);var p=function(){function t(t,r){this[e]=t,this[e+n]=r,e++}var e=0,n=0;return function(r){n=r.size,e=0;var i=new Array(2*r.size);return r.forEach(t,i),i}}(),h=function(t){for(var e=new a,n=t.length/2|0,r=0;n>r;++r){var i=t[n+r],o=t[r];e.set(i,o)}return e};c.inherits(o,n),o.prototype._init=function(){},o.prototype._promiseFulfilled=function(t,e){this._values[e]=t;var n=++this._totalResolved;if(n>=this._length){var r;if(this._isMap)r=h(this._values);else{r={};for(var i=this.length(),o=0,s=this.length();s>o;++o)r[this._values[o+i]]=this._values[o]}return this._resolve(r),!0}return!1},o.prototype.shouldCopyValues=function(){return!1},o.prototype.getActualLength=function(t){return t>>1},e.prototype.props=function(){return s(this)},e.props=function(t){return s(t)}}},{"./es5":13,"./util":36}],26:[function(t,e,n){"use strict";function r(t,e,n,r,i){for(var o=0;i>o;++o)n[o+r]=t[o+e],t[o+e]=void 0}function i(t){this._capacity=t,this._length=0,this._front=0}i.prototype._willBeOverCapacity=function(t){return this._capacityh;++h){var _=t[h];(void 0!==_||h in t)&&e.cast(_)._then(u,p,void 0,l,null)}return l}var s=t("./util"),a=function(t){return t.then(function(e){return o(e,t)})};e.race=function(t){return o(t,void 0)},e.prototype.race=function(){return o(this,void 0)}}},{"./util":36}],28:[function(t,e,n){"use strict";e.exports=function(e,n,r,i,o,s){function a(t,n,r,i){this.constructor$(t);var s=h();this._fn=null===s?n:s.bind(n),void 0!==r&&(r=e.resolve(r),r._attachCancellationCallback(this)),this._initialValue=r,this._currentCancellable=null,this._eachValues=i===o?[]:void 0,this._promise._captureStackTrace(),this._init$(void 0,-5)}function c(t,e){this.isFulfilled()?e._resolve(t):e._reject(t)}function l(t,e,n,i){if("function"!=typeof e)return r("expecting a function but got "+f.classString(e));var o=new a(t,e,n,i);return o.promise()}function u(t){this.accum=t,this.array._gotAccum(t);var n=i(this.value,this.array._promise);return n instanceof e?(this.array._currentCancellable=n,n._then(p,void 0,void 0,this,void 0)):p.call(this,n)}function p(t){var n=this.array,r=n._promise,i=_(n._fn);r._pushContext();var o;o=void 0!==n._eachValues?i.call(r._boundValue(),t,this.index,this.length):i.call(r._boundValue(),this.accum,t,this.index,this.length),o instanceof e&&(n._currentCancellable=o);var a=r._popContext();return s.checkForgottenReturns(o,a,void 0!==n._eachValues?"Promise.each":"Promise.reduce",r),o}var h=e._getDomain,f=t("./util"),_=f.tryCatch;f.inherits(a,n),a.prototype._gotAccum=function(t){void 0!==this._eachValues&&t!==o&&this._eachValues.push(t)},a.prototype._eachComplete=function(t){return this._eachValues.push(t),this._eachValues},a.prototype._init=function(){},a.prototype._resolveEmptyArray=function(){this._resolve(void 0!==this._eachValues?this._eachValues:this._initialValue)},a.prototype.shouldCopyValues=function(){return!1},a.prototype._resolve=function(t){this._promise._resolveCallback(t),this._values=null},a.prototype._resultCancelled=function(t){return t===this._initialValue?this._cancel():void(this._isResolved()||(this._resultCancelled$(),this._currentCancellable instanceof e&&this._currentCancellable.cancel(),this._initialValue instanceof e&&this._initialValue.cancel()))},a.prototype._iterate=function(t){this._values=t;var n,r,i=t.length;if(void 0!==this._initialValue?(n=this._initialValue,r=0):(n=e.resolve(t[0]),r=1),this._currentCancellable=n,!n.isRejected())for(;i>r;++r){var o={accum:null,value:t[r],index:r,length:i,array:this};n=n._then(u,void 0,void 0,o,void 0)}void 0!==this._eachValues&&(n=n._then(this._eachComplete,void 0,void 0,this,void 0)),n._then(c,c,void 0,n,this)},e.prototype.reduce=function(t,e){return l(this,t,e,null)},e.reduce=function(t,e,n,r){return l(t,e,n,r)}}},{"./util":36}],29:[function(t,e,n){"use strict";var r,i=t("./util"),o=function(){throw new Error("No async scheduler available\n\n See http://goo.gl/MqrFmX\n")},s=i.getNativePromise();if(i.isNode&&"undefined"==typeof MutationObserver){var a=global.setImmediate,c=process.nextTick;r=i.isRecentNode?function(t){a.call(global,t)}:function(t){c.call(process,t)}}else if("function"==typeof s){var l=s.resolve();r=function(t){l.then(t)}}else r="undefined"==typeof MutationObserver||"undefined"!=typeof window&&window.navigator&&window.navigator.standalone?"undefined"!=typeof setImmediate?function(t){setImmediate(t)}:"undefined"!=typeof setTimeout?function(t){setTimeout(t,0)}:o:function(){var t=document.createElement("div"),e={attributes:!0},n=!1,r=document.createElement("div"),i=new MutationObserver(function(){t.classList.toggle("foo"),n=!1});i.observe(r,e);var o=function(){n||(n=!0,r.classList.toggle("foo"))};return function(n){var r=new MutationObserver(function(){r.disconnect(),n()});r.observe(t,e),o()}}();e.exports=r},{"./util":36}],30:[function(t,e,n){"use strict";e.exports=function(e,n,r){function i(t){this.constructor$(t)}var o=e.PromiseInspection,s=t("./util");s.inherits(i,n),i.prototype._promiseResolved=function(t,e){this._values[t]=e;var n=++this._totalResolved;return n>=this._length?(this._resolve(this._values),!0):!1},i.prototype._promiseFulfilled=function(t,e){var n=new o;return n._bitField=33554432,n._settledValueField=t,this._promiseResolved(e,n)},i.prototype._promiseRejected=function(t,e){var n=new o;return n._bitField=16777216,n._settledValueField=t,this._promiseResolved(e,n)},e.settle=function(t){return r.deprecated(".settle()",".reflect()"),new i(t).promise()},e.prototype.settle=function(){return e.settle(this)}}},{"./util":36}],31:[function(t,e,n){"use strict";e.exports=function(e,n,r){function i(t){this.constructor$(t),this._howMany=0,this._unwrap=!1,this._initialized=!1}function o(t,e){if((0|e)!==e||0>e)return r("expecting a positive integer\n\n See http://goo.gl/MqrFmX\n");var n=new i(t),o=n.promise();return n.setHowMany(e),n.init(),o}var s=t("./util"),a=t("./errors").RangeError,c=t("./errors").AggregateError,l=s.isArray,u={};s.inherits(i,n),i.prototype._init=function(){if(this._initialized){if(0===this._howMany)return void this._resolve([]);this._init$(void 0,-5);var t=l(this._values);!this._isResolved()&&t&&this._howMany>this._canPossiblyFulfill()&&this._reject(this._getRangeError(this.length()))}},i.prototype.init=function(){this._initialized=!0,this._init()},i.prototype.setUnwrap=function(){this._unwrap=!0},i.prototype.howMany=function(){return this._howMany},i.prototype.setHowMany=function(t){this._howMany=t},i.prototype._promiseFulfilled=function(t){return this._addFulfilled(t),this._fulfilled()===this.howMany()?(this._values.length=this.howMany(),1===this.howMany()&&this._unwrap?this._resolve(this._values[0]):this._resolve(this._values),!0):!1},i.prototype._promiseRejected=function(t){return this._addRejected(t),this._checkOutcome()},i.prototype._promiseCancelled=function(){return this._values instanceof e||null==this._values?this._cancel():(this._addRejected(u),this._checkOutcome())},i.prototype._checkOutcome=function(){if(this.howMany()>this._canPossiblyFulfill()){for(var t=new c,e=this.length();e0?this._reject(t):this._cancel(),!0}return!1},i.prototype._fulfilled=function(){return this._totalResolved},i.prototype._rejected=function(){return this._values.length-this.length()},i.prototype._addRejected=function(t){this._values.push(t)},i.prototype._addFulfilled=function(t){this._values[this._totalResolved++]=t},i.prototype._canPossiblyFulfill=function(){return this.length()-this._rejected()},i.prototype._getRangeError=function(t){var e="Input array must contain at least "+this._howMany+" items but contains only "+t+" items";return new a(e)},i.prototype._resolveEmptyArray=function(){this._reject(this._getRangeError(0))},e.some=function(t,e){return o(t,e)},e.prototype.some=function(t){return o(this,t)},e._SomePromiseArray=i}},{"./errors":12,"./util":36}],32:[function(t,e,n){"use strict";e.exports=function(t){function e(t){void 0!==t?(t=t._target(),this._bitField=t._bitField,this._settledValueField=t._isFateSealed()?t._settledValue():void 0):(this._bitField=0,this._settledValueField=void 0)}e.prototype._settledValue=function(){return this._settledValueField};var n=e.prototype.value=function(){if(!this.isFulfilled())throw new TypeError("cannot get fulfillment value of a non-fulfilled promise\n\n See http://goo.gl/MqrFmX\n");return this._settledValue()},r=e.prototype.error=e.prototype.reason=function(){if(!this.isRejected())throw new TypeError("cannot get rejection reason of a non-rejected promise\n\n See http://goo.gl/MqrFmX\n");return this._settledValue()},i=e.prototype.isFulfilled=function(){return 0!==(33554432&this._bitField)},o=e.prototype.isRejected=function(){return 0!==(16777216&this._bitField)},s=e.prototype.isPending=function(){return 0===(50397184&this._bitField)},a=e.prototype.isResolved=function(){return 0!==(50331648&this._bitField)};e.prototype.isCancelled=t.prototype._isCancelled=function(){return 65536===(65536&this._bitField)},t.prototype.isCancelled=function(){return this._target()._isCancelled()},t.prototype.isPending=function(){return s.call(this._target())},t.prototype.isRejected=function(){return o.call(this._target())},t.prototype.isFulfilled=function(){return i.call(this._target())},t.prototype.isResolved=function(){return a.call(this._target())},t.prototype.value=function(){return n.call(this._target())},t.prototype.reason=function(){var t=this._target();return t._unsetRejectionIsUnhandled(),r.call(t)},t.prototype._value=function(){return this._settledValue()},t.prototype._reason=function(){return this._unsetRejectionIsUnhandled(),this._settledValue()},t.PromiseInspection=e}},{}],33:[function(t,e,n){"use strict";e.exports=function(e,n){function r(t,r){if(u(t)){if(t instanceof e)return t;var i=o(t);if(i===l){r&&r._pushContext();var c=e.reject(i.e);return r&&r._popContext(),c}if("function"==typeof i){if(s(t)){var c=new e(n);return t._then(c._fulfill,c._reject,void 0,c,null),c}return a(t,i,r)}}return t}function i(t){return t.then}function o(t){try{return i(t)}catch(e){return l.e=e,l}}function s(t){try{return p.call(t,"_promise0")}catch(e){return!1}}function a(t,r,i){function o(t){a&&(a._resolveCallback(t),a=null)}function s(t){a&&(a._rejectCallback(t,p,!0),a=null)}var a=new e(n),u=a;i&&i._pushContext(),a._captureStackTrace(),i&&i._popContext();var p=!0,h=c.tryCatch(r).call(t,o,s);return p=!1,a&&h===l&&(a._rejectCallback(h.e,!0,!0),a=null),u}var c=t("./util"),l=c.errorObj,u=c.isObject,p={}.hasOwnProperty;return r}},{"./util":36}],34:[function(t,e,n){"use strict";e.exports=function(e,n,r){function i(t){this.handle=t}function o(t){return clearTimeout(this.handle),t}function s(t){throw clearTimeout(this.handle),t}var a=t("./util"),c=e.TimeoutError;i.prototype._resultCancelled=function(){clearTimeout(this.handle)};var l=function(t){return u(+this).thenReturn(t)},u=e.delay=function(t,o){var s,a;return void 0!==o?(s=e.resolve(o)._then(l,null,null,t,void 0),r.cancellation()&&o instanceof e&&s._setOnCancel(o)):(s=new e(n),a=setTimeout(function(){s._fulfill()},+t),r.cancellation()&&s._setOnCancel(new i(a))),s._setAsyncGuaranteed(),s};e.prototype.delay=function(t){return u(t,this)};var p=function(t,e,n){var r;r="string"!=typeof e?e instanceof Error?e:new c("operation timed out"):new c(e),a.markAsOriginatingFromRejection(r),t._attachExtraTrace(r),t._reject(r),null!=n&&n.cancel()};e.prototype.timeout=function(t,e){t=+t;var n,a,c=new i(setTimeout(function(){n.isPending()&&p(n,e,a)},t));return r.cancellation()?(a=this.then(),n=a._then(o,s,void 0,c,void 0),n._setOnCancel(c)):n=this._then(o,s,void 0,c,void 0),n}}},{"./util":36}],35:[function(t,e,n){"use strict";e.exports=function(e,n,r,i,o,s){function a(t){setTimeout(function(){throw t},0)}function c(t){var e=r(t);return e!==t&&"function"==typeof t._isDisposable&&"function"==typeof t._getDisposer&&t._isDisposable()&&e._setDisposable(t._getDisposer()),e}function l(t,n){function i(){if(s>=l)return u._fulfill();var o=c(t[s++]);if(o instanceof e&&o._isDisposable()){try{o=r(o._getDisposer().tryDispose(n),t.promise)}catch(p){return a(p)}if(o instanceof e)return o._then(i,a,null,null,null)}i()}var s=0,l=t.length,u=new e(o);return i(),u}function u(t,e,n){this._data=t,this._promise=e,this._context=n}function p(t,e,n){this.constructor$(t,e,n)}function h(t){return u.isDisposer(t)?(this.resources[this.index]._setDisposable(t),t.promise()):t}function f(t){this.length=t,this.promise=null,this[t-1]=null}var _=t("./util"),d=t("./errors").TypeError,v=t("./util").inherits,y=_.errorObj,m=_.tryCatch,g={};u.prototype.data=function(){return this._data},u.prototype.promise=function(){return this._promise},u.prototype.resource=function(){return this.promise().isFulfilled()?this.promise().value():g},u.prototype.tryDispose=function(t){var e=this.resource(),n=this._context;void 0!==n&&n._pushContext();var r=e!==g?this.doDispose(e,t):null;return void 0!==n&&n._popContext(),this._promise._unsetDisposable(),this._data=null,r},u.isDisposer=function(t){return null!=t&&"function"==typeof t.resource&&"function"==typeof t.tryDispose},v(p,u),p.prototype.doDispose=function(t,e){var n=this.data();return n.call(t,t,e)},f.prototype._resultCancelled=function(){for(var t=this.length,n=0;t>n;++n){var r=this[n];r instanceof e&&r.cancel()}},e.using=function(){var t=arguments.length;if(2>t)return n("you must pass at least 2 arguments to Promise.using");var i=arguments[t-1];if("function"!=typeof i)return n("expecting a function but got "+_.classString(i));var o,a=!0;2===t&&Array.isArray(arguments[0])?(o=arguments[0],t=o.length,a=!1):(o=arguments,t--);for(var c=new f(t),p=0;t>p;++p){var d=o[p];if(u.isDisposer(d)){var v=d;d=d.promise(),d._setDisposable(v)}else{var g=r(d);g instanceof e&&(d=g._then(h,null,null,{resources:c,index:p},void 0))}c[p]=d}for(var b=new Array(c.length),p=0;p0},e.prototype._getDisposer=function(){return this._disposer},e.prototype._unsetDisposable=function(){this._bitField=-131073&this._bitField,this._disposer=void 0},e.prototype.disposer=function(t){if("function"==typeof t)return new p(t,this,i());throw new d}}},{"./errors":12,"./util":36}],36:[function(t,e,n){"use strict";function r(){try{var t=T;return T=null,t.apply(this,arguments)}catch(e){return x.e=e,x}}function i(t){return T=t,r}function o(t){return null==t||t===!0||t===!1||"string"==typeof t||"number"==typeof t}function s(t){return"function"==typeof t||"object"==typeof t&&null!==t}function a(t){return o(t)?new Error(v(t)):t}function c(t,e){var n,r=t.length,i=new Array(r+1);for(n=0;r>n;++n)i[n]=t[n];return i[n]=e,i}function l(t,e,n){if(!E.isES5)return{}.hasOwnProperty.call(t,e)?t[e]:void 0;var r=Object.getOwnPropertyDescriptor(t,e);return null!=r?null==r.get&&null==r.set?r.value:n:void 0}function u(t,e,n){if(o(t))return t;var r={value:n,configurable:!0,enumerable:!1,writable:!0};return E.defineProperty(t,e,r),t}function p(t){throw t}function h(t){try{if("function"==typeof t){var e=E.names(t.prototype),n=E.isES5&&e.length>1,r=e.length>0&&!(1===e.length&&"constructor"===e[0]),i=O.test(t+"")&&E.names(t).length>0;if(n||r||i)return!0}return!1}catch(o){return!1}}function f(t){function e(){}e.prototype=t;for(var n=8;n--;)new e;return t}function _(t){return A.test(t)}function d(t,e,n){for(var r=new Array(t),i=0;t>i;++i)r[i]=e+i+n;return r}function v(t){try{return t+""}catch(e){return"[no string representation]"}}function y(t){return null!==t&&"object"==typeof t&&"string"==typeof t.message&&"string"==typeof t.name}function m(t){try{u(t,"isOperational",!0)}catch(e){}}function g(t){return null==t?!1:t instanceof Error.__BluebirdErrorTypes__.OperationalError||t.isOperational===!0}function b(t){return y(t)&&E.propertyIsWritable(t,"stack")}function w(t){return{}.toString.call(t)}function C(t,e,n){for(var r=E.names(t),i=0;i10||t[0]>0}(),H.isNode&&H.toFastProperties(process);try{throw new Error}catch(N){H.lastLineError=N}e.exports=H},{"./es5":13}]},{},[4])(4)}),"undefined"!=typeof window&&null!==window?window.P=window.Promise:"undefined"!=typeof self&&null!==self&&(self.P=self.Promise); \ No newline at end of file diff --git a/platforms/android/assets/www/libs/bluebird/package.json b/platforms/android/assets/www/libs/bluebird/package.json new file mode 100644 index 0000000..3e3142e --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/package.json @@ -0,0 +1,76 @@ +{ + "name": "bluebird", + "description": "Full featured Promises/A+ implementation with exceptionally good performance", + "version": "3.4.0", + "keywords": [ + "promise", + "performance", + "promises", + "promises-a", + "promises-aplus", + "async", + "await", + "deferred", + "deferreds", + "future", + "flow control", + "dsl", + "fluent interface" + ], + "scripts": { + "lint": "node scripts/jshint.js", + "test": "node tools/test.js", + "istanbul": "istanbul", + "prepublish": "npm run generate-browser-core && npm run generate-browser-full", + "generate-browser-full": "node tools/build.js --no-clean --no-debug --release --browser --minify", + "generate-browser-core": "node tools/build.js --features=core --no-debug --release --zalgo --browser --minify && mv js/browser/bluebird.js js/browser/bluebird.core.js && mv js/browser/bluebird.min.js js/browser/bluebird.core.min.js" + }, + "homepage": "https://github.com/petkaantonov/bluebird", + "repository": { + "type": "git", + "url": "git://github.com/petkaantonov/bluebird.git" + }, + "bugs": { + "url": "http://github.com/petkaantonov/bluebird/issues" + }, + "license": "MIT", + "author": { + "name": "Petka Antonov", + "email": "petka_antonov@hotmail.com", + "url": "http://github.com/petkaantonov/" + }, + "devDependencies": { + "acorn": "~0.6.0", + "baconjs": "^0.7.43", + "bluebird": "^2.9.2", + "body-parser": "^1.10.2", + "browserify": "^8.1.1", + "cli-table": "~0.3.1", + "co": "^4.2.0", + "cross-spawn": "^0.2.3", + "glob": "^4.3.2", + "grunt-saucelabs": "~8.4.1", + "highland": "^2.3.0", + "istanbul": "^0.3.5", + "jshint": "^2.6.0", + "jshint-stylish": "~0.2.0", + "mkdirp": "~0.5.0", + "mocha": "~2.1", + "open": "~0.0.5", + "optimist": "~0.6.1", + "rimraf": "~2.2.6", + "rx": "^2.3.25", + "serve-static": "^1.7.1", + "sinon": "~1.7.3", + "uglify-js": "~2.4.16", + "kefir": "^2.4.1" + }, + "readmeFilename": "README.md", + "main": "./js/release/bluebird.js", + "browser": "./js/browser/bluebird.js", + "files": [ + "js/browser", + "js/release", + "LICENSE" + ] +} diff --git a/platforms/android/assets/www/libs/bluebird/src/any.js b/platforms/android/assets/www/libs/bluebird/src/any.js new file mode 100644 index 0000000..7b4d74b --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/any.js @@ -0,0 +1,25 @@ +"use strict"; +module.exports = function(Promise) { +var SomePromiseArray = Promise._SomePromiseArray; +var ASSERT = require("./assert"); + +function any(promises) { + var ret = new SomePromiseArray(promises); + var promise = ret.promise(); + ASSERT(promise.isPending()); + ASSERT(ret instanceof SomePromiseArray); + ret.setHowMany(1); + ret.setUnwrap(); + ret.init(); + return promise; +} + +Promise.any = function (promises) { + return any(promises); +}; + +Promise.prototype.any = function () { + return any(this); +}; + +}; diff --git a/platforms/android/assets/www/libs/bluebird/src/assert.js b/platforms/android/assets/www/libs/bluebird/src/assert.js new file mode 100644 index 0000000..c865847 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/assert.js @@ -0,0 +1,55 @@ +"use strict"; +module.exports = (function(){ +var AssertionError = (function() { + function AssertionError(a) { + this.constructor$(a); + this.message = a; + this.name = "AssertionError"; + } + AssertionError.prototype = new Error(); + AssertionError.prototype.constructor = AssertionError; + AssertionError.prototype.constructor$ = Error; + return AssertionError; +})(); + +function getParams(args) { + var params = []; + for (var i = 0; i < args.length; ++i) params.push("arg" + i); + return params; +} + +function nativeAssert(callName, args, expect) { + try { + var params = getParams(args); + var constructorArgs = params; + constructorArgs.push("return " + + callName + "("+ params.join(",") + ");"); + var fn = Function.apply(null, constructorArgs); + return fn.apply(null, args); + } catch (e) { + if (!(e instanceof SyntaxError)) { + throw e; + } else { + return expect; + } + } +} + +return function assert(boolExpr, message) { + if (boolExpr === true) return; + + if (typeof boolExpr === "string" && + boolExpr.charAt(0) === "%") { + var nativeCallName = boolExpr; + INLINE_SLICE(args, arguments, 2); + if (nativeAssert(nativeCallName, args, message) === message) return; + message = (nativeCallName + " !== " + message); + } + + var ret = new AssertionError(message); + if (Error.captureStackTrace) { + Error.captureStackTrace(ret, assert); + } + throw ret; +}; +})(); diff --git a/platforms/android/assets/www/libs/bluebird/src/async.js b/platforms/android/assets/www/libs/bluebird/src/async.js new file mode 100644 index 0000000..2f5a495 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/async.js @@ -0,0 +1,174 @@ +"use strict"; +var firstLineError; +try {throw new Error(); } catch (e) {firstLineError = e;} +var ASSERT = require("./assert"); +var schedule = require("./schedule"); +var Queue = require("./queue"); +var util = require("./util"); + +function Async() { + this._customScheduler = false; + this._isTickUsed = false; + this._lateQueue = new Queue(LATE_QUEUE_CAPACITY); + this._normalQueue = new Queue(NORMAL_QUEUE_CAPACITY); + this._haveDrainedQueues = false; + this._trampolineEnabled = true; + var self = this; + this.drainQueues = function () { + self._drainQueues(); + }; + this._schedule = schedule; +} + +Async.prototype.setScheduler = function(fn) { + var prev = this._schedule; + this._schedule = fn; + this._customScheduler = true; + return prev; +}; + +Async.prototype.hasCustomScheduler = function() { + return this._customScheduler; +}; + +Async.prototype.enableTrampoline = function() { + this._trampolineEnabled = true; +}; + +Async.prototype.disableTrampolineIfNecessary = function() { + if (util.hasDevTools) { + this._trampolineEnabled = false; + } +}; + +Async.prototype.haveItemsQueued = function () { + return this._isTickUsed || this._haveDrainedQueues; +}; + + +Async.prototype.fatalError = function(e, isNode) { + if (isNode) { + process.stderr.write("Fatal " + (e instanceof Error ? e.stack : e) + + "\n"); + process.exit(2); + } else { + this.throwLater(e); + } +}; + +// Must be used if fn can throw +Async.prototype.throwLater = function(fn, arg) { + if (arguments.length === 1) { + arg = fn; + fn = function () { throw arg; }; + } + if (typeof setTimeout !== "undefined") { + setTimeout(function() { + fn(arg); + }, 0); + } else try { + this._schedule(function() { + fn(arg); + }); + } catch (e) { + throw new Error(NO_ASYNC_SCHEDULER); + } +}; + +//When the fn absolutely needs to be called after +//the queue has been completely flushed +function AsyncInvokeLater(fn, receiver, arg) { + ASSERT(arguments.length === 3); + this._lateQueue.push(fn, receiver, arg); + this._queueTick(); +} + +function AsyncInvoke(fn, receiver, arg) { + ASSERT(arguments.length === 3); + this._normalQueue.push(fn, receiver, arg); + this._queueTick(); +} + +function AsyncSettlePromises(promise) { + this._normalQueue._pushOne(promise); + this._queueTick(); +} + +if (!util.hasDevTools) { + Async.prototype.invokeLater = AsyncInvokeLater; + Async.prototype.invoke = AsyncInvoke; + Async.prototype.settlePromises = AsyncSettlePromises; +} else { + Async.prototype.invokeLater = function (fn, receiver, arg) { + if (this._trampolineEnabled) { + AsyncInvokeLater.call(this, fn, receiver, arg); + } else { + this._schedule(function() { + setTimeout(function() { + fn.call(receiver, arg); + }, 100); + }); + } + }; + + Async.prototype.invoke = function (fn, receiver, arg) { + if (this._trampolineEnabled) { + AsyncInvoke.call(this, fn, receiver, arg); + } else { + this._schedule(function() { + fn.call(receiver, arg); + }); + } + }; + + Async.prototype.settlePromises = function(promise) { + if (this._trampolineEnabled) { + AsyncSettlePromises.call(this, promise); + } else { + this._schedule(function() { + promise._settlePromises(); + }); + } + }; +} + +Async.prototype.invokeFirst = function (fn, receiver, arg) { + ASSERT(arguments.length === 3); + this._normalQueue.unshift(fn, receiver, arg); + this._queueTick(); +}; + +Async.prototype._drainQueue = function(queue) { + while (queue.length() > 0) { + var fn = queue.shift(); + if (typeof fn !== "function") { + fn._settlePromises(); + continue; + } + var receiver = queue.shift(); + var arg = queue.shift(); + fn.call(receiver, arg); + } +}; + +Async.prototype._drainQueues = function () { + ASSERT(this._isTickUsed); + this._drainQueue(this._normalQueue); + this._reset(); + this._haveDrainedQueues = true; + this._drainQueue(this._lateQueue); +}; + +Async.prototype._queueTick = function () { + if (!this._isTickUsed) { + this._isTickUsed = true; + this._schedule(this.drainQueues); + } +}; + +Async.prototype._reset = function () { + this._isTickUsed = false; +}; + +module.exports = Async; +module.exports.firstLineError = firstLineError; diff --git a/platforms/android/assets/www/libs/bluebird/src/bind.js b/platforms/android/assets/www/libs/bluebird/src/bind.js new file mode 100644 index 0000000..0a5cf9f --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/bind.js @@ -0,0 +1,67 @@ +"use strict"; +module.exports = function(Promise, INTERNAL, tryConvertToPromise, debug) { +var calledBind = false; +var rejectThis = function(_, e) { + this._reject(e); +}; + +var targetRejected = function(e, context) { + context.promiseRejectionQueued = true; + context.bindingPromise._then(rejectThis, rejectThis, null, this, e); +}; + +var bindingResolved = function(thisArg, context) { + if (BIT_FIELD_CHECK(IS_PENDING_AND_WAITING_NEG, this._bitField)) { + this._resolveCallback(context.target); + } +}; + +var bindingRejected = function(e, context) { + if (!context.promiseRejectionQueued) this._reject(e); +}; + +Promise.prototype.bind = function (thisArg) { + if (!calledBind) { + calledBind = true; + Promise.prototype._propagateFrom = debug.propagateFromFunction(); + Promise.prototype._boundValue = debug.boundValueFunction(); + } + var maybePromise = tryConvertToPromise(thisArg); + var ret = new Promise(INTERNAL); + ret._propagateFrom(this, PROPAGATE_CANCEL); + var target = this._target(); + ret._setBoundTo(maybePromise); + if (maybePromise instanceof Promise) { + var context = { + promiseRejectionQueued: false, + promise: ret, + target: target, + bindingPromise: maybePromise + }; + target._then(INTERNAL, targetRejected, undefined, ret, context); + maybePromise._then( + bindingResolved, bindingRejected, undefined, ret, context); + ret._setOnCancel(maybePromise); + } else { + ret._resolveCallback(target); + } + return ret; +}; + +Promise.prototype._setBoundTo = function (obj) { + if (obj !== undefined) { + this._bitField = this._bitField | IS_BOUND; + this._boundTo = obj; + } else { + this._bitField = this._bitField & (~IS_BOUND); + } +}; + +Promise.prototype._isBound = function () { + return (this._bitField & IS_BOUND) === IS_BOUND; +}; + +Promise.bind = function (thisArg, value) { + return Promise.resolve(value).bind(thisArg); +}; +}; diff --git a/platforms/android/assets/www/libs/bluebird/src/bluebird.js b/platforms/android/assets/www/libs/bluebird/src/bluebird.js new file mode 100644 index 0000000..1c36cf3 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/bluebird.js @@ -0,0 +1,11 @@ +"use strict"; +var old; +if (typeof Promise !== "undefined") old = Promise; +function noConflict() { + try { if (Promise === bluebird) Promise = old; } + catch (e) {} + return bluebird; +} +var bluebird = require("./promise")(); +bluebird.noConflict = noConflict; +module.exports = bluebird; diff --git a/platforms/android/assets/www/libs/bluebird/src/call_get.js b/platforms/android/assets/www/libs/bluebird/src/call_get.js new file mode 100644 index 0000000..2a5a2e1 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/call_get.js @@ -0,0 +1,123 @@ +"use strict"; +var cr = Object.create; +if (cr) { + var callerCache = cr(null); + var getterCache = cr(null); + callerCache[" size"] = getterCache[" size"] = 0; +} + +module.exports = function(Promise) { +var util = require("./util"); +var canEvaluate = util.canEvaluate; +var isIdentifier = util.isIdentifier; + +var getMethodCaller; +var getGetter; +if (!__BROWSER__) { +var makeMethodCaller = function (methodName) { + return new Function("ensureMethod", " \n\ + return function(obj) { \n\ + 'use strict' \n\ + var len = this.length; \n\ + ensureMethod(obj, 'methodName'); \n\ + switch(len) { \n\ + case 1: return obj.methodName(this[0]); \n\ + case 2: return obj.methodName(this[0], this[1]); \n\ + case 3: return obj.methodName(this[0], this[1], this[2]); \n\ + case 0: return obj.methodName(); \n\ + default: \n\ + return obj.methodName.apply(obj, this); \n\ + } \n\ + }; \n\ + ".replace(/methodName/g, methodName))(ensureMethod); +}; + +var makeGetter = function (propertyName) { + return new Function("obj", " \n\ + 'use strict'; \n\ + return obj.propertyName; \n\ + ".replace("propertyName", propertyName)); +}; + +var getCompiled = function(name, compiler, cache) { + var ret = cache[name]; + if (typeof ret !== "function") { + if (!isIdentifier(name)) { + return null; + } + ret = compiler(name); + cache[name] = ret; + cache[" size"]++; + if (cache[" size"] > 512) { + var keys = Object.keys(cache); + for (var i = 0; i < 256; ++i) delete cache[keys[i]]; + cache[" size"] = keys.length - 256; + } + } + return ret; +}; + +getMethodCaller = function(name) { + return getCompiled(name, makeMethodCaller, callerCache); +}; + +getGetter = function(name) { + return getCompiled(name, makeGetter, getterCache); +}; +} + +function ensureMethod(obj, methodName) { + var fn; + if (obj != null) fn = obj[methodName]; + if (typeof fn !== "function") { + var message = "Object " + util.classString(obj) + " has no method '" + + util.toString(methodName) + "'"; + throw new Promise.TypeError(message); + } + return fn; +} + +function caller(obj) { + var methodName = this.pop(); + var fn = ensureMethod(obj, methodName); + return fn.apply(obj, this); +} +Promise.prototype.call = function (methodName) { + INLINE_SLICE(args, arguments, 1); + if (!__BROWSER__) { + if (canEvaluate) { + var maybeCaller = getMethodCaller(methodName); + if (maybeCaller !== null) { + return this._then( + maybeCaller, undefined, undefined, args, undefined); + } + } + } + args.push(methodName); + return this._then(caller, undefined, undefined, args, undefined); +}; + +function namedGetter(obj) { + return obj[this]; +} +function indexedGetter(obj) { + var index = +this; + if (index < 0) index = Math.max(0, index + obj.length); + return obj[index]; +} +Promise.prototype.get = function (propertyName) { + var isIndex = (typeof propertyName === "number"); + var getter; + if (!isIndex) { + if (canEvaluate) { + var maybeGetter = getGetter(propertyName); + getter = maybeGetter !== null ? maybeGetter : namedGetter; + } else { + getter = namedGetter; + } + } else { + getter = indexedGetter; + } + return this._then(getter, undefined, undefined, propertyName, undefined); +}; +}; diff --git a/platforms/android/assets/www/libs/bluebird/src/cancel.js b/platforms/android/assets/www/libs/bluebird/src/cancel.js new file mode 100644 index 0000000..db200f2 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/cancel.js @@ -0,0 +1,132 @@ +"use strict"; +module.exports = function(Promise, PromiseArray, apiRejection, debug) { +var ASSERT = require("./assert"); +var util = require("./util"); +var tryCatch = util.tryCatch; +var errorObj = util.errorObj; +var async = Promise._async; + +Promise.prototype["break"] = Promise.prototype.cancel = function() { + if (!debug.cancellation()) return this._warn("cancellation is disabled"); + + var promise = this; + var child = promise; + while (promise.isCancellable()) { + if (!promise._cancelBy(child)) { + if (child._isFollowing()) { + child._followee().cancel(); + } else { + child._cancelBranched(); + } + break; + } + + var parent = promise._cancellationParent; + if (parent == null || !parent.isCancellable()) { + if (promise._isFollowing()) { + promise._followee().cancel(); + } else { + promise._cancelBranched(); + } + break; + } else { + if (promise._isFollowing()) promise._followee().cancel(); + child = promise; + promise = parent; + } + } +}; + +Promise.prototype._branchHasCancelled = function() { + ASSERT(typeof this._branchesRemainingToCancel === "number"); + this._branchesRemainingToCancel--; +}; + +Promise.prototype._enoughBranchesHaveCancelled = function() { + return this._branchesRemainingToCancel === undefined || + this._branchesRemainingToCancel <= 0; +}; + +Promise.prototype._cancelBy = function(canceller) { + if (canceller === this) { + this._branchesRemainingToCancel = 0; + this._invokeOnCancel(); + return true; + } else { + ASSERT(canceller._cancellationParent === this); + this._branchHasCancelled(); + if (this._enoughBranchesHaveCancelled()) { + this._invokeOnCancel(); + return true; + } + } + return false; +}; + +Promise.prototype._cancelBranched = function() { + if (this._enoughBranchesHaveCancelled()) { + this._cancel(); + } +}; + +Promise.prototype._cancel = function() { + if (!this.isCancellable()) return; + + ASSERT(!this._isFollowing()); + this._setCancelled(); + async.invoke(this._cancelPromises, this, undefined); +}; + +Promise.prototype._cancelPromises = function() { + if (this._length() > 0) this._settlePromises(); +}; + +Promise.prototype._unsetOnCancel = function() { + ASSERT(this.isCancellable() || this.isCancelled()); + this._onCancelField = undefined; +}; + +Promise.prototype.isCancellable = function() { + return this.isPending() && !this.isCancelled(); +}; + +Promise.prototype._doInvokeOnCancel = function(onCancelCallback, internalOnly) { + if (util.isArray(onCancelCallback)) { + for (var i = 0; i < onCancelCallback.length; ++i) { + this._doInvokeOnCancel(onCancelCallback[i], internalOnly); + } + } else if (onCancelCallback !== undefined) { + if (typeof onCancelCallback === "function") { + if (!internalOnly) { + var e = tryCatch(onCancelCallback).call(this._boundValue()); + if (e === errorObj) { + this._attachExtraTrace(e.e); + async.throwLater(e.e); + } + } + } else { + onCancelCallback._resultCancelled(this); + } + } +}; + +Promise.prototype._invokeOnCancel = function() { + var onCancelCallback = this._onCancel(); + // The existence of onCancel handler on a promise signals that the handler + // has not been queued for invocation yet. + this._unsetOnCancel(); + async.invoke(this._doInvokeOnCancel, this, onCancelCallback); +}; + +Promise.prototype._invokeInternalOnCancel = function() { + if (this.isCancellable()) { + this._doInvokeOnCancel(this._onCancel(), true); + this._unsetOnCancel(); + } +}; + +Promise.prototype._resultCancelled = function() { + this.cancel(); +}; + +}; diff --git a/platforms/android/assets/www/libs/bluebird/src/catch_filter.js b/platforms/android/assets/www/libs/bluebird/src/catch_filter.js new file mode 100644 index 0000000..0f24ce2 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/catch_filter.js @@ -0,0 +1,42 @@ +"use strict"; +module.exports = function(NEXT_FILTER) { +var util = require("./util"); +var getKeys = require("./es5").keys; +var tryCatch = util.tryCatch; +var errorObj = util.errorObj; + +function catchFilter(instances, cb, promise) { + return function(e) { + var boundTo = promise._boundValue(); + predicateLoop: for (var i = 0; i < instances.length; ++i) { + var item = instances[i]; + + if (item === Error || + (item != null && item.prototype instanceof Error)) { + if (e instanceof item) { + return tryCatch(cb).call(boundTo, e); + } + } else if (typeof item === "function") { + var matchesPredicate = tryCatch(item).call(boundTo, e); + if (matchesPredicate === errorObj) { + return matchesPredicate; + } else if (matchesPredicate) { + return tryCatch(cb).call(boundTo, e); + } + } else if (util.isObject(e)) { + var keys = getKeys(item); + for (var j = 0; j < keys.length; ++j) { + var key = keys[j]; + if (item[key] != e[key]) { + continue predicateLoop; + } + } + return tryCatch(cb).call(boundTo, e); + } + } + return NEXT_FILTER; + }; +} + +return catchFilter; +}; diff --git a/platforms/android/assets/www/libs/bluebird/src/constants.js b/platforms/android/assets/www/libs/bluebird/src/constants.js new file mode 100644 index 0000000..87a78a6 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/constants.js @@ -0,0 +1,149 @@ +//This is pretty lame but what you gonna do + +//async.js +CONSTANT(LATE_QUEUE_CAPACITY, 16); +CONSTANT(NORMAL_QUEUE_CAPACITY, 16); + +//errors.js +CONSTANT(ERROR_HANDLED_KEY, "__promiseHandled__"); +CONSTANT(OPERATIONAL_ERROR_KEY, "isOperational"); +CONSTANT(DEFAULT_STATE, 0); +CONSTANT(STACK_ATTACHED, 1); +CONSTANT(ERROR_HANDLED, 2); + +//join.js +CONSTANT(GENERATED_CLASS_COUNT, 8); + +//promise.js +CONSTANT(USE_BOUND, true); +CONSTANT(DONT_USE_BOUND, false); + +CONSTANT(PROPAGATE_CANCEL, 1); +CONSTANT(PROPAGATE_BIND, 2); +CONSTANT(PROPAGATE_ALL, PROPAGATE_CANCEL | PROPAGATE_BIND); + +CONSTANT(CALLBACK_FULFILL_OFFSET, 0); +CONSTANT(CALLBACK_REJECT_OFFSET, 1); +CONSTANT(CALLBACK_PROMISE_OFFSET, 2); +CONSTANT(CALLBACK_RECEIVER_OFFSET, 3); +CONSTANT(CALLBACK_SIZE, 4); +//Layout for ._bitField +//[RR]RO GWFN CTBH IUDE LLLL LLLL LLLL LLLL +//[RR] = [Reserved] (Both bits are either on or off to represent +// 1 bit due to 31-bit integers in 32-bit v8) +//R = [Reserved] +//O = returnedNonUndefined +//G = isAsyncGuaranteed +//W = isFollowing (The promise that is being followed is not stored explicitly) +//F = isFulfilled +//N = isRejected +//C = isCancellable +//T = isFinal (used for .done() implementation) +//B = isBound +//I = isRejectionIgnored +//H = isRejectionUnhandled +//U = isUnhanldedRejectionNotified +//D = isDisposable +//E = isCancelled +//L = Length, 16 bit unsigned +CONSTANT(NO_STATE, 0x0|0); +CONSTANT(RETURNED_NON_UNDEFINED, 0x10000000|0); +CONSTANT(IS_ASYNC_GUARANTEED, 0x8000000|0); +CONSTANT(IS_FOLLOWING, 0x4000000|0); +CONSTANT(IS_FULFILLED, 0x2000000|0); +CONSTANT(IS_REJECTED, 0x1000000|0); +CONSTANT(IS_CANCELLABLE, 0x800000|0); +CONSTANT(IS_FINAL, 0x400000|0); +CONSTANT(IS_BOUND, 0x200000|0); +CONSTANT(IS_REJECTION_UNHANDLED, 0x100000|0); +CONSTANT(IS_REJECTION_IGNORED, 0x80000|0); +CONSTANT(IS_UNHANDLED_REJECTION_NOTIFIED, 0x40000|0); +CONSTANT(IS_DISPOSABLE, 0x20000|0); +CONSTANT(IS_CANCELLED, 0x10000|0); +CONSTANT(LENGTH_MASK, 0xFFFF|0); +CONSTANT(LENGTH_CLEAR_MASK, ~LENGTH_MASK); +CONSTANT(MAX_LENGTH, LENGTH_MASK); +CONSTANT(IS_REJECTED_OR_CANCELLED, IS_REJECTED | IS_CANCELLED); +CONSTANT(IS_REJECTED_OR_FULFILLED, IS_REJECTED | IS_FULFILLED); +CONSTANT(IS_REJECTED_OR_FULFILLED_OR_CANCELLED, IS_REJECTED | IS_FULFILLED| IS_CANCELLED); +CONSTANT(IS_PENDING_AND_WAITING_NEG, IS_REJECTED_OR_FULFILLED_OR_CANCELLED); + +CONSTANT(IS_FATE_SEALED, IS_REJECTED | IS_FULFILLED | IS_FOLLOWING | IS_CANCELLED); + +CONSTANT(AFTER_PROMISIFIED_SUFFIX, "Async"); +CONSTANT(UNHANDLED_REJECTION_EVENT, "unhandledRejection"); +CONSTANT(REJECTION_HANDLED_EVENT, "rejectionHandled"); + +//promise_array.js +//MUST BE NEGATIVE NUMBERS +CONSTANT(RESOLVE_UNDEFINED, -1); +CONSTANT(RESOLVE_ARRAY, -2); +CONSTANT(RESOLVE_OBJECT, -3); +CONSTANT(RESOLVE_FOREVER_PENDING, -4); +CONSTANT(RESOLVE_CALL_METHOD, -5); + +//queue.js +CONSTANT(QUEUE_MAX_CAPACITY, (1 << 30) | 0); +CONSTANT(QUEUE_MIN_CAPACITY, 16); + +//captured_trace.js +CONSTANT(FROM_PREVIOUS_EVENT, "From previous event:"); +CONSTANT(NO_STACK_TRACE, " (No stack trace)"); +CONSTANT(ADDITIONAL_STACK_TRACE, "^--- With additional stack trace: "); +CONSTANT(UNHANDLED_REJECTION_HEADER, "Unhandled rejection "); + +//finally.js +CONSTANT(FINALLY_TYPE, 0); +CONSTANT(TAP_TYPE, 1); + +//direct_resolve.js +CONSTANT(THROW, 1); +CONSTANT(RETURN, 2); + +//promisify.js +CONSTANT(MAX_PARAM_COUNT, 1023); +CONSTANT(PARAM_COUNTS_TO_TRY, 3); + +//error.js +CONSTANT(BLUEBIRD_ERRORS, "__BluebirdErrorTypes__"); + +//deprecated +CONSTANT(OBJECT_PROMISIFY_DEPRECATED, "Promise.promisify for promisifying entire objects is deprecated. Use Promise.promisifyAll instead.\n\n\ + See http://goo.gl/MqrFmX"); +CONSTANT(SPAWN_DEPRECATED, "Promise.spawn is deprecated. Use Promise.coroutine instead."); + +//errors +CONSTANT(LATE_CANCELLATION_OBSERVER, "late cancellation observer"); +CONSTANT(TIMEOUT_ERROR, "operation timed out"); +CONSTANT(COLLECTION_ERROR, "expecting an array or an iterable object but got "); +CONSTANT(OBJECT_ERROR, "expecting an object but got "); +CONSTANT(FUNCTION_ERROR, "expecting a function but got "); +CONSTANT(CONSTRUCT_ERROR_INVOCATION, "the promise constructor cannot be invoked directly\n\n\ + See http://goo.gl/MqrFmX\n"); +CONSTANT(NOT_GENERATOR_ERROR, "generatorFunction must be a function\n\n\ + See http://goo.gl/MqrFmX\n"); +CONSTANT(LONG_STACK_TRACES_ERROR, "cannot enable long stack traces after promises have been created\n\n\ + See http://goo.gl/MqrFmX\n"); +CONSTANT(INSPECTION_VALUE_ERROR, "cannot get fulfillment value of a non-fulfilled promise\n\n\ + See http://goo.gl/MqrFmX\n"); +CONSTANT(INSPECTION_REASON_ERROR, "cannot get rejection reason of a non-rejected promise\n\n\ + See http://goo.gl/MqrFmX\n"); +CONSTANT(PROMISIFY_TYPE_ERROR, "the target of promisifyAll must be an object or a function\n\n\ + See http://goo.gl/MqrFmX\n"); +CONSTANT(CIRCULAR_RESOLUTION_ERROR, "circular promise resolution chain\n\n\ + See http://goo.gl/MqrFmX\n"); +CONSTANT(PROPS_TYPE_ERROR, "cannot await properties of a non-object\n\n\ + See http://goo.gl/MqrFmX\n"); +CONSTANT(POSITIVE_INTEGER_ERROR, "expecting a positive integer\n\n\ + See http://goo.gl/MqrFmX\n"); +CONSTANT(YIELDED_NON_PROMISE_ERROR, "A value %s was yielded that could not be treated as a promise\n\n\ + See http://goo.gl/MqrFmX\n\n"); +CONSTANT(FROM_COROUTINE_CREATED_AT, "From coroutine:\n"); +CONSTANT(UNBOUND_RESOLVER_INVOCATION, "Illegal invocation, resolver resolve/reject must be called within a resolver context. Consider using the promise constructor instead.\n\n\ + See http://goo.gl/MqrFmX\n"); +CONSTANT(PROMISIFICATION_NORMAL_METHODS_ERROR, "Cannot promisify an API that has normal methods with '%s'-suffix\n\n\ + See http://goo.gl/MqrFmX\n"); +CONSTANT(SUFFIX_NOT_IDENTIFIER, "suffix must be a valid identifier\n\n\ + See http://goo.gl/MqrFmX\n"); +CONSTANT(NO_ASYNC_SCHEDULER, "No async scheduler available\n\n\ + See http://goo.gl/MqrFmX\n"); diff --git a/platforms/android/assets/www/libs/bluebird/src/context.js b/platforms/android/assets/www/libs/bluebird/src/context.js new file mode 100644 index 0000000..c307414 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/context.js @@ -0,0 +1,69 @@ +"use strict"; +module.exports = function(Promise) { +var longStackTraces = false; +var contextStack = []; + +Promise.prototype._promiseCreated = function() {}; +Promise.prototype._pushContext = function() {}; +Promise.prototype._popContext = function() {return null;}; +Promise._peekContext = Promise.prototype._peekContext = function() {}; + +function Context() { + this._trace = new Context.CapturedTrace(peekContext()); +} +Context.prototype._pushContext = function () { + if (this._trace !== undefined) { + this._trace._promiseCreated = null; + contextStack.push(this._trace); + } +}; + +Context.prototype._popContext = function () { + if (this._trace !== undefined) { + var trace = contextStack.pop(); + var ret = trace._promiseCreated; + trace._promiseCreated = null; + return ret; + } + return null; +}; + +function createContext() { + if (longStackTraces) return new Context(); +} + +function peekContext() { + var lastIndex = contextStack.length - 1; + if (lastIndex >= 0) { + return contextStack[lastIndex]; + } + return undefined; +} +Context.CapturedTrace = null; +Context.create = createContext; +Context.deactivateLongStackTraces = function() {}; +Context.activateLongStackTraces = function() { + var Promise_pushContext = Promise.prototype._pushContext; + var Promise_popContext = Promise.prototype._popContext; + var Promise_PeekContext = Promise._peekContext; + var Promise_peekContext = Promise.prototype._peekContext; + var Promise_promiseCreated = Promise.prototype._promiseCreated; + Context.deactivateLongStackTraces = function() { + Promise.prototype._pushContext = Promise_pushContext; + Promise.prototype._popContext = Promise_popContext; + Promise._peekContext = Promise_PeekContext; + Promise.prototype._peekContext = Promise_peekContext; + Promise.prototype._promiseCreated = Promise_promiseCreated; + longStackTraces = false; + }; + longStackTraces = true; + Promise.prototype._pushContext = Context.prototype._pushContext; + Promise.prototype._popContext = Context.prototype._popContext; + Promise._peekContext = Promise.prototype._peekContext = peekContext; + Promise.prototype._promiseCreated = function() { + var ctx = this._peekContext(); + if (ctx && ctx._promiseCreated == null) ctx._promiseCreated = this; + }; +}; +return Context; +}; diff --git a/platforms/android/assets/www/libs/bluebird/src/debuggability.js b/platforms/android/assets/www/libs/bluebird/src/debuggability.js new file mode 100644 index 0000000..9971162 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/debuggability.js @@ -0,0 +1,887 @@ +"use strict"; +module.exports = function(Promise, Context) { +var getDomain = Promise._getDomain; +var async = Promise._async; +var Warning = require("./errors").Warning; +var util = require("./util"); +var ASSERT = require("./assert"); +var canAttachTrace = util.canAttachTrace; +var unhandledRejectionHandled; +var possiblyUnhandledRejection; +var bluebirdFramePattern = + /[\\\/]bluebird[\\\/]js[\\\/](release|debug|instrumented)/; +var stackFramePattern = null; +var formatStack = null; +var indentStackFrames = false; +var printWarning; +var debugging = !!(util.env("BLUEBIRD_DEBUG") != 0 && + (__DEBUG__ || + util.env("BLUEBIRD_DEBUG") || + util.env("NODE_ENV") === "development")); + +var warnings = !!(util.env("BLUEBIRD_WARNINGS") != 0 && + (debugging || util.env("BLUEBIRD_WARNINGS"))); + +var longStackTraces = !!(util.env("BLUEBIRD_LONG_STACK_TRACES") != 0 && + (debugging || util.env("BLUEBIRD_LONG_STACK_TRACES"))); + +var wForgottenReturn = util.env("BLUEBIRD_W_FORGOTTEN_RETURN") != 0 && + (warnings || !!util.env("BLUEBIRD_W_FORGOTTEN_RETURN")); + +Promise.prototype.suppressUnhandledRejections = function() { + var target = this._target(); + target._bitField = ((target._bitField & (~IS_REJECTION_UNHANDLED)) | + IS_REJECTION_IGNORED); +}; + +Promise.prototype._ensurePossibleRejectionHandled = function () { + if ((this._bitField & IS_REJECTION_IGNORED) !== 0) return; + this._setRejectionIsUnhandled(); + async.invokeLater(this._notifyUnhandledRejection, this, undefined); +}; + +Promise.prototype._notifyUnhandledRejectionIsHandled = function () { + fireRejectionEvent(REJECTION_HANDLED_EVENT, + unhandledRejectionHandled, undefined, this); +}; + +Promise.prototype._setReturnedNonUndefined = function() { + this._bitField = this._bitField | RETURNED_NON_UNDEFINED; +}; + +Promise.prototype._returnedNonUndefined = function() { + return (this._bitField & RETURNED_NON_UNDEFINED) !== 0; +}; + +Promise.prototype._notifyUnhandledRejection = function () { + if (this._isRejectionUnhandled()) { + var reason = this._settledValue(); + this._setUnhandledRejectionIsNotified(); + fireRejectionEvent(UNHANDLED_REJECTION_EVENT, + possiblyUnhandledRejection, reason, this); + } +}; + +Promise.prototype._setUnhandledRejectionIsNotified = function () { + this._bitField = this._bitField | IS_UNHANDLED_REJECTION_NOTIFIED; +}; + +Promise.prototype._unsetUnhandledRejectionIsNotified = function () { + this._bitField = this._bitField & (~IS_UNHANDLED_REJECTION_NOTIFIED); +}; + +Promise.prototype._isUnhandledRejectionNotified = function () { + return (this._bitField & IS_UNHANDLED_REJECTION_NOTIFIED) > 0; +}; + +Promise.prototype._setRejectionIsUnhandled = function () { + ASSERT(!this._isFollowing()); + this._bitField = this._bitField | IS_REJECTION_UNHANDLED; +}; + +Promise.prototype._unsetRejectionIsUnhandled = function () { + ASSERT(!this._isFollowing()); + this._bitField = this._bitField & (~IS_REJECTION_UNHANDLED); + if (this._isUnhandledRejectionNotified()) { + this._unsetUnhandledRejectionIsNotified(); + this._notifyUnhandledRejectionIsHandled(); + } +}; + +Promise.prototype._isRejectionUnhandled = function () { + ASSERT(!this._isFollowing()); + return (this._bitField & IS_REJECTION_UNHANDLED) > 0; +}; + +Promise.prototype._warn = function(message, shouldUseOwnTrace, promise) { + return warn(message, shouldUseOwnTrace, promise || this); +}; + +Promise.onPossiblyUnhandledRejection = function (fn) { + var domain = getDomain(); + possiblyUnhandledRejection = + typeof fn === "function" ? (domain === null ? fn : domain.bind(fn)) + : undefined; +}; + +Promise.onUnhandledRejectionHandled = function (fn) { + var domain = getDomain(); + unhandledRejectionHandled = + typeof fn === "function" ? (domain === null ? fn : domain.bind(fn)) + : undefined; +}; + +var disableLongStackTraces = function() {}; +Promise.longStackTraces = function () { + if (async.haveItemsQueued() && !config.longStackTraces) { + throw new Error(LONG_STACK_TRACES_ERROR); + } + if (!config.longStackTraces && longStackTracesIsSupported()) { + var Promise_captureStackTrace = Promise.prototype._captureStackTrace; + var Promise_attachExtraTrace = Promise.prototype._attachExtraTrace; + config.longStackTraces = true; + disableLongStackTraces = function() { + if (async.haveItemsQueued() && !config.longStackTraces) { + throw new Error(LONG_STACK_TRACES_ERROR); + } + Promise.prototype._captureStackTrace = Promise_captureStackTrace; + Promise.prototype._attachExtraTrace = Promise_attachExtraTrace; + Context.deactivateLongStackTraces(); + async.enableTrampoline(); + config.longStackTraces = false; + }; + Promise.prototype._captureStackTrace = longStackTracesCaptureStackTrace; + Promise.prototype._attachExtraTrace = longStackTracesAttachExtraTrace; + Context.activateLongStackTraces(); + async.disableTrampolineIfNecessary(); + } +}; + +Promise.hasLongStackTraces = function () { + return config.longStackTraces && longStackTracesIsSupported(); +}; + +var fireDomEvent = (function() { + try { + var event = document.createEvent("CustomEvent"); + event.initCustomEvent("testingtheevent", false, true, {}); + util.global.dispatchEvent(event); + return function(name, event) { + var domEvent = document.createEvent("CustomEvent"); + domEvent.initCustomEvent(name.toLowerCase(), false, true, event); + return !util.global.dispatchEvent(domEvent); + }; + } catch (e) {} + return function() { + return false; + }; +})(); + +var fireGlobalEvent = (function() { + if (util.isNode) { + return function() { + return process.emit.apply(process, arguments); + }; + } else { + if (!util.global) { + return function() { + return false; + }; + } + return function(name) { + var methodName = "on" + name.toLowerCase(); + var method = util.global[methodName]; + if (!method) return false; + method.apply(util.global, [].slice.call(arguments, 1)); + return true; + }; + } +})(); + +function generatePromiseLifecycleEventObject(name, promise) { + return {promise: promise}; +} + +var eventToObjectGenerator = { + promiseCreated: generatePromiseLifecycleEventObject, + promiseFulfilled: generatePromiseLifecycleEventObject, + promiseRejected: generatePromiseLifecycleEventObject, + promiseResolved: generatePromiseLifecycleEventObject, + promiseCancelled: generatePromiseLifecycleEventObject, + promiseChained: function(name, promise, child) { + return {promise: promise, child: child}; + }, + warning: function(name, warning) { + return {warning: warning}; + }, + unhandledRejection: function (name, reason, promise) { + return {reason: reason, promise: promise}; + }, + rejectionHandled: generatePromiseLifecycleEventObject +}; + +var activeFireEvent = function (name) { + var globalEventFired = false; + try { + globalEventFired = fireGlobalEvent.apply(null, arguments); + } catch (e) { + async.throwLater(e); + globalEventFired = true; + } + + var domEventFired = false; + try { + domEventFired = fireDomEvent(name, + eventToObjectGenerator[name].apply(null, arguments)); + } catch (e) { + async.throwLater(e); + domEventFired = true; + } + + return domEventFired || globalEventFired; +}; + +Promise.config = function(opts) { + opts = Object(opts); + if ("longStackTraces" in opts) { + if (opts.longStackTraces) { + Promise.longStackTraces(); + } else if (!opts.longStackTraces && Promise.hasLongStackTraces()) { + disableLongStackTraces(); + } + } + if ("warnings" in opts) { + var warningsOption = opts.warnings; + config.warnings = !!warningsOption; + wForgottenReturn = config.warnings; + + if (util.isObject(warningsOption)) { + if ("wForgottenReturn" in warningsOption) { + wForgottenReturn = !!warningsOption.wForgottenReturn; + } + } + } + if ("cancellation" in opts && opts.cancellation && !config.cancellation) { + if (async.haveItemsQueued()) { + throw new Error( + "cannot enable cancellation after promises are in use"); + } + Promise.prototype._clearCancellationData = + cancellationClearCancellationData; + Promise.prototype._propagateFrom = cancellationPropagateFrom; + Promise.prototype._onCancel = cancellationOnCancel; + Promise.prototype._setOnCancel = cancellationSetOnCancel; + Promise.prototype._attachCancellationCallback = + cancellationAttachCancellationCallback; + Promise.prototype._execute = cancellationExecute; + propagateFromFunction = cancellationPropagateFrom; + config.cancellation = true; + } + if ("monitoring" in opts) { + if (opts.monitoring && !config.monitoring) { + config.monitoring = true; + Promise.prototype._fireEvent = activeFireEvent; + } else if (!opts.monitoring && config.monitoring) { + config.monitoring = false; + Promise.prototype._fireEvent = defaultFireEvent; + } + } +}; + +function defaultFireEvent() { return false; } + +Promise.prototype._fireEvent = defaultFireEvent; +Promise.prototype._execute = function(executor, resolve, reject) { + try { + executor(resolve, reject); + } catch (e) { + return e; + } +}; +Promise.prototype._onCancel = function () {}; +Promise.prototype._setOnCancel = function (handler) { USE(handler); }; +Promise.prototype._attachCancellationCallback = function(onCancel) { + USE(onCancel); +}; +Promise.prototype._captureStackTrace = function () {}; +Promise.prototype._attachExtraTrace = function () {}; +Promise.prototype._clearCancellationData = function() {}; +Promise.prototype._propagateFrom = function (parent, flags) { + USE(parent); + USE(flags); +}; + +function cancellationExecute(executor, resolve, reject) { + var promise = this; + try { + executor(resolve, reject, function(onCancel) { + if (typeof onCancel !== "function") { + throw new TypeError("onCancel must be a function, got: " + + util.toString(onCancel)); + } + promise._attachCancellationCallback(onCancel); + }); + } catch (e) { + return e; + } +} + +function cancellationAttachCancellationCallback(onCancel) { + if (!this.isCancellable()) return this; + + var previousOnCancel = this._onCancel(); + if (previousOnCancel !== undefined) { + if (util.isArray(previousOnCancel)) { + previousOnCancel.push(onCancel); + } else { + this._setOnCancel([previousOnCancel, onCancel]); + } + } else { + this._setOnCancel(onCancel); + } +} + +function cancellationOnCancel() { + ASSERT(this.isCancellable()); + return this._onCancelField; +} + +function cancellationSetOnCancel(onCancel) { + ASSERT(this.isCancellable()); + this._onCancelField = onCancel; +} + +function cancellationClearCancellationData() { + this._cancellationParent = undefined; + this._onCancelField = undefined; +} + +function cancellationPropagateFrom(parent, flags) { + ASSERT(flags !== 0); + if ((flags & PROPAGATE_CANCEL) !== 0) { + this._cancellationParent = parent; + var branchesRemainingToCancel = parent._branchesRemainingToCancel; + if (branchesRemainingToCancel === undefined) { + branchesRemainingToCancel = 0; + } + parent._branchesRemainingToCancel = branchesRemainingToCancel + 1; + } + if ((flags & PROPAGATE_BIND) !== 0 && parent._isBound()) { + this._setBoundTo(parent._boundTo); + } +} + +function bindingPropagateFrom(parent, flags) { + ASSERT(flags !== 0); + if ((flags & PROPAGATE_BIND) !== 0 && parent._isBound()) { + this._setBoundTo(parent._boundTo); + } +} +var propagateFromFunction = bindingPropagateFrom; + +function boundValueFunction() { + var ret = this._boundTo; + if (ret !== undefined) { + if (ret instanceof Promise) { + if (ret.isFulfilled()) { + return ret.value(); + } else { + return undefined; + } + } + } + return ret; +} + +function longStackTracesCaptureStackTrace() { + ASSERT(this._trace == null); + this._trace = new CapturedTrace(this._peekContext()); +} + +function longStackTracesAttachExtraTrace(error, ignoreSelf) { + if (canAttachTrace(error)) { + var trace = this._trace; + if (trace !== undefined) { + if (ignoreSelf) trace = trace._parent; + } + if (trace !== undefined) { + trace.attachExtraTrace(error); + } else if (!error.__stackCleaned__) { + var parsed = parseStackAndMessage(error); + util.notEnumerableProp(error, "stack", + parsed.message + "\n" + parsed.stack.join("\n")); + util.notEnumerableProp(error, "__stackCleaned__", true); + } + } +} + +function checkForgottenReturns(returnValue, promiseCreated, name, promise, + parent) { + if (returnValue === undefined && promiseCreated !== null && + wForgottenReturn) { + if (parent !== undefined && parent._returnedNonUndefined()) return; + if (BIT_FIELD_READ(LENGTH_MASK, promise._bitField) === 0) return; + + if (name) name = name + " "; + var msg = "a promise was created in a " + name + + "handler but was not returned from it"; + promise._warn(msg, true, promiseCreated); + } +} + +function deprecated(name, replacement) { + var message = name + + " is deprecated and will be removed in a future version."; + if (replacement) message += " Use " + replacement + " instead."; + return warn(message); +} + +function warn(message, shouldUseOwnTrace, promise) { + if (!config.warnings) return; + var warning = new Warning(message); + var ctx; + if (shouldUseOwnTrace) { + promise._attachExtraTrace(warning); + } else if (config.longStackTraces && (ctx = Promise._peekContext())) { + ctx.attachExtraTrace(warning); + } else { + var parsed = parseStackAndMessage(warning); + warning.stack = parsed.message + "\n" + parsed.stack.join("\n"); + } + + if (!activeFireEvent("warning", warning)) { + formatAndLogError(warning, "", true); + } +} + +function reconstructStack(message, stacks) { + for (var i = 0; i < stacks.length - 1; ++i) { + stacks[i].push(FROM_PREVIOUS_EVENT); + stacks[i] = stacks[i].join("\n"); + } + if (i < stacks.length) { + stacks[i] = stacks[i].join("\n"); + } + return message + "\n" + stacks.join("\n"); +} + +function removeDuplicateOrEmptyJumps(stacks) { + for (var i = 0; i < stacks.length; ++i) { + if (stacks[i].length === 0 || + ((i + 1 < stacks.length) && stacks[i][0] === stacks[i+1][0])) { + stacks.splice(i, 1); + i--; + } + } +} + +function removeCommonRoots(stacks) { + var current = stacks[0]; + for (var i = 1; i < stacks.length; ++i) { + var prev = stacks[i]; + var currentLastIndex = current.length - 1; + var currentLastLine = current[currentLastIndex]; + var commonRootMeetPoint = -1; + + for (var j = prev.length - 1; j >= 0; --j) { + if (prev[j] === currentLastLine) { + commonRootMeetPoint = j; + break; + } + } + + for (var j = commonRootMeetPoint; j >= 0; --j) { + var line = prev[j]; + if (current[currentLastIndex] === line) { + current.pop(); + currentLastIndex--; + } else { + break; + } + } + current = prev; + } +} + +function cleanStack(stack) { + var ret = []; + for (var i = 0; i < stack.length; ++i) { + var line = stack[i]; + var isTraceLine = NO_STACK_TRACE === line || + stackFramePattern.test(line); + var isInternalFrame = isTraceLine && shouldIgnore(line); + if (isTraceLine && !isInternalFrame) { + if (indentStackFrames && line.charAt(0) !== " ") { + // Make Firefox stack traces readable...it is almost + // impossible to see the event boundaries without + // indentation. + line = " " + line; + } + ret.push(line); + } + } + return ret; +} + +function stackFramesAsArray(error) { + var stack = error.stack.replace(/\s+$/g, "").split("\n"); + for (var i = 0; i < stack.length; ++i) { + var line = stack[i]; + if (NO_STACK_TRACE === line || stackFramePattern.test(line)) { + break; + } + } + // Chrome and IE include the error message in the stack + if (i > 0) { + stack = stack.slice(i); + } + return stack; +} + +function parseStackAndMessage(error) { + var stack = error.stack; + var message = error.toString(); + stack = typeof stack === "string" && stack.length > 0 + ? stackFramesAsArray(error) : [NO_STACK_TRACE]; + return { + message: message, + stack: cleanStack(stack) + }; +} + +function formatAndLogError(error, title, isSoft) { + if (typeof console !== "undefined") { + var message; + if (util.isObject(error)) { + var stack = error.stack; + message = title + formatStack(stack, error); + } else { + message = title + String(error); + } + if (typeof printWarning === "function") { + printWarning(message, isSoft); + } else if (typeof console.log === "function" || + typeof console.log === "object") { + console.log(message); + } + } +} + +function fireRejectionEvent(name, localHandler, reason, promise) { + var localEventFired = false; + try { + if (typeof localHandler === "function") { + localEventFired = true; + if (name === REJECTION_HANDLED_EVENT) { + localHandler(promise); + } else { + localHandler(reason, promise); + } + } + } catch (e) { + async.throwLater(e); + } + + if (name === UNHANDLED_REJECTION_EVENT) { + if (!activeFireEvent(name, reason, promise) && !localEventFired) { + formatAndLogError(reason, UNHANDLED_REJECTION_HEADER); + } + } else { + activeFireEvent(name, promise); + } +} + +function formatNonError(obj) { + var str; + if (typeof obj === "function") { + str = "[function " + + (obj.name || "anonymous") + + "]"; + } else { + str = obj && typeof obj.toString === "function" + ? obj.toString() : util.toString(obj); + var ruselessToString = /\[object [a-zA-Z0-9$_]+\]/; + if (ruselessToString.test(str)) { + try { + var newStr = JSON.stringify(obj); + str = newStr; + } + catch(e) { + + } + } + if (str.length === 0) { + str = "(empty array)"; + } + } + return ("(<" + snip(str) + ">, no stack trace)"); +} + +function snip(str) { + var maxChars = 41; + if (str.length < maxChars) { + return str; + } + return str.substr(0, maxChars - 3) + "..."; +} + +function longStackTracesIsSupported() { + return typeof captureStackTrace === "function"; +} + +// For filtering out internal calls from stack traces +var shouldIgnore = function() { return false; }; +var parseLineInfoRegex = /[\/<\(]([^:\/]+):(\d+):(?:\d+)\)?\s*$/; +function parseLineInfo(line) { + var matches = line.match(parseLineInfoRegex); + if (matches) { + return { + fileName: matches[1], + line: parseInt(matches[2], 10) + }; + } +} + +function setBounds(firstLineError, lastLineError) { + if (!longStackTracesIsSupported()) return; + var firstStackLines = firstLineError.stack.split("\n"); + var lastStackLines = lastLineError.stack.split("\n"); + var firstIndex = -1; + var lastIndex = -1; + var firstFileName; + var lastFileName; + for (var i = 0; i < firstStackLines.length; ++i) { + var result = parseLineInfo(firstStackLines[i]); + if (result) { + firstFileName = result.fileName; + firstIndex = result.line; + break; + } + } + for (var i = 0; i < lastStackLines.length; ++i) { + var result = parseLineInfo(lastStackLines[i]); + if (result) { + lastFileName = result.fileName; + lastIndex = result.line; + break; + } + } + if (firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName || + firstFileName !== lastFileName || firstIndex >= lastIndex) { + return; + } + + shouldIgnore = function(line) { + if (bluebirdFramePattern.test(line)) return true; + var info = parseLineInfo(line); + if (info) { + if (info.fileName === firstFileName && + (firstIndex <= info.line && info.line <= lastIndex)) { + return true; + } + } + return false; + }; +} + +function CapturedTrace(parent) { + ASSERT(parent === undefined || parent instanceof CapturedTrace); + this._parent = parent; + this._promisesCreated = 0; + var length = this._length = 1 + (parent === undefined ? 0 : parent._length); + captureStackTrace(this, CapturedTrace); + // Unless the user manually nested > 32 indentation levels, + // there must be cycles + if (length > 32) this.uncycle(); +} +util.inherits(CapturedTrace, Error); +Context.CapturedTrace = CapturedTrace; + +CapturedTrace.prototype.uncycle = function() { + var length = this._length; + if (length < 2) return; + var nodes = []; + var stackToIndex = {}; + + for (var i = 0, node = this; node !== undefined; ++i) { + nodes.push(node); + node = node._parent; + } + // the node length is only used as heuristic to decide when to decycle, as + // there may be multiple linked lists that share members and decycling one + // will fail to update lenghts in the other. This is the correct length. + length = this._length = i; + ASSERT(nodes[0] === this); + ASSERT(nodes[nodes.length - 1] instanceof CapturedTrace); + + for (var i = length - 1; i >= 0; --i) { + var stack = nodes[i].stack; + if (stackToIndex[stack] === undefined) { + stackToIndex[stack] = i; + } + } + for (var i = 0; i < length; ++i) { + var currentStack = nodes[i].stack; + var index = stackToIndex[currentStack]; + ASSERT(currentStack === nodes[index].stack); + + if (index !== undefined && index !== i) { + if (index > 0) { + ASSERT(nodes[index - 1]._parent === nodes[index]); + nodes[index - 1]._parent = undefined; + nodes[index - 1]._length = 1; + } + nodes[i]._parent = undefined; + nodes[i]._length = 1; + var cycleEdgeNode = i > 0 ? nodes[i - 1] : this; + + if (index < length - 1) { + cycleEdgeNode._parent = nodes[index + 1]; + cycleEdgeNode._parent.uncycle(); + cycleEdgeNode._length = + cycleEdgeNode._parent._length + 1; + } else { + cycleEdgeNode._parent = undefined; + cycleEdgeNode._length = 1; + } + var currentChildLength = cycleEdgeNode._length + 1; + for (var j = i - 2; j >= 0; --j) { + nodes[j]._length = currentChildLength; + currentChildLength++; + } + return; + } + } +}; + +CapturedTrace.prototype.attachExtraTrace = function(error) { + if (error.__stackCleaned__) return; + this.uncycle(); + var parsed = parseStackAndMessage(error); + var message = parsed.message; + var stacks = [parsed.stack]; + + var trace = this; + while (trace !== undefined) { + stacks.push(cleanStack(trace.stack.split("\n"))); + trace = trace._parent; + } + removeCommonRoots(stacks); + removeDuplicateOrEmptyJumps(stacks); + util.notEnumerableProp(error, "stack", reconstructStack(message, stacks)); + util.notEnumerableProp(error, "__stackCleaned__", true); +}; + +var captureStackTrace = (function stackDetection() { + var v8stackFramePattern = /^\s*at\s*/; + var v8stackFormatter = function(stack, error) { + ASSERT(error !== null); + + if (typeof stack === "string") return stack; + + if (error.name !== undefined && + error.message !== undefined) { + return error.toString(); + } + return formatNonError(error); + }; + + //V8 + if (typeof Error.stackTraceLimit === "number" && + typeof Error.captureStackTrace === "function") { + Error.stackTraceLimit += 6; + stackFramePattern = v8stackFramePattern; + formatStack = v8stackFormatter; + var captureStackTrace = Error.captureStackTrace; + + // For node + shouldIgnore = function(line) { + return bluebirdFramePattern.test(line); + }; + return function(receiver, ignoreUntil) { + Error.stackTraceLimit += 6; + captureStackTrace(receiver, ignoreUntil); + Error.stackTraceLimit -= 6; + }; + } + var err = new Error(); + + //SpiderMonkey + if (typeof err.stack === "string" && + err.stack.split("\n")[0].indexOf("stackDetection@") >= 0) { + stackFramePattern = /@/; + formatStack = v8stackFormatter; + indentStackFrames = true; + return function captureStackTrace(o) { + o.stack = new Error().stack; + }; + } + + var hasStackAfterThrow; + try { throw new Error(); } + catch(e) { + hasStackAfterThrow = ("stack" in e); + } + // IE 10+ + if (!("stack" in err) && hasStackAfterThrow && + typeof Error.stackTraceLimit === "number") { + stackFramePattern = v8stackFramePattern; + formatStack = v8stackFormatter; + return function captureStackTrace(o) { + Error.stackTraceLimit += 6; + try { throw new Error(); } + catch(e) { o.stack = e.stack; } + Error.stackTraceLimit -= 6; + }; + } + + formatStack = function(stack, error) { + if (typeof stack === "string") return stack; + + if ((typeof error === "object" || + typeof error === "function") && + error.name !== undefined && + error.message !== undefined) { + return error.toString(); + } + return formatNonError(error); + }; + + return null; + +})([]); + +if (typeof console !== "undefined" && typeof console.warn !== "undefined") { + printWarning = function (message) { + console.warn(message); + }; + if (util.isNode && process.stderr.isTTY) { + printWarning = function(message, isSoft) { + var color = isSoft ? "\u001b[33m" : "\u001b[31m"; + console.warn(color + message + "\u001b[0m\n"); + }; + } else if (!util.isNode && typeof (new Error().stack) === "string") { + printWarning = function(message, isSoft) { + console.warn("%c" + message, + isSoft ? "color: darkorange" : "color: red"); + }; + } +} + +var config = { + warnings: warnings, + longStackTraces: false, + cancellation: false, + monitoring: false +}; + +if (longStackTraces) Promise.longStackTraces(); + +return { + longStackTraces: function() { + return config.longStackTraces; + }, + warnings: function() { + return config.warnings; + }, + cancellation: function() { + return config.cancellation; + }, + monitoring: function() { + return config.monitoring; + }, + propagateFromFunction: function() { + return propagateFromFunction; + }, + boundValueFunction: function() { + return boundValueFunction; + }, + checkForgottenReturns: checkForgottenReturns, + setBounds: setBounds, + warn: warn, + deprecated: deprecated, + CapturedTrace: CapturedTrace, + fireDomEvent: fireDomEvent, + fireGlobalEvent: fireGlobalEvent +}; +}; diff --git a/platforms/android/assets/www/libs/bluebird/src/direct_resolve.js b/platforms/android/assets/www/libs/bluebird/src/direct_resolve.js new file mode 100644 index 0000000..a890298 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/direct_resolve.js @@ -0,0 +1,46 @@ +"use strict"; +module.exports = function(Promise) { +function returner() { + return this.value; +} +function thrower() { + throw this.reason; +} + +Promise.prototype["return"] = +Promise.prototype.thenReturn = function (value) { + if (value instanceof Promise) value.suppressUnhandledRejections(); + return this._then( + returner, undefined, undefined, {value: value}, undefined); +}; + +Promise.prototype["throw"] = +Promise.prototype.thenThrow = function (reason) { + return this._then( + thrower, undefined, undefined, {reason: reason}, undefined); +}; + +Promise.prototype.catchThrow = function (reason) { + if (arguments.length <= 1) { + return this._then( + undefined, thrower, undefined, {reason: reason}, undefined); + } else { + var _reason = arguments[1]; + var handler = function() {throw _reason;}; + return this.caught(reason, handler); + } +}; + +Promise.prototype.catchReturn = function (value) { + if (arguments.length <= 1) { + if (value instanceof Promise) value.suppressUnhandledRejections(); + return this._then( + undefined, returner, undefined, {value: value}, undefined); + } else { + var _value = arguments[1]; + if (_value instanceof Promise) _value.suppressUnhandledRejections(); + var handler = function() {return _value;}; + return this.caught(value, handler); + } +}; +}; diff --git a/platforms/android/assets/www/libs/bluebird/src/each.js b/platforms/android/assets/www/libs/bluebird/src/each.js new file mode 100644 index 0000000..ac8ead7 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/each.js @@ -0,0 +1,29 @@ +"use strict"; +module.exports = function(Promise, INTERNAL) { +var PromiseReduce = Promise.reduce; +var PromiseAll = Promise.all; + +function promiseAllThis() { + return PromiseAll(this); +} + +function PromiseMapSeries(promises, fn) { + return PromiseReduce(promises, fn, INTERNAL, INTERNAL); +} + +Promise.prototype.each = function (fn) { + return this.mapSeries(fn) + ._then(promiseAllThis, undefined, undefined, this, undefined); +}; + +Promise.prototype.mapSeries = function (fn) { + return PromiseReduce(this, fn, INTERNAL, INTERNAL); +}; + +Promise.each = function (promises, fn) { + return PromiseMapSeries(promises, fn) + ._then(promiseAllThis, undefined, undefined, promises, undefined); +}; + +Promise.mapSeries = PromiseMapSeries; +}; diff --git a/platforms/android/assets/www/libs/bluebird/src/errors.js b/platforms/android/assets/www/libs/bluebird/src/errors.js new file mode 100644 index 0000000..7762216 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/errors.js @@ -0,0 +1,117 @@ +"use strict"; +var es5 = require("./es5"); +var Objectfreeze = es5.freeze; +var util = require("./util"); +var inherits = util.inherits; +var notEnumerableProp = util.notEnumerableProp; + +function subError(nameProperty, defaultMessage) { + function SubError(message) { + if (!(this instanceof SubError)) return new SubError(message); + notEnumerableProp(this, "message", + typeof message === "string" ? message : defaultMessage); + notEnumerableProp(this, "name", nameProperty); + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } else { + Error.call(this); + } + } + inherits(SubError, Error); + return SubError; +} + +var _TypeError, _RangeError; +var Warning = subError("Warning", "warning"); +var CancellationError = subError("CancellationError", "cancellation error"); +var TimeoutError = subError("TimeoutError", "timeout error"); +var AggregateError = subError("AggregateError", "aggregate error"); +try { + _TypeError = TypeError; + _RangeError = RangeError; +} catch(e) { + _TypeError = subError("TypeError", "type error"); + _RangeError = subError("RangeError", "range error"); +} + +var methods = ("join pop push shift unshift slice filter forEach some " + + "every map indexOf lastIndexOf reduce reduceRight sort reverse").split(" "); + +for (var i = 0; i < methods.length; ++i) { + if (typeof Array.prototype[methods[i]] === "function") { + AggregateError.prototype[methods[i]] = Array.prototype[methods[i]]; + } +} + +es5.defineProperty(AggregateError.prototype, "length", { + value: 0, + configurable: false, + writable: true, + enumerable: true +}); +AggregateError.prototype[OPERATIONAL_ERROR_KEY] = true; +var level = 0; +AggregateError.prototype.toString = function() { + var indent = Array(level * 4 + 1).join(" "); + var ret = "\n" + indent + "AggregateError of:" + "\n"; + level++; + indent = Array(level * 4 + 1).join(" "); + for (var i = 0; i < this.length; ++i) { + var str = this[i] === this ? "[Circular AggregateError]" : this[i] + ""; + var lines = str.split("\n"); + for (var j = 0; j < lines.length; ++j) { + lines[j] = indent + lines[j]; + } + str = lines.join("\n"); + ret += str + "\n"; + } + level--; + return ret; +}; + +function OperationalError(message) { + if (!(this instanceof OperationalError)) + return new OperationalError(message); + notEnumerableProp(this, "name", "OperationalError"); + notEnumerableProp(this, "message", message); + this.cause = message; + this[OPERATIONAL_ERROR_KEY] = true; + + if (message instanceof Error) { + notEnumerableProp(this, "message", message.message); + notEnumerableProp(this, "stack", message.stack); + } else if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } + +} +inherits(OperationalError, Error); + +//Ensure all copies of the library throw the same error types +var errorTypes = Error[BLUEBIRD_ERRORS]; +if (!errorTypes) { + errorTypes = Objectfreeze({ + CancellationError: CancellationError, + TimeoutError: TimeoutError, + OperationalError: OperationalError, + RejectionError: OperationalError, + AggregateError: AggregateError + }); + es5.defineProperty(Error, BLUEBIRD_ERRORS, { + value: errorTypes, + writable: false, + enumerable: false, + configurable: false + }); +} + +module.exports = { + Error: Error, + TypeError: _TypeError, + RangeError: _RangeError, + CancellationError: errorTypes.CancellationError, + OperationalError: errorTypes.OperationalError, + TimeoutError: errorTypes.TimeoutError, + AggregateError: errorTypes.AggregateError, + Warning: Warning +}; diff --git a/platforms/android/assets/www/libs/bluebird/src/es5.js b/platforms/android/assets/www/libs/bluebird/src/es5.js new file mode 100644 index 0000000..ea41d5a --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/es5.js @@ -0,0 +1,80 @@ +var isES5 = (function(){ + "use strict"; + return this === undefined; +})(); + +if (isES5) { + module.exports = { + freeze: Object.freeze, + defineProperty: Object.defineProperty, + getDescriptor: Object.getOwnPropertyDescriptor, + keys: Object.keys, + names: Object.getOwnPropertyNames, + getPrototypeOf: Object.getPrototypeOf, + isArray: Array.isArray, + isES5: isES5, + propertyIsWritable: function(obj, prop) { + var descriptor = Object.getOwnPropertyDescriptor(obj, prop); + return !!(!descriptor || descriptor.writable || descriptor.set); + } + }; +} else { + var has = {}.hasOwnProperty; + var str = {}.toString; + var proto = {}.constructor.prototype; + + var ObjectKeys = function (o) { + var ret = []; + for (var key in o) { + if (has.call(o, key)) { + ret.push(key); + } + } + return ret; + }; + + var ObjectGetDescriptor = function(o, key) { + return {value: o[key]}; + }; + + var ObjectDefineProperty = function (o, key, desc) { + o[key] = desc.value; + return o; + }; + + var ObjectFreeze = function (obj) { + return obj; + }; + + var ObjectGetPrototypeOf = function (obj) { + try { + return Object(obj).constructor.prototype; + } + catch (e) { + return proto; + } + }; + + var ArrayIsArray = function (obj) { + try { + return str.call(obj) === "[object Array]"; + } + catch(e) { + return false; + } + }; + + module.exports = { + isArray: ArrayIsArray, + keys: ObjectKeys, + names: ObjectKeys, + defineProperty: ObjectDefineProperty, + getDescriptor: ObjectGetDescriptor, + freeze: ObjectFreeze, + getPrototypeOf: ObjectGetPrototypeOf, + isES5: isES5, + propertyIsWritable: function() { + return true; + } + }; +} diff --git a/platforms/android/assets/www/libs/bluebird/src/filter.js b/platforms/android/assets/www/libs/bluebird/src/filter.js new file mode 100644 index 0000000..ed57bf0 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/filter.js @@ -0,0 +1,12 @@ +"use strict"; +module.exports = function(Promise, INTERNAL) { +var PromiseMap = Promise.map; + +Promise.prototype.filter = function (fn, options) { + return PromiseMap(this, fn, options, INTERNAL); +}; + +Promise.filter = function (promises, fn, options) { + return PromiseMap(promises, fn, options, INTERNAL); +}; +}; diff --git a/platforms/android/assets/www/libs/bluebird/src/finally.js b/platforms/android/assets/www/libs/bluebird/src/finally.js new file mode 100644 index 0000000..fc72681 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/finally.js @@ -0,0 +1,111 @@ +"use strict"; +module.exports = function(Promise, tryConvertToPromise) { +var util = require("./util"); +var CancellationError = Promise.CancellationError; +var errorObj = util.errorObj; + +function PassThroughHandlerContext(promise, type, handler) { + this.promise = promise; + this.type = type; + this.handler = handler; + this.called = false; + this.cancelPromise = null; +} + +PassThroughHandlerContext.prototype.isFinallyHandler = function() { + return this.type === FINALLY_TYPE; +}; + +function FinallyHandlerCancelReaction(finallyHandler) { + this.finallyHandler = finallyHandler; +} + +FinallyHandlerCancelReaction.prototype._resultCancelled = function() { + checkCancel(this.finallyHandler); +}; + +function checkCancel(ctx, reason) { + if (ctx.cancelPromise != null) { + if (arguments.length > 1) { + ctx.cancelPromise._reject(reason); + } else { + ctx.cancelPromise._cancel(); + } + ctx.cancelPromise = null; + return true; + } + return false; +} + +function succeed() { + return finallyHandler.call(this, this.promise._target()._settledValue()); +} +function fail(reason) { + if (checkCancel(this, reason)) return; + errorObj.e = reason; + return errorObj; +} +function finallyHandler(reasonOrValue) { + var promise = this.promise; + var handler = this.handler; + + if (!this.called) { + this.called = true; + var ret = this.isFinallyHandler() + ? handler.call(promise._boundValue()) + : handler.call(promise._boundValue(), reasonOrValue); + if (ret !== undefined) { + promise._setReturnedNonUndefined(); + var maybePromise = tryConvertToPromise(ret, promise); + if (maybePromise instanceof Promise) { + if (this.cancelPromise != null) { + if (maybePromise.isCancelled()) { + var reason = + new CancellationError(LATE_CANCELLATION_OBSERVER); + promise._attachExtraTrace(reason); + errorObj.e = reason; + return errorObj; + } else if (maybePromise.isPending()) { + maybePromise._attachCancellationCallback( + new FinallyHandlerCancelReaction(this)); + } + } + return maybePromise._then( + succeed, fail, undefined, this, undefined); + } + } + } + + if (promise.isRejected()) { + checkCancel(this); + errorObj.e = reasonOrValue; + return errorObj; + } else { + checkCancel(this); + return reasonOrValue; + } +} + +Promise.prototype._passThrough = function(handler, type, success, fail) { + if (typeof handler !== "function") return this.then(); + return this._then(success, + fail, + undefined, + new PassThroughHandlerContext(this, type, handler), + undefined); +}; + +Promise.prototype.lastly = +Promise.prototype["finally"] = function (handler) { + return this._passThrough(handler, + FINALLY_TYPE, + finallyHandler, + finallyHandler); +}; + +Promise.prototype.tap = function (handler) { + return this._passThrough(handler, TAP_TYPE, finallyHandler); +}; + +return PassThroughHandlerContext; +}; diff --git a/platforms/android/assets/www/libs/bluebird/src/generators.js b/platforms/android/assets/www/libs/bluebird/src/generators.js new file mode 100644 index 0000000..f03ed03 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/generators.js @@ -0,0 +1,226 @@ +"use strict"; +module.exports = function(Promise, + apiRejection, + INTERNAL, + tryConvertToPromise, + Proxyable, + debug) { +var errors = require("./errors"); +var TypeError = errors.TypeError; +var ASSERT = require("./assert"); +var util = require("./util"); +var errorObj = util.errorObj; +var tryCatch = util.tryCatch; +var yieldHandlers = []; + +function promiseFromYieldHandler(value, yieldHandlers, traceParent) { + for (var i = 0; i < yieldHandlers.length; ++i) { + traceParent._pushContext(); + var result = tryCatch(yieldHandlers[i])(value); + traceParent._popContext(); + if (result === errorObj) { + traceParent._pushContext(); + var ret = Promise.reject(errorObj.e); + traceParent._popContext(); + return ret; + } + var maybePromise = tryConvertToPromise(result, traceParent); + if (maybePromise instanceof Promise) return maybePromise; + } + return null; +} + +function PromiseSpawn(generatorFunction, receiver, yieldHandler, stack) { + if (debug.cancellation()) { + var internal = new Promise(INTERNAL); + var _finallyPromise = this._finallyPromise = new Promise(INTERNAL); + this._promise = internal.lastly(function() { + return _finallyPromise; + }); + internal._captureStackTrace(); + internal._setOnCancel(this); + } else { + var promise = this._promise = new Promise(INTERNAL); + promise._captureStackTrace(); + } + this._stack = stack; + this._generatorFunction = generatorFunction; + this._receiver = receiver; + this._generator = undefined; + this._yieldHandlers = typeof yieldHandler === "function" + ? [yieldHandler].concat(yieldHandlers) + : yieldHandlers; + this._yieldedPromise = null; + this._cancellationPhase = false; +} +util.inherits(PromiseSpawn, Proxyable); + +PromiseSpawn.prototype._isResolved = function() { + return this._promise === null; +}; + +PromiseSpawn.prototype._cleanup = function() { + this._promise = this._generator = null; + if (debug.cancellation() && this._finallyPromise !== null) { + this._finallyPromise._fulfill(); + this._finallyPromise = null; + } +}; + +PromiseSpawn.prototype._promiseCancelled = function() { + if (this._isResolved()) return; + var implementsReturn = typeof this._generator["return"] !== "undefined"; + + var result; + if (!implementsReturn) { + var reason = new Promise.CancellationError( + "generator .return() sentinel"); + Promise.coroutine.returnSentinel = reason; + this._promise._attachExtraTrace(reason); + this._promise._pushContext(); + result = tryCatch(this._generator["throw"]).call(this._generator, + reason); + this._promise._popContext(); + } else { + this._promise._pushContext(); + result = tryCatch(this._generator["return"]).call(this._generator, + undefined); + this._promise._popContext(); + } + this._cancellationPhase = true; + this._yieldedPromise = null; + this._continue(result); +}; + +PromiseSpawn.prototype._promiseFulfilled = function(value) { + this._yieldedPromise = null; + this._promise._pushContext(); + var result = tryCatch(this._generator.next).call(this._generator, value); + this._promise._popContext(); + this._continue(result); +}; + +PromiseSpawn.prototype._promiseRejected = function(reason) { + this._yieldedPromise = null; + this._promise._attachExtraTrace(reason); + this._promise._pushContext(); + var result = tryCatch(this._generator["throw"]) + .call(this._generator, reason); + this._promise._popContext(); + this._continue(result); +}; + +PromiseSpawn.prototype._resultCancelled = function() { + if (this._yieldedPromise instanceof Promise) { + var promise = this._yieldedPromise; + this._yieldedPromise = null; + promise.cancel(); + } +}; + +PromiseSpawn.prototype.promise = function () { + return this._promise; +}; + +PromiseSpawn.prototype._run = function () { + this._generator = this._generatorFunction.call(this._receiver); + this._receiver = + this._generatorFunction = undefined; + this._promiseFulfilled(undefined); +}; + +PromiseSpawn.prototype._continue = function (result) { + ASSERT(this._yieldedPromise == null); + var promise = this._promise; + if (result === errorObj) { + this._cleanup(); + if (this._cancellationPhase) { + return promise.cancel(); + } else { + return promise._rejectCallback(result.e, false); + } + } + + var value = result.value; + if (result.done === true) { + this._cleanup(); + if (this._cancellationPhase) { + return promise.cancel(); + } else { + return promise._resolveCallback(value); + } + } else { + var maybePromise = tryConvertToPromise(value, this._promise); + if (!(maybePromise instanceof Promise)) { + maybePromise = + promiseFromYieldHandler(maybePromise, + this._yieldHandlers, + this._promise); + ASSERT(maybePromise === null || maybePromise instanceof Promise); + if (maybePromise === null) { + this._promiseRejected( + new TypeError( + YIELDED_NON_PROMISE_ERROR.replace("%s", value) + + FROM_COROUTINE_CREATED_AT + + this._stack.split("\n").slice(1, -7).join("\n") + ) + ); + return; + } + } + maybePromise = maybePromise._target(); + var bitField = maybePromise._bitField; + USE(bitField); + if (BIT_FIELD_CHECK(IS_PENDING_AND_WAITING_NEG)) { + this._yieldedPromise = maybePromise; + maybePromise._proxy(this, null); + } else if (BIT_FIELD_CHECK(IS_FULFILLED)) { + this._promiseFulfilled(maybePromise._value()); + } else if (BIT_FIELD_CHECK(IS_REJECTED)) { + this._promiseRejected(maybePromise._reason()); + } else { + this._promiseCancelled(); + } + } +}; + +Promise.coroutine = function (generatorFunction, options) { + //Throw synchronously because Promise.coroutine is semantically + //something you call at "compile time" to annotate static functions + if (typeof generatorFunction !== "function") { + throw new TypeError(NOT_GENERATOR_ERROR); + } + var yieldHandler = Object(options).yieldHandler; + var PromiseSpawn$ = PromiseSpawn; + var stack = new Error().stack; + return function () { + var generator = generatorFunction.apply(this, arguments); + var spawn = new PromiseSpawn$(undefined, undefined, yieldHandler, + stack); + var ret = spawn.promise(); + spawn._generator = generator; + spawn._promiseFulfilled(undefined); + return ret; + }; +}; + +Promise.coroutine.addYieldHandler = function(fn) { + if (typeof fn !== "function") { + throw new TypeError(FUNCTION_ERROR + util.classString(fn)); + } + yieldHandlers.push(fn); +}; + +Promise.spawn = function (generatorFunction) { + debug.deprecated("Promise.spawn()", "Promise.coroutine()"); + //Return rejected promise because Promise.spawn is semantically + //something that will be called at runtime with possibly dynamic values + if (typeof generatorFunction !== "function") { + return apiRejection(NOT_GENERATOR_ERROR); + } + var spawn = new PromiseSpawn(generatorFunction, this); + var ret = spawn.promise(); + spawn._run(Promise.spawn); + return ret; +}; +}; diff --git a/platforms/android/assets/www/libs/bluebird/src/join.js b/platforms/android/assets/www/libs/bluebird/src/join.js new file mode 100644 index 0000000..3eea336 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/join.js @@ -0,0 +1,149 @@ +"use strict"; +module.exports = +function(Promise, PromiseArray, tryConvertToPromise, INTERNAL) { +var util = require("./util"); +var canEvaluate = util.canEvaluate; +var tryCatch = util.tryCatch; +var errorObj = util.errorObj; +var reject; + +if (!__BROWSER__) { +if (canEvaluate) { + var thenCallback = function(i) { + return new Function("value", "holder", " \n\ + 'use strict'; \n\ + holder.pIndex = value; \n\ + holder.checkFulfillment(this); \n\ + ".replace(/Index/g, i)); + }; + + var promiseSetter = function(i) { + return new Function("promise", "holder", " \n\ + 'use strict'; \n\ + holder.pIndex = promise; \n\ + ".replace(/Index/g, i)); + }; + + var generateHolderClass = function(total) { + var props = new Array(total); + for (var i = 0; i < props.length; ++i) { + props[i] = "this.p" + (i+1); + } + var assignment = props.join(" = ") + " = null;"; + var cancellationCode= "var promise;\n" + props.map(function(prop) { + return " \n\ + promise = " + prop + "; \n\ + if (promise instanceof Promise) { \n\ + promise.cancel(); \n\ + } \n\ + "; + }).join("\n"); + var passedArguments = props.join(", "); + var name = "Holder$" + total; + + + var code = "return function(tryCatch, errorObj, Promise) { \n\ + 'use strict'; \n\ + function [TheName](fn) { \n\ + [TheProperties] \n\ + this.fn = fn; \n\ + this.now = 0; \n\ + } \n\ + [TheName].prototype.checkFulfillment = function(promise) { \n\ + var now = ++this.now; \n\ + if (now === [TheTotal]) { \n\ + promise._pushContext(); \n\ + var callback = this.fn; \n\ + var ret = tryCatch(callback)([ThePassedArguments]); \n\ + promise._popContext(); \n\ + if (ret === errorObj) { \n\ + promise._rejectCallback(ret.e, false); \n\ + } else { \n\ + promise._resolveCallback(ret); \n\ + } \n\ + } \n\ + }; \n\ + \n\ + [TheName].prototype._resultCancelled = function() { \n\ + [CancellationCode] \n\ + }; \n\ + \n\ + return [TheName]; \n\ + }(tryCatch, errorObj, Promise); \n\ + "; + + code = code.replace(/\[TheName\]/g, name) + .replace(/\[TheTotal\]/g, total) + .replace(/\[ThePassedArguments\]/g, passedArguments) + .replace(/\[TheProperties\]/g, assignment) + .replace(/\[CancellationCode\]/g, cancellationCode); + + return new Function("tryCatch", "errorObj", "Promise", code) + (tryCatch, errorObj, Promise); + }; + + var holderClasses = []; + var thenCallbacks = []; + var promiseSetters = []; + + for (var i = 0; i < GENERATED_CLASS_COUNT; ++i) { + holderClasses.push(generateHolderClass(i + 1)); + thenCallbacks.push(thenCallback(i + 1)); + promiseSetters.push(promiseSetter(i + 1)); + } + + reject = function (reason) { + this._reject(reason); + }; +}} + +Promise.join = function () { + var last = arguments.length - 1; + var fn; + if (last > 0 && typeof arguments[last] === "function") { + fn = arguments[last]; + if (!__BROWSER__) { + if (last <= GENERATED_CLASS_COUNT && canEvaluate) { + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + var HolderClass = holderClasses[last - 1]; + var holder = new HolderClass(fn); + var callbacks = thenCallbacks; + + for (var i = 0; i < last; ++i) { + var maybePromise = tryConvertToPromise(arguments[i], ret); + if (maybePromise instanceof Promise) { + maybePromise = maybePromise._target(); + var bitField = maybePromise._bitField; + USE(bitField); + if (BIT_FIELD_CHECK(IS_PENDING_AND_WAITING_NEG)) { + maybePromise._then(callbacks[i], reject, + undefined, ret, holder); + promiseSetters[i](maybePromise, holder); + } else if (BIT_FIELD_CHECK(IS_FULFILLED)) { + callbacks[i].call(ret, + maybePromise._value(), holder); + } else if (BIT_FIELD_CHECK(IS_REJECTED)) { + ret._reject(maybePromise._reason()); + } else { + ret._cancel(); + } + } else { + callbacks[i].call(ret, maybePromise, holder); + } + } + if (!ret._isFateSealed()) { + ret._setAsyncGuaranteed(); + ret._setOnCancel(holder); + } + return ret; + } + } + } + INLINE_SLICE(args, arguments); + if (fn) args.pop(); + var ret = new PromiseArray(args).promise(); + return fn !== undefined ? ret.spread(fn) : ret; +}; + +}; diff --git a/platforms/android/assets/www/libs/bluebird/src/map.js b/platforms/android/assets/www/libs/bluebird/src/map.js new file mode 100644 index 0000000..7e86f21 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/map.js @@ -0,0 +1,181 @@ +"use strict"; +module.exports = function(Promise, + PromiseArray, + apiRejection, + tryConvertToPromise, + INTERNAL, + debug) { +var ASSERT = require("./assert"); +var getDomain = Promise._getDomain; +var util = require("./util"); +var tryCatch = util.tryCatch; +var errorObj = util.errorObj; +var EMPTY_ARRAY = []; + +function MappingPromiseArray(promises, fn, limit, _filter) { + this.constructor$(promises); + this._promise._captureStackTrace(); + var domain = getDomain(); + this._callback = domain === null ? fn : domain.bind(fn); + this._preservedValues = _filter === INTERNAL + ? new Array(this.length()) + : null; + this._limit = limit; + this._inFlight = 0; + this._queue = limit >= 1 ? [] : EMPTY_ARRAY; + this._init$(undefined, RESOLVE_ARRAY); +} +util.inherits(MappingPromiseArray, PromiseArray); + +// The following hack is required because the super constructor +// might call promiseFulfilled before this.callback = fn is set +// +// The super constructor call must always be first so that fields +// are initialized in the same order so that the sub-class instances +// will share same memory layout as the super class instances + +// Override +MappingPromiseArray.prototype._init = function () {}; + +// Override +MappingPromiseArray.prototype._promiseFulfilled = function (value, index) { + ASSERT(!this._isResolved()); + var values = this._values; + var length = this.length(); + var preservedValues = this._preservedValues; + var limit = this._limit; + + // Callback has been called for this index if it's negative + if (index < 0) { + // Restore the actual index value + index = (index * -1) - 1; + values[index] = value; + if (limit >= 1) { + this._inFlight--; + this._drainQueue(); + if (this._isResolved()) return true; + } + } else { + if (limit >= 1 && this._inFlight >= limit) { + values[index] = value; + this._queue.push(index); + return false; + } + if (preservedValues !== null) preservedValues[index] = value; + + var promise = this._promise; + var callback = this._callback; + var receiver = promise._boundValue(); + promise._pushContext(); + var ret = tryCatch(callback).call(receiver, value, index, length); + var promiseCreated = promise._popContext(); + debug.checkForgottenReturns( + ret, + promiseCreated, + preservedValues !== null ? "Promise.filter" : "Promise.map", + promise + ); + if (ret === errorObj) { + this._reject(ret.e); + return true; + } + + // If the mapper function returned a promise we simply reuse + // The MappingPromiseArray as a PromiseArray for round 2. + // To mark an index as "round 2" its inverted by adding +1 and + // multiplying by -1 + var maybePromise = tryConvertToPromise(ret, this._promise); + if (maybePromise instanceof Promise) { + maybePromise = maybePromise._target(); + var bitField = maybePromise._bitField; + USE(bitField); + if (BIT_FIELD_CHECK(IS_PENDING_AND_WAITING_NEG)) { + if (limit >= 1) this._inFlight++; + values[index] = maybePromise; + maybePromise._proxy(this, (index + 1) * -1); + return false; + } else if (BIT_FIELD_CHECK(IS_FULFILLED)) { + ret = maybePromise._value(); + } else if (BIT_FIELD_CHECK(IS_REJECTED)) { + this._reject(maybePromise._reason()); + return true; + } else { + this._cancel(); + return true; + } + } + values[index] = ret; + } + var totalResolved = ++this._totalResolved; + if (totalResolved >= length) { + if (preservedValues !== null) { + this._filter(values, preservedValues); + } else { + this._resolve(values); + } + return true; + } + return false; +}; + +MappingPromiseArray.prototype._drainQueue = function () { + var queue = this._queue; + var limit = this._limit; + var values = this._values; + while (queue.length > 0 && this._inFlight < limit) { + if (this._isResolved()) return; + var index = queue.pop(); + this._promiseFulfilled(values[index], index); + } +}; + +MappingPromiseArray.prototype._filter = function (booleans, values) { + var len = values.length; + var ret = new Array(len); + var j = 0; + for (var i = 0; i < len; ++i) { + if (booleans[i]) ret[j++] = values[i]; + } + ret.length = j; + this._resolve(ret); +}; + +MappingPromiseArray.prototype.preservedValues = function () { + return this._preservedValues; +}; + +function map(promises, fn, options, _filter) { + if (typeof fn !== "function") { + return apiRejection(FUNCTION_ERROR + util.classString(fn)); + } + + var limit = 0; + if (options !== undefined) { + if (typeof options === "object" && options !== null) { + if (typeof options.concurrency !== "number") { + return Promise.reject( + new TypeError("'concurrency' must be a number but it is " + + util.classString(options.concurrency))); + } + limit = options.concurrency; + } else { + return Promise.reject(new TypeError( + "options argument must be an object but it is " + + util.classString(options))); + } + } + limit = typeof limit === "number" && + isFinite(limit) && limit >= 1 ? limit : 0; + return new MappingPromiseArray(promises, fn, limit, _filter).promise(); +} + +Promise.prototype.map = function (fn, options) { + return map(this, fn, options, null); +}; + +Promise.map = function (promises, fn, options, _filter) { + return map(promises, fn, options, _filter); +}; + + +}; diff --git a/platforms/android/assets/www/libs/bluebird/src/method.js b/platforms/android/assets/www/libs/bluebird/src/method.js new file mode 100644 index 0000000..5255f36 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/method.js @@ -0,0 +1,57 @@ +"use strict"; +module.exports = +function(Promise, INTERNAL, tryConvertToPromise, apiRejection, debug) { +var util = require("./util"); +var ASSERT = require("./assert"); +var tryCatch = util.tryCatch; + +Promise.method = function (fn) { + if (typeof fn !== "function") { + throw new Promise.TypeError(FUNCTION_ERROR + util.classString(fn)); + } + return function () { + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + ret._pushContext(); + var value = tryCatch(fn).apply(this, arguments); + var promiseCreated = ret._popContext(); + debug.checkForgottenReturns( + value, promiseCreated, "Promise.method", ret); + ret._resolveFromSyncValue(value); + return ret; + }; +}; + +Promise.attempt = Promise["try"] = function (fn) { + if (typeof fn !== "function") { + return apiRejection(FUNCTION_ERROR + util.classString(fn)); + } + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + ret._pushContext(); + var value; + if (arguments.length > 1) { + debug.deprecated("calling Promise.try with more than 1 argument"); + var arg = arguments[1]; + var ctx = arguments[2]; + value = util.isArray(arg) ? tryCatch(fn).apply(ctx, arg) + : tryCatch(fn).call(ctx, arg); + } else { + value = tryCatch(fn)(); + } + var promiseCreated = ret._popContext(); + debug.checkForgottenReturns( + value, promiseCreated, "Promise.try", ret); + ret._resolveFromSyncValue(value); + return ret; +}; + +Promise.prototype._resolveFromSyncValue = function (value) { + ASSERT(!this._isFollowing()); + if (value === util.errorObj) { + this._rejectCallback(value.e, false); + } else { + this._resolveCallback(value, true); + } +}; +}; diff --git a/platforms/android/assets/www/libs/bluebird/src/nodeback.js b/platforms/android/assets/www/libs/bluebird/src/nodeback.js new file mode 100644 index 0000000..e753c31 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/nodeback.js @@ -0,0 +1,51 @@ +"use strict"; +var util = require("./util"); +var maybeWrapAsError = util.maybeWrapAsError; +var errors = require("./errors"); +var OperationalError = errors.OperationalError; +var es5 = require("./es5"); + +function isUntypedError(obj) { + return obj instanceof Error && + es5.getPrototypeOf(obj) === Error.prototype; +} + +var rErrorKey = /^(?:name|message|stack|cause)$/; +function wrapAsOperationalError(obj) { + var ret; + if (isUntypedError(obj)) { + ret = new OperationalError(obj); + ret.name = obj.name; + ret.message = obj.message; + ret.stack = obj.stack; + var keys = es5.keys(obj); + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + if (!rErrorKey.test(key)) { + ret[key] = obj[key]; + } + } + return ret; + } + util.markAsOriginatingFromRejection(obj); + return obj; +} + +function nodebackForPromise(promise, multiArgs) { + return function(err, value) { + if (promise === null) return; + if (err) { + var wrapped = wrapAsOperationalError(maybeWrapAsError(err)); + promise._attachExtraTrace(wrapped); + promise._reject(wrapped); + } else if (!multiArgs) { + promise._fulfill(value); + } else { + INLINE_SLICE(args, arguments, 1); + promise._fulfill(args); + } + promise = null; + }; +} + +module.exports = nodebackForPromise; diff --git a/platforms/android/assets/www/libs/bluebird/src/nodeify.js b/platforms/android/assets/www/libs/bluebird/src/nodeify.js new file mode 100644 index 0000000..787efce --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/nodeify.js @@ -0,0 +1,62 @@ +"use strict"; +module.exports = function(Promise) { +var util = require("./util"); +var async = Promise._async; +var ASSERT = require("./assert"); +var tryCatch = util.tryCatch; +var errorObj = util.errorObj; + +function spreadAdapter(val, nodeback) { + var promise = this; + if (!util.isArray(val)) return successAdapter.call(promise, val, nodeback); + var ret = + tryCatch(nodeback).apply(promise._boundValue(), [null].concat(val)); + if (ret === errorObj) { + async.throwLater(ret.e); + } +} + +function successAdapter(val, nodeback) { + var promise = this; + var receiver = promise._boundValue(); + ASSERT(typeof nodeback == "function"); + var ret = val === undefined + ? tryCatch(nodeback).call(receiver, null) + : tryCatch(nodeback).call(receiver, null, val); + if (ret === errorObj) { + async.throwLater(ret.e); + } +} +function errorAdapter(reason, nodeback) { + var promise = this; + if (!reason) { + var newReason = new Error(reason + ""); + newReason.cause = reason; + reason = newReason; + ASSERT(!!reason); + } + ASSERT(typeof nodeback == "function"); + var ret = tryCatch(nodeback).call(promise._boundValue(), reason); + if (ret === errorObj) { + async.throwLater(ret.e); + } +} + +Promise.prototype.asCallback = Promise.prototype.nodeify = function (nodeback, + options) { + if (typeof nodeback == "function") { + var adapter = successAdapter; + if (options !== undefined && Object(options).spread) { + adapter = spreadAdapter; + } + this._then( + adapter, + errorAdapter, + undefined, + this, + nodeback + ); + } + return this; +}; +}; diff --git a/platforms/android/assets/www/libs/bluebird/src/promise.js b/platforms/android/assets/www/libs/bluebird/src/promise.js new file mode 100644 index 0000000..a1087fe --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/promise.js @@ -0,0 +1,773 @@ +"use strict"; +module.exports = function() { +var makeSelfResolutionError = function () { + return new TypeError(CIRCULAR_RESOLUTION_ERROR); +}; +var reflectHandler = function() { + return new Promise.PromiseInspection(this._target()); +}; +var apiRejection = function(msg) { + return Promise.reject(new TypeError(msg)); +}; +function Proxyable() {} +var UNDEFINED_BINDING = {}; +var ASSERT = require("./assert"); +var util = require("./util"); + +var getDomain; +if (util.isNode) { + getDomain = function() { + var ret = process.domain; + if (ret === undefined) ret = null; + return ret; + }; +} else { + getDomain = function() { + return null; + }; +} +util.notEnumerableProp(Promise, "_getDomain", getDomain); + +var es5 = require("./es5"); +var Async = require("./async"); +var async = new Async(); +es5.defineProperty(Promise, "_async", {value: async}); +var errors = require("./errors"); +var TypeError = Promise.TypeError = errors.TypeError; +Promise.RangeError = errors.RangeError; +var CancellationError = Promise.CancellationError = errors.CancellationError; +Promise.TimeoutError = errors.TimeoutError; +Promise.OperationalError = errors.OperationalError; +Promise.RejectionError = errors.OperationalError; +Promise.AggregateError = errors.AggregateError; +var INTERNAL = function(){}; +var APPLY = {}; +var NEXT_FILTER = {}; +var tryConvertToPromise = require("./thenables")(Promise, INTERNAL); +var PromiseArray = + require("./promise_array")(Promise, INTERNAL, + tryConvertToPromise, apiRejection, Proxyable); +var Context = require("./context")(Promise); + /*jshint unused:false*/ +var createContext = Context.create; +var debug = require("./debuggability")(Promise, Context); +var CapturedTrace = debug.CapturedTrace; +var PassThroughHandlerContext = + require("./finally")(Promise, tryConvertToPromise); +var catchFilter = require("./catch_filter")(NEXT_FILTER); +var nodebackForPromise = require("./nodeback"); +var errorObj = util.errorObj; +var tryCatch = util.tryCatch; +function check(self, executor) { + if (typeof executor !== "function") { + throw new TypeError(FUNCTION_ERROR + util.classString(executor)); + } + if (self.constructor !== Promise) { + throw new TypeError(CONSTRUCT_ERROR_INVOCATION); + } +} + +function Promise(executor) { + this._bitField = NO_STATE; + this._fulfillmentHandler0 = undefined; + this._rejectionHandler0 = undefined; + this._promise0 = undefined; + this._receiver0 = undefined; + if (executor !== INTERNAL) { + check(this, executor); + this._resolveFromExecutor(executor); + } + this._promiseCreated(); + this._fireEvent("promiseCreated", this); +} + +Promise.prototype.toString = function () { + return "[object Promise]"; +}; + +Promise.prototype.caught = Promise.prototype["catch"] = function (fn) { + var len = arguments.length; + if (len > 1) { + var catchInstances = new Array(len - 1), + j = 0, i; + for (i = 0; i < len - 1; ++i) { + var item = arguments[i]; + if (util.isObject(item)) { + catchInstances[j++] = item; + } else { + return apiRejection(OBJECT_ERROR + util.classString(item)); + } + } + catchInstances.length = j; + fn = arguments[i]; + return this.then(undefined, catchFilter(catchInstances, fn, this)); + } + return this.then(undefined, fn); +}; + +Promise.prototype.reflect = function () { + return this._then(reflectHandler, + reflectHandler, undefined, this, undefined); +}; + +Promise.prototype.then = function (didFulfill, didReject) { + if (debug.warnings() && arguments.length > 0 && + typeof didFulfill !== "function" && + typeof didReject !== "function") { + var msg = ".then() only accepts functions but was passed: " + + util.classString(didFulfill); + if (arguments.length > 1) { + msg += ", " + util.classString(didReject); + } + this._warn(msg); + } + return this._then(didFulfill, didReject, undefined, undefined, undefined); +}; + +Promise.prototype.done = function (didFulfill, didReject) { + var promise = + this._then(didFulfill, didReject, undefined, undefined, undefined); + promise._setIsFinal(); +}; + +Promise.prototype.spread = function (fn) { + if (typeof fn !== "function") { + return apiRejection(FUNCTION_ERROR + util.classString(fn)); + } + return this.all()._then(fn, undefined, undefined, APPLY, undefined); +}; + +Promise.prototype.toJSON = function () { + var ret = { + isFulfilled: false, + isRejected: false, + fulfillmentValue: undefined, + rejectionReason: undefined + }; + if (this.isFulfilled()) { + ret.fulfillmentValue = this.value(); + ret.isFulfilled = true; + } else if (this.isRejected()) { + ret.rejectionReason = this.reason(); + ret.isRejected = true; + } + return ret; +}; + +Promise.prototype.all = function () { + if (arguments.length > 0) { + this._warn(".all() was passed arguments but it does not take any"); + } + return new PromiseArray(this).promise(); +}; + +Promise.prototype.error = function (fn) { + return this.caught(util.originatesFromRejection, fn); +}; + +Promise.is = function (val) { + return val instanceof Promise; +}; + +Promise.fromNode = Promise.fromCallback = function(fn) { + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + var multiArgs = arguments.length > 1 ? !!Object(arguments[1]).multiArgs + : false; + var result = tryCatch(fn)(nodebackForPromise(ret, multiArgs)); + if (result === errorObj) { + ret._rejectCallback(result.e, true); + } + if (!ret._isFateSealed()) ret._setAsyncGuaranteed(); + return ret; +}; + +Promise.all = function (promises) { + return new PromiseArray(promises).promise(); +}; + +Promise.cast = function (obj) { + var ret = tryConvertToPromise(obj); + if (!(ret instanceof Promise)) { + ret = new Promise(INTERNAL); + ret._captureStackTrace(); + ret._setFulfilled(); + ret._rejectionHandler0 = obj; + } + return ret; +}; + +Promise.resolve = Promise.fulfilled = Promise.cast; + +Promise.reject = Promise.rejected = function (reason) { + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + ret._rejectCallback(reason, true); + return ret; +}; + +Promise.setScheduler = function(fn) { + if (typeof fn !== "function") { + throw new TypeError(FUNCTION_ERROR + util.classString(fn)); + } + return async.setScheduler(fn); +}; + +Promise.prototype._then = function ( + didFulfill, + didReject, + _, // For fast-cast compatibility between bluebird versions + receiver, + internalData +) { + ASSERT(arguments.length === 5); + var haveInternalData = internalData !== undefined; + var promise = haveInternalData ? internalData : new Promise(INTERNAL); + var target = this._target(); + var bitField = target._bitField; + + if (!haveInternalData) { + promise._propagateFrom(this, PROPAGATE_ALL); + promise._captureStackTrace(); + if (receiver === undefined && + BIT_FIELD_CHECK(IS_BOUND, this._bitField)) { + if (!BIT_FIELD_CHECK(IS_PENDING_AND_WAITING_NEG)) { + receiver = this._boundValue(); + } else { + receiver = target === this ? undefined : this._boundTo; + } + } + this._fireEvent("promiseChained", this, promise); + } + + var domain = getDomain(); + if (!BIT_FIELD_CHECK(IS_PENDING_AND_WAITING_NEG)) { + var handler, value, settler = target._settlePromiseCtx; + if (BIT_FIELD_CHECK(IS_FULFILLED)) { + value = target._rejectionHandler0; + handler = didFulfill; + } else if (BIT_FIELD_CHECK(IS_REJECTED)) { + value = target._fulfillmentHandler0; + handler = didReject; + target._unsetRejectionIsUnhandled(); + } else { + settler = target._settlePromiseLateCancellationObserver; + value = new CancellationError(LATE_CANCELLATION_OBSERVER); + target._attachExtraTrace(value); + handler = didReject; + } + + async.invoke(settler, target, { + handler: domain === null ? handler + : (typeof handler === "function" && domain.bind(handler)), + promise: promise, + receiver: receiver, + value: value + }); + } else { + target._addCallbacks(didFulfill, didReject, promise, receiver, domain); + } + + return promise; +}; + +Promise.prototype._length = function () { + ASSERT(arguments.length === 0); + return this._bitField & LENGTH_MASK; +}; + +Promise.prototype._isFateSealed = function () { + return (this._bitField & IS_FATE_SEALED) !== 0; +}; + +Promise.prototype._isFollowing = function () { + return (this._bitField & IS_FOLLOWING) === IS_FOLLOWING; +}; + +Promise.prototype._setLength = function (len) { + this._bitField = (this._bitField & LENGTH_CLEAR_MASK) | + (len & LENGTH_MASK); +}; + +Promise.prototype._setFulfilled = function () { + this._bitField = this._bitField | IS_FULFILLED; + this._fireEvent("promiseFulfilled", this); +}; + +Promise.prototype._setRejected = function () { + this._bitField = this._bitField | IS_REJECTED; + this._fireEvent("promiseRejected", this); +}; + +Promise.prototype._setFollowing = function () { + this._bitField = this._bitField | IS_FOLLOWING; + this._fireEvent("promiseResolved", this); +}; + +Promise.prototype._setIsFinal = function () { + this._bitField = this._bitField | IS_FINAL; +}; + +Promise.prototype._isFinal = function () { + return (this._bitField & IS_FINAL) > 0; +}; + +Promise.prototype._unsetCancelled = function() { + this._bitField = this._bitField & (~IS_CANCELLED); +}; + +Promise.prototype._setCancelled = function() { + this._bitField = this._bitField | IS_CANCELLED; + this._fireEvent("promiseCancelled", this); +}; + +Promise.prototype._setAsyncGuaranteed = function() { + if (async.hasCustomScheduler()) return; + this._bitField = this._bitField | IS_ASYNC_GUARANTEED; +}; + +Promise.prototype._receiverAt = function (index) { + ASSERT(!this._isFollowing()); + var ret = index === 0 ? this._receiver0 : this[ + index * CALLBACK_SIZE - CALLBACK_SIZE + CALLBACK_RECEIVER_OFFSET]; + //Only use the bound value when not calling internal methods + if (ret === UNDEFINED_BINDING) { + return undefined; + } else if (ret === undefined && this._isBound()) { + return this._boundValue(); + } + return ret; +}; + +Promise.prototype._promiseAt = function (index) { + ASSERT(index > 0); + ASSERT(!this._isFollowing()); + return this[ + index * CALLBACK_SIZE - CALLBACK_SIZE + CALLBACK_PROMISE_OFFSET]; +}; + +Promise.prototype._fulfillmentHandlerAt = function (index) { + ASSERT(!this._isFollowing()); + ASSERT(index > 0); + return this[ + index * CALLBACK_SIZE - CALLBACK_SIZE + CALLBACK_FULFILL_OFFSET]; +}; + +Promise.prototype._rejectionHandlerAt = function (index) { + ASSERT(!this._isFollowing()); + ASSERT(index > 0); + return this[ + index * CALLBACK_SIZE - CALLBACK_SIZE + CALLBACK_REJECT_OFFSET]; +}; + +Promise.prototype._boundValue = function() {}; + +Promise.prototype._migrateCallback0 = function (follower) { + var bitField = follower._bitField; + var fulfill = follower._fulfillmentHandler0; + var reject = follower._rejectionHandler0; + var promise = follower._promise0; + var receiver = follower._receiverAt(0); + if (receiver === undefined) receiver = UNDEFINED_BINDING; + this._addCallbacks(fulfill, reject, promise, receiver, null); +}; + +Promise.prototype._migrateCallbackAt = function (follower, index) { + ASSERT(index > 0); + var fulfill = follower._fulfillmentHandlerAt(index); + var reject = follower._rejectionHandlerAt(index); + var promise = follower._promiseAt(index); + var receiver = follower._receiverAt(index); + if (receiver === undefined) receiver = UNDEFINED_BINDING; + this._addCallbacks(fulfill, reject, promise, receiver, null); +}; + +Promise.prototype._addCallbacks = function ( + fulfill, + reject, + promise, + receiver, + domain +) { + ASSERT(typeof domain === "object"); + ASSERT(!this._isFateSealed()); + ASSERT(!this._isFollowing()); + var index = this._length(); + + if (index >= MAX_LENGTH - CALLBACK_SIZE) { + index = 0; + this._setLength(0); + } + + if (index === 0) { + ASSERT(this._promise0 === undefined); + ASSERT(this._receiver0 === undefined); + ASSERT(this._fulfillmentHandler0 === undefined); + ASSERT(this._rejectionHandler0 === undefined); + + this._promise0 = promise; + this._receiver0 = receiver; + if (typeof fulfill === "function") { + this._fulfillmentHandler0 = + domain === null ? fulfill : domain.bind(fulfill); + } + if (typeof reject === "function") { + this._rejectionHandler0 = + domain === null ? reject : domain.bind(reject); + } + } else { + ASSERT(this[base + CALLBACK_PROMISE_OFFSET] === undefined); + ASSERT(this[base + CALLBACK_RECEIVER_OFFSET] === undefined); + ASSERT(this[base + CALLBACK_FULFILL_OFFSET] === undefined); + ASSERT(this[base + CALLBACK_REJECT_OFFSET] === undefined); + var base = index * CALLBACK_SIZE - CALLBACK_SIZE; + this[base + CALLBACK_PROMISE_OFFSET] = promise; + this[base + CALLBACK_RECEIVER_OFFSET] = receiver; + if (typeof fulfill === "function") { + this[base + CALLBACK_FULFILL_OFFSET] = + domain === null ? fulfill : domain.bind(fulfill); + } + if (typeof reject === "function") { + this[base + CALLBACK_REJECT_OFFSET] = + domain === null ? reject : domain.bind(reject); + } + } + this._setLength(index + 1); + return index; +}; + +Promise.prototype._proxy = function (proxyable, arg) { + ASSERT(proxyable instanceof Proxyable); + ASSERT(!(arg instanceof Promise)); + ASSERT(!this._isFollowing()); + ASSERT(arguments.length === 2); + ASSERT(!this._isFateSealed()); + this._addCallbacks(undefined, undefined, arg, proxyable, null); +}; + +Promise.prototype._resolveCallback = function(value, shouldBind) { + if (BIT_FIELD_CHECK(IS_FATE_SEALED, this._bitField)) return; + if (value === this) + return this._rejectCallback(makeSelfResolutionError(), false); + var maybePromise = tryConvertToPromise(value, this); + if (!(maybePromise instanceof Promise)) return this._fulfill(value); + + if (shouldBind) this._propagateFrom(maybePromise, PROPAGATE_BIND); + + var promise = maybePromise._target(); + + if (promise === this) { + this._reject(makeSelfResolutionError()); + return; + } + + var bitField = promise._bitField; + if (BIT_FIELD_CHECK(IS_PENDING_AND_WAITING_NEG)) { + var len = this._length(); + if (len > 0) promise._migrateCallback0(this); + for (var i = 1; i < len; ++i) { + promise._migrateCallbackAt(this, i); + } + this._setFollowing(); + this._setLength(0); + this._setFollowee(promise); + } else if (BIT_FIELD_CHECK(IS_FULFILLED)) { + this._fulfill(promise._value()); + } else if (BIT_FIELD_CHECK(IS_REJECTED)) { + this._reject(promise._reason()); + } else { + var reason = new CancellationError(LATE_CANCELLATION_OBSERVER); + promise._attachExtraTrace(reason); + this._reject(reason); + } +}; + +Promise.prototype._rejectCallback = +function(reason, synchronous, ignoreNonErrorWarnings) { + var trace = util.ensureErrorObject(reason); + var hasStack = trace === reason; + if (!hasStack && !ignoreNonErrorWarnings && debug.warnings()) { + var message = "a promise was rejected with a non-error: " + + util.classString(reason); + this._warn(message, true); + } + this._attachExtraTrace(trace, synchronous ? hasStack : false); + this._reject(reason); +}; + +Promise.prototype._resolveFromExecutor = function (executor) { + ASSERT(typeof executor === "function"); + var promise = this; + this._captureStackTrace(); + this._pushContext(); + var synchronous = true; + var r = this._execute(executor, function(value) { + promise._resolveCallback(value); + }, function (reason) { + promise._rejectCallback(reason, synchronous); + }); + synchronous = false; + this._popContext(); + + if (r !== undefined) { + promise._rejectCallback(r, true); + } +}; + +Promise.prototype._settlePromiseFromHandler = function ( + handler, receiver, value, promise +) { + var bitField = promise._bitField; + if (BIT_FIELD_CHECK(IS_CANCELLED)) return; + promise._pushContext(); + var x; + if (receiver === APPLY) { + if (!value || typeof value.length !== "number") { + x = errorObj; + x.e = new TypeError("cannot .spread() a non-array: " + + util.classString(value)); + } else { + x = tryCatch(handler).apply(this._boundValue(), value); + } + } else { + x = tryCatch(handler).call(receiver, value); + } + var promiseCreated = promise._popContext(); + bitField = promise._bitField; + if (BIT_FIELD_CHECK(IS_CANCELLED)) return; + + ASSERT(!promise._isFateSealed()); + + if (x === NEXT_FILTER) { + promise._reject(value); + } else if (x === errorObj) { + promise._rejectCallback(x.e, false); + } else { + debug.checkForgottenReturns(x, promiseCreated, "", promise, this); + promise._resolveCallback(x); + } +}; + +Promise.prototype._target = function() { + var ret = this; + while (ret._isFollowing()) ret = ret._followee(); + return ret; +}; + +Promise.prototype._followee = function() { + ASSERT(this._isFollowing()); + ASSERT(this._rejectionHandler0 instanceof Promise); + return this._rejectionHandler0; +}; + +Promise.prototype._setFollowee = function(promise) { + ASSERT(this._isFollowing()); + ASSERT(!(this._rejectionHandler0 instanceof Promise)); + this._rejectionHandler0 = promise; +}; + +Promise.prototype._settlePromise = function(promise, handler, receiver, value) { + ASSERT(!this._isFollowing()); + var isPromise = promise instanceof Promise; + var bitField = this._bitField; + var asyncGuaranteed = BIT_FIELD_CHECK(IS_ASYNC_GUARANTEED); + if (BIT_FIELD_CHECK(IS_CANCELLED)) { + if (isPromise) promise._invokeInternalOnCancel(); + + if (receiver instanceof PassThroughHandlerContext && + receiver.isFinallyHandler()) { + receiver.cancelPromise = promise; + if (tryCatch(handler).call(receiver, value) === errorObj) { + promise._reject(errorObj.e); + } + } else if (handler === reflectHandler) { + promise._fulfill(reflectHandler.call(receiver)); + } else if (receiver instanceof Proxyable) { + receiver._promiseCancelled(promise); + } else if (isPromise || promise instanceof PromiseArray) { + promise._cancel(); + } else { + receiver.cancel(); + } + } else if (typeof handler === "function") { + //if promise is not instanceof Promise + //it is internally smuggled data + if (!isPromise) { + handler.call(receiver, value, promise); + } else { + if (asyncGuaranteed) promise._setAsyncGuaranteed(); + this._settlePromiseFromHandler(handler, receiver, value, promise); + } + } else if (receiver instanceof Proxyable) { + if (!receiver._isResolved()) { + if (BIT_FIELD_CHECK(IS_FULFILLED)) { + receiver._promiseFulfilled(value, promise); + } else { + receiver._promiseRejected(value, promise); + } + } + } else if (isPromise) { + if (asyncGuaranteed) promise._setAsyncGuaranteed(); + if (BIT_FIELD_CHECK(IS_FULFILLED)) { + promise._fulfill(value); + } else { + promise._reject(value); + } + } +}; + +Promise.prototype._settlePromiseLateCancellationObserver = function(ctx) { + var handler = ctx.handler; + var promise = ctx.promise; + var receiver = ctx.receiver; + var value = ctx.value; + if (typeof handler === "function") { + if (!(promise instanceof Promise)) { + handler.call(receiver, value, promise); + } else { + this._settlePromiseFromHandler(handler, receiver, value, promise); + } + } else if (promise instanceof Promise) { + promise._reject(value); + } +}; + +Promise.prototype._settlePromiseCtx = function(ctx) { + this._settlePromise(ctx.promise, ctx.handler, ctx.receiver, ctx.value); +}; + +Promise.prototype._settlePromise0 = function(handler, value, bitField) { + var promise = this._promise0; + var receiver = this._receiverAt(0); + this._promise0 = undefined; + this._receiver0 = undefined; + this._settlePromise(promise, handler, receiver, value); +}; + +Promise.prototype._clearCallbackDataAtIndex = function(index) { + ASSERT(!this._isFollowing()); + ASSERT(index > 0); + var base = index * CALLBACK_SIZE - CALLBACK_SIZE; + this[base + CALLBACK_PROMISE_OFFSET] = + this[base + CALLBACK_RECEIVER_OFFSET] = + this[base + CALLBACK_FULFILL_OFFSET] = + this[base + CALLBACK_REJECT_OFFSET] = undefined; +}; + +Promise.prototype._fulfill = function (value) { + var bitField = this._bitField; + if (BIT_FIELD_READ(IS_FATE_SEALED)) return; + if (value === this) { + var err = makeSelfResolutionError(); + this._attachExtraTrace(err); + return this._reject(err); + } + this._setFulfilled(); + this._rejectionHandler0 = value; + + if (BIT_FIELD_READ(LENGTH_MASK) > 0) { + if (BIT_FIELD_CHECK(IS_ASYNC_GUARANTEED)) { + this._settlePromises(); + } else { + async.settlePromises(this); + } + } +}; + +Promise.prototype._reject = function (reason) { + var bitField = this._bitField; + if (BIT_FIELD_READ(IS_FATE_SEALED)) return; + this._setRejected(); + this._fulfillmentHandler0 = reason; + + if (this._isFinal()) { + ASSERT(this._length() === 0); + return async.fatalError(reason, util.isNode); + } + + if (BIT_FIELD_READ(LENGTH_MASK) > 0) { + async.settlePromises(this); + } else { + this._ensurePossibleRejectionHandled(); + } +}; + +Promise.prototype._fulfillPromises = function (len, value) { + for (var i = 1; i < len; i++) { + var handler = this._fulfillmentHandlerAt(i); + var promise = this._promiseAt(i); + var receiver = this._receiverAt(i); + this._clearCallbackDataAtIndex(i); + this._settlePromise(promise, handler, receiver, value); + } +}; + +Promise.prototype._rejectPromises = function (len, reason) { + for (var i = 1; i < len; i++) { + var handler = this._rejectionHandlerAt(i); + var promise = this._promiseAt(i); + var receiver = this._receiverAt(i); + this._clearCallbackDataAtIndex(i); + this._settlePromise(promise, handler, receiver, reason); + } +}; + +Promise.prototype._settlePromises = function () { + var bitField = this._bitField; + var len = BIT_FIELD_READ(LENGTH_MASK); + + if (len > 0) { + if (BIT_FIELD_CHECK(IS_REJECTED_OR_CANCELLED)) { + var reason = this._fulfillmentHandler0; + this._settlePromise0(this._rejectionHandler0, reason, bitField); + this._rejectPromises(len, reason); + } else { + var value = this._rejectionHandler0; + this._settlePromise0(this._fulfillmentHandler0, value, bitField); + this._fulfillPromises(len, value); + } + this._setLength(0); + } + this._clearCancellationData(); +}; + +Promise.prototype._settledValue = function() { + ASSERT(!this._isFollowing()); + ASSERT(this._isFateSealed()); + var bitField = this._bitField; + if (BIT_FIELD_CHECK(IS_FULFILLED)) { + return this._rejectionHandler0; + } else if (BIT_FIELD_CHECK(IS_REJECTED)) { + return this._fulfillmentHandler0; + } + // Implicit undefined for cancelled promise. +}; + +function deferResolve(v) {this.promise._resolveCallback(v);} +function deferReject(v) {this.promise._rejectCallback(v, false);} + +Promise.defer = Promise.pending = function() { + debug.deprecated("Promise.defer", "new Promise"); + var promise = new Promise(INTERNAL); + return { + promise: promise, + resolve: deferResolve, + reject: deferReject + }; +}; + +util.notEnumerableProp(Promise, + "_makeSelfResolutionError", + makeSelfResolutionError); + +require("./method")(Promise, INTERNAL, tryConvertToPromise, apiRejection, + debug); +require("./bind")(Promise, INTERNAL, tryConvertToPromise, debug); +require("./cancel")(Promise, PromiseArray, apiRejection, debug); +require("./direct_resolve")(Promise); +require("./synchronous_inspection")(Promise); +require("./join")( + Promise, PromiseArray, tryConvertToPromise, INTERNAL, debug); +Promise.Promise = Promise; +Promise.version = "3.4.0"; +}; diff --git a/platforms/android/assets/www/libs/bluebird/src/promise_array.js b/platforms/android/assets/www/libs/bluebird/src/promise_array.js new file mode 100644 index 0000000..00111e8 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/promise_array.js @@ -0,0 +1,201 @@ +"use strict"; +module.exports = function(Promise, INTERNAL, tryConvertToPromise, + apiRejection, Proxyable) { +var ASSERT = require("./assert"); +var util = require("./util"); +var isArray = util.isArray; + +//To avoid eagerly allocating the objects +//and also because undefined cannot be smuggled +function toResolutionValue(val) { + switch(val) { + case RESOLVE_ARRAY: return []; + case RESOLVE_OBJECT: return {}; + } + ASSERT(false); +} + +function PromiseArray(values) { + ASSERT(arguments.length === 1); + var promise = this._promise = new Promise(INTERNAL); + if (values instanceof Promise) { + promise._propagateFrom(values, PROPAGATE_ALL); + } + promise._setOnCancel(this); + this._values = values; + this._length = 0; + this._totalResolved = 0; + this._init(undefined, RESOLVE_ARRAY); +} +util.inherits(PromiseArray, Proxyable); + +PromiseArray.prototype.length = function () { + return this._length; +}; + +PromiseArray.prototype.promise = function () { + return this._promise; +}; + +PromiseArray.prototype._init = function init(_, resolveValueIfEmpty) { + var values = tryConvertToPromise(this._values, this._promise); + if (values instanceof Promise) { + values = values._target(); + var bitField = values._bitField; + USE(bitField); + this._values = values; + + if (BIT_FIELD_CHECK(IS_PENDING_AND_WAITING_NEG)) { + ASSERT(typeof resolveValueIfEmpty === "number"); + ASSERT(resolveValueIfEmpty < 0); + this._promise._setAsyncGuaranteed(); + return values._then( + init, + this._reject, + undefined, + this, + resolveValueIfEmpty + ); + } else if (BIT_FIELD_CHECK(IS_FULFILLED)) { + values = values._value(); + } else if (BIT_FIELD_CHECK(IS_REJECTED)) { + return this._reject(values._reason()); + } else { + return this._cancel(); + } + } + values = util.asArray(values); + if (values === null) { + var err = apiRejection( + COLLECTION_ERROR + util.classString(values)).reason(); + this._promise._rejectCallback(err, false); + return; + } + + if (values.length === 0) { + if (resolveValueIfEmpty === RESOLVE_CALL_METHOD) { + this._resolveEmptyArray(); + } + else { + this._resolve(toResolutionValue(resolveValueIfEmpty)); + } + return; + } + this._iterate(values); +}; + +PromiseArray.prototype._iterate = function(values) { + var len = this.getActualLength(values.length); + this._length = len; + this._values = this.shouldCopyValues() ? new Array(len) : this._values; + var result = this._promise; + var isResolved = false; + var bitField = null; + for (var i = 0; i < len; ++i) { + var maybePromise = tryConvertToPromise(values[i], result); + + if (maybePromise instanceof Promise) { + maybePromise = maybePromise._target(); + bitField = maybePromise._bitField; + } else { + bitField = null; + } + + if (isResolved) { + if (bitField !== null) { + maybePromise.suppressUnhandledRejections(); + } + } else if (bitField !== null) { + if (BIT_FIELD_CHECK(IS_PENDING_AND_WAITING_NEG)) { + // Optimized for just passing the updates through + maybePromise._proxy(this, i); + this._values[i] = maybePromise; + } else if (BIT_FIELD_CHECK(IS_FULFILLED)) { + isResolved = this._promiseFulfilled(maybePromise._value(), i); + } else if (BIT_FIELD_CHECK(IS_REJECTED)) { + isResolved = this._promiseRejected(maybePromise._reason(), i); + } else { + isResolved = this._promiseCancelled(i); + } + } else { + isResolved = this._promiseFulfilled(maybePromise, i); + } + ASSERT(typeof isResolved === "boolean"); + } + if (!isResolved) result._setAsyncGuaranteed(); +}; + +PromiseArray.prototype._isResolved = function () { + return this._values === null; +}; + +PromiseArray.prototype._resolve = function (value) { + ASSERT(!this._isResolved()); + ASSERT(!(value instanceof Promise)); + this._values = null; + this._promise._fulfill(value); +}; + +PromiseArray.prototype._cancel = function() { + if (this._isResolved() || !this._promise.isCancellable()) return; + this._values = null; + this._promise._cancel(); +}; + +PromiseArray.prototype._reject = function (reason) { + ASSERT(!this._isResolved()); + this._values = null; + this._promise._rejectCallback(reason, false); +}; + +PromiseArray.prototype._promiseFulfilled = function (value, index) { + ASSERT(!this._isResolved()); + ASSERT(isArray(this._values)); + ASSERT(typeof index === "number"); + this._values[index] = value; + var totalResolved = ++this._totalResolved; + if (totalResolved >= this._length) { + this._resolve(this._values); + return true; + } + return false; +}; + +PromiseArray.prototype._promiseCancelled = function() { + this._cancel(); + return true; +}; + +PromiseArray.prototype._promiseRejected = function (reason) { + ASSERT(!this._isResolved()); + ASSERT(isArray(this._values)); + this._totalResolved++; + this._reject(reason); + return true; +}; + +PromiseArray.prototype._resultCancelled = function() { + if (this._isResolved()) return; + var values = this._values; + this._cancel(); + if (values instanceof Promise) { + values.cancel(); + } else { + for (var i = 0; i < values.length; ++i) { + if (values[i] instanceof Promise) { + values[i].cancel(); + } + } + } +}; + +PromiseArray.prototype.shouldCopyValues = function () { + return true; +}; + +PromiseArray.prototype.getActualLength = function (len) { + return len; +}; + +return PromiseArray; +}; diff --git a/platforms/android/assets/www/libs/bluebird/src/promisify.js b/platforms/android/assets/www/libs/bluebird/src/promisify.js new file mode 100644 index 0000000..a0bebf3 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/promisify.js @@ -0,0 +1,326 @@ +"use strict"; +module.exports = function(Promise, INTERNAL) { +var THIS = {}; +var util = require("./util"); +var nodebackForPromise = require("./nodeback"); +var withAppended = util.withAppended; +var maybeWrapAsError = util.maybeWrapAsError; +var canEvaluate = util.canEvaluate; +var ASSERT = require("./assert"); +var TypeError = require("./errors").TypeError; +var defaultSuffix = AFTER_PROMISIFIED_SUFFIX; +var defaultPromisified = {__isPromisified__: true}; +var noCopyProps = [ + "arity", // Firefox 4 + "length", + "name", + "arguments", + "caller", + "callee", + "prototype", + "__isPromisified__" +]; +var noCopyPropsPattern = new RegExp("^(?:" + noCopyProps.join("|") + ")$"); + +var defaultFilter = function(name) { + return util.isIdentifier(name) && + name.charAt(0) !== "_" && + name !== "constructor"; +}; + +function propsFilter(key) { + return !noCopyPropsPattern.test(key); +} + +function isPromisified(fn) { + try { + return fn.__isPromisified__ === true; + } + catch (e) { + return false; + } +} + +function hasPromisified(obj, key, suffix) { + var val = util.getDataPropertyOrDefault(obj, key + suffix, + defaultPromisified); + return val ? isPromisified(val) : false; +} +function checkValid(ret, suffix, suffixRegexp) { + // Verify that in the list of methods to promisify there is no + // method that has a name ending in "Async"-suffix while + // also having a method with the same name but no Async suffix + for (var i = 0; i < ret.length; i += 2) { + var key = ret[i]; + if (suffixRegexp.test(key)) { + var keyWithoutAsyncSuffix = key.replace(suffixRegexp, ""); + for (var j = 0; j < ret.length; j += 2) { + if (ret[j] === keyWithoutAsyncSuffix) { + throw new TypeError(PROMISIFICATION_NORMAL_METHODS_ERROR + .replace("%s", suffix)); + } + } + } + } +} + +function promisifiableMethods(obj, suffix, suffixRegexp, filter) { + var keys = util.inheritedDataKeys(obj); + var ret = []; + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + var value = obj[key]; + var passesDefaultFilter = filter === defaultFilter + ? true : defaultFilter(key, value, obj); + if (typeof value === "function" && + !isPromisified(value) && + !hasPromisified(obj, key, suffix) && + filter(key, value, obj, passesDefaultFilter)) { + ret.push(key, value); + } + } + checkValid(ret, suffix, suffixRegexp); + return ret; +} + +var escapeIdentRegex = function(str) { + return str.replace(/([$])/, "\\$"); +}; + +var makeNodePromisifiedEval; +if (!__BROWSER__) { +//Gives an optimal sequence of argument count to try given a formal parameter +//.length for a function +var switchCaseArgumentOrder = function(likelyArgumentCount) { + var ret = [likelyArgumentCount]; + var min = Math.max(0, likelyArgumentCount - 1 - PARAM_COUNTS_TO_TRY); + for(var i = likelyArgumentCount - 1; i >= min; --i) { + ret.push(i); + } + for(var i = likelyArgumentCount + 1; i <= PARAM_COUNTS_TO_TRY; ++i) { + ret.push(i); + } + return ret; +}; + +var argumentSequence = function(argumentCount) { + return util.filledRange(argumentCount, "_arg", ""); +}; + +var parameterDeclaration = function(parameterCount) { + return util.filledRange( + Math.max(parameterCount, PARAM_COUNTS_TO_TRY), "_arg", ""); +}; + +var parameterCount = function(fn) { + if (typeof fn.length === "number") { + return Math.max(Math.min(fn.length, MAX_PARAM_COUNT + 1), 0); + } + //Unsupported .length for functions + return 0; +}; + +makeNodePromisifiedEval = +function(callback, receiver, originalName, fn, _, multiArgs) { + //-1 for the callback parameter + var newParameterCount = Math.max(0, parameterCount(fn) - 1); + var argumentOrder = switchCaseArgumentOrder(newParameterCount); + var shouldProxyThis = typeof callback === "string" || receiver === THIS; + + function generateCallForArgumentCount(count) { + var args = argumentSequence(count).join(", "); + var comma = count > 0 ? ", " : ""; + var ret; + if (shouldProxyThis) { + ret = "ret = callback.call(this, {{args}}, nodeback); break;\n"; + } else { + ret = receiver === undefined + ? "ret = callback({{args}}, nodeback); break;\n" + : "ret = callback.call(receiver, {{args}}, nodeback); break;\n"; + } + return ret.replace("{{args}}", args).replace(", ", comma); + } + + function generateArgumentSwitchCase() { + var ret = ""; + for (var i = 0; i < argumentOrder.length; ++i) { + ret += "case " + argumentOrder[i] +":" + + generateCallForArgumentCount(argumentOrder[i]); + } + + ret += " \n\ + default: \n\ + var args = new Array(len + 1); \n\ + var i = 0; \n\ + for (var i = 0; i < len; ++i) { \n\ + args[i] = arguments[i]; \n\ + } \n\ + args[i] = nodeback; \n\ + [CodeForCall] \n\ + break; \n\ + ".replace("[CodeForCall]", (shouldProxyThis + ? "ret = callback.apply(this, args);\n" + : "ret = callback.apply(receiver, args);\n")); + return ret; + } + + var getFunctionCode = typeof callback === "string" + ? ("this != null ? this['"+callback+"'] : fn") + : "fn"; + var body = "'use strict'; \n\ + var ret = function (Parameters) { \n\ + 'use strict'; \n\ + var len = arguments.length; \n\ + var promise = new Promise(INTERNAL); \n\ + promise._captureStackTrace(); \n\ + var nodeback = nodebackForPromise(promise, " + multiArgs + "); \n\ + var ret; \n\ + var callback = tryCatch([GetFunctionCode]); \n\ + switch(len) { \n\ + [CodeForSwitchCase] \n\ + } \n\ + if (ret === errorObj) { \n\ + promise._rejectCallback(maybeWrapAsError(ret.e), true, true);\n\ + } \n\ + if (!promise._isFateSealed()) promise._setAsyncGuaranteed(); \n\ + return promise; \n\ + }; \n\ + notEnumerableProp(ret, '__isPromisified__', true); \n\ + return ret; \n\ + ".replace("[CodeForSwitchCase]", generateArgumentSwitchCase()) + .replace("[GetFunctionCode]", getFunctionCode); + body = body.replace("Parameters", parameterDeclaration(newParameterCount)); + return new Function("Promise", + "fn", + "receiver", + "withAppended", + "maybeWrapAsError", + "nodebackForPromise", + "tryCatch", + "errorObj", + "notEnumerableProp", + "INTERNAL", + body)( + Promise, + fn, + receiver, + withAppended, + maybeWrapAsError, + nodebackForPromise, + util.tryCatch, + util.errorObj, + util.notEnumerableProp, + INTERNAL); +}; +} + +function makeNodePromisifiedClosure(callback, receiver, _, fn, __, multiArgs) { + var defaultThis = (function() {return this;})(); + var method = callback; + if (typeof method === "string") { + callback = fn; + } + function promisified() { + var _receiver = receiver; + if (receiver === THIS) _receiver = this; + ASSERT(typeof callback === "function"); + var promise = new Promise(INTERNAL); + promise._captureStackTrace(); + var cb = typeof method === "string" && this !== defaultThis + ? this[method] : callback; + var fn = nodebackForPromise(promise, multiArgs); + try { + cb.apply(_receiver, withAppended(arguments, fn)); + } catch(e) { + promise._rejectCallback(maybeWrapAsError(e), true, true); + } + if (!promise._isFateSealed()) promise._setAsyncGuaranteed(); + return promise; + } + util.notEnumerableProp(promisified, "__isPromisified__", true); + return promisified; +} + +var makeNodePromisified = canEvaluate + ? makeNodePromisifiedEval + : makeNodePromisifiedClosure; + +function promisifyAll(obj, suffix, filter, promisifier, multiArgs) { + ASSERT(typeof suffix === "string"); + ASSERT(typeof filter === "function"); + var suffixRegexp = new RegExp(escapeIdentRegex(suffix) + "$"); + var methods = + promisifiableMethods(obj, suffix, suffixRegexp, filter); + + for (var i = 0, len = methods.length; i < len; i+= 2) { + var key = methods[i]; + var fn = methods[i+1]; + var promisifiedKey = key + suffix; + if (promisifier === makeNodePromisified) { + obj[promisifiedKey] = + makeNodePromisified(key, THIS, key, fn, suffix, multiArgs); + } else { + var promisified = promisifier(fn, function() { + return makeNodePromisified(key, THIS, key, + fn, suffix, multiArgs); + }); + util.notEnumerableProp(promisified, "__isPromisified__", true); + obj[promisifiedKey] = promisified; + } + } + util.toFastProperties(obj); + return obj; +} + +function promisify(callback, receiver, multiArgs) { + return makeNodePromisified(callback, receiver, undefined, + callback, null, multiArgs); +} + +Promise.promisify = function (fn, options) { + if (typeof fn !== "function") { + throw new TypeError(FUNCTION_ERROR + util.classString(fn)); + } + if (isPromisified(fn)) { + return fn; + } + options = Object(options); + var receiver = options.context === undefined ? THIS : options.context; + var multiArgs = !!options.multiArgs; + var ret = promisify(fn, receiver, multiArgs); + util.copyDescriptors(fn, ret, propsFilter); + return ret; +}; + +Promise.promisifyAll = function (target, options) { + if (typeof target !== "function" && typeof target !== "object") { + throw new TypeError(PROMISIFY_TYPE_ERROR); + } + options = Object(options); + var multiArgs = !!options.multiArgs; + var suffix = options.suffix; + if (typeof suffix !== "string") suffix = defaultSuffix; + var filter = options.filter; + if (typeof filter !== "function") filter = defaultFilter; + var promisifier = options.promisifier; + if (typeof promisifier !== "function") promisifier = makeNodePromisified; + + if (!util.isIdentifier(suffix)) { + throw new RangeError(SUFFIX_NOT_IDENTIFIER); + } + + var keys = util.inheritedDataKeys(target); + for (var i = 0; i < keys.length; ++i) { + var value = target[keys[i]]; + if (keys[i] !== "constructor" && + util.isClass(value)) { + promisifyAll(value.prototype, suffix, filter, promisifier, + multiArgs); + promisifyAll(value, suffix, filter, promisifier, multiArgs); + } + } + + return promisifyAll(target, suffix, filter, promisifier, multiArgs); +}; +}; + diff --git a/platforms/android/assets/www/libs/bluebird/src/props.js b/platforms/android/assets/www/libs/bluebird/src/props.js new file mode 100644 index 0000000..714a0e2 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/props.js @@ -0,0 +1,125 @@ +"use strict"; +module.exports = function( + Promise, PromiseArray, tryConvertToPromise, apiRejection) { +var ASSERT = require("./assert"); +var util = require("./util"); +var isObject = util.isObject; +var es5 = require("./es5"); +var Es6Map; +if (typeof Map === "function") Es6Map = Map; + +var mapToEntries = (function() { + var index = 0; + var size = 0; + + function extractEntry(value, key) { + this[index] = value; + this[index + size] = key; + index++; + } + + return function mapToEntries(map) { + size = map.size; + index = 0; + var ret = new Array(map.size * 2); + map.forEach(extractEntry, ret); + return ret; + }; +})(); + +var entriesToMap = function(entries) { + var ret = new Es6Map(); + var length = entries.length / 2 | 0; + for (var i = 0; i < length; ++i) { + var key = entries[length + i]; + var value = entries[i]; + ret.set(key, value); + } + return ret; +}; + +function PropertiesPromiseArray(obj) { + var isMap = false; + var entries; + if (Es6Map !== undefined && obj instanceof Es6Map) { + entries = mapToEntries(obj); + isMap = true; + } else { + var keys = es5.keys(obj); + var len = keys.length; + entries = new Array(len * 2); + for (var i = 0; i < len; ++i) { + var key = keys[i]; + entries[i] = obj[key]; + entries[i + len] = key; + } + } + this.constructor$(entries); + this._isMap = isMap; + this._init$(undefined, RESOLVE_OBJECT); +} +util.inherits(PropertiesPromiseArray, PromiseArray); + +//Override +PropertiesPromiseArray.prototype._init = function () {}; + +//Override +PropertiesPromiseArray.prototype._promiseFulfilled = function (value, index) { + ASSERT(!this._isResolved()); + ASSERT(!(value instanceof Promise)); + this._values[index] = value; + var totalResolved = ++this._totalResolved; + if (totalResolved >= this._length) { + var val; + if (this._isMap) { + val = entriesToMap(this._values); + } else { + val = {}; + var keyOffset = this.length(); + for (var i = 0, len = this.length(); i < len; ++i) { + val[this._values[i + keyOffset]] = this._values[i]; + } + } + this._resolve(val); + return true; + } + return false; +}; + +// Override +PropertiesPromiseArray.prototype.shouldCopyValues = function () { + return false; +}; + +// Override +PropertiesPromiseArray.prototype.getActualLength = function (len) { + return len >> 1; +}; + +function props(promises) { + var ret; + var castValue = tryConvertToPromise(promises); + + if (!isObject(castValue)) { + return apiRejection(PROPS_TYPE_ERROR); + } else if (castValue instanceof Promise) { + ret = castValue._then( + Promise.props, undefined, undefined, undefined, undefined); + } else { + ret = new PropertiesPromiseArray(castValue).promise(); + } + + if (castValue instanceof Promise) { + ret._propagateFrom(castValue, PROPAGATE_BIND); + } + return ret; +} + +Promise.prototype.props = function () { + return props(this); +}; + +Promise.props = function (promises) { + return props(promises); +}; +}; diff --git a/platforms/android/assets/www/libs/bluebird/src/queue.js b/platforms/android/assets/www/libs/bluebird/src/queue.js new file mode 100644 index 0000000..f802dae --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/queue.js @@ -0,0 +1,96 @@ +"use strict"; +var ASSERT = require("./assert"); +function arrayMove(src, srcIndex, dst, dstIndex, len) { + for (var j = 0; j < len; ++j) { + dst[j + dstIndex] = src[j + srcIndex]; + src[j + srcIndex] = void 0; + } +} + +function Queue(capacity) { + this._capacity = capacity; + this._length = 0; + this._front = 0; +} + +Queue.prototype._willBeOverCapacity = function (size) { + return this._capacity < size; +}; + +Queue.prototype._pushOne = function (arg) { + var length = this.length(); + this._checkCapacity(length + 1); + var i = (this._front + length) & (this._capacity - 1); + this[i] = arg; + this._length = length + 1; +}; + +Queue.prototype._unshiftOne = function(value) { + var capacity = this._capacity; + this._checkCapacity(this.length() + 1); + var front = this._front; + var i = (((( front - 1 ) & + ( capacity - 1) ) ^ capacity ) - capacity ); + this[i] = value; + this._front = i; + this._length = this.length() + 1; +}; + +Queue.prototype.unshift = function(fn, receiver, arg) { + this._unshiftOne(arg); + this._unshiftOne(receiver); + this._unshiftOne(fn); +}; + +Queue.prototype.push = function (fn, receiver, arg) { + ASSERT(arguments.length === 3); + ASSERT(typeof fn === "function"); + var length = this.length() + 3; + if (this._willBeOverCapacity(length)) { + //The fast array copies expect the + //underlying array to be filled completely + this._pushOne(fn); + this._pushOne(receiver); + this._pushOne(arg); + return; + } + var j = this._front + length - 3; + this._checkCapacity(length); + var wrapMask = this._capacity - 1; + this[(j + 0) & wrapMask] = fn; + this[(j + 1) & wrapMask] = receiver; + this[(j + 2) & wrapMask] = arg; + this._length = length; +}; + +Queue.prototype.shift = function () { + ASSERT(this.length() > 0); + var front = this._front, + ret = this[front]; + + this[front] = undefined; + this._front = (front + 1) & (this._capacity - 1); + this._length--; + return ret; +}; + +Queue.prototype.length = function () { + return this._length; +}; + +Queue.prototype._checkCapacity = function (size) { + if (this._capacity < size) { + this._resizeTo(this._capacity << 1); + } +}; + +Queue.prototype._resizeTo = function (capacity) { + var oldCapacity = this._capacity; + this._capacity = capacity; + var front = this._front; + var length = this._length; + var moveItemsCount = (front + length) & (oldCapacity - 1); + arrayMove(this, 0, this, oldCapacity, moveItemsCount); +}; + +module.exports = Queue; diff --git a/platforms/android/assets/www/libs/bluebird/src/race.js b/platforms/android/assets/www/libs/bluebird/src/race.js new file mode 100644 index 0000000..6f57c5b --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/race.js @@ -0,0 +1,50 @@ +"use strict"; +module.exports = function( + Promise, INTERNAL, tryConvertToPromise, apiRejection) { +var util = require("./util"); + +var raceLater = function (promise) { + return promise.then(function(array) { + return race(array, promise); + }); +}; + +function race(promises, parent) { + var maybePromise = tryConvertToPromise(promises); + + if (maybePromise instanceof Promise) { + return raceLater(maybePromise); + } else { + promises = util.asArray(promises); + if (promises === null) + return apiRejection(COLLECTION_ERROR + util.classString(promises)); + } + + var ret = new Promise(INTERNAL); + if (parent !== undefined) { + ret._propagateFrom(parent, PROPAGATE_ALL); + } + var fulfill = ret._fulfill; + var reject = ret._reject; + for (var i = 0, len = promises.length; i < len; ++i) { + var val = promises[i]; + + if (val === undefined && !(i in promises)) { + continue; + } + + Promise.cast(val)._then(fulfill, reject, undefined, ret, null); + } + //Yes, if promises were empty, it will be forever pending :-) + return ret; +} + +Promise.race = function (promises) { + return race(promises, undefined); +}; + +Promise.prototype.race = function () { + return race(this, undefined); +}; + +}; diff --git a/platforms/android/assets/www/libs/bluebird/src/reduce.js b/platforms/android/assets/www/libs/bluebird/src/reduce.js new file mode 100644 index 0000000..bd30827 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/reduce.js @@ -0,0 +1,168 @@ +"use strict"; +module.exports = function(Promise, + PromiseArray, + apiRejection, + tryConvertToPromise, + INTERNAL, + debug) { +var getDomain = Promise._getDomain; +var util = require("./util"); +var tryCatch = util.tryCatch; + +function ReductionPromiseArray(promises, fn, initialValue, _each) { + this.constructor$(promises); + var domain = getDomain(); + this._fn = domain === null ? fn : domain.bind(fn); + if (initialValue !== undefined) { + initialValue = Promise.resolve(initialValue); + initialValue._attachCancellationCallback(this); + } + this._initialValue = initialValue; + this._currentCancellable = null; + this._eachValues = _each === INTERNAL ? [] : undefined; + this._promise._captureStackTrace(); + this._init$(undefined, RESOLVE_CALL_METHOD); +} +util.inherits(ReductionPromiseArray, PromiseArray); + +ReductionPromiseArray.prototype._gotAccum = function(accum) { + if (this._eachValues !== undefined && accum !== INTERNAL) { + this._eachValues.push(accum); + } +}; + +ReductionPromiseArray.prototype._eachComplete = function(value) { + this._eachValues.push(value); + return this._eachValues; +}; + +// Override +ReductionPromiseArray.prototype._init = function() {}; + +// Override +ReductionPromiseArray.prototype._resolveEmptyArray = function() { + this._resolve(this._eachValues !== undefined ? this._eachValues + : this._initialValue); +}; + +// Override +ReductionPromiseArray.prototype.shouldCopyValues = function () { + return false; +}; + +// Override +ReductionPromiseArray.prototype._resolve = function(value) { + this._promise._resolveCallback(value); + this._values = null; +}; + +// Override +ReductionPromiseArray.prototype._resultCancelled = function(sender) { + if (sender === this._initialValue) return this._cancel(); + if (this._isResolved()) return; + this._resultCancelled$(); + if (this._currentCancellable instanceof Promise) { + this._currentCancellable.cancel(); + } + if (this._initialValue instanceof Promise) { + this._initialValue.cancel(); + } +}; + +// Override +ReductionPromiseArray.prototype._iterate = function (values) { + this._values = values; + var value; + var i; + var length = values.length; + if (this._initialValue !== undefined) { + value = this._initialValue; + i = 0; + } else { + value = Promise.resolve(values[0]); + i = 1; + } + + this._currentCancellable = value; + + if (!value.isRejected()) { + for (; i < length; ++i) { + var ctx = { + accum: null, + value: values[i], + index: i, + length: length, + array: this + }; + value = value._then(gotAccum, undefined, undefined, ctx, undefined); + } + } + + if (this._eachValues !== undefined) { + value = value + ._then(this._eachComplete, undefined, undefined, this, undefined); + } + value._then(completed, completed, undefined, value, this); +}; + +Promise.prototype.reduce = function (fn, initialValue) { + return reduce(this, fn, initialValue, null); +}; + +Promise.reduce = function (promises, fn, initialValue, _each) { + return reduce(promises, fn, initialValue, _each); +}; + +function completed(valueOrReason, array) { + if (this.isFulfilled()) { + array._resolve(valueOrReason); + } else { + array._reject(valueOrReason); + } +} + +function reduce(promises, fn, initialValue, _each) { + if (typeof fn !== "function") { + return apiRejection(FUNCTION_ERROR + util.classString(fn)); + } + var array = new ReductionPromiseArray(promises, fn, initialValue, _each); + return array.promise(); +} + +function gotAccum(accum) { + this.accum = accum; + this.array._gotAccum(accum); + var value = tryConvertToPromise(this.value, this.array._promise); + if (value instanceof Promise) { + this.array._currentCancellable = value; + return value._then(gotValue, undefined, undefined, this, undefined); + } else { + return gotValue.call(this, value); + } +} + +function gotValue(value) { + var array = this.array; + var promise = array._promise; + var fn = tryCatch(array._fn); + promise._pushContext(); + var ret; + if (array._eachValues !== undefined) { + ret = fn.call(promise._boundValue(), value, this.index, this.length); + } else { + ret = fn.call(promise._boundValue(), + this.accum, value, this.index, this.length); + } + if (ret instanceof Promise) { + array._currentCancellable = ret; + } + var promiseCreated = promise._popContext(); + debug.checkForgottenReturns( + ret, + promiseCreated, + array._eachValues !== undefined ? "Promise.each" : "Promise.reduce", + promise + ); + return ret; +} +}; diff --git a/platforms/android/assets/www/libs/bluebird/src/schedule.js b/platforms/android/assets/www/libs/bluebird/src/schedule.js new file mode 100644 index 0000000..a0b5529 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/schedule.js @@ -0,0 +1,76 @@ +"use strict"; +var util = require("./util"); +var schedule; +var noAsyncScheduler = function() { + throw new Error(NO_ASYNC_SCHEDULER); +}; +var NativePromise = util.getNativePromise(); +// This file figures out which scheduler to use for Bluebird. It normalizes +// async task scheduling across target platforms. Note that not all JS target +// platforms come supported. The scheduler is overridable with `setScheduler`. + +// Our scheduler for NodeJS/io.js is setImmediate for recent +// versions of node because of macrotask semantics. +// The `typeof` check is for an edge case with nw.js. +if (util.isNode && typeof MutationObserver === "undefined") { + var GlobalSetImmediate = global.setImmediate; + var ProcessNextTick = process.nextTick; + schedule = util.isRecentNode + ? function(fn) { GlobalSetImmediate.call(global, fn); } + : function(fn) { ProcessNextTick.call(process, fn); }; +} else if (typeof NativePromise === "function") { + var nativePromise = NativePromise.resolve(); + schedule = function(fn) { + nativePromise.then(fn); + }; +// Outside of Node, we're using MutationObservers because they provide low +// latency. The second check is to guard against iOS standalone apps which +// do not fire DOM mutation events for some reason on iOS 8.3+. +} else if ((typeof MutationObserver !== "undefined") && + !(typeof window !== "undefined" && + window.navigator && + window.navigator.standalone)) { + schedule = (function() { + // Using 2 mutation observers to batch multiple updates into one. + var div = document.createElement("div"); + var opts = {attributes: true}; + var toggleScheduled = false; + var div2 = document.createElement("div"); + var o2 = new MutationObserver(function() { + div.classList.toggle("foo"); + toggleScheduled = false; + }); + o2.observe(div2, opts); + + var scheduleToggle = function() { + if (toggleScheduled) return; + toggleScheduled = true; + div2.classList.toggle("foo"); + }; + + return function schedule(fn) { + var o = new MutationObserver(function() { + o.disconnect(); + fn(); + }); + o.observe(div, opts); + scheduleToggle(); + }; + })(); +// setImmediate has higher latency but is still pretty good. This is useful for +// cases where MutationObserver is not defined (older IE, for example). +} else if (typeof setImmediate !== "undefined") { + schedule = function (fn) { + setImmediate(fn); + }; +// setTimeout also works, it has the most latency but it does the trick. +} else if (typeof setTimeout !== "undefined") { + schedule = function (fn) { + setTimeout(fn, 0); + }; +} else { +// Do __Not__ default to a sync scheduler, that would break Promises/A+ +// compliancy and cause race conditions. + schedule = noAsyncScheduler; +} +module.exports = schedule; diff --git a/platforms/android/assets/www/libs/bluebird/src/settle.js b/platforms/android/assets/www/libs/bluebird/src/settle.js new file mode 100644 index 0000000..222ea45 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/settle.js @@ -0,0 +1,51 @@ +"use strict"; +module.exports = + function(Promise, PromiseArray, debug) { +var ASSERT = require("./assert"); +var PromiseInspection = Promise.PromiseInspection; +var util = require("./util"); + +function SettledPromiseArray(values) { + this.constructor$(values); +} +util.inherits(SettledPromiseArray, PromiseArray); + +SettledPromiseArray.prototype._promiseResolved = function (index, inspection) { + ASSERT(typeof index === "number"); + this._values[index] = inspection; + var totalResolved = ++this._totalResolved; + if (totalResolved >= this._length) { + this._resolve(this._values); + return true; + } + return false; +}; + +//override +SettledPromiseArray.prototype._promiseFulfilled = function (value, index) { + ASSERT(!this._isResolved()); + ASSERT(typeof index === "number"); + var ret = new PromiseInspection(); + ret._bitField = IS_FULFILLED; + ret._settledValueField = value; + return this._promiseResolved(index, ret); +}; +//override +SettledPromiseArray.prototype._promiseRejected = function (reason, index) { + ASSERT(!this._isResolved()); + ASSERT(typeof index === "number"); + var ret = new PromiseInspection(); + ret._bitField = IS_REJECTED; + ret._settledValueField = reason; + return this._promiseResolved(index, ret); +}; + +Promise.settle = function (promises) { + debug.deprecated(".settle()", ".reflect()"); + return new SettledPromiseArray(promises).promise(); +}; + +Promise.prototype.settle = function () { + return Promise.settle(this); +}; +}; diff --git a/platforms/android/assets/www/libs/bluebird/src/some.js b/platforms/android/assets/www/libs/bluebird/src/some.js new file mode 100644 index 0000000..b1661ae --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/some.js @@ -0,0 +1,159 @@ +"use strict"; +module.exports = +function(Promise, PromiseArray, apiRejection) { +var ASSERT = require("./assert"); +var util = require("./util"); +var RangeError = require("./errors").RangeError; +var AggregateError = require("./errors").AggregateError; +var isArray = util.isArray; +var CANCELLATION = {}; + + +function SomePromiseArray(values) { + this.constructor$(values); + this._howMany = 0; + this._unwrap = false; + this._initialized = false; +} +util.inherits(SomePromiseArray, PromiseArray); + +SomePromiseArray.prototype._init = function () { + if (!this._initialized) { + return; + } + if (this._howMany === 0) { + this._resolve([]); + return; + } + this._init$(undefined, RESOLVE_CALL_METHOD); + var isArrayResolved = isArray(this._values); + if (!this._isResolved() && + isArrayResolved && + this._howMany > this._canPossiblyFulfill()) { + this._reject(this._getRangeError(this.length())); + } +}; + +SomePromiseArray.prototype.init = function () { + this._initialized = true; + this._init(); +}; + +SomePromiseArray.prototype.setUnwrap = function () { + this._unwrap = true; +}; + +SomePromiseArray.prototype.howMany = function () { + return this._howMany; +}; + +SomePromiseArray.prototype.setHowMany = function (count) { + ASSERT(!this._isResolved()); + this._howMany = count; +}; + +//override +SomePromiseArray.prototype._promiseFulfilled = function (value) { + ASSERT(!this._isResolved()); + this._addFulfilled(value); + if (this._fulfilled() === this.howMany()) { + this._values.length = this.howMany(); + if (this.howMany() === 1 && this._unwrap) { + this._resolve(this._values[0]); + } else { + this._resolve(this._values); + } + return true; + } + return false; + +}; +//override +SomePromiseArray.prototype._promiseRejected = function (reason) { + ASSERT(!this._isResolved()); + this._addRejected(reason); + return this._checkOutcome(); +}; + +//override +SomePromiseArray.prototype._promiseCancelled = function () { + if (this._values instanceof Promise || this._values == null) { + return this._cancel(); + } + ASSERT(!this._isResolved()); + this._addRejected(CANCELLATION); + return this._checkOutcome(); +}; + +SomePromiseArray.prototype._checkOutcome = function() { + if (this.howMany() > this._canPossiblyFulfill()) { + var e = new AggregateError(); + for (var i = this.length(); i < this._values.length; ++i) { + if (this._values[i] !== CANCELLATION) { + e.push(this._values[i]); + } + } + if (e.length > 0) { + this._reject(e); + } else { + this._cancel(); + } + return true; + } + return false; +}; + +SomePromiseArray.prototype._fulfilled = function () { + return this._totalResolved; +}; + +SomePromiseArray.prototype._rejected = function () { + return this._values.length - this.length(); +}; + +//Use the same array past .length() to store rejection reasons +SomePromiseArray.prototype._addRejected = function (reason) { + this._values.push(reason); +}; + +SomePromiseArray.prototype._addFulfilled = function (value) { + this._values[this._totalResolved++] = value; +}; + +SomePromiseArray.prototype._canPossiblyFulfill = function () { + return this.length() - this._rejected(); +}; + +SomePromiseArray.prototype._getRangeError = function (count) { + var message = "Input array must contain at least " + + this._howMany + " items but contains only " + count + " items"; + return new RangeError(message); +}; + +SomePromiseArray.prototype._resolveEmptyArray = function () { + this._reject(this._getRangeError(0)); +}; + +function some(promises, howMany) { + if ((howMany | 0) !== howMany || howMany < 0) { + return apiRejection(POSITIVE_INTEGER_ERROR); + } + var ret = new SomePromiseArray(promises); + var promise = ret.promise(); + ASSERT(promise.isPending()); + ASSERT(ret instanceof SomePromiseArray); + ret.setHowMany(howMany); + ret.init(); + return promise; +} + +Promise.some = function (promises, howMany) { + return some(promises, howMany); +}; + +Promise.prototype.some = function (howMany) { + return some(this, howMany); +}; + +Promise._SomePromiseArray = SomePromiseArray; +}; diff --git a/platforms/android/assets/www/libs/bluebird/src/synchronous_inspection.js b/platforms/android/assets/www/libs/bluebird/src/synchronous_inspection.js new file mode 100644 index 0000000..aa14b87 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/synchronous_inspection.js @@ -0,0 +1,96 @@ +"use strict"; +module.exports = function(Promise) { +function PromiseInspection(promise) { + if (promise !== undefined) { + promise = promise._target(); + this._bitField = promise._bitField; + this._settledValueField = promise._isFateSealed() + ? promise._settledValue() : undefined; + } + else { + this._bitField = 0; + this._settledValueField = undefined; + } +} + +PromiseInspection.prototype._settledValue = function() { + return this._settledValueField; +}; + +var value = PromiseInspection.prototype.value = function () { + if (!this.isFulfilled()) { + throw new TypeError(INSPECTION_VALUE_ERROR); + } + return this._settledValue(); +}; + +var reason = PromiseInspection.prototype.error = +PromiseInspection.prototype.reason = function () { + if (!this.isRejected()) { + throw new TypeError(INSPECTION_REASON_ERROR); + } + return this._settledValue(); +}; + +var isFulfilled = PromiseInspection.prototype.isFulfilled = function() { + return (this._bitField & IS_FULFILLED) !== 0; +}; + +var isRejected = PromiseInspection.prototype.isRejected = function () { + return (this._bitField & IS_REJECTED) !== 0; +}; + +var isPending = PromiseInspection.prototype.isPending = function () { + return (this._bitField & IS_REJECTED_OR_FULFILLED_OR_CANCELLED) === 0; +}; + +var isResolved = PromiseInspection.prototype.isResolved = function () { + return (this._bitField & IS_REJECTED_OR_FULFILLED) !== 0; +}; + +PromiseInspection.prototype.isCancelled = +Promise.prototype._isCancelled = function() { + return (this._bitField & IS_CANCELLED) === IS_CANCELLED; +}; + +Promise.prototype.isCancelled = function() { + return this._target()._isCancelled(); +}; + +Promise.prototype.isPending = function() { + return isPending.call(this._target()); +}; + +Promise.prototype.isRejected = function() { + return isRejected.call(this._target()); +}; + +Promise.prototype.isFulfilled = function() { + return isFulfilled.call(this._target()); +}; + +Promise.prototype.isResolved = function() { + return isResolved.call(this._target()); +}; + +Promise.prototype.value = function() { + return value.call(this._target()); +}; + +Promise.prototype.reason = function() { + var target = this._target(); + target._unsetRejectionIsUnhandled(); + return reason.call(target); +}; + +Promise.prototype._value = function() { + return this._settledValue(); +}; + +Promise.prototype._reason = function() { + this._unsetRejectionIsUnhandled(); + return this._settledValue(); +}; + +Promise.PromiseInspection = PromiseInspection; +}; diff --git a/platforms/android/assets/www/libs/bluebird/src/thenables.js b/platforms/android/assets/www/libs/bluebird/src/thenables.js new file mode 100644 index 0000000..9572e5c --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/thenables.js @@ -0,0 +1,89 @@ +"use strict"; +module.exports = function(Promise, INTERNAL) { +var ASSERT = require("./assert"); +var util = require("./util"); +var errorObj = util.errorObj; +var isObject = util.isObject; + +function tryConvertToPromise(obj, context) { + if (isObject(obj)) { + if (obj instanceof Promise) return obj; + var then = getThen(obj); + if (then === errorObj) { + if (context) context._pushContext(); + var ret = Promise.reject(then.e); + if (context) context._popContext(); + return ret; + } else if (typeof then === "function") { + //Make casting from another bluebird fast + if (isAnyBluebirdPromise(obj)) { + var ret = new Promise(INTERNAL); + obj._then( + ret._fulfill, + ret._reject, + undefined, + ret, + null + ); + return ret; + } + return doThenable(obj, then, context); + } + } + return obj; +} + +function doGetThen(obj) { + return obj.then; +} + +function getThen(obj) { + try { + return doGetThen(obj); + } catch (e) { + errorObj.e = e; + return errorObj; + } +} + +var hasProp = {}.hasOwnProperty; +function isAnyBluebirdPromise(obj) { + try { + return hasProp.call(obj, "_promise0"); + } catch (e) { + return false; + } +} + +function doThenable(x, then, context) { + ASSERT(typeof then === "function"); + var promise = new Promise(INTERNAL); + var ret = promise; + if (context) context._pushContext(); + promise._captureStackTrace(); + if (context) context._popContext(); + var synchronous = true; + var result = util.tryCatch(then).call(x, resolve, reject); + synchronous = false; + + if (promise && result === errorObj) { + promise._rejectCallback(result.e, true, true); + promise = null; + } + + function resolve(value) { + if (!promise) return; + promise._resolveCallback(value); + promise = null; + } + + function reject(reason) { + if (!promise) return; + promise._rejectCallback(reason, synchronous, true); + promise = null; + } + return ret; +} + +return tryConvertToPromise; +}; diff --git a/platforms/android/assets/www/libs/bluebird/src/timers.js b/platforms/android/assets/www/libs/bluebird/src/timers.js new file mode 100644 index 0000000..d3adc78 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/timers.js @@ -0,0 +1,92 @@ +"use strict"; +module.exports = function(Promise, INTERNAL, debug) { +var util = require("./util"); +var TimeoutError = Promise.TimeoutError; + +function HandleWrapper(handle) { + this.handle = handle; +} + +HandleWrapper.prototype._resultCancelled = function() { + clearTimeout(this.handle); +}; + +var afterValue = function(value) { return delay(+this).thenReturn(value); }; +var delay = Promise.delay = function (ms, value) { + var ret; + var handle; + if (value !== undefined) { + ret = Promise.resolve(value) + ._then(afterValue, null, null, ms, undefined); + if (debug.cancellation() && value instanceof Promise) { + ret._setOnCancel(value); + } + } else { + ret = new Promise(INTERNAL); + handle = setTimeout(function() { ret._fulfill(); }, +ms); + if (debug.cancellation()) { + ret._setOnCancel(new HandleWrapper(handle)); + } + } + ret._setAsyncGuaranteed(); + return ret; +}; + +Promise.prototype.delay = function (ms) { + return delay(ms, this); +}; + +var afterTimeout = function (promise, message, parent) { + var err; + if (typeof message !== "string") { + if (message instanceof Error) { + err = message; + } else { + err = new TimeoutError(TIMEOUT_ERROR); + } + } else { + err = new TimeoutError(message); + } + util.markAsOriginatingFromRejection(err); + promise._attachExtraTrace(err); + promise._reject(err); + + if (parent != null) { + parent.cancel(); + } +}; + +function successClear(value) { + clearTimeout(this.handle); + return value; +} + +function failureClear(reason) { + clearTimeout(this.handle); + throw reason; +} + +Promise.prototype.timeout = function (ms, message) { + ms = +ms; + var ret, parent; + + var handleWrapper = new HandleWrapper(setTimeout(function timeoutTimeout() { + if (ret.isPending()) { + afterTimeout(ret, message, parent); + } + }, ms)); + + if (debug.cancellation()) { + parent = this.then(); + ret = parent._then(successClear, failureClear, + undefined, handleWrapper, undefined); + ret._setOnCancel(handleWrapper); + } else { + ret = this._then(successClear, failureClear, + undefined, handleWrapper, undefined); + } + + return ret; +}; + +}; diff --git a/platforms/android/assets/www/libs/bluebird/src/using.js b/platforms/android/assets/www/libs/bluebird/src/using.js new file mode 100644 index 0000000..9812b9f --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/using.js @@ -0,0 +1,226 @@ +"use strict"; +module.exports = function (Promise, apiRejection, tryConvertToPromise, + createContext, INTERNAL, debug) { + var util = require("./util"); + var TypeError = require("./errors").TypeError; + var inherits = require("./util").inherits; + var errorObj = util.errorObj; + var tryCatch = util.tryCatch; + var NULL = {}; + + function thrower(e) { + setTimeout(function(){throw e;}, 0); + } + + function castPreservingDisposable(thenable) { + var maybePromise = tryConvertToPromise(thenable); + if (maybePromise !== thenable && + typeof thenable._isDisposable === "function" && + typeof thenable._getDisposer === "function" && + thenable._isDisposable()) { + maybePromise._setDisposable(thenable._getDisposer()); + } + return maybePromise; + } + function dispose(resources, inspection) { + var i = 0; + var len = resources.length; + var ret = new Promise(INTERNAL); + function iterator() { + if (i >= len) return ret._fulfill(); + var maybePromise = castPreservingDisposable(resources[i++]); + if (maybePromise instanceof Promise && + maybePromise._isDisposable()) { + try { + maybePromise = tryConvertToPromise( + maybePromise._getDisposer().tryDispose(inspection), + resources.promise); + } catch (e) { + return thrower(e); + } + if (maybePromise instanceof Promise) { + return maybePromise._then(iterator, thrower, + null, null, null); + } + } + iterator(); + } + iterator(); + return ret; + } + + function Disposer(data, promise, context) { + this._data = data; + this._promise = promise; + this._context = context; + } + + Disposer.prototype.data = function () { + return this._data; + }; + + Disposer.prototype.promise = function () { + return this._promise; + }; + + Disposer.prototype.resource = function () { + if (this.promise().isFulfilled()) { + return this.promise().value(); + } + return NULL; + }; + + Disposer.prototype.tryDispose = function(inspection) { + var resource = this.resource(); + var context = this._context; + if (context !== undefined) context._pushContext(); + var ret = resource !== NULL + ? this.doDispose(resource, inspection) : null; + if (context !== undefined) context._popContext(); + this._promise._unsetDisposable(); + this._data = null; + return ret; + }; + + Disposer.isDisposer = function (d) { + return (d != null && + typeof d.resource === "function" && + typeof d.tryDispose === "function"); + }; + + function FunctionDisposer(fn, promise, context) { + this.constructor$(fn, promise, context); + } + inherits(FunctionDisposer, Disposer); + + FunctionDisposer.prototype.doDispose = function (resource, inspection) { + var fn = this.data(); + return fn.call(resource, resource, inspection); + }; + + function maybeUnwrapDisposer(value) { + if (Disposer.isDisposer(value)) { + this.resources[this.index]._setDisposable(value); + return value.promise(); + } + return value; + } + + function ResourceList(length) { + this.length = length; + this.promise = null; + this[length-1] = null; + } + + ResourceList.prototype._resultCancelled = function() { + var len = this.length; + for (var i = 0; i < len; ++i) { + var item = this[i]; + if (item instanceof Promise) { + item.cancel(); + } + } + }; + + Promise.using = function () { + var len = arguments.length; + if (len < 2) return apiRejection( + "you must pass at least 2 arguments to Promise.using"); + var fn = arguments[len - 1]; + if (typeof fn !== "function") { + return apiRejection(FUNCTION_ERROR + util.classString(fn)); + } + var input; + var spreadArgs = true; + if (len === 2 && Array.isArray(arguments[0])) { + input = arguments[0]; + len = input.length; + spreadArgs = false; + } else { + input = arguments; + len--; + } + var resources = new ResourceList(len); + for (var i = 0; i < len; ++i) { + var resource = input[i]; + if (Disposer.isDisposer(resource)) { + var disposer = resource; + resource = resource.promise(); + resource._setDisposable(disposer); + } else { + var maybePromise = tryConvertToPromise(resource); + if (maybePromise instanceof Promise) { + resource = + maybePromise._then(maybeUnwrapDisposer, null, null, { + resources: resources, + index: i + }, undefined); + } + } + resources[i] = resource; + } + + var reflectedResources = new Array(resources.length); + for (var i = 0; i < reflectedResources.length; ++i) { + reflectedResources[i] = Promise.resolve(resources[i]).reflect(); + } + + var resultPromise = Promise.all(reflectedResources) + .then(function(inspections) { + for (var i = 0; i < inspections.length; ++i) { + var inspection = inspections[i]; + if (inspection.isRejected()) { + errorObj.e = inspection.error(); + return errorObj; + } else if (!inspection.isFulfilled()) { + resultPromise.cancel(); + return; + } + inspections[i] = inspection.value(); + } + promise._pushContext(); + + fn = tryCatch(fn); + var ret = spreadArgs + ? fn.apply(undefined, inspections) : fn(inspections); + var promiseCreated = promise._popContext(); + debug.checkForgottenReturns( + ret, promiseCreated, "Promise.using", promise); + return ret; + }); + + var promise = resultPromise.lastly(function() { + var inspection = new Promise.PromiseInspection(resultPromise); + return dispose(resources, inspection); + }); + resources.promise = promise; + promise._setOnCancel(resources); + return promise; + }; + + Promise.prototype._setDisposable = function (disposer) { + this._bitField = this._bitField | IS_DISPOSABLE; + this._disposer = disposer; + }; + + Promise.prototype._isDisposable = function () { + return (this._bitField & IS_DISPOSABLE) > 0; + }; + + Promise.prototype._getDisposer = function () { + return this._disposer; + }; + + Promise.prototype._unsetDisposable = function () { + this._bitField = this._bitField & (~IS_DISPOSABLE); + this._disposer = undefined; + }; + + Promise.prototype.disposer = function (fn) { + if (typeof fn === "function") { + return new FunctionDisposer(fn, this, createContext()); + } + throw new TypeError(); + }; + +}; diff --git a/platforms/android/assets/www/libs/bluebird/src/util.js b/platforms/android/assets/www/libs/bluebird/src/util.js new file mode 100644 index 0000000..7519f24 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/src/util.js @@ -0,0 +1,381 @@ +"use strict"; +var ASSERT = require("./assert"); +var es5 = require("./es5"); +// Assume CSP if browser +var canEvaluate = typeof navigator == "undefined"; + +//Try catch is not supported in optimizing +//compiler, so it is isolated +var errorObj = {e: {}}; +var tryCatchTarget; +var globalObject = typeof self !== "undefined" ? self : + typeof window !== "undefined" ? window : + typeof global !== "undefined" ? global : + this !== undefined ? this : null; + +function tryCatcher() { + try { + var target = tryCatchTarget; + tryCatchTarget = null; + return target.apply(this, arguments); + } catch (e) { + errorObj.e = e; + return errorObj; + } +} +function tryCatch(fn) { + ASSERT(typeof fn === "function"); + tryCatchTarget = fn; + return tryCatcher; +} + +//Un-magical enough that using this doesn't prevent +//extending classes from outside using any convention +var inherits = function(Child, Parent) { + var hasProp = {}.hasOwnProperty; + + function T() { + this.constructor = Child; + this.constructor$ = Parent; + for (var propertyName in Parent.prototype) { + if (hasProp.call(Parent.prototype, propertyName) && + propertyName.charAt(propertyName.length-1) !== "$" + ) { + this[propertyName + "$"] = Parent.prototype[propertyName]; + } + } + } + T.prototype = Parent.prototype; + Child.prototype = new T(); + return Child.prototype; +}; + + +function isPrimitive(val) { + return val == null || val === true || val === false || + typeof val === "string" || typeof val === "number"; + +} + +function isObject(value) { + return typeof value === "function" || + typeof value === "object" && value !== null; +} + +function maybeWrapAsError(maybeError) { + if (!isPrimitive(maybeError)) return maybeError; + + return new Error(safeToString(maybeError)); +} + +function withAppended(target, appendee) { + var len = target.length; + var ret = new Array(len + 1); + var i; + for (i = 0; i < len; ++i) { + ret[i] = target[i]; + } + ret[i] = appendee; + return ret; +} + +function getDataPropertyOrDefault(obj, key, defaultValue) { + if (es5.isES5) { + var desc = Object.getOwnPropertyDescriptor(obj, key); + + if (desc != null) { + return desc.get == null && desc.set == null + ? desc.value + : defaultValue; + } + } else { + return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined; + } +} + +function notEnumerableProp(obj, name, value) { + if (isPrimitive(obj)) return obj; + var descriptor = { + value: value, + configurable: true, + enumerable: false, + writable: true + }; + es5.defineProperty(obj, name, descriptor); + return obj; +} + +function thrower(r) { + throw r; +} + +var inheritedDataKeys = (function() { + var excludedPrototypes = [ + Array.prototype, + Object.prototype, + Function.prototype + ]; + + var isExcludedProto = function(val) { + for (var i = 0; i < excludedPrototypes.length; ++i) { + if (excludedPrototypes[i] === val) { + return true; + } + } + return false; + }; + + if (es5.isES5) { + var getKeys = Object.getOwnPropertyNames; + return function(obj) { + var ret = []; + var visitedKeys = Object.create(null); + while (obj != null && !isExcludedProto(obj)) { + var keys; + try { + keys = getKeys(obj); + } catch (e) { + return ret; + } + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + if (visitedKeys[key]) continue; + visitedKeys[key] = true; + var desc = Object.getOwnPropertyDescriptor(obj, key); + if (desc != null && desc.get == null && desc.set == null) { + ret.push(key); + } + } + obj = es5.getPrototypeOf(obj); + } + return ret; + }; + } else { + var hasProp = {}.hasOwnProperty; + return function(obj) { + if (isExcludedProto(obj)) return []; + var ret = []; + + /*jshint forin:false */ + enumeration: for (var key in obj) { + if (hasProp.call(obj, key)) { + ret.push(key); + } else { + for (var i = 0; i < excludedPrototypes.length; ++i) { + if (hasProp.call(excludedPrototypes[i], key)) { + continue enumeration; + } + } + ret.push(key); + } + } + return ret; + }; + } + +})(); + +var thisAssignmentPattern = /this\s*\.\s*\S+\s*=/; +function isClass(fn) { + try { + if (typeof fn === "function") { + var keys = es5.names(fn.prototype); + + var hasMethods = es5.isES5 && keys.length > 1; + var hasMethodsOtherThanConstructor = keys.length > 0 && + !(keys.length === 1 && keys[0] === "constructor"); + var hasThisAssignmentAndStaticMethods = + thisAssignmentPattern.test(fn + "") && es5.names(fn).length > 0; + + if (hasMethods || hasMethodsOtherThanConstructor || + hasThisAssignmentAndStaticMethods) { + return true; + } + } + return false; + } catch (e) { + return false; + } +} + +function toFastProperties(obj) { + /*jshint -W027,-W055,-W031*/ + function FakeConstructor() {} + FakeConstructor.prototype = obj; + var l = 8; + while (l--) new FakeConstructor(); + ASSERT("%HasFastProperties", true, obj); + return obj; + // Prevent the function from being optimized through dead code elimination + // or further optimizations. This code is never reached but even using eval + // in unreachable code causes v8 to not optimize functions. + eval(obj); +} + +var rident = /^[a-z$_][a-z$_0-9]*$/i; +function isIdentifier(str) { + return rident.test(str); +} + +function filledRange(count, prefix, suffix) { + var ret = new Array(count); + for(var i = 0; i < count; ++i) { + ret[i] = prefix + i + suffix; + } + return ret; +} + +function safeToString(obj) { + try { + return obj + ""; + } catch (e) { + return "[no string representation]"; + } +} + +function isError(obj) { + return obj !== null && + typeof obj === "object" && + typeof obj.message === "string" && + typeof obj.name === "string"; +} + +function markAsOriginatingFromRejection(e) { + try { + notEnumerableProp(e, OPERATIONAL_ERROR_KEY, true); + } + catch(ignore) {} +} + +function originatesFromRejection(e) { + if (e == null) return false; + return ((e instanceof Error[BLUEBIRD_ERRORS].OperationalError) || + e[OPERATIONAL_ERROR_KEY] === true); +} + +function canAttachTrace(obj) { + return isError(obj) && es5.propertyIsWritable(obj, "stack"); +} + +var ensureErrorObject = (function() { + if (!("stack" in new Error())) { + return function(value) { + if (canAttachTrace(value)) return value; + try {throw new Error(safeToString(value));} + catch(err) {return err;} + }; + } else { + return function(value) { + if (canAttachTrace(value)) return value; + return new Error(safeToString(value)); + }; + } +})(); + +function classString(obj) { + return {}.toString.call(obj); +} + +function copyDescriptors(from, to, filter) { + var keys = es5.names(from); + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + if (filter(key)) { + try { + es5.defineProperty(to, key, es5.getDescriptor(from, key)); + } catch (ignore) {} + } + } +} + +var asArray = function(v) { + if (es5.isArray(v)) { + return v; + } + return null; +}; + +if (typeof Symbol !== "undefined" && Symbol.iterator) { + var ArrayFrom = typeof Array.from === "function" ? function(v) { + return Array.from(v); + } : function(v) { + var ret = []; + var it = v[Symbol.iterator](); + var itResult; + while (!((itResult = it.next()).done)) { + ret.push(itResult.value); + } + return ret; + }; + + asArray = function(v) { + if (es5.isArray(v)) { + return v; + } else if (v != null && typeof v[Symbol.iterator] === "function") { + return ArrayFrom(v); + } + return null; + }; +} + +var isNode = typeof process !== "undefined" && + classString(process).toLowerCase() === "[object process]"; + +function env(key, def) { + return isNode ? process.env[key] : def; +} + +function getNativePromise() { + if (typeof Promise === "function") { + try { + var promise = new Promise(function(){}); + if ({}.toString.call(promise) === "[object Promise]") { + return Promise; + } + } catch (e) {} + } +} + +var ret = { + isClass: isClass, + isIdentifier: isIdentifier, + inheritedDataKeys: inheritedDataKeys, + getDataPropertyOrDefault: getDataPropertyOrDefault, + thrower: thrower, + isArray: es5.isArray, + asArray: asArray, + notEnumerableProp: notEnumerableProp, + isPrimitive: isPrimitive, + isObject: isObject, + isError: isError, + canEvaluate: canEvaluate, + errorObj: errorObj, + tryCatch: tryCatch, + inherits: inherits, + withAppended: withAppended, + maybeWrapAsError: maybeWrapAsError, + toFastProperties: toFastProperties, + filledRange: filledRange, + toString: safeToString, + canAttachTrace: canAttachTrace, + ensureErrorObject: ensureErrorObject, + originatesFromRejection: originatesFromRejection, + markAsOriginatingFromRejection: markAsOriginatingFromRejection, + classString: classString, + copyDescriptors: copyDescriptors, + hasDevTools: typeof chrome !== "undefined" && chrome && + typeof chrome.loadTimes === "function", + isNode: isNode, + env: env, + global: globalObject, + getNativePromise: getNativePromise +}; +ret.isRecentNode = ret.isNode && (function() { + var version = process.versions.node.split(".").map(Number); + return (version[0] === 0 && version[1] > 10) || (version[0] > 0); +})(); + +if (ret.isNode) ret.toFastProperties(process); + +try {throw new Error(); } catch (e) {ret.lastLineError = e;} +module.exports = ret; diff --git a/platforms/android/assets/www/libs/bluebird/tests b/platforms/android/assets/www/libs/bluebird/tests new file mode 100755 index 0000000..083e2bc --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/tests @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +node tools/test.js "$@" diff --git a/platforms/android/assets/www/libs/bluebird/tools/README.md b/platforms/android/assets/www/libs/bluebird/tools/README.md new file mode 100644 index 0000000..996df74 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/tools/README.md @@ -0,0 +1,19 @@ +##Tools + +Tools that can be run from command line: + +###test.js + +For running tests. See [Testing](../#testing). + +###build.js + +For building the library. See [Custom builds](../#custom-builds). + +###jshintrc_generator.js + +Generates a .jshintrc file in the project root. + +Example: + + node tools/jshintrc_generator diff --git a/platforms/android/assets/www/libs/bluebird/tools/ast_passes.js b/platforms/android/assets/www/libs/bluebird/tools/ast_passes.js new file mode 100644 index 0000000..57a7d40 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/tools/ast_passes.js @@ -0,0 +1,708 @@ +//All kinds of conversion passes over the source code +var jsp = require("acorn"); +var walk = require("acorn/util/walk.js"); +var rnonIdentMember = /[.\-_$a-zA-Z0-9]/g; +var global = new Function("return this")(); + +function equals( a, b ) { + if( a.type === b.type ) { + if( a.type === "MemberExpression" ) { + return equals( a.object, b.object ) && + equals( a.property, b.property ); + } + else if( a.type === "Identifier" ) { + return a.name === b.name; + } + else if( a.type === "ThisExpression" ) { + return true; + } + else { + console.log("equals", a, b); + unhandled(); + } + } + return false; +} + +function getReceiver( expr ) { + if( expr.type === "MemberExpression" ) { + return expr.object; + } + return null; +} + +function nodeToString( expr ) { + if( expr == null || typeof expr !== "object" ) { + if( expr === void 0 ) { + return "void 0"; + } + else if( typeof expr === "string" ) { + return '"' + safeToEmbedString(expr) + '"'; + } + return ("" + expr); + } + if( expr.type === "Identifier" ) { + return expr.name; + } + else if( expr.type === "MemberExpression" ) { + if( expr.computed ) + return nodeToString( expr.object ) + "[" + nodeToString( expr.property ) + "]"; + else + return nodeToString( expr.object ) + "." + nodeToString( expr.property ); + } + else if( expr.type === "UnaryExpression" ) { + if( expr.operator === "~" || + expr.operator === "-" || + expr.operator === "+" || + expr.operator === "-" ) { + return expr.operator + nodeToString( expr.argument ); + } + return "(" + expr.operator + " " + nodeToString( expr.argument ) + ")"; + } + else if( expr.type === "Literal" ) { + return expr.raw; + } + else if( expr.type === "BinaryExpression" || expr.type === "LogicalExpression" ) { + return "("+nodeToString(expr.left) + " " + + expr.operator + " " + + nodeToString(expr.right) + ")"; + } + else if( expr.type === "ThisExpression" ) { + return "this"; + } + else if( expr.type === "ObjectExpression") { + var props = expr.properties; + var ret = []; + for( var i = 0, len = props.length; i < len; ++i ) { + var prop = props[i]; + ret.push( nodeToString(prop.key) + ": " + nodeToString(prop.value)); + } + return "({"+ret.join(",\n")+"})"; + } + else if( expr.type === "NewExpression" ) { + return "new " + nodeToString(expr.callee) + "(" + nodeToString(expr.arguments) +")"; + } + //assuming it is arguments + else if( Array.isArray( expr ) ) { + var tmp = []; + for( var i = 0, len = expr.length; i < len; ++i ) { + tmp.push( nodeToString(expr[i]) ); + } + return tmp.join(", "); + } + else if( expr.type === "FunctionExpression" ) { + var params = []; + for( var i = 0, len = expr.params.length; i < len; ++i ) { + params.push( nodeToString(expr.params[i]) ); + } + } + else if( expr.type === "BlockStatement" ) { + var tmp = []; + for( var i = 0, len = expr.body.length; i < len; ++i ) { + tmp.push( nodeToString(expr.body[i]) ); + } + return tmp.join(";\n"); + } + else if( expr.type === "CallExpression" ) { + var args = []; + for( var i = 0, len = expr.arguments.length; i < len; ++i ) { + args.push( nodeToString(expr.arguments[i]) ); + } + return nodeToString( expr.callee ) + "("+args.join(",")+")"; + } + else { + console.log( "nodeToString", expr ); + unhandled() + } +} + +function DynamicCall( receiver, fnDereference, arg, start, end ) { + this.receiver = receiver; + this.fnDereference = fnDereference; + this.arg = arg; + this.start = start; + this.end = end; +} + +DynamicCall.prototype.toString = function() { + return nodeToString(this.fnDereference) + ".call(" + + nodeToString(this.receiver) + ", " + + nodeToString(this.arg) + + ")"; +}; + +function DirectCall( receiver, fnName, arg, start, end ) { + this.receiver = receiver; + this.fnName = fnName; + this.arg = arg; + this.start = start; + this.end = end; +} +DirectCall.prototype.toString = function() { + return nodeToString(this.receiver) + "." + nodeToString(this.fnName) + + "(" + nodeToString(this.arg) + ")" +}; + + +function ConstantReplacement( value, start, end ) { + this.value = value; + this.start = start; + this.end = end; +} + +ConstantReplacement.prototype.toString = function() { + return nodeToString(this.value); +}; + +function Empty(start, end) { + this.start = start; + this.end = end; +} +Empty.prototype.toString = function() { + return ""; +}; + +function Assertion( expr, exprStr, start, end ) { + this.expr = expr; + this.exprStr = exprStr; + this.start = start; + this.end = end; +} +Assertion.prototype.toString = function() { + return 'ASSERT('+nodeToString(this.expr)+',\n '+this.exprStr+')'; +}; + +function BitFieldRead(mask, start, end, fieldExpr) { + if (mask === 0) throw new Error("mask cannot be zero"); + this.mask = mask; + this.start = start; + this.end = end; + this.fieldExpr = fieldExpr; +} + +BitFieldRead.prototype.getShiftCount = function() { + var b = 1; + var shiftCount = 0; + while ((this.mask & b) === 0) { + b <<= 1; + shiftCount++; + } + return shiftCount; +}; + +BitFieldRead.prototype.toString = function() { + var fieldExpr = this.fieldExpr ? nodeToString(this.fieldExpr) : "bitField"; + var mask = this.mask; + var shiftCount = this.getShiftCount(); + return shiftCount === 0 + ? "(" + fieldExpr + " & " + mask + ")" + : "((" + fieldExpr + " & " + mask + ") >>> " + shiftCount + ")"; +}; + +function BitFieldCheck(value, inverted, start, end, fieldExpr) { + this.value = value; + this.inverted = inverted; + this.start = start; + this.end = end; + this.fieldExpr = fieldExpr; +} + +BitFieldCheck.prototype.toString = function() { + var fieldExpr = this.fieldExpr ? nodeToString(this.fieldExpr) : "bitField"; + var equality = this.inverted ? "===" : "!=="; + return "((" + fieldExpr + " & " + this.value + ") " + equality + " 0)"; +}; + +function InlineSlice(varExpr, collectionExpression, startExpression, endExpression, start, end, isBrowser) { + this.varExpr = varExpr; + this.collectionExpression = collectionExpression; + this.startExpression = startExpression; + this.endExpression = endExpression; + this.start = start; + this.end = end; + this.isBrowser = isBrowser; +} + +InlineSlice.prototype.hasSimpleStartExpression = +function InlineSlice$hasSimpleStartExpression() { + return this.startExpression.type === "Identifier" || + this.startExpression.type === "Literal"; +}; + +InlineSlice.prototype.hasSimpleEndExpression = +function InlineSlice$hasSimpleEndExpression() { + return this.endExpression.type === "Identifier" || + this.endExpression.type === "Literal"; +}; + +InlineSlice.prototype.hasSimpleCollection = function InlineSlice$hasSimpleCollection() { + return this.collectionExpression.type === "Identifier"; +}; + +InlineSlice.prototype.toString = function InlineSlice$toString() { + var init = this.hasSimpleCollection() + ? "" + : "var $_collection = " + nodeToString(this.collectionExpression) + ";"; + + var collectionExpression = this.hasSimpleCollection() + ? nodeToString(this.collectionExpression) + : "$_collection"; + + + init += "var $_len = " + collectionExpression + ".length;"; + + var varExpr = nodeToString(this.varExpr); + + //No offset arguments at all + if( this.startExpression === firstElement ) { + if (this.isBrowser) { + return "var " + varExpr + " = [].slice.call("+collectionExpression+");"; + } else { + return init + "var " + varExpr + " = new Array($_len); " + + "for(var $_i = 0; $_i < $_len; ++$_i) {" + + varExpr + "[$_i] = " + collectionExpression + "[$_i];" + + "}"; + } + + } + else { + if( !this.hasSimpleStartExpression() ) { + init += "var $_start = " + nodeToString(this.startExpression) + ";"; + } + var startExpression = this.hasSimpleStartExpression() + ? nodeToString(this.startExpression) + : "$_start"; + + //Start offset argument given + if( this.endExpression === lastElement ) { + if (this.isBrowser) { + return "var " + varExpr + " = [].slice.call("+collectionExpression+", "+startExpression+");"; + } else { + return init + "var " + varExpr + " = new Array(Math.max($_len - " + + startExpression + ", 0)); " + + "for(var $_i = " + startExpression + "; $_i < $_len; ++$_i) {" + + varExpr + "[$_i - "+startExpression+"] = " + collectionExpression + "[$_i];" + + "}"; + } + } + //Start and end offset argument given + else { + + if( !this.hasSimpleEndExpression() ) { + init += "var $_end = " + nodeToString(this.endExpression) + ";"; + } + var endExpression = this.hasSimpleEndExpression() + ? nodeToString(this.endExpression) + : "$_end"; + + if (this.isBrowser) { + return "var " + varExpr + " = [].slice.call("+collectionExpression+", "+startExpression+", "+endExpression+");"; + } else { + return init + "var " + varExpr + " = new Array(Math.max(" + endExpression + " - " + + startExpression + ", 0)); " + + "for(var $_i = " + startExpression + "; $_i < " + endExpression + "; ++$_i) {" + + varExpr + "[$_i - "+startExpression+"] = " + collectionExpression + "[$_i];" + + "}"; + } + + } + + } +}; + +var opts = { + ecmaVersion: 5, + strictSemicolons: false, + allowTrailingCommas: true, + forbidReserved: false, + locations: false, + onComment: null, + ranges: false, + program: null, + sourceFile: null +}; + +var rlineterm = /[\r\n\u2028\u2029]/; +var rhorizontalws = /[ \t]/; + +var convertSrc = function( src, results ) { + if( results.length ) { + results.sort(function(a, b){ + var ret = a.start - b.start; + if( ret === 0 ) { + ret = a.end - b.end; + } + return ret; + }); + for( var i = 1; i < results.length; ++i ) { + var item = results[i]; + if( item.start === results[i-1].start && + item.end === results[i-1].end ) { + results.splice(i++, 1); + } + } + var ret = ""; + var start = 0; + for( var i = 0, len = results.length; i < len; ++i ) { + var item = results[i]; + ret += src.substring( start, item.start ); + ret += item.toString(); + start = item.end; + } + ret += src.substring( start ); + return ret; + } + return src; +}; + +var rescape = /[\r\n\u2028\u2029"]/g; + +var replacer = function( ch ) { + return "\\u" + (("0000") + + (ch.charCodeAt(0).toString(16))).slice(-4); +}; + +function safeToEmbedString( str ) { + return str.replace( rescape, replacer ); +} + +function parse( src, opts, fileName) { + if( !fileName ) { + fileName = opts; + opts = void 0; + } + try { + return jsp.parse(src, opts); + } + catch(e) { + e.message = e.message + " " + fileName; + e.scriptSrc = src; + throw e; + } +} + +var inlinedFunctions = Object.create(null); + +var lastElement = jsp.parse("___input.length").body[0].expression; +var firstElement = jsp.parse("0").body[0].expression; +inlinedFunctions.INLINE_SLICE = function( node, isBrowser ) { + var statement = node; + node = node.expression; + var args = node.arguments; + + if( !(2 <= args.length && args.length <= 4 ) ) { + throw new Error("INLINE_SLICE must have exactly 2, 3 or 4 arguments"); + } + + var varExpression = args[0]; + var collectionExpression = args[1]; + var startExpression = args.length < 3 + ? firstElement + : args[2]; + var endExpression = args.length < 4 + ? lastElement + : args[3]; + return new InlineSlice(varExpression, collectionExpression, + startExpression, endExpression, statement.start, statement.end, isBrowser); +}; +inlinedFunctions.BIT_FIELD_READ = function(node) { + var statement = node; + var args = node.expression.arguments; + if (args.length !== 1 && args.length !== 2) { + throw new Error("BIT_FIELD must have 1 or 2 arguments"); + } + var arg = args[0]; + if (arg.type !== "Identifier") { + throw new Error("BIT_FIELD argument must be an identifier"); + } + var name = arg.name; + var constant = constants[name]; + if (constant === undefined) { + throw new Error(name + " is not a constant"); + } + var value = constant.value; + return new BitFieldRead(value, statement.start, statement.end, args[1]); +}; +inlinedFunctions.BIT_FIELD_CHECK = function(node) { + var statement = node; + var args = node.expression.arguments; + if (args.length !== 1 && args.length !== 2) { + throw new Error("BIT_FIELD must have 1 or 2 arguments"); + } + var arg = args[0]; + if (arg.type !== "Identifier") { + throw new Error("BIT_FIELD argument must be an identifier"); + } + var name = arg.name; + var constant = constants[name]; + if (constant === undefined) { + throw new Error(name + " is not a constant"); + } + var value = constant.value; + var inverted = false; + if (name.slice(-4) === "_NEG") { + inverted = true; + } + return new BitFieldCheck(value, inverted, statement.start, statement.end, args[1]); +}; +inlinedFunctions.USE = function(node) { + return new Empty(node.start, node.end); +}; + +var constants = {}; +var ignore = []; +Error.stackTraceLimit = 10000; +var astPasses = module.exports = { + + inlineExpansion: function( src, fileName, isBrowser ) { + var ast = parse(src, fileName); + var results = []; + var expr = []; + function doInline(node) { + if( node.expression.type !== 'CallExpression' ) { + return; + } + + var name = node.expression.callee.name; + + if(typeof inlinedFunctions[ name ] === "function" && + expr.indexOf(node.expression) === -1) { + expr.push(node.expression); + try { + results.push( inlinedFunctions[ name ]( node, isBrowser ) ); + } + catch(e) { + e.fileName = fileName; + throw e; + } + + } + } + walk.simple(ast, { + ExpressionStatement: doInline, + CallExpression: function(node) { + node.expression = node; + doInline(node); + } + }); + var ret = convertSrc( src, results ); + return ret; + }, + + //Parse constants in from constants.js + readConstants: function( src, fileName ) { + var ast = parse(src, fileName); + walk.simple(ast, { + ExpressionStatement: function( node ) { + if( node.expression.type !== 'CallExpression' ) { + return; + } + + var start = node.start; + var end = node.end; + node = node.expression; + var callee = node.callee; + if( callee.name === "CONSTANT" && + callee.type === "Identifier" ) { + + if( node.arguments.length !== 2 ) { + throw new Error( "Exactly 2 arguments must be passed to CONSTANT\n" + + src.substring(start, end) + ); + } + + if( node.arguments[0].type !== "Identifier" ) { + throw new Error( "Can only define identifier as a constant\n" + + src.substring(start, end) + ); + } + + var args = node.arguments; + + var name = args[0]; + var nameStr = name.name; + var expr = args[1]; + + var e = eval; + constants[nameStr] = { + identifier: name, + value: e(nodeToString(expr)) + }; + walk.simple( expr, { + Identifier: function( node ) { + ignore.push(node); + } + }); + global[nameStr] = constants[nameStr].value; + } + } + }); + }, + + //Expand constants in normal source files + expandConstants: function( src, fileName ) { + var results = []; + var identifiers = []; + var ast = parse(src, fileName); + walk.simple(ast, { + Identifier: function( node ) { + identifiers.push( node ); + } + }); + + for( var i = 0, len = identifiers.length; i < len; ++i ) { + var id = identifiers[i]; + if( ignore.indexOf(id) > -1 ) { + continue; + } + var constant = constants[id.name]; + if( constant === void 0 ) { + continue; + } + if( constant.identifier === id ) { + continue; + } + + results.push( new ConstantReplacement( constant.value, id.start, id.end ) ); + + } + return convertSrc( src, results ); + }, + + removeComments: function( src, fileName ) { + var results = []; + var rnoremove = /^[*\s\/]*(?:@preserve|jshint|global)/; + opts.onComment = function( block, text, start, end ) { + if( rnoremove.test(text) ) { + return; + } + var e = end + 1; + var s = start - 1; + while(rhorizontalws.test(src.charAt(s--))); + while(rlineterm.test(src.charAt(e++))); + results.push( new Empty( s + 2, e - 1 ) ); + }; + var ast = parse(src, opts, fileName); + return convertSrc( src, results ); + }, + + expandAsserts: function( src, fileName ) { + var ast = parse( src, fileName ); + var results = []; + walk.simple(ast, { + CallExpression: function( node ) { + + var start = node.start; + var end = node.end; + var callee = node.callee; + + if( callee.type === "Identifier" && + callee.name === "ASSERT" ) { + if( node.arguments.length !== 1 ) { + results.push({ + start: start, + end: end, + toString: function() { + return src.substring(start, end); + } + }); + return; + } + + var expr = node.arguments[0]; + var str = src.substring(expr.start, expr.end); + str = '"' + safeToEmbedString(str) + '"' + var assertion = new Assertion( expr, str, start, end ); + + results.push( assertion ); + } + } + }); + return convertSrc( src, results ); + }, + + removeAsserts: function( src, fileName ) { + var ast = parse( src, fileName ); + var results = []; + walk.simple(ast, { + ExpressionStatement: function( node ) { + if( node.expression.type !== 'CallExpression' ) { + return; + } + var start = node.start; + var end = node.end; + node = node.expression; + var callee = node.callee; + + if( callee.type === "Identifier" && + callee.name === "ASSERT" ) { + var e = end + 1; + var s = start - 1; + + while(rhorizontalws.test(src.charAt(s--))); + while(rlineterm.test(src.charAt(e++))); + results.push( new Empty( s + 2, e - 1) ); + } + }, + VariableDeclaration: function(node) { + var start = node.start; + var end = node.end; + if (node.kind === 'var' && node.declarations.length === 1) { + var decl = node.declarations[0]; + if (decl.id.type === "Identifier" && + decl.id.name === "ASSERT") { + var e = end + 1; + var s = start - 1; + while(rhorizontalws.test(src.charAt(s--))); + while(rlineterm.test(src.charAt(e++))); + results.push( new Empty( s + 2, e - 1) ); + } + } + } + }); + return convertSrc( src, results ); + }, + + asyncConvert: function( src, objName, fnProp, fileName ) { + var ast = parse( src, fileName ); + + var results = []; + walk.simple(ast, { + CallExpression: function( node ) { + var start = node.start; + var end = node.end; + if( node.callee.type === "MemberExpression" && + node.callee.object.name === objName && + node.callee.property.name === fnProp && + node.arguments.length === 3 + ) { + + var args = node.arguments; + var fnDereference = args[0]; + var dynamicReceiver = args[1]; + var arg = args[2]; + + var receiver = getReceiver(fnDereference); + + if( receiver == null || !equals(receiver, dynamicReceiver) ) { + //Have to use fnDereference.call(dynamicReceiver, arg); + results.push( + new DynamicCall( dynamicReceiver, fnDereference, arg, start, end ) + ); + } + else { + var fnName = fnDereference.property; + results.push( + new DirectCall( receiver, fnName, arg, start, end ) + ); + //Can use receiver.fnName( arg ); + + } + + + } + } + }); + return convertSrc( src, results ); + } +}; diff --git a/platforms/android/assets/www/libs/bluebird/tools/browser_test_generator.js b/platforms/android/assets/www/libs/bluebird/tools/browser_test_generator.js new file mode 100644 index 0000000..d126bee --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/tools/browser_test_generator.js @@ -0,0 +1,51 @@ +var Promise = require("bluebird"); +var path = require("path"); +var readFile = Promise.promisify(require("fs").readFile); +var writeFile = Promise.promisify(require("fs").writeFile); +var stringToStream = require("./utils.js").stringToStream; +var baseDir = path.join(__dirname, "..", "test", "browser"); + +// Sinon pulls the entire NPM as dependencies (including crypto code) for +// some reason so +// the browserify bundle ends up taking megabyte and having high risk of +// IE-incompatible code +function dependsOnSinon(test) { + return /3\.2\.5\.|done|nodeify|2\.2\.6/.test(test.name); +}; + +module.exports = function(tests, options) { + var testRequires = tests.filter(function(test) { + return !dependsOnSinon(test) && test.name.indexOf("generator") === -1; + }).map(function(test) { + var code = "require('../mocha/" + test.name + "');"; + if (test.name.indexOf("2.3.3") >= 0) { + code = "if (haveGetters) " + code; + } + return code; + }).join("\n"); + + var promiseExport = options.cover + ? readFile(path.join(baseDir, "promise_instrumented.js"), "utf8") + : readFile(path.join(baseDir, "promise_debug.js"), "utf8"); + + var main = readFile(path.join(baseDir, "main.js"), "utf8") + + return Promise.join(promiseExport, main, function(promiseExport, main) { + var browserify = require("browserify"); + var contents = promiseExport + "\n" + main + "\n" + testRequires; + var b = browserify({ + basedir: baseDir, + entries: stringToStream(contents) + }); + return Promise.promisify(b.bundle, b)().then(function(src) { + return writeFile(path.join(baseDir, "bundle.js"), src); + }); + }).then(function() { + if (options.executeBrowserTests) { + return require("./browser_test_runner.js")(options); + } + }).catch(function(e) { + console.error(e.stack || e.message); + process.exit(2); + }); +}; diff --git a/platforms/android/assets/www/libs/bluebird/tools/browser_test_runner.js b/platforms/android/assets/www/libs/bluebird/tools/browser_test_runner.js new file mode 100644 index 0000000..af751cc --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/tools/browser_test_runner.js @@ -0,0 +1,97 @@ +var path = require("path"); +var build = require("./build.js"); +var Promise = require("bluebird"); +var cp = Promise.promisifyAll(require("child_process")); +var fs = Promise.promisifyAll(require("fs")); +var baseDir = path.join(__dirname, "..", "test", "browser"); +var browsers = [ + ["Windows XP", "internet explorer", "7"], + ["Windows XP", "internet explorer", "8"], + ["Windows 7", "internet explorer", "9"], + ["Windows 7", "internet explorer", "10"], + ["Windows 8.1", "internet explorer", "11"], + ["Windows 7", "firefox", "3.5"], + ["Windows 7", "firefox", "4"], + ["Windows 7", "firefox", "25"], + ["Windows 7", "firefox", "33"], + ["Windows 7", "chrome", "beta"], + ["Windows 7", "safari", "5"], + ["OS X 10.9", "iphone", "8.1"], + ["OS X 10.8", "safari", "6"], + ["OS X 10.9", "safari", "7"] +]; + +var saucelabsOptions = { + urls: ["http://127.0.0.1:9999/index.html"], + tunnelTimeout: 30, + build: process.env.TRAVIS_JOB_ID, + maxPollRetries: 3, + throttled: 3, + browsers: browsers, + testname: "mocha tests", + tags: ["master"] +}; + +module.exports = function(options) { + var Promise = require("bluebird"); + var ret = Promise.resolve(); + function createServer() { + var http = require("http"); + var serve = require("serve-static")(baseDir, {'index': ['index.html']}); + var bodyParser = require("body-parser").urlencoded({ + limit: "100mb", + extended: false + }); + var server = http.createServer(function(req, res) { + serve(req, res, function() { + if (options.cover && + req.url.indexOf("coverdata") >= 0 && + req.method.toLowerCase() === "post") { + bodyParser(req, res, function() { + try { + var json = JSON.parse(req.body.json); + } catch (e) { + res.writeHead(404, {'Content-Type': 'text/plain'}); + res.end('404\n'); + return; + } + var browser = (req.body.browser + "").replace(/[^a-zA-Z0-9]/g, ""); + var fileName = path.join(build.dirs.coverage, "coverage-" + browser + ".json"); + fs.writeFileAsync(fileName, JSON.stringify(json), "utf8").then(function() { + res.writeHead(200, {'Content-Type': 'text/plain'}); + res.end('Success\n'); + }); + }); + } else { + res.writeHead(404, {'Content-Type': 'text/plain'}); + res.end('404\n'); + } + }); + }); + return Promise.promisify(server.listen, server)(options.port) + } + + if (options.saucelabs) { + var saucelabsRunner = require("./saucelabs_runner.js"); + ret = createServer().then(function() { + return saucelabsRunner(saucelabsOptions); + }).then(function() { + process.exit(0); + }); + } else if (options.nw) { + ret = cp.execAsync((options.nwPath || "nw") + " .", { + maxBuffer: 2 * 1024 * 1024, + cwd: path.join(process.cwd(), "test/browser") + }); + } else { + var open = require("open"); + ret = createServer().then(function() { + var url = "http://localhost:" + options.port; + console.log("Test can be run at " + url); + if (options.openBrowser && !options.cover) { + return Promise.promisify(open)(url); + } + }); + } + return ret; +}; diff --git a/platforms/android/assets/www/libs/bluebird/tools/build.js b/platforms/android/assets/www/libs/bluebird/tools/build.js new file mode 100644 index 0000000..3d43d27 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/tools/build.js @@ -0,0 +1,337 @@ +var Promise = require("bluebird"); +var path = require("path"); +var jobRunner = require("./job-runner/job-runner.js"); +Promise.longStackTraces(); +var utils = require("./utils.js"); +var glob = Promise.promisify(require("glob")); +var fs = Promise.promisifyAll(require("fs")); +var mkdirp = Promise.promisify(require("mkdirp")); +var rimraf = Promise.promisify(require("rimraf")); + +jobRunner.init(path.join(__dirname, ".."), function() { + var fs = Promise.promisifyAll(require("fs")); + var utils = require("./tools/utils.js"); + var path = require("path"); + var astPasses = require("./tools/ast_passes.js"); + var Mocha = require("mocha"); + astPasses.readConstants( + fs.readFileSync("./src/constants.js", "utf8"), + "constants.js" + ); + function applyOptionalRequires(code, depsRequireCode) { + return code.replace( /};([^}]*)$/, depsRequireCode + "\n};$1"); + } +}); + +var optionalModuleRequireMap = { + "race.js": true, + "call_get.js": true, + "generators.js": true, + "map.js": true, + "nodeify.js": true, + "promisify.js": true, + "props.js": true, + "reduce.js": true, + "settle.js": true, + "some.js": true, + "using.js": true, + "timers.js": true, + "filter.js": ["map.js"], + "any.js": ["some.js"], + "each.js": ["reduce.js"] +}; + +var lastLineCode = " \n\ + util.toFastProperties(Promise); \n\ + util.toFastProperties(Promise.prototype); \n\ + function fillTypes(value) { \n\ + var p = new Promise(INTERNAL); \n\ + p._fulfillmentHandler0 = value; \n\ + p._rejectionHandler0 = value; \n\ + p._promise0 = value; \n\ + p._receiver0 = value; \n\ + } \n\ + // Complete slack tracking, opt out of field-type tracking and \n\ + // stabilize map \n\ + fillTypes({a: 1}); \n\ + fillTypes({b: 2}); \n\ + fillTypes({c: 3}); \n\ + fillTypes(1); \n\ + fillTypes(function(){}); \n\ + fillTypes(undefined); \n\ + fillTypes(false); \n\ + fillTypes(new Promise(INTERNAL)); \n\ + debug.setBounds(Async.firstLineError, util.lastLineError); \n\ + return Promise; \n\ +"; + +function getOptionalRequireCode(srcs) { + return srcs.sort(function(a, b) { + var aHasDeps = Array.isArray(optionalModuleRequireMap[a.sourceFileName]); + var bHasDeps = Array.isArray(optionalModuleRequireMap[b.sourceFileName]); + return aHasDeps - bHasDeps; + }).reduce(function(ret, cur, i) { + if(optionalModuleRequireMap[cur.sourceFileName]) { + ret += "require('./"+cur.sourceFileName+"')("+ cur.deps.join(", ") +");\n"; + } + return ret; + }, "") + lastLineCode; +} + +function getBrowserBuildHeader(sources, npmPackage) { + var header = "/**\n * bluebird build version " + npmPackage.version + "\n"; + var enabledFeatures = ["core"]; + var disabledFeatures = []; + featureLoop: for (var key in optionalModuleRequireMap) { + for (var i = 0, len = sources.length; i < len; ++i) { + var source = sources[i]; + if(source.sourceFileName === key) { + enabledFeatures.push(key.replace( ".js", "")); + continue featureLoop; + } + } + disabledFeatures.push(key.replace(".js", "")); + } + + header += (" * Features enabled: " + enabledFeatures.join(", ") + "\n"); + + if (disabledFeatures.length) { + header += " * Features disabled: " + disabledFeatures.join(", ") + "\n"; + } + header += "*/\n"; + return header; +} + +function getSourcePaths(features) { + return glob("./src/*.js").map(function(v) { + return path.basename(v); + }).then(function(results) { + if (features) features = features.toLowerCase().split(/\s+/g); + return results.filter(function(fileName) { + if (features && optionalModuleRequireMap[fileName] !== undefined) { + for (var i = 0; i < features.length; ++i) { + if (fileName.indexOf(features[i]) >= 0) { + return true; + } + } + return false; + } + return fileName !== "constants.js"; + }); + }); +} + +function ensureDirectory(dir, isUsed, clean) { + return (clean ? rimraf(dir) : Promise.resolve()).then(function() { + if (!isUsed) return dir; + return mkdirp(dir).thenReturn(dir); + }); +} + +function buildRelease(sources, depsRequireCode, dir) { + return dir.then(function(dir) { + return Promise.map(sources, function(source) { + return jobRunner.run(function() { + var code = source.source; + var sourceFileName = source.sourceFileName; + code = astPasses.removeAsserts(code, sourceFileName); + code = astPasses.inlineExpansion(code, sourceFileName); + code = astPasses.expandConstants(code, sourceFileName); + code = code.replace( /__DEBUG__/g, "false" ); + code = code.replace( /__BROWSER__/g, "false" ); + if (sourceFileName === "promise.js") { + code = applyOptionalRequires(code, depsRequireCode); + } + return fs.writeFileAsync(path.join(root, sourceFileName), code); + }, { + context: { + depsRequireCode: depsRequireCode, + source: source, + root: dir + } + }); + }); + }); +} + +function buildDebug(sources, depsRequireCode, dir) { + return dir.then(function(dir) { + return Promise.map(sources, function(source) { + return jobRunner.run(function() { + var code = source.source; + var sourceFileName = source.sourceFileName; + code = astPasses.expandAsserts(code, sourceFileName); + code = astPasses.inlineExpansion(code, sourceFileName); + code = astPasses.expandConstants(code, sourceFileName); + code = code.replace( /__DEBUG__/g, "true" ); + code = code.replace( /__BROWSER__/g, "false" ); + if (sourceFileName === "promise.js") { + code = applyOptionalRequires(code, depsRequireCode); + } + return fs.writeFileAsync(path.join(root, sourceFileName), code); + }, { + context: { + depsRequireCode: depsRequireCode, + source: source, + root: dir + } + }); + }); + }); +} + +function buildBrowser(sources, dir, tmpDir, depsRequireCode, minify, npmPackage, license) { + return Promise.join(dir, tmpDir, npmPackage, license, function(dir, tmpDir, npmPackage, license) { + return Promise.map(sources, function(source) { + return jobRunner.run(function() { + var code = source.source; + var sourceFileName = source.sourceFileName; + code = astPasses.removeAsserts(code, sourceFileName); + code = astPasses.inlineExpansion(code, sourceFileName, true); + code = astPasses.expandConstants(code, sourceFileName); + code = code.replace( /__BROWSER__/g, "true" ); + if (sourceFileName === "promise.js") { + code = applyOptionalRequires(code, depsRequireCode); + } + return fs.writeFileAsync(path.join(root, sourceFileName), code); + }, { + context: { + depsRequireCode: depsRequireCode, + source: source, + root: tmpDir + } + }); + }).then(function() { + var header = getBrowserBuildHeader(sources, npmPackage); + return jobRunner.run(function() { + var UglifyJS = require("uglify-js"); + var browserify = require("browserify"); + var dest = path.join(root, "bluebird.js"); + var minDest = path.join(root, "bluebird.min.js"); + var b = browserify({ + entries: entries, + detectGlobals: false, + standalone: "Promise" + }); + return Promise.promisify(b.bundle, b)().then(function(src) { + var alias = "\ + ;if (typeof window !== 'undefined' && window !== null) { \ + window.P = window.Promise; \ + } else if (typeof self !== 'undefined' && self !== null) { \ + self.P = self.Promise; \ + }"; + src = src + alias; + src = src.replace(/\brequire\b/g, "_dereq_"); + var minWrite, write; + if (minify) { + var minSrc = src.replace( /__DEBUG__/g, "false" ); + minSrc = UglifyJS.minify(minSrc, { + comments: false, + compress: true, + fromString: true + }).code; + minSrc = license + header + minSrc; + minWrite = fs.writeFileAsync(minDest, minSrc); + } + src = src.replace( /__DEBUG__/g, "true" ); + src = license + header + src; + write = fs.writeFileAsync(dest, src); + + return Promise.all([write, minWrite]); + }) + }, { + context: { + header: header, + root: dir, + entries: path.join(tmpDir, "bluebird.js"), + license: license, + minify: minify + } + }) + }); + }); +} + +var root = process.cwd(); +// Since rm -rf is called, better be sure... +if (path.basename(root).toLowerCase() !== "bluebird") { + throw new Error("cwd must be se to bluebird project root. Cwd is currently\n\n" + + " " + process.cwd() + "\n"); +} +var dirs = { + release: path.join(root, "js", "release"), + debug: path.join(root, "js", "debug"), + browser: path.join(root, "js", "browser"), + browserTmp: path.join(root, "js", "tmp"), + instrumented: path.join(root, "js", "instrumented"), + coverage: path.join(root, "coverage") +}; + +function build(options) { + options = Object(options); + var clean = (typeof options.clean !== "boolean" ? true : options.clean); + var npmPackage = fs.readFileAsync("./package.json").then(JSON.parse); + var sourceFileNames = getSourcePaths(options.features); + var license = utils.getLicense(); + var releaseDir = ensureDirectory(dirs.release, options.release, clean); + var debugDir = ensureDirectory(dirs.debug, options.debug, clean); + var browserDir = ensureDirectory(dirs.browser, options.browser, clean); + var browserTmpDir = ensureDirectory(dirs.browserTmp, options.browser, clean); + return license.then(function(license) { + return sourceFileNames.map(function(sourceFileName) { + return jobRunner.run(function() { + var sourcePath = path.join("./src", sourceFileName); + var source = fs.readFileAsync(sourcePath, "utf8"); + return source.then(function(source) { + utils.checkAscii(sourceFileName, source); + var deps = null; + if (optionalModuleRequireMap[sourceFileName] !== undefined) { + deps = utils.parseDeps(source); + } + source = astPasses.removeComments(source, sourceFileName); + return { + sourceFileName: sourceFileName, + source: source, + deps: deps + }; + }); + }, { + context: { + sourceFileName: sourceFileName, + optionalModuleRequireMap: optionalModuleRequireMap, + license: license + } + }); + }); + }).then(function(results) { + var depsRequireCode = getOptionalRequireCode(results); + var release, debug, browser; + if (options.release) + release = buildRelease(results, depsRequireCode, releaseDir); + if (options.debug) + debug = buildDebug(results, depsRequireCode, debugDir); + if (options.browser) + browser = buildBrowser(results, browserDir, browserTmpDir, depsRequireCode, options.minify, npmPackage, license); + + return Promise.all([release, debug, browser]); + }); +} + +module.exports = build; +module.exports.ensureDirectory = ensureDirectory; +module.exports.dirs = dirs; + + +if (require.main === module) { + var argv = require("optimist").argv; + var browser = (typeof argv.browser !== "boolean" ? false : argv.browser) || !!argv.features; + var clean = (typeof argv.clean !== "boolean" ? true : argv.clean); + module.exports({ + minify: browser && (typeof argv.minify !== "boolean" ? true : argv.minify), + browser: browser, + debug: !!argv.debug, + release: !!argv.release, + features: argv.features || null, + clean: clean + }); +} diff --git a/platforms/android/assets/www/libs/bluebird/tools/job-runner/job-runner.js b/platforms/android/assets/www/libs/bluebird/tools/job-runner/job-runner.js new file mode 100644 index 0000000..5cdd278 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/tools/job-runner/job-runner.js @@ -0,0 +1,557 @@ +var Promise = require("bluebird"); +var spawn = require("child_process").spawn; +var assert = require("assert"); +var argv = require("optimist").argv; +var ARGS = [].concat( + process.execArgv, + __filename, + process.argv.slice(2) +); +function sanitizeCpCount(input) { + return Math.min(Math.max(1, (+input | 0)), 16); +} + +if (typeof argv["child-processes"] === "number") { + var CHILD_PROCESSES = sanitizeCpCount(argv["child-processes"]); +} else if (process.env.CHILD_PROCESSES) { + var CHILD_PROCESSES = sanitizeCpCount(process.env.CHILD_PROCESSES); +} else { + var CHILD_PROCESSES = 4; +} + + +var debugging = false; + +function debug() { + if (debugging) { + var msg = [].slice.call(arguments).join(" "); + console.log(msg); + } +} + +function ResultWithOutput(result, stdout, stderr) { + this.result = result; + this.stdout = stdout; + this.stderr = stderr; +} + +var jobRunner = (function() { + var taskId = 0; + var workerCount; + var workers = []; + var tasks = []; + var killed = true; + + function leastTotalRunningTime(a, b) { + return a.totalRunningTime() - b.totalRunningTime(); + } + + function each(fn) { + if (typeof fn === "string") { + var args = [].slice.call(arguments, 1); + return workers.forEach(function(worker) { + worker[fn].apply(worker, args); + }); + } + return workers.forEach(fn); + } + + function retLogger(result) { + if (result instanceof ResultWithOutput) { + process.stdout.write(result.stdout); + process.stderr.write(result.stderr); + } + return result; + } + + function throwLogger(result) { + if (result && (result.stderr || result.stdout)) { + process.stdout.write(result.stdout); + process.stderr.write(result.stderr); + } + throw result; + } + + function reinit() { + each("init"); + } + + function checkShutDown(secondCheck) { + if (tasks.length > 0) return; + var anyWorkerHasTasks = workers.some(function(w) { + return w.hasTasks(); + }); + if (anyWorkerHasTasks) return; + if (secondCheck) return ret.exit(); + setTimeout(function() { + checkShutDown(true); + }, 10); + } + + function schedule(task, queued) { + var worker = workers.filter(function(worker) { + return task.isolated ? + !worker.hasTasks() : !worker._runningIsolatedTask; + }).sort(leastTotalRunningTime)[0]; + + if (!worker) { + if (!queued) tasks.push(task); + return false; + } else { + assert(task.isolated ? !worker.hasTasks() : true); + debug("found free worker", worker._id, "for task", task.id); + worker.performTask(task); + return true; + } + } + + var ret = { + init: function(requirePath, initTaskFn) { + if (workers.length) return; + if (typeof requirePath !== "string") throw new TypeError(); + var count = CHILD_PROCESSES; + workerCount = count; + var id = 0; + for (var i = 0; i < count; ++i) { + workers.push(new Worker(id++, requirePath, initTaskFn)); + } + process.on("exit", ret.exit); + }, + + exit: function() { + if (killed) return; + killed = true; + each("kill"); + }, + + run: function(task, opts) { + if (!workerCount) throw new Error("task runner has not been initialized"); + if (typeof task !== "function") throw new TypeError("fn not function"); + if (killed) { + killed = false; + reinit(); + } + opts = opts || {}; + var context = opts.context || {}; + var log = opts.log === false ? false : true; + var estimate = typeof opts.estimate === "number" ? opts.estimate : null; + var progress = typeof opts.progress === "function" ? opts.progress : null; + var isolated = !!opts.isolated; + var resolve, reject; + var promise = new Promise(function() { + resolve = arguments[0]; + reject = arguments[1]; + }); + var task = { + isolated: isolated, + task: { + code: task + "", + context: context + }, + resolve: resolve, + reject: reject, + estimate: estimate, + id: taskId++, + log: log, + progress: progress + }; + schedule(task, false); + if (log) promise = promise.then(retLogger, throwLogger); + return promise; + }, + + setVerbose: function(v) { + debugging = !!v; + }, + + _workerIdleNotification: function() { + var _t = tasks; + if (_t.length === 0) { + return checkShutDown(); + } + while(_t.length > 0) { + var task = _t.shift(); + if (!schedule(task, true)) { + _t.unshift(task); + return; + } + } + } + }; + return ret; +})(); + +function Worker(id, requirePath, initTaskFn) { + this._initTaskFn = initTaskFn; + this._requirePath = requirePath; + this._id = id; + this._runningTaskCount = 0; + this._runningIsolatedTask = false; + this._performingIsolatedTask = false; + this._queuedIsolatedTask = null; + this._bufferingStdio = false; + this._runningTime = 0; + this._c = null; + this._stdout = ""; + this._stderr = ""; + this._tasks = {}; + this._onStdOut = bind(this._onStdOut, this); + this._onStdErr = bind(this._onStdErr, this); + this._onError = bind(this._onError, this); + this._onMessage = bind(this._onMessage, this); +} + +Worker.prototype.totalRunningTime = function() { + var ret = this._runningTime; + var ids = Object.keys(this._tasks); + var now = Date.now(); + for (var i = 0; i < ids.length; ++i) { + var task = this._tasks[ids[i]]; + ret += task.estimate === null ? (now - task.started + 1): task.estimate; + } + return ret; +}; + +Worker.prototype._onStdOut = function(data) { + data = data.toString(); + if (this._bufferingStdio) { + this._stdout += data; + } else { + process.stdout.write(data); + } +}; + +Worker.prototype._onStdErr = function(data) { + data = data.toString(); + + if (this._bufferingStdio) { + this._stderr += data; + } else { + process.stderr.write(data); + } +}; + +Worker.prototype._onError = function(e) { + process.stderr.write(e && e.stack && e.stack + "" || (e + "")); +}; + +Worker.prototype._onMessage = function(payload) { + var self = this; + setImmediate(function() { + self[payload.type].call(self, payload); + }); +}; + +Worker.prototype.removeListeners = function() { + var c = this._c; + c.stdout.removeListener("data", this._onStdOut); + c.stderr.removeListener("data", this._onStdErr); + c.removeListener("message", this._onMessage); + c.removeListener("error", this._onError); +}; + +Worker.prototype.debug = function(msg, task) { + debug("worker", this._id, msg, (task.isolated ? + "isolated" : ""), "task", task.id); +}; + +Worker.prototype.hasTasks = function() { + return this.runningTaskCount() > 0 || + this._queuedIsolatedTask || + this._runningIsolatedTask; +}; + +Worker.prototype.runningTaskCount = function() { + return this._runningTaskCount; +}; + +Worker.prototype.performTask = function(task) { + if (task !== this._queuedIsolatedTask) { + assert(!this._runningIsolatedTask); + if (task.isolated) { + this._runningIsolatedTask = true; + if (this.runningTaskCount() > 0) { + this.debug("queued", task); + this._queuedIsolatedTask = task; + return; + } else { + assert(this._queuedIsolatedTask === null); + this._performingIsolatedTask = true; + } + } + } else { + assert(this.runningTaskCount() === 0); + assert(this._runningIsolatedTask); + this._queuedIsolatedTask = null; + this._performingIsolatedTask = true; + } + this._runningTaskCount++; + assert(this._performingIsolatedTask ? this._runningTaskCount === 1 : true); + this._tasks[task.id] = task; + task.started = Date.now(); + this.debug("starts to perform", task); + this._c.send({ + type: "newTask", + id: task.id, + task: task.task, + isolated: task.isolated, + log: task.log, + progress: !!task.progress + }); + +}; + +function getFunctionSource(fn) { + return (fn + "") + .replace(/^\s*function\s*\(\s*\)\s*{/, "") + .replace(/}\s*$/, ""); +} + +Worker.prototype.init = function() { + assert(Array.isArray(ARGS)); + assert(!this._c); + var env = {}; + Object.getOwnPropertyNames(process.env).forEach(function(key) { + env[key] = process.env[key]; + }); + env.requirePath = this._requirePath; + if (typeof this._initTaskFn === "function") { + env.initialCode = getFunctionSource(this._initTaskFn); + } + + var c = spawn(process.execPath, ARGS, { + env: env, + stdio: ["pipe", "pipe", "pipe", "ipc"], + cwd: this._requirePath + }); + assert(typeof c.send === "function"); + this._c = c; + c.stdout.on("data", this._onStdOut); + c.stderr.on("data", this._onStdErr); + c.on("error", this._onError); + c.on("message", this._onMessage); +}; + +Worker.prototype.taskComplete = function(payload) { + var task = this._tasks[payload.id]; + this.debug("completed", task); + delete this._tasks[payload.id]; + this._runningTaskCount--; + var resolve, result; + if (payload.isError) { + resolve = task.reject; + var err = payload.error; + if (err.__isErrorInstance__) { + result = new Error(); + Object.keys(err).forEach(function(key) { + if (key === "__isErrorInstance__") return;; + result[key] = err[key]; + }); + result.name = err.name; + result.stack = err.stack; + result.message = err.message; + } else { + result = err; + } + } else { + resolve = task.resolve; + result = payload.result; + } + if (this._runningIsolatedTask) { + if (this._queuedIsolatedTask) { + if (this.runningTaskCount() === 0) { + this.performTask(this._queuedIsolatedTask); + } + } else { + if (payload.error) { + result.stdout = this._stdout; + result.stderr = this._stderr; + } else { + result = new ResultWithOutput(result, this._stdout, this._stderr); + } + this._stderr = this._stdout = ""; + this._performingIsolatedTask = false; + this._runningIsolatedTask = false; + this._bufferingStdio = false; + this.kill(); + this.init(); + } + } + resolve(result); + if (!this._runningIsolatedTask) { + jobRunner._workerIdleNotification(); + } +}; + +Worker.prototype.kill = function() { + if (this._c) { + this.removeListeners(); + this._c.kill("SIGKILL"); + this._c = null; + } +}; + +Worker.prototype.progress = function(payload) { + var id = payload.id; + var task = this._tasks[id]; + if (task && typeof task.progress === "function") { + task.progress.call(undefined, payload.value); + } +}; + +Worker.prototype.outputFlushed = function() { + this._bufferingStdio = true; + this._c.send({type: "outputFlushedAck"}); +}; + + + +function bind(fn, ctx) {return function() {return fn.apply(ctx, arguments); };} + + +function getTaskFunction(context, code) { + with (context) { + return eval( "(" + code + ")"); + } +} + +if (require.main === module) { + var __requirePath = process.env.requirePath; + var __oldreq = require; + var __path = require("path"); + require = function(p) { + if (p.charAt(0) === ".") { + p = __path.join(__requirePath, p); + } + return __oldreq(p); + }; + if (process.env.initialCode) { + eval(process.env.initialCode); + } + (function() { + function waitForOutput() { + return new Promise(function(resolve, reject) { + var flushCount = 0; + function onFlushed() { + flushCount++; + if (flushCount === 2) { + resolve(); + } + } + function checkStream(stream) { + if (stream.bufferSize === 0) { + onFlushed(); + } else { + stream.write("", "utf-8", onFlushed); + } + } + checkStream(process.stdout); + checkStream(process.stderr); + }); + } + + function waitForPreviousOutput(id) { + return waitForOutput().then(function() { + var ret = waitForFlushAck(id); + process.send({type: "outputFlushed", id: id}); + return ret; + }); + } + + var ackWaitResolve = null; + function waitForFlushAck(id) { + assert(ackWaitResolve === null); + return new Promise(function(resolve) { + ackWaitResolve = resolve; + }); + } + var noop = function() {}; + var noopWrite = function(_, a, b) { + if (typeof a === "function") return a(); + if (typeof b === "function") return b(); + }; + + function toSerializableError(err) { + if (err instanceof Error) { + var ret = Object.create(null); + Object.keys(err).forEach(function(key){ + ret[key] = err[key]; + }); + ret.name = err.name; + ret.stack = err.stack; + ret.message = err.message; + ret.__isErrorInstance__ = true; + return ret; + } else { + return err; + } + } + + var actions = { + newTask: function(payload) { + var task = payload.task; + var code = task.code; + var context = task.context; + var id = payload.id; + var promise = payload.isolated + ? waitForPreviousOutput(id) : Promise.resolve(); + + + return promise + .then(function() { + if (payload.log === false && payload.isolated) { + process.stdout.write = noopWrite; + } + var fn = getTaskFunction(context, code); + if (typeof fn !== "function") + throw new Error("fn must be function"); + return fn(payload.progress ? function(value) { + process.send({type: "progress", id: id, value: value}); + } : noop); + }) + .finally(function() { + if (payload.isolated) { + return waitForOutput(); + } + }) + .then(function(result) { + process.send({ + type: "taskComplete", + id: payload.id, + result: result + }); + }) + .catch(function(error) { + process.send({ + type: "taskComplete", + id: payload.id, + error: toSerializableError(error), + isError: true + }); + }); + }, + + outputFlushedAck: function() { + var resolve = ackWaitResolve; + ackWaitResolve = null; + resolve(); + }, + + addGlobals: function(payload) { + new Function(payload.code)(); + } + }; + + process.on("message", function(payload) { + setImmediate(function() { + actions[payload.type].call(actions, payload); + }); + }); + })(); +} else { + module.exports = jobRunner; + Object.defineProperty(module.exports, "CHILD_PROCESSES", { + value: CHILD_PROCESSES, + writable: false + }); +} diff --git a/platforms/android/assets/www/libs/bluebird/tools/jshint.js b/platforms/android/assets/www/libs/bluebird/tools/jshint.js new file mode 100644 index 0000000..e5af351 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/tools/jshint.js @@ -0,0 +1,20 @@ +var utils = require("./utils.js"); +var path = require("path"); + +module.exports = function() { + var wd = path.join(__dirname, ".."); + return utils.run("node_modules/jshint/bin/jshint", [ + "--verbose", + "--reporter", + "node_modules/jshint-stylish/stylish.js", + "src/" + ], wd); +}; +function log(value) { + process.stdout.write(value.stdout); + process.stderr.write(value.stderr); +} +if (require.main === module) { + module.exports().then(log, log); +} + diff --git a/platforms/android/assets/www/libs/bluebird/tools/jshintrc_generator.js b/platforms/android/assets/www/libs/bluebird/tools/jshintrc_generator.js new file mode 100644 index 0000000..2065fd7 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/tools/jshintrc_generator.js @@ -0,0 +1,52 @@ +var assert = require("assert"); +assert.equal(require.main, module); +// Since many globals are dynamic, this file is needed to generate jshintrc dynamically +var Promise = require("bluebird"); +var path = require("path"); +Promise.longStackTraces(); +var fs = Promise.promisifyAll(require("fs")); + +var constantsFile = path.join(__dirname, "..", "src", "constants.js"); +var globals = fs.readFileAsync(constantsFile, "utf8").then(function(contents) { + var rconstantname = /CONSTANT\(\s*([^,]+)/g; + var m; + var globals = { + Symbol: false, + Map: false, + JSON: false, + Error: true, + args: true, + chrome: true, + INLINE_SLICE: false, + BIT_FIELD_CHECK: false, + BIT_FIELD_READ: false, + USE: false, + global: true, + setImmediate: true, + Promise: true, + WebKitMutationObserver: true, + TypeError: true, + RangeError: true, + __DEBUG__: false, + __BROWSER__: false, + process: true, + self: true, + "console": false, + "require": false, + "module": false, + "define": false + }; + while((m = rconstantname.exec(contents))) { + globals[m[1]] = false; + } + return globals; +}); + +var jshintrcFile = path.join(__dirname, "..", ".jshintrc"); +var jshintrc = fs.readFileAsync(jshintrcFile, "utf8").then(JSON.parse); + +Promise.join(jshintrc, globals, function(jshintrc, globals) { + jshintrc.globals = globals; + var json = JSON.stringify(jshintrc, null, " "); + return fs.writeFileAsync(jshintrcFile, json); +}); diff --git a/platforms/android/assets/www/libs/bluebird/tools/mocha_runner.js b/platforms/android/assets/www/libs/bluebird/tools/mocha_runner.js new file mode 100644 index 0000000..cf898bf --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/tools/mocha_runner.js @@ -0,0 +1,143 @@ +module.exports = function mochaRun(progress) { + var currentTime = 0; + var timers = {}; + var currentId = 0; + + function checkTimers() { + var keys = Object.keys(timers); + for (var i = 0; i < keys.length; ++i) { + key = keys[i]; + var timer = timers[key]; + if (!timer) continue; + if (currentTime >= (timer.started + timer.time)) { + if (timer.interval) { + timer.started = currentTime; + } else { + delete timers[key]; + } + var fn = timer.fn; + if (timer.domain) timer.domain.enter(); + fn(); + if (timer.domain) timer.domain.exit(); + } + } + } + + function setInterval(fn, time) { + var id = currentId++; + time = (+time || 0) | 0; + if (time < 0) time = 0; + timers[id] = { + fn: fn, + time: time, + started: currentTime, + interval: true, + domain: process.domain + }; + return id; + } + + function setTimeout(fn, time) { + var id = currentId++; + time = (+time || 0) | 0; + if (time < 11) time = 11; + timers[id] = { + fn: fn, + time: time, + started: currentTime, + interval: false, + domain: process.domain + }; + return id; + } + + function clearTimeout(id) { + delete timers[id]; + } + + var clearInterval = clearTimeout; + if (fakeTimers) { + (function timerLoop() { + currentTime += 10; + try { + checkTimers(); + } finally { + setImmediate(timerLoop); + } + })(); + + global.oldSetTimeout = global.setTimeout; + global.oldClearTimeout = global.clearTimeout; + global.setTimeout = setTimeout; + global.clearTimeout = clearTimeout; + global.setInterval = setInterval; + global.clearInterval = clearInterval; + } + var failures = []; + delete Error.__BluebirdErrorTypes__; + global.adapter = cover + ? require("./js/instrumented/bluebird.js") + : require("./js/debug/bluebird.js"); + global.Promise = adapter; + Promise = adapter; + adapter.defer = adapter.pending = function() { + var ret = {}; + ret.promise = new Promise(function(resolve, reject) { + ret.resolve = ret.fulfill = resolve; + ret.reject = reject; + }); + return ret; + }; + Promise.config({cancellation: true}); + Promise.config({longStackTraces: false}); + Promise.config({longStackTraces: true}); + return Promise.each(testGroup, function(test, index, length) { + var mocha = new Mocha({ + reporter: "spec", + timeout: 50000, //200 caused non-deterministic test failures + //when a test uses timeouts just barely under 200 ms + slow: Infinity, + bail: true + }); + mocha.addFile(test.path); + return new Promise(function(resolve, reject) { + mocha.run(function(failures) { + if (failures === 0) { + test.failed = false; + progress(test); + } + resolve(); + }).on("fail", function(_, err) { + test.failed = true; + progress(test); + failures.push({ + name: test.name, + error: err + }); + }); + }); + }).then(function() { + function failAdvice(failedTestFileName) { + return "For additional details you can run it individually " + + " with the command `node tools/test --run=" + failedTestFileName + "`"; + } + if (failures.length > 0) { + var error; + if (singleTest) { + error = failures[0].error; + } + else { + message = "\u001b[31mSome tests failed: \u001b[m\n" + failures.forEach(function(failResult) { + message += " " + failResult.name + " " + failAdvice(failResult.name) + "\n"; + }); + error = new Error(message); + error.noStackPrint = true; + } + throw error; + } + if (cover) { + return __coverage__; + } + }); +}; diff --git a/platforms/android/assets/www/libs/bluebird/tools/saucelabs_runner.js b/platforms/android/assets/www/libs/bluebird/tools/saucelabs_runner.js new file mode 100644 index 0000000..c6da6b8 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/tools/saucelabs_runner.js @@ -0,0 +1,198 @@ +/* + +Ripped from grunt-saucelabs node module and made independent on grunt + +MIT license: + +Copyright (c) 2012 Parashuram + +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. +*/ + +module.exports = function(options) { + var Promise = require("bluebird"); + var SauceTunnel = require('grunt-saucelabs/node_modules/sauce-tunnel/index.js'); + var TestRunner = require('grunt-saucelabs/src/TestRunner.js'); + + function reportProgress(notification) { + switch (notification.type) { + case 'tunnelOpen': + console.log('=> Starting Tunnel to Sauce Labs'); + break; + case 'tunnelOpened': + console.log('Connected to Saucelabs'); + break; + case 'tunnelClose': + console.log('=> Stopping Tunnel to Sauce Labs'); + break; + case 'tunnelEvent': + console.log(notification.text); + break; + case 'jobStarted': + console.log('\n', notification.startedJobs, '/', notification.numberOfJobs, 'tests started'); + break; + case 'jobCompleted': + console.log('\nTested %s', notification.url); + console.log('Platform: %s', notification.platform); + + if (notification.tunnelId && unsupportedPort(notification.url)) { + console.log('Warning: This url might use a port that is not proxied by Sauce Connect.'); + } + + console.log('Passed: %s', notification.passed); + console.log('Url %s', notification.jobUrl); + break; + case 'testCompleted': + console.log('All tests completed with status %s', notification.passed); + break; + case 'retrying': + console.log('Timed out, retrying'); + break; + default: + console.error('Unexpected notification type'); + } + } + + function createTunnel(arg) { + var tunnel; + + reportProgress({ + type: 'tunnelOpen' + }); + + tunnel = new SauceTunnel(arg.username, arg.key, arg.identifier, true, ['-P', '0'].concat(arg.tunnelArgs)); + + ['write', 'writeln', 'error', 'ok', 'debug'].forEach(function (method) { + tunnel.on('log:' + method, function (text) { + reportProgress({ + type: 'tunnelEvent', + verbose: false, + method: method, + text: text + }); + }); + tunnel.on('verbose:' + method, function (text) { + reportProgress({ + type: 'tunnelEvent', + verbose: true, + method: method, + text: text + }); + }); + }); + + return tunnel; + } + + function runTask(arg, framework) { + var tunnel; + + return Promise + .try(function () { + var deferred; + + if (arg.tunneled) { + deferred = Promise.defer(); + + tunnel = createTunnel(arg); + tunnel.start(function (succeeded) { + if (!succeeded) { + deferred.reject('Could not create tunnel to Sauce Labs'); + } else { + reportProgress({ + type: 'tunnelOpened' + }); + + deferred.resolve(); + } + }); + return deferred.promise; + } + }) + .then(function () { + var testRunner = new TestRunner(arg, framework, reportProgress); + return testRunner.runTests(); + }) + .finally(function () { + var deferred; + + if (tunnel) { + deferred = Promise.defer(); + + reportProgress({ + type: 'tunnelClose' + }); + + tunnel.stop(function () { + deferred.resolve(); + }); + + return deferred.promise; + } + }); + } + + function unsupportedPort(url) { + // Not all ports are proxied by Sauce Connect. List of supported ports is + // available at https://saucelabs.com/docs/connect#localhost + var portRegExp = /:(\d+)\//; + var matches = portRegExp.exec(url); + var port = matches ? parseInt(matches[1], 10) : null; + var supportedPorts = [ + 80, 443, 888, 2000, 2001, 2020, 2109, 2222, 2310, 3000, 3001, 3030, + 3210, 3333, 4000, 4001, 4040, 4321, 4502, 4503, 4567, 5000, 5001, 5050, 5555, 5432, 6000, + 6001, 6060, 6666, 6543, 7000, 7070, 7774, 7777, 8000, 8001, 8003, 8031, 8080, 8081, 8765, + 8888, 9000, 9001, 9080, 9090, 9876, 9877, 9999, 49221, 55001 + ]; + + if (port) { + return supportedPorts.indexOf(port) === -1; + } + + return false; + } + + var defaults = { + username: process.env.SAUCE_USERNAME, + key: process.env.SAUCE_ACCESS_KEY, + tunneled: true, + identifier: Math.floor((new Date()).getTime() / 1000 - 1230768000).toString(), + pollInterval: 1000 * 2, + maxPollRetries: 0, + testname: '', + browsers: [{}], + tunnelArgs: [], + sauceConfig: {}, + maxRetries: 0 + }; + + var opts = {}; + options = options || {}; + Object.keys(defaults).forEach(function(key) { + opts[key] = defaults[key]; + }); + Object.keys(options).forEach(function(key) { + opts[key] = options[key]; + }); + + return runTask(opts, "mocha"); +}; diff --git a/platforms/android/assets/www/libs/bluebird/tools/test.js b/platforms/android/assets/www/libs/bluebird/tools/test.js new file mode 100644 index 0000000..6f6d452 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/tools/test.js @@ -0,0 +1,301 @@ +process.env.BLUEBIRD_WARNINGS = 0; +var assert = require("assert"); +assert.equal(require.main, module); +var Promise = require("bluebird"); +var build = require("./build.js"); +var utils = require("./utils.js"); +var tableLogger = utils.tableLogger; +var argv = require("optimist").argv; +var glob = Promise.promisify(require("glob")); +var path = require("path"); +var mkdirp = Promise.promisify(require("mkdirp")); +var rimraf = Promise.promisify(require("rimraf")); +var jobRunner = require("./job-runner/job-runner.js"); +var mochaRunner = require("./mocha_runner.js"); +var fs = Promise.promisifyAll(require("fs")); +var testUtils = require("../test/mocha/helpers/util"); +jobRunner.setVerbose(0); +// Random slowness after tests complete +function getTests(options) { + var g; + if (options.testName === "all") { + g = "./test/mocha/*.js"; + } else if (options.testName === "aplus") { + g = "./test/mocha/[0-9].[0-9].[0-9].js"; + } else if (options.testName.indexOf("*") >= 0) { + g = "./test/mocha/" + options.testName; + } else { + var testName = options.testName.replace(/^(\d)(\d)(\d)$/, "$1.$2.$3"); + g = "./test/mocha/" + testName + ".js"; + } + return glob(g).then(function(matches) { + return matches.filter(function(match) { + if (match.indexOf("generator") >= 0) { + return options.generators; + } + return true; + }) + }).tap(function(m) { + if (m.length === 0) { + throw new Error("No test file matches: '" + options.testName + "'"); + } + }).map(function(filePath, i) { + var name = path.basename(filePath); + return { + name: name, + path: filePath, + index: i, + nameMatcher: "\\b" + + name.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&") + + "\\b" + }; + }); +} + +function getColorForCoverage(coveragePct) { + var colorThresholds = { + 95: "brightgreen", + 85: "green", + 80: "yellowgreen", + 70: "yellow", + 60: "red" + }; + var values = Object.keys(colorThresholds).map(Number).sort(function(a, b) { + return b - a; + }); + for (var i = 0; i < values.length; ++i) { + if (coveragePct >= values[i]) return colorThresholds[values[i].toString()]; + } + return colorThresholds[values[values.length - 1].toString()]; +} + +function getCoverage() { + return utils.run("npm", ["run", "istanbul", "--", "report", "text-summary"]).then(function(result) { + var stdout = result.stdout; + var pctPattern = /(\d+\.\d+)%/g; + var matches = stdout.match(pctPattern); + var sum = matches.map(function(pct) { + return parseFloat(pct.replace(/[^0-9.]/g, "")) + }).reduce(function(a, b) { + return a + b; + }, 0); + var average = Math.round(sum / matches.length); + return average; + }); +} + +function generateCoverageBadge(coverage) { + var text = "coverage-" + coverage + "%"; + var color = getColorForCoverage(coverage); + var imgSrc = "http://img.shields.io/badge/" + text + "-" + color + ".svg?style=flat"; + var link = "http://petkaantonov.github.io/bluebird/coverage/debug/index.html"; + var markdown = "[!["+text+"]("+imgSrc+")]("+link+")"; + return markdown; +} + +function writeCoverageFile(coverage, groupNumber) { + var dir = build.dirs.coverage; + var fileName = path.join(dir, "coverage-group" + groupNumber + ".json"); + var json = JSON.stringify(coverage); + return fs.writeFileAsync(fileName, json, "utf8").thenReturn(fileName); +} + +function needsFreshProcess(testName) { + return /regress|using|domain|multiple-copies|unhandled_rejections|nodeify/.test(testName) || + testUtils.isOldNode && /api_exceptions|promisify/.test(testName); +} + +function runTestGroup(testGroup, options, progress) { + return jobRunner.run(mochaRunner, { + isolated: !options.singleTest, + log: options.singleTest, + progress: progress, + context: { + testGroup: testGroup, + singleTest: options.singleTest, + fakeTimers: options.fakeTimers, + cover: options.cover + } + }); +} + +function combineTests(tests) { + var arrays = new Array(jobRunner.CHILD_PROCESSES); + for (var i = 0; i < arrays.length; ++i) { + arrays[i] = []; + } + + var initialLength = arrays.length; + for (var i = 0; i < tests.length; ++i) { + var test = tests[i]; + if (needsFreshProcess(test.name)) { + arrays.push([test]); + } else { + arrays[i % initialLength].push(tests[i]); + } + + } + return arrays; +} + +var testName = "all"; +if ("run" in argv) { + testName = (argv.run + ""); + if (testName.indexOf("*") === -1) { + testName = testName.toLowerCase() + .replace( /\.js$/, "" ) + .replace( /[^a-zA-Z0-9_\-.]/g, "" ); + } +} + +var options = { + generators: (function() { + try { + new Function("(function*(){})"); + return true; + } catch (e) { + return false; + } + })() || !!argv.nw, + cover: !!argv["cover"], + testName: testName, + singleTest: false, + saucelabs: !!argv.saucelabs, + testBrowser: !!argv.saucelabs || !!argv.browser || !!argv.nw, + executeBrowserTests: !!argv.saucelabs || !!argv.nw || (typeof argv["execute-browser-tests"] === "boolean" ? + argv["execute-browser-tests"] : !!argv.browser), + openBrowser: typeof argv["open-browser"] === "boolean" ? argv["open-browser"] : true, + port: argv.port || 9999, + fakeTimers: typeof argv["fake-timers"] === "boolean" + ? argv["fake-timers"] : true, + jsHint: typeof argv["js-hint"] === "boolean" ? argv["js-hint"] : true, + nw: !!argv.nw, + nwPath: argv["nw-path"] +}; + + + +if (options.cover && typeof argv["cover"] === "string") { + options.coverFormat = argv["cover"]; +} else { + options.coverFormat = "html"; +} + +var jsHint = options.jsHint ? require("./jshint.js")() : Promise.resolve(); +var tests = getTests(options); +var buildOpts = { + debug: true +}; +if (options.testBrowser) { + buildOpts.browser = true; + buildOpts.minify = true; +} +var buildResult = build(buildOpts); +if (options.cover) { + var exclusions = ["assert.js", "captured_trace.js"]; + var coverageInstrumentedRoot = build.ensureDirectory(build.dirs.instrumented,options.cover, true); + var coverageReportsRoot = mkdirp(build.dirs.coverage, true).then(function() { + return fs.readdirAsync(build.dirs.coverage); + }).map(function(fileName) { + var filePath = path.join(build.dirs.coverage, fileName); + if (path.extname(fileName).indexOf("json") === -1) { + return rimraf(filePath); + } + }); + buildResult = Promise.join(coverageInstrumentedRoot, buildResult, coverageReportsRoot, function() { + return utils.run("npm", ["-v"]).then(function(result) { + var version = result.stdout.split(".").map(Number); + if (version[0] < 2) { + throw new Error("Npm version 2.x.x required, current version is " + result.stdout); + } + }); + }).tap(function() { + var copyExclusions = Promise.map(exclusions, function(exclusion) { + var fromPath = path.join(build.dirs.debug, exclusion); + var toPath = path.join(build.dirs.instrumented, exclusion); + return fs.readFileAsync(fromPath, "utf8").then(function(contents) { + return fs.writeFileAsync(toPath, contents, "utf8"); + }); + }); + var args = [ + "run", + "istanbul", + "--", + "instrument", + "--output", + build.dirs.instrumented, + "--no-compact", + "--preserve-comments", + "--embed-source" + ]; + exclusions.forEach(function(x) { + args.push("-x", x); + }); + args.push(build.dirs.debug); + var istanbul = utils.run("npm", args, null, true); + return Promise.all([istanbul, copyExclusions]); + }); +} + +var testResults = Promise.join(tests, buildResult, function(tests) { + var singleTest = tests.length === 1; + options.singleTest = singleTest; + process.stdout.write("\u001b[m"); + if (options.testBrowser) { + return require("./browser_test_generator.js")(tests, options); + } else if (singleTest) { + return runTestGroup(tests, options); + } else { + utils.cursorTo(0, 0); + utils.clearScreenDown(); + tableLogger.addTests(tests); + return Promise.map(combineTests(tests), function(testGroup, index) { + return runTestGroup(testGroup, options, function(test) { + if (test.failed) { + tableLogger.testFail(test); + } else { + tableLogger.testSuccess(test); + } + }).then(function(maybeCoverage) { + if (options.cover) { + return writeCoverageFile(maybeCoverage.result, index + 1); + } + }) + }).then(function() { + var p = Promise.resolve(); + if (options.cover) { + var coverage = getCoverage(); + if (process.execPath.indexOf("iojs") >= 0 && testName === "all") { + p = p.return(coverage).then(generateCoverageBadge).then(console.log); + } + p = p.then(function() { + return utils.run("npm", ["run", "istanbul", "--", "report", options.coverFormat], null, true); + }).return(coverage).then(function(coverage) { + console.log("Total coverage " + coverage + "%"); + }); + } + console.log("All tests passed"); + return p; + }); + } +}); + +Promise.all([testResults, jsHint]).spread(function(_, jsHintResponse) { + if (jsHintResponse) { + console.log("JSHint:"); + console.log(jsHintResponse.stdout); + console.log(jsHintResponse.stderr); + } +}).catch(function(e) { + if (e && e.stdout || e.stderr) { + console.log(e.stdout); + console.error(e.stderr); + } + + if (!e || !e.stack) { + console.error(e + ""); + } else { + console.error(e.noStackPrint ? e.message : e.stack); + } + process.exit(2); +}); diff --git a/platforms/android/assets/www/libs/bluebird/tools/utils.js b/platforms/android/assets/www/libs/bluebird/tools/utils.js new file mode 100755 index 0000000..b23e548 --- /dev/null +++ b/platforms/android/assets/www/libs/bluebird/tools/utils.js @@ -0,0 +1,218 @@ +var Promise = require("bluebird"); +var assert = require("assert"); +var path = require("path"); +var spawn = require("cross-spawn"); +Promise.longStackTraces(); +var fs = Promise.promisifyAll(require("fs")); +var notAscii = /[^\u000D\u0019-\u007E]/; +var Table = require('cli-table'); + +function noStackError(message) { + var e = new Error(message); + e.noStackPrint = true; + return e; +} + +function checkAscii(fileName, contents) { + if (notAscii.test(contents)) { + contents.split("\n").forEach(function(line, i) { + if (notAscii.test(line)) { + var lineNo = i + 1; + var col = line.indexOf(RegExp.lastMatch) + 1; + var code = "U+" + (("0000" + line.charCodeAt(col-1) + .toString(16)).slice(-4)); + code = RegExp.lastMatch + " (" + code.toUpperCase() + ")"; + var fullPath = path.join(process.cwd(), "src", fileName); + throw noStackError("The file " + fullPath + "\ncontains an illegal character: " + + code + " on line " + lineNo + " at column " + col); + } + }); + } +} + +var license; +function getLicense() { + if (license) return license; + var licenseFile = path.join(__dirname, "..", "LICENSE"); + return license = fs.readFileAsync(licenseFile, "utf8").then(function(text) { + return "/* @preserve\n" + text.split("\n").map(function(line) { + return " * " + line; + }).join("\n") + "\n */\n"; + }); +} + +function cursorTo(x, y) { + if (process.stdout.cursorTo) + process.stdout.cursorTo(x, y); +} + +function clearScreenDown() { + if (process.stdout.clearScreenDown) + process.stdout.clearScreenDown(); +} + +function run(cmd, args, dir, log) { + return new Promise(function(resolve, reject) { + function makeResult(errorMessage) { + var ret = errorMessage ? new Error(errorMessage) : {}; + ret.stdout = out.trim(); + ret.stderr = err.trim(); + return ret; + } + + var out = ""; + var err = ""; + var c = spawn(cmd, args, {stdin: ["ignore", "ignore", "ignore"], cwd: dir || process.cwd()}); + + c.stdout.on("data", function(data) { + if (log) process.stdout.write(data.toString()); + out += data; + }); + c.stderr.on("data", function(data) { + if (log) process.stderr.write(data.toString()); + err += data; + }); + + c.on("error", function(err) { + reject(makeResult(err.message)); + }); + c.on("close", function(code) { + if (code == 0) resolve(makeResult()) + else reject(makeResult(path.basename(cmd) + " exited with code: " + code + "\n" + err.trim())); + }) + }); +} + +function parseDeps(src) { + var rdeps = /function\s*\(\s*([^)]+)\)/; + var match = rdeps.exec(src); + assert.equal(match.length, 2); + var deps = match[1].split(/\s*,\s*/g).map(function(val) { + return val.trim(); + }); + return deps; +} + +var tableLogger = (function() { + var metaKeyCodeReAnywhere = /(?:\x1b)([a-zA-Z0-9])/; + var metaKeyCodeRe = new RegExp('^' + metaKeyCodeReAnywhere.source + '$'); + var functionKeyCodeReAnywhere = new RegExp('(?:\x1b+)(O|N|\\[|\\[\\[)(?:' + [ + '(\\d+)(?:;(\\d+))?([~^$])', + '(?:M([@ #!a`])(.)(.))', // mouse + '(?:1;)?(\\d+)?([a-zA-Z])' + ].join('|') + ')'); + + function stripVTControlCharacters(str) { + str = str.replace(new RegExp(functionKeyCodeReAnywhere.source, 'g'), ''); + return str.replace(new RegExp(metaKeyCodeReAnywhere.source, 'g'), ''); + } + + var ROWS = 35; + var prevLog = new Array(ROWS); + var log = new Array(ROWS); + for (var i = 0; i < ROWS; ++i) log[i] = []; + var tableOpts = { + chars: { + 'mid': '', + 'left-mid': '', + 'mid-mid': '', + 'right-mid': '' + }, + style: { + 'padding-left': 0, + 'padding-right': 0, + compact: true + } + }; + var table; + var split; + + function showTable() { + assert(!table); + table = new Table(tableOpts); + table.push.apply(table, log); + table = table.toString(); + split = table.split("\n").map(function(line) { + return stripVTControlCharacters(line); + }); + cursorTo(0, 0); + process.stdout.write(table); + cursorTo(0, split.length + 1); + } + + function addTests(tests) { + var cols = 0; + tests.forEach(function(test) { + var index = test.index; + var row = index % ROWS; + var column = (index / ROWS) | 0; + cols = Math.max(column, cols); + log[row][column] = "\u001b[m" + test.name + " \u001b[31m\u00D7 "; + }); + cols = cols + 1; + for (var i = 0; i < log.length; ++i) { + var row = log[i]; + for (var j = 0; j < cols; ++j) { + if (!row[j]) { + row[j] = " "; + } + } + } + showTable(); + } + + function getPosition(test) { + for (var y = 0; y < split.length; ++y) { + var s = split[y]; + var x = s.search(new RegExp(test.nameMatcher)); + if (x >= 0) { + return { + x: x + test.name.length, + y: y + }; + } + } + assert(false); + } + + function update(test, message) { + var pos = getPosition(test); + cursorTo(pos.x + 1, pos.y); + process.stdout.write(message); + cursorTo(0, split.length + 2); + } + + function testFail(test) { + update(test, "\u001b[31m\u00D7 FAILURE\u001b[39m"); + } + + + function testSuccess(test) { + update(test, "\u001b[32m\u221A\u001b[39m") + } + + return { + addTests: addTests, + testFail: testFail, + testSuccess: testSuccess + } +})(); + +function stringToStream(str) { + var Readable = require('stream').Readable; + var readable = new Readable() + readable.push(str + ""); + readable.push(null); + return readable; +} + +module.exports = { + checkAscii: checkAscii, + getLicense: getLicense, + run: run, + parseDeps: parseDeps, + tableLogger: tableLogger, + stringToStream: stringToStream, + cursorTo: cursorTo, + clearScreenDown: clearScreenDown +}; diff --git a/platforms/android/assets/www/libs/jquery/.bower.json b/platforms/android/assets/www/libs/jquery/.bower.json new file mode 100644 index 0000000..dfaa821 --- /dev/null +++ b/platforms/android/assets/www/libs/jquery/.bower.json @@ -0,0 +1,25 @@ +{ + "name": "jquery", + "main": "dist/jquery.js", + "license": "MIT", + "ignore": [ + "package.json" + ], + "keywords": [ + "jquery", + "javascript", + "browser", + "library" + ], + "homepage": "https://github.com/jquery/jquery-dist", + "version": "2.2.3", + "_release": "2.2.3", + "_resolution": { + "type": "version", + "tag": "2.2.3", + "commit": "af22a351b2ea5801ffb1695abb3bb34d5bed9198" + }, + "_source": "https://github.com/jquery/jquery-dist.git", + "_target": "^2.2.3", + "_originalSource": "jquery" +} \ No newline at end of file diff --git a/platforms/android/assets/www/libs/jquery/AUTHORS.txt b/platforms/android/assets/www/libs/jquery/AUTHORS.txt new file mode 100644 index 0000000..dde64ca --- /dev/null +++ b/platforms/android/assets/www/libs/jquery/AUTHORS.txt @@ -0,0 +1,278 @@ +Authors ordered by first contribution. + +John Resig +Gilles van den Hoven +Michael Geary +Stefan Petre +Yehuda Katz +Corey Jewett +Klaus Hartl +Franck Marcia +Jörn Zaefferer +Paul Bakaus +Brandon Aaron +Mike Alsup +Dave Methvin +Ed Engelhardt +Sean Catchpole +Paul Mclanahan +David Serduke +Richard D. Worth +Scott González +Ariel Flesler +Jon Evans +TJ Holowaychuk +Michael Bensoussan +Robert Katić +Louis-Rémi Babé +Earle Castledine +Damian Janowski +Rich Dougherty +Kim Dalsgaard +Andrea Giammarchi +Mark Gibson +Karl Swedberg +Justin Meyer +Ben Alman +James Padolsey +David Petersen +Batiste Bieler +Alexander Farkas +Rick Waldron +Filipe Fortes +Neeraj Singh +Paul Irish +Iraê Carvalho +Matt Curry +Michael Monteleone +Noah Sloan +Tom Viner +Douglas Neiner +Adam J. Sontag +Dave Reed +Ralph Whitbeck +Carl Fürstenberg +Jacob Wright +J. Ryan Stinnett +unknown +temp01 +Heungsub Lee +Colin Snover +Ryan W Tenney +Pinhook +Ron Otten +Jephte Clain +Anton Matzneller +Alex Sexton +Dan Heberden +Henri Wiechers +Russell Holbrook +Julian Aubourg +Gianni Alessandro Chiappetta +Scott Jehl +James Burke +Jonas Pfenniger +Xavi Ramirez +Jared Grippe +Sylvester Keil +Brandon Sterne +Mathias Bynens +Timmy Willison +Corey Frang +Digitalxero +Anton Kovalyov +David Murdoch +Josh Varner +Charles McNulty +Jordan Boesch +Jess Thrysoee +Michael Murray +Lee Carpenter +Alexis Abril +Rob Morgan +John Firebaugh +Sam Bisbee +Gilmore Davidson +Brian Brennan +Xavier Montillet +Daniel Pihlstrom +Sahab Yazdani +avaly +Scott Hughes +Mike Sherov +Greg Hazel +Schalk Neethling +Denis Knauf +Timo Tijhof +Steen Nielsen +Anton Ryzhov +Shi Chuan +Berker Peksag +Toby Brain +Matt Mueller +Justin +Daniel Herman +Oleg Gaidarenko +Richard Gibson +Rafaël Blais Masson +cmc3cn <59194618@qq.com> +Joe Presbrey +Sindre Sorhus +Arne de Bree +Vladislav Zarakovsky +Andrew E Monat +Oskari +Joao Henrique de Andrade Bruni +tsinha +Matt Farmer +Trey Hunner +Jason Moon +Jeffery To +Kris Borchers +Vladimir Zhuravlev +Jacob Thornton +Chad Killingsworth +Nowres Rafid +David Benjamin +Uri Gilad +Chris Faulkner +Elijah Manor +Daniel Chatfield +Nikita Govorov +Wesley Walser +Mike Pennisi +Markus Staab +Dave Riddle +Callum Macrae +Benjamin Truyman +James Huston +Erick Ruiz de Chávez +David Bonner +Akintayo Akinwunmi +MORGAN +Ismail Khair +Carl Danley +Mike Petrovich +Greg Lavallee +Daniel Gálvez +Sai Lung Wong +Tom H Fuertes +Roland Eckl +Jay Merrifield +Allen J Schmidt Jr +Jonathan Sampson +Marcel Greter +Matthias Jäggli +David Fox +Yiming He +Devin Cooper +Paul Ramos +Rod Vagg +Bennett Sorbo +Sebastian Burkhard +Zachary Adam Kaplan +nanto_vi +nanto +Danil Somsikov +Ryunosuke SATO +Jean Boussier +Adam Coulombe +Andrew Plummer +Mark Raddatz +Isaac Z. Schlueter +Karl Sieburg +Pascal Borreli +Nguyen Phuc Lam +Dmitry Gusev +Michał Gołębiowski +Li Xudong +Steven Benner +Tom H Fuertes +Renato Oliveira dos Santos +ros3cin +Jason Bedard +Kyle Robinson Young +Chris Talkington +Eddie Monge +Terry Jones +Jason Merino +Jeremy Dunck +Chris Price +Guy Bedford +Amey Sakhadeo +Mike Sidorov +Anthony Ryan +Dominik D. Geyer +George Kats +Lihan Li +Ronny Springer +Chris Antaki +Marian Sollmann +njhamann +Ilya Kantor +David Hong +John Paul +Jakob Stoeck +Christopher Jones +Forbes Lindesay +S. Andrew Sheppard +Leonardo Balter +Roman Reiß +Benjy Cui +Rodrigo Rosenfeld Rosas +John Hoven +Philip Jägenstedt +Christian Kosmowski +Liang Peng +TJ VanToll +Senya Pugach +Aurelio De Rosa +Nazar Mokrynskyi +Amit Merchant +Jason Bedard +Arthur Verschaeve +Dan Hart +Bin Xin +David Corbacho +Veaceslav Grimalschi +Daniel Husar +Frederic Hemberger +Ben Toews +Aditya Raghavan +Victor Homyakov +Shivaji Varma +Nicolas HENRY +Anne-Gaelle Colom +George Mauer +Leonardo Braga +Stephen Edgar +Thomas Tortorini +Winston Howes +Jon Hester +Alexander O'Mara +Bastian Buchholz +Arthur Stolyar +Calvin Metcalf +Mu Haibao +Richard McDaniel +Chris Rebert +Gabriel Schulhof +Gilad Peleg +Martin Naumann +Marek Lewandowski +Bruno Pérel +Reed Loden +Daniel Nill +Yongwoo Jeon +Sean Henderson +Richard Kraaijenhagen +Connor Atherton +Gary Ye +Christian Grete +Liza Ramo +Julian Alexander Murillo +Joelle Fleurantin +Jun Sun +Devin Wilson +Todor Prikumov +Zack Hall diff --git a/platforms/android/assets/www/libs/jquery/LICENSE.txt b/platforms/android/assets/www/libs/jquery/LICENSE.txt new file mode 100644 index 0000000..5312a4c --- /dev/null +++ b/platforms/android/assets/www/libs/jquery/LICENSE.txt @@ -0,0 +1,36 @@ +Copyright jQuery Foundation and other contributors, https://jquery.org/ + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/jquery/jquery + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice 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. + +==== + +All files located in the node_modules and external directories are +externally maintained libraries used by this software which have their +own licenses; we recommend you read them, as their terms may differ from +the terms above. diff --git a/platforms/android/assets/www/libs/jquery/README.md b/platforms/android/assets/www/libs/jquery/README.md new file mode 100644 index 0000000..ba3174a --- /dev/null +++ b/platforms/android/assets/www/libs/jquery/README.md @@ -0,0 +1,65 @@ +# jQuery + +> jQuery is a fast, small, and feature-rich JavaScript library. + +For information on how to get started and how to use jQuery, please see [jQuery's documentation](http://api.jquery.com/). +For source files and issues, please visit the [jQuery repo](https://github.com/jquery/jquery). + +## Including jQuery + +Below are some of the most common ways to include jQuery. + +### Browser + +#### Script tag + +```html + +``` + +#### Babel + +[Babel](http://babeljs.io/) is a next generation JavaScript compiler. One of the features is the ability to use ES6/ES2015 modules now, even though browsers do not yet support this feature natively. + +```js +import $ from "jquery"; +``` + +#### Browserify/Webpack + +There are several ways to use [Browserify](http://browserify.org/) and [Webpack](https://webpack.github.io/). For more information on using these tools, please refer to the corresponding project's documention. In the script, including jQuery will usually look like this... + +```js +var $ = require("jquery"); +``` + +#### AMD (Asynchronous Module Definition) + +AMD is a module format built for the browser. For more information, we recommend [require.js' documentation](http://requirejs.org/docs/whyamd.html). + +```js +define(["jquery"], function($) { + +}); +``` + +### Node + +To include jQuery in [Node](nodejs.org), first install with npm. + +```sh +npm install jquery +``` + +For jQuery to work in Node, a window with a document is required. Since no such window exists natively in Node, one can be mocked by tools such as [jsdom](https://github.com/tmpvar/jsdom). This can be useful for testing purposes. + +```js +require("jsdom").env("", function(err, window) { + if (err) { + console.error(err); + return; + } + + var $ = require("jquery")(window); +}); +``` diff --git a/platforms/android/assets/www/libs/jquery/bower.json b/platforms/android/assets/www/libs/jquery/bower.json new file mode 100644 index 0000000..95798d5 --- /dev/null +++ b/platforms/android/assets/www/libs/jquery/bower.json @@ -0,0 +1,14 @@ +{ + "name": "jquery", + "main": "dist/jquery.js", + "license": "MIT", + "ignore": [ + "package.json" + ], + "keywords": [ + "jquery", + "javascript", + "browser", + "library" + ] +} \ No newline at end of file diff --git a/platforms/android/assets/www/libs/jquery/sizzle/LICENSE.txt b/platforms/android/assets/www/libs/jquery/sizzle/LICENSE.txt new file mode 100644 index 0000000..dd7ce94 --- /dev/null +++ b/platforms/android/assets/www/libs/jquery/sizzle/LICENSE.txt @@ -0,0 +1,36 @@ +Copyright jQuery Foundation and other contributors, https://jquery.org/ + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/jquery/sizzle + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice 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. + +==== + +All files located in the node_modules and external directories are +externally maintained libraries used by this software which have their +own licenses; we recommend you read them, as their terms may differ from +the terms above. diff --git a/platforms/android/assets/www/libs/jquery/src/.jshintrc b/platforms/android/assets/www/libs/jquery/src/.jshintrc new file mode 100644 index 0000000..ea3549d --- /dev/null +++ b/platforms/android/assets/www/libs/jquery/src/.jshintrc @@ -0,0 +1,29 @@ +{ + "boss": true, + "curly": true, + "eqeqeq": true, + "eqnull": true, + "expr": true, + "immed": true, + "noarg": true, + "quotmark": "double", + "undef": true, + "unused": true, + + "sub": true, + + // Support: IE < 10, Android < 4.1 + // The above browsers are failing a lot of tests in the ES5 + // test suite at http://test262.ecmascript.org. + "es3": true, + + "globals": { + "window": true, + "JSON": false, + + "jQuery": true, + "define": true, + "module": true, + "noGlobal": true + } +} diff --git a/platforms/android/assets/www/libs/jquery/src/ajax.js b/platforms/android/assets/www/libs/jquery/src/ajax.js new file mode 100644 index 0000000..ba32248 --- /dev/null +++ b/platforms/android/assets/www/libs/jquery/src/ajax.js @@ -0,0 +1,845 @@ +define( [ + "./core", + "./var/document", + "./var/rnotwhite", + "./ajax/var/location", + "./ajax/var/nonce", + "./ajax/var/rquery", + + "./core/init", + "./ajax/parseJSON", + "./ajax/parseXML", + "./event/trigger", + "./deferred" +], function( jQuery, document, rnotwhite, location, nonce, rquery ) { + +var + 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 = /^\/\//, + + /* 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( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// 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: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + 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: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + 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, + + // Url cleanup var + urlAnchor, + + // 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 || location.href ) + "" ).replace( rhash, "" ) + .replace( rprotocol, location.protocol + "//" ); + + // 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 the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE8-11+ + // IE throws exception if url is malformed, e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE8-11+ + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // 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 + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && 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 ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( state === 2 ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.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 ) { + window.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 { + + // Extract error from statusText and normalize 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; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +return jQuery; +} ); diff --git a/platforms/android/assets/www/libs/jquery/src/ajax/jsonp.js b/platforms/android/assets/www/libs/jquery/src/ajax/jsonp.js new file mode 100644 index 0000000..666e5d1 --- /dev/null +++ b/platforms/android/assets/www/libs/jquery/src/ajax/jsonp.js @@ -0,0 +1,100 @@ +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" ) === 0 && + 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() { + + // If previous value didn't exist - remove it + if ( overwritten === undefined ) { + jQuery( window ).removeProp( callbackName ); + + // Otherwise restore preexisting value + } else { + 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/libs/jquery/src/ajax/load.js b/platforms/android/assets/www/libs/jquery/src/ajax/load.js new file mode 100644 index 0000000..5ec3fa2 --- /dev/null +++ b/platforms/android/assets/www/libs/jquery/src/ajax/load.js @@ -0,0 +1,83 @@ +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 > -1 ) { + 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. + // Make value of this field explicit since + // user can override it through ajaxSetup method + type: type || "GET", + 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( "
" ).append( jQuery.parseHTML( responseText ) ).find( selector ) : + + // Otherwise use the full result + responseText ); + + // If the request succeeds, this function gets "data", "status", "jqXHR" + // but they are ignored because response was set above. + // If it fails, this function gets "jqXHR", "status", "error" + } ).always( callback && function( jqXHR, status ) { + self.each( function() { + callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] ); + } ); + } ); + } + + return this; +}; + +} ); diff --git a/platforms/android/assets/www/libs/jquery/src/ajax/parseJSON.js b/platforms/android/assets/www/libs/jquery/src/ajax/parseJSON.js new file mode 100644 index 0000000..11918b0 --- /dev/null +++ b/platforms/android/assets/www/libs/jquery/src/ajax/parseJSON.js @@ -0,0 +1,13 @@ +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/libs/jquery/src/ajax/parseXML.js b/platforms/android/assets/www/libs/jquery/src/ajax/parseXML.js new file mode 100644 index 0000000..6599aaf --- /dev/null +++ b/platforms/android/assets/www/libs/jquery/src/ajax/parseXML.js @@ -0,0 +1,27 @@ +define( [ + "../core" +], function( jQuery ) { + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE9 + try { + xml = ( new window.DOMParser() ).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/libs/jquery/src/ajax/script.js b/platforms/android/assets/www/libs/jquery/src/ajax/script.js new file mode 100644 index 0000000..945bea9 --- /dev/null +++ b/platforms/android/assets/www/libs/jquery/src/ajax/script.js @@ -0,0 +1,68 @@ +define( [ + "../core", + "../var/document", + "../ajax" +], function( jQuery, document ) { + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + 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( " +``` + +Or for development you can use the latest: + +```html + + +``` + +**Install with NPM:** + +```shell +$ npm install --save-dev muicss +``` + +Read more: https://www.npmjs.com/package/muicss + +**Install with Bower:** + +```shell +$ bower install mui +``` + +## Features + +MUI is designed from the ground up to be fast, small and developer friendly. By design it only includes the basic components you need to build a site that follows Google's Material Design guidelines. Some of the key features of MUI are: + +* Small footprint: mui.min.css - 6.6K, mui.min.js - 5.4K (gzipped) +* A responsive grid to make mobile-friendly sites +* No external dependencies +* CSS library that can be customized with your own colors +* JS library can be loaded asyncronously +* Email library for styling HTML emails + +To get started using MUI, go to the [MUI website](https://www.muicss.com) to see examples and download boilerplate HTML. + +## Browser Support + +MUI is tested and works in: + +* IE10+ +* Latest Stable: Firefox, Chrome, Safari +* iOS 6+ + +## Development Quickstart + +1. Install dependencies + + * nodejs (http://nodejs.org/) + * npm (https://www.npmjs.org/) + * sass (http://sass-lang.com/) + * http-server (via npm) + +1. Clone repository + + ```bash + $ git clone git@github.com:muicss/mui.git + $ cd mui + ``` + +1. Install node dependencies using npm + + ```bash + $ npm install + ``` + +1. Build examples + + ```bash + $ ./node_modules/.bin/gulp examples:build + ``` + + To view the examples you can use any static file server. To use the nodejs `http-server` module: + + ```bash + $ npm install http-server + $ ./node_modules/.bin/http-server -p 3000 + ``` + + Then visit http://localhost:3000/examples + +## Run tests + +### Unit tests + +To run the unit tests from the command line, run 'npm test': + +```bash +$ npm test +``` + +### E2E tests + +To run the E2E tests first compile the unit test files into a version that runs in the browser: + +```bash +$ ./node_modules/.bin/gulp e2e-tests:build +``` + +Then visit http://localhost:3000/e2e-tests + +## Build Packages + +### CDN + +```bash +$ ./node_modules/.bin/gulp cdn:build +``` + +The build will be located in the `packages/cdn` directory: + +
+cdn/
+├── css
+│   ├── mui.css
+│   ├── mui.min.css
+├── js
+│   ├── mui.js
+│   └── mui.min.js
+├── email
+│   ├── mui-email-inline.css
+|   └── mui-email-styletag.css
+├── react
+│   ├── mui-react.js
+│   └── mui-react.min.js
+└── webcomponents
+|   ├── mui-webcomponents.js
+|   └── mui-webcomponents.min.js
+└── extra
+    ├── mui-colors.css
+    ├── mui-combined.js
+    └── mui-react-combined.js
+
+ +### NPM + +```bash +$ ./node_modules/.bin/gulp npm:build +``` + +The NPM package is located in the `packages/npm` directory. + +### Meteor + +```bash +$ ./node_modules/.bin/gulp meteor:build +``` + +The Meteor package is located in the `packages/meteor` directory. diff --git a/platforms/android/assets/www/libs/mui/RELEASE.md b/platforms/android/assets/www/libs/mui/RELEASE.md new file mode 100644 index 0000000..bfa6fc3 --- /dev/null +++ b/platforms/android/assets/www/libs/mui/RELEASE.md @@ -0,0 +1,45 @@ +# Release Instructions + +1. Build packages + + ```bash + $ ./node_modules/.bin/gulp build-packages + ``` + +1. Add release notes to CHANGELOG.md + +1. Change version number in package.json + +1. Change version number in bower.json + +1. Change version number in README.md + +1. Change version number in packages/meteor/package.js + +1. Change version number in packages/npm/package.json + +1. Update packages/npm/README.md (if necessary) + +1. Commit changes and tag code + + ```bash + $ git add . --all + $ git commit -a -m "bumped version number" + $ git push origin master + $ git tag + $ git push --tags + ``` + +1. Push changes to NPM + + ```bash + $ cd packages/npm + $ npm publish + ``` + +1. Update package on Meteor repository + + ```bash + $ cd packages/meteor + $ meteor publish + ``` diff --git a/platforms/android/assets/www/libs/mui/bower.json b/platforms/android/assets/www/libs/mui/bower.json new file mode 100644 index 0000000..86779de --- /dev/null +++ b/platforms/android/assets/www/libs/mui/bower.json @@ -0,0 +1,42 @@ +{ + "name": "mui", + "version": "0.5.9", + "license": "MIT", + "authors": [ + "Andres Morey " + ], + "homepage": "https://www.muicss.com", + "description": "MUI is a lightweight HTML/CSS/JS framework that follows Google's Material Design guidelines.", + "main": [ + "src/sass/mui.scss", + "src/sass/mui/_colors.scss", + "src/email/mui-email-inline.scss", + "src/email/mui-email-styletag.scss", + "packages/cdn/css/mui.css", + "packages/cdn/css/mui.min.css", + "packages/cdn/js/mui.js", + "packages/cdn/js/mui.min.js" + ], + "repository": { + "type": "git", + "url": "git://github.com/muicss/mui.git" + }, + "keywords": [ + "material design", + "frontend framework", + "html, css, and js framework", + "email css template" + ], + "dependencies": { + }, + "ignore": [ + "**/.*", + "build-targets", + "e2e-tests", + "examples", + "gulpfile.js", + "node_modules", + "package.json", + "test" + ] +} diff --git a/platforms/android/assets/www/libs/mui/packages/cdn/angular/mui-angular.js b/platforms/android/assets/www/libs/mui/packages/cdn/angular/mui-angular.js new file mode 100644 index 0000000..a62e003 --- /dev/null +++ b/platforms/android/assets/www/libs/mui/packages/cdn/angular/mui-angular.js @@ -0,0 +1,1858 @@ +(function (global) { + var babelHelpers = global.babelHelpers = {}; + + babelHelpers.interopRequireDefault = function (obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + }; + + babelHelpers.interopRequireWildcard = function (obj) { + if (obj && obj.__esModule) { + return obj; + } else { + var newObj = {}; + + if (obj != null) { + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; + } + } + + newObj.default = obj; + return newObj; + } + }; +})(typeof global === "undefined" ? self : global);(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o viewHeight) { + scrollIdeal = menuPadding + (currentIndex + 1) * optionHeight - (-1 * top + wrapperPadding + inputHeight); + scrollMax = numOptions * optionHeight + 2 * menuPadding - height; + scrollTop = Math.min(scrollIdeal, scrollMax); + } + + return { + 'height': height + 'px', + 'top': top + 'px', + 'scrollTop': scrollTop + }; +} + +/** Define module API */ +module.exports = { + getMenuPositionalCSS: getMenuPositionalCSSFn +}; + +},{}],4:[function(require,module,exports){ +/** + * MUI CSS/JS jqLite module + * @module lib/jqLite + */ + +'use strict'; + +/** + * Add a class to an element. + * @param {Element} element - The DOM element. + * @param {string} cssClasses - Space separated list of class names. + */ + +function jqLiteAddClass(element, cssClasses) { + if (!cssClasses || !element.setAttribute) return; + + var existingClasses = _getExistingClasses(element), + splitClasses = cssClasses.split(' '), + cssClass; + + for (var i = 0; i < splitClasses.length; i++) { + cssClass = splitClasses[i].trim(); + if (existingClasses.indexOf(' ' + cssClass + ' ') === -1) { + existingClasses += cssClass + ' '; + } + } + + element.setAttribute('class', existingClasses.trim()); +} + +/** + * Get or set CSS properties. + * @param {Element} element - The DOM element. + * @param {string} [name] - The property name. + * @param {string} [value] - The property value. + */ +function jqLiteCss(element, name, value) { + // Return full style object + if (name === undefined) { + return getComputedStyle(element); + } + + var nameType = jqLiteType(name); + + // Set multiple values + if (nameType === 'object') { + for (var key in name) { + element.style[_camelCase(key)] = name[key]; + }return; + } + + // Set a single value + if (nameType === 'string' && value !== undefined) { + element.style[_camelCase(name)] = value; + } + + var styleObj = getComputedStyle(element), + isArray = jqLiteType(name) === 'array'; + + // Read single value + if (!isArray) return _getCurrCssProp(element, name, styleObj); + + // Read multiple values + var outObj = {}, + key; + + for (var i = 0; i < name.length; i++) { + key = name[i]; + outObj[key] = _getCurrCssProp(element, key, styleObj); + } + + return outObj; +} + +/** + * Check if element has class. + * @param {Element} element - The DOM element. + * @param {string} cls - The class name string. + */ +function jqLiteHasClass(element, cls) { + if (!cls || !element.getAttribute) return false; + return _getExistingClasses(element).indexOf(' ' + cls + ' ') > -1; +} + +/** + * Return the type of a variable. + * @param {} somevar - The JavaScript variable. + */ +function jqLiteType(somevar) { + // handle undefined + if (somevar === undefined) return 'undefined'; + + // handle others (of type [object ]) + var typeStr = Object.prototype.toString.call(somevar); + if (typeStr.indexOf('[object ') === 0) { + return typeStr.slice(8, -1).toLowerCase(); + } else { + throw new Error("MUI: Could not understand type: " + typeStr); + } +} + +/** + * Attach an event handler to a DOM element + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOn(element, type, callback, useCapture) { + useCapture = useCapture === undefined ? false : useCapture; + + // add to DOM + element.addEventListener(type, callback, useCapture); + + // add to cache + var cache = element._muiEventCache = element._muiEventCache || {}; + cache[type] = cache[type] || []; + cache[type].push([callback, useCapture]); +} + +/** + * Remove an event handler from a DOM element + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOff(element, type, callback, useCapture) { + useCapture = useCapture === undefined ? false : useCapture; + + // remove from cache + var cache = element._muiEventCache = element._muiEventCache || {}, + argsList = cache[type] || [], + args, + i; + + i = argsList.length; + while (i--) { + args = argsList[i]; + + // remove all events if callback is undefined + if (callback === undefined || args[0] === callback && args[1] === useCapture) { + + // remove from cache + argsList.splice(i, 1); + + // remove from DOM + element.removeEventListener(type, args[0], args[1]); + } + } +} + +/** + * Attach an event hander which will only execute once + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOne(element, type, callback, useCapture) { + jqLiteOn(element, type, function onFn(ev) { + // execute callback + if (callback) callback.apply(this, arguments); + + // remove wrapper + jqLiteOff(element, type, onFn); + }, useCapture); +} + +/** + * Get or set horizontal scroll position + * @param {Element} element - The DOM element + * @param {number} [value] - The scroll position + */ +function jqLiteScrollLeft(element, value) { + var win = window; + + // get + if (value === undefined) { + if (element === win) { + var docEl = document.documentElement; + return (win.pageXOffset || docEl.scrollLeft) - (docEl.clientLeft || 0); + } else { + return element.scrollLeft; + } + } + + // set + if (element === win) win.scrollTo(value, jqLiteScrollTop(win));else element.scrollLeft = value; +} + +/** + * Get or set vertical scroll position + * @param {Element} element - The DOM element + * @param {number} value - The scroll position + */ +function jqLiteScrollTop(element, value) { + var win = window; + + // get + if (value === undefined) { + if (element === win) { + var docEl = document.documentElement; + return (win.pageYOffset || docEl.scrollTop) - (docEl.clientTop || 0); + } else { + return element.scrollTop; + } + } + + // set + if (element === win) win.scrollTo(jqLiteScrollLeft(win), value);else element.scrollTop = value; +} + +/** + * Return object representing top/left offset and element height/width. + * @param {Element} element - The DOM element. + */ +function jqLiteOffset(element) { + var win = window, + rect = element.getBoundingClientRect(), + scrollTop = jqLiteScrollTop(win), + scrollLeft = jqLiteScrollLeft(win); + + return { + top: rect.top + scrollTop, + left: rect.left + scrollLeft, + height: rect.height, + width: rect.width + }; +} + +/** + * Attach a callback to the DOM ready event listener + * @param {Function} fn - The callback function. + */ +function jqLiteReady(fn) { + var done = false, + top = true, + doc = document, + win = doc.defaultView, + root = doc.documentElement, + add = doc.addEventListener ? 'addEventListener' : 'attachEvent', + rem = doc.addEventListener ? 'removeEventListener' : 'detachEvent', + pre = doc.addEventListener ? '' : 'on'; + + var init = function init(e) { + if (e.type == 'readystatechange' && doc.readyState != 'complete') { + return; + } + + (e.type == 'load' ? win : doc)[rem](pre + e.type, init, false); + if (!done && (done = true)) fn.call(win, e.type || e); + }; + + var poll = function poll() { + try { + root.doScroll('left'); + } catch (e) { + setTimeout(poll, 50);return; + } + init('poll'); + }; + + if (doc.readyState == 'complete') { + fn.call(win, 'lazy'); + } else { + if (doc.createEventObject && root.doScroll) { + try { + top = !win.frameElement; + } catch (e) {} + if (top) poll(); + } + doc[add](pre + 'DOMContentLoaded', init, false); + doc[add](pre + 'readystatechange', init, false); + win[add](pre + 'load', init, false); + } +} + +/** + * Remove classes from a DOM element + * @param {Element} element - The DOM element. + * @param {string} cssClasses - Space separated list of class names. + */ +function jqLiteRemoveClass(element, cssClasses) { + if (!cssClasses || !element.setAttribute) return; + + var existingClasses = _getExistingClasses(element), + splitClasses = cssClasses.split(' '), + cssClass; + + for (var i = 0; i < splitClasses.length; i++) { + cssClass = splitClasses[i].trim(); + while (existingClasses.indexOf(' ' + cssClass + ' ') >= 0) { + existingClasses = existingClasses.replace(' ' + cssClass + ' ', ' '); + } + } + + element.setAttribute('class', existingClasses.trim()); +} + +// ------------------------------ +// Utilities +// ------------------------------ +var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g, + MOZ_HACK_REGEXP = /^moz([A-Z])/, + ESCAPE_REGEXP = /([.*+?^=!:${}()|\[\]\/\\])/g, + BOOLEAN_ATTRS; + +BOOLEAN_ATTRS = { + multiple: true, + selected: true, + checked: true, + disabled: true, + readonly: true, + required: true, + open: true +}; + +function _getExistingClasses(element) { + var classes = (element.getAttribute('class') || '').replace(/[\n\t]/g, ''); + return ' ' + classes + ' '; +} + +function _camelCase(name) { + return name.replace(SPECIAL_CHARS_REGEXP, function (_, separator, letter, offset) { + return offset ? letter.toUpperCase() : letter; + }).replace(MOZ_HACK_REGEXP, 'Moz$1'); +} + +function _escapeRegExp(string) { + return string.replace(ESCAPE_REGEXP, "\\$1"); +} + +function _getCurrCssProp(elem, name, computed) { + var ret; + + // try computed style + ret = computed.getPropertyValue(name); + + // try style attribute (if element is not attached to document) + if (ret === '' && !elem.ownerDocument) ret = elem.style[_camelCase(name)]; + + return ret; +} + +/** + * Module API + */ +module.exports = { + /** Add classes */ + addClass: jqLiteAddClass, + + /** Get or set CSS properties */ + css: jqLiteCss, + + /** Check for class */ + hasClass: jqLiteHasClass, + + /** Remove event handlers */ + off: jqLiteOff, + + /** Return offset values */ + offset: jqLiteOffset, + + /** Add event handlers */ + on: jqLiteOn, + + /** Add an execute-once event handler */ + one: jqLiteOne, + + /** DOM ready event handler */ + ready: jqLiteReady, + + /** Remove classes */ + removeClass: jqLiteRemoveClass, + + /** Check JavaScript variable instance type */ + type: jqLiteType, + + /** Get or set horizontal scroll position */ + scrollLeft: jqLiteScrollLeft, + + /** Get or set vertical scroll position */ + scrollTop: jqLiteScrollTop +}; + +},{}],5:[function(require,module,exports){ +/** + * MUI CSS/JS utilities module + * @module lib/util + */ + +'use strict'; + +var config = require('../config'), + jqLite = require('./jqLite'), + nodeInsertedCallbacks = [], + scrollLock = 0, + scrollLockCls = 'mui-body--scroll-lock', + scrollLockPos, + _supportsPointerEvents; + +/** + * Logging function + */ +function logFn() { + var win = window; + + if (config.debug && typeof win.console !== "undefined") { + try { + win.console.log.apply(win.console, arguments); + } catch (a) { + var e = Array.prototype.slice.call(arguments); + win.console.log(e.join("\n")); + } + } +} + +/** + * Load CSS text in new stylesheet + * @param {string} cssText - The css text. + */ +function loadStyleFn(cssText) { + var doc = document, + head; + + // copied from jQuery + head = doc.head || doc.getElementsByTagName('head')[0] || doc.documentElement; + + var e = doc.createElement('style'); + e.type = 'text/css'; + + if (e.styleSheet) e.styleSheet.cssText = cssText;else e.appendChild(doc.createTextNode(cssText)); + + // add to document + head.insertBefore(e, head.firstChild); + + return e; +} + +/** + * Raise an error + * @param {string} msg - The error message. + */ +function raiseErrorFn(msg, useConsole) { + if (useConsole) { + if (typeof console !== 'undefined') console.error('MUI Warning: ' + msg); + } else { + throw new Error('MUI: ' + msg); + } +} + +/** + * Register callbacks on muiNodeInserted event + * @param {function} callbackFn - The callback function. + */ +function onNodeInsertedFn(callbackFn) { + nodeInsertedCallbacks.push(callbackFn); + + // initalize listeners + if (nodeInsertedCallbacks._initialized === undefined) { + var doc = document; + + jqLite.on(doc, 'animationstart', animationHandlerFn); + jqLite.on(doc, 'mozAnimationStart', animationHandlerFn); + jqLite.on(doc, 'webkitAnimationStart', animationHandlerFn); + + nodeInsertedCallbacks._initialized = true; + } +} + +/** + * Execute muiNodeInserted callbacks + * @param {Event} ev - The DOM event. + */ +function animationHandlerFn(ev) { + // check animation name + if (ev.animationName !== 'mui-node-inserted') return; + + var el = ev.target; + + // iterate through callbacks + for (var i = nodeInsertedCallbacks.length - 1; i >= 0; i--) { + nodeInsertedCallbacks[i](el); + } +} + +/** + * Convert Classname object, with class as key and true/false as value, to an + * class string. + * @param {Object} classes The classes + * @return {String} class string + */ +function classNamesFn(classes) { + var cs = ''; + for (var i in classes) { + cs += classes[i] ? i + ' ' : ''; + } + return cs.trim(); +} + +/** + * Check if client supports pointer events. + */ +function supportsPointerEventsFn() { + // check cache + if (_supportsPointerEvents !== undefined) return _supportsPointerEvents; + + var element = document.createElement('x'); + element.style.cssText = 'pointer-events:auto'; + _supportsPointerEvents = element.style.pointerEvents === 'auto'; + return _supportsPointerEvents; +} + +/** + * Create callback closure. + * @param {Object} instance - The object instance. + * @param {String} funcName - The name of the callback function. + */ +function callbackFn(instance, funcName) { + return function () { + instance[funcName].apply(instance, arguments); + }; +} + +/** + * Dispatch event. + * @param {Element} element - The DOM element. + * @param {String} eventType - The event type. + * @param {Boolean} bubbles=true - If true, event bubbles. + * @param {Boolean} cancelable=true = If true, event is cancelable + * @param {Object} [data] - Data to add to event object + */ +function dispatchEventFn(element, eventType, bubbles, cancelable, data) { + var ev = document.createEvent('HTMLEvents'), + bubbles = bubbles !== undefined ? bubbles : true, + cancelable = cancelable !== undefined ? cancelable : true, + k; + + ev.initEvent(eventType, bubbles, cancelable); + + // add data to event object + if (data) for (k in data) { + ev[k] = data[k]; + } // dispatch + if (element) element.dispatchEvent(ev); + + return ev; +} + +/** + * Turn on window scroll lock. + */ +function enableScrollLockFn() { + // increment counter + scrollLock += 1; + + // add lock + if (scrollLock === 1) { + var win = window, + doc = document; + + scrollLockPos = { left: jqLite.scrollLeft(win), top: jqLite.scrollTop(win) }; + jqLite.addClass(doc.body, scrollLockCls); + win.scrollTo(scrollLockPos.left, scrollLockPos.top); + } +} + +/** + * Turn off window scroll lock. + */ +function disableScrollLockFn() { + // ignore + if (scrollLock === 0) return; + + // decrement counter + scrollLock -= 1; + + // remove lock + if (scrollLock === 0) { + var win = window, + doc = document; + + jqLite.removeClass(doc.body, scrollLockCls); + win.scrollTo(scrollLockPos.left, scrollLockPos.top); + } +} + +/** + * Define the module API + */ +module.exports = { + /** Create callback closures */ + callback: callbackFn, + + /** Classnames object to string */ + classNames: classNamesFn, + + /** Disable scroll lock */ + disableScrollLock: disableScrollLockFn, + + /** Dispatch event */ + dispatchEvent: dispatchEventFn, + + /** Enable scroll lock */ + enableScrollLock: enableScrollLockFn, + + /** Log messages to the console when debug is turned on */ + log: logFn, + + /** Load CSS text as new stylesheet */ + loadStyle: loadStyleFn, + + /** Register muiNodeInserted handler */ + onNodeInserted: onNodeInsertedFn, + + /** Raise MUI error */ + raiseError: raiseErrorFn, + + /** Support Pointer Events check */ + supportsPointerEvents: supportsPointerEventsFn +}; + +},{"../config":2,"./jqLite":4}],6:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _angular = window.angular; + +var _angular2 = babelHelpers.interopRequireDefault(_angular); + +var moduleName = 'mui.appbar'; /** + * MUI Angular Appbar Component + * @module angular/appbar + */ + +_angular2.default.module(moduleName, []).directive('muiAppbar', function () { + return { + restrict: 'AE', + transclude: true, + replace: true, + template: '
', + link: function link(scope, element, attrs, controller, transcludeFn) { + // use transcludeFn to pass ng-controller on parent element + transcludeFn(scope, function (clone) { + element.append(clone); + }); + } + }; +}); + +/** Define module API */ +exports.default = moduleName; +module.exports = exports['default']; + +},{"angular":"aeQg5j"}],7:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _angular = window.angular; + +var _angular2 = babelHelpers.interopRequireDefault(_angular); + +var _jqLite = require('../js/lib/jqLite'); + +var jqLite = babelHelpers.interopRequireWildcard(_jqLite); +/** + * MUI Angular Button Component + * @module angular/button + */ + +var moduleName = 'mui.button'; + +_angular2.default.module(moduleName, []).directive('muiButton', function () { + return { + restrict: 'AE', + scope: { + type: '@?' + }, + replace: true, + template: '', + transclude: true, + link: function link(scope, element, attrs) { + var isUndef = _angular2.default.isUndefined, + el = element[0]; + + // disable MUI js + el._muiDropdown = true; + el._muiRipple = true; + + // handle disabled attribute + if (!isUndef(attrs.disabled) && isUndef(attrs.ngDisabled)) { + element.prop('disabled', true); + } + + // set button styles + _angular2.default.forEach(['variant', 'color', 'size'], function (attrName) { + var attrVal = attrs[attrName]; + if (attrVal) element.addClass('mui-btn--' + attrVal); + }); + } + }; +}).directive('muiRipple', ['$timeout', function ($timeout) { + return { + restrict: 'A', + link: function link(scope, element, attrs) { + var rippleClass = 'mui-ripple-effect'; + + /** + * onmousedown ripple effect + * @param {event} mousedown event + */ + element.on('mousedown', function (event) { + if (element.prop('disabled')) return; + + var offset = jqLite.offset(element[0]), + xPos = event.pageX - offset.left, + yPos = event.pageY - offset.top, + diameter, + radius; + + diameter = offset.height; + if (element.hasClass('mui-btn--fab')) diameter = offset.height / 2; + radius = diameter / 2; + + // ripple Dom position + var rippleStyle = { + height: diameter + 'px', + width: diameter + 'px', + top: yPos - radius + 'px', + left: xPos - radius + 'px' + }; + + var ripple = _angular2.default.element('
').addClass(rippleClass); + for (var style in rippleStyle) { + ripple.css(style, rippleStyle[style]); + } + + element.append(ripple); + + // remove after delay + $timeout(function () { + ripple.remove(); + }, 2000); + }); + } + }; +}]); + +/** Define module API */ +exports.default = moduleName; +module.exports = exports['default']; + +},{"../js/lib/jqLite":4,"angular":"aeQg5j"}],8:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _angular = window.angular; + +var _angular2 = babelHelpers.interopRequireDefault(_angular); + +var moduleName = 'mui.caret'; /** + * MUI Angular Caret Component + * @module angular/caret + */ + +_angular2.default.module(moduleName, []).directive('muiCaret', function () { + return { + restrict: 'AE', + replace: true, + template: '' + }; +}); + +/** Define module API */ +exports.default = moduleName; +module.exports = exports['default']; + +},{"angular":"aeQg5j"}],9:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _angular = window.angular; + +var _angular2 = babelHelpers.interopRequireDefault(_angular); + +var moduleName = 'mui.checkbox'; /** + * MUI Angular Checkbox Component + * @module angular/checkox + */ + +_angular2.default.module(moduleName, []).directive('muiCheckbox', function () { + return { + restrict: 'AE', + replace: true, + require: ['?ngModel'], + scope: { + label: '@', + name: '@', + value: '@', + ngModel: '=', + ngDisabled: '=' + }, + template: '
' + ' ' + '
' + }; +}); + +/** Define module API */ +exports.default = moduleName; +module.exports = exports['default']; + +},{"angular":"aeQg5j"}],10:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _angular = window.angular; + +var _angular2 = babelHelpers.interopRequireDefault(_angular); + +var moduleName = 'mui.col'; /** + * MUI Angular Col (Grid) Component + * @module angular/col + */ + +_angular2.default.module(moduleName, []).directive('muiCol', function () { + return { + restrict: 'AE', + scope: true, + replace: true, + template: '
', + transclude: true, + link: function link(scope, element, attrs, controller, transcludeFn) { + // use transcludeFn to pass ng-controller on parent element + transcludeFn(scope, function (clone) { + element.append(clone); + }); + + // iterate through breakpoints + var breakpoints = { + 'xs': 'mui-col-xs-', + 'sm': 'mui-col-sm-', + 'md': 'mui-col-md-', + 'lg': 'mui-col-lg-', + 'xs-offset': 'mui-col-xs-offset-', + 'sm-offset': 'mui-col-sm-offset-', + 'md-offset': 'mui-col-md-offset-', + 'lg-offset': 'mui-col-lg-offset-' + }; + + _angular2.default.forEach(breakpoints, function (value, key) { + var attrVal = attrs[attrs.$normalize(key)]; + if (attrVal) element.addClass(value + attrVal); + }); + } + }; +}); + +/** Define module API */ +exports.default = moduleName; +module.exports = exports['default']; + +},{"angular":"aeQg5j"}],11:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _angular = window.angular; + +var _angular2 = babelHelpers.interopRequireDefault(_angular); + +var moduleName = 'mui.container'; /** + * MUI Angular Container Component + * @module angular/container + */ + +_angular2.default.module(moduleName, []).directive('muiContainer', function () { + return { + restrict: 'AE', + template: '
', + transclude: true, + scope: true, + replace: true, + link: function link(scope, element, attrs, controller, transcludeFn) { + // use transcludeFn to pass ng-controller on parent element + transcludeFn(scope, function (clone) { + element.append(clone); + }); + + // handle fluid containers + if (!_angular2.default.isUndefined(attrs.fluid)) { + element.removeClass('mui-container').addClass('mui-container-fluid'); + } + } + }; +}); + +/** Define module API */ +exports.default = moduleName; +module.exports = exports['default']; + +},{"angular":"aeQg5j"}],12:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _angular = window.angular; + +var _angular2 = babelHelpers.interopRequireDefault(_angular); + +var moduleName = 'mui.divider'; /** + * MUI Angular Divider Component + * @module angular/divider + */ + +_angular2.default.module(moduleName, []).directive('muiDivider', function () { + return { + restrict: 'AE', + replace: true, + compile: function compile(tElement, tAttrs) { + tElement.addClass('mui-divider'); + } + }; +}); + +/** Define module API */ +exports.default = moduleName; +module.exports = exports['default']; + +},{"angular":"aeQg5j"}],13:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _angular = window.angular; + +var _angular2 = babelHelpers.interopRequireDefault(_angular); + +var moduleName = 'mui.dropdown-item'; /** + * MUI Angular DropdownItem Component + * @module angular/dropdown-item + */ + +_angular2.default.module(moduleName, []).directive('muiDropdownItem', function () { + return { + restrict: 'AE', + replace: true, + scope: { + link: '@' + }, + transclude: true, + template: '
  • ' + }; +}); + +/** Define module API */ +exports.default = moduleName; +module.exports = exports['default']; + +},{"angular":"aeQg5j"}],14:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _angular = window.angular; + +var _angular2 = babelHelpers.interopRequireDefault(_angular); + +var moduleName = 'mui.dropdown'; /** + * MUI Angular Dropdown Component + * @module angular/dropdown + */ + +_angular2.default.module(moduleName, []).directive('muiDropdown', ['$timeout', '$compile', function ($timeout, $compile) { + return { + restrict: 'AE', + transclude: true, + replace: true, + scope: { + variant: '@', + color: '@', + size: '@', + open: '=?', + ngDisabled: '=' + }, + template: '
    ' + '' + '
      ' + '
      ', + link: function link(scope, element, attrs) { + var dropdownClass = 'mui-dropdown', + menuClass = 'mui-dropdown__menu', + openClass = 'mui--is-open', + rightClass = 'mui-dropdown__menu--right', + isUndef = _angular2.default.isUndefined, + menuEl, + buttonEl; + + // save references + menuEl = _angular2.default.element(element[0].querySelector('.' + menuClass)); + buttonEl = _angular2.default.element(element[0].querySelector('.mui-btn')); + + menuEl.css('margin-top', '-3px'); + + // handle is-open + if (!isUndef(attrs.open)) scope.open = true; + + // handle disabled + if (!isUndef(attrs.disabled)) { + buttonEl.attr('disabled', true); + } + + // handle right-align + if (!isUndef(attrs.rightAlign)) menuEl.addClass(rightClass); + + // handle no-caret + if (!isUndef(attrs.noCaret)) buttonEl.html(attrs.label);else buttonEl.html(attrs.label + ' '); + + function closeDropdownFn() { + scope.open = false; + scope.$apply(); + } + + // handle menu open + scope.$watch('open', function (newValue) { + if (newValue === true) { + menuEl.addClass(openClass); + document.addEventListener('click', closeDropdownFn); + } else if (newValue === false) { + menuEl.removeClass(openClass); + document.removeEventListener('click', closeDropdownFn); + } + }); + + // click handler + scope.onClick = function ($event) { + // exit if disabled + if (scope.disabled) return; + + // prevent form submission + $event.preventDefault(); + $event.stopPropagation(); + + // toggle open + if (scope.open) scope.open = false;else scope.open = true; + }; + } + }; +}]); + +/** Define module API */ +exports.default = moduleName; +module.exports = exports['default']; + +},{"angular":"aeQg5j"}],15:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _angular = window.angular; + +var _angular2 = babelHelpers.interopRequireDefault(_angular); + +var moduleName = 'mui.form'; /** + * MUI Angular Form Directive + * @module angular/form + */ + +_angular2.default.module(moduleName, []).directive('muiFormInline', function () { + return { + restrict: 'A', + link: function link(scope, element, attrs) { + element.addClass('mui-form--inline'); + } + }; +}); + +/** Define module API */ +exports.default = moduleName; +module.exports = exports['default']; + +},{"angular":"aeQg5j"}],16:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _angular = window.angular; + +var _angular2 = babelHelpers.interopRequireDefault(_angular); + +var moduleName = 'mui.input', + emptyClass = 'mui--is-empty', + notEmptyClass = 'mui--is-not-empty', + dirtyClass = 'mui--is-dirty'; + +/** + * Handle empty/not-empty/dirty classes. + * @param {Element} elem - The angular-wrapped DOM element. + */ +/** + * MUI Angular Input and Textarea Components + * @module angular/input + */ + +function handleEmptyClasses(inputEl, value) { + if (value) inputEl.removeClass(emptyClass).addClass(notEmptyClass);else inputEl.removeClass(notEmptyClass).addClass(emptyClass); +} + +/** + * Build directive function. + * @param {Boolean} isTextArea + */ +function inputFactory(isTextArea) { + var emptyClass = 'mui--is-empty', + notEmptyClass = 'mui--is-not-empty', + dirtyClass = 'mui--is-dirty', + scopeArgs, + template; + + // defaults + scopeArgs = { + floatLabel: '@', + hint: '@', + label: '@', + ngDisabled: '=', + ngModel: '=' + }; + + template = '
      '; + + // element-specific + if (!isTextArea) { + scopeArgs.type = '@'; + + template += ''; + } else { + scopeArgs.rows = '@'; + + template += ''; + } + + // update template + template += '
      '; + + // directive function + return ['$timeout', function ($timeout) { + return { + restrict: 'AE', + require: ['ngModel'], + scope: scopeArgs, + replace: true, + template: template, + link: function link(scope, element, attrs, controllers) { + var inputEl = element.find('input') || element.find('textarea'), + labelEl = element.find('label'), + ngModelCtrl = controllers[0], + formCtrl = controllers[1], + isUndef = _angular2.default.isUndefined, + el = inputEl[0]; + + // disable MUI js + if (el) el._muiTextfield = true; + + // remove attributes from wrapper + element.removeAttr('ng-change'); + element.removeAttr('ng-model'); + + // scope defaults + if (!isTextArea) scope.type = scope.type || 'text';else scope.rows = scope.rows || 2; + + // autofocus + if (!isUndef(attrs.autofocus)) inputEl[0].focus(); + + // required + if (!isUndef(attrs.required)) inputEl.prop('required', true); + + // invalid + if (!isUndef(attrs.invalid)) inputEl.addClass('mui--is-invalid'); + + // set is-empty|is-no-empty + handleEmptyClasses(inputEl, scope.ngModel); + + // float-label + if (!isUndef(scope.floatLabel)) { + element.addClass('mui-textfield--float-label'); + + $timeout(function () { + labelEl.css({ + 'transition': '.15s ease-out', + '-webkit-transition': '.15s ease-out', + '-moz-transition': '.15s ease-out', + '-o-transition': '.15s ease-out', + '-ms-transition': '.15s ease-out' + }); + }, 150); + } + + // handle changes + scope.onChange = function () { + var val = scope.ngModel; + + // trigger ng-change + if (ngModelCtrl) ngModelCtrl.$setViewValue(val); + + // set is-empty|is-no-empty + handleEmptyClasses(inputEl, val); + + // add is-dirty + inputEl.addClass(dirtyClass); + }; + + // handle focus event + scope.onFocus = function () { + inputEl.addClass(dirtyClass); + }; + } + }; + }]; +} + +_angular2.default.module(moduleName, []).directive('muiInput', inputFactory(false)).directive('muiTextarea', inputFactory(true)); + +/** Define module API */ +exports.default = moduleName; +module.exports = exports['default']; + +},{"angular":"aeQg5j"}],17:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _angular = window.angular; + +var _angular2 = babelHelpers.interopRequireDefault(_angular); + +var moduleName = 'mui.panel'; /** + * MUI Angular Panel Component + * @module angular/panel + */ + +_angular2.default.module(moduleName, []).directive('muiPanel', function () { + return { + restrict: 'AE', + replace: true, + scope: true, + template: '
      ', + transclude: true, + link: function link(scope, element, attr, controller, transcludeFn) { + transcludeFn(scope, function (clone) { + element.append(clone); + }); + } + }; +}); + +/** Define module API */ +exports.default = moduleName; +module.exports = exports['default']; + +},{"angular":"aeQg5j"}],18:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _angular = window.angular; + +var _angular2 = babelHelpers.interopRequireDefault(_angular); + +var moduleName = 'mui.radio'; /** + * MUI Angular Radio Component + * @module angular/radio + */ + +_angular2.default.module(moduleName, []).directive('muiRadio', function () { + return { + restrict: 'AE', + replace: true, + require: ['?ngModel'], + scope: { + label: '@', + name: '@', + value: '@', + ngModel: '=', + ngDisabled: '=' + }, + template: '
      ' + ' ' + '
      ' + }; +}); + +/** Define module API */ +exports.default = moduleName; +module.exports = exports['default']; + +},{"angular":"aeQg5j"}],19:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _angular = window.angular; + +var _angular2 = babelHelpers.interopRequireDefault(_angular); + +var moduleName = 'mui.row'; /** + * MUI Angular Grid/Row Module + * @module angular/row.js + */ + +_angular2.default.module('mui.row', []).directive('muiRow', function () { + return { + restrict: 'AE', + scope: true, + replace: true, + template: '
      ', + transclude: true, + link: function link(scope, element, attr, controller, transcludeFn) { + transcludeFn(scope, function (clone) { + element.append(clone); + }); + } + }; +}); + +/** Define module API */ +exports.default = moduleName; +module.exports = exports['default']; + +},{"angular":"aeQg5j"}],20:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _angular = window.angular; + +var _angular2 = babelHelpers.interopRequireDefault(_angular); + +var _forms = require('../js/lib/forms'); + +var formlib = babelHelpers.interopRequireWildcard(_forms); + +var _util = require('../js/lib/util'); + +var util = babelHelpers.interopRequireWildcard(_util); + +var _jqLite = require('../js/lib/jqLite'); + +var jqLite = babelHelpers.interopRequireWildcard(_jqLite); +/** + * MUI Angular Select Component + * @module angular/select + */ + +var moduleName = 'mui.select'; + +_angular2.default.module(moduleName, []).directive('muiSelect', ['$timeout', function ($timeout) { + return { + restrict: 'AE', + require: ['ngModel'], + scope: { + name: '@', + ngDisabled: '=', + ngModel: '=' + }, + replace: true, + transclude: true, + template: '
      ' + '' + '
      ' + '
      {{option.label}}
      ' + '
      ' + '
      ', + link: function link(scope, element, attrs, controller, transcludeFn) { + var wrapperEl = element, + menuEl = element.find('div'), + selectEl = element.find('select'), + isUndef = _angular2.default.isUndefined, + cacheIndex; + + // disable MUI js + selectEl[0]._muiSelect = true; + + // init scope + scope.options = []; + scope.isOpen = false; + scope.useDefault = false; + scope.origTabIndex = selectEl[0].tabIndex; + scope.menuIndex = 0; + + // handle `use-default` attribute + if (!isUndef(attrs.useDefault)) scope.useDefault = true; + + // make wrapper focusable + wrapperEl.prop('tabIndex', -1); + + // extract
      '}}),n["default"]=a,t.exports=n["default"]},{angular:"aeQg5j"}],10:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i=window.angular,r=babelHelpers.interopRequireDefault(i),a="mui.col";r["default"].module(a,[]).directive("muiCol",function(){return{restrict:"AE",scope:!0,replace:!0,template:"
      ",transclude:!0,link:function(e,t,n,i,a){a(e,function(e){t.append(e)});var l={xs:"mui-col-xs-",sm:"mui-col-sm-",md:"mui-col-md-",lg:"mui-col-lg-","xs-offset":"mui-col-xs-offset-","sm-offset":"mui-col-sm-offset-","md-offset":"mui-col-md-offset-","lg-offset":"mui-col-lg-offset-"};r["default"].forEach(l,function(e,i){var r=n[n.$normalize(i)];r&&t.addClass(e+r)})}}}),n["default"]=a,t.exports=n["default"]},{angular:"aeQg5j"}],11:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i=window.angular,r=babelHelpers.interopRequireDefault(i),a="mui.container";r["default"].module(a,[]).directive("muiContainer",function(){return{restrict:"AE",template:'
      ',transclude:!0,scope:!0,replace:!0,link:function(e,t,n,i,a){a(e,function(e){t.append(e)}),r["default"].isUndefined(n.fluid)||t.removeClass("mui-container").addClass("mui-container-fluid")}}}),n["default"]=a,t.exports=n["default"]},{angular:"aeQg5j"}],12:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i=window.angular,r=babelHelpers.interopRequireDefault(i),a="mui.divider";r["default"].module(a,[]).directive("muiDivider",function(){return{restrict:"AE",replace:!0,compile:function(e,t){e.addClass("mui-divider")}}}),n["default"]=a,t.exports=n["default"]},{angular:"aeQg5j"}],13:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i=window.angular,r=babelHelpers.interopRequireDefault(i),a="mui.dropdown-item";r["default"].module(a,[]).directive("muiDropdownItem",function(){return{restrict:"AE",replace:!0,scope:{link:"@"},transclude:!0,template:'
    • '}}),n["default"]=a,t.exports=n["default"]},{angular:"aeQg5j"}],14:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i=window.angular,r=babelHelpers.interopRequireDefault(i),a="mui.dropdown";r["default"].module(a,[]).directive("muiDropdown",["$timeout","$compile",function(e,t){return{restrict:"AE",transclude:!0,replace:!0,scope:{variant:"@",color:"@",size:"@",open:"=?",ngDisabled:"="},template:'
        ',link:function(e,t,n){function i(){e.open=!1,e.$apply()}var a,l,o="mui-dropdown__menu",u="mui--is-open",s="mui-dropdown__menu--right",d=r["default"].isUndefined;a=r["default"].element(t[0].querySelector("."+o)),l=r["default"].element(t[0].querySelector(".mui-btn")),a.css("margin-top","-3px"),d(n.open)||(e.open=!0),d(n.disabled)||l.attr("disabled",!0),d(n.rightAlign)||a.addClass(s),d(n.noCaret)?l.html(n.label+" "):l.html(n.label),e.$watch("open",function(e){e===!0?(a.addClass(u),document.addEventListener("click",i)):e===!1&&(a.removeClass(u),document.removeEventListener("click",i))}),e.onClick=function(t){e.disabled||(t.preventDefault(),t.stopPropagation(),e.open?e.open=!1:e.open=!0)}}}}]),n["default"]=a,t.exports=n["default"]},{angular:"aeQg5j"}],15:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i=window.angular,r=babelHelpers.interopRequireDefault(i),a="mui.form";r["default"].module(a,[]).directive("muiFormInline",function(){return{restrict:"A",link:function(e,t,n){t.addClass("mui-form--inline")}}}),n["default"]=a,t.exports=n["default"]},{angular:"aeQg5j"}],16:[function(e,t,n){"use strict";function i(e,t){t?e.removeClass(u).addClass(s):e.removeClass(s).addClass(u)}function r(e){var t,n,r="mui--is-dirty";return t={floatLabel:"@",hint:"@",label:"@",ngDisabled:"=",ngModel:"="},n='
        ',e?(t.rows="@",n+=''):(t.type="@",n+=''),n+="
        ",["$timeout",function(a){return{restrict:"AE",require:["ngModel"],scope:t,replace:!0,template:n,link:function(t,n,o,u){var s=n.find("input")||n.find("textarea"),d=n.find("label"),c=u[0],f=(u[1],l["default"].isUndefined),p=s[0];p&&(p._muiTextfield=!0),n.removeAttr("ng-change"),n.removeAttr("ng-model"),e?t.rows=t.rows||2:t.type=t.type||"text",f(o.autofocus)||s[0].focus(),f(o.required)||s.prop("required",!0),f(o.invalid)||s.addClass("mui--is-invalid"),i(s,t.ngModel),f(t.floatLabel)||(n.addClass("mui-textfield--float-label"),a(function(){d.css({transition:".15s ease-out","-webkit-transition":".15s ease-out","-moz-transition":".15s ease-out","-o-transition":".15s ease-out","-ms-transition":".15s ease-out"})},150)),t.onChange=function(){var e=t.ngModel;c&&c.$setViewValue(e),i(s,e),s.addClass(r)},t.onFocus=function(){s.addClass(r)}}}}]}Object.defineProperty(n,"__esModule",{value:!0});var a=window.angular,l=babelHelpers.interopRequireDefault(a),o="mui.input",u="mui--is-empty",s="mui--is-not-empty";l["default"].module(o,[]).directive("muiInput",r(!1)).directive("muiTextarea",r(!0)),n["default"]=o,t.exports=n["default"]},{angular:"aeQg5j"}],17:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i=window.angular,r=babelHelpers.interopRequireDefault(i),a="mui.panel";r["default"].module(a,[]).directive("muiPanel",function(){return{restrict:"AE",replace:!0,scope:!0,template:'
        ',transclude:!0,link:function(e,t,n,i,r){r(e,function(e){t.append(e)})}}}),n["default"]=a,t.exports=n["default"]},{angular:"aeQg5j"}],18:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i=window.angular,r=babelHelpers.interopRequireDefault(i),a="mui.radio";r["default"].module(a,[]).directive("muiRadio",function(){return{restrict:"AE",replace:!0,require:["?ngModel"],scope:{label:"@",name:"@",value:"@",ngModel:"=",ngDisabled:"="},template:'
        '}}),n["default"]=a,t.exports=n["default"]},{angular:"aeQg5j"}],19:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i=window.angular,r=babelHelpers.interopRequireDefault(i),a="mui.row";r["default"].module("mui.row",[]).directive("muiRow",function(){return{restrict:"AE",scope:!0,replace:!0,template:'
        ',transclude:!0,link:function(e,t,n,i,r){r(e,function(e){t.append(e)})}}}),n["default"]=a,t.exports=n["default"]},{angular:"aeQg5j"}],20:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i=window.angular,r=babelHelpers.interopRequireDefault(i),a=e("../js/lib/forms"),l=babelHelpers.interopRequireWildcard(a),o=e("../js/lib/util"),u=babelHelpers.interopRequireWildcard(o),s=e("../js/lib/jqLite"),d=babelHelpers.interopRequireWildcard(s),c="mui.select";r["default"].module(c,[]).directive("muiSelect",["$timeout",function(e){return{restrict:"AE",require:["ngModel"],scope:{name:"@",ngDisabled:"=",ngModel:"="},replace:!0,transclude:!0,template:'
        {{option.label}}
        ',link:function(t,n,i,a,o){function s(){t.isOpen=!1,t.$digest()}var c=n,f=n.find("div"),p=n.find("select"),m=r["default"].isUndefined;p[0]._muiSelect=!0,t.options=[],t.isOpen=!1,t.useDefault=!1,t.origTabIndex=p[0].tabIndex,t.menuIndex=0,m(i.useDefault)||(t.useDefault=!0),c.prop("tabIndex",-1),o(function(e){var n,i;for(i in e)n=e[i],"MUI-OPTION"===n.tagName&&t.options.push({value:n.getAttribute("value"),label:n.getAttribute("label")})}),t.onClick=function(){t.useDefault!==!0&&(t.isOpen=!0,c[0].focus())},t.onFocus=function(){if(t.useDefault!==!0){var e=p[0];t.origTabIndex=e.tabIndex,e.tabIndex=-1,c[0].focus()}},t.onMousedown=function(e){t.useDefault!==!0&&e.preventDefault()},t.onWrapperBlur=function(){p[0].tabIndex=t.origTabIndex},t.onWrapperFocus=function(e){return p[0].disabled?c[0].blur():void 0},t.onWrapperKeydown=function(e){var n=e.keyCode;if(t.isOpen===!1)32!==n&&38!==n&&40!==n||(e.preventDefault(),t.isOpen=!0);else{if(9===n)return t.isOpen=!1;27!==n&&40!==n&&38!==n&&13!==n||e.preventDefault(),27===n?t.isOpen=!1:40===n?t.menuIndex0&&(t.menuIndex-=1):13===n&&(t.ngModel=t.options[t.menuIndex].value,t.isOpen=!1)}},t.chooseOption=function(e){t.ngModel=e.value,t.isOpen=!1},t.$watch("isOpen",function(i,r){if(i!==r&&t.useDefault!==!0)if(i===!0){u.enableScrollLock();var a,o=t.ngModel,c=t.options,m=c.length;for(a=0;m>a;a++)if(c[a].value===o){t.menuIndex=a;break}var v=l.getMenuPositionalCSS(n[0],t.options.length,t.menuIndex);f.css(v),d.scrollTop(f[0],v.scrollTop),e(function(){d.on(document,"click",s),d.on(window,"resize",s)})}else p[0].focus(),u.disableScrollLock(),d.off(document,"click",s),d.off(window,"resize",s)})}}}]),n["default"]=c,t.exports=n["default"]},{"../js/lib/forms":3,"../js/lib/jqLite":4,"../js/lib/util":5,angular:"aeQg5j"}],21:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i=window.angular,r=babelHelpers.interopRequireDefault(i),a=e("../js/lib/jqLite"),l=(babelHelpers.interopRequireWildcard(a),"mui.tabs");r["default"].module(l,[]).directive("muiTabs",function(){return{restrict:"EA",transclude:!0,scope:{selectedId:"=?selected",onChange:"&?"},template:'',controller:["$scope",function(e){var t=0;e.tabs=[],this.addTab=function(n){var i=t;return t+=1,e.tabs.push({label:n.label}),n.isActive&&(e.selectedId=i),i}}],link:function(e,t,n,i,a){var l=r["default"].isUndefined;l(e.selectedId)&&(e.selectedId=0),e.justified=!1,l(n.justified)||(e.justified=!0),e.onClick=function(t){t!==e.selectedId&&(e.selectedId=t,e.onChange&&e.$$postDigest(e.onChange))},a(e,function(e){t.append(e)})}}}).directive("muiTab",["$parse",function(e){return{require:"^?muiTabs",restrict:"AE",scope:{active:"&?",label:"@?"},transclude:!0,template:'
        ',link:function(t,n,i,r,a){var l=e(i.onSelect),o=e(i.onDeselect),u=t.$parent.$parent;t.tabId=null,r&&(t.tabId=r.addTab({label:t.label,isActive:Boolean(t.active)})),a(t,function(e){n.find("div").append(e)}),t.$parent.$watch("selectedId",function(e,n){e!==n&&(e===t.tabId&&l(u),n===t.tabId&&o(u))})}}}]),n["default"]=l,t.exports=n["default"]},{"../js/lib/jqLite":4,angular:"aeQg5j"}]},{},[1]); \ No newline at end of file diff --git a/platforms/android/assets/www/libs/mui/packages/cdn/css/mui.css b/platforms/android/assets/www/libs/mui/packages/cdn/css/mui.css new file mode 100644 index 0000000..2a65b9e --- /dev/null +++ b/platforms/android/assets/www/libs/mui/packages/cdn/css/mui.css @@ -0,0 +1,2522 @@ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS and IE text size adjust after device 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, +menu, +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/10/11, Safari, and Firefox < 22. + */ +[hidden], +template { + display: none; +} + +/* Links + ========================================================================== */ +/** + * Remove the gray background color from active links in IE 10. + */ +a { + background-color: transparent; +} + +/** + * Improve readability of focused elements when they are also in an + * active/hover state. + */ +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 { + 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"], +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. + */ +input[type="search"] { + -webkit-appearance: textfield; + /* 1 */ + box-sizing: content-box; + /* 2 */ +} + +/** + * 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; +} + +/** + * MUI Colors module + */ +/** + * MUI Reboot + */ +* { + box-sizing: border-box; +} + +*:before, +*:after { + box-sizing: border-box; +} + +html { + font-size: 10px; + -webkit-tap-highlight-color: transparent; +} + +body { + font-family: Arial, Verdana, Tahoma; + font-size: 14px; + font-weight: 400; + line-height: 1.429; + color: rgba(0, 0, 0, 0.87); + background-color: #FFF; +} + +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +a { + color: #2196F3; + text-decoration: none; +} + +a:hover, a:focus { + color: #1976D2; + text-decoration: underline; +} + +a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +p { + margin: 0 0 10px; +} + +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} + +figure { + margin: 0; +} + +img { + vertical-align: middle; +} + +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + height: 1px; + background-color: rgba(0, 0, 0, 0.12); +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 10px; + font-size: 21px; + color: rgba(0, 0, 0, 0.87); + line-height: inherit; + border: 0; +} + +input[type="search"] { + box-sizing: border-box; + -webkit-appearance: none; +} + +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +input[type="radio"]:disabled, +input[type="checkbox"]:disabled { + cursor: not-allowed; +} + +strong { + font-weight: 700; +} + +abbr[title] { + cursor: help; + border-bottom: 1px dotted #2196F3; +} + +h1, h2, h3 { + margin-top: 20px; + margin-bottom: 10px; +} + +h4, h5, h6 { + margin-top: 10px; + margin-bottom: 10px; +} + +/** + * MUI Appbar + */ +.mui--appbar-height { + height: 56px; +} + +.mui--appbar-min-height, .mui-appbar { + min-height: 56px; +} + +.mui--appbar-line-height { + line-height: 56px; +} + +.mui--appbar-top { + top: 56px; +} + +@media (orientation: landscape) and (max-height: 480px) { + .mui--appbar-height { + height: 48px; + } + .mui--appbar-min-height, .mui-appbar { + min-height: 48px; + } + .mui--appbar-line-height { + line-height: 48px; + } + .mui--appbar-top { + top: 48px; + } +} + +@media (min-width: 480px) { + .mui--appbar-height { + height: 64px; + } + .mui--appbar-min-height, .mui-appbar { + min-height: 64px; + } + .mui--appbar-line-height { + line-height: 64px; + } + .mui--appbar-top { + top: 64px; + } +} + +.mui-appbar { + background-color: #2196F3; + color: #FFF; +} + +/** + * MUI Buttons + */ +.mui-btn { + animation-duration: 0.0001s; + animation-name: mui-node-inserted; + font-weight: 500; + font-size: 14px; + line-height: 18px; + text-transform: uppercase; + color: rgba(0, 0, 0, 0.87); + background-color: #FFF; + transition: all 0.2s ease-in-out; + display: inline-block; + height: 36px; + padding: 0 26px; + margin-top: 6px; + margin-bottom: 6px; + border: none; + border-radius: 2px; + cursor: pointer; + -ms-touch-action: manipulation; + touch-action: manipulation; + background-image: none; + text-align: center; + line-height: 36px; + vertical-align: middle; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + font-size: 14px; + letter-spacing: 0.03em; + position: relative; + overflow: hidden; +} + +.mui-btn:hover, .mui-btn:focus, .mui-btn:active { + color: rgba(0, 0, 0, 0.87); + background-color: white; +} + +.mui-btn[disabled]:hover, .mui-btn[disabled]:focus, .mui-btn[disabled]:active { + color: rgba(0, 0, 0, 0.87); + background-color: #FFF; +} + +.mui-btn.mui-btn--flat { + color: rgba(0, 0, 0, 0.87); + background-color: transparent; +} + +.mui-btn.mui-btn--flat:hover, .mui-btn.mui-btn--flat:focus, .mui-btn.mui-btn--flat:active { + color: rgba(0, 0, 0, 0.87); + background-color: #f2f2f2; +} + +.mui-btn.mui-btn--flat[disabled]:hover, .mui-btn.mui-btn--flat[disabled]:focus, .mui-btn.mui-btn--flat[disabled]:active { + color: rgba(0, 0, 0, 0.87); + background-color: transparent; +} + +.mui-btn:hover, .mui-btn:focus, .mui-btn:active { + outline: 0; + text-decoration: none; + color: rgba(0, 0, 0, 0.87); +} + +.mui-btn:hover, .mui-btn:focus { + box-shadow: 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); +} + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mui-btn:hover, .mui-btn:focus { + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.12), -1px 0px 2px rgba(0, 0, 0, 0.12), 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); + } +} + +.mui-btn:active { + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); +} + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mui-btn:active { + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.12), -1px 0px 2px rgba(0, 0, 0, 0.12), 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); + } +} + +.mui-btn:disabled, .mui-btn.mui--is-disabled { + cursor: not-allowed; + pointer-events: none; + opacity: 0.60; + box-shadow: none; +} + +.mui-btn + .mui-btn { + margin-left: 8px; +} + +.mui-btn--flat { + background-color: transparent; +} + +.mui-btn--flat:hover, .mui-btn--flat:focus, .mui-btn--flat:active { + box-shadow: none; + background-color: #f2f2f2; +} + +.mui-btn--raised, .mui-btn--fab { + box-shadow: 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); +} + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mui-btn--raised, .mui-btn--fab { + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.12), -1px 0px 2px rgba(0, 0, 0, 0.12), 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); + } +} + +.mui-btn--raised:active, .mui-btn--fab:active { + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); +} + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mui-btn--raised:active, .mui-btn--fab:active { + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.12), -1px 0px 2px rgba(0, 0, 0, 0.12), 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); + } +} + +.mui-btn--fab { + position: relative; + padding: 0; + width: 55px; + height: 55px; + line-height: 55px; + border-radius: 50%; + z-index: 1; +} + +.mui-btn--primary { + color: #FFF; + background-color: #2196F3; +} + +.mui-btn--primary:hover, .mui-btn--primary:focus, .mui-btn--primary:active { + color: #FFF; + background-color: #39a1f4; +} + +.mui-btn--primary[disabled]:hover, .mui-btn--primary[disabled]:focus, .mui-btn--primary[disabled]:active { + color: #FFF; + background-color: #2196F3; +} + +.mui-btn--primary.mui-btn--flat { + color: #2196F3; + background-color: transparent; +} + +.mui-btn--primary.mui-btn--flat:hover, .mui-btn--primary.mui-btn--flat:focus, .mui-btn--primary.mui-btn--flat:active { + color: #2196F3; + background-color: #f2f2f2; +} + +.mui-btn--primary.mui-btn--flat[disabled]:hover, .mui-btn--primary.mui-btn--flat[disabled]:focus, .mui-btn--primary.mui-btn--flat[disabled]:active { + color: #2196F3; + background-color: transparent; +} + +.mui-btn--dark { + color: #FFF; + background-color: #424242; +} + +.mui-btn--dark:hover, .mui-btn--dark:focus, .mui-btn--dark:active { + color: #FFF; + background-color: #4f4f4f; +} + +.mui-btn--dark[disabled]:hover, .mui-btn--dark[disabled]:focus, .mui-btn--dark[disabled]:active { + color: #FFF; + background-color: #424242; +} + +.mui-btn--dark.mui-btn--flat { + color: #424242; + background-color: transparent; +} + +.mui-btn--dark.mui-btn--flat:hover, .mui-btn--dark.mui-btn--flat:focus, .mui-btn--dark.mui-btn--flat:active { + color: #424242; + background-color: #f2f2f2; +} + +.mui-btn--dark.mui-btn--flat[disabled]:hover, .mui-btn--dark.mui-btn--flat[disabled]:focus, .mui-btn--dark.mui-btn--flat[disabled]:active { + color: #424242; + background-color: transparent; +} + +.mui-btn--danger { + color: #FFF; + background-color: #F44336; +} + +.mui-btn--danger:hover, .mui-btn--danger:focus, .mui-btn--danger:active { + color: #FFF; + background-color: #f55a4e; +} + +.mui-btn--danger[disabled]:hover, .mui-btn--danger[disabled]:focus, .mui-btn--danger[disabled]:active { + color: #FFF; + background-color: #F44336; +} + +.mui-btn--danger.mui-btn--flat { + color: #F44336; + background-color: transparent; +} + +.mui-btn--danger.mui-btn--flat:hover, .mui-btn--danger.mui-btn--flat:focus, .mui-btn--danger.mui-btn--flat:active { + color: #F44336; + background-color: #f2f2f2; +} + +.mui-btn--danger.mui-btn--flat[disabled]:hover, .mui-btn--danger.mui-btn--flat[disabled]:focus, .mui-btn--danger.mui-btn--flat[disabled]:active { + color: #F44336; + background-color: transparent; +} + +.mui-btn--accent { + color: #FFF; + background-color: #FF4081; +} + +.mui-btn--accent:hover, .mui-btn--accent:focus, .mui-btn--accent:active { + color: #FFF; + background-color: #ff5a92; +} + +.mui-btn--accent[disabled]:hover, .mui-btn--accent[disabled]:focus, .mui-btn--accent[disabled]:active { + color: #FFF; + background-color: #FF4081; +} + +.mui-btn--accent.mui-btn--flat { + color: #FF4081; + background-color: transparent; +} + +.mui-btn--accent.mui-btn--flat:hover, .mui-btn--accent.mui-btn--flat:focus, .mui-btn--accent.mui-btn--flat:active { + color: #FF4081; + background-color: #f2f2f2; +} + +.mui-btn--accent.mui-btn--flat[disabled]:hover, .mui-btn--accent.mui-btn--flat[disabled]:focus, .mui-btn--accent.mui-btn--flat[disabled]:active { + color: #FF4081; + background-color: transparent; +} + +.mui-btn--small { + height: 30.6px; + line-height: 30.6px; + padding: 0 16px; + font-size: 13px; +} + +.mui-btn--large { + height: 54px; + line-height: 54px; + padding: 0 26px; + font-size: 14px; +} + +.mui-btn--fab.mui-btn--small { + width: 44px; + height: 44px; + line-height: 44px; +} + +.mui-btn--fab.mui-btn--large { + width: 75px; + height: 75px; + line-height: 75px; +} + +/** + * MUI Checkboxe and Radio Components + */ +.mui-radio, +.mui-checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} + +.mui-radio > label, +.mui-checkbox > label { + min-height: 20px; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} + +.mui-radio > label > input[type="radio"], +.mui-radio--inline > label > input[type="radio"], +.mui-checkbox > label > input[type="checkbox"], +.mui-checkbox--inline > label > input[type="checkbox"] { + position: absolute; + margin-left: -20px; + margin-top: 4px; +} + +.mui-radio + .mui-radio, +.mui-checkbox + .mui-checkbox { + margin-top: -5px; +} + +.mui-radio--inline, +.mui-checkbox--inline { + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + vertical-align: middle; + font-weight: normal; + cursor: pointer; +} + +.mui-radio--inline > input[type="radio"], +.mui-radio--inline > input[type="checkbox"], +.mui-radio--inline > label > input[type="radio"], +.mui-radio--inline > label > input[type="checkbox"], +.mui-checkbox--inline > input[type="radio"], +.mui-checkbox--inline > input[type="checkbox"], +.mui-checkbox--inline > label > input[type="radio"], +.mui-checkbox--inline > label > input[type="checkbox"] { + margin: 4px 0 0; + line-height: normal; +} + +.mui-radio--inline + .mui-radio--inline, +.mui-checkbox--inline + .mui-checkbox--inline { + margin-top: 0; + margin-left: 10px; +} + +/** + * MUI Container module + */ +.mui-container { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} + +.mui-container:before, .mui-container:after { + content: " "; + display: table; +} + +.mui-container:after { + clear: both; +} + +@media (min-width: 544px) { + .mui-container { + max-width: 570px; + } +} + +@media (min-width: 768px) { + .mui-container { + max-width: 740px; + } +} + +@media (min-width: 992px) { + .mui-container { + max-width: 960px; + } +} + +@media (min-width: 1200px) { + .mui-container { + max-width: 1170px; + } +} + +.mui-container-fluid { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} + +.mui-container-fluid:before, .mui-container-fluid:after { + content: " "; + display: table; +} + +.mui-container-fluid:after { + clear: both; +} + +/** + * MUI Divider Component and CSS Helpers + */ +.mui-divider { + display: block; + height: 1px; + background-color: rgba(0, 0, 0, 0.12); +} + +.mui--divider-top { + border-top: 1px solid rgba(0, 0, 0, 0.12); +} + +.mui--divider-bottom { + border-bottom: 1px solid rgba(0, 0, 0, 0.12); +} + +.mui--divider-left { + border-left: 1px solid rgba(0, 0, 0, 0.12); +} + +.mui--divider-right { + border-right: 1px solid rgba(0, 0, 0, 0.12); +} + +/** + * MUI Dropdown module + */ +.mui-dropdown { + display: inline-block; + position: relative; +} + +[data-mui-toggle="dropdown"] { + animation-duration: 0.0001s; + animation-name: mui-node-inserted; + outline: 0; +} + +.mui-dropdown__menu { + position: absolute; + top: 100%; + left: 0; + display: none; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + list-style: none; + font-size: 14px; + text-align: left; + background-color: #FFF; + border-radius: 2px; + z-index: 1; + background-clip: padding-box; +} + +.mui-dropdown__menu.mui--is-open { + display: block; +} + +.mui-dropdown__menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.429; + color: rgba(0, 0, 0, 0.87); + white-space: nowrap; +} + +.mui-dropdown__menu > li > a:hover, .mui-dropdown__menu > li > a:focus { + text-decoration: none; + color: rgba(0, 0, 0, 0.87); + background-color: #EEEEEE; +} + +.mui-dropdown__menu > .mui--is-disabled > a, .mui-dropdown__menu > .mui--is-disabled > a:hover, .mui-dropdown__menu > .mui--is-disabled > a:focus { + color: #EEEEEE; +} + +.mui-dropdown__menu > .mui--is-disabled > a:hover, .mui-dropdown__menu > .mui--is-disabled > a:focus { + text-decoration: none; + background-color: transparent; + background-image: none; + cursor: not-allowed; +} + +.mui-dropdown__menu--right { + left: auto; + right: 0; +} + +/** + * MUI Form Component + */ +@media (min-width: 544px) { + .mui-form--inline > .mui-textfield { + display: inline-block; + margin-bottom: 0; + } + .mui-form--inline > .mui-radio, + .mui-form--inline > .mui-checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .mui-form--inline > .mui-radio > label, + .mui-form--inline > .mui-checkbox > label { + padding-left: 0; + } + .mui-form--inline > .mui-radio > label > input[type="radio"], + .mui-form--inline > .mui-checkbox > label > input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .mui-form--inline > .mui-select { + display: inline-block; + } + .mui-form--inline > .mui-btn { + margin-bottom: 0; + margin-top: 0; + vertical-align: bottom; + } +} + +/** + * MUI Grid module + */ +.mui-row { + margin-left: -15px; + margin-right: -15px; +} + +.mui-row:before, .mui-row:after { + content: " "; + display: table; +} + +.mui-row:after { + clear: both; +} + +.mui-col-xs-1, .mui-col-sm-1, .mui-col-md-1, .mui-col-lg-1, .mui-col-xs-2, .mui-col-sm-2, .mui-col-md-2, .mui-col-lg-2, .mui-col-xs-3, .mui-col-sm-3, .mui-col-md-3, .mui-col-lg-3, .mui-col-xs-4, .mui-col-sm-4, .mui-col-md-4, .mui-col-lg-4, .mui-col-xs-5, .mui-col-sm-5, .mui-col-md-5, .mui-col-lg-5, .mui-col-xs-6, .mui-col-sm-6, .mui-col-md-6, .mui-col-lg-6, .mui-col-xs-7, .mui-col-sm-7, .mui-col-md-7, .mui-col-lg-7, .mui-col-xs-8, .mui-col-sm-8, .mui-col-md-8, .mui-col-lg-8, .mui-col-xs-9, .mui-col-sm-9, .mui-col-md-9, .mui-col-lg-9, .mui-col-xs-10, .mui-col-sm-10, .mui-col-md-10, .mui-col-lg-10, .mui-col-xs-11, .mui-col-sm-11, .mui-col-md-11, .mui-col-lg-11, .mui-col-xs-12, .mui-col-sm-12, .mui-col-md-12, .mui-col-lg-12 { + min-height: 1px; + padding-left: 15px; + padding-right: 15px; +} + +.mui-col-xs-1, .mui-col-xs-2, .mui-col-xs-3, .mui-col-xs-4, .mui-col-xs-5, .mui-col-xs-6, .mui-col-xs-7, .mui-col-xs-8, .mui-col-xs-9, .mui-col-xs-10, .mui-col-xs-11, .mui-col-xs-12 { + float: left; +} + +.mui-col-xs-1 { + width: 8.33333%; +} + +.mui-col-xs-2 { + width: 16.66667%; +} + +.mui-col-xs-3 { + width: 25%; +} + +.mui-col-xs-4 { + width: 33.33333%; +} + +.mui-col-xs-5 { + width: 41.66667%; +} + +.mui-col-xs-6 { + width: 50%; +} + +.mui-col-xs-7 { + width: 58.33333%; +} + +.mui-col-xs-8 { + width: 66.66667%; +} + +.mui-col-xs-9 { + width: 75%; +} + +.mui-col-xs-10 { + width: 83.33333%; +} + +.mui-col-xs-11 { + width: 91.66667%; +} + +.mui-col-xs-12 { + width: 100%; +} + +.mui-col-xs-offset-0 { + margin-left: 0%; +} + +.mui-col-xs-offset-1 { + margin-left: 8.33333%; +} + +.mui-col-xs-offset-2 { + margin-left: 16.66667%; +} + +.mui-col-xs-offset-3 { + margin-left: 25%; +} + +.mui-col-xs-offset-4 { + margin-left: 33.33333%; +} + +.mui-col-xs-offset-5 { + margin-left: 41.66667%; +} + +.mui-col-xs-offset-6 { + margin-left: 50%; +} + +.mui-col-xs-offset-7 { + margin-left: 58.33333%; +} + +.mui-col-xs-offset-8 { + margin-left: 66.66667%; +} + +.mui-col-xs-offset-9 { + margin-left: 75%; +} + +.mui-col-xs-offset-10 { + margin-left: 83.33333%; +} + +.mui-col-xs-offset-11 { + margin-left: 91.66667%; +} + +.mui-col-xs-offset-12 { + margin-left: 100%; +} + +@media (min-width: 544px) { + .mui-col-sm-1, .mui-col-sm-2, .mui-col-sm-3, .mui-col-sm-4, .mui-col-sm-5, .mui-col-sm-6, .mui-col-sm-7, .mui-col-sm-8, .mui-col-sm-9, .mui-col-sm-10, .mui-col-sm-11, .mui-col-sm-12 { + float: left; + } + .mui-col-sm-1 { + width: 8.33333%; + } + .mui-col-sm-2 { + width: 16.66667%; + } + .mui-col-sm-3 { + width: 25%; + } + .mui-col-sm-4 { + width: 33.33333%; + } + .mui-col-sm-5 { + width: 41.66667%; + } + .mui-col-sm-6 { + width: 50%; + } + .mui-col-sm-7 { + width: 58.33333%; + } + .mui-col-sm-8 { + width: 66.66667%; + } + .mui-col-sm-9 { + width: 75%; + } + .mui-col-sm-10 { + width: 83.33333%; + } + .mui-col-sm-11 { + width: 91.66667%; + } + .mui-col-sm-12 { + width: 100%; + } + .mui-col-sm-offset-0 { + margin-left: 0%; + } + .mui-col-sm-offset-1 { + margin-left: 8.33333%; + } + .mui-col-sm-offset-2 { + margin-left: 16.66667%; + } + .mui-col-sm-offset-3 { + margin-left: 25%; + } + .mui-col-sm-offset-4 { + margin-left: 33.33333%; + } + .mui-col-sm-offset-5 { + margin-left: 41.66667%; + } + .mui-col-sm-offset-6 { + margin-left: 50%; + } + .mui-col-sm-offset-7 { + margin-left: 58.33333%; + } + .mui-col-sm-offset-8 { + margin-left: 66.66667%; + } + .mui-col-sm-offset-9 { + margin-left: 75%; + } + .mui-col-sm-offset-10 { + margin-left: 83.33333%; + } + .mui-col-sm-offset-11 { + margin-left: 91.66667%; + } + .mui-col-sm-offset-12 { + margin-left: 100%; + } +} + +@media (min-width: 768px) { + .mui-col-md-1, .mui-col-md-2, .mui-col-md-3, .mui-col-md-4, .mui-col-md-5, .mui-col-md-6, .mui-col-md-7, .mui-col-md-8, .mui-col-md-9, .mui-col-md-10, .mui-col-md-11, .mui-col-md-12 { + float: left; + } + .mui-col-md-1 { + width: 8.33333%; + } + .mui-col-md-2 { + width: 16.66667%; + } + .mui-col-md-3 { + width: 25%; + } + .mui-col-md-4 { + width: 33.33333%; + } + .mui-col-md-5 { + width: 41.66667%; + } + .mui-col-md-6 { + width: 50%; + } + .mui-col-md-7 { + width: 58.33333%; + } + .mui-col-md-8 { + width: 66.66667%; + } + .mui-col-md-9 { + width: 75%; + } + .mui-col-md-10 { + width: 83.33333%; + } + .mui-col-md-11 { + width: 91.66667%; + } + .mui-col-md-12 { + width: 100%; + } + .mui-col-md-offset-0 { + margin-left: 0%; + } + .mui-col-md-offset-1 { + margin-left: 8.33333%; + } + .mui-col-md-offset-2 { + margin-left: 16.66667%; + } + .mui-col-md-offset-3 { + margin-left: 25%; + } + .mui-col-md-offset-4 { + margin-left: 33.33333%; + } + .mui-col-md-offset-5 { + margin-left: 41.66667%; + } + .mui-col-md-offset-6 { + margin-left: 50%; + } + .mui-col-md-offset-7 { + margin-left: 58.33333%; + } + .mui-col-md-offset-8 { + margin-left: 66.66667%; + } + .mui-col-md-offset-9 { + margin-left: 75%; + } + .mui-col-md-offset-10 { + margin-left: 83.33333%; + } + .mui-col-md-offset-11 { + margin-left: 91.66667%; + } + .mui-col-md-offset-12 { + margin-left: 100%; + } +} + +@media (min-width: 992px) { + .mui-col-lg-1, .mui-col-lg-2, .mui-col-lg-3, .mui-col-lg-4, .mui-col-lg-5, .mui-col-lg-6, .mui-col-lg-7, .mui-col-lg-8, .mui-col-lg-9, .mui-col-lg-10, .mui-col-lg-11, .mui-col-lg-12 { + float: left; + } + .mui-col-lg-1 { + width: 8.33333%; + } + .mui-col-lg-2 { + width: 16.66667%; + } + .mui-col-lg-3 { + width: 25%; + } + .mui-col-lg-4 { + width: 33.33333%; + } + .mui-col-lg-5 { + width: 41.66667%; + } + .mui-col-lg-6 { + width: 50%; + } + .mui-col-lg-7 { + width: 58.33333%; + } + .mui-col-lg-8 { + width: 66.66667%; + } + .mui-col-lg-9 { + width: 75%; + } + .mui-col-lg-10 { + width: 83.33333%; + } + .mui-col-lg-11 { + width: 91.66667%; + } + .mui-col-lg-12 { + width: 100%; + } + .mui-col-lg-offset-0 { + margin-left: 0%; + } + .mui-col-lg-offset-1 { + margin-left: 8.33333%; + } + .mui-col-lg-offset-2 { + margin-left: 16.66667%; + } + .mui-col-lg-offset-3 { + margin-left: 25%; + } + .mui-col-lg-offset-4 { + margin-left: 33.33333%; + } + .mui-col-lg-offset-5 { + margin-left: 41.66667%; + } + .mui-col-lg-offset-6 { + margin-left: 50%; + } + .mui-col-lg-offset-7 { + margin-left: 58.33333%; + } + .mui-col-lg-offset-8 { + margin-left: 66.66667%; + } + .mui-col-lg-offset-9 { + margin-left: 75%; + } + .mui-col-lg-offset-10 { + margin-left: 83.33333%; + } + .mui-col-lg-offset-11 { + margin-left: 91.66667%; + } + .mui-col-lg-offset-12 { + margin-left: 100%; + } +} + +@media (min-width: 1200px) { + .mui-col-xl-1, .mui-col-xl-2, .mui-col-xl-3, .mui-col-xl-4, .mui-col-xl-5, .mui-col-xl-6, .mui-col-xl-7, .mui-col-xl-8, .mui-col-xl-9, .mui-col-xl-10, .mui-col-xl-11, .mui-col-xl-12 { + float: left; + } + .mui-col-xl-1 { + width: 8.33333%; + } + .mui-col-xl-2 { + width: 16.66667%; + } + .mui-col-xl-3 { + width: 25%; + } + .mui-col-xl-4 { + width: 33.33333%; + } + .mui-col-xl-5 { + width: 41.66667%; + } + .mui-col-xl-6 { + width: 50%; + } + .mui-col-xl-7 { + width: 58.33333%; + } + .mui-col-xl-8 { + width: 66.66667%; + } + .mui-col-xl-9 { + width: 75%; + } + .mui-col-xl-10 { + width: 83.33333%; + } + .mui-col-xl-11 { + width: 91.66667%; + } + .mui-col-xl-12 { + width: 100%; + } + .mui-col-xl-offset-0 { + margin-left: 0%; + } + .mui-col-xl-offset-1 { + margin-left: 8.33333%; + } + .mui-col-xl-offset-2 { + margin-left: 16.66667%; + } + .mui-col-xl-offset-3 { + margin-left: 25%; + } + .mui-col-xl-offset-4 { + margin-left: 33.33333%; + } + .mui-col-xl-offset-5 { + margin-left: 41.66667%; + } + .mui-col-xl-offset-6 { + margin-left: 50%; + } + .mui-col-xl-offset-7 { + margin-left: 58.33333%; + } + .mui-col-xl-offset-8 { + margin-left: 66.66667%; + } + .mui-col-xl-offset-9 { + margin-left: 75%; + } + .mui-col-xl-offset-10 { + margin-left: 83.33333%; + } + .mui-col-xl-offset-11 { + margin-left: 91.66667%; + } + .mui-col-xl-offset-12 { + margin-left: 100%; + } +} + +/** + * MUI Panel module + */ +.mui-panel { + padding: 15px; + margin-bottom: 20px; + border-radius: 0; + background-color: #FFF; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.16), 0 0px 2px 0 rgba(0, 0, 0, 0.12); +} + +.mui-panel:before, .mui-panel:after { + content: " "; + display: table; +} + +.mui-panel:after { + clear: both; +} + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mui-panel { + box-shadow: 0 -1px 2px 0 rgba(0, 0, 0, 0.12), -1px 0px 2px 0 rgba(0, 0, 0, 0.12), 0 2px 2px 0 rgba(0, 0, 0, 0.16), 0 0px 2px 0 rgba(0, 0, 0, 0.12); + } +} + +/** + * MUI Select Component + */ +.mui-select { + display: block; + padding-top: 15px; + margin-bottom: 20px; + position: relative; +} + +.mui-select:focus { + outline: 0; +} + +.mui-select:focus > select { + height: 33px; + margin-bottom: -1px; + border-color: #2196F3; + border-width: 2px; +} + +.mui-select > select { + animation-duration: 0.0001s; + animation-name: mui-node-inserted; + display: block; + height: 32px; + width: 100%; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + outline: none; + border: none; + border-bottom: 1px solid rgba(0, 0, 0, 0.26); + border-radius: 0px; + box-shadow: none; + background-color: transparent; + background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iNiIgd2lkdGg9IjEwIj48cG9seWdvbiBwb2ludHM9IjAsMCAxMCwwIDUsNiIgc3R5bGU9ImZpbGw6cmdiYSgwLDAsMCwuMjQpOyIvPjwvc3ZnPg=="); + background-repeat: no-repeat; + background-position: right center; + cursor: pointer; + color: rgba(0, 0, 0, 0.87); + font-size: 16px; + padding: 0 25px 0 0; +} + +.mui-select > select::-ms-expand { + display: none; +} + +.mui-select > select:focus { + outline: 0; + height: 33px; + margin-bottom: -1px; + border-color: #2196F3; + border-width: 2px; +} + +.mui-select > select:disabled { + color: rgba(0, 0, 0, 0.38); + cursor: not-allowed; + background-color: transparent; + opacity: 1; +} + +.mui-select__menu { + position: absolute; + z-index: 2; + min-width: 100%; + overflow-y: auto; + padding: 8px 0; + background-color: #FFF; + font-size: 16px; +} + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mui-select__menu { + border-left: 1px solid rgba(0, 0, 0, 0.12); + border-top: 1px solid rgba(0, 0, 0, 0.12); + } +} + +.mui-select__menu > div { + padding: 0 22px; + height: 42px; + line-height: 42px; + cursor: pointer; + white-space: nowrap; +} + +.mui-select__menu > div:hover { + background-color: #E0E0E0; +} + +.mui-select__menu > div.mui--is-selected { + background-color: #EEEEEE; +} + +/** + * MUI Table Component + */ +th { + text-align: left; +} + +.mui-table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} + +.mui-table > thead > tr > th, +.mui-table > thead > tr > td, +.mui-table > tbody > tr > th, +.mui-table > tbody > tr > td, +.mui-table > tfoot > tr > th, +.mui-table > tfoot > tr > td { + padding: 10px; + line-height: 1.429; +} + +.mui-table > thead > tr > th { + border-bottom: 2px solid rgba(0, 0, 0, 0.12); + font-weight: 700; +} + +.mui-table > tbody + tbody { + border-top: 2px solid rgba(0, 0, 0, 0.12); +} + +.mui-table.mui-table--bordered > tbody > tr > td { + border-bottom: 1px solid rgba(0, 0, 0, 0.12); +} + +/** + * MUI Tabs module + */ +.mui-tabs__bar { + list-style: none; + padding-left: 0; + margin-bottom: 0; + background-color: transparent; + white-space: nowrap; + overflow-x: auto; +} + +.mui-tabs__bar > li { + display: inline-block; +} + +.mui-tabs__bar > li > a { + display: block; + white-space: nowrap; + text-transform: uppercase; + font-weight: 500; + font-size: 14px; + color: rgba(0, 0, 0, 0.87); + cursor: default; + height: 48px; + line-height: 48px; + padding-left: 24px; + padding-right: 24px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.mui-tabs__bar > li > a:hover { + text-decoration: none; +} + +.mui-tabs__bar > li.mui--is-active { + border-bottom: 2px solid #2196F3; +} + +.mui-tabs__bar > li.mui--is-active > a { + color: #2196F3; +} + +.mui-tabs__bar.mui-tabs__bar--justified { + display: table; + width: 100%; + table-layout: fixed; +} + +.mui-tabs__bar.mui-tabs__bar--justified > li { + display: table-cell; +} + +.mui-tabs__bar.mui-tabs__bar--justified > li > a { + text-align: center; + padding-left: 0px; + padding-right: 0px; +} + +.mui-tabs__pane { + display: none; +} + +.mui-tabs__pane.mui--is-active { + display: block; +} + +[data-mui-toggle="tab"] { + animation-duration: 0.0001s; + animation-name: mui-node-inserted; +} + +/** + * MUI Textfield Component + */ +.mui-textfield { + display: block; + padding-top: 15px; + margin-bottom: 20px; + position: relative; +} + +.mui-textfield > label { + position: absolute; + top: 0; + display: block; + width: 100%; + color: rgba(0, 0, 0, 0.54); + font-size: 12px; + font-weight: 400; + line-height: 15px; + overflow-x: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.mui-textfield > textarea { + padding-top: 5px; +} + +.mui-textfield > input, +.mui-textfield > textarea { + display: block; +} + +.mui-textfield > input:focus ~ label, +.mui-textfield > textarea:focus ~ label { + color: #2196F3; +} + +.mui-textfield--float-label > label { + position: absolute; + transform: translate(0px, 15px); + font-size: 16px; + line-height: 32px; + color: rgba(0, 0, 0, 0.26); + text-overflow: clip; + cursor: text; + pointer-events: none; +} + +.mui-textfield--float-label > input:focus ~ label, +.mui-textfield--float-label > textarea:focus ~ label { + transform: translate(0px, 0px); + font-size: 12px; + line-height: 15px; + text-overflow: ellipsis; +} + +.mui-textfield--float-label > input:not(:focus).mui--is-not-empty ~ label, .mui-textfield--float-label > input:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, .mui-textfield--float-label > input:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield--float-label > textarea:not(:focus).mui--is-not-empty ~ label, +.mui-textfield--float-label > textarea:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield--float-label > textarea:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label { + color: rgba(0, 0, 0, 0.54); + font-size: 12px; + line-height: 15px; + transform: translate(0px, 0px); + text-overflow: ellipsis; +} + +.mui-textfield--wrap-label { + display: table; + width: 100%; + padding-top: 0px; +} + +.mui-textfield--wrap-label:not(.mui-textfield--float-label) > label { + display: table-header-group; + position: static; + white-space: normal; + overflow-x: visible; +} + +.mui-textfield > input, +.mui-textfield > textarea { + animation-duration: 0.0001s; + animation-name: mui-node-inserted; + display: block; + background-color: transparent; + color: rgba(0, 0, 0, 0.87); + border: none; + border-bottom: 1px solid rgba(0, 0, 0, 0.26); + outline: none; + width: 100%; + font-size: 16px; + padding: 0; + box-shadow: none; + border-radius: 0px; + background-image: none; +} + +.mui-textfield > input:focus, +.mui-textfield > textarea:focus { + border-color: #2196F3; + border-width: 2px; +} + +.mui-textfield > input:disabled, .mui-textfield > input:-moz-read-only, +.mui-textfield > textarea:disabled, +.mui-textfield > textarea:-moz-read-only { + cursor: not-allowed; + background-color: transparent; + opacity: 1; +} + +.mui-textfield > input:disabled, .mui-textfield > input:read-only, +.mui-textfield > textarea:disabled, +.mui-textfield > textarea:read-only { + cursor: not-allowed; + background-color: transparent; + opacity: 1; +} + +.mui-textfield > input::-webkit-input-placeholder, +.mui-textfield > textarea::-webkit-input-placeholder { + color: rgba(0, 0, 0, 0.26); + opacity: 1; +} + +.mui-textfield > input::-moz-placeholder, +.mui-textfield > textarea::-moz-placeholder { + color: rgba(0, 0, 0, 0.26); + opacity: 1; +} + +.mui-textfield > input:-ms-input-placeholder, +.mui-textfield > textarea:-ms-input-placeholder { + color: rgba(0, 0, 0, 0.26); + opacity: 1; +} + +.mui-textfield > input::placeholder, +.mui-textfield > textarea::placeholder { + color: rgba(0, 0, 0, 0.26); + opacity: 1; +} + +.mui-textfield > input { + height: 32px; +} + +.mui-textfield > input:focus { + height: 33px; + margin-bottom: -1px; +} + +.mui-textfield > textarea { + min-height: 64px; +} + +.mui-textfield > textarea[rows]:not([rows="2"]):focus { + margin-bottom: -1px; +} + +.mui-textfield > input:focus { + height: 33px; + margin-bottom: -1px; +} + +.mui-textfield > input:invalid:not(:focus):not(:required), .mui-textfield > input:invalid:not(:focus):required.mui--is-not-empty, .mui-textfield > input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty, .mui-textfield > input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty), .mui-textfield > input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > textarea:invalid:not(:focus):not(:required), +.mui-textfield > textarea:invalid:not(:focus):required.mui--is-not-empty, +.mui-textfield > textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty, +.mui-textfield > textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > input:not(:focus).mui--is-invalid:not(:required), +.mui-textfield > input:not(:focus).mui--is-invalid:required.mui--is-not-empty, +.mui-textfield > input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty, +.mui-textfield > input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > textarea:not(:focus).mui--is-invalid:not(:required), +.mui-textfield > textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty, +.mui-textfield > textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty, +.mui-textfield > textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) { + border-color: #F44336; + border-width: 2px; +} + +.mui-textfield > input:invalid:not(:focus):not(:required), .mui-textfield > input:invalid:not(:focus):required.mui--is-not-empty, .mui-textfield > input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty, .mui-textfield > input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty), .mui-textfield > input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > input:not(:focus).mui--is-invalid:not(:required), +.mui-textfield > input:not(:focus).mui--is-invalid:required.mui--is-not-empty, +.mui-textfield > input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty, +.mui-textfield > input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) { + height: 33px; + margin-bottom: -1px; +} + +.mui-textfield > input:invalid:not(:focus):not(:required) ~ label, .mui-textfield > input:invalid:not(:focus):required.mui--is-not-empty ~ label, .mui-textfield > input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, .mui-textfield > input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield > textarea:invalid:not(:focus):not(:required) ~ label, +.mui-textfield > textarea:invalid:not(:focus):required.mui--is-not-empty ~ label, +.mui-textfield > textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield > textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield > input:not(:focus).mui--is-invalid:not(:required) ~ label, +.mui-textfield > input:not(:focus).mui--is-invalid:required.mui--is-not-empty ~ label, +.mui-textfield > input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield > input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield > textarea:not(:focus).mui--is-invalid:not(:required) ~ label, +.mui-textfield > textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty ~ label, +.mui-textfield > textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield > textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label { + color: #F44336; +} + +.mui-textfield:not(.mui-textfield--float-label) > input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty ~ label, +.mui-textfield:not(.mui-textfield--float-label) > textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty ~ label, +.mui-textfield:not(.mui-textfield--float-label) > input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty ~ label, +.mui-textfield:not(.mui-textfield--float-label) > textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty ~ label { + color: #F44336; +} + +/** + * MUI Helpers module + */ +@keyframes mui-node-inserted { + from { + opacity: 0.99; + } + to { + opacity: 1; + } +} + +.mui--no-transition { + transition: none !important; +} + +.mui--no-user-select { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.mui-caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px solid; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} + +.mui--text-left { + text-align: left !important; +} + +.mui--text-right { + text-align: right !important; +} + +.mui--text-center { + text-align: center !important; +} + +.mui--text-justify { + text-align: justify !important; +} + +.mui--text-nowrap { + white-space: nowrap !important; +} + +.mui--align-baseline { + vertical-align: baseline !important; +} + +.mui--align-top { + vertical-align: top !important; +} + +.mui--align-middle { + vertical-align: middle !important; +} + +.mui--align-bottom { + vertical-align: bottom !important; +} + +.mui--text-dark { + color: rgba(0, 0, 0, 0.87); +} + +.mui--text-dark-secondary { + color: rgba(0, 0, 0, 0.54); +} + +.mui--text-dark-hint { + color: rgba(0, 0, 0, 0.38); +} + +.mui--text-light { + color: #FFF; +} + +.mui--text-light-secondary { + color: rgba(255, 255, 255, 0.7); +} + +.mui--text-light-hint { + color: rgba(255, 255, 255, 0.3); +} + +.mui--text-accent { + color: rgba(255, 64, 129, 0.87); +} + +.mui--text-accent-secondary { + color: rgba(255, 64, 129, 0.54); +} + +.mui--text-accent-hint { + color: rgba(255, 64, 129, 0.38); +} + +.mui--text-black { + color: #000; +} + +.mui--text-white { + color: #FFF; +} + +.mui--text-danger { + color: #F44336; +} + +.mui-list--unstyled { + padding-left: 0; + list-style: none; +} + +.mui-list--inline { + padding-left: 0; + list-style: none; + margin-left: -5px; +} + +.mui-list--inline > li { + display: inline-block; + padding-left: 5px; + padding-right: 5px; +} + +.mui--z1, .mui-dropdown__menu, .mui-select__menu { + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); +} + +.mui--z2 { + box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23); +} + +.mui--z3 { + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); +} + +.mui--z4 { + box-shadow: 0 14px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.22); +} + +.mui--z5 { + box-shadow: 0 19px 38px rgba(0, 0, 0, 0.3), 0 15px 12px rgba(0, 0, 0, 0.22); +} + +.mui--clearfix:before, .mui--clearfix:after { + content: " "; + display: table; +} + +.mui--clearfix:after { + clear: both; +} + +.mui--pull-right { + float: right !important; +} + +.mui--pull-left { + float: left !important; +} + +.mui--hide { + display: none !important; +} + +.mui--show { + display: block !important; +} + +.mui--invisible { + visibility: hidden; +} + +.mui--overflow-hidden { + overflow: hidden !important; +} + +.mui--overflow-hidden-x { + overflow-x: hidden !important; +} + +.mui--overflow-hidden-y { + overflow-y: hidden !important; +} + +.mui--visible-xs-block, +.mui--visible-xs-inline, +.mui--visible-xs-inline-block, +.mui--visible-sm-block, +.mui--visible-sm-inline, +.mui--visible-sm-inline-block, +.mui--visible-md-block, +.mui--visible-md-inline, +.mui--visible-md-inline-block, +.mui--visible-lg-block, +.mui--visible-lg-inline, +.mui--visible-lg-inline-block, +.mui--visible-xl-block, +.mui--visible-xl-inline, +.mui--visible-xl-inline-block { + display: none !important; +} + +@media (max-width: 543px) { + .mui-visible-xs { + display: block !important; + } + table.mui-visible-xs { + display: table; + } + tr.mui-visible-xs { + display: table-row !important; + } + th.mui-visible-xs, + td.mui-visible-xs { + display: table-cell !important; + } + .mui--visible-xs-block { + display: block !important; + } + .mui--visible-xs-inline { + display: inline !important; + } + .mui--visible-xs-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 544px) and (max-width: 767px) { + .mui-visible-sm { + display: block !important; + } + table.mui-visible-sm { + display: table; + } + tr.mui-visible-sm { + display: table-row !important; + } + th.mui-visible-sm, + td.mui-visible-sm { + display: table-cell !important; + } + .mui--visible-sm-block { + display: block !important; + } + .mui--visible-sm-inline { + display: inline !important; + } + .mui--visible-sm-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .mui-visible-md { + display: block !important; + } + table.mui-visible-md { + display: table; + } + tr.mui-visible-md { + display: table-row !important; + } + th.mui-visible-md, + td.mui-visible-md { + display: table-cell !important; + } + .mui--visible-md-block { + display: block !important; + } + .mui--visible-md-inline { + display: inline !important; + } + .mui--visible-md-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .mui-visible-lg { + display: block !important; + } + table.mui-visible-lg { + display: table; + } + tr.mui-visible-lg { + display: table-row !important; + } + th.mui-visible-lg, + td.mui-visible-lg { + display: table-cell !important; + } + .mui--visible-lg-block { + display: block !important; + } + .mui--visible-lg-inline { + display: inline !important; + } + .mui--visible-lg-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 1200px) { + .mui-visible-xl { + display: block !important; + } + table.mui-visible-xl { + display: table; + } + tr.mui-visible-xl { + display: table-row !important; + } + th.mui-visible-xl, + td.mui-visible-xl { + display: table-cell !important; + } + .mui--visible-xl-block { + display: block !important; + } + .mui--visible-xl-inline { + display: inline !important; + } + .mui--visible-xl-inline-block { + display: inline-block !important; + } +} + +@media (max-width: 543px) { + .mui--hidden-xs { + display: none !important; + } +} + +@media (min-width: 544px) and (max-width: 767px) { + .mui--hidden-sm { + display: none !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .mui--hidden-md { + display: none !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .mui--hidden-lg { + display: none !important; + } +} + +@media (min-width: 1200px) { + .mui--hidden-xl { + display: none !important; + } +} + +body.mui-body--scroll-lock { + overflow: hidden !important; +} + +/** + * MUI Overlay module + */ +#mui-overlay { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 99999999; + background-color: rgba(0, 0, 0, 0.2); + overflow: auto; +} + +/** + * MUI Ripple module + */ +.mui-ripple-effect { + position: absolute; + border-radius: 50%; + pointer-events: none; + opacity: 0; + animation: mui-ripple-animation 2s; +} + +@keyframes mui-ripple-animation { + from { + transform: scale(1); + opacity: 0.4; + } + to { + transform: scale(100); + opacity: 0; + } +} + +.mui-btn > .mui-ripple-effect { + background-color: #a6a6a6; +} + +.mui-btn--primary > .mui-ripple-effect { + background-color: #FFF; +} + +.mui-btn--dark > .mui-ripple-effect { + background-color: #FFF; +} + +.mui-btn--danger > .mui-ripple-effect { + background-color: #FFF; +} + +.mui-btn--accent > .mui-ripple-effect { + background-color: #FFF; +} + +.mui-btn--flat > .mui-ripple-effect { + background-color: #a6a6a6; +} + +/** + * MUI Typography module + */ +.mui--text-display4 { + font-weight: 300; + font-size: 112px; + line-height: 112px; +} + +.mui--text-display3 { + font-weight: 400; + font-size: 56px; + line-height: 56px; +} + +.mui--text-display2 { + font-weight: 400; + font-size: 45px; + line-height: 48px; +} + +.mui--text-display1, h1 { + font-weight: 400; + font-size: 34px; + line-height: 40px; +} + +.mui--text-headline, h2 { + font-weight: 400; + font-size: 24px; + line-height: 32px; +} + +.mui--text-title, h3 { + font-weight: 400; + font-size: 20px; + line-height: 28px; +} + +.mui--text-subhead, h4 { + font-weight: 400; + font-size: 16px; + line-height: 24px; +} + +.mui--text-body2, h5 { + font-weight: 500; + font-size: 14px; + line-height: 24px; +} + +.mui--text-body1 { + font-weight: 400; + font-size: 14px; + line-height: 20px; +} + +.mui--text-caption { + font-weight: 400; + font-size: 12px; + line-height: 16px; +} + +.mui--text-menu { + font-weight: 500; + font-size: 13px; + line-height: 17px; +} + +.mui--text-button { + font-weight: 500; + font-size: 14px; + line-height: 18px; + text-transform: uppercase; +} diff --git a/platforms/android/assets/www/libs/mui/packages/cdn/css/mui.min.css b/platforms/android/assets/www/libs/mui/packages/cdn/css/mui.min.css new file mode 100644 index 0000000..750f365 --- /dev/null +++ b/platforms/android/assets/www/libs/mui/packages/cdn/css/mui.min.css @@ -0,0 +1 @@ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-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{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}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{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{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-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:border-box}:after,:before{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:Arial,Verdana,Tahoma;font-size:14px;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);background-color:#FFF}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#2196F3;text-decoration:none}a:focus,a:hover{color:#1976D2;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}p{margin:0 0 10px}ol,ul{margin-top:0;margin-bottom:10px}figure{margin:0}img{vertical-align:middle}hr{margin-top:20px;margin-bottom:20px;border:0;height:1px;background-color:rgba(0,0,0,.12)}legend{display:block;width:100%;padding:0;margin-bottom:10px;font-size:21px;color:rgba(0,0,0,.87);line-height:inherit;border:0}input[type=search]{box-sizing:border-box;-webkit-appearance:none}input[type=checkbox]:focus,input[type=radio]:focus,input[type=file]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type=checkbox]:disabled,input[type=radio]:disabled{cursor:not-allowed}strong{font-weight:700}abbr[title]{cursor:help;border-bottom:1px dotted #2196F3}h1,h2,h3{margin-top:20px;margin-bottom:10px}h4,h5,h6{margin-top:10px;margin-bottom:10px}.mui--appbar-height{height:56px}.mui--appbar-min-height,.mui-appbar{min-height:56px}.mui--appbar-line-height{line-height:56px}.mui--appbar-top{top:56px}@media (orientation:landscape) and (max-height:480px){.mui--appbar-height{height:48px}.mui--appbar-min-height,.mui-appbar{min-height:48px}.mui--appbar-line-height{line-height:48px}.mui--appbar-top{top:48px}}@media (min-width:480px){.mui--appbar-height{height:64px}.mui--appbar-min-height,.mui-appbar{min-height:64px}.mui--appbar-line-height{line-height:64px}.mui--appbar-top{top:64px}}.mui-appbar{background-color:#2196F3;color:#FFF}.mui-btn{animation-duration:.1ms;animation-name:mui-node-inserted;font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase;color:rgba(0,0,0,.87);background-color:#FFF;transition:all .2s ease-in-out;display:inline-block;height:36px;padding:0 26px;margin-top:6px;margin-bottom:6px;border:none;border-radius:2px;cursor:pointer;-ms-touch-action:manipulation;touch-action:manipulation;background-image:none;text-align:center;line-height:36px;vertical-align:middle;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:14px;letter-spacing:.03em;position:relative;overflow:hidden}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{color:rgba(0,0,0,.87);background-color:#fff}.mui-btn[disabled]:active,.mui-btn[disabled]:focus,.mui-btn[disabled]:hover{color:rgba(0,0,0,.87);background-color:#FFF}.mui-btn.mui-btn--flat{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn.mui-btn--flat:active,.mui-btn.mui-btn--flat:focus,.mui-btn.mui-btn--flat:hover{color:rgba(0,0,0,.87);background-color:#f2f2f2}.mui-btn.mui-btn--flat[disabled]:active,.mui-btn.mui-btn--flat[disabled]:focus,.mui-btn.mui-btn--flat[disabled]:hover{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{outline:0;text-decoration:none;color:rgba(0,0,0,.87)}.mui-btn:focus,.mui-btn:hover{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:focus,.mui-btn:hover{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn.mui--is-disabled,.mui-btn:disabled{cursor:not-allowed;pointer-events:none;opacity:.6;box-shadow:none}.mui-btn+.mui-btn{margin-left:8px}.mui-btn--flat{background-color:transparent}.mui-btn--flat:active,.mui-btn--flat:focus,.mui-btn--flat:hover{box-shadow:none;background-color:#f2f2f2}.mui-btn--fab,.mui-btn--raised{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab,.mui-btn--raised{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn--fab{position:relative;padding:0;width:55px;height:55px;line-height:55px;border-radius:50%;z-index:1}.mui-btn--primary{color:#FFF;background-color:#2196F3}.mui-btn--primary:active,.mui-btn--primary:focus,.mui-btn--primary:hover{color:#FFF;background-color:#39a1f4}.mui-btn--primary[disabled]:active,.mui-btn--primary[disabled]:focus,.mui-btn--primary[disabled]:hover{color:#FFF;background-color:#2196F3}.mui-btn--primary.mui-btn--flat{color:#2196F3;background-color:transparent}.mui-btn--primary.mui-btn--flat:active,.mui-btn--primary.mui-btn--flat:focus,.mui-btn--primary.mui-btn--flat:hover{color:#2196F3;background-color:#f2f2f2}.mui-btn--primary.mui-btn--flat[disabled]:active,.mui-btn--primary.mui-btn--flat[disabled]:focus,.mui-btn--primary.mui-btn--flat[disabled]:hover{color:#2196F3;background-color:transparent}.mui-btn--dark{color:#FFF;background-color:#424242}.mui-btn--dark:active,.mui-btn--dark:focus,.mui-btn--dark:hover{color:#FFF;background-color:#4f4f4f}.mui-btn--dark[disabled]:active,.mui-btn--dark[disabled]:focus,.mui-btn--dark[disabled]:hover{color:#FFF;background-color:#424242}.mui-btn--dark.mui-btn--flat{color:#424242;background-color:transparent}.mui-btn--dark.mui-btn--flat:active,.mui-btn--dark.mui-btn--flat:focus,.mui-btn--dark.mui-btn--flat:hover{color:#424242;background-color:#f2f2f2}.mui-btn--dark.mui-btn--flat[disabled]:active,.mui-btn--dark.mui-btn--flat[disabled]:focus,.mui-btn--dark.mui-btn--flat[disabled]:hover{color:#424242;background-color:transparent}.mui-btn--danger{color:#FFF;background-color:#F44336}.mui-btn--danger:active,.mui-btn--danger:focus,.mui-btn--danger:hover{color:#FFF;background-color:#f55a4e}.mui-btn--danger[disabled]:active,.mui-btn--danger[disabled]:focus,.mui-btn--danger[disabled]:hover{color:#FFF;background-color:#F44336}.mui-btn--danger.mui-btn--flat{color:#F44336;background-color:transparent}.mui-btn--danger.mui-btn--flat:active,.mui-btn--danger.mui-btn--flat:focus,.mui-btn--danger.mui-btn--flat:hover{color:#F44336;background-color:#f2f2f2}.mui-btn--danger.mui-btn--flat[disabled]:active,.mui-btn--danger.mui-btn--flat[disabled]:focus,.mui-btn--danger.mui-btn--flat[disabled]:hover{color:#F44336;background-color:transparent}.mui-btn--accent{color:#FFF;background-color:#FF4081}.mui-btn--accent:active,.mui-btn--accent:focus,.mui-btn--accent:hover{color:#FFF;background-color:#ff5a92}.mui-btn--accent[disabled]:active,.mui-btn--accent[disabled]:focus,.mui-btn--accent[disabled]:hover{color:#FFF;background-color:#FF4081}.mui-btn--accent.mui-btn--flat{color:#FF4081;background-color:transparent}.mui-btn--accent.mui-btn--flat:active,.mui-btn--accent.mui-btn--flat:focus,.mui-btn--accent.mui-btn--flat:hover{color:#FF4081;background-color:#f2f2f2}.mui-btn--accent.mui-btn--flat[disabled]:active,.mui-btn--accent.mui-btn--flat[disabled]:focus,.mui-btn--accent.mui-btn--flat[disabled]:hover{color:#FF4081;background-color:transparent}.mui-btn--small{height:30.6px;line-height:30.6px;padding:0 16px;font-size:13px}.mui-btn--large{height:54px;line-height:54px;padding:0 26px;font-size:14px}.mui-btn--fab.mui-btn--small{width:44px;height:44px;line-height:44px}.mui-btn--fab.mui-btn--large{width:75px;height:75px;line-height:75px}.mui-checkbox,.mui-radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.mui-checkbox>label,.mui-radio>label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio],.mui-radio>label>input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px}.mui-checkbox+.mui-checkbox,.mui-radio+.mui-radio{margin-top:-5px}.mui-checkbox--inline,.mui-radio--inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.mui-checkbox--inline>input[type=checkbox],.mui-checkbox--inline>input[type=radio],.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox--inline>label>input[type=radio],.mui-radio--inline>input[type=checkbox],.mui-radio--inline>input[type=radio],.mui-radio--inline>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio]{margin:4px 0 0;line-height:normal}.mui-checkbox--inline+.mui-checkbox--inline,.mui-radio--inline+.mui-radio--inline{margin-top:0;margin-left:10px}.mui-container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container:after,.mui-container:before{content:" ";display:table}.mui-container:after{clear:both}@media (min-width:544px){.mui-container{max-width:570px}}@media (min-width:768px){.mui-container{max-width:740px}}@media (min-width:992px){.mui-container{max-width:960px}}@media (min-width:1200px){.mui-container{max-width:1170px}}.mui-container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container-fluid:after,.mui-container-fluid:before{content:" ";display:table}.mui-container-fluid:after{clear:both}.mui-divider{display:block;height:1px;background-color:rgba(0,0,0,.12)}.mui--divider-top{border-top:1px solid rgba(0,0,0,.12)}.mui--divider-bottom{border-bottom:1px solid rgba(0,0,0,.12)}.mui--divider-left{border-left:1px solid rgba(0,0,0,.12)}.mui--divider-right{border-right:1px solid rgba(0,0,0,.12)}.mui-dropdown{display:inline-block;position:relative}[data-mui-toggle=dropdown]{animation-duration:.1ms;animation-name:mui-node-inserted;outline:0}.mui-dropdown__menu{position:absolute;top:100%;left:0;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#FFF;border-radius:2px;z-index:1;background-clip:padding-box}.mui-dropdown__menu.mui--is-open{display:block}.mui-dropdown__menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);white-space:nowrap}.mui-dropdown__menu>li>a:focus,.mui-dropdown__menu>li>a:hover{text-decoration:none;color:rgba(0,0,0,.87);background-color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a,.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;cursor:not-allowed}.mui-dropdown__menu--right{left:auto;right:0}@media (min-width:544px){.mui-form--inline>.mui-textfield{display:inline-block;margin-bottom:0}.mui-form--inline>.mui-checkbox,.mui-form--inline>.mui-radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.mui-form--inline>.mui-checkbox>label,.mui-form--inline>.mui-radio>label{padding-left:0}.mui-form--inline>.mui-checkbox>label>input[type=checkbox],.mui-form--inline>.mui-radio>label>input[type=radio]{position:relative;margin-left:0}.mui-form--inline>.mui-select{display:inline-block}.mui-form--inline>.mui-btn{margin-bottom:0;margin-top:0;vertical-align:bottom}}.mui-row{margin-left:-15px;margin-right:-15px}.mui-row:after,.mui-row:before{content:" ";display:table}.mui-row:after{clear:both}.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9,.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9,.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9,.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{min-height:1px;padding-left:15px;padding-right:15px}.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{float:left}.mui-col-xs-1{width:8.33333%}.mui-col-xs-2{width:16.66667%}.mui-col-xs-3{width:25%}.mui-col-xs-4{width:33.33333%}.mui-col-xs-5{width:41.66667%}.mui-col-xs-6{width:50%}.mui-col-xs-7{width:58.33333%}.mui-col-xs-8{width:66.66667%}.mui-col-xs-9{width:75%}.mui-col-xs-10{width:83.33333%}.mui-col-xs-11{width:91.66667%}.mui-col-xs-12{width:100%}.mui-col-xs-offset-0{margin-left:0}.mui-col-xs-offset-1{margin-left:8.33333%}.mui-col-xs-offset-2{margin-left:16.66667%}.mui-col-xs-offset-3{margin-left:25%}.mui-col-xs-offset-4{margin-left:33.33333%}.mui-col-xs-offset-5{margin-left:41.66667%}.mui-col-xs-offset-6{margin-left:50%}.mui-col-xs-offset-7{margin-left:58.33333%}.mui-col-xs-offset-8{margin-left:66.66667%}.mui-col-xs-offset-9{margin-left:75%}.mui-col-xs-offset-10{margin-left:83.33333%}.mui-col-xs-offset-11{margin-left:91.66667%}.mui-col-xs-offset-12{margin-left:100%}@media (min-width:544px){.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9{float:left}.mui-col-sm-1{width:8.33333%}.mui-col-sm-2{width:16.66667%}.mui-col-sm-3{width:25%}.mui-col-sm-4{width:33.33333%}.mui-col-sm-5{width:41.66667%}.mui-col-sm-6{width:50%}.mui-col-sm-7{width:58.33333%}.mui-col-sm-8{width:66.66667%}.mui-col-sm-9{width:75%}.mui-col-sm-10{width:83.33333%}.mui-col-sm-11{width:91.66667%}.mui-col-sm-12{width:100%}.mui-col-sm-offset-0{margin-left:0}.mui-col-sm-offset-1{margin-left:8.33333%}.mui-col-sm-offset-2{margin-left:16.66667%}.mui-col-sm-offset-3{margin-left:25%}.mui-col-sm-offset-4{margin-left:33.33333%}.mui-col-sm-offset-5{margin-left:41.66667%}.mui-col-sm-offset-6{margin-left:50%}.mui-col-sm-offset-7{margin-left:58.33333%}.mui-col-sm-offset-8{margin-left:66.66667%}.mui-col-sm-offset-9{margin-left:75%}.mui-col-sm-offset-10{margin-left:83.33333%}.mui-col-sm-offset-11{margin-left:91.66667%}.mui-col-sm-offset-12{margin-left:100%}}@media (min-width:768px){.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9{float:left}.mui-col-md-1{width:8.33333%}.mui-col-md-2{width:16.66667%}.mui-col-md-3{width:25%}.mui-col-md-4{width:33.33333%}.mui-col-md-5{width:41.66667%}.mui-col-md-6{width:50%}.mui-col-md-7{width:58.33333%}.mui-col-md-8{width:66.66667%}.mui-col-md-9{width:75%}.mui-col-md-10{width:83.33333%}.mui-col-md-11{width:91.66667%}.mui-col-md-12{width:100%}.mui-col-md-offset-0{margin-left:0}.mui-col-md-offset-1{margin-left:8.33333%}.mui-col-md-offset-2{margin-left:16.66667%}.mui-col-md-offset-3{margin-left:25%}.mui-col-md-offset-4{margin-left:33.33333%}.mui-col-md-offset-5{margin-left:41.66667%}.mui-col-md-offset-6{margin-left:50%}.mui-col-md-offset-7{margin-left:58.33333%}.mui-col-md-offset-8{margin-left:66.66667%}.mui-col-md-offset-9{margin-left:75%}.mui-col-md-offset-10{margin-left:83.33333%}.mui-col-md-offset-11{margin-left:91.66667%}.mui-col-md-offset-12{margin-left:100%}}@media (min-width:992px){.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9{float:left}.mui-col-lg-1{width:8.33333%}.mui-col-lg-2{width:16.66667%}.mui-col-lg-3{width:25%}.mui-col-lg-4{width:33.33333%}.mui-col-lg-5{width:41.66667%}.mui-col-lg-6{width:50%}.mui-col-lg-7{width:58.33333%}.mui-col-lg-8{width:66.66667%}.mui-col-lg-9{width:75%}.mui-col-lg-10{width:83.33333%}.mui-col-lg-11{width:91.66667%}.mui-col-lg-12{width:100%}.mui-col-lg-offset-0{margin-left:0}.mui-col-lg-offset-1{margin-left:8.33333%}.mui-col-lg-offset-2{margin-left:16.66667%}.mui-col-lg-offset-3{margin-left:25%}.mui-col-lg-offset-4{margin-left:33.33333%}.mui-col-lg-offset-5{margin-left:41.66667%}.mui-col-lg-offset-6{margin-left:50%}.mui-col-lg-offset-7{margin-left:58.33333%}.mui-col-lg-offset-8{margin-left:66.66667%}.mui-col-lg-offset-9{margin-left:75%}.mui-col-lg-offset-10{margin-left:83.33333%}.mui-col-lg-offset-11{margin-left:91.66667%}.mui-col-lg-offset-12{margin-left:100%}}@media (min-width:1200px){.mui-col-xl-1,.mui-col-xl-10,.mui-col-xl-11,.mui-col-xl-12,.mui-col-xl-2,.mui-col-xl-3,.mui-col-xl-4,.mui-col-xl-5,.mui-col-xl-6,.mui-col-xl-7,.mui-col-xl-8,.mui-col-xl-9{float:left}.mui-col-xl-1{width:8.33333%}.mui-col-xl-2{width:16.66667%}.mui-col-xl-3{width:25%}.mui-col-xl-4{width:33.33333%}.mui-col-xl-5{width:41.66667%}.mui-col-xl-6{width:50%}.mui-col-xl-7{width:58.33333%}.mui-col-xl-8{width:66.66667%}.mui-col-xl-9{width:75%}.mui-col-xl-10{width:83.33333%}.mui-col-xl-11{width:91.66667%}.mui-col-xl-12{width:100%}.mui-col-xl-offset-0{margin-left:0}.mui-col-xl-offset-1{margin-left:8.33333%}.mui-col-xl-offset-2{margin-left:16.66667%}.mui-col-xl-offset-3{margin-left:25%}.mui-col-xl-offset-4{margin-left:33.33333%}.mui-col-xl-offset-5{margin-left:41.66667%}.mui-col-xl-offset-6{margin-left:50%}.mui-col-xl-offset-7{margin-left:58.33333%}.mui-col-xl-offset-8{margin-left:66.66667%}.mui-col-xl-offset-9{margin-left:75%}.mui-col-xl-offset-10{margin-left:83.33333%}.mui-col-xl-offset-11{margin-left:91.66667%}.mui-col-xl-offset-12{margin-left:100%}}.mui-panel{padding:15px;margin-bottom:20px;border-radius:0;background-color:#FFF;box-shadow:0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}.mui-panel:after,.mui-panel:before{content:" ";display:table}.mui-panel:after{clear:both}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-panel{box-shadow:0 -1px 2px 0 rgba(0,0,0,.12),-1px 0 2px 0 rgba(0,0,0,.12),0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}}.mui-select{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-select:focus{outline:0}.mui-select:focus>select{height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;height:32px;width:100%;appearance:none;-webkit-appearance:none;-moz-appearance:none;outline:0;border:none;border-bottom:1px solid rgba(0,0,0,.26);border-radius:0;box-shadow:none;background-color:transparent;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iNiIgd2lkdGg9IjEwIj48cG9seWdvbiBwb2ludHM9IjAsMCAxMCwwIDUsNiIgc3R5bGU9ImZpbGw6cmdiYSgwLDAsMCwuMjQpOyIvPjwvc3ZnPg==);background-repeat:no-repeat;background-position:right center;cursor:pointer;color:rgba(0,0,0,.87);font-size:16px;padding:0 25px 0 0}.mui-select>select::-ms-expand{display:none}.mui-select>select:focus{outline:0;height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select:disabled{color:rgba(0,0,0,.38);cursor:not-allowed;background-color:transparent;opacity:1}.mui-select__menu{position:absolute;z-index:2;min-width:100%;overflow-y:auto;padding:8px 0;background-color:#FFF;font-size:16px}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-select__menu{border-left:1px solid rgba(0,0,0,.12);border-top:1px solid rgba(0,0,0,.12)}}.mui-select__menu>div{padding:0 22px;height:42px;line-height:42px;cursor:pointer;white-space:nowrap}.mui-select__menu>div:hover{background-color:#E0E0E0}.mui-select__menu>div.mui--is-selected{background-color:#EEE}th{text-align:left}.mui-table{width:100%;max-width:100%;margin-bottom:20px}.mui-table>tbody>tr>td,.mui-table>tbody>tr>th,.mui-table>tfoot>tr>td,.mui-table>tfoot>tr>th,.mui-table>thead>tr>td,.mui-table>thead>tr>th{padding:10px;line-height:1.429}.mui-table>thead>tr>th{border-bottom:2px solid rgba(0,0,0,.12);font-weight:700}.mui-table>tbody+tbody{border-top:2px solid rgba(0,0,0,.12)}.mui-table.mui-table--bordered>tbody>tr>td{border-bottom:1px solid rgba(0,0,0,.12)}.mui-tabs__bar{list-style:none;padding-left:0;margin-bottom:0;background-color:transparent;white-space:nowrap;overflow-x:auto}.mui-tabs__bar>li{display:inline-block}.mui-tabs__bar>li>a{display:block;white-space:nowrap;text-transform:uppercase;font-weight:500;font-size:14px;color:rgba(0,0,0,.87);cursor:default;height:48px;line-height:48px;padding-left:24px;padding-right:24px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-tabs__bar>li>a:hover{text-decoration:none}.mui-tabs__bar>li.mui--is-active{border-bottom:2px solid #2196F3}.mui-tabs__bar>li.mui--is-active>a{color:#2196F3}.mui-tabs__bar.mui-tabs__bar--justified{display:table;width:100%;table-layout:fixed}.mui-tabs__bar.mui-tabs__bar--justified>li{display:table-cell}.mui-tabs__bar.mui-tabs__bar--justified>li>a{text-align:center;padding-left:0;padding-right:0}.mui-tabs__pane{display:none}.mui-tabs__pane.mui--is-active{display:block}[data-mui-toggle=tab]{animation-duration:.1ms;animation-name:mui-node-inserted}.mui-textfield{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-textfield>label{position:absolute;top:0;display:block;width:100%;color:rgba(0,0,0,.54);font-size:12px;font-weight:400;line-height:15px;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.mui-textfield>textarea{padding-top:5px}.mui-textfield>input,.mui-textfield>textarea{display:block}.mui-textfield>input:focus~label,.mui-textfield>textarea:focus~label{color:#2196F3}.mui-textfield--float-label>label{position:absolute;transform:translate(0,15px);font-size:16px;line-height:32px;color:rgba(0,0,0,.26);text-overflow:clip;cursor:text;pointer-events:none}.mui-textfield--float-label>input:focus~label,.mui-textfield--float-label>textarea:focus~label{transform:translate(0,0);font-size:12px;line-height:15px;text-overflow:ellipsis}.mui-textfield--float-label>input:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>input:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>input:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>textarea:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:rgba(0,0,0,.54);font-size:12px;line-height:15px;transform:translate(0,0);text-overflow:ellipsis}.mui-textfield--wrap-label{display:table;width:100%;padding-top:0}.mui-textfield--wrap-label:not(.mui-textfield--float-label)>label{display:table-header-group;position:static;white-space:normal;overflow-x:visible}.mui-textfield>input,.mui-textfield>textarea{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;background-color:transparent;color:rgba(0,0,0,.87);border:none;border-bottom:1px solid rgba(0,0,0,.26);outline:0;width:100%;font-size:16px;padding:0;box-shadow:none;border-radius:0;background-image:none}.mui-textfield>input:focus,.mui-textfield>textarea:focus{border-color:#2196F3;border-width:2px}.mui-textfield>input:-moz-read-only,.mui-textfield>input:disabled,.mui-textfield>textarea:-moz-read-only,.mui-textfield>textarea:disabled{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input:disabled,.mui-textfield>input:read-only,.mui-textfield>textarea:disabled,.mui-textfield>textarea:read-only{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input::-webkit-input-placeholder,.mui-textfield>textarea::-webkit-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::-moz-placeholder,.mui-textfield>textarea::-moz-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input:-ms-input-placeholder,.mui-textfield>textarea:-ms-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::placeholder,.mui-textfield>textarea::placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input{height:32px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>textarea{min-height:64px}.mui-textfield>textarea[rows]:not([rows="2"]):focus{margin-bottom:-1px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):not(:required),.mui-textfield>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required),.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty){border-color:#F44336;border-width:2px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty){height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required)~label,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):not(:required)~label,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:#F44336}.mui-textfield:not(.mui-textfield--float-label)>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label{color:#F44336}@keyframes mui-node-inserted{from{opacity:.99}to{opacity:1}}.mui--no-transition{transition:none!important}.mui--no-user-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.mui--text-left{text-align:left!important}.mui--text-right{text-align:right!important}.mui--text-center{text-align:center!important}.mui--text-justify{text-align:justify!important}.mui--text-nowrap{white-space:nowrap!important}.mui--align-baseline{vertical-align:baseline!important}.mui--align-top{vertical-align:top!important}.mui--align-middle{vertical-align:middle!important}.mui--align-bottom{vertical-align:bottom!important}.mui--text-dark{color:rgba(0,0,0,.87)}.mui--text-dark-secondary{color:rgba(0,0,0,.54)}.mui--text-dark-hint{color:rgba(0,0,0,.38)}.mui--text-light{color:#FFF}.mui--text-light-secondary{color:rgba(255,255,255,.7)}.mui--text-light-hint{color:rgba(255,255,255,.3)}.mui--text-accent{color:rgba(255,64,129,.87)}.mui--text-accent-secondary{color:rgba(255,64,129,.54)}.mui--text-accent-hint{color:rgba(255,64,129,.38)}.mui--text-black{color:#000}.mui--text-white{color:#FFF}.mui--text-danger{color:#F44336}.mui-list--unstyled{padding-left:0;list-style:none}.mui-list--inline{padding-left:0;list-style:none;margin-left:-5px}.mui-list--inline>li{display:inline-block;padding-left:5px;padding-right:5px}.mui--z1,.mui-dropdown__menu,.mui-select__menu{box-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24)}.mui--z2{box-shadow:0 3px 6px rgba(0,0,0,.16),0 3px 6px rgba(0,0,0,.23)}.mui--z3{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}.mui--z4{box-shadow:0 14px 28px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.22)}.mui--z5{box-shadow:0 19px 38px rgba(0,0,0,.3),0 15px 12px rgba(0,0,0,.22)}.mui--clearfix:after,.mui--clearfix:before{content:" ";display:table}.mui--clearfix:after{clear:both}.mui--pull-right{float:right!important}.mui--pull-left{float:left!important}.mui--hide{display:none!important}.mui--show{display:block!important}.mui--invisible{visibility:hidden}.mui--overflow-hidden{overflow:hidden!important}.mui--overflow-hidden-x{overflow-x:hidden!important}.mui--overflow-hidden-y{overflow-y:hidden!important}.mui--visible-lg-block,.mui--visible-lg-inline,.mui--visible-lg-inline-block,.mui--visible-md-block,.mui--visible-md-inline,.mui--visible-md-inline-block,.mui--visible-sm-block,.mui--visible-sm-inline,.mui--visible-sm-inline-block,.mui--visible-xl-block,.mui--visible-xl-inline,.mui--visible-xl-inline-block,.mui--visible-xs-block,.mui--visible-xs-inline,.mui--visible-xs-inline-block{display:none!important}@media (max-width:543px){.mui-visible-xs{display:block!important}table.mui-visible-xs{display:table}tr.mui-visible-xs{display:table-row!important}td.mui-visible-xs,th.mui-visible-xs{display:table-cell!important}.mui--visible-xs-block{display:block!important}.mui--visible-xs-inline{display:inline!important}.mui--visible-xs-inline-block{display:inline-block!important}}@media (min-width:544px) and (max-width:767px){.mui-visible-sm{display:block!important}table.mui-visible-sm{display:table}tr.mui-visible-sm{display:table-row!important}td.mui-visible-sm,th.mui-visible-sm{display:table-cell!important}.mui--visible-sm-block{display:block!important}.mui--visible-sm-inline{display:inline!important}.mui--visible-sm-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.mui-visible-md{display:block!important}table.mui-visible-md{display:table}tr.mui-visible-md{display:table-row!important}td.mui-visible-md,th.mui-visible-md{display:table-cell!important}.mui--visible-md-block{display:block!important}.mui--visible-md-inline{display:inline!important}.mui--visible-md-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.mui-visible-lg{display:block!important}table.mui-visible-lg{display:table}tr.mui-visible-lg{display:table-row!important}td.mui-visible-lg,th.mui-visible-lg{display:table-cell!important}.mui--visible-lg-block{display:block!important}.mui--visible-lg-inline{display:inline!important}.mui--visible-lg-inline-block{display:inline-block!important}}@media (min-width:1200px){.mui-visible-xl{display:block!important}table.mui-visible-xl{display:table}tr.mui-visible-xl{display:table-row!important}td.mui-visible-xl,th.mui-visible-xl{display:table-cell!important}.mui--visible-xl-block{display:block!important}.mui--visible-xl-inline{display:inline!important}.mui--visible-xl-inline-block{display:inline-block!important}}@media (max-width:543px){.mui--hidden-xs{display:none!important}}@media (min-width:544px) and (max-width:767px){.mui--hidden-sm{display:none!important}}@media (min-width:768px) and (max-width:991px){.mui--hidden-md{display:none!important}}@media (min-width:992px) and (max-width:1199px){.mui--hidden-lg{display:none!important}}@media (min-width:1200px){.mui--hidden-xl{display:none!important}}body.mui-body--scroll-lock{overflow:hidden!important}#mui-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:99999999;background-color:rgba(0,0,0,.2);overflow:auto}.mui-ripple-effect{position:absolute;border-radius:50%;pointer-events:none;opacity:0;animation:mui-ripple-animation 2s}@keyframes mui-ripple-animation{from{transform:scale(1);opacity:.4}to{transform:scale(100);opacity:0}}.mui-btn>.mui-ripple-effect{background-color:#a6a6a6}.mui-btn--primary>.mui-ripple-effect{background-color:#FFF}.mui-btn--dark>.mui-ripple-effect{background-color:#FFF}.mui-btn--danger>.mui-ripple-effect{background-color:#FFF}.mui-btn--accent>.mui-ripple-effect{background-color:#FFF}.mui-btn--flat>.mui-ripple-effect{background-color:#a6a6a6}.mui--text-display4{font-weight:300;font-size:112px;line-height:112px}.mui--text-display3{font-weight:400;font-size:56px;line-height:56px}.mui--text-display2{font-weight:400;font-size:45px;line-height:48px}.mui--text-display1,h1{font-weight:400;font-size:34px;line-height:40px}.mui--text-headline,h2{font-weight:400;font-size:24px;line-height:32px}.mui--text-title,h3{font-weight:400;font-size:20px;line-height:28px}.mui--text-subhead,h4{font-weight:400;font-size:16px;line-height:24px}.mui--text-body2,h5{font-weight:500;font-size:14px;line-height:24px}.mui--text-body1{font-weight:400;font-size:14px;line-height:20px}.mui--text-caption{font-weight:400;font-size:12px;line-height:16px}.mui--text-menu{font-weight:500;font-size:13px;line-height:17px}.mui--text-button{font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase} \ No newline at end of file diff --git a/platforms/android/assets/www/libs/mui/packages/cdn/email/mui-email-inline.css b/platforms/android/assets/www/libs/mui/packages/cdn/email/mui-email-inline.css new file mode 100644 index 0000000..da4dcc2 --- /dev/null +++ b/platforms/android/assets/www/libs/mui/packages/cdn/email/mui-email-inline.css @@ -0,0 +1,686 @@ +body { + width: 100% !important; + min-width: 100%; + margin: 0; + padding: 0; +} + +img { + border: 0 none; + height: auto; + line-height: 100%; + outline: none; + text-decoration: none; +} + +a img { + border: 0 none; +} + +table { + border-spacing: 0; + border-collapse: collapse; +} + +td { + padding: 0; + text-align: left; + word-break: break-word; + -webkit-hyphens: auto; + -moz-hyphens: auto; + hyphens: auto; + border-collapse: collapse !important; +} + +table, td { + mso-table-lspace: 0pt; + mso-table-rspace: 0pt; +} + +body, +table, +td, +p, +a, +li, +blockquote { + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +img { + -ms-interpolation-mode: bicubic; +} + +/** + * MUI Colors module + */ +/** + * MUI Email Reboot + */ +body { + color: #212121; + font-family: "Helvetica Neue", Helvetica, Arial, Verdana, "Trebuchet MS"; + font-weight: 400; + font-size: 14px; + line-height: 1.429; + letter-spacing: 0.001em; + background-color: #FFF; +} + +a { + color: #2196F3; + text-decoration: none; +} + +p { + margin: 0 0 10px; +} + +hr { + color: #e0e0e0; + background-color: #e0e0e0; + height: 1px; + border: none; +} + +strong { + font-weight: 700; +} + +h1, h2, h3 { + margin-top: 20px; + margin-bottom: 10px; +} + +h4, h5, h6 { + margin-top: 10px; + margin-bottom: 10px; +} + +/** + * MUI Email Body Component + */ +.mui-body { + margin: 0; + padding: 0; + height: 100%; + width: 100%; + color: #212121; + font-family: "Helvetica Neue", Helvetica, Arial, Verdana, "Trebuchet MS"; + font-weight: 400; + font-size: 14px; + line-height: 1.429; + letter-spacing: 0.001em; + background-color: #FFF; +} + +/** + * MUI Email Buttons + */ +.mui-btn { + cursor: pointer; + white-space: nowrap; +} + +a.mui-btn { + font-weight: 500; + font-size: 14px; + color: #212121; + line-height: 14px; + letter-spacing: 0.03em; + text-transform: uppercase; + border-top: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; + border-top: 1px solid #FFF; + border-left: 1px solid #FFF; + border-right: 1px solid #FFF; + border-bottom: 1px solid #FFF; + color: #212121; + background-color: #FFF; + display: inline-block; + text-decoration: none; + text-align: center; + border-radius: 3px; + padding: 10px 25px; + background-color: transparent; +} + +a.mui-btn.mui-btn--raised { + border-top: 1px solid #f2f2f2; + border-left: 1px solid #e6e6e6; + border-right: 1px solid #e6e6e6; + border-bottom: 2px solid #bababa; +} + +a.mui-btn.mui-btn--flat { + background-color: transparent; + color: #212121; + border-top: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; +} + +a.mui-btn.mui-btn--primary { + border-top: 1px solid #2196F3; + border-left: 1px solid #2196F3; + border-right: 1px solid #2196F3; + border-bottom: 1px solid #2196F3; + color: #FFF; + background-color: #2196F3; +} + +a.mui-btn.mui-btn--primary.mui-btn--raised { + border-top: 1px solid #51adf6; + border-left: 1px solid #2196F3; + border-right: 1px solid #2196F3; + border-bottom: 2px solid #0a6ebd; +} + +a.mui-btn.mui-btn--primary.mui-btn--flat { + background-color: transparent; + color: #2196F3; + border-top: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; +} + +a.mui-btn.mui-btn--danger { + border-top: 1px solid #F44336; + border-left: 1px solid #F44336; + border-right: 1px solid #F44336; + border-bottom: 1px solid #F44336; + color: #FFF; + background-color: #F44336; +} + +a.mui-btn.mui-btn--danger.mui-btn--raised { + border-top: 1px solid #f77066; + border-left: 1px solid #F44336; + border-right: 1px solid #F44336; + border-bottom: 2px solid #d2190b; +} + +a.mui-btn.mui-btn--danger.mui-btn--flat { + background-color: transparent; + color: #F44336; + border-top: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; +} + +a.mui-btn.mui-btn--dark { + border-top: 1px solid #424242; + border-left: 1px solid #424242; + border-right: 1px solid #424242; + border-bottom: 1px solid #424242; + color: #FFF; + background-color: #424242; +} + +a.mui-btn.mui-btn--dark.mui-btn--raised { + border-top: 1px solid #5c5c5c; + border-left: 1px solid #424242; + border-right: 1px solid #424242; + border-bottom: 2px solid #1c1c1c; +} + +a.mui-btn.mui-btn--dark.mui-btn--flat { + background-color: transparent; + color: #424242; + border-top: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; +} + +a.mui-btn.mui-btn--accent { + border-top: 1px solid #FF4081; + border-left: 1px solid #FF4081; + border-right: 1px solid #FF4081; + border-bottom: 1px solid #FF4081; + color: #FFF; + background-color: #FF4081; +} + +a.mui-btn.mui-btn--accent.mui-btn--raised { + border-top: 1px solid #ff73a3; + border-left: 1px solid #FF4081; + border-right: 1px solid #FF4081; + border-bottom: 2px solid #f30053; +} + +a.mui-btn.mui-btn--accent.mui-btn--flat { + background-color: transparent; + color: #FF4081; + border-top: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; +} + +table.mui-btn > tr > td, +table.mui-btn > tbody > tr > td { + background-color: #FFF; +} + +table.mui-btn > tr > td > a, +table.mui-btn > tbody > tr > td > a { + color: #212121; + border-top: 1px solid #FFF; + border-left: 1px solid #FFF; + border-right: 1px solid #FFF; + border-bottom: 1px solid #FFF; +} + +table.mui-btn.mui-btn--raised > tr > td > a, +table.mui-btn.mui-btn--raised > tbody > tr > td > a { + border-top: 1px solid #f2f2f2; + border-left: 1px solid #e6e6e6; + border-right: 1px solid #e6e6e6; + border-bottom: 2px solid #bababa; +} + +table.mui-btn.mui-btn--flat > tr > td, +table.mui-btn.mui-btn--flat > tbody > tr > td { + background-color: transparent; +} + +table.mui-btn.mui-btn--flat > tr > td > a, +table.mui-btn.mui-btn--flat > tbody > tr > td > a { + color: #212121; + border-top: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; +} + +table.mui-btn > tr > td, +table.mui-btn > tbody > tr > td { + border-radius: 3px; +} + +table.mui-btn > tr > td > a, +table.mui-btn > tbody > tr > td > a { + font-weight: 500; + font-size: 14px; + color: #212121; + line-height: 14px; + letter-spacing: 0.03em; + text-transform: uppercase; + border-top: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; + display: inline-block; + text-decoration: none; + text-align: center; + border-radius: 3px; + padding: 10px 25px; + background-color: transparent; +} + +table.mui-btn.mui-btn--primary > tr > td, +table.mui-btn.mui-btn--primary > tbody > tr > td { + background-color: #2196F3; +} + +table.mui-btn.mui-btn--primary > tr > td > a, +table.mui-btn.mui-btn--primary > tbody > tr > td > a { + color: #FFF; + border-top: 1px solid #2196F3; + border-left: 1px solid #2196F3; + border-right: 1px solid #2196F3; + border-bottom: 1px solid #2196F3; +} + +table.mui-btn.mui-btn--primary.mui-btn--raised > tr > td > a, +table.mui-btn.mui-btn--primary.mui-btn--raised > tbody > tr > td > a { + border-top: 1px solid #51adf6; + border-left: 1px solid #2196F3; + border-right: 1px solid #2196F3; + border-bottom: 2px solid #0a6ebd; +} + +table.mui-btn.mui-btn--primary.mui-btn--flat > tr > td, +table.mui-btn.mui-btn--primary.mui-btn--flat > tbody > tr > td { + background-color: transparent; +} + +table.mui-btn.mui-btn--primary.mui-btn--flat > tr > td > a, +table.mui-btn.mui-btn--primary.mui-btn--flat > tbody > tr > td > a { + color: #2196F3; + border-top: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; +} + +table.mui-btn.mui-btn--danger > tr > td, +table.mui-btn.mui-btn--danger > tbody > tr > td { + background-color: #F44336; +} + +table.mui-btn.mui-btn--danger > tr > td > a, +table.mui-btn.mui-btn--danger > tbody > tr > td > a { + color: #FFF; + border-top: 1px solid #F44336; + border-left: 1px solid #F44336; + border-right: 1px solid #F44336; + border-bottom: 1px solid #F44336; +} + +table.mui-btn.mui-btn--danger.mui-btn--raised > tr > td > a, +table.mui-btn.mui-btn--danger.mui-btn--raised > tbody > tr > td > a { + border-top: 1px solid #f77066; + border-left: 1px solid #F44336; + border-right: 1px solid #F44336; + border-bottom: 2px solid #d2190b; +} + +table.mui-btn.mui-btn--danger.mui-btn--flat > tr > td, +table.mui-btn.mui-btn--danger.mui-btn--flat > tbody > tr > td { + background-color: transparent; +} + +table.mui-btn.mui-btn--danger.mui-btn--flat > tr > td > a, +table.mui-btn.mui-btn--danger.mui-btn--flat > tbody > tr > td > a { + color: #F44336; + border-top: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; +} + +table.mui-btn.mui-btn--dark > tr > td, +table.mui-btn.mui-btn--dark > tbody > tr > td { + background-color: #424242; +} + +table.mui-btn.mui-btn--dark > tr > td > a, +table.mui-btn.mui-btn--dark > tbody > tr > td > a { + color: #FFF; + border-top: 1px solid #424242; + border-left: 1px solid #424242; + border-right: 1px solid #424242; + border-bottom: 1px solid #424242; +} + +table.mui-btn.mui-btn--dark.mui-btn--raised > tr > td > a, +table.mui-btn.mui-btn--dark.mui-btn--raised > tbody > tr > td > a { + border-top: 1px solid #5c5c5c; + border-left: 1px solid #424242; + border-right: 1px solid #424242; + border-bottom: 2px solid #1c1c1c; +} + +table.mui-btn.mui-btn--dark.mui-btn--flat > tr > td, +table.mui-btn.mui-btn--dark.mui-btn--flat > tbody > tr > td { + background-color: transparent; +} + +table.mui-btn.mui-btn--dark.mui-btn--flat > tr > td > a, +table.mui-btn.mui-btn--dark.mui-btn--flat > tbody > tr > td > a { + color: #424242; + border-top: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; +} + +table.mui-btn.mui-btn--accent > tr > td, +table.mui-btn.mui-btn--accent > tbody > tr > td { + background-color: #FF4081; +} + +table.mui-btn.mui-btn--accent > tr > td > a, +table.mui-btn.mui-btn--accent > tbody > tr > td > a { + color: #FFF; + border-top: 1px solid #FF4081; + border-left: 1px solid #FF4081; + border-right: 1px solid #FF4081; + border-bottom: 1px solid #FF4081; +} + +table.mui-btn.mui-btn--accent.mui-btn--raised > tr > td > a, +table.mui-btn.mui-btn--accent.mui-btn--raised > tbody > tr > td > a { + border-top: 1px solid #ff73a3; + border-left: 1px solid #FF4081; + border-right: 1px solid #FF4081; + border-bottom: 2px solid #f30053; +} + +table.mui-btn.mui-btn--accent.mui-btn--flat > tr > td, +table.mui-btn.mui-btn--accent.mui-btn--flat > tbody > tr > td { + background-color: transparent; +} + +table.mui-btn.mui-btn--accent.mui-btn--flat > tr > td > a, +table.mui-btn.mui-btn--accent.mui-btn--flat > tbody > tr > td > a { + color: #FF4081; + border-top: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; +} + +a.mui-btn--small, +table.mui-btn--small > tr > td > a, +table.mui-btn--small > tbody > tr > td > a { + font-size: 13px; + padding: 7.8px 15px; +} + +a.mui-btn--large, +table.mui-btn--large > tr > td > a, +table.mui-btn--large > tbody > tr > td > a { + font-size: 14px; + padding: 19px 25px; +} + +/** + * MUI Email Containers + */ +.mui-container, .mui-container-fixed { + max-width: 600px; + display: block; + margin: 0 auto; + clear: both; + text-align: left; + padding-left: 15px; + padding-right: 15px; +} + +.mui-container-fixed { + width: 600px; +} + +/** + * MUI Email Dividers + */ +.mui-divider { + display: block; + height: 1px; + background-color: #e0e0e0; +} + +.mui--divider-top { + border-top: 1px solid #e0e0e0; +} + +.mui--divider-bottom { + border-bottom: 1px solid #e0e0e0; +} + +.mui--divider-left { + border-left: 1px solid #e0e0e0; +} + +.mui--divider-right { + border-right: 1px solid #e0e0e0; +} + +/** + * MUI Email Panel + */ +.mui-panel { + padding: 15px; + border-radius: 0; + background-color: #FFF; + border-top: 1px solid #ededed; + border-left: 1px solid #e6e6e6; + border-right: 1px solid #e6e6e6; + border-bottom: 2px solid #d4d4d4; +} + +/** + * MUI Email Helpers + */ +.mui--text-left { + text-align: left; +} + +.mui--text-right { + text-align: right; +} + +.mui--text-center { + text-align: center; +} + +.mui--text-justify { + text-align: justify; +} + +.mui-image--fix { + display: block; +} + +.mui--text-dark { + color: #212121; +} + +.mui--text-dark-secondary { + color: #757575; +} + +.mui--text-dark-hint { + color: #9e9e9e; +} + +.mui--text-light { + color: #FFF; +} + +.mui--text-light-secondary { + color: #b3b3b3; +} + +.mui--text-light-hint { + color: gray; +} + +.mui--text-accent { + color: #FF4081; +} + +.mui--text-accent-secondary { + color: #ff82ad; +} + +.mui--text-accent-hint { + color: #ffa6c4; +} + +.mui--text-black { + color: #000; +} + +.mui--text-white { + color: #FFF; +} + +.mui--text-danger { + color: #F44336; +} + +/** + * MUI Email Typography + */ +.mui--text-display4 { + font-weight: 300; + font-size: 112px; + line-height: 112px; +} + +.mui--text-display3 { + font-weight: 400; + font-size: 56px; + line-height: 56px; +} + +.mui--text-display2 { + font-weight: 400; + font-size: 45px; + line-height: 48px; +} + +.mui--text-display1, h1 { + font-weight: 400; + font-size: 34px; + line-height: 40px; +} + +.mui--text-headline, h2 { + font-weight: 400; + font-size: 24px; + line-height: 32px; +} + +.mui--text-title, h3 { + font-weight: 400; + font-size: 20px; + line-height: 28px; +} + +.mui--text-subhead, h4 { + font-weight: 400; + font-size: 16px; + line-height: 24px; +} + +.mui--text-body2, h5 { + font-weight: 500; + font-size: 14px; + line-height: 24px; +} + +.mui--text-body1 { + font-weight: 400; + font-size: 14px; + line-height: 20px; +} + +.mui--text-caption { + font-weight: 400; + font-size: 12px; + line-height: 16px; +} + +.mui--text-menu { + font-weight: 500; + font-size: 13px; + line-height: 17px; +} + +.mui--text-button { + font-weight: 500; + font-size: 14px; + line-height: 18px; + text-transform: uppercase; +} diff --git a/platforms/android/assets/www/libs/mui/packages/cdn/email/mui-email-styletag.css b/platforms/android/assets/www/libs/mui/packages/cdn/email/mui-email-styletag.css new file mode 100644 index 0000000..1471793 --- /dev/null +++ b/platforms/android/assets/www/libs/mui/packages/cdn/email/mui-email-styletag.css @@ -0,0 +1,36 @@ +/** + * MUI Colors module + */ +/** + * MUI Email Styletag + */ +#outlook a { + padding: 0; +} + +.ReadMsgBody { + width: 100%; +} + +.ExternalClass { + width: 100%; +} + +.ExternalClass, +.ExternalClass p, +.ExternalClass span, +.ExternalClass font, +.ExternalClass td, +.ExternalClass div { + line-height: 100%; +} + +.mui-container-fixed { + width: 600px; + display: block; + margin: 0 auto; + clear: both; + text-align: left; + padding-left: 15px; + padding-right: 15px; +} diff --git a/platforms/android/assets/www/libs/mui/packages/cdn/extra/mui-angular-combined.js b/platforms/android/assets/www/libs/mui/packages/cdn/extra/mui-angular-combined.js new file mode 100644 index 0000000..ab809aa --- /dev/null +++ b/platforms/android/assets/www/libs/mui/packages/cdn/extra/mui-angular-combined.js @@ -0,0 +1,2 @@ +!function(i){var e=i.babelHelpers={};e.interopRequireDefault=function(i){return i&&i.__esModule?i:{"default":i}},e.interopRequireWildcard=function(i){if(i&&i.__esModule)return i;var e={};if(null!=i)for(var t in i)Object.prototype.hasOwnProperty.call(i,t)&&(e[t]=i[t]);return e["default"]=i,e}}("undefined"==typeof global?self:global),function i(e,t,o){function n(a,r){if(!t[a]){if(!e[a]){var u="function"==typeof require&&require;if(!r&&u)return u(a,!0);if(l)return l(a,!0);throw new Error("Cannot find module '"+a+"'")}var m=t[a]={exports:{}};e[a][0].call(m.exports,function(i){var t=e[a][1][i];return n(t?t:i)},m,m.exports,i,e,t,o)}return t[a].exports}for(var l="function"==typeof require&&require,a=0;as&&(f=r+(t+1)*a-(-1*o+n+l),b=e*a+2*r-p,g=Math.min(f,b)),{height:p+"px",top:o+"px",scrollTop:g}}var n=15,l=32,a=42,r=8;e.exports={getMenuPositionalCSS:o}},{}],5:[function(i,e,t){"use strict";function o(i,e){if(e&&i.setAttribute){for(var t,o=b(i),n=e.split(" "),l=0;l-1:!1}function a(i){if(void 0===i)return"undefined";var e=Object.prototype.toString.call(i);if(0===e.indexOf("[object "))return e.slice(8,-1).toLowerCase();throw new Error("MUI: Could not understand type: "+e)}function r(i,e,t,o){o=void 0===o?!1:o,i.addEventListener(e,t,o);var n=i._muiEventCache=i._muiEventCache||{};n[e]=n[e]||[],n[e].push([t,o])}function u(i,e,t,o){o=void 0===o?!1:o;var n,l,a=i._muiEventCache=i._muiEventCache||{},r=a[e]||[];for(l=r.length;l--;)n=r[l],(void 0===t||n[0]===t&&n[1]===o)&&(r.splice(l,1),i.removeEventListener(e,n[0],n[1]))}function m(i,e,t,o){r(i,e,function n(o){t&&t.apply(this,arguments),u(i,e,n)},o)}function d(i,e){var t=window;if(void 0===e){if(i===t){var o=document.documentElement;return(t.pageXOffset||o.scrollLeft)-(o.clientLeft||0)}return i.scrollLeft}i===t?t.scrollTo(e,s(t)):i.scrollLeft=e}function s(i,e){var t=window;if(void 0===e){if(i===t){var o=document.documentElement;return(t.pageYOffset||o.scrollTop)-(o.clientTop||0)}return i.scrollTop}i===t?t.scrollTo(d(t),e):i.scrollTop=e}function c(i){var e=window,t=i.getBoundingClientRect(),o=s(e),n=d(e);return{top:t.top+o,left:t.left+n,height:t.height,width:t.width}}function p(i){var e=!1,t=!0,o=document,n=o.defaultView,l=o.documentElement,a=o.addEventListener?"addEventListener":"attachEvent",r=o.addEventListener?"removeEventListener":"detachEvent",u=o.addEventListener?"":"on",m=function c(t){"readystatechange"==t.type&&"complete"!=o.readyState||(("load"==t.type?n:o)[r](u+t.type,c,!1),!e&&(e=!0)&&i.call(n,t.type||t))},d=function p(){try{l.doScroll("left")}catch(i){return void setTimeout(p,50)}m("poll")};if("complete"==o.readyState)i.call(n,"lazy");else{if(o.createEventObject&&l.doScroll){try{t=!n.frameElement}catch(s){}t&&d()}o[a](u+"DOMContentLoaded",m,!1),o[a](u+"readystatechange",m,!1),n[a](u+"load",m,!1)}}function f(i,e){if(e&&i.setAttribute){for(var t,o=b(i),n=e.split(" "),l=0;l=0;)o=o.replace(" "+t+" "," ");i.setAttribute("class",o.trim())}}function b(i){var e=(i.getAttribute("class")||"").replace(/[\n\t]/g,"");return" "+e+" "}function g(i){return i.replace(v,function(i,e,t,o){return o?t.toUpperCase():t}).replace(y,"Moz$1")}function x(i,e,t){var o;return o=t.getPropertyValue(e),""!==o||i.ownerDocument||(o=i.style[g(e)]),o}var h,v=/([\:\-\_]+(.))/g,y=/^moz([A-Z])/;h={multiple:!0,selected:!0,checked:!0,disabled:!0,readonly:!0,required:!0,open:!0},e.exports={addClass:o,css:n,hasClass:l,off:u,offset:c,on:r,one:m,ready:p,removeClass:f,type:a,scrollLeft:d,scrollTop:s}},{}],6:[function(i,e,t){"use strict";function o(){var i=window;if(g.debug&&"undefined"!=typeof i.console)try{i.console.log.apply(i.console,arguments)}catch(e){var t=Array.prototype.slice.call(arguments);i.console.log(t.join("\n"))}}function n(i){var e,t=document;e=t.head||t.getElementsByTagName("head")[0]||t.documentElement;var o=t.createElement("style");return o.type="text/css",o.styleSheet?o.styleSheet.cssText=i:o.appendChild(t.createTextNode(i)),e.insertBefore(o,e.firstChild),o}function l(i,e){if(!e)throw new Error("MUI: "+i);"undefined"!=typeof console&&console.error("MUI Warning: "+i)}function a(i){if(h.push(i),void 0===h._initialized){var e=document;x.on(e,"animationstart",r),x.on(e,"mozAnimationStart",r),x.on(e,"webkitAnimationStart",r),h._initialized=!0}}function r(i){if("mui-node-inserted"===i.animationName)for(var e=i.target,t=h.length-1;t>=0;t--)h[t](e)}function u(i){var e="";for(var t in i)e+=i[t]?t+" ":"";return e.trim()}function m(){if(void 0!==b)return b;var i=document.createElement("x");return i.style.cssText="pointer-events:auto",b="auto"===i.style.pointerEvents}function d(i,e){return function(){i[e].apply(i,arguments)}}function s(i,e,t,o,n){var l,a=document.createEvent("HTMLEvents"),t=void 0!==t?t:!0,o=void 0!==o?o:!0;if(a.initEvent(e,t,o),n)for(l in n)a[l]=n[l];return i&&i.dispatchEvent(a),a}function c(){if(v+=1,1===v){var i=window,e=document;f={left:x.scrollLeft(i),top:x.scrollTop(i)},x.addClass(e.body,y),i.scrollTo(f.left,f.top)}}function p(){if(0!==v&&(v-=1,0===v)){var i=window,e=document;x.removeClass(e.body,y),i.scrollTo(f.left,f.top)}}var f,b,g=i("../config"),x=i("./jqLite"),h=[],v=0,y="mui-body--scroll-lock";e.exports={callback:d,classNames:u,disableScrollLock:p,dispatchEvent:s,enableScrollLock:c,log:o,loadStyle:n,onNodeInserted:a,raiseError:l,supportsPointerEvents:m}},{"../config":3,"./jqLite":5}],7:[function(i,e,t){e.exports='/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-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{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}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{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{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-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:border-box}:after,:before{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:Arial,Verdana,Tahoma;font-size:14px;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);background-color:#FFF}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#2196F3;text-decoration:none}a:focus,a:hover{color:#1976D2;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}p{margin:0 0 10px}ol,ul{margin-top:0;margin-bottom:10px}figure{margin:0}img{vertical-align:middle}hr{margin-top:20px;margin-bottom:20px;border:0;height:1px;background-color:rgba(0,0,0,.12)}legend{display:block;width:100%;padding:0;margin-bottom:10px;font-size:21px;color:rgba(0,0,0,.87);line-height:inherit;border:0}input[type=search]{box-sizing:border-box;-webkit-appearance:none}input[type=checkbox]:focus,input[type=radio]:focus,input[type=file]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type=checkbox]:disabled,input[type=radio]:disabled{cursor:not-allowed}strong{font-weight:700}abbr[title]{cursor:help;border-bottom:1px dotted #2196F3}h1,h2,h3{margin-top:20px;margin-bottom:10px}h4,h5,h6{margin-top:10px;margin-bottom:10px}.mui--appbar-height{height:56px}.mui--appbar-min-height,.mui-appbar{min-height:56px}.mui--appbar-line-height{line-height:56px}.mui--appbar-top{top:56px}@media (orientation:landscape) and (max-height:480px){.mui--appbar-height{height:48px}.mui--appbar-min-height,.mui-appbar{min-height:48px}.mui--appbar-line-height{line-height:48px}.mui--appbar-top{top:48px}}@media (min-width:480px){.mui--appbar-height{height:64px}.mui--appbar-min-height,.mui-appbar{min-height:64px}.mui--appbar-line-height{line-height:64px}.mui--appbar-top{top:64px}}.mui-appbar{background-color:#2196F3;color:#FFF}.mui-btn{animation-duration:.1ms;animation-name:mui-node-inserted;font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase;color:rgba(0,0,0,.87);background-color:#FFF;transition:all .2s ease-in-out;display:inline-block;height:36px;padding:0 26px;margin-top:6px;margin-bottom:6px;border:none;border-radius:2px;cursor:pointer;-ms-touch-action:manipulation;touch-action:manipulation;background-image:none;text-align:center;line-height:36px;vertical-align:middle;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:14px;letter-spacing:.03em;position:relative;overflow:hidden}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{color:rgba(0,0,0,.87);background-color:#fff}.mui-btn[disabled]:active,.mui-btn[disabled]:focus,.mui-btn[disabled]:hover{color:rgba(0,0,0,.87);background-color:#FFF}.mui-btn.mui-btn--flat{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn.mui-btn--flat:active,.mui-btn.mui-btn--flat:focus,.mui-btn.mui-btn--flat:hover{color:rgba(0,0,0,.87);background-color:#f2f2f2}.mui-btn.mui-btn--flat[disabled]:active,.mui-btn.mui-btn--flat[disabled]:focus,.mui-btn.mui-btn--flat[disabled]:hover{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{outline:0;text-decoration:none;color:rgba(0,0,0,.87)}.mui-btn:focus,.mui-btn:hover{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:focus,.mui-btn:hover{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn.mui--is-disabled,.mui-btn:disabled{cursor:not-allowed;pointer-events:none;opacity:.6;box-shadow:none}.mui-btn+.mui-btn{margin-left:8px}.mui-btn--flat{background-color:transparent}.mui-btn--flat:active,.mui-btn--flat:focus,.mui-btn--flat:hover{box-shadow:none;background-color:#f2f2f2}.mui-btn--fab,.mui-btn--raised{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab,.mui-btn--raised{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn--fab{position:relative;padding:0;width:55px;height:55px;line-height:55px;border-radius:50%;z-index:1}.mui-btn--primary{color:#FFF;background-color:#2196F3}.mui-btn--primary:active,.mui-btn--primary:focus,.mui-btn--primary:hover{color:#FFF;background-color:#39a1f4}.mui-btn--primary[disabled]:active,.mui-btn--primary[disabled]:focus,.mui-btn--primary[disabled]:hover{color:#FFF;background-color:#2196F3}.mui-btn--primary.mui-btn--flat{color:#2196F3;background-color:transparent}.mui-btn--primary.mui-btn--flat:active,.mui-btn--primary.mui-btn--flat:focus,.mui-btn--primary.mui-btn--flat:hover{color:#2196F3;background-color:#f2f2f2}.mui-btn--primary.mui-btn--flat[disabled]:active,.mui-btn--primary.mui-btn--flat[disabled]:focus,.mui-btn--primary.mui-btn--flat[disabled]:hover{color:#2196F3;background-color:transparent}.mui-btn--dark{color:#FFF;background-color:#424242}.mui-btn--dark:active,.mui-btn--dark:focus,.mui-btn--dark:hover{color:#FFF;background-color:#4f4f4f}.mui-btn--dark[disabled]:active,.mui-btn--dark[disabled]:focus,.mui-btn--dark[disabled]:hover{color:#FFF;background-color:#424242}.mui-btn--dark.mui-btn--flat{color:#424242;background-color:transparent}.mui-btn--dark.mui-btn--flat:active,.mui-btn--dark.mui-btn--flat:focus,.mui-btn--dark.mui-btn--flat:hover{color:#424242;background-color:#f2f2f2}.mui-btn--dark.mui-btn--flat[disabled]:active,.mui-btn--dark.mui-btn--flat[disabled]:focus,.mui-btn--dark.mui-btn--flat[disabled]:hover{color:#424242;background-color:transparent}.mui-btn--danger{color:#FFF;background-color:#F44336}.mui-btn--danger:active,.mui-btn--danger:focus,.mui-btn--danger:hover{color:#FFF;background-color:#f55a4e}.mui-btn--danger[disabled]:active,.mui-btn--danger[disabled]:focus,.mui-btn--danger[disabled]:hover{color:#FFF;background-color:#F44336}.mui-btn--danger.mui-btn--flat{color:#F44336;background-color:transparent}.mui-btn--danger.mui-btn--flat:active,.mui-btn--danger.mui-btn--flat:focus,.mui-btn--danger.mui-btn--flat:hover{color:#F44336;background-color:#f2f2f2}.mui-btn--danger.mui-btn--flat[disabled]:active,.mui-btn--danger.mui-btn--flat[disabled]:focus,.mui-btn--danger.mui-btn--flat[disabled]:hover{color:#F44336;background-color:transparent}.mui-btn--accent{color:#FFF;background-color:#FF4081}.mui-btn--accent:active,.mui-btn--accent:focus,.mui-btn--accent:hover{color:#FFF;background-color:#ff5a92}.mui-btn--accent[disabled]:active,.mui-btn--accent[disabled]:focus,.mui-btn--accent[disabled]:hover{color:#FFF;background-color:#FF4081}.mui-btn--accent.mui-btn--flat{color:#FF4081;background-color:transparent}.mui-btn--accent.mui-btn--flat:active,.mui-btn--accent.mui-btn--flat:focus,.mui-btn--accent.mui-btn--flat:hover{color:#FF4081;background-color:#f2f2f2}.mui-btn--accent.mui-btn--flat[disabled]:active,.mui-btn--accent.mui-btn--flat[disabled]:focus,.mui-btn--accent.mui-btn--flat[disabled]:hover{color:#FF4081;background-color:transparent}.mui-btn--small{height:30.6px;line-height:30.6px;padding:0 16px;font-size:13px}.mui-btn--large{height:54px;line-height:54px;padding:0 26px;font-size:14px}.mui-btn--fab.mui-btn--small{width:44px;height:44px;line-height:44px}.mui-btn--fab.mui-btn--large{width:75px;height:75px;line-height:75px}.mui-checkbox,.mui-radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.mui-checkbox>label,.mui-radio>label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio],.mui-radio>label>input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px}.mui-checkbox+.mui-checkbox,.mui-radio+.mui-radio{margin-top:-5px}.mui-checkbox--inline,.mui-radio--inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.mui-checkbox--inline>input[type=checkbox],.mui-checkbox--inline>input[type=radio],.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox--inline>label>input[type=radio],.mui-radio--inline>input[type=checkbox],.mui-radio--inline>input[type=radio],.mui-radio--inline>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio]{margin:4px 0 0;line-height:normal}.mui-checkbox--inline+.mui-checkbox--inline,.mui-radio--inline+.mui-radio--inline{margin-top:0;margin-left:10px}.mui-container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container:after,.mui-container:before{content:" ";display:table}.mui-container:after{clear:both}@media (min-width:544px){.mui-container{max-width:570px}}@media (min-width:768px){.mui-container{max-width:740px}}@media (min-width:992px){.mui-container{max-width:960px}}@media (min-width:1200px){.mui-container{max-width:1170px}}.mui-container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container-fluid:after,.mui-container-fluid:before{content:" ";display:table}.mui-container-fluid:after{clear:both}.mui-divider{display:block;height:1px;background-color:rgba(0,0,0,.12)}.mui--divider-top{border-top:1px solid rgba(0,0,0,.12)}.mui--divider-bottom{border-bottom:1px solid rgba(0,0,0,.12)}.mui--divider-left{border-left:1px solid rgba(0,0,0,.12)}.mui--divider-right{border-right:1px solid rgba(0,0,0,.12)}.mui-dropdown{display:inline-block;position:relative}[data-mui-toggle=dropdown]{animation-duration:.1ms;animation-name:mui-node-inserted;outline:0}.mui-dropdown__menu{position:absolute;top:100%;left:0;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#FFF;border-radius:2px;z-index:1;background-clip:padding-box}.mui-dropdown__menu.mui--is-open{display:block}.mui-dropdown__menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);white-space:nowrap}.mui-dropdown__menu>li>a:focus,.mui-dropdown__menu>li>a:hover{text-decoration:none;color:rgba(0,0,0,.87);background-color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a,.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;cursor:not-allowed}.mui-dropdown__menu--right{left:auto;right:0}@media (min-width:544px){.mui-form--inline>.mui-textfield{display:inline-block;margin-bottom:0}.mui-form--inline>.mui-checkbox,.mui-form--inline>.mui-radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.mui-form--inline>.mui-checkbox>label,.mui-form--inline>.mui-radio>label{padding-left:0}.mui-form--inline>.mui-checkbox>label>input[type=checkbox],.mui-form--inline>.mui-radio>label>input[type=radio]{position:relative;margin-left:0}.mui-form--inline>.mui-select{display:inline-block}.mui-form--inline>.mui-btn{margin-bottom:0;margin-top:0;vertical-align:bottom}}.mui-row{margin-left:-15px;margin-right:-15px}.mui-row:after,.mui-row:before{content:" ";display:table}.mui-row:after{clear:both}.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9,.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9,.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9,.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{min-height:1px;padding-left:15px;padding-right:15px}.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{float:left}.mui-col-xs-1{width:8.33333%}.mui-col-xs-2{width:16.66667%}.mui-col-xs-3{width:25%}.mui-col-xs-4{width:33.33333%}.mui-col-xs-5{width:41.66667%}.mui-col-xs-6{width:50%}.mui-col-xs-7{width:58.33333%}.mui-col-xs-8{width:66.66667%}.mui-col-xs-9{width:75%}.mui-col-xs-10{width:83.33333%}.mui-col-xs-11{width:91.66667%}.mui-col-xs-12{width:100%}.mui-col-xs-offset-0{margin-left:0}.mui-col-xs-offset-1{margin-left:8.33333%}.mui-col-xs-offset-2{margin-left:16.66667%}.mui-col-xs-offset-3{margin-left:25%}.mui-col-xs-offset-4{margin-left:33.33333%}.mui-col-xs-offset-5{margin-left:41.66667%}.mui-col-xs-offset-6{margin-left:50%}.mui-col-xs-offset-7{margin-left:58.33333%}.mui-col-xs-offset-8{margin-left:66.66667%}.mui-col-xs-offset-9{margin-left:75%}.mui-col-xs-offset-10{margin-left:83.33333%}.mui-col-xs-offset-11{margin-left:91.66667%}.mui-col-xs-offset-12{margin-left:100%}@media (min-width:544px){.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9{float:left}.mui-col-sm-1{width:8.33333%}.mui-col-sm-2{width:16.66667%}.mui-col-sm-3{width:25%}.mui-col-sm-4{width:33.33333%}.mui-col-sm-5{width:41.66667%}.mui-col-sm-6{width:50%}.mui-col-sm-7{width:58.33333%}.mui-col-sm-8{width:66.66667%}.mui-col-sm-9{width:75%}.mui-col-sm-10{width:83.33333%}.mui-col-sm-11{width:91.66667%}.mui-col-sm-12{width:100%}.mui-col-sm-offset-0{margin-left:0}.mui-col-sm-offset-1{margin-left:8.33333%}.mui-col-sm-offset-2{margin-left:16.66667%}.mui-col-sm-offset-3{margin-left:25%}.mui-col-sm-offset-4{margin-left:33.33333%}.mui-col-sm-offset-5{margin-left:41.66667%}.mui-col-sm-offset-6{margin-left:50%}.mui-col-sm-offset-7{margin-left:58.33333%}.mui-col-sm-offset-8{margin-left:66.66667%}.mui-col-sm-offset-9{margin-left:75%}.mui-col-sm-offset-10{margin-left:83.33333%}.mui-col-sm-offset-11{margin-left:91.66667%}.mui-col-sm-offset-12{margin-left:100%}}@media (min-width:768px){.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9{float:left}.mui-col-md-1{width:8.33333%}.mui-col-md-2{width:16.66667%}.mui-col-md-3{width:25%}.mui-col-md-4{width:33.33333%}.mui-col-md-5{width:41.66667%}.mui-col-md-6{width:50%}.mui-col-md-7{width:58.33333%}.mui-col-md-8{width:66.66667%}.mui-col-md-9{width:75%}.mui-col-md-10{width:83.33333%}.mui-col-md-11{width:91.66667%}.mui-col-md-12{width:100%}.mui-col-md-offset-0{margin-left:0}.mui-col-md-offset-1{margin-left:8.33333%}.mui-col-md-offset-2{margin-left:16.66667%}.mui-col-md-offset-3{margin-left:25%}.mui-col-md-offset-4{margin-left:33.33333%}.mui-col-md-offset-5{margin-left:41.66667%}.mui-col-md-offset-6{margin-left:50%}.mui-col-md-offset-7{margin-left:58.33333%}.mui-col-md-offset-8{margin-left:66.66667%}.mui-col-md-offset-9{margin-left:75%}.mui-col-md-offset-10{margin-left:83.33333%}.mui-col-md-offset-11{margin-left:91.66667%}.mui-col-md-offset-12{margin-left:100%}}@media (min-width:992px){.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9{float:left}.mui-col-lg-1{width:8.33333%}.mui-col-lg-2{width:16.66667%}.mui-col-lg-3{width:25%}.mui-col-lg-4{width:33.33333%}.mui-col-lg-5{width:41.66667%}.mui-col-lg-6{width:50%}.mui-col-lg-7{width:58.33333%}.mui-col-lg-8{width:66.66667%}.mui-col-lg-9{width:75%}.mui-col-lg-10{width:83.33333%}.mui-col-lg-11{width:91.66667%}.mui-col-lg-12{width:100%}.mui-col-lg-offset-0{margin-left:0}.mui-col-lg-offset-1{margin-left:8.33333%}.mui-col-lg-offset-2{margin-left:16.66667%}.mui-col-lg-offset-3{margin-left:25%}.mui-col-lg-offset-4{margin-left:33.33333%}.mui-col-lg-offset-5{margin-left:41.66667%}.mui-col-lg-offset-6{margin-left:50%}.mui-col-lg-offset-7{margin-left:58.33333%}.mui-col-lg-offset-8{margin-left:66.66667%}.mui-col-lg-offset-9{margin-left:75%}.mui-col-lg-offset-10{margin-left:83.33333%}.mui-col-lg-offset-11{margin-left:91.66667%}.mui-col-lg-offset-12{margin-left:100%}}@media (min-width:1200px){.mui-col-xl-1,.mui-col-xl-10,.mui-col-xl-11,.mui-col-xl-12,.mui-col-xl-2,.mui-col-xl-3,.mui-col-xl-4,.mui-col-xl-5,.mui-col-xl-6,.mui-col-xl-7,.mui-col-xl-8,.mui-col-xl-9{float:left}.mui-col-xl-1{width:8.33333%}.mui-col-xl-2{width:16.66667%}.mui-col-xl-3{width:25%}.mui-col-xl-4{width:33.33333%}.mui-col-xl-5{width:41.66667%}.mui-col-xl-6{width:50%}.mui-col-xl-7{width:58.33333%}.mui-col-xl-8{width:66.66667%}.mui-col-xl-9{width:75%}.mui-col-xl-10{width:83.33333%}.mui-col-xl-11{width:91.66667%}.mui-col-xl-12{width:100%}.mui-col-xl-offset-0{margin-left:0}.mui-col-xl-offset-1{margin-left:8.33333%}.mui-col-xl-offset-2{margin-left:16.66667%}.mui-col-xl-offset-3{margin-left:25%}.mui-col-xl-offset-4{margin-left:33.33333%}.mui-col-xl-offset-5{margin-left:41.66667%}.mui-col-xl-offset-6{margin-left:50%}.mui-col-xl-offset-7{margin-left:58.33333%}.mui-col-xl-offset-8{margin-left:66.66667%}.mui-col-xl-offset-9{margin-left:75%}.mui-col-xl-offset-10{margin-left:83.33333%}.mui-col-xl-offset-11{margin-left:91.66667%}.mui-col-xl-offset-12{margin-left:100%}}.mui-panel{padding:15px;margin-bottom:20px;border-radius:0;background-color:#FFF;box-shadow:0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}.mui-panel:after,.mui-panel:before{content:" ";display:table}.mui-panel:after{clear:both}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-panel{box-shadow:0 -1px 2px 0 rgba(0,0,0,.12),-1px 0 2px 0 rgba(0,0,0,.12),0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}}.mui-select{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-select:focus{outline:0}.mui-select:focus>select{height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;height:32px;width:100%;appearance:none;-webkit-appearance:none;-moz-appearance:none;outline:0;border:none;border-bottom:1px solid rgba(0,0,0,.26);border-radius:0;box-shadow:none;background-color:transparent;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iNiIgd2lkdGg9IjEwIj48cG9seWdvbiBwb2ludHM9IjAsMCAxMCwwIDUsNiIgc3R5bGU9ImZpbGw6cmdiYSgwLDAsMCwuMjQpOyIvPjwvc3ZnPg==);background-repeat:no-repeat;background-position:right center;cursor:pointer;color:rgba(0,0,0,.87);font-size:16px;padding:0 25px 0 0}.mui-select>select::-ms-expand{display:none}.mui-select>select:focus{outline:0;height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select:disabled{color:rgba(0,0,0,.38);cursor:not-allowed;background-color:transparent;opacity:1}.mui-select__menu{position:absolute;z-index:2;min-width:100%;overflow-y:auto;padding:8px 0;background-color:#FFF;font-size:16px}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-select__menu{border-left:1px solid rgba(0,0,0,.12);border-top:1px solid rgba(0,0,0,.12)}}.mui-select__menu>div{padding:0 22px;height:42px;line-height:42px;cursor:pointer;white-space:nowrap}.mui-select__menu>div:hover{background-color:#E0E0E0}.mui-select__menu>div.mui--is-selected{background-color:#EEE}th{text-align:left}.mui-table{width:100%;max-width:100%;margin-bottom:20px}.mui-table>tbody>tr>td,.mui-table>tbody>tr>th,.mui-table>tfoot>tr>td,.mui-table>tfoot>tr>th,.mui-table>thead>tr>td,.mui-table>thead>tr>th{padding:10px;line-height:1.429}.mui-table>thead>tr>th{border-bottom:2px solid rgba(0,0,0,.12);font-weight:700}.mui-table>tbody+tbody{border-top:2px solid rgba(0,0,0,.12)}.mui-table.mui-table--bordered>tbody>tr>td{border-bottom:1px solid rgba(0,0,0,.12)}.mui-tabs__bar{list-style:none;padding-left:0;margin-bottom:0;background-color:transparent;white-space:nowrap;overflow-x:auto}.mui-tabs__bar>li{display:inline-block}.mui-tabs__bar>li>a{display:block;white-space:nowrap;text-transform:uppercase;font-weight:500;font-size:14px;color:rgba(0,0,0,.87);cursor:default;height:48px;line-height:48px;padding-left:24px;padding-right:24px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-tabs__bar>li>a:hover{text-decoration:none}.mui-tabs__bar>li.mui--is-active{border-bottom:2px solid #2196F3}.mui-tabs__bar>li.mui--is-active>a{color:#2196F3}.mui-tabs__bar.mui-tabs__bar--justified{display:table;width:100%;table-layout:fixed}.mui-tabs__bar.mui-tabs__bar--justified>li{display:table-cell}.mui-tabs__bar.mui-tabs__bar--justified>li>a{text-align:center;padding-left:0;padding-right:0}.mui-tabs__pane{display:none}.mui-tabs__pane.mui--is-active{display:block}[data-mui-toggle=tab]{animation-duration:.1ms;animation-name:mui-node-inserted}.mui-textfield{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-textfield>label{position:absolute;top:0;display:block;width:100%;color:rgba(0,0,0,.54);font-size:12px;font-weight:400;line-height:15px;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.mui-textfield>textarea{padding-top:5px}.mui-textfield>input,.mui-textfield>textarea{display:block}.mui-textfield>input:focus~label,.mui-textfield>textarea:focus~label{color:#2196F3}.mui-textfield--float-label>label{position:absolute;transform:translate(0,15px);font-size:16px;line-height:32px;color:rgba(0,0,0,.26);text-overflow:clip;cursor:text;pointer-events:none}.mui-textfield--float-label>input:focus~label,.mui-textfield--float-label>textarea:focus~label{transform:translate(0,0);font-size:12px;line-height:15px;text-overflow:ellipsis}.mui-textfield--float-label>input:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>input:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>input:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>textarea:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:rgba(0,0,0,.54);font-size:12px;line-height:15px;transform:translate(0,0);text-overflow:ellipsis}.mui-textfield--wrap-label{display:table;width:100%;padding-top:0}.mui-textfield--wrap-label:not(.mui-textfield--float-label)>label{display:table-header-group;position:static;white-space:normal;overflow-x:visible}.mui-textfield>input,.mui-textfield>textarea{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;background-color:transparent;color:rgba(0,0,0,.87);border:none;border-bottom:1px solid rgba(0,0,0,.26);outline:0;width:100%;font-size:16px;padding:0;box-shadow:none;border-radius:0;background-image:none}.mui-textfield>input:focus,.mui-textfield>textarea:focus{border-color:#2196F3;border-width:2px}.mui-textfield>input:-moz-read-only,.mui-textfield>input:disabled,.mui-textfield>textarea:-moz-read-only,.mui-textfield>textarea:disabled{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input:disabled,.mui-textfield>input:read-only,.mui-textfield>textarea:disabled,.mui-textfield>textarea:read-only{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input::-webkit-input-placeholder,.mui-textfield>textarea::-webkit-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::-moz-placeholder,.mui-textfield>textarea::-moz-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input:-ms-input-placeholder,.mui-textfield>textarea:-ms-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::placeholder,.mui-textfield>textarea::placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input{height:32px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>textarea{min-height:64px}.mui-textfield>textarea[rows]:not([rows="2"]):focus{margin-bottom:-1px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):not(:required),.mui-textfield>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required),.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty){border-color:#F44336;border-width:2px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty){height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required)~label,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):not(:required)~label,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:#F44336}.mui-textfield:not(.mui-textfield--float-label)>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label{color:#F44336}@keyframes mui-node-inserted{from{opacity:.99}to{opacity:1}}.mui--no-transition{transition:none!important}.mui--no-user-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.mui--text-left{text-align:left!important}.mui--text-right{text-align:right!important}.mui--text-center{text-align:center!important}.mui--text-justify{text-align:justify!important}.mui--text-nowrap{white-space:nowrap!important}.mui--align-baseline{vertical-align:baseline!important}.mui--align-top{vertical-align:top!important}.mui--align-middle{vertical-align:middle!important}.mui--align-bottom{vertical-align:bottom!important}.mui--text-dark{color:rgba(0,0,0,.87)}.mui--text-dark-secondary{color:rgba(0,0,0,.54)}.mui--text-dark-hint{color:rgba(0,0,0,.38)}.mui--text-light{color:#FFF}.mui--text-light-secondary{color:rgba(255,255,255,.7)}.mui--text-light-hint{color:rgba(255,255,255,.3)}.mui--text-accent{color:rgba(255,64,129,.87)}.mui--text-accent-secondary{color:rgba(255,64,129,.54)}.mui--text-accent-hint{color:rgba(255,64,129,.38)}.mui--text-black{color:#000}.mui--text-white{color:#FFF}.mui--text-danger{color:#F44336}.mui-list--unstyled{padding-left:0;list-style:none}.mui-list--inline{padding-left:0;list-style:none;margin-left:-5px}.mui-list--inline>li{display:inline-block;padding-left:5px;padding-right:5px}.mui--z1,.mui-dropdown__menu,.mui-select__menu{box-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24)}.mui--z2{box-shadow:0 3px 6px rgba(0,0,0,.16),0 3px 6px rgba(0,0,0,.23)}.mui--z3{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}.mui--z4{box-shadow:0 14px 28px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.22)}.mui--z5{box-shadow:0 19px 38px rgba(0,0,0,.3),0 15px 12px rgba(0,0,0,.22)}.mui--clearfix:after,.mui--clearfix:before{content:" ";display:table}.mui--clearfix:after{clear:both}.mui--pull-right{float:right!important}.mui--pull-left{float:left!important}.mui--hide{display:none!important}.mui--show{display:block!important}.mui--invisible{visibility:hidden}.mui--overflow-hidden{overflow:hidden!important}.mui--overflow-hidden-x{overflow-x:hidden!important}.mui--overflow-hidden-y{overflow-y:hidden!important}.mui--visible-lg-block,.mui--visible-lg-inline,.mui--visible-lg-inline-block,.mui--visible-md-block,.mui--visible-md-inline,.mui--visible-md-inline-block,.mui--visible-sm-block,.mui--visible-sm-inline,.mui--visible-sm-inline-block,.mui--visible-xl-block,.mui--visible-xl-inline,.mui--visible-xl-inline-block,.mui--visible-xs-block,.mui--visible-xs-inline,.mui--visible-xs-inline-block{display:none!important}@media (max-width:543px){.mui-visible-xs{display:block!important}table.mui-visible-xs{display:table}tr.mui-visible-xs{display:table-row!important}td.mui-visible-xs,th.mui-visible-xs{display:table-cell!important}.mui--visible-xs-block{display:block!important}.mui--visible-xs-inline{display:inline!important}.mui--visible-xs-inline-block{display:inline-block!important}}@media (min-width:544px) and (max-width:767px){.mui-visible-sm{display:block!important}table.mui-visible-sm{display:table}tr.mui-visible-sm{display:table-row!important}td.mui-visible-sm,th.mui-visible-sm{display:table-cell!important}.mui--visible-sm-block{display:block!important}.mui--visible-sm-inline{display:inline!important}.mui--visible-sm-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.mui-visible-md{display:block!important}table.mui-visible-md{display:table}tr.mui-visible-md{display:table-row!important}td.mui-visible-md,th.mui-visible-md{display:table-cell!important}.mui--visible-md-block{display:block!important}.mui--visible-md-inline{display:inline!important}.mui--visible-md-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.mui-visible-lg{display:block!important}table.mui-visible-lg{display:table}tr.mui-visible-lg{display:table-row!important}td.mui-visible-lg,th.mui-visible-lg{display:table-cell!important}.mui--visible-lg-block{display:block!important}.mui--visible-lg-inline{display:inline!important}.mui--visible-lg-inline-block{display:inline-block!important}}@media (min-width:1200px){.mui-visible-xl{display:block!important}table.mui-visible-xl{display:table}tr.mui-visible-xl{display:table-row!important}td.mui-visible-xl,th.mui-visible-xl{display:table-cell!important}.mui--visible-xl-block{display:block!important}.mui--visible-xl-inline{display:inline!important}.mui--visible-xl-inline-block{display:inline-block!important}}@media (max-width:543px){.mui--hidden-xs{display:none!important}}@media (min-width:544px) and (max-width:767px){.mui--hidden-sm{display:none!important}}@media (min-width:768px) and (max-width:991px){.mui--hidden-md{display:none!important}}@media (min-width:992px) and (max-width:1199px){.mui--hidden-lg{display:none!important}}@media (min-width:1200px){.mui--hidden-xl{display:none!important}}body.mui-body--scroll-lock{overflow:hidden!important}#mui-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:99999999;background-color:rgba(0,0,0,.2);overflow:auto}.mui-ripple-effect{position:absolute;border-radius:50%;pointer-events:none;opacity:0;animation:mui-ripple-animation 2s}@keyframes mui-ripple-animation{from{transform:scale(1);opacity:.4}to{transform:scale(100);opacity:0}}.mui-btn>.mui-ripple-effect{background-color:#a6a6a6}.mui-btn--primary>.mui-ripple-effect{background-color:#FFF}.mui-btn--dark>.mui-ripple-effect{background-color:#FFF}.mui-btn--danger>.mui-ripple-effect{background-color:#FFF}.mui-btn--accent>.mui-ripple-effect{background-color:#FFF}.mui-btn--flat>.mui-ripple-effect{background-color:#a6a6a6}.mui--text-display4{font-weight:300;font-size:112px;line-height:112px}.mui--text-display3{font-weight:400;font-size:56px;line-height:56px}.mui--text-display2{font-weight:400;font-size:45px;line-height:48px}.mui--text-display1,h1{font-weight:400;font-size:34px;line-height:40px}.mui--text-headline,h2{font-weight:400;font-size:24px;line-height:32px}.mui--text-title,h3{font-weight:400;font-size:20px;line-height:28px}.mui--text-subhead,h4{font-weight:400;font-size:16px;line-height:24px}.mui--text-body2,h5{font-weight:500;font-size:14px;line-height:24px}.mui--text-body1{font-weight:400;font-size:14px;line-height:20px}.mui--text-caption{font-weight:400;font-size:12px;line-height:16px}.mui--text-menu{font-weight:500;font-size:13px;line-height:17px}.mui--text-button{font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase}'; +},{}],8:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l="mui.appbar";n["default"].module(l,[]).directive("muiAppbar",function(){return{restrict:"AE",transclude:!0,replace:!0,template:'
        ',link:function(i,e,t,o,n){n(i,function(i){e.append(i)})}}}),t["default"]=l,e.exports=t["default"]},{angular:"aeQg5j"}],9:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l=i("../js/lib/jqLite"),a=babelHelpers.interopRequireWildcard(l),r="mui.button";n["default"].module(r,[]).directive("muiButton",function(){return{restrict:"AE",scope:{type:"@?"},replace:!0,template:'',transclude:!0,link:function(i,e,t){var o=n["default"].isUndefined,l=e[0];l._muiDropdown=!0,l._muiRipple=!0,!o(t.disabled)&&o(t.ngDisabled)&&e.prop("disabled",!0),n["default"].forEach(["variant","color","size"],function(i){var o=t[i];o&&e.addClass("mui-btn--"+o)})}}}).directive("muiRipple",["$timeout",function(i){return{restrict:"A",link:function(e,t,o){var l="mui-ripple-effect";t.on("mousedown",function(e){if(!t.prop("disabled")){var o,r,u=a.offset(t[0]),m=e.pageX-u.left,d=e.pageY-u.top;o=u.height,t.hasClass("mui-btn--fab")&&(o=u.height/2),r=o/2;var s={height:o+"px",width:o+"px",top:d-r+"px",left:m-r+"px"},c=n["default"].element("
        ").addClass(l);for(var p in s)c.css(p,s[p]);t.append(c),i(function(){c.remove()},2e3)}})}}}]),t["default"]=r,e.exports=t["default"]},{"../js/lib/jqLite":5,angular:"aeQg5j"}],10:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l="mui.caret";n["default"].module(l,[]).directive("muiCaret",function(){return{restrict:"AE",replace:!0,template:''}}),t["default"]=l,e.exports=t["default"]},{angular:"aeQg5j"}],11:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l="mui.checkbox";n["default"].module(l,[]).directive("muiCheckbox",function(){return{restrict:"AE",replace:!0,require:["?ngModel"],scope:{label:"@",name:"@",value:"@",ngModel:"=",ngDisabled:"="},template:'
        '}}),t["default"]=l,e.exports=t["default"]},{angular:"aeQg5j"}],12:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l="mui.col";n["default"].module(l,[]).directive("muiCol",function(){return{restrict:"AE",scope:!0,replace:!0,template:"
        ",transclude:!0,link:function(i,e,t,o,l){l(i,function(i){e.append(i)});var a={xs:"mui-col-xs-",sm:"mui-col-sm-",md:"mui-col-md-",lg:"mui-col-lg-","xs-offset":"mui-col-xs-offset-","sm-offset":"mui-col-sm-offset-","md-offset":"mui-col-md-offset-","lg-offset":"mui-col-lg-offset-"};n["default"].forEach(a,function(i,o){var n=t[t.$normalize(o)];n&&e.addClass(i+n)})}}}),t["default"]=l,e.exports=t["default"]},{angular:"aeQg5j"}],13:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l="mui.container";n["default"].module(l,[]).directive("muiContainer",function(){return{restrict:"AE",template:'
        ',transclude:!0,scope:!0,replace:!0,link:function(i,e,t,o,l){l(i,function(i){e.append(i)}),n["default"].isUndefined(t.fluid)||e.removeClass("mui-container").addClass("mui-container-fluid")}}}),t["default"]=l,e.exports=t["default"]},{angular:"aeQg5j"}],14:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l="mui.divider";n["default"].module(l,[]).directive("muiDivider",function(){return{restrict:"AE",replace:!0,compile:function(i,e){i.addClass("mui-divider")}}}),t["default"]=l,e.exports=t["default"]},{angular:"aeQg5j"}],15:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l="mui.dropdown-item";n["default"].module(l,[]).directive("muiDropdownItem",function(){return{restrict:"AE",replace:!0,scope:{link:"@"},transclude:!0,template:'
      • '}}),t["default"]=l,e.exports=t["default"]},{angular:"aeQg5j"}],16:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l="mui.dropdown";n["default"].module(l,[]).directive("muiDropdown",["$timeout","$compile",function(i,e){return{restrict:"AE",transclude:!0,replace:!0,scope:{variant:"@",color:"@",size:"@",open:"=?",ngDisabled:"="},template:'
          ',link:function(i,e,t){function o(){i.open=!1,i.$apply()}var l,a,r="mui-dropdown__menu",u="mui--is-open",m="mui-dropdown__menu--right",d=n["default"].isUndefined;l=n["default"].element(e[0].querySelector("."+r)),a=n["default"].element(e[0].querySelector(".mui-btn")),l.css("margin-top","-3px"),d(t.open)||(i.open=!0),d(t.disabled)||a.attr("disabled",!0),d(t.rightAlign)||l.addClass(m),d(t.noCaret)?a.html(t.label+" "):a.html(t.label),i.$watch("open",function(i){i===!0?(l.addClass(u),document.addEventListener("click",o)):i===!1&&(l.removeClass(u),document.removeEventListener("click",o))}),i.onClick=function(e){i.disabled||(e.preventDefault(),e.stopPropagation(),i.open?i.open=!1:i.open=!0)}}}}]),t["default"]=l,e.exports=t["default"]},{angular:"aeQg5j"}],17:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l="mui.form";n["default"].module(l,[]).directive("muiFormInline",function(){return{restrict:"A",link:function(i,e,t){e.addClass("mui-form--inline")}}}),t["default"]=l,e.exports=t["default"]},{angular:"aeQg5j"}],18:[function(i,e,t){"use strict";function o(i,e){e?i.removeClass(u).addClass(m):i.removeClass(m).addClass(u)}function n(i){var e,t,n="mui--is-dirty";return e={floatLabel:"@",hint:"@",label:"@",ngDisabled:"=",ngModel:"="},t='
          ',i?(e.rows="@",t+=''):(e.type="@",t+=''),t+="
          ",["$timeout",function(l){return{restrict:"AE",require:["ngModel"],scope:e,replace:!0,template:t,link:function(e,t,r,u){var m=t.find("input")||t.find("textarea"),d=t.find("label"),s=u[0],c=(u[1],a["default"].isUndefined),p=m[0];p&&(p._muiTextfield=!0),t.removeAttr("ng-change"),t.removeAttr("ng-model"),i?e.rows=e.rows||2:e.type=e.type||"text",c(r.autofocus)||m[0].focus(),c(r.required)||m.prop("required",!0),c(r.invalid)||m.addClass("mui--is-invalid"),o(m,e.ngModel),c(e.floatLabel)||(t.addClass("mui-textfield--float-label"),l(function(){d.css({transition:".15s ease-out","-webkit-transition":".15s ease-out","-moz-transition":".15s ease-out","-o-transition":".15s ease-out","-ms-transition":".15s ease-out"})},150)),e.onChange=function(){var i=e.ngModel;s&&s.$setViewValue(i),o(m,i),m.addClass(n)},e.onFocus=function(){m.addClass(n)}}}}]}Object.defineProperty(t,"__esModule",{value:!0});var l=window.angular,a=babelHelpers.interopRequireDefault(l),r="mui.input",u="mui--is-empty",m="mui--is-not-empty";a["default"].module(r,[]).directive("muiInput",n(!1)).directive("muiTextarea",n(!0)),t["default"]=r,e.exports=t["default"]},{angular:"aeQg5j"}],19:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l="mui.panel";n["default"].module(l,[]).directive("muiPanel",function(){return{restrict:"AE",replace:!0,scope:!0,template:'
          ',transclude:!0,link:function(i,e,t,o,n){n(i,function(i){e.append(i)})}}}),t["default"]=l,e.exports=t["default"]},{angular:"aeQg5j"}],20:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l="mui.radio";n["default"].module(l,[]).directive("muiRadio",function(){return{restrict:"AE",replace:!0,require:["?ngModel"],scope:{label:"@",name:"@",value:"@",ngModel:"=",ngDisabled:"="},template:'
          '}}),t["default"]=l,e.exports=t["default"]},{angular:"aeQg5j"}],21:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l="mui.row";n["default"].module("mui.row",[]).directive("muiRow",function(){return{restrict:"AE",scope:!0,replace:!0,template:'
          ',transclude:!0,link:function(i,e,t,o,n){n(i,function(i){e.append(i)})}}}),t["default"]=l,e.exports=t["default"]},{angular:"aeQg5j"}],22:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l=i("../js/lib/forms"),a=babelHelpers.interopRequireWildcard(l),r=i("../js/lib/util"),u=babelHelpers.interopRequireWildcard(r),m=i("../js/lib/jqLite"),d=babelHelpers.interopRequireWildcard(m),s="mui.select";n["default"].module(s,[]).directive("muiSelect",["$timeout",function(i){return{restrict:"AE",require:["ngModel"],scope:{name:"@",ngDisabled:"=",ngModel:"="},replace:!0,transclude:!0,template:'
          {{option.label}}
          ',link:function(e,t,o,l,r){function m(){e.isOpen=!1,e.$digest()}var s=t,c=t.find("div"),p=t.find("select"),f=n["default"].isUndefined;p[0]._muiSelect=!0,e.options=[],e.isOpen=!1,e.useDefault=!1,e.origTabIndex=p[0].tabIndex,e.menuIndex=0,f(o.useDefault)||(e.useDefault=!0),s.prop("tabIndex",-1),r(function(i){var t,o;for(o in i)t=i[o],"MUI-OPTION"===t.tagName&&e.options.push({value:t.getAttribute("value"),label:t.getAttribute("label")})}),e.onClick=function(){e.useDefault!==!0&&(e.isOpen=!0,s[0].focus())},e.onFocus=function(){if(e.useDefault!==!0){var i=p[0];e.origTabIndex=i.tabIndex,i.tabIndex=-1,s[0].focus()}},e.onMousedown=function(i){e.useDefault!==!0&&i.preventDefault()},e.onWrapperBlur=function(){p[0].tabIndex=e.origTabIndex},e.onWrapperFocus=function(i){return p[0].disabled?s[0].blur():void 0},e.onWrapperKeydown=function(i){var t=i.keyCode;if(e.isOpen===!1)32!==t&&38!==t&&40!==t||(i.preventDefault(),e.isOpen=!0);else{if(9===t)return e.isOpen=!1;27!==t&&40!==t&&38!==t&&13!==t||i.preventDefault(),27===t?e.isOpen=!1:40===t?e.menuIndex0&&(e.menuIndex-=1):13===t&&(e.ngModel=e.options[e.menuIndex].value,e.isOpen=!1)}},e.chooseOption=function(i){e.ngModel=i.value,e.isOpen=!1},e.$watch("isOpen",function(o,n){if(o!==n&&e.useDefault!==!0)if(o===!0){u.enableScrollLock();var l,r=e.ngModel,s=e.options,f=s.length;for(l=0;f>l;l++)if(s[l].value===r){e.menuIndex=l;break}var b=a.getMenuPositionalCSS(t[0],e.options.length,e.menuIndex);c.css(b),d.scrollTop(c[0],b.scrollTop),i(function(){d.on(document,"click",m),d.on(window,"resize",m)})}else p[0].focus(),u.disableScrollLock(),d.off(document,"click",m),d.off(window,"resize",m)})}}}]),t["default"]=s,e.exports=t["default"]},{"../js/lib/forms":4,"../js/lib/jqLite":5,"../js/lib/util":6,angular:"aeQg5j"}],23:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l=i("../js/lib/jqLite"),a=(babelHelpers.interopRequireWildcard(l),"mui.tabs");n["default"].module(a,[]).directive("muiTabs",function(){return{restrict:"EA",transclude:!0,scope:{selectedId:"=?selected",onChange:"&?"},template:'',controller:["$scope",function(i){var e=0;i.tabs=[],this.addTab=function(t){var o=e;return e+=1,i.tabs.push({label:t.label}),t.isActive&&(i.selectedId=o),o}}],link:function(i,e,t,o,l){var a=n["default"].isUndefined;a(i.selectedId)&&(i.selectedId=0),i.justified=!1,a(t.justified)||(i.justified=!0),i.onClick=function(e){e!==i.selectedId&&(i.selectedId=e,i.onChange&&i.$$postDigest(i.onChange))},l(i,function(i){e.append(i)})}}}).directive("muiTab",["$parse",function(i){return{require:"^?muiTabs",restrict:"AE",scope:{active:"&?",label:"@?"},transclude:!0,template:'
          ',link:function(e,t,o,n,l){var a=i(o.onSelect),r=i(o.onDeselect),u=e.$parent.$parent;e.tabId=null,n&&(e.tabId=n.addTab({label:e.label,isActive:Boolean(e.active)})),l(e,function(i){t.find("div").append(i)}),e.$parent.$watch("selectedId",function(i,t){i!==t&&(i===e.tabId&&a(u),t===e.tabId&&r(u))})}}}]),t["default"]=a,e.exports=t["default"]},{"../js/lib/jqLite":5,angular:"aeQg5j"}],24:[function(i,e,t){e.exports=i(6)},{"../config":3,"./jqLite":5}]},{},[2]); \ No newline at end of file diff --git a/platforms/android/assets/www/libs/mui/packages/cdn/extra/mui-colors.css b/platforms/android/assets/www/libs/mui/packages/cdn/extra/mui-colors.css new file mode 100644 index 0000000..db7e7ba --- /dev/null +++ b/platforms/android/assets/www/libs/mui/packages/cdn/extra/mui-colors.css @@ -0,0 +1 @@ +.mui--color-red-50{color:#FFEBEE!important}.mui--bg-color-red-50{background-color:#FFEBEE!important}.mui--color-red-100{color:#FFCDD2!important}.mui--bg-color-red-100{background-color:#FFCDD2!important}.mui--color-red-200{color:#EF9A9A!important}.mui--bg-color-red-200{background-color:#EF9A9A!important}.mui--color-red-300{color:#E57373!important}.mui--bg-color-red-300{background-color:#E57373!important}.mui--color-red-400{color:#EF5350!important}.mui--color-red,.mui--color-red-500{color:#F44336!important}.mui--bg-color-red-400{background-color:#EF5350!important}.mui--bg-color-red,.mui--bg-color-red-500{background-color:#F44336!important}.mui--color-red-600{color:#E53935!important}.mui--bg-color-red-600{background-color:#E53935!important}.mui--color-red-700{color:#D32F2F!important}.mui--bg-color-red-700{background-color:#D32F2F!important}.mui--color-red-800{color:#C62828!important}.mui--bg-color-red-800{background-color:#C62828!important}.mui--color-red-900{color:#B71C1C!important}.mui--bg-color-red-900{background-color:#B71C1C!important}.mui--color-red-A100{color:#FF8A80!important}.mui--bg-color-red-A100{background-color:#FF8A80!important}.mui--color-red-A200{color:#FF5252!important}.mui--bg-color-red-A200{background-color:#FF5252!important}.mui--color-red-A400{color:#FF1744!important}.mui--bg-color-red-A400{background-color:#FF1744!important}.mui--color-red-A700{color:#D50000!important}.mui--bg-color-red-A700{background-color:#D50000!important}.mui--color-pink-50{color:#FCE4EC!important}.mui--bg-color-pink-50{background-color:#FCE4EC!important}.mui--color-pink-100{color:#F8BBD0!important}.mui--bg-color-pink-100{background-color:#F8BBD0!important}.mui--color-pink-200{color:#F48FB1!important}.mui--bg-color-pink-200{background-color:#F48FB1!important}.mui--color-pink-300{color:#F06292!important}.mui--bg-color-pink-300{background-color:#F06292!important}.mui--color-pink-400{color:#EC407A!important}.mui--color-pink,.mui--color-pink-500{color:#E91E63!important}.mui--bg-color-pink-400{background-color:#EC407A!important}.mui--bg-color-pink,.mui--bg-color-pink-500{background-color:#E91E63!important}.mui--color-pink-600{color:#D81B60!important}.mui--bg-color-pink-600{background-color:#D81B60!important}.mui--color-pink-700{color:#C2185B!important}.mui--bg-color-pink-700{background-color:#C2185B!important}.mui--color-pink-800{color:#AD1457!important}.mui--bg-color-pink-800{background-color:#AD1457!important}.mui--color-pink-900{color:#880E4F!important}.mui--bg-color-pink-900{background-color:#880E4F!important}.mui--color-pink-A100{color:#FF80AB!important}.mui--bg-color-pink-A100{background-color:#FF80AB!important}.mui--color-pink-A200{color:#FF4081!important}.mui--bg-color-pink-A200{background-color:#FF4081!important}.mui--color-pink-A400{color:#F50057!important}.mui--bg-color-pink-A400{background-color:#F50057!important}.mui--color-pink-A700{color:#C51162!important}.mui--bg-color-pink-A700{background-color:#C51162!important}.mui--color-purple-50{color:#F3E5F5!important}.mui--bg-color-purple-50{background-color:#F3E5F5!important}.mui--color-purple-100{color:#E1BEE7!important}.mui--bg-color-purple-100{background-color:#E1BEE7!important}.mui--color-purple-200{color:#CE93D8!important}.mui--bg-color-purple-200{background-color:#CE93D8!important}.mui--color-purple-300{color:#BA68C8!important}.mui--bg-color-purple-300{background-color:#BA68C8!important}.mui--color-purple-400{color:#AB47BC!important}.mui--color-purple,.mui--color-purple-500{color:#9C27B0!important}.mui--bg-color-purple-400{background-color:#AB47BC!important}.mui--bg-color-purple,.mui--bg-color-purple-500{background-color:#9C27B0!important}.mui--color-purple-600{color:#8E24AA!important}.mui--bg-color-purple-600{background-color:#8E24AA!important}.mui--color-purple-700{color:#7B1FA2!important}.mui--bg-color-purple-700{background-color:#7B1FA2!important}.mui--color-purple-800{color:#6A1B9A!important}.mui--bg-color-purple-800{background-color:#6A1B9A!important}.mui--color-purple-900{color:#4A148C!important}.mui--bg-color-purple-900{background-color:#4A148C!important}.mui--color-purple-A100{color:#EA80FC!important}.mui--bg-color-purple-A100{background-color:#EA80FC!important}.mui--color-purple-A200{color:#E040FB!important}.mui--bg-color-purple-A200{background-color:#E040FB!important}.mui--color-purple-A400{color:#D500F9!important}.mui--bg-color-purple-A400{background-color:#D500F9!important}.mui--color-purple-A700{color:#A0F!important}.mui--bg-color-purple-A700{background-color:#A0F!important}.mui--color-deep-purple-50{color:#EDE7F6!important}.mui--bg-color-deep-purple-50{background-color:#EDE7F6!important}.mui--color-deep-purple-100{color:#D1C4E9!important}.mui--bg-color-deep-purple-100{background-color:#D1C4E9!important}.mui--color-deep-purple-200{color:#B39DDB!important}.mui--bg-color-deep-purple-200{background-color:#B39DDB!important}.mui--color-deep-purple-300{color:#9575CD!important}.mui--bg-color-deep-purple-300{background-color:#9575CD!important}.mui--color-deep-purple-400{color:#7E57C2!important}.mui--color-deep-purple,.mui--color-deep-purple-500{color:#673AB7!important}.mui--bg-color-deep-purple-400{background-color:#7E57C2!important}.mui--bg-color-deep-purple,.mui--bg-color-deep-purple-500{background-color:#673AB7!important}.mui--color-deep-purple-600{color:#5E35B1!important}.mui--bg-color-deep-purple-600{background-color:#5E35B1!important}.mui--color-deep-purple-700{color:#512DA8!important}.mui--bg-color-deep-purple-700{background-color:#512DA8!important}.mui--color-deep-purple-800{color:#4527A0!important}.mui--bg-color-deep-purple-800{background-color:#4527A0!important}.mui--color-deep-purple-900{color:#311B92!important}.mui--bg-color-deep-purple-900{background-color:#311B92!important}.mui--color-deep-purple-A100{color:#B388FF!important}.mui--bg-color-deep-purple-A100{background-color:#B388FF!important}.mui--color-deep-purple-A200{color:#7C4DFF!important}.mui--bg-color-deep-purple-A200{background-color:#7C4DFF!important}.mui--color-deep-purple-A400{color:#651FFF!important}.mui--bg-color-deep-purple-A400{background-color:#651FFF!important}.mui--color-deep-purple-A700{color:#6200EA!important}.mui--bg-color-deep-purple-A700{background-color:#6200EA!important}.mui--color-indigo-50{color:#E8EAF6!important}.mui--bg-color-indigo-50{background-color:#E8EAF6!important}.mui--color-indigo-100{color:#C5CAE9!important}.mui--bg-color-indigo-100{background-color:#C5CAE9!important}.mui--color-indigo-200{color:#9FA8DA!important}.mui--bg-color-indigo-200{background-color:#9FA8DA!important}.mui--color-indigo-300{color:#7986CB!important}.mui--bg-color-indigo-300{background-color:#7986CB!important}.mui--color-indigo-400{color:#5C6BC0!important}.mui--color-indigo,.mui--color-indigo-500{color:#3F51B5!important}.mui--bg-color-indigo-400{background-color:#5C6BC0!important}.mui--bg-color-indigo,.mui--bg-color-indigo-500{background-color:#3F51B5!important}.mui--color-indigo-600{color:#3949AB!important}.mui--bg-color-indigo-600{background-color:#3949AB!important}.mui--color-indigo-700{color:#303F9F!important}.mui--bg-color-indigo-700{background-color:#303F9F!important}.mui--color-indigo-800{color:#283593!important}.mui--bg-color-indigo-800{background-color:#283593!important}.mui--color-indigo-900{color:#1A237E!important}.mui--bg-color-indigo-900{background-color:#1A237E!important}.mui--color-indigo-A100{color:#8C9EFF!important}.mui--bg-color-indigo-A100{background-color:#8C9EFF!important}.mui--color-indigo-A200{color:#536DFE!important}.mui--bg-color-indigo-A200{background-color:#536DFE!important}.mui--color-indigo-A400{color:#3D5AFE!important}.mui--bg-color-indigo-A400{background-color:#3D5AFE!important}.mui--color-indigo-A700{color:#304FFE!important}.mui--bg-color-indigo-A700{background-color:#304FFE!important}.mui--color-blue-50{color:#E3F2FD!important}.mui--bg-color-blue-50{background-color:#E3F2FD!important}.mui--color-blue-100{color:#BBDEFB!important}.mui--bg-color-blue-100{background-color:#BBDEFB!important}.mui--color-blue-200{color:#90CAF9!important}.mui--bg-color-blue-200{background-color:#90CAF9!important}.mui--color-blue-300{color:#64B5F6!important}.mui--bg-color-blue-300{background-color:#64B5F6!important}.mui--color-blue-400{color:#42A5F5!important}.mui--color-blue,.mui--color-blue-500{color:#2196F3!important}.mui--bg-color-blue-400{background-color:#42A5F5!important}.mui--bg-color-blue,.mui--bg-color-blue-500{background-color:#2196F3!important}.mui--color-blue-600{color:#1E88E5!important}.mui--bg-color-blue-600{background-color:#1E88E5!important}.mui--color-blue-700{color:#1976D2!important}.mui--bg-color-blue-700{background-color:#1976D2!important}.mui--color-blue-800{color:#1565C0!important}.mui--bg-color-blue-800{background-color:#1565C0!important}.mui--color-blue-900{color:#0D47A1!important}.mui--bg-color-blue-900{background-color:#0D47A1!important}.mui--color-blue-A100{color:#82B1FF!important}.mui--bg-color-blue-A100{background-color:#82B1FF!important}.mui--color-blue-A200{color:#448AFF!important}.mui--bg-color-blue-A200{background-color:#448AFF!important}.mui--color-blue-A400{color:#2979FF!important}.mui--bg-color-blue-A400{background-color:#2979FF!important}.mui--color-blue-A700{color:#2962FF!important}.mui--bg-color-blue-A700{background-color:#2962FF!important}.mui--color-light-blue-50{color:#E1F5FE!important}.mui--bg-color-light-blue-50{background-color:#E1F5FE!important}.mui--color-light-blue-100{color:#B3E5FC!important}.mui--bg-color-light-blue-100{background-color:#B3E5FC!important}.mui--color-light-blue-200{color:#81D4FA!important}.mui--bg-color-light-blue-200{background-color:#81D4FA!important}.mui--color-light-blue-300{color:#4FC3F7!important}.mui--bg-color-light-blue-300{background-color:#4FC3F7!important}.mui--color-light-blue-400{color:#29B6F6!important}.mui--color-light-blue,.mui--color-light-blue-500{color:#03A9F4!important}.mui--bg-color-light-blue-400{background-color:#29B6F6!important}.mui--bg-color-light-blue,.mui--bg-color-light-blue-500{background-color:#03A9F4!important}.mui--color-light-blue-600{color:#039BE5!important}.mui--bg-color-light-blue-600{background-color:#039BE5!important}.mui--color-light-blue-700{color:#0288D1!important}.mui--bg-color-light-blue-700{background-color:#0288D1!important}.mui--color-light-blue-800{color:#0277BD!important}.mui--bg-color-light-blue-800{background-color:#0277BD!important}.mui--color-light-blue-900{color:#01579B!important}.mui--bg-color-light-blue-900{background-color:#01579B!important}.mui--color-light-blue-A100{color:#80D8FF!important}.mui--bg-color-light-blue-A100{background-color:#80D8FF!important}.mui--color-light-blue-A200{color:#40C4FF!important}.mui--bg-color-light-blue-A200{background-color:#40C4FF!important}.mui--color-light-blue-A400{color:#00B0FF!important}.mui--bg-color-light-blue-A400{background-color:#00B0FF!important}.mui--color-light-blue-A700{color:#0091EA!important}.mui--bg-color-light-blue-A700{background-color:#0091EA!important}.mui--color-cyan-50{color:#E0F7FA!important}.mui--bg-color-cyan-50{background-color:#E0F7FA!important}.mui--color-cyan-100{color:#B2EBF2!important}.mui--bg-color-cyan-100{background-color:#B2EBF2!important}.mui--color-cyan-200{color:#80DEEA!important}.mui--bg-color-cyan-200{background-color:#80DEEA!important}.mui--color-cyan-300{color:#4DD0E1!important}.mui--bg-color-cyan-300{background-color:#4DD0E1!important}.mui--color-cyan-400{color:#26C6DA!important}.mui--color-cyan,.mui--color-cyan-500{color:#00BCD4!important}.mui--bg-color-cyan-400{background-color:#26C6DA!important}.mui--bg-color-cyan,.mui--bg-color-cyan-500{background-color:#00BCD4!important}.mui--color-cyan-600{color:#00ACC1!important}.mui--bg-color-cyan-600{background-color:#00ACC1!important}.mui--color-cyan-700{color:#0097A7!important}.mui--bg-color-cyan-700{background-color:#0097A7!important}.mui--color-cyan-800{color:#00838F!important}.mui--bg-color-cyan-800{background-color:#00838F!important}.mui--color-cyan-900{color:#006064!important}.mui--bg-color-cyan-900{background-color:#006064!important}.mui--color-cyan-A100{color:#84FFFF!important}.mui--bg-color-cyan-A100{background-color:#84FFFF!important}.mui--color-cyan-A200{color:#18FFFF!important}.mui--bg-color-cyan-A200{background-color:#18FFFF!important}.mui--color-cyan-A400{color:#00E5FF!important}.mui--bg-color-cyan-A400{background-color:#00E5FF!important}.mui--color-cyan-A700{color:#00B8D4!important}.mui--bg-color-cyan-A700{background-color:#00B8D4!important}.mui--color-teal-50{color:#E0F2F1!important}.mui--bg-color-teal-50{background-color:#E0F2F1!important}.mui--color-teal-100{color:#B2DFDB!important}.mui--bg-color-teal-100{background-color:#B2DFDB!important}.mui--color-teal-200{color:#80CBC4!important}.mui--bg-color-teal-200{background-color:#80CBC4!important}.mui--color-teal-300{color:#4DB6AC!important}.mui--bg-color-teal-300{background-color:#4DB6AC!important}.mui--color-teal-400{color:#26A69A!important}.mui--color-teal,.mui--color-teal-500{color:#009688!important}.mui--bg-color-teal-400{background-color:#26A69A!important}.mui--bg-color-teal,.mui--bg-color-teal-500{background-color:#009688!important}.mui--color-teal-600{color:#00897B!important}.mui--bg-color-teal-600{background-color:#00897B!important}.mui--color-teal-700{color:#00796B!important}.mui--bg-color-teal-700{background-color:#00796B!important}.mui--color-teal-800{color:#00695C!important}.mui--bg-color-teal-800{background-color:#00695C!important}.mui--color-teal-900{color:#004D40!important}.mui--bg-color-teal-900{background-color:#004D40!important}.mui--color-teal-A100{color:#A7FFEB!important}.mui--bg-color-teal-A100{background-color:#A7FFEB!important}.mui--color-teal-A200{color:#64FFDA!important}.mui--bg-color-teal-A200{background-color:#64FFDA!important}.mui--color-teal-A400{color:#1DE9B6!important}.mui--bg-color-teal-A400{background-color:#1DE9B6!important}.mui--color-teal-A700{color:#00BFA5!important}.mui--bg-color-teal-A700{background-color:#00BFA5!important}.mui--color-green-50{color:#E8F5E9!important}.mui--bg-color-green-50{background-color:#E8F5E9!important}.mui--color-green-100{color:#C8E6C9!important}.mui--bg-color-green-100{background-color:#C8E6C9!important}.mui--color-green-200{color:#A5D6A7!important}.mui--bg-color-green-200{background-color:#A5D6A7!important}.mui--color-green-300{color:#81C784!important}.mui--bg-color-green-300{background-color:#81C784!important}.mui--color-green-400{color:#66BB6A!important}.mui--color-green,.mui--color-green-500{color:#4CAF50!important}.mui--bg-color-green-400{background-color:#66BB6A!important}.mui--bg-color-green,.mui--bg-color-green-500{background-color:#4CAF50!important}.mui--color-green-600{color:#43A047!important}.mui--bg-color-green-600{background-color:#43A047!important}.mui--color-green-700{color:#388E3C!important}.mui--bg-color-green-700{background-color:#388E3C!important}.mui--color-green-800{color:#2E7D32!important}.mui--bg-color-green-800{background-color:#2E7D32!important}.mui--color-green-900{color:#1B5E20!important}.mui--bg-color-green-900{background-color:#1B5E20!important}.mui--color-green-A100{color:#B9F6CA!important}.mui--bg-color-green-A100{background-color:#B9F6CA!important}.mui--color-green-A200{color:#69F0AE!important}.mui--bg-color-green-A200{background-color:#69F0AE!important}.mui--color-green-A400{color:#00E676!important}.mui--bg-color-green-A400{background-color:#00E676!important}.mui--color-green-A700{color:#00C853!important}.mui--bg-color-green-A700{background-color:#00C853!important}.mui--color-light-green-50{color:#F1F8E9!important}.mui--bg-color-light-green-50{background-color:#F1F8E9!important}.mui--color-light-green-100{color:#DCEDC8!important}.mui--bg-color-light-green-100{background-color:#DCEDC8!important}.mui--color-light-green-200{color:#C5E1A5!important}.mui--bg-color-light-green-200{background-color:#C5E1A5!important}.mui--color-light-green-300{color:#AED581!important}.mui--bg-color-light-green-300{background-color:#AED581!important}.mui--color-light-green-400{color:#9CCC65!important}.mui--color-light-green,.mui--color-light-green-500{color:#8BC34A!important}.mui--bg-color-light-green-400{background-color:#9CCC65!important}.mui--bg-color-light-green,.mui--bg-color-light-green-500{background-color:#8BC34A!important}.mui--color-light-green-600{color:#7CB342!important}.mui--bg-color-light-green-600{background-color:#7CB342!important}.mui--color-light-green-700{color:#689F38!important}.mui--bg-color-light-green-700{background-color:#689F38!important}.mui--color-light-green-800{color:#558B2F!important}.mui--bg-color-light-green-800{background-color:#558B2F!important}.mui--color-light-green-900{color:#33691E!important}.mui--bg-color-light-green-900{background-color:#33691E!important}.mui--color-light-green-A100{color:#CCFF90!important}.mui--bg-color-light-green-A100{background-color:#CCFF90!important}.mui--color-light-green-A200{color:#B2FF59!important}.mui--bg-color-light-green-A200{background-color:#B2FF59!important}.mui--color-light-green-A400{color:#76FF03!important}.mui--bg-color-light-green-A400{background-color:#76FF03!important}.mui--color-light-green-A700{color:#64DD17!important}.mui--bg-color-light-green-A700{background-color:#64DD17!important}.mui--color-lime-50{color:#F9FBE7!important}.mui--bg-color-lime-50{background-color:#F9FBE7!important}.mui--color-lime-100{color:#F0F4C3!important}.mui--bg-color-lime-100{background-color:#F0F4C3!important}.mui--color-lime-200{color:#E6EE9C!important}.mui--bg-color-lime-200{background-color:#E6EE9C!important}.mui--color-lime-300{color:#DCE775!important}.mui--bg-color-lime-300{background-color:#DCE775!important}.mui--color-lime-400{color:#D4E157!important}.mui--color-lime,.mui--color-lime-500{color:#CDDC39!important}.mui--bg-color-lime-400{background-color:#D4E157!important}.mui--bg-color-lime,.mui--bg-color-lime-500{background-color:#CDDC39!important}.mui--color-lime-600{color:#C0CA33!important}.mui--bg-color-lime-600{background-color:#C0CA33!important}.mui--color-lime-700{color:#AFB42B!important}.mui--bg-color-lime-700{background-color:#AFB42B!important}.mui--color-lime-800{color:#9E9D24!important}.mui--bg-color-lime-800{background-color:#9E9D24!important}.mui--color-lime-900{color:#827717!important}.mui--bg-color-lime-900{background-color:#827717!important}.mui--color-lime-A100{color:#F4FF81!important}.mui--bg-color-lime-A100{background-color:#F4FF81!important}.mui--color-lime-A200{color:#EEFF41!important}.mui--bg-color-lime-A200{background-color:#EEFF41!important}.mui--color-lime-A400{color:#C6FF00!important}.mui--bg-color-lime-A400{background-color:#C6FF00!important}.mui--color-lime-A700{color:#AEEA00!important}.mui--bg-color-lime-A700{background-color:#AEEA00!important}.mui--color-yellow-50{color:#FFFDE7!important}.mui--bg-color-yellow-50{background-color:#FFFDE7!important}.mui--color-yellow-100{color:#FFF9C4!important}.mui--bg-color-yellow-100{background-color:#FFF9C4!important}.mui--color-yellow-200{color:#FFF59D!important}.mui--bg-color-yellow-200{background-color:#FFF59D!important}.mui--color-yellow-300{color:#FFF176!important}.mui--bg-color-yellow-300{background-color:#FFF176!important}.mui--color-yellow-400{color:#FFEE58!important}.mui--color-yellow,.mui--color-yellow-500{color:#FFEB3B!important}.mui--bg-color-yellow-400{background-color:#FFEE58!important}.mui--bg-color-yellow,.mui--bg-color-yellow-500{background-color:#FFEB3B!important}.mui--color-yellow-600{color:#FDD835!important}.mui--bg-color-yellow-600{background-color:#FDD835!important}.mui--color-yellow-700{color:#FBC02D!important}.mui--bg-color-yellow-700{background-color:#FBC02D!important}.mui--color-yellow-800{color:#F9A825!important}.mui--bg-color-yellow-800{background-color:#F9A825!important}.mui--color-yellow-900{color:#F57F17!important}.mui--bg-color-yellow-900{background-color:#F57F17!important}.mui--color-yellow-A100{color:#FFFF8D!important}.mui--bg-color-yellow-A100{background-color:#FFFF8D!important}.mui--color-yellow-A200{color:#FF0!important}.mui--bg-color-yellow-A200{background-color:#FF0!important}.mui--color-yellow-A400{color:#FFEA00!important}.mui--bg-color-yellow-A400{background-color:#FFEA00!important}.mui--color-yellow-A700{color:#FFD600!important}.mui--bg-color-yellow-A700{background-color:#FFD600!important}.mui--color-amber-50{color:#FFF8E1!important}.mui--bg-color-amber-50{background-color:#FFF8E1!important}.mui--color-amber-100{color:#FFECB3!important}.mui--bg-color-amber-100{background-color:#FFECB3!important}.mui--color-amber-200{color:#FFE082!important}.mui--bg-color-amber-200{background-color:#FFE082!important}.mui--color-amber-300{color:#FFD54F!important}.mui--bg-color-amber-300{background-color:#FFD54F!important}.mui--color-amber-400{color:#FFCA28!important}.mui--color-amber,.mui--color-amber-500{color:#FFC107!important}.mui--bg-color-amber-400{background-color:#FFCA28!important}.mui--bg-color-amber,.mui--bg-color-amber-500{background-color:#FFC107!important}.mui--color-amber-600{color:#FFB300!important}.mui--bg-color-amber-600{background-color:#FFB300!important}.mui--color-amber-700{color:#FFA000!important}.mui--bg-color-amber-700{background-color:#FFA000!important}.mui--color-amber-800{color:#FF8F00!important}.mui--bg-color-amber-800{background-color:#FF8F00!important}.mui--color-amber-900{color:#FF6F00!important}.mui--bg-color-amber-900{background-color:#FF6F00!important}.mui--color-amber-A100{color:#FFE57F!important}.mui--bg-color-amber-A100{background-color:#FFE57F!important}.mui--color-amber-A200{color:#FFD740!important}.mui--bg-color-amber-A200{background-color:#FFD740!important}.mui--color-amber-A400{color:#FFC400!important}.mui--bg-color-amber-A400{background-color:#FFC400!important}.mui--color-amber-A700{color:#FFAB00!important}.mui--bg-color-amber-A700{background-color:#FFAB00!important}.mui--color-orange-50{color:#FFF3E0!important}.mui--bg-color-orange-50{background-color:#FFF3E0!important}.mui--color-orange-100{color:#FFE0B2!important}.mui--bg-color-orange-100{background-color:#FFE0B2!important}.mui--color-orange-200{color:#FFCC80!important}.mui--bg-color-orange-200{background-color:#FFCC80!important}.mui--color-orange-300{color:#FFB74D!important}.mui--bg-color-orange-300{background-color:#FFB74D!important}.mui--color-orange-400{color:#FFA726!important}.mui--color-orange,.mui--color-orange-500{color:#FF9800!important}.mui--bg-color-orange-400{background-color:#FFA726!important}.mui--bg-color-orange,.mui--bg-color-orange-500{background-color:#FF9800!important}.mui--color-orange-600{color:#FB8C00!important}.mui--bg-color-orange-600{background-color:#FB8C00!important}.mui--color-orange-700{color:#F57C00!important}.mui--bg-color-orange-700{background-color:#F57C00!important}.mui--color-orange-800{color:#EF6C00!important}.mui--bg-color-orange-800{background-color:#EF6C00!important}.mui--color-orange-900{color:#E65100!important}.mui--bg-color-orange-900{background-color:#E65100!important}.mui--color-orange-A100{color:#FFD180!important}.mui--bg-color-orange-A100{background-color:#FFD180!important}.mui--color-orange-A200{color:#FFAB40!important}.mui--bg-color-orange-A200{background-color:#FFAB40!important}.mui--color-orange-A400{color:#FF9100!important}.mui--bg-color-orange-A400{background-color:#FF9100!important}.mui--color-orange-A700{color:#FF6D00!important}.mui--bg-color-orange-A700{background-color:#FF6D00!important}.mui--color-deep-orange-50{color:#FBE9E7!important}.mui--bg-color-deep-orange-50{background-color:#FBE9E7!important}.mui--color-deep-orange-100{color:#FFCCBC!important}.mui--bg-color-deep-orange-100{background-color:#FFCCBC!important}.mui--color-deep-orange-200{color:#FFAB91!important}.mui--bg-color-deep-orange-200{background-color:#FFAB91!important}.mui--color-deep-orange-300{color:#FF8A65!important}.mui--bg-color-deep-orange-300{background-color:#FF8A65!important}.mui--color-deep-orange-400{color:#FF7043!important}.mui--color-deep-orange,.mui--color-deep-orange-500{color:#FF5722!important}.mui--bg-color-deep-orange-400{background-color:#FF7043!important}.mui--bg-color-deep-orange,.mui--bg-color-deep-orange-500{background-color:#FF5722!important}.mui--color-deep-orange-600{color:#F4511E!important}.mui--bg-color-deep-orange-600{background-color:#F4511E!important}.mui--color-deep-orange-700{color:#E64A19!important}.mui--bg-color-deep-orange-700{background-color:#E64A19!important}.mui--color-deep-orange-800{color:#D84315!important}.mui--bg-color-deep-orange-800{background-color:#D84315!important}.mui--color-deep-orange-900{color:#BF360C!important}.mui--bg-color-deep-orange-900{background-color:#BF360C!important}.mui--color-deep-orange-A100{color:#FF9E80!important}.mui--bg-color-deep-orange-A100{background-color:#FF9E80!important}.mui--color-deep-orange-A200{color:#FF6E40!important}.mui--bg-color-deep-orange-A200{background-color:#FF6E40!important}.mui--color-deep-orange-A400{color:#FF3D00!important}.mui--bg-color-deep-orange-A400{background-color:#FF3D00!important}.mui--color-deep-orange-A700{color:#DD2C00!important}.mui--bg-color-deep-orange-A700{background-color:#DD2C00!important}.mui--color-brown-50{color:#EFEBE9!important}.mui--bg-color-brown-50{background-color:#EFEBE9!important}.mui--color-brown-100{color:#D7CCC8!important}.mui--bg-color-brown-100{background-color:#D7CCC8!important}.mui--color-brown-200{color:#BCAAA4!important}.mui--bg-color-brown-200{background-color:#BCAAA4!important}.mui--color-brown-300{color:#A1887F!important}.mui--bg-color-brown-300{background-color:#A1887F!important}.mui--color-brown-400{color:#8D6E63!important}.mui--color-brown,.mui--color-brown-500{color:#795548!important}.mui--bg-color-brown-400{background-color:#8D6E63!important}.mui--bg-color-brown,.mui--bg-color-brown-500{background-color:#795548!important}.mui--color-brown-600{color:#6D4C41!important}.mui--bg-color-brown-600{background-color:#6D4C41!important}.mui--color-brown-700{color:#5D4037!important}.mui--bg-color-brown-700{background-color:#5D4037!important}.mui--color-brown-800{color:#4E342E!important}.mui--bg-color-brown-800{background-color:#4E342E!important}.mui--color-brown-900{color:#3E2723!important}.mui--bg-color-brown-900{background-color:#3E2723!important}.mui--color-grey-50{color:#FAFAFA!important}.mui--bg-color-grey-50{background-color:#FAFAFA!important}.mui--color-grey-100{color:#F5F5F5!important}.mui--bg-color-grey-100{background-color:#F5F5F5!important}.mui--color-grey-200{color:#EEE!important}.mui--bg-color-grey-200{background-color:#EEE!important}.mui--color-grey-300{color:#E0E0E0!important}.mui--bg-color-grey-300{background-color:#E0E0E0!important}.mui--color-grey-400{color:#BDBDBD!important}.mui--color-grey,.mui--color-grey-500{color:#9E9E9E!important}.mui--bg-color-grey-400{background-color:#BDBDBD!important}.mui--bg-color-grey,.mui--bg-color-grey-500{background-color:#9E9E9E!important}.mui--color-grey-600{color:#757575!important}.mui--bg-color-grey-600{background-color:#757575!important}.mui--color-grey-700{color:#616161!important}.mui--bg-color-grey-700{background-color:#616161!important}.mui--color-grey-800{color:#424242!important}.mui--bg-color-grey-800{background-color:#424242!important}.mui--color-grey-900{color:#212121!important}.mui--bg-color-grey-900{background-color:#212121!important}.mui--color-blue-grey-50{color:#ECEFF1!important}.mui--bg-color-blue-grey-50{background-color:#ECEFF1!important}.mui--color-blue-grey-100{color:#CFD8DC!important}.mui--bg-color-blue-grey-100{background-color:#CFD8DC!important}.mui--color-blue-grey-200{color:#B0BEC5!important}.mui--bg-color-blue-grey-200{background-color:#B0BEC5!important}.mui--color-blue-grey-300{color:#90A4AE!important}.mui--bg-color-blue-grey-300{background-color:#90A4AE!important}.mui--color-blue-grey-400{color:#78909C!important}.mui--color-blue-grey,.mui--color-blue-grey-500{color:#607D8B!important}.mui--bg-color-blue-grey-400{background-color:#78909C!important}.mui--bg-color-blue-grey,.mui--bg-color-blue-grey-500{background-color:#607D8B!important}.mui--color-blue-grey-600{color:#546E7A!important}.mui--bg-color-blue-grey-600{background-color:#546E7A!important}.mui--color-blue-grey-700{color:#455A64!important}.mui--bg-color-blue-grey-700{background-color:#455A64!important}.mui--color-blue-grey-800{color:#37474F!important}.mui--bg-color-blue-grey-800{background-color:#37474F!important}.mui--color-blue-grey-900{color:#263238!important}.mui--bg-color-blue-grey-900{background-color:#263238!important}.mui--color-black{color:#000!important}.mui--bg-color-black{background-color:#000!important}.mui--color-white{color:#FFF!important}.mui--bg-color-white{background-color:#FFF!important}.mui--color-black-alpha-12{color:rgba(0,0,0,.12)!important}.mui--bg-color-black-alpha-12{background-color:rgba(0,0,0,.12)!important}.mui--color-black-alpha-38{color:rgba(0,0,0,.38)!important}.mui--bg-color-black-alpha-38{background-color:rgba(0,0,0,.38)!important}.mui--color-black-alpha-54{color:rgba(0,0,0,.54)!important}.mui--bg-color-black-alpha-54{background-color:rgba(0,0,0,.54)!important}.mui--color-black-alpha-87{color:rgba(0,0,0,.87)!important}.mui--bg-color-black-alpha-87{background-color:rgba(0,0,0,.87)!important}.mui--color-white-alpha-12{color:rgba(255,255,255,.12)!important}.mui--bg-color-white-alpha-12{background-color:rgba(255,255,255,.12)!important}.mui--color-white-alpha-30{color:rgba(255,255,255,.3)!important}.mui--bg-color-white-alpha-30{background-color:rgba(255,255,255,.3)!important}.mui--color-white-alpha-70{color:rgba(255,255,255,.7)!important}.mui--bg-color-white-alpha-70{background-color:rgba(255,255,255,.7)!important} \ No newline at end of file diff --git a/platforms/android/assets/www/libs/mui/packages/cdn/extra/mui-combined.js b/platforms/android/assets/www/libs/mui/packages/cdn/extra/mui-combined.js new file mode 100644 index 0000000..2294236 --- /dev/null +++ b/platforms/android/assets/www/libs/mui/packages/cdn/extra/mui-combined.js @@ -0,0 +1,2 @@ +!function i(t,e,o){function n(a,r){if(!e[a]){if(!t[a]){var u="function"==typeof require&&require;if(!r&&u)return u(a,!0);if(l)return l(a,!0);throw new Error("Cannot find module '"+a+"'")}var m=e[a]={exports:{}};t[a][0].call(m.exports,function(i){var e=t[a][1][i];return n(e?e:i)},m,m.exports,i,t,e,o)}return e[a].exports}for(var l="function"==typeof require&&require,a=0;as&&(f=r+(e+1)*a-(-1*o+n+l),b=t*a+2*r-p,x=Math.min(f,b)),{height:p+"px",top:o+"px",scrollTop:x}}var n=15,l=32,a=42,r=8;t.exports={getMenuPositionalCSS:o}},{}],5:[function(i,t,e){"use strict";function o(i,t){if(t&&i.setAttribute){for(var e,o=b(i),n=t.split(" "),l=0;l-1:!1}function a(i){if(void 0===i)return"undefined";var t=Object.prototype.toString.call(i);if(0===t.indexOf("[object "))return t.slice(8,-1).toLowerCase();throw new Error("MUI: Could not understand type: "+t)}function r(i,t,e,o){o=void 0===o?!1:o,i.addEventListener(t,e,o);var n=i._muiEventCache=i._muiEventCache||{};n[t]=n[t]||[],n[t].push([e,o])}function u(i,t,e,o){o=void 0===o?!1:o;var n,l,a=i._muiEventCache=i._muiEventCache||{},r=a[t]||[];for(l=r.length;l--;)n=r[l],(void 0===e||n[0]===e&&n[1]===o)&&(r.splice(l,1),i.removeEventListener(t,n[0],n[1]))}function m(i,t,e,o){r(i,t,function n(o){e&&e.apply(this,arguments),u(i,t,n)},o)}function d(i,t){var e=window;if(void 0===t){if(i===e){var o=document.documentElement;return(e.pageXOffset||o.scrollLeft)-(o.clientLeft||0)}return i.scrollLeft}i===e?e.scrollTo(t,s(e)):i.scrollLeft=t}function s(i,t){var e=window;if(void 0===t){if(i===e){var o=document.documentElement;return(e.pageYOffset||o.scrollTop)-(o.clientTop||0)}return i.scrollTop}i===e?e.scrollTo(d(e),t):i.scrollTop=t}function c(i){var t=window,e=i.getBoundingClientRect(),o=s(t),n=d(t);return{top:e.top+o,left:e.left+n,height:e.height,width:e.width}}function p(i){var t=!1,e=!0,o=document,n=o.defaultView,l=o.documentElement,a=o.addEventListener?"addEventListener":"attachEvent",r=o.addEventListener?"removeEventListener":"detachEvent",u=o.addEventListener?"":"on",m=function(e){"readystatechange"==e.type&&"complete"!=o.readyState||(("load"==e.type?n:o)[r](u+e.type,m,!1),!t&&(t=!0)&&i.call(n,e.type||e))},d=function(){try{l.doScroll("left")}catch(i){return void setTimeout(d,50)}m("poll")};if("complete"==o.readyState)i.call(n,"lazy");else{if(o.createEventObject&&l.doScroll){try{e=!n.frameElement}catch(s){}e&&d()}o[a](u+"DOMContentLoaded",m,!1),o[a](u+"readystatechange",m,!1),n[a](u+"load",m,!1)}}function f(i,t){if(t&&i.setAttribute){for(var e,o=b(i),n=t.split(" "),l=0;l=0;)o=o.replace(" "+e+" "," ");i.setAttribute("class",o.trim())}}function b(i){var t=(i.getAttribute("class")||"").replace(/[\n\t]/g,"");return" "+t+" "}function x(i){return i.replace(v,function(i,t,e,o){return o?e.toUpperCase():e}).replace(y,"Moz$1")}function h(i,t,e){var o;return o=e.getPropertyValue(t),""!==o||i.ownerDocument||(o=i.style[x(t)]),o}var g,v=/([\:\-\_]+(.))/g,y=/^moz([A-Z])/;g={multiple:!0,selected:!0,checked:!0,disabled:!0,readonly:!0,required:!0,open:!0},t.exports={addClass:o,css:n,hasClass:l,off:u,offset:c,on:r,one:m,ready:p,removeClass:f,type:a,scrollLeft:d,scrollTop:s}},{}],6:[function(i,t,e){"use strict";function o(){var i=window;if(x.debug&&"undefined"!=typeof i.console)try{i.console.log.apply(i.console,arguments)}catch(t){var e=Array.prototype.slice.call(arguments);i.console.log(e.join("\n"))}}function n(i){var t,e=document;t=e.head||e.getElementsByTagName("head")[0]||e.documentElement;var o=e.createElement("style");return o.type="text/css",o.styleSheet?o.styleSheet.cssText=i:o.appendChild(e.createTextNode(i)),t.insertBefore(o,t.firstChild),o}function l(i,t){if(!t)throw new Error("MUI: "+i);"undefined"!=typeof console&&console.error("MUI Warning: "+i)}function a(i){if(g.push(i),void 0===g._initialized){var t=document;h.on(t,"animationstart",r),h.on(t,"mozAnimationStart",r),h.on(t,"webkitAnimationStart",r),g._initialized=!0}}function r(i){if("mui-node-inserted"===i.animationName)for(var t=i.target,e=g.length-1;e>=0;e--)g[e](t)}function u(i){var t="";for(var e in i)t+=i[e]?e+" ":"";return t.trim()}function m(){if(void 0!==b)return b;var i=document.createElement("x");return i.style.cssText="pointer-events:auto",b="auto"===i.style.pointerEvents}function d(i,t){return function(){i[t].apply(i,arguments)}}function s(i,t,e,o,n){var l,a=document.createEvent("HTMLEvents"),e=void 0!==e?e:!0,o=void 0!==o?o:!0;if(a.initEvent(t,e,o),n)for(l in n)a[l]=n[l];return i&&i.dispatchEvent(a),a}function c(){if(v+=1,1===v){var i=window,t=document;f={left:h.scrollLeft(i),top:h.scrollTop(i)},h.addClass(t.body,y),i.scrollTo(f.left,f.top)}}function p(){if(0!==v&&(v-=1,0===v)){var i=window,t=document;h.removeClass(t.body,y),i.scrollTo(f.left,f.top)}}var f,b,x=i("../config"),h=i("./jqLite"),g=[],v=0,y="mui-body--scroll-lock";t.exports={callback:d,classNames:u,disableScrollLock:p,dispatchEvent:s,enableScrollLock:c,log:o,loadStyle:n,onNodeInserted:a,raiseError:l,supportsPointerEvents:m}},{"../config":3,"./jqLite":5}],7:[function(i,t,e){t.exports='/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-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{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}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{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{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-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:border-box}:after,:before{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:Arial,Verdana,Tahoma;font-size:14px;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);background-color:#FFF}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#2196F3;text-decoration:none}a:focus,a:hover{color:#1976D2;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}p{margin:0 0 10px}ol,ul{margin-top:0;margin-bottom:10px}figure{margin:0}img{vertical-align:middle}hr{margin-top:20px;margin-bottom:20px;border:0;height:1px;background-color:rgba(0,0,0,.12)}legend{display:block;width:100%;padding:0;margin-bottom:10px;font-size:21px;color:rgba(0,0,0,.87);line-height:inherit;border:0}input[type=search]{box-sizing:border-box;-webkit-appearance:none}input[type=checkbox]:focus,input[type=radio]:focus,input[type=file]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type=checkbox]:disabled,input[type=radio]:disabled{cursor:not-allowed}strong{font-weight:700}abbr[title]{cursor:help;border-bottom:1px dotted #2196F3}h1,h2,h3{margin-top:20px;margin-bottom:10px}h4,h5,h6{margin-top:10px;margin-bottom:10px}.mui--appbar-height{height:56px}.mui--appbar-min-height,.mui-appbar{min-height:56px}.mui--appbar-line-height{line-height:56px}.mui--appbar-top{top:56px}@media (orientation:landscape) and (max-height:480px){.mui--appbar-height{height:48px}.mui--appbar-min-height,.mui-appbar{min-height:48px}.mui--appbar-line-height{line-height:48px}.mui--appbar-top{top:48px}}@media (min-width:480px){.mui--appbar-height{height:64px}.mui--appbar-min-height,.mui-appbar{min-height:64px}.mui--appbar-line-height{line-height:64px}.mui--appbar-top{top:64px}}.mui-appbar{background-color:#2196F3;color:#FFF}.mui-btn{animation-duration:.1ms;animation-name:mui-node-inserted;font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase;color:rgba(0,0,0,.87);background-color:#FFF;transition:all .2s ease-in-out;display:inline-block;height:36px;padding:0 26px;margin-top:6px;margin-bottom:6px;border:none;border-radius:2px;cursor:pointer;-ms-touch-action:manipulation;touch-action:manipulation;background-image:none;text-align:center;line-height:36px;vertical-align:middle;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:14px;letter-spacing:.03em;position:relative;overflow:hidden}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{color:rgba(0,0,0,.87);background-color:#fff}.mui-btn[disabled]:active,.mui-btn[disabled]:focus,.mui-btn[disabled]:hover{color:rgba(0,0,0,.87);background-color:#FFF}.mui-btn.mui-btn--flat{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn.mui-btn--flat:active,.mui-btn.mui-btn--flat:focus,.mui-btn.mui-btn--flat:hover{color:rgba(0,0,0,.87);background-color:#f2f2f2}.mui-btn.mui-btn--flat[disabled]:active,.mui-btn.mui-btn--flat[disabled]:focus,.mui-btn.mui-btn--flat[disabled]:hover{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{outline:0;text-decoration:none;color:rgba(0,0,0,.87)}.mui-btn:focus,.mui-btn:hover{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:focus,.mui-btn:hover{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn.mui--is-disabled,.mui-btn:disabled{cursor:not-allowed;pointer-events:none;opacity:.6;box-shadow:none}.mui-btn+.mui-btn{margin-left:8px}.mui-btn--flat{background-color:transparent}.mui-btn--flat:active,.mui-btn--flat:focus,.mui-btn--flat:hover{box-shadow:none;background-color:#f2f2f2}.mui-btn--fab,.mui-btn--raised{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab,.mui-btn--raised{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn--fab{position:relative;padding:0;width:55px;height:55px;line-height:55px;border-radius:50%;z-index:1}.mui-btn--primary{color:#FFF;background-color:#2196F3}.mui-btn--primary:active,.mui-btn--primary:focus,.mui-btn--primary:hover{color:#FFF;background-color:#39a1f4}.mui-btn--primary[disabled]:active,.mui-btn--primary[disabled]:focus,.mui-btn--primary[disabled]:hover{color:#FFF;background-color:#2196F3}.mui-btn--primary.mui-btn--flat{color:#2196F3;background-color:transparent}.mui-btn--primary.mui-btn--flat:active,.mui-btn--primary.mui-btn--flat:focus,.mui-btn--primary.mui-btn--flat:hover{color:#2196F3;background-color:#f2f2f2}.mui-btn--primary.mui-btn--flat[disabled]:active,.mui-btn--primary.mui-btn--flat[disabled]:focus,.mui-btn--primary.mui-btn--flat[disabled]:hover{color:#2196F3;background-color:transparent}.mui-btn--dark{color:#FFF;background-color:#424242}.mui-btn--dark:active,.mui-btn--dark:focus,.mui-btn--dark:hover{color:#FFF;background-color:#4f4f4f}.mui-btn--dark[disabled]:active,.mui-btn--dark[disabled]:focus,.mui-btn--dark[disabled]:hover{color:#FFF;background-color:#424242}.mui-btn--dark.mui-btn--flat{color:#424242;background-color:transparent}.mui-btn--dark.mui-btn--flat:active,.mui-btn--dark.mui-btn--flat:focus,.mui-btn--dark.mui-btn--flat:hover{color:#424242;background-color:#f2f2f2}.mui-btn--dark.mui-btn--flat[disabled]:active,.mui-btn--dark.mui-btn--flat[disabled]:focus,.mui-btn--dark.mui-btn--flat[disabled]:hover{color:#424242;background-color:transparent}.mui-btn--danger{color:#FFF;background-color:#F44336}.mui-btn--danger:active,.mui-btn--danger:focus,.mui-btn--danger:hover{color:#FFF;background-color:#f55a4e}.mui-btn--danger[disabled]:active,.mui-btn--danger[disabled]:focus,.mui-btn--danger[disabled]:hover{color:#FFF;background-color:#F44336}.mui-btn--danger.mui-btn--flat{color:#F44336;background-color:transparent}.mui-btn--danger.mui-btn--flat:active,.mui-btn--danger.mui-btn--flat:focus,.mui-btn--danger.mui-btn--flat:hover{color:#F44336;background-color:#f2f2f2}.mui-btn--danger.mui-btn--flat[disabled]:active,.mui-btn--danger.mui-btn--flat[disabled]:focus,.mui-btn--danger.mui-btn--flat[disabled]:hover{color:#F44336;background-color:transparent}.mui-btn--accent{color:#FFF;background-color:#FF4081}.mui-btn--accent:active,.mui-btn--accent:focus,.mui-btn--accent:hover{color:#FFF;background-color:#ff5a92}.mui-btn--accent[disabled]:active,.mui-btn--accent[disabled]:focus,.mui-btn--accent[disabled]:hover{color:#FFF;background-color:#FF4081}.mui-btn--accent.mui-btn--flat{color:#FF4081;background-color:transparent}.mui-btn--accent.mui-btn--flat:active,.mui-btn--accent.mui-btn--flat:focus,.mui-btn--accent.mui-btn--flat:hover{color:#FF4081;background-color:#f2f2f2}.mui-btn--accent.mui-btn--flat[disabled]:active,.mui-btn--accent.mui-btn--flat[disabled]:focus,.mui-btn--accent.mui-btn--flat[disabled]:hover{color:#FF4081;background-color:transparent}.mui-btn--small{height:30.6px;line-height:30.6px;padding:0 16px;font-size:13px}.mui-btn--large{height:54px;line-height:54px;padding:0 26px;font-size:14px}.mui-btn--fab.mui-btn--small{width:44px;height:44px;line-height:44px}.mui-btn--fab.mui-btn--large{width:75px;height:75px;line-height:75px}.mui-checkbox,.mui-radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.mui-checkbox>label,.mui-radio>label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio],.mui-radio>label>input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px}.mui-checkbox+.mui-checkbox,.mui-radio+.mui-radio{margin-top:-5px}.mui-checkbox--inline,.mui-radio--inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.mui-checkbox--inline>input[type=checkbox],.mui-checkbox--inline>input[type=radio],.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox--inline>label>input[type=radio],.mui-radio--inline>input[type=checkbox],.mui-radio--inline>input[type=radio],.mui-radio--inline>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio]{margin:4px 0 0;line-height:normal}.mui-checkbox--inline+.mui-checkbox--inline,.mui-radio--inline+.mui-radio--inline{margin-top:0;margin-left:10px}.mui-container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container:after,.mui-container:before{content:" ";display:table}.mui-container:after{clear:both}@media (min-width:544px){.mui-container{max-width:570px}}@media (min-width:768px){.mui-container{max-width:740px}}@media (min-width:992px){.mui-container{max-width:960px}}@media (min-width:1200px){.mui-container{max-width:1170px}}.mui-container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container-fluid:after,.mui-container-fluid:before{content:" ";display:table}.mui-container-fluid:after{clear:both}.mui-divider{display:block;height:1px;background-color:rgba(0,0,0,.12)}.mui--divider-top{border-top:1px solid rgba(0,0,0,.12)}.mui--divider-bottom{border-bottom:1px solid rgba(0,0,0,.12)}.mui--divider-left{border-left:1px solid rgba(0,0,0,.12)}.mui--divider-right{border-right:1px solid rgba(0,0,0,.12)}.mui-dropdown{display:inline-block;position:relative}[data-mui-toggle=dropdown]{animation-duration:.1ms;animation-name:mui-node-inserted;outline:0}.mui-dropdown__menu{position:absolute;top:100%;left:0;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#FFF;border-radius:2px;z-index:1;background-clip:padding-box}.mui-dropdown__menu.mui--is-open{display:block}.mui-dropdown__menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);white-space:nowrap}.mui-dropdown__menu>li>a:focus,.mui-dropdown__menu>li>a:hover{text-decoration:none;color:rgba(0,0,0,.87);background-color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a,.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;cursor:not-allowed}.mui-dropdown__menu--right{left:auto;right:0}@media (min-width:544px){.mui-form--inline>.mui-textfield{display:inline-block;margin-bottom:0}.mui-form--inline>.mui-checkbox,.mui-form--inline>.mui-radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.mui-form--inline>.mui-checkbox>label,.mui-form--inline>.mui-radio>label{padding-left:0}.mui-form--inline>.mui-checkbox>label>input[type=checkbox],.mui-form--inline>.mui-radio>label>input[type=radio]{position:relative;margin-left:0}.mui-form--inline>.mui-select{display:inline-block}.mui-form--inline>.mui-btn{margin-bottom:0;margin-top:0;vertical-align:bottom}}.mui-row{margin-left:-15px;margin-right:-15px}.mui-row:after,.mui-row:before{content:" ";display:table}.mui-row:after{clear:both}.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9,.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9,.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9,.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{min-height:1px;padding-left:15px;padding-right:15px}.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{float:left}.mui-col-xs-1{width:8.33333%}.mui-col-xs-2{width:16.66667%}.mui-col-xs-3{width:25%}.mui-col-xs-4{width:33.33333%}.mui-col-xs-5{width:41.66667%}.mui-col-xs-6{width:50%}.mui-col-xs-7{width:58.33333%}.mui-col-xs-8{width:66.66667%}.mui-col-xs-9{width:75%}.mui-col-xs-10{width:83.33333%}.mui-col-xs-11{width:91.66667%}.mui-col-xs-12{width:100%}.mui-col-xs-offset-0{margin-left:0}.mui-col-xs-offset-1{margin-left:8.33333%}.mui-col-xs-offset-2{margin-left:16.66667%}.mui-col-xs-offset-3{margin-left:25%}.mui-col-xs-offset-4{margin-left:33.33333%}.mui-col-xs-offset-5{margin-left:41.66667%}.mui-col-xs-offset-6{margin-left:50%}.mui-col-xs-offset-7{margin-left:58.33333%}.mui-col-xs-offset-8{margin-left:66.66667%}.mui-col-xs-offset-9{margin-left:75%}.mui-col-xs-offset-10{margin-left:83.33333%}.mui-col-xs-offset-11{margin-left:91.66667%}.mui-col-xs-offset-12{margin-left:100%}@media (min-width:544px){.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9{float:left}.mui-col-sm-1{width:8.33333%}.mui-col-sm-2{width:16.66667%}.mui-col-sm-3{width:25%}.mui-col-sm-4{width:33.33333%}.mui-col-sm-5{width:41.66667%}.mui-col-sm-6{width:50%}.mui-col-sm-7{width:58.33333%}.mui-col-sm-8{width:66.66667%}.mui-col-sm-9{width:75%}.mui-col-sm-10{width:83.33333%}.mui-col-sm-11{width:91.66667%}.mui-col-sm-12{width:100%}.mui-col-sm-offset-0{margin-left:0}.mui-col-sm-offset-1{margin-left:8.33333%}.mui-col-sm-offset-2{margin-left:16.66667%}.mui-col-sm-offset-3{margin-left:25%}.mui-col-sm-offset-4{margin-left:33.33333%}.mui-col-sm-offset-5{margin-left:41.66667%}.mui-col-sm-offset-6{margin-left:50%}.mui-col-sm-offset-7{margin-left:58.33333%}.mui-col-sm-offset-8{margin-left:66.66667%}.mui-col-sm-offset-9{margin-left:75%}.mui-col-sm-offset-10{margin-left:83.33333%}.mui-col-sm-offset-11{margin-left:91.66667%}.mui-col-sm-offset-12{margin-left:100%}}@media (min-width:768px){.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9{float:left}.mui-col-md-1{width:8.33333%}.mui-col-md-2{width:16.66667%}.mui-col-md-3{width:25%}.mui-col-md-4{width:33.33333%}.mui-col-md-5{width:41.66667%}.mui-col-md-6{width:50%}.mui-col-md-7{width:58.33333%}.mui-col-md-8{width:66.66667%}.mui-col-md-9{width:75%}.mui-col-md-10{width:83.33333%}.mui-col-md-11{width:91.66667%}.mui-col-md-12{width:100%}.mui-col-md-offset-0{margin-left:0}.mui-col-md-offset-1{margin-left:8.33333%}.mui-col-md-offset-2{margin-left:16.66667%}.mui-col-md-offset-3{margin-left:25%}.mui-col-md-offset-4{margin-left:33.33333%}.mui-col-md-offset-5{margin-left:41.66667%}.mui-col-md-offset-6{margin-left:50%}.mui-col-md-offset-7{margin-left:58.33333%}.mui-col-md-offset-8{margin-left:66.66667%}.mui-col-md-offset-9{margin-left:75%}.mui-col-md-offset-10{margin-left:83.33333%}.mui-col-md-offset-11{margin-left:91.66667%}.mui-col-md-offset-12{margin-left:100%}}@media (min-width:992px){.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9{float:left}.mui-col-lg-1{width:8.33333%}.mui-col-lg-2{width:16.66667%}.mui-col-lg-3{width:25%}.mui-col-lg-4{width:33.33333%}.mui-col-lg-5{width:41.66667%}.mui-col-lg-6{width:50%}.mui-col-lg-7{width:58.33333%}.mui-col-lg-8{width:66.66667%}.mui-col-lg-9{width:75%}.mui-col-lg-10{width:83.33333%}.mui-col-lg-11{width:91.66667%}.mui-col-lg-12{width:100%}.mui-col-lg-offset-0{margin-left:0}.mui-col-lg-offset-1{margin-left:8.33333%}.mui-col-lg-offset-2{margin-left:16.66667%}.mui-col-lg-offset-3{margin-left:25%}.mui-col-lg-offset-4{margin-left:33.33333%}.mui-col-lg-offset-5{margin-left:41.66667%}.mui-col-lg-offset-6{margin-left:50%}.mui-col-lg-offset-7{margin-left:58.33333%}.mui-col-lg-offset-8{margin-left:66.66667%}.mui-col-lg-offset-9{margin-left:75%}.mui-col-lg-offset-10{margin-left:83.33333%}.mui-col-lg-offset-11{margin-left:91.66667%}.mui-col-lg-offset-12{margin-left:100%}}@media (min-width:1200px){.mui-col-xl-1,.mui-col-xl-10,.mui-col-xl-11,.mui-col-xl-12,.mui-col-xl-2,.mui-col-xl-3,.mui-col-xl-4,.mui-col-xl-5,.mui-col-xl-6,.mui-col-xl-7,.mui-col-xl-8,.mui-col-xl-9{float:left}.mui-col-xl-1{width:8.33333%}.mui-col-xl-2{width:16.66667%}.mui-col-xl-3{width:25%}.mui-col-xl-4{width:33.33333%}.mui-col-xl-5{width:41.66667%}.mui-col-xl-6{width:50%}.mui-col-xl-7{width:58.33333%}.mui-col-xl-8{width:66.66667%}.mui-col-xl-9{width:75%}.mui-col-xl-10{width:83.33333%}.mui-col-xl-11{width:91.66667%}.mui-col-xl-12{width:100%}.mui-col-xl-offset-0{margin-left:0}.mui-col-xl-offset-1{margin-left:8.33333%}.mui-col-xl-offset-2{margin-left:16.66667%}.mui-col-xl-offset-3{margin-left:25%}.mui-col-xl-offset-4{margin-left:33.33333%}.mui-col-xl-offset-5{margin-left:41.66667%}.mui-col-xl-offset-6{margin-left:50%}.mui-col-xl-offset-7{margin-left:58.33333%}.mui-col-xl-offset-8{margin-left:66.66667%}.mui-col-xl-offset-9{margin-left:75%}.mui-col-xl-offset-10{margin-left:83.33333%}.mui-col-xl-offset-11{margin-left:91.66667%}.mui-col-xl-offset-12{margin-left:100%}}.mui-panel{padding:15px;margin-bottom:20px;border-radius:0;background-color:#FFF;box-shadow:0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}.mui-panel:after,.mui-panel:before{content:" ";display:table}.mui-panel:after{clear:both}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-panel{box-shadow:0 -1px 2px 0 rgba(0,0,0,.12),-1px 0 2px 0 rgba(0,0,0,.12),0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}}.mui-select{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-select:focus{outline:0}.mui-select:focus>select{height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;height:32px;width:100%;appearance:none;-webkit-appearance:none;-moz-appearance:none;outline:0;border:none;border-bottom:1px solid rgba(0,0,0,.26);border-radius:0;box-shadow:none;background-color:transparent;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iNiIgd2lkdGg9IjEwIj48cG9seWdvbiBwb2ludHM9IjAsMCAxMCwwIDUsNiIgc3R5bGU9ImZpbGw6cmdiYSgwLDAsMCwuMjQpOyIvPjwvc3ZnPg==);background-repeat:no-repeat;background-position:right center;cursor:pointer;color:rgba(0,0,0,.87);font-size:16px;padding:0 25px 0 0}.mui-select>select::-ms-expand{display:none}.mui-select>select:focus{outline:0;height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select:disabled{color:rgba(0,0,0,.38);cursor:not-allowed;background-color:transparent;opacity:1}.mui-select__menu{position:absolute;z-index:2;min-width:100%;overflow-y:auto;padding:8px 0;background-color:#FFF;font-size:16px}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-select__menu{border-left:1px solid rgba(0,0,0,.12);border-top:1px solid rgba(0,0,0,.12)}}.mui-select__menu>div{padding:0 22px;height:42px;line-height:42px;cursor:pointer;white-space:nowrap}.mui-select__menu>div:hover{background-color:#E0E0E0}.mui-select__menu>div.mui--is-selected{background-color:#EEE}th{text-align:left}.mui-table{width:100%;max-width:100%;margin-bottom:20px}.mui-table>tbody>tr>td,.mui-table>tbody>tr>th,.mui-table>tfoot>tr>td,.mui-table>tfoot>tr>th,.mui-table>thead>tr>td,.mui-table>thead>tr>th{padding:10px;line-height:1.429}.mui-table>thead>tr>th{border-bottom:2px solid rgba(0,0,0,.12);font-weight:700}.mui-table>tbody+tbody{border-top:2px solid rgba(0,0,0,.12)}.mui-table.mui-table--bordered>tbody>tr>td{border-bottom:1px solid rgba(0,0,0,.12)}.mui-tabs__bar{list-style:none;padding-left:0;margin-bottom:0;background-color:transparent;white-space:nowrap;overflow-x:auto}.mui-tabs__bar>li{display:inline-block}.mui-tabs__bar>li>a{display:block;white-space:nowrap;text-transform:uppercase;font-weight:500;font-size:14px;color:rgba(0,0,0,.87);cursor:default;height:48px;line-height:48px;padding-left:24px;padding-right:24px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-tabs__bar>li>a:hover{text-decoration:none}.mui-tabs__bar>li.mui--is-active{border-bottom:2px solid #2196F3}.mui-tabs__bar>li.mui--is-active>a{color:#2196F3}.mui-tabs__bar.mui-tabs__bar--justified{display:table;width:100%;table-layout:fixed}.mui-tabs__bar.mui-tabs__bar--justified>li{display:table-cell}.mui-tabs__bar.mui-tabs__bar--justified>li>a{text-align:center;padding-left:0;padding-right:0}.mui-tabs__pane{display:none}.mui-tabs__pane.mui--is-active{display:block}[data-mui-toggle=tab]{animation-duration:.1ms;animation-name:mui-node-inserted}.mui-textfield{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-textfield>label{position:absolute;top:0;display:block;width:100%;color:rgba(0,0,0,.54);font-size:12px;font-weight:400;line-height:15px;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.mui-textfield>textarea{padding-top:5px}.mui-textfield>input,.mui-textfield>textarea{display:block}.mui-textfield>input:focus~label,.mui-textfield>textarea:focus~label{color:#2196F3}.mui-textfield--float-label>label{position:absolute;transform:translate(0,15px);font-size:16px;line-height:32px;color:rgba(0,0,0,.26);text-overflow:clip;cursor:text;pointer-events:none}.mui-textfield--float-label>input:focus~label,.mui-textfield--float-label>textarea:focus~label{transform:translate(0,0);font-size:12px;line-height:15px;text-overflow:ellipsis}.mui-textfield--float-label>input:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>input:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>input:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>textarea:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:rgba(0,0,0,.54);font-size:12px;line-height:15px;transform:translate(0,0);text-overflow:ellipsis}.mui-textfield--wrap-label{display:table;width:100%;padding-top:0}.mui-textfield--wrap-label:not(.mui-textfield--float-label)>label{display:table-header-group;position:static;white-space:normal;overflow-x:visible}.mui-textfield>input,.mui-textfield>textarea{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;background-color:transparent;color:rgba(0,0,0,.87);border:none;border-bottom:1px solid rgba(0,0,0,.26);outline:0;width:100%;font-size:16px;padding:0;box-shadow:none;border-radius:0;background-image:none}.mui-textfield>input:focus,.mui-textfield>textarea:focus{border-color:#2196F3;border-width:2px}.mui-textfield>input:-moz-read-only,.mui-textfield>input:disabled,.mui-textfield>textarea:-moz-read-only,.mui-textfield>textarea:disabled{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input:disabled,.mui-textfield>input:read-only,.mui-textfield>textarea:disabled,.mui-textfield>textarea:read-only{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input::-webkit-input-placeholder,.mui-textfield>textarea::-webkit-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::-moz-placeholder,.mui-textfield>textarea::-moz-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input:-ms-input-placeholder,.mui-textfield>textarea:-ms-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::placeholder,.mui-textfield>textarea::placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input{height:32px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>textarea{min-height:64px}.mui-textfield>textarea[rows]:not([rows="2"]):focus{margin-bottom:-1px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):not(:required),.mui-textfield>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required),.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty){border-color:#F44336;border-width:2px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty){height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required)~label,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):not(:required)~label,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:#F44336}.mui-textfield:not(.mui-textfield--float-label)>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label{color:#F44336}@keyframes mui-node-inserted{from{opacity:.99}to{opacity:1}}.mui--no-transition{transition:none!important}.mui--no-user-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.mui--text-left{text-align:left!important}.mui--text-right{text-align:right!important}.mui--text-center{text-align:center!important}.mui--text-justify{text-align:justify!important}.mui--text-nowrap{white-space:nowrap!important}.mui--align-baseline{vertical-align:baseline!important}.mui--align-top{vertical-align:top!important}.mui--align-middle{vertical-align:middle!important}.mui--align-bottom{vertical-align:bottom!important}.mui--text-dark{color:rgba(0,0,0,.87)}.mui--text-dark-secondary{color:rgba(0,0,0,.54)}.mui--text-dark-hint{color:rgba(0,0,0,.38)}.mui--text-light{color:#FFF}.mui--text-light-secondary{color:rgba(255,255,255,.7)}.mui--text-light-hint{color:rgba(255,255,255,.3)}.mui--text-accent{color:rgba(255,64,129,.87)}.mui--text-accent-secondary{color:rgba(255,64,129,.54)}.mui--text-accent-hint{color:rgba(255,64,129,.38)}.mui--text-black{color:#000}.mui--text-white{color:#FFF}.mui--text-danger{color:#F44336}.mui-list--unstyled{padding-left:0;list-style:none}.mui-list--inline{padding-left:0;list-style:none;margin-left:-5px}.mui-list--inline>li{display:inline-block;padding-left:5px;padding-right:5px}.mui--z1,.mui-dropdown__menu,.mui-select__menu{box-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24)}.mui--z2{box-shadow:0 3px 6px rgba(0,0,0,.16),0 3px 6px rgba(0,0,0,.23)}.mui--z3{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}.mui--z4{box-shadow:0 14px 28px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.22)}.mui--z5{box-shadow:0 19px 38px rgba(0,0,0,.3),0 15px 12px rgba(0,0,0,.22)}.mui--clearfix:after,.mui--clearfix:before{content:" ";display:table}.mui--clearfix:after{clear:both}.mui--pull-right{float:right!important}.mui--pull-left{float:left!important}.mui--hide{display:none!important}.mui--show{display:block!important}.mui--invisible{visibility:hidden}.mui--overflow-hidden{overflow:hidden!important}.mui--overflow-hidden-x{overflow-x:hidden!important}.mui--overflow-hidden-y{overflow-y:hidden!important}.mui--visible-lg-block,.mui--visible-lg-inline,.mui--visible-lg-inline-block,.mui--visible-md-block,.mui--visible-md-inline,.mui--visible-md-inline-block,.mui--visible-sm-block,.mui--visible-sm-inline,.mui--visible-sm-inline-block,.mui--visible-xl-block,.mui--visible-xl-inline,.mui--visible-xl-inline-block,.mui--visible-xs-block,.mui--visible-xs-inline,.mui--visible-xs-inline-block{display:none!important}@media (max-width:543px){.mui-visible-xs{display:block!important}table.mui-visible-xs{display:table}tr.mui-visible-xs{display:table-row!important}td.mui-visible-xs,th.mui-visible-xs{display:table-cell!important}.mui--visible-xs-block{display:block!important}.mui--visible-xs-inline{display:inline!important}.mui--visible-xs-inline-block{display:inline-block!important}}@media (min-width:544px) and (max-width:767px){.mui-visible-sm{display:block!important}table.mui-visible-sm{display:table}tr.mui-visible-sm{display:table-row!important}td.mui-visible-sm,th.mui-visible-sm{display:table-cell!important}.mui--visible-sm-block{display:block!important}.mui--visible-sm-inline{display:inline!important}.mui--visible-sm-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.mui-visible-md{display:block!important}table.mui-visible-md{display:table}tr.mui-visible-md{display:table-row!important}td.mui-visible-md,th.mui-visible-md{display:table-cell!important}.mui--visible-md-block{display:block!important}.mui--visible-md-inline{display:inline!important}.mui--visible-md-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.mui-visible-lg{display:block!important}table.mui-visible-lg{display:table}tr.mui-visible-lg{display:table-row!important}td.mui-visible-lg,th.mui-visible-lg{display:table-cell!important}.mui--visible-lg-block{display:block!important}.mui--visible-lg-inline{display:inline!important}.mui--visible-lg-inline-block{display:inline-block!important}}@media (min-width:1200px){.mui-visible-xl{display:block!important}table.mui-visible-xl{display:table}tr.mui-visible-xl{display:table-row!important}td.mui-visible-xl,th.mui-visible-xl{display:table-cell!important}.mui--visible-xl-block{display:block!important}.mui--visible-xl-inline{display:inline!important}.mui--visible-xl-inline-block{display:inline-block!important}}@media (max-width:543px){.mui--hidden-xs{display:none!important}}@media (min-width:544px) and (max-width:767px){.mui--hidden-sm{display:none!important}}@media (min-width:768px) and (max-width:991px){.mui--hidden-md{display:none!important}}@media (min-width:992px) and (max-width:1199px){.mui--hidden-lg{display:none!important}}@media (min-width:1200px){.mui--hidden-xl{display:none!important}}body.mui-body--scroll-lock{overflow:hidden!important}#mui-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:99999999;background-color:rgba(0,0,0,.2);overflow:auto}.mui-ripple-effect{position:absolute;border-radius:50%;pointer-events:none;opacity:0;animation:mui-ripple-animation 2s}@keyframes mui-ripple-animation{from{transform:scale(1);opacity:.4}to{transform:scale(100);opacity:0}}.mui-btn>.mui-ripple-effect{background-color:#a6a6a6}.mui-btn--primary>.mui-ripple-effect{background-color:#FFF}.mui-btn--dark>.mui-ripple-effect{background-color:#FFF}.mui-btn--danger>.mui-ripple-effect{background-color:#FFF}.mui-btn--accent>.mui-ripple-effect{background-color:#FFF}.mui-btn--flat>.mui-ripple-effect{background-color:#a6a6a6}.mui--text-display4{font-weight:300;font-size:112px;line-height:112px}.mui--text-display3{font-weight:400;font-size:56px;line-height:56px}.mui--text-display2{font-weight:400;font-size:45px;line-height:48px}.mui--text-display1,h1{font-weight:400;font-size:34px;line-height:40px}.mui--text-headline,h2{font-weight:400;font-size:24px;line-height:32px}.mui--text-title,h3{font-weight:400;font-size:20px;line-height:28px}.mui--text-subhead,h4{font-weight:400;font-size:16px;line-height:24px}.mui--text-body2,h5{font-weight:500;font-size:14px;line-height:24px}.mui--text-body1{font-weight:400;font-size:14px;line-height:20px}.mui--text-caption{font-weight:400;font-size:12px;line-height:16px}.mui--text-menu{font-weight:500;font-size:13px;line-height:17px}.mui--text-button{font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase}'; +},{}],8:[function(i,t,e){"use strict";function o(i){i._muiDropdown!==!0&&(i._muiDropdown=!0,i.hasAttribute("type")||(i.type="button"),a.on(i,"click",n))}function n(i){if(0===i.button){var t=this;null===t.getAttribute("disabled")&&l(t)}}function l(i){function t(){a.removeClass(n,d),a.off(l,"click",t)}function e(){var e=o.getBoundingClientRect(),r=i.getBoundingClientRect(),u=r.top-e.top+r.height;a.css(n,"top",u+"px"),a.addClass(n,d),setTimeout(function(){a.on(l,"click",t)},0)}var o=i.parentNode,n=i.nextElementSibling,l=o.ownerDocument;return n&&a.hasClass(n,s)?void(a.hasClass(n,d)?t():e()):r.raiseError("Dropdown menu element not found")}var a=i("./lib/jqLite"),r=i("./lib/util"),u="data-mui-toggle",m='[data-mui-toggle="dropdown"]',d="mui--is-open",s="mui-dropdown__menu";t.exports={initListeners:function(){for(var i=document,t=i.querySelectorAll(m),e=t.length-1;e>=0;e--)o(t[e]);r.onNodeInserted(function(i){"dropdown"===i.getAttribute(u)&&o(i)})}}},{"./lib/jqLite":5,"./lib/util":6}],9:[function(i,t,e){t.exports=i(5)},{}],10:[function(i,t,e){t.exports=i(6)},{"../config":3,"./jqLite":5}],11:[function(i,t,e){"use strict";function o(i){var t;if("on"===i){for(var e,o,a,r=arguments.length-1;r>0;r--)e=arguments[r],"object"===p.type(e)&&(o=e),e instanceof Element&&1===e.nodeType&&(a=e);o=o||{},void 0===o.keyboard&&(o.keyboard=!0),void 0===o["static"]&&(o["static"]=!1),t=n(o,a)}else"off"===i?t=l():c.raiseError("Expecting 'on' or 'off'");return t}function n(i,t){var e=document.body,o=document.getElementById(f);if(c.enableScrollLock(),o){for(;o.firstChild;)o.removeChild(o.firstChild);t&&o.appendChild(t)}else o=document.createElement("div"),o.setAttribute("id",f),t&&o.appendChild(t),e.appendChild(o);return b.test(navigator.userAgent)&&p.css(o,"cursor","pointer"),i.keyboard?a():r(),i["static"]?d(o):m(o),o.muiOptions=i,o}function l(){var i,t=document.getElementById(f);if(t){for(;t.firstChild;)t.removeChild(t.firstChild);t.parentNode.removeChild(t),i=t.muiOptions.onclose,d(t)}return c.disableScrollLock(),r(),i&&i(),t}function a(){p.on(document,"keyup",u)}function r(){p.off(document,"keyup",u)}function u(i){27===i.keyCode&&l()}function m(i){p.on(i,"click",s)}function d(i){p.off(i,"click",s)}function s(i){i.target.id===f&&l()}var c=i("./lib/util"),p=i("./lib/jqLite"),f="mui-overlay",b=/(iPad|iPhone|iPod)/g;t.exports=o},{"./lib/jqLite":5,"./lib/util":6}],12:[function(i,t,e){"use strict";function o(i){i._muiRipple!==!0&&(i._muiRipple=!0,"INPUT"!==i.tagName&&(l.on(i,"touchstart",n),l.on(i,"mousedown",n)))}function n(i){if(0===i.button){var t=this;if(t.disabled!==!0&&t.touchFlag!==!0){t.touchFlag=!0,setTimeout(function(){t.touchFlag=!1},100);var e=document.createElement("div");e.className=m;var o,n,a=l.offset(t),r=i.pageX-a.left,d=i.pageY-a.top;o=l.hasClass(t,u)?a.height/2:a.height,n=o/2,l.css(e,{height:o+"px",width:o+"px",top:d-n+"px",left:r-n+"px"}),t.appendChild(e),window.setTimeout(function(){var i=e.parentNode;i&&i.removeChild(e)},2e3)}}}var l=i("./lib/jqLite"),a=i("./lib/util"),r="mui-btn",u="mui-btn--fab",m="mui-ripple-effect";t.exports={initListeners:function(){for(var i=document,t=i.getElementsByClassName(r),e=t.length-1;e>=0;e--)o(t[e]);a.onNodeInserted(function(i){l.hasClass(i,r)&&o(i)})}}},{"./lib/jqLite":5,"./lib/util":6}],13:[function(i,t,e){"use strict";function o(i){i._muiSelect!==!0&&(i._muiSelect=!0,"ontouchstart"in p.documentElement||new n(i))}function n(i){this.selectEl=i,this.wrapperEl=i.parentNode,this.useDefault=!1,a.on(i,"mousedown",r.callback(this,"mousedownHandler")),a.on(i,"focus",r.callback(this,"focusHandler")),a.on(i,"click",r.callback(this,"clickHandler")),this.wrapperEl.tabIndex=-1;var t=r.callback(this,"wrapperFocusHandler");a.on(this.wrapperEl,"focus",t)}function l(i,t){r.enableScrollLock(),this.origIndex=null,this.currentIndex=null,this.selectEl=t,this.menuEl=this._createMenuEl(i,t),this.clickCallbackFn=r.callback(this,"clickHandler"),this.keydownCallbackFn=r.callback(this,"keydownHandler"),this.destroyCallbackFn=r.callback(this,"destroy"),i.appendChild(this.menuEl),a.scrollTop(this.menuEl,this.menuEl._muiScrollTop),setTimeout(function(){"body"!==p.activeElement.nodeName.toLowerCase()&&p.activeElement.blur()},0),a.on(this.menuEl,"click",this.clickCallbackFn),a.on(p,"keydown",this.keydownCallbackFn),a.on(f,"resize",this.destroyCallbackFn);var e=this.destroyCallbackFn;setTimeout(function(){a.on(p,"click",e)},0)}var a=i("./lib/jqLite"),r=i("./lib/util"),u=i("./lib/forms"),m="mui-select",d=".mui-select > select",s="mui-select__menu",c="mui--is-selected",p=document,f=window;n.prototype.mousedownHandler=function(i){0===i.button&&this.useDefault!==!0&&i.preventDefault()},n.prototype.focusHandler=function(i){if(this.useDefault!==!0){var t=this.selectEl,e=this.wrapperEl,o=t.tabIndex,n=r.callback(this,"keydownHandler");a.on(p,"keydown",n),t.tabIndex=-1,a.one(e,"blur",function(){t.tabIndex=o,a.off(p,"keydown",n)}),e.focus()}},n.prototype.keydownHandler=function(i){var t=i.keyCode;32!==t&&38!==t&&40!==t||(i.preventDefault(),this.selectEl.disabled!==!0&&this.renderMenu())},n.prototype.wrapperFocusHandler=function(){return this.selectEl.disabled?this.wrapperEl.blur():void 0},n.prototype.clickHandler=function(i){0===i.button&&this.renderMenu()},n.prototype.renderMenu=function(){return this.useDefault===!0?this.useDefault=!1:void new l(this.wrapperEl,this.selectEl)},l.prototype._createMenuEl=function(i,t){var e,o,n,l=p.createElement("div"),r=t.children,m=r.length,d=0;for(l.className=s,n=0;m>n;n++)e=r[n],o=p.createElement("div"),o.textContent=e.textContent,o._muiPos=n,e.selected&&(o.setAttribute("class",c),d=n),l.appendChild(o);this.origIndex=d,this.currentIndex=d;var f=u.getMenuPositionalCSS(i,m,d);return a.css(l,f),l._muiScrollTop=f.scrollTop,l},l.prototype.keydownHandler=function(i){var t=i.keyCode;return 9===t?this.destroy():(27!==t&&40!==t&&38!==t&&13!==t||i.preventDefault(),void(27===t?this.destroy():40===t?this.increment():38===t?this.decrement():13===t&&(this.selectCurrent(),this.destroy())))},l.prototype.clickHandler=function(i){i.stopPropagation();var t=i.target._muiPos;void 0!==t&&(this.currentIndex=t,this.selectCurrent(),this.destroy())},l.prototype.increment=function(){if(this.currentIndex!==this.menuEl.children.length-1){var i=this.menuEl.children;a.removeClass(i[this.currentIndex],c),this.currentIndex+=1,a.addClass(i[this.currentIndex],c)}},l.prototype.decrement=function(){if(0!==this.currentIndex){var i=this.menuEl.children;a.removeClass(i[this.currentIndex],c),this.currentIndex-=1,a.addClass(i[this.currentIndex],c)}},l.prototype.selectCurrent=function(){if(this.currentIndex!==this.origIndex){var i=this.selectEl.children;i[this.origIndex].selected=!1,i[this.currentIndex].selected=!0,r.dispatchEvent(this.selectEl,"change")}},l.prototype.destroy=function(){var i=this.menuEl.parentNode;i&&i.removeChild(this.menuEl),this.selectEl.focus(),r.disableScrollLock(),a.off(this.menuEl,"click",this.clickCallbackFn),a.off(p,"keydown",this.keydownCallbackFn),a.off(p,"click",this.destroyCallbackFn),a.off(f,"resize",this.destroyCallbackFn)},t.exports={initListeners:function(){for(var i=p.querySelectorAll(d),t=i.length-1;t>=0;t--)o(i[t]);r.onNodeInserted(function(i){"SELECT"===i.tagName&&a.hasClass(i.parentNode,m)&&o(i)})}}},{"./lib/forms":4,"./lib/jqLite":5,"./lib/util":6}],14:[function(i,t,e){"use strict";function o(i){i._muiTabs!==!0&&(i._muiTabs=!0,r.on(i,"click",n))}function n(i){if(0===i.button){var t=this;null===t.getAttribute("disabled")&&l(t)}}function l(i){var t,e,o,n,l,m,d,h,g,v=i.parentNode,y=i.getAttribute(s),w=document.getElementById(y);r.hasClass(v,c)||(w||u.raiseError('Tab pane "'+y+'" not found'),e=a(w),o=e.id,g="["+s+'="'+o+'"]',n=document.querySelectorAll(g)[0],t=n.parentNode,l={paneId:y,relatedPaneId:o},m={paneId:o,relatedPaneId:y},d=u.dispatchEvent(n,b,!0,!0,m),h=u.dispatchEvent(i,p,!0,!0,l),setTimeout(function(){d.defaultPrevented||h.defaultPrevented||(t&&r.removeClass(t,c),e&&r.removeClass(e,c),r.addClass(v,c),r.addClass(w,c),u.dispatchEvent(n,x,!0,!1,m),u.dispatchEvent(i,f,!0,!1,l))},0))}function a(i){for(var t,e=i.parentNode.children,o=e.length,n=null;o--&&!n;)t=e[o],t!==i&&r.hasClass(t,c)&&(n=t);return n}var r=i("./lib/jqLite"),u=i("./lib/util"),m="data-mui-toggle",d="["+m+'="tab"]',s="data-mui-controls",c="mui--is-active",p="mui.tabs.showstart",f="mui.tabs.showend",b="mui.tabs.hidestart",x="mui.tabs.hideend";t.exports={initListeners:function(){for(var i=document.querySelectorAll(d),t=i.length-1;t>=0;t--)o(i[t]);u.onNodeInserted(function(i){"tab"===i.getAttribute(m)&&o(i)})},api:{activate:function(i){var t="["+s+"="+i+"]",e=document.querySelectorAll(t);e.length||u.raiseError('Tab control for pane "'+i+'" not found'),l(e[0])}}}},{"./lib/jqLite":5,"./lib/util":6}],15:[function(i,t,e){"use strict";function o(i){i._muiTextfield!==!0&&(i._muiTextfield=!0,i.value.length?l.addClass(i,m):l.addClass(i,u),l.on(i,"input",n),l.on(i,"change",n),l.on(i,"focus",function(){l.addClass(this,d)}))}function n(){var i=this;i.value.length?(l.removeClass(i,u),l.addClass(i,m)):(l.removeClass(i,m),l.addClass(i,u)),l.addClass(i,d)}var l=i("./lib/jqLite"),a=i("./lib/util"),r=".mui-textfield > input, .mui-textfield > textarea",u="mui--is-empty",m="mui--is-not-empty",d="mui--is-dirty",s="mui-textfield--float-label";t.exports={initialize:o,initListeners:function(){for(var i=document,t=i.querySelectorAll(r),e=t.length-1;e>=0;e--)o(t[e]);a.onNodeInserted(function(i){"INPUT"!==i.tagName&&"TEXTAREA"!==i.tagName||o(i)}),setTimeout(function(){var i=".mui-textfield.mui-textfield--float-label > label {"+["-webkit-transition","-moz-transition","-o-transition","transition",""].join(":all .15s ease-out;")+"}";a.loadStyle(i)},150),a.supportsPointerEvents()===!1&&l.on(document,"click",function(i){var t=i.target;if("LABEL"===t.tagName&&l.hasClass(t.parentNode,s)){var e=t.previousElementSibling;e&&e.focus()}})}}},{"./lib/jqLite":5,"./lib/util":6}]},{},[2]); \ No newline at end of file diff --git a/platforms/android/assets/www/libs/mui/packages/cdn/extra/mui-react-combined.js b/platforms/android/assets/www/libs/mui/packages/cdn/extra/mui-react-combined.js new file mode 100644 index 0000000..ba3dbcc --- /dev/null +++ b/platforms/android/assets/www/libs/mui/packages/cdn/extra/mui-react-combined.js @@ -0,0 +1,2 @@ +!function(e){var t=e.babelHelpers={};t.classCallCheck=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},t.createClass=function(){function e(e,t){for(var i=0;i=0||Object.prototype.hasOwnProperty.call(e,o)&&(i[o]=e[o]);return i},t.possibleConstructorReturn=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}}("undefined"==typeof global?self:global),function e(t,i,o){function l(r,a){if(!i[r]){if(!t[r]){var s="function"==typeof require&&require;if(!a&&s)return s(r,!0);if(n)return n(r,!0);throw new Error("Cannot find module '"+r+"'")}var u=i[r]={exports:{}};t[r][0].call(u.exports,function(e){var i=t[r][1][e];return l(i?i:e)},u,u.exports,e,t,i,o)}return i[r].exports}for(var n="function"==typeof require&&require,r=0;rp&&(b=a+(i+1)*r-(-1*o+l+n),f=t*r+2*a-m,h=Math.min(b,f)),{height:m+"px",top:o+"px",scrollTop:h}}var l=15,n=32,r=42,a=8;t.exports={getMenuPositionalCSS:o}},{}],5:[function(e,t,i){"use strict";function o(e,t){if(t&&e.setAttribute){for(var i,o=f(e),l=t.split(" "),n=0;n-1:!1}function r(e){if(void 0===e)return"undefined";var t=Object.prototype.toString.call(e);if(0===t.indexOf("[object "))return t.slice(8,-1).toLowerCase();throw new Error("MUI: Could not understand type: "+t)}function a(e,t,i,o){o=void 0===o?!1:o,e.addEventListener(t,i,o);var l=e._muiEventCache=e._muiEventCache||{};l[t]=l[t]||[],l[t].push([i,o])}function s(e,t,i,o){o=void 0===o?!1:o;var l,n,r=e._muiEventCache=e._muiEventCache||{},a=r[t]||[];for(n=a.length;n--;)l=a[n],(void 0===i||l[0]===i&&l[1]===o)&&(a.splice(n,1),e.removeEventListener(t,l[0],l[1]))}function u(e,t,i,o){a(e,t,function l(o){i&&i.apply(this,arguments),s(e,t,l)},o)}function c(e,t){var i=window;if(void 0===t){if(e===i){var o=document.documentElement;return(i.pageXOffset||o.scrollLeft)-(o.clientLeft||0)}return e.scrollLeft}e===i?i.scrollTo(t,p(i)):e.scrollLeft=t}function p(e,t){var i=window;if(void 0===t){if(e===i){var o=document.documentElement;return(i.pageYOffset||o.scrollTop)-(o.clientTop||0)}return e.scrollTop}e===i?i.scrollTo(c(i),t):e.scrollTop=t}function d(e){var t=window,i=e.getBoundingClientRect(),o=p(t),l=c(t);return{top:i.top+o,left:i.left+l,height:i.height,width:i.width}}function m(e){var t=!1,i=!0,o=document,l=o.defaultView,n=o.documentElement,r=o.addEventListener?"addEventListener":"attachEvent",a=o.addEventListener?"removeEventListener":"detachEvent",s=o.addEventListener?"":"on",u=function d(i){"readystatechange"==i.type&&"complete"!=o.readyState||(("load"==i.type?l:o)[a](s+i.type,d,!1),!t&&(t=!0)&&e.call(l,i.type||i))},c=function m(){try{n.doScroll("left")}catch(e){return void setTimeout(m,50)}u("poll")};if("complete"==o.readyState)e.call(l,"lazy");else{if(o.createEventObject&&n.doScroll){try{i=!l.frameElement}catch(p){}i&&c()}o[r](s+"DOMContentLoaded",u,!1),o[r](s+"readystatechange",u,!1),l[r](s+"load",u,!1)}}function b(e,t){if(t&&e.setAttribute){for(var i,o=f(e),l=t.split(" "),n=0;n=0;)o=o.replace(" "+i+" "," ");e.setAttribute("class",o.trim())}}function f(e){var t=(e.getAttribute("class")||"").replace(/[\n\t]/g,"");return" "+t+" "}function h(e){return e.replace(v,function(e,t,i,o){return o?i.toUpperCase():i}).replace(y,"Moz$1")}function g(e,t,i){var o;return o=i.getPropertyValue(t),""!==o||e.ownerDocument||(o=e.style[h(t)]),o}var x,v=/([\:\-\_]+(.))/g,y=/^moz([A-Z])/;x={multiple:!0,selected:!0,checked:!0,disabled:!0,readonly:!0,required:!0,open:!0},t.exports={addClass:o,css:l,hasClass:n,off:s,offset:d,on:a,one:u,ready:m,removeClass:b,type:r,scrollLeft:c,scrollTop:p}},{}],6:[function(e,t,i){"use strict";function o(){var e=window;if(h.debug&&"undefined"!=typeof e.console)try{e.console.log.apply(e.console,arguments)}catch(t){var i=Array.prototype.slice.call(arguments);e.console.log(i.join("\n"))}}function l(e){var t,i=document;t=i.head||i.getElementsByTagName("head")[0]||i.documentElement;var o=i.createElement("style");return o.type="text/css",o.styleSheet?o.styleSheet.cssText=e:o.appendChild(i.createTextNode(e)),t.insertBefore(o,t.firstChild),o}function n(e,t){if(!t)throw new Error("MUI: "+e);"undefined"!=typeof console&&console.error("MUI Warning: "+e)}function r(e){if(x.push(e),void 0===x._initialized){var t=document;g.on(t,"animationstart",a),g.on(t,"mozAnimationStart",a),g.on(t,"webkitAnimationStart",a),x._initialized=!0}}function a(e){if("mui-node-inserted"===e.animationName)for(var t=e.target,i=x.length-1;i>=0;i--)x[i](t)}function s(e){var t="";for(var i in e)t+=e[i]?i+" ":"";return t.trim()}function u(){if(void 0!==f)return f;var e=document.createElement("x");return e.style.cssText="pointer-events:auto",f="auto"===e.style.pointerEvents}function c(e,t){return function(){e[t].apply(e,arguments)}}function p(e,t,i,o,l){var n,r=document.createEvent("HTMLEvents"),i=void 0!==i?i:!0,o=void 0!==o?o:!0;if(r.initEvent(t,i,o),l)for(n in l)r[n]=l[n];return e&&e.dispatchEvent(r),r}function d(){if(v+=1,1===v){var e=window,t=document;b={left:g.scrollLeft(e),top:g.scrollTop(e)},g.addClass(t.body,y),e.scrollTo(b.left,b.top)}}function m(){if(0!==v&&(v-=1,0===v)){var e=window,t=document;g.removeClass(t.body,y),e.scrollTo(b.left,b.top)}}var b,f,h=e("../config"),g=e("./jqLite"),x=[],v=0,y="mui-body--scroll-lock";t.exports={callback:c,classNames:s,disableScrollLock:m,dispatchEvent:p,enableScrollLock:d,log:o,loadStyle:l,onNodeInserted:r,raiseError:n,supportsPointerEvents:u}},{"../config":3,"./jqLite":5}],7:[function(e,t,i){"use strict";var o="You provided a `value` prop to a form field without an `OnChange` handler. Please see React documentation on controlled components";t.exports={controlledMessage:o}},{}],8:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=e("../js/lib/jqLite"),r=babelHelpers.interopRequireWildcard(n),a=e("../js/lib/util"),s=(babelHelpers.interopRequireWildcard(a),l["default"].PropTypes),u="mui-btn",c="mui-ripple-effect",p={color:1,variant:1,size:1},d=function(e){function t(){var e,i,o,l;babelHelpers.classCallCheck(this,t);for(var n=arguments.length,r=Array(n),a=0;n>a;a++)r[a]=arguments[a];return i=o=babelHelpers.possibleConstructorReturn(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(r))),o.state={ripples:{}},l=i,babelHelpers.possibleConstructorReturn(o,l)}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentDidMount",value:function(){var e=this.refs.buttonEl;e._muiDropdown=!0,e._muiRipple=!0}},{key:"onClick",value:function(e){var t=this.props.onClick;t&&t(e)}},{key:"onMouseDown",value:function(e){var t=r.offset(this.refs.buttonEl),i=t.height;"fab"===this.props.variant&&(i/=2);var o=this.state.ripples,l=Date.now();o[l]={xPos:e.pageX-t.left,yPos:e.pageY-t.top,diameter:i,teardownFn:this.teardownRipple.bind(this,l)},this.setState({ripples:o})}},{key:"onTouchStart",value:function(e){}},{key:"teardownRipple",value:function(e){var t=this.state.ripples;delete t[e],this.setState({ripples:t})}},{key:"render",value:function(){var e=u,t=void 0,i=void 0,o=this.state.ripples;for(t in p)i=this.props[t],"default"!==i&&(e+=" "+u+"--"+i);return l["default"].createElement("button",babelHelpers["extends"]({},this.props,{ref:"buttonEl",className:e+" "+this.props.className,onClick:this.onClick.bind(this),onMouseDown:this.onMouseDown.bind(this)}),this.props.children,Object.keys(o).map(function(e,t){var i=o[e];return l["default"].createElement(m,{key:e,xPos:i.xPos,yPos:i.yPos,diameter:i.diameter,onTeardown:i.teardownFn})}))}}]),t}(l["default"].Component);d.propTypes={color:s.oneOf(["default","primary","danger","dark","accent"]),disabled:s.bool,size:s.oneOf(["default","small","large"]),type:s.oneOf(["submit","button"]),variant:s.oneOf(["default","flat","raised","fab"]),onClick:s.func},d.defaultProps={className:"",color:"default",disabled:!1,size:"default",type:null,variant:"default",onClick:null};var m=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentDidMount",value:function(){var e=this;this.teardownTimer=setTimeout(function(){var t=e.props.onTeardown;t&&t()},2e3)}},{key:"componentWillUnmount",value:function(){clearTimeout(this.teardownTimer)}},{key:"render",value:function(){var e=this.props.diameter,t=e/2,i={height:e,width:e,top:this.props.yPos-t||0,left:this.props.xPos-t||0};return l["default"].createElement("div",{className:c,style:i})}}]),t}(l["default"].Component);m.propTypes={xPos:s.number,yPos:s.number,diameter:s.number,onTeardown:s.func},m.defaultProps={xPos:0,yPos:0,diameter:0,onTeardown:null},i["default"]=d,t.exports=i["default"]},{"../js/lib/jqLite":5,"../js/lib/util":6,react:"CwoHg3"}],9:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e=this.props,t=(e.children,babelHelpers.objectWithoutProperties(e,["children"]));return l["default"].createElement("span",babelHelpers["extends"]({},t,{className:"mui-caret "+this.props.className}))}}]),t}(l["default"].Component);n.defaultProps={className:""},i["default"]=n,t.exports=i["default"]},{react:"CwoHg3"}],10:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=l["default"].PropTypes,r=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){return null}}]),t}(l["default"].Component);r.propTypes={value:n.any,label:n.string,onActive:n.func},r.defaultProps={value:null,label:"",onActive:null},i["default"]=r,t.exports=i["default"]},{react:"CwoHg3"}],11:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.TextField=void 0;var o=window.React,l=babelHelpers.interopRequireDefault(o),n=e("../js/lib/util"),r=babelHelpers.interopRequireWildcard(n),a=e("./_helpers"),s=l["default"].PropTypes,u=function(e){function t(e){babelHelpers.classCallCheck(this,t);var i=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e)),o=e.value,l=o||e.defaultValue;i.state={innerValue:l,isDirty:Boolean(l)},void 0!==o&&null===e.onChange&&r.raiseError(a.controlledMessage,!0);var n=r.callback;return i.onChangeCB=n(i,"onChange"),i.onFocusCB=n(i,"onFocus"),i}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentDidMount",value:function(){this.refs.inputEl._muiTextfield=!0}},{key:"onChange",value:function(e){this.setState({innerValue:e.target.value});var t=this.props.onChange;t&&t(e)}},{key:"onFocus",value:function(e){this.setState({isDirty:!0})}},{key:"triggerFocus",value:function(){this.refs.inputEl.focus()}},{key:"render",value:function(){var e={},t=Boolean(this.state.innerValue),i=void 0;e["mui--is-empty"]=!t,e["mui--is-not-empty"]=t,e["mui--is-dirty"]=this.state.isDirty,e["mui--is-invalid"]=this.props.invalid,e=r.classNames(e);var o=this.props,n=(o.children,babelHelpers.objectWithoutProperties(o,["children"]));return i="textarea"===this.props.type?l["default"].createElement("textarea",babelHelpers["extends"]({},n,{ref:"inputEl",className:e,rows:this.props.rows,placeholder:this.props.hint,value:this.props.value,defaultValue:this.props.defaultValue,autoFocus:this.props.autoFocus,onChange:this.onChangeCB,onFocus:this.onFocusCB,required:this.props.required})):l["default"].createElement("input",babelHelpers["extends"]({},n,{ref:"inputEl",className:e,type:this.props.type,value:this.props.value,defaultValue:this.props.defaultValue,placeholder:this.props.hint,autoFocus:this.props.autofocus,onChange:this.onChangeCB,onFocus:this.onFocusCB,required:this.props.required}))}}]),t}(l["default"].Component);u.propTypes={hint:s.string,value:s.string,type:s.string,autoFocus:s.bool,onChange:s.func},u.defaultProps={hint:null,type:null,autoFocus:!1,onChange:null};var c=function(e){function t(){var e,i,o,l;babelHelpers.classCallCheck(this,t);for(var n=arguments.length,r=Array(n),a=0;n>a;a++)r[a]=arguments[a];return i=o=babelHelpers.possibleConstructorReturn(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(r))),o.state={style:{}},l=i,babelHelpers.possibleConstructorReturn(o,l)}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentDidMount",value:function(){var e=this;this.styleTimer=setTimeout(function(){var t=".15s ease-out",i=void 0;i={transition:t,WebkitTransition:t,MozTransition:t,OTransition:t,msTransform:t},e.setState({style:i})},150)}},{key:"componentWillUnmount",value:function(){clearTimeout(this.styleTimer)}},{key:"render",value:function(){return l["default"].createElement("label",{style:this.state.style,onClick:this.props.onClick},this.props.text)}}]),t}(l["default"].Component);c.defaultProps={text:"",onClick:null};var p=function(e){function t(e){babelHelpers.classCallCheck(this,t);var i=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e));return i.onClickCB=r.callback(i,"onClick"),i}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"onClick",value:function(e){r.supportsPointerEvents()===!1&&(e.target.style.cursor="text",this.refs.inputEl.triggerFocus())}},{key:"render",value:function(){var e={},t=void 0;return this.props.label.length&&(t=l["default"].createElement(c,{text:this.props.label,onClick:this.onClickCB})),e["mui-textfield"]=!0,e["mui-textfield--float-label"]=this.props.floatingLabel,e=r.classNames(e),l["default"].createElement("div",{className:e},l["default"].createElement(u,babelHelpers["extends"]({ref:"inputEl"},this.props)),t)}}]),t}(l["default"].Component);p.propTypes={label:s.string,floatingLabel:s.bool},p.defaultProps={label:"",floatingLabel:!1},i.TextField=p},{"../js/lib/util":6,"./_helpers":7,react:"CwoHg3"}],12:[function(e,t,i){t.exports='/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-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{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}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{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{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-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:border-box}:after,:before{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:Arial,Verdana,Tahoma;font-size:14px;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);background-color:#FFF}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#2196F3;text-decoration:none}a:focus,a:hover{color:#1976D2;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}p{margin:0 0 10px}ol,ul{margin-top:0;margin-bottom:10px}figure{margin:0}img{vertical-align:middle}hr{margin-top:20px;margin-bottom:20px;border:0;height:1px;background-color:rgba(0,0,0,.12)}legend{display:block;width:100%;padding:0;margin-bottom:10px;font-size:21px;color:rgba(0,0,0,.87);line-height:inherit;border:0}input[type=search]{box-sizing:border-box;-webkit-appearance:none}input[type=checkbox]:focus,input[type=radio]:focus,input[type=file]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type=checkbox]:disabled,input[type=radio]:disabled{cursor:not-allowed}strong{font-weight:700}abbr[title]{cursor:help;border-bottom:1px dotted #2196F3}h1,h2,h3{margin-top:20px;margin-bottom:10px}h4,h5,h6{margin-top:10px;margin-bottom:10px}.mui--appbar-height{height:56px}.mui--appbar-min-height,.mui-appbar{min-height:56px}.mui--appbar-line-height{line-height:56px}.mui--appbar-top{top:56px}@media (orientation:landscape) and (max-height:480px){.mui--appbar-height{height:48px}.mui--appbar-min-height,.mui-appbar{min-height:48px}.mui--appbar-line-height{line-height:48px}.mui--appbar-top{top:48px}}@media (min-width:480px){.mui--appbar-height{height:64px}.mui--appbar-min-height,.mui-appbar{min-height:64px}.mui--appbar-line-height{line-height:64px}.mui--appbar-top{top:64px}}.mui-appbar{background-color:#2196F3;color:#FFF}.mui-btn{animation-duration:.1ms;animation-name:mui-node-inserted;font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase;color:rgba(0,0,0,.87);background-color:#FFF;transition:all .2s ease-in-out;display:inline-block;height:36px;padding:0 26px;margin-top:6px;margin-bottom:6px;border:none;border-radius:2px;cursor:pointer;-ms-touch-action:manipulation;touch-action:manipulation;background-image:none;text-align:center;line-height:36px;vertical-align:middle;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:14px;letter-spacing:.03em;position:relative;overflow:hidden}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{color:rgba(0,0,0,.87);background-color:#fff}.mui-btn[disabled]:active,.mui-btn[disabled]:focus,.mui-btn[disabled]:hover{color:rgba(0,0,0,.87);background-color:#FFF}.mui-btn.mui-btn--flat{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn.mui-btn--flat:active,.mui-btn.mui-btn--flat:focus,.mui-btn.mui-btn--flat:hover{color:rgba(0,0,0,.87);background-color:#f2f2f2}.mui-btn.mui-btn--flat[disabled]:active,.mui-btn.mui-btn--flat[disabled]:focus,.mui-btn.mui-btn--flat[disabled]:hover{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{outline:0;text-decoration:none;color:rgba(0,0,0,.87)}.mui-btn:focus,.mui-btn:hover{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:focus,.mui-btn:hover{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn.mui--is-disabled,.mui-btn:disabled{cursor:not-allowed;pointer-events:none;opacity:.6;box-shadow:none}.mui-btn+.mui-btn{margin-left:8px}.mui-btn--flat{background-color:transparent}.mui-btn--flat:active,.mui-btn--flat:focus,.mui-btn--flat:hover{box-shadow:none;background-color:#f2f2f2}.mui-btn--fab,.mui-btn--raised{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab,.mui-btn--raised{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn--fab{position:relative;padding:0;width:55px;height:55px;line-height:55px;border-radius:50%;z-index:1}.mui-btn--primary{color:#FFF;background-color:#2196F3}.mui-btn--primary:active,.mui-btn--primary:focus,.mui-btn--primary:hover{color:#FFF;background-color:#39a1f4}.mui-btn--primary[disabled]:active,.mui-btn--primary[disabled]:focus,.mui-btn--primary[disabled]:hover{color:#FFF;background-color:#2196F3}.mui-btn--primary.mui-btn--flat{color:#2196F3;background-color:transparent}.mui-btn--primary.mui-btn--flat:active,.mui-btn--primary.mui-btn--flat:focus,.mui-btn--primary.mui-btn--flat:hover{color:#2196F3;background-color:#f2f2f2}.mui-btn--primary.mui-btn--flat[disabled]:active,.mui-btn--primary.mui-btn--flat[disabled]:focus,.mui-btn--primary.mui-btn--flat[disabled]:hover{color:#2196F3;background-color:transparent}.mui-btn--dark{color:#FFF;background-color:#424242}.mui-btn--dark:active,.mui-btn--dark:focus,.mui-btn--dark:hover{color:#FFF;background-color:#4f4f4f}.mui-btn--dark[disabled]:active,.mui-btn--dark[disabled]:focus,.mui-btn--dark[disabled]:hover{color:#FFF;background-color:#424242}.mui-btn--dark.mui-btn--flat{color:#424242;background-color:transparent}.mui-btn--dark.mui-btn--flat:active,.mui-btn--dark.mui-btn--flat:focus,.mui-btn--dark.mui-btn--flat:hover{color:#424242;background-color:#f2f2f2}.mui-btn--dark.mui-btn--flat[disabled]:active,.mui-btn--dark.mui-btn--flat[disabled]:focus,.mui-btn--dark.mui-btn--flat[disabled]:hover{color:#424242;background-color:transparent}.mui-btn--danger{color:#FFF;background-color:#F44336}.mui-btn--danger:active,.mui-btn--danger:focus,.mui-btn--danger:hover{color:#FFF;background-color:#f55a4e}.mui-btn--danger[disabled]:active,.mui-btn--danger[disabled]:focus,.mui-btn--danger[disabled]:hover{color:#FFF;background-color:#F44336}.mui-btn--danger.mui-btn--flat{color:#F44336;background-color:transparent}.mui-btn--danger.mui-btn--flat:active,.mui-btn--danger.mui-btn--flat:focus,.mui-btn--danger.mui-btn--flat:hover{color:#F44336;background-color:#f2f2f2}.mui-btn--danger.mui-btn--flat[disabled]:active,.mui-btn--danger.mui-btn--flat[disabled]:focus,.mui-btn--danger.mui-btn--flat[disabled]:hover{color:#F44336;background-color:transparent}.mui-btn--accent{color:#FFF;background-color:#FF4081}.mui-btn--accent:active,.mui-btn--accent:focus,.mui-btn--accent:hover{color:#FFF;background-color:#ff5a92}.mui-btn--accent[disabled]:active,.mui-btn--accent[disabled]:focus,.mui-btn--accent[disabled]:hover{color:#FFF;background-color:#FF4081}.mui-btn--accent.mui-btn--flat{color:#FF4081;background-color:transparent}.mui-btn--accent.mui-btn--flat:active,.mui-btn--accent.mui-btn--flat:focus,.mui-btn--accent.mui-btn--flat:hover{color:#FF4081;background-color:#f2f2f2}.mui-btn--accent.mui-btn--flat[disabled]:active,.mui-btn--accent.mui-btn--flat[disabled]:focus,.mui-btn--accent.mui-btn--flat[disabled]:hover{color:#FF4081;background-color:transparent}.mui-btn--small{height:30.6px;line-height:30.6px;padding:0 16px;font-size:13px}.mui-btn--large{height:54px;line-height:54px;padding:0 26px;font-size:14px}.mui-btn--fab.mui-btn--small{width:44px;height:44px;line-height:44px}.mui-btn--fab.mui-btn--large{width:75px;height:75px;line-height:75px}.mui-checkbox,.mui-radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.mui-checkbox>label,.mui-radio>label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio],.mui-radio>label>input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px}.mui-checkbox+.mui-checkbox,.mui-radio+.mui-radio{margin-top:-5px}.mui-checkbox--inline,.mui-radio--inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.mui-checkbox--inline>input[type=checkbox],.mui-checkbox--inline>input[type=radio],.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox--inline>label>input[type=radio],.mui-radio--inline>input[type=checkbox],.mui-radio--inline>input[type=radio],.mui-radio--inline>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio]{margin:4px 0 0;line-height:normal}.mui-checkbox--inline+.mui-checkbox--inline,.mui-radio--inline+.mui-radio--inline{margin-top:0;margin-left:10px}.mui-container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container:after,.mui-container:before{content:" ";display:table}.mui-container:after{clear:both}@media (min-width:544px){.mui-container{max-width:570px}}@media (min-width:768px){.mui-container{max-width:740px}}@media (min-width:992px){.mui-container{max-width:960px}}@media (min-width:1200px){.mui-container{max-width:1170px}}.mui-container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container-fluid:after,.mui-container-fluid:before{content:" ";display:table}.mui-container-fluid:after{clear:both}.mui-divider{display:block;height:1px;background-color:rgba(0,0,0,.12)}.mui--divider-top{border-top:1px solid rgba(0,0,0,.12)}.mui--divider-bottom{border-bottom:1px solid rgba(0,0,0,.12)}.mui--divider-left{border-left:1px solid rgba(0,0,0,.12)}.mui--divider-right{border-right:1px solid rgba(0,0,0,.12)}.mui-dropdown{display:inline-block;position:relative}[data-mui-toggle=dropdown]{animation-duration:.1ms;animation-name:mui-node-inserted;outline:0}.mui-dropdown__menu{position:absolute;top:100%;left:0;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#FFF;border-radius:2px;z-index:1;background-clip:padding-box}.mui-dropdown__menu.mui--is-open{display:block}.mui-dropdown__menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);white-space:nowrap}.mui-dropdown__menu>li>a:focus,.mui-dropdown__menu>li>a:hover{text-decoration:none;color:rgba(0,0,0,.87);background-color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a,.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;cursor:not-allowed}.mui-dropdown__menu--right{left:auto;right:0}@media (min-width:544px){.mui-form--inline>.mui-textfield{display:inline-block;margin-bottom:0}.mui-form--inline>.mui-checkbox,.mui-form--inline>.mui-radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.mui-form--inline>.mui-checkbox>label,.mui-form--inline>.mui-radio>label{padding-left:0}.mui-form--inline>.mui-checkbox>label>input[type=checkbox],.mui-form--inline>.mui-radio>label>input[type=radio]{position:relative;margin-left:0}.mui-form--inline>.mui-select{display:inline-block}.mui-form--inline>.mui-btn{margin-bottom:0;margin-top:0;vertical-align:bottom}}.mui-row{margin-left:-15px;margin-right:-15px}.mui-row:after,.mui-row:before{content:" ";display:table}.mui-row:after{clear:both}.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9,.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9,.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9,.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{min-height:1px;padding-left:15px;padding-right:15px}.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{float:left}.mui-col-xs-1{width:8.33333%}.mui-col-xs-2{width:16.66667%}.mui-col-xs-3{width:25%}.mui-col-xs-4{width:33.33333%}.mui-col-xs-5{width:41.66667%}.mui-col-xs-6{width:50%}.mui-col-xs-7{width:58.33333%}.mui-col-xs-8{width:66.66667%}.mui-col-xs-9{width:75%}.mui-col-xs-10{width:83.33333%}.mui-col-xs-11{width:91.66667%}.mui-col-xs-12{width:100%}.mui-col-xs-offset-0{margin-left:0}.mui-col-xs-offset-1{margin-left:8.33333%}.mui-col-xs-offset-2{margin-left:16.66667%}.mui-col-xs-offset-3{margin-left:25%}.mui-col-xs-offset-4{margin-left:33.33333%}.mui-col-xs-offset-5{margin-left:41.66667%}.mui-col-xs-offset-6{margin-left:50%}.mui-col-xs-offset-7{margin-left:58.33333%}.mui-col-xs-offset-8{margin-left:66.66667%}.mui-col-xs-offset-9{margin-left:75%}.mui-col-xs-offset-10{margin-left:83.33333%}.mui-col-xs-offset-11{margin-left:91.66667%}.mui-col-xs-offset-12{margin-left:100%}@media (min-width:544px){.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9{float:left}.mui-col-sm-1{width:8.33333%}.mui-col-sm-2{width:16.66667%}.mui-col-sm-3{width:25%}.mui-col-sm-4{width:33.33333%}.mui-col-sm-5{width:41.66667%}.mui-col-sm-6{width:50%}.mui-col-sm-7{width:58.33333%}.mui-col-sm-8{width:66.66667%}.mui-col-sm-9{width:75%}.mui-col-sm-10{width:83.33333%}.mui-col-sm-11{width:91.66667%}.mui-col-sm-12{width:100%}.mui-col-sm-offset-0{margin-left:0}.mui-col-sm-offset-1{margin-left:8.33333%}.mui-col-sm-offset-2{margin-left:16.66667%}.mui-col-sm-offset-3{margin-left:25%}.mui-col-sm-offset-4{margin-left:33.33333%}.mui-col-sm-offset-5{margin-left:41.66667%}.mui-col-sm-offset-6{margin-left:50%}.mui-col-sm-offset-7{margin-left:58.33333%}.mui-col-sm-offset-8{margin-left:66.66667%}.mui-col-sm-offset-9{margin-left:75%}.mui-col-sm-offset-10{margin-left:83.33333%}.mui-col-sm-offset-11{margin-left:91.66667%}.mui-col-sm-offset-12{margin-left:100%}}@media (min-width:768px){.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9{float:left}.mui-col-md-1{width:8.33333%}.mui-col-md-2{width:16.66667%}.mui-col-md-3{width:25%}.mui-col-md-4{width:33.33333%}.mui-col-md-5{width:41.66667%}.mui-col-md-6{width:50%}.mui-col-md-7{width:58.33333%}.mui-col-md-8{width:66.66667%}.mui-col-md-9{width:75%}.mui-col-md-10{width:83.33333%}.mui-col-md-11{width:91.66667%}.mui-col-md-12{width:100%}.mui-col-md-offset-0{margin-left:0}.mui-col-md-offset-1{margin-left:8.33333%}.mui-col-md-offset-2{margin-left:16.66667%}.mui-col-md-offset-3{margin-left:25%}.mui-col-md-offset-4{margin-left:33.33333%}.mui-col-md-offset-5{margin-left:41.66667%}.mui-col-md-offset-6{margin-left:50%}.mui-col-md-offset-7{margin-left:58.33333%}.mui-col-md-offset-8{margin-left:66.66667%}.mui-col-md-offset-9{margin-left:75%}.mui-col-md-offset-10{margin-left:83.33333%}.mui-col-md-offset-11{margin-left:91.66667%}.mui-col-md-offset-12{margin-left:100%}}@media (min-width:992px){.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9{float:left}.mui-col-lg-1{width:8.33333%}.mui-col-lg-2{width:16.66667%}.mui-col-lg-3{width:25%}.mui-col-lg-4{width:33.33333%}.mui-col-lg-5{width:41.66667%}.mui-col-lg-6{width:50%}.mui-col-lg-7{width:58.33333%}.mui-col-lg-8{width:66.66667%}.mui-col-lg-9{width:75%}.mui-col-lg-10{width:83.33333%}.mui-col-lg-11{width:91.66667%}.mui-col-lg-12{width:100%}.mui-col-lg-offset-0{margin-left:0}.mui-col-lg-offset-1{margin-left:8.33333%}.mui-col-lg-offset-2{margin-left:16.66667%}.mui-col-lg-offset-3{margin-left:25%}.mui-col-lg-offset-4{margin-left:33.33333%}.mui-col-lg-offset-5{margin-left:41.66667%}.mui-col-lg-offset-6{margin-left:50%}.mui-col-lg-offset-7{margin-left:58.33333%}.mui-col-lg-offset-8{margin-left:66.66667%}.mui-col-lg-offset-9{margin-left:75%}.mui-col-lg-offset-10{margin-left:83.33333%}.mui-col-lg-offset-11{margin-left:91.66667%}.mui-col-lg-offset-12{margin-left:100%}}@media (min-width:1200px){.mui-col-xl-1,.mui-col-xl-10,.mui-col-xl-11,.mui-col-xl-12,.mui-col-xl-2,.mui-col-xl-3,.mui-col-xl-4,.mui-col-xl-5,.mui-col-xl-6,.mui-col-xl-7,.mui-col-xl-8,.mui-col-xl-9{float:left}.mui-col-xl-1{width:8.33333%}.mui-col-xl-2{width:16.66667%}.mui-col-xl-3{width:25%}.mui-col-xl-4{width:33.33333%}.mui-col-xl-5{width:41.66667%}.mui-col-xl-6{width:50%}.mui-col-xl-7{width:58.33333%}.mui-col-xl-8{width:66.66667%}.mui-col-xl-9{width:75%}.mui-col-xl-10{width:83.33333%}.mui-col-xl-11{width:91.66667%}.mui-col-xl-12{width:100%}.mui-col-xl-offset-0{margin-left:0}.mui-col-xl-offset-1{margin-left:8.33333%}.mui-col-xl-offset-2{margin-left:16.66667%}.mui-col-xl-offset-3{margin-left:25%}.mui-col-xl-offset-4{margin-left:33.33333%}.mui-col-xl-offset-5{margin-left:41.66667%}.mui-col-xl-offset-6{margin-left:50%}.mui-col-xl-offset-7{margin-left:58.33333%}.mui-col-xl-offset-8{margin-left:66.66667%}.mui-col-xl-offset-9{margin-left:75%}.mui-col-xl-offset-10{margin-left:83.33333%}.mui-col-xl-offset-11{margin-left:91.66667%}.mui-col-xl-offset-12{margin-left:100%}}.mui-panel{padding:15px;margin-bottom:20px;border-radius:0;background-color:#FFF;box-shadow:0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}.mui-panel:after,.mui-panel:before{content:" ";display:table}.mui-panel:after{clear:both}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-panel{box-shadow:0 -1px 2px 0 rgba(0,0,0,.12),-1px 0 2px 0 rgba(0,0,0,.12),0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}}.mui-select{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-select:focus{outline:0}.mui-select:focus>select{height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;height:32px;width:100%;appearance:none;-webkit-appearance:none;-moz-appearance:none;outline:0;border:none;border-bottom:1px solid rgba(0,0,0,.26);border-radius:0;box-shadow:none;background-color:transparent;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iNiIgd2lkdGg9IjEwIj48cG9seWdvbiBwb2ludHM9IjAsMCAxMCwwIDUsNiIgc3R5bGU9ImZpbGw6cmdiYSgwLDAsMCwuMjQpOyIvPjwvc3ZnPg==);background-repeat:no-repeat;background-position:right center;cursor:pointer;color:rgba(0,0,0,.87);font-size:16px;padding:0 25px 0 0}.mui-select>select::-ms-expand{display:none}.mui-select>select:focus{outline:0;height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select:disabled{color:rgba(0,0,0,.38);cursor:not-allowed;background-color:transparent;opacity:1}.mui-select__menu{position:absolute;z-index:2;min-width:100%;overflow-y:auto;padding:8px 0;background-color:#FFF;font-size:16px}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-select__menu{border-left:1px solid rgba(0,0,0,.12);border-top:1px solid rgba(0,0,0,.12)}}.mui-select__menu>div{padding:0 22px;height:42px;line-height:42px;cursor:pointer;white-space:nowrap}.mui-select__menu>div:hover{background-color:#E0E0E0}.mui-select__menu>div.mui--is-selected{background-color:#EEE}th{text-align:left}.mui-table{width:100%;max-width:100%;margin-bottom:20px}.mui-table>tbody>tr>td,.mui-table>tbody>tr>th,.mui-table>tfoot>tr>td,.mui-table>tfoot>tr>th,.mui-table>thead>tr>td,.mui-table>thead>tr>th{padding:10px;line-height:1.429}.mui-table>thead>tr>th{border-bottom:2px solid rgba(0,0,0,.12);font-weight:700}.mui-table>tbody+tbody{border-top:2px solid rgba(0,0,0,.12)}.mui-table.mui-table--bordered>tbody>tr>td{border-bottom:1px solid rgba(0,0,0,.12)}.mui-tabs__bar{list-style:none;padding-left:0;margin-bottom:0;background-color:transparent;white-space:nowrap;overflow-x:auto}.mui-tabs__bar>li{display:inline-block}.mui-tabs__bar>li>a{display:block;white-space:nowrap;text-transform:uppercase;font-weight:500;font-size:14px;color:rgba(0,0,0,.87);cursor:default;height:48px;line-height:48px;padding-left:24px;padding-right:24px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-tabs__bar>li>a:hover{text-decoration:none}.mui-tabs__bar>li.mui--is-active{border-bottom:2px solid #2196F3}.mui-tabs__bar>li.mui--is-active>a{color:#2196F3}.mui-tabs__bar.mui-tabs__bar--justified{display:table;width:100%;table-layout:fixed}.mui-tabs__bar.mui-tabs__bar--justified>li{display:table-cell}.mui-tabs__bar.mui-tabs__bar--justified>li>a{text-align:center;padding-left:0;padding-right:0}.mui-tabs__pane{display:none}.mui-tabs__pane.mui--is-active{display:block}[data-mui-toggle=tab]{animation-duration:.1ms;animation-name:mui-node-inserted}.mui-textfield{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-textfield>label{position:absolute;top:0;display:block;width:100%;color:rgba(0,0,0,.54);font-size:12px;font-weight:400;line-height:15px;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.mui-textfield>textarea{padding-top:5px}.mui-textfield>input,.mui-textfield>textarea{display:block}.mui-textfield>input:focus~label,.mui-textfield>textarea:focus~label{color:#2196F3}.mui-textfield--float-label>label{position:absolute;transform:translate(0,15px);font-size:16px;line-height:32px;color:rgba(0,0,0,.26);text-overflow:clip;cursor:text;pointer-events:none}.mui-textfield--float-label>input:focus~label,.mui-textfield--float-label>textarea:focus~label{transform:translate(0,0);font-size:12px;line-height:15px;text-overflow:ellipsis}.mui-textfield--float-label>input:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>input:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>input:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>textarea:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:rgba(0,0,0,.54);font-size:12px;line-height:15px;transform:translate(0,0);text-overflow:ellipsis}.mui-textfield--wrap-label{display:table;width:100%;padding-top:0}.mui-textfield--wrap-label:not(.mui-textfield--float-label)>label{display:table-header-group;position:static;white-space:normal;overflow-x:visible}.mui-textfield>input,.mui-textfield>textarea{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;background-color:transparent;color:rgba(0,0,0,.87);border:none;border-bottom:1px solid rgba(0,0,0,.26);outline:0;width:100%;font-size:16px;padding:0;box-shadow:none;border-radius:0;background-image:none}.mui-textfield>input:focus,.mui-textfield>textarea:focus{border-color:#2196F3;border-width:2px}.mui-textfield>input:-moz-read-only,.mui-textfield>input:disabled,.mui-textfield>textarea:-moz-read-only,.mui-textfield>textarea:disabled{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input:disabled,.mui-textfield>input:read-only,.mui-textfield>textarea:disabled,.mui-textfield>textarea:read-only{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input::-webkit-input-placeholder,.mui-textfield>textarea::-webkit-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::-moz-placeholder,.mui-textfield>textarea::-moz-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input:-ms-input-placeholder,.mui-textfield>textarea:-ms-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::placeholder,.mui-textfield>textarea::placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input{height:32px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>textarea{min-height:64px}.mui-textfield>textarea[rows]:not([rows="2"]):focus{margin-bottom:-1px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):not(:required),.mui-textfield>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required),.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty){border-color:#F44336;border-width:2px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty){height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required)~label,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):not(:required)~label,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:#F44336}.mui-textfield:not(.mui-textfield--float-label)>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label{color:#F44336}@keyframes mui-node-inserted{from{opacity:.99}to{opacity:1}}.mui--no-transition{transition:none!important}.mui--no-user-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.mui--text-left{text-align:left!important}.mui--text-right{text-align:right!important}.mui--text-center{text-align:center!important}.mui--text-justify{text-align:justify!important}.mui--text-nowrap{white-space:nowrap!important}.mui--align-baseline{vertical-align:baseline!important}.mui--align-top{vertical-align:top!important}.mui--align-middle{vertical-align:middle!important}.mui--align-bottom{vertical-align:bottom!important}.mui--text-dark{color:rgba(0,0,0,.87)}.mui--text-dark-secondary{color:rgba(0,0,0,.54)}.mui--text-dark-hint{color:rgba(0,0,0,.38)}.mui--text-light{color:#FFF}.mui--text-light-secondary{color:rgba(255,255,255,.7)}.mui--text-light-hint{color:rgba(255,255,255,.3)}.mui--text-accent{color:rgba(255,64,129,.87)}.mui--text-accent-secondary{color:rgba(255,64,129,.54)}.mui--text-accent-hint{color:rgba(255,64,129,.38)}.mui--text-black{color:#000}.mui--text-white{color:#FFF}.mui--text-danger{color:#F44336}.mui-list--unstyled{padding-left:0;list-style:none}.mui-list--inline{padding-left:0;list-style:none;margin-left:-5px}.mui-list--inline>li{display:inline-block;padding-left:5px;padding-right:5px}.mui--z1,.mui-dropdown__menu,.mui-select__menu{box-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24)}.mui--z2{box-shadow:0 3px 6px rgba(0,0,0,.16),0 3px 6px rgba(0,0,0,.23)}.mui--z3{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}.mui--z4{box-shadow:0 14px 28px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.22)}.mui--z5{box-shadow:0 19px 38px rgba(0,0,0,.3),0 15px 12px rgba(0,0,0,.22)}.mui--clearfix:after,.mui--clearfix:before{content:" ";display:table}.mui--clearfix:after{clear:both}.mui--pull-right{float:right!important}.mui--pull-left{float:left!important}.mui--hide{display:none!important}.mui--show{display:block!important}.mui--invisible{visibility:hidden}.mui--overflow-hidden{overflow:hidden!important}.mui--overflow-hidden-x{overflow-x:hidden!important}.mui--overflow-hidden-y{overflow-y:hidden!important}.mui--visible-lg-block,.mui--visible-lg-inline,.mui--visible-lg-inline-block,.mui--visible-md-block,.mui--visible-md-inline,.mui--visible-md-inline-block,.mui--visible-sm-block,.mui--visible-sm-inline,.mui--visible-sm-inline-block,.mui--visible-xl-block,.mui--visible-xl-inline,.mui--visible-xl-inline-block,.mui--visible-xs-block,.mui--visible-xs-inline,.mui--visible-xs-inline-block{display:none!important}@media (max-width:543px){.mui-visible-xs{display:block!important}table.mui-visible-xs{display:table}tr.mui-visible-xs{display:table-row!important}td.mui-visible-xs,th.mui-visible-xs{display:table-cell!important}.mui--visible-xs-block{display:block!important}.mui--visible-xs-inline{display:inline!important}.mui--visible-xs-inline-block{display:inline-block!important}}@media (min-width:544px) and (max-width:767px){.mui-visible-sm{display:block!important}table.mui-visible-sm{display:table}tr.mui-visible-sm{display:table-row!important}td.mui-visible-sm,th.mui-visible-sm{display:table-cell!important}.mui--visible-sm-block{display:block!important}.mui--visible-sm-inline{display:inline!important}.mui--visible-sm-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.mui-visible-md{display:block!important}table.mui-visible-md{display:table}tr.mui-visible-md{display:table-row!important}td.mui-visible-md,th.mui-visible-md{display:table-cell!important}.mui--visible-md-block{display:block!important}.mui--visible-md-inline{display:inline!important}.mui--visible-md-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.mui-visible-lg{display:block!important}table.mui-visible-lg{display:table}tr.mui-visible-lg{display:table-row!important}td.mui-visible-lg,th.mui-visible-lg{display:table-cell!important}.mui--visible-lg-block{display:block!important}.mui--visible-lg-inline{display:inline!important}.mui--visible-lg-inline-block{display:inline-block!important}}@media (min-width:1200px){.mui-visible-xl{display:block!important}table.mui-visible-xl{display:table}tr.mui-visible-xl{display:table-row!important}td.mui-visible-xl,th.mui-visible-xl{display:table-cell!important}.mui--visible-xl-block{display:block!important}.mui--visible-xl-inline{display:inline!important}.mui--visible-xl-inline-block{display:inline-block!important}}@media (max-width:543px){.mui--hidden-xs{display:none!important}}@media (min-width:544px) and (max-width:767px){.mui--hidden-sm{display:none!important}}@media (min-width:768px) and (max-width:991px){.mui--hidden-md{display:none!important}}@media (min-width:992px) and (max-width:1199px){.mui--hidden-lg{display:none!important}}@media (min-width:1200px){.mui--hidden-xl{display:none!important}}body.mui-body--scroll-lock{overflow:hidden!important}#mui-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:99999999;background-color:rgba(0,0,0,.2);overflow:auto}.mui-ripple-effect{position:absolute;border-radius:50%;pointer-events:none;opacity:0;animation:mui-ripple-animation 2s}@keyframes mui-ripple-animation{from{transform:scale(1);opacity:.4}to{transform:scale(100);opacity:0}}.mui-btn>.mui-ripple-effect{background-color:#a6a6a6}.mui-btn--primary>.mui-ripple-effect{background-color:#FFF}.mui-btn--dark>.mui-ripple-effect{background-color:#FFF}.mui-btn--danger>.mui-ripple-effect{background-color:#FFF}.mui-btn--accent>.mui-ripple-effect{background-color:#FFF}.mui-btn--flat>.mui-ripple-effect{background-color:#a6a6a6}.mui--text-display4{font-weight:300;font-size:112px;line-height:112px}.mui--text-display3{font-weight:400;font-size:56px;line-height:56px}.mui--text-display2{font-weight:400;font-size:45px;line-height:48px}.mui--text-display1,h1{font-weight:400;font-size:34px;line-height:40px}.mui--text-headline,h2{font-weight:400;font-size:24px;line-height:32px}.mui--text-title,h3{font-weight:400;font-size:20px;line-height:28px}.mui--text-subhead,h4{font-weight:400;font-size:16px;line-height:24px}.mui--text-body2,h5{font-weight:500;font-size:14px;line-height:24px}.mui--text-body1{font-weight:400;font-size:14px;line-height:20px}.mui--text-caption{font-weight:400;font-size:12px;line-height:16px}.mui--text-menu{font-weight:500;font-size:13px;line-height:17px}.mui--text-button{font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase}'; +},{}],13:[function(e,t,i){t.exports=e(6)},{"../config":3,"./jqLite":5}],14:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){return l["default"].createElement("div",babelHelpers["extends"]({},this.props,{className:"mui-appbar "+this.props.className}),this.props.children)}}]),t}(l["default"].Component);n.defaultProps={className:""},i["default"]=n,t.exports=i["default"]},{react:"CwoHg3"}],15:[function(e,t,i){t.exports=e(8)},{"../js/lib/jqLite":5,"../js/lib/util":6,react:"CwoHg3"}],16:[function(e,t,i){t.exports=e(9)},{react:"CwoHg3"}],17:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=e("../js/lib/util"),r=(babelHelpers.interopRequireWildcard(n),e("./_helpers"),l["default"].PropTypes),a=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e=this.props,t=(e.children,e.onChange,babelHelpers.objectWithoutProperties(e,["children","onChange"]));return l["default"].createElement("div",babelHelpers["extends"]({},t,{className:"mui-checkbox "+this.props.className}),l["default"].createElement("label",null,l["default"].createElement("input",{ref:"inputEl",type:"checkbox",name:this.props.name,value:this.props.value,checked:this.props.checked,defaultChecked:this.props.defaultChecked,disabled:this.props.disabled,onChange:this.props.onChange}),this.props.label))}}]),t}(l["default"].Component);a.propTypes={name:r.string,label:r.string,value:r.string,checked:r.bool,defaultChecked:r.bool,disabled:r.bool,onChange:r.func},a.defaultProps={className:"",name:null,label:null,disabled:!1,onChange:null},i["default"]=a,t.exports=i["default"]},{"../js/lib/util":6,"./_helpers":7,react:"CwoHg3"}],18:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=e("../js/lib/util"),r=babelHelpers.interopRequireWildcard(n),a=["xs","sm","md","lg","xl"],s=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"defaultProps",value:function(){var e={className:""},t=void 0,i=void 0;for(t=a.length-1;t>-1;t--)i=a[t],e[i]=null,e[i+"-offset"]=null;return e}},{key:"render",value:function(){var e={},t=void 0,i=void 0,o=void 0,n=void 0;for(t=a.length-1;t>-1;t--)i=a[t],n="mui-col-"+i,o=this.props[i],o&&(e[n+"-"+o]=!0),o=this.props[i+"-offset"],o&&(e[n+"-offset-"+o]=!0);return e=r.classNames(e),l["default"].createElement("div",babelHelpers["extends"]({},this.props,{className:e+" "+this.props.className}),this.props.children)}}]),t}(l["default"].Component);i["default"]=s,t.exports=i["default"]},{"../js/lib/util":6,react:"CwoHg3"}],19:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e="mui-container";return this.props.fluid&&(e+="-fluid"),l["default"].createElement("div",babelHelpers["extends"]({},this.props,{className:e+" "+this.props.className}),this.props.children)}}]),t}(l["default"].Component);n.propTypes={fluid:l["default"].PropTypes.bool},n.defaultProps={className:"",fluid:!1},i["default"]=n,t.exports=i["default"]},{react:"CwoHg3"}],20:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e=this.props,t=(e.children,babelHelpers.objectWithoutProperties(e,["children"]));return l["default"].createElement("div",babelHelpers["extends"]({},t,{className:"mui-divider "+this.props.className}))}}]),t}(l["default"].Component);n.defaultProps={className:""},i["default"]=n,t.exports=i["default"]},{react:"CwoHg3"}],21:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=e("../js/lib/util"),r=babelHelpers.interopRequireWildcard(n),a=l["default"].PropTypes,s=function(e){function t(e){babelHelpers.classCallCheck(this,t);var i=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e));return i.onClickCB=r.callback(i,"onClick"),i}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"onClick",value:function(e){this.props.onClick&&this.props.onClick(this,e)}},{key:"render",value:function(){var e=this.props,t=e.children,i=(e.onClick,babelHelpers.objectWithoutProperties(e,["children","onClick"]));return l["default"].createElement("li",i,l["default"].createElement("a",{href:this.props.link,target:this.props.target,"data-mui-value":this.props.value,onClick:this.onClickCB},t))}}]),t}(l["default"].Component);s.propTypes={link:a.string,target:a.string,onClick:a.func},i["default"]=s,t.exports=i["default"]},{"../js/lib/util":6,react:"CwoHg3"}],22:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=e("./button"),r=babelHelpers.interopRequireDefault(n),a=e("./caret"),s=babelHelpers.interopRequireDefault(a),u=e("../js/lib/jqLite"),c=babelHelpers.interopRequireWildcard(u),p=e("../js/lib/util"),d=babelHelpers.interopRequireWildcard(p),m=l["default"].PropTypes,b="mui-dropdown",f="mui-dropdown__menu",h="mui--is-open",g="mui-dropdown__menu--right",x=function(e){function t(e){babelHelpers.classCallCheck(this,t);var i=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e));i.state={opened:!1,menuTop:0};var o=d.callback;return i.selectCB=o(i,"select"),i.onClickCB=o(i,"onClick"),i.onOutsideClickCB=o(i,"onOutsideClick"),i}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentWillMount",value:function(){document.addEventListener("click",this.onOutsideClickCB)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("click",this.onOutsideClickCB)}},{key:"onClick",value:function(e){if(0===e.button&&!this.props.disabled&&!e.defaultPrevented){this.toggle();var t=this.props.onClick;t&&t(e)}}},{key:"toggle",value:function(){return this.props.children?void(this.state.opened?this.close():this.open()):d.raiseError("Dropdown menu element not found")}},{key:"open",value:function(){var e=this.refs.wrapperEl.getBoundingClientRect(),t=void 0;t=this.refs.button.refs.buttonEl.getBoundingClientRect(),this.setState({opened:!0,menuTop:t.top-e.top+t.height})}},{key:"close",value:function(){this.setState({opened:!1})}},{key:"select",value:function(e){this.props.onSelect&&"A"===e.target.tagName&&this.props.onSelect(e.target.getAttribute("data-mui-value")),e.defaultPrevented||this.close()}},{key:"onOutsideClick",value:function(e){var t=this.refs.wrapperEl.contains(e.target);t||this.close()}},{key:"render",value:function(){var e=void 0,t=void 0,i=void 0;if(i="string"===c.type(this.props.label)?l["default"].createElement("span",null,this.props.label," ",l["default"].createElement(s["default"],null)):this.props.label,e=l["default"].createElement(r["default"],{ref:"button",type:"button",onClick:this.onClickCB,color:this.props.color,variant:this.props.variant,size:this.props.size,disabled:this.props.disabled},i),this.state.opened){var o={};o[f]=!0,o[h]=this.state.opened,o[g]="right"===this.props.alignMenu,o=d.classNames(o),t=l["default"].createElement("ul",{ref:"menuEl",className:o,style:{top:this.state.menuTop},onClick:this.selectCB},this.props.children)}var n=this.props,a=n.className,u=(n.children,n.onClick,babelHelpers.objectWithoutProperties(n,["className","children","onClick"]));return l["default"].createElement("div",babelHelpers["extends"]({},u,{ref:"wrapperEl",className:b+" "+a}),e,t)}}]),t}(l["default"].Component);x.propTypes={color:m.oneOf(["default","primary","danger","dark","accent"]),variant:m.oneOf(["default","flat","raised","fab"]),size:m.oneOf(["default","small","large"]),label:m.oneOfType([m.string,m.element]),alignMenu:m.oneOf(["left","right"]),onClick:m.func,onSelect:m.func,disabled:m.bool},x.defaultProps={className:"",color:"default",variant:"default",size:"default",label:"",alignMenu:"left",onClick:null,onSelect:null,disabled:!1},i["default"]=x,t.exports=i["default"]},{"../js/lib/jqLite":5,"../js/lib/util":6,"./button":8,"./caret":9,react:"CwoHg3"}],23:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e="";return this.props.inline&&(e="mui-form--inline"),l["default"].createElement("form",babelHelpers["extends"]({},this.props,{className:e+" "+this.props.className}),this.props.children)}}]),t}(l["default"].Component);n.propTypes={inline:l["default"].PropTypes.bool},n.defaultProps={className:"",inline:!1},i["default"]=n,t.exports=i["default"]},{react:"CwoHg3"}],24:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=e("./text-field"),r=l["default"].PropTypes,a=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){return l["default"].createElement(n.TextField,this.props)}}]),t}(l["default"].Component);a.propTypes={type:r.oneOf(["text","email","url","tel","password"])},a.defaultProps={type:"text"},i["default"]=a,t.exports=i["default"]},{"./text-field":11,react:"CwoHg3"}],25:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=e("../js/lib/forms"),r=(babelHelpers.interopRequireWildcard(n),e("../js/lib/jqLite")),a=(babelHelpers.interopRequireWildcard(r),e("../js/lib/util")),s=(babelHelpers.interopRequireWildcard(a),l["default"].PropTypes),u=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e=this.props,t=(e.children,babelHelpers.objectWithoutProperties(e,["children"]));return l["default"].createElement("option",babelHelpers["extends"]({},t,{value:this.props.value}),this.props.label)}}]),t}(l["default"].Component);u.propTypes={value:s.string,label:s.string},u.defaultProps={value:null,label:null},i["default"]=u,t.exports=i["default"]},{"../js/lib/forms":4,"../js/lib/jqLite":5,"../js/lib/util":6,react:"CwoHg3"}],26:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){return l["default"].createElement("div",babelHelpers["extends"]({},this.props,{className:"mui-panel "+this.props.className}),this.props.children)}}]),t}(l["default"].Component);n.defaultProps={className:""},i["default"]=n,t.exports=i["default"]},{react:"CwoHg3"}],27:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=l["default"].PropTypes,r=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e=this.props,t=(e.children,e.onChange,babelHelpers.objectWithoutProperties(e,["children","onChange"]));return l["default"].createElement("div",babelHelpers["extends"]({},t,{className:"mui-radio "+this.props.className}),l["default"].createElement("label",null,l["default"].createElement("input",{ref:"inputEl",type:"radio",name:this.props.name,value:this.props.value,checked:this.props.checked,defaultChecked:this.props.defaultChecked,disabled:this.props.disabled,onChange:this.props.onChange}),this.props.label))}}]),t}(l["default"].Component);r.propTypes={name:n.string,label:n.string,value:n.string,checked:n.bool,defaultChecked:n.bool,disabled:n.bool,onChange:n.func},r.defaultProps={className:"",name:null,label:null,disabled:!1,onChange:null},i["default"]=r,t.exports=i["default"]},{react:"CwoHg3"}],28:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=e("../js/lib/util"),r=(babelHelpers.interopRequireWildcard(n),function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){return l["default"].createElement("div",babelHelpers["extends"]({},this.props,{className:"mui-row "+this.props.className}),this.props.children)}}]),t}(l["default"].Component));r.defaultProps={className:""},i["default"]=r,t.exports=i["default"]},{"../js/lib/util":6,react:"CwoHg3"}],29:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=e("../js/lib/forms"),r=babelHelpers.interopRequireWildcard(n),a=e("../js/lib/jqLite"),s=babelHelpers.interopRequireWildcard(a),u=e("../js/lib/util"),c=babelHelpers.interopRequireWildcard(u),p=e("./_helpers"),d=l["default"].PropTypes,m=function(e){function t(e){babelHelpers.classCallCheck(this,t);var i=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e));i.state={showMenu:!1},e.readOnly===!1&&void 0!==e.value&&null===e.onChange&&c.raiseError(p.controlledMessage,!0),i.state.value=e.value;var o=c.callback;return i.hideMenuCB=o(i,"hideMenu"),i.onInnerChangeCB=o(i,"onInnerChange"),i.onInnerClickCB=o(i,"onInnerClick"),i.onInnerFocusCB=o(i,"onInnerFocus"),i.onInnerMouseDownCB=o(i,"onInnerMouseDown"),i.onKeydownCB=o(i,"onKeydown"),i.onMenuChangeCB=o(i,"onMenuChange"),i.onOuterFocusCB=o(i,"onOuterFocus"),i.onOuterBlurCB=o(i,"onOuterBlur"),i}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentDidMount",value:function(){this.refs.selectEl._muiSelect=!0,this.refs.wrapperEl.tabIndex=-1,this.props.autoFocus&&this.refs.wrapperEl.focus()}},{key:"componentWillReceiveProps",value:function(e){this.setState({value:e.value})}},{key:"onInnerMouseDown",value:function(e){0===e.button&&this.props.useDefault!==!0&&e.preventDefault()}},{key:"onInnerChange",value:function(e){var t=e.target.value;this.setState({value:t});var i=this.props.onChange;i&&i(t)}},{key:"onInnerClick",value:function(e){0===e.button&&this.showMenu()}},{key:"onInnerFocus",value:function(e){var t=this;this.props.useDefault!==!0&&setTimeout(function(){t.refs.wrapperEl.focus()},0)}},{key:"onOuterFocus",value:function(e){if(e.target===this.refs.wrapperEl){var t=this.refs.selectEl;return t._muiOrigIndex=t.tabIndex,t.tabIndex=-1,t.disabled?this.refs.wrapperEl.blur():void s.on(document,"keydown",this.onKeydownCB)}}},{key:"onOuterBlur",value:function(e){if(e.target===this.refs.wrapperEl){var t=this.refs.selectEl;t.tabIndex=t._muiOrigIndex,s.off(document,"keydown",this.onKeydownCB)}}},{key:"onKeydown",value:function(e){32!==e.keyCode&&38!==e.keyCode&&40!==e.keyCode||(e.preventDefault(),this.refs.selectEl.disabled!==!0&&this.showMenu())}},{key:"showMenu",value:function(){this.props.useDefault!==!0&&(c.enableScrollLock(),s.on(window,"resize",this.hideMenuCB),s.on(document,"click",this.hideMenuCB),this.setState({showMenu:!0}))}},{key:"hideMenu",value:function(){c.disableScrollLock(),s.off(window,"resize",this.hideMenuCB),s.off(document,"click",this.hideMenuCB),this.setState({showMenu:!1}),this.refs.selectEl.focus()}},{key:"onMenuChange",value:function(e){if(this.props.readOnly!==!0){this.setState({value:e});var t=this.props.onChange;t&&t(e)}}},{key:"render",value:function(){var e=void 0;this.state.showMenu&&(e=l["default"].createElement(b,{optionEls:this.refs.selectEl.children,wrapperEl:this.refs.wrapperEl,onChange:this.onMenuChangeCB,onClose:this.hideMenuCB}));var t=this.props,i=(t.children,t.onChange,babelHelpers.objectWithoutProperties(t,["children","onChange"]));return l["default"].createElement("div",babelHelpers["extends"]({},i,{ref:"wrapperEl",className:"mui-select "+this.props.className,onFocus:this.onOuterFocusCB,onBlur:this.onOuterBlurCB}),l["default"].createElement("select",{ref:"selectEl",name:this.props.name,value:this.state.value,defaultValue:this.props.defaultValue,disabled:this.props.disabled,multiple:this.props.multiple,readOnly:this.props.readOnly,required:this.props.required,onChange:this.onInnerChangeCB,onMouseDown:this.onInnerMouseDownCB,onClick:this.onInnerClickCB,onFocus:this.onInnerFocusCB},this.props.children),e)}}]),t}(l["default"].Component);m.propTypes={name:d.string,value:d.string,defaultValue:d.string,autoFocus:d.bool,disabled:d.bool,multiple:d.bool,readOnly:d.bool,required:d.bool,useDefault:d.bool,onChange:d.func},m.defaultProps={className:"",name:null,autoFocus:!1,disabled:!1,multiple:!1,readOnly:!1,required:!1,useDefault:!1,onChange:null};var b=function(e){function t(e){babelHelpers.classCallCheck(this,t);var i=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e));return i.state={origIndex:null,currentIndex:null},i.onKeydownCB=c.callback(i,"onKeydown"),i}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentWillMount",value:function(){var e=this.props.optionEls,t=e.length,i=0,o=void 0;for(o=t-1;o>-1;o--)e[o].selected&&(i=o);this.setState({origIndex:i,currentIndex:i})}},{key:"componentDidMount",value:function(){this.blurTimer=setTimeout(function(){var e=document.activeElement;"body"!==e.nodeName.toLowerCase()&&e.blur()},0);var e=r.getMenuPositionalCSS(this.props.wrapperEl,this.props.optionEls.length,this.state.currentIndex),t=this.refs.wrapperEl;s.css(t,e),s.scrollTop(t,e.scrollTop),s.on(document,"keydown",this.onKeydownCB)}},{key:"componentWillUnmount",value:function(){clearTimeout(this.blurTimer),s.off(document,"keydown",this.onKeydownCB)}},{key:"onClick",value:function(e,t){t.stopPropagation(),this.selectAndDestroy(e)}},{key:"onKeydown",value:function(e){var t=e.keyCode;return 9===t?this.destroy():(27!==t&&40!==t&&38!==t&&13!==t||e.preventDefault(),void(27===t?this.destroy():40===t?this.increment():38===t?this.decrement():13===t&&this.selectAndDestroy()))}},{key:"increment",value:function(){this.state.currentIndex!==this.props.optionEls.length-1&&this.setState({currentIndex:this.state.currentIndex+1})}},{key:"decrement",value:function(){0!==this.state.currentIndex&&this.setState({currentIndex:this.state.currentIndex-1})}},{key:"selectAndDestroy",value:function(e){e=void 0===e?this.state.currentIndex:e,e!==this.state.origIndex&&this.props.onChange(this.props.optionEls[e].value),this.destroy()}},{key:"destroy",value:function(){this.props.onClose()}},{key:"render",value:function(){var e=[],t=this.props.optionEls,i=t.length,o=void 0,n=void 0;for(n=0;i>n;n++)o=n===this.state.currentIndex?"mui--is-selected":"",e.push(l["default"].createElement("div",{key:n,className:o,onClick:this.onClick.bind(this,n)},t[n].textContent));return l["default"].createElement("div",{ref:"wrapperEl",className:"mui-select__menu"},e)}}]),t}(l["default"].Component);b.defaultProps={optionEls:[],wrapperEl:null,onChange:null,onClose:null},i["default"]=m,t.exports=i["default"]},{"../js/lib/forms":4,"../js/lib/jqLite":5,"../js/lib/util":6,"./_helpers":7,react:"CwoHg3"}],30:[function(e,t,i){t.exports=e(10)},{react:"CwoHg3"}],31:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=e("./tab"),r=babelHelpers.interopRequireDefault(n),a=e("../js/lib/util"),s=babelHelpers.interopRequireWildcard(a),u=l["default"].PropTypes,c="mui-tabs__bar",p="mui-tabs__bar--justified",d="mui-tabs__pane",m="mui--is-active",b=function(e){function t(e){babelHelpers.classCallCheck(this,t);var i=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e));return i.state={currentSelectedIndex:e.initialSelectedIndex},i}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"onClick",value:function(e,t,i){e!==this.state.currentSelectedIndex&&(this.setState({currentSelectedIndex:e}),t.props.onActive&&t.props.onActive(t),this.props.onChange&&this.props.onChange(e,t.props.value,t,i))}},{key:"render",value:function(){var e=this.props,t=e.children,i=babelHelpers.objectWithoutProperties(e,["children"]),o=[],n=[],a=t.length,u=this.state.currentSelectedIndex%a,b=void 0,f=void 0,h=void 0,g=void 0;for(g=0;a>g;g++)f=t[g],f.type!==r["default"]&&s.raiseError("Expecting MUITab React Element"),b=g===u,o.push(l["default"].createElement("li",{key:g,className:b?m:""},l["default"].createElement("a",{onClick:this.onClick.bind(this,g,f)},f.props.label))),h=d+" ",b&&(h+=m),n.push(l["default"].createElement("div",{key:g,className:h},f.props.children));return h=c,this.props.justified&&(h+=" "+p),l["default"].createElement("div",i,l["default"].createElement("ul",{className:h},o),n)}}]),t}(l["default"].Component);b.propTypes={initialSelectedIndex:u.number,justified:u.bool,onChange:u.func},b.defaultProps={className:"",initialSelectedIndex:0,justified:!1,onChange:null},i["default"]=b,t.exports=i["default"]},{"../js/lib/util":6,"./tab":10,react:"CwoHg3"}],32:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=e("./text-field"),r=l["default"].PropTypes,a=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){return l["default"].createElement(n.TextField,this.props)}}]),t}(l["default"].Component);a.propTypes={rows:r.number},a.defaultProps={type:"textarea",rows:2},i["default"]=a,t.exports=i["default"]},{"./text-field":11,react:"CwoHg3"}]},{},[2]); \ No newline at end of file diff --git a/platforms/android/assets/www/libs/mui/packages/cdn/js/mui.js b/platforms/android/assets/www/libs/mui/packages/cdn/js/mui.js new file mode 100644 index 0000000..1d101ee --- /dev/null +++ b/platforms/android/assets/www/libs/mui/packages/cdn/js/mui.js @@ -0,0 +1,1809 @@ +(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o viewHeight) { + scrollIdeal = (menuPadding + (currentIndex + 1) * optionHeight) - + (-1 * top + wrapperPadding + inputHeight); + scrollMax = numOptions * optionHeight + 2 * menuPadding - height; + scrollTop = Math.min(scrollIdeal, scrollMax); + } + + return { + 'height': height + 'px', + 'top': top + 'px', + 'scrollTop': scrollTop + }; +} + + +/** Define module API */ +module.exports = { + getMenuPositionalCSS: getMenuPositionalCSSFn +}; + +},{}],4:[function(require,module,exports){ +/** + * MUI CSS/JS jqLite module + * @module lib/jqLite + */ + +'use strict'; + + +/** + * Add a class to an element. + * @param {Element} element - The DOM element. + * @param {string} cssClasses - Space separated list of class names. + */ +function jqLiteAddClass(element, cssClasses) { + if (!cssClasses || !element.setAttribute) return; + + var existingClasses = _getExistingClasses(element), + splitClasses = cssClasses.split(' '), + cssClass; + + for (var i=0; i < splitClasses.length; i++) { + cssClass = splitClasses[i].trim(); + if (existingClasses.indexOf(' ' + cssClass + ' ') === -1) { + existingClasses += cssClass + ' '; + } + } + + element.setAttribute('class', existingClasses.trim()); +} + + +/** + * Get or set CSS properties. + * @param {Element} element - The DOM element. + * @param {string} [name] - The property name. + * @param {string} [value] - The property value. + */ +function jqLiteCss(element, name, value) { + // Return full style object + if (name === undefined) { + return getComputedStyle(element); + } + + var nameType = jqLiteType(name); + + // Set multiple values + if (nameType === 'object') { + for (var key in name) element.style[_camelCase(key)] = name[key]; + return; + } + + // Set a single value + if (nameType === 'string' && value !== undefined) { + element.style[_camelCase(name)] = value; + } + + var styleObj = getComputedStyle(element), + isArray = (jqLiteType(name) === 'array'); + + // Read single value + if (!isArray) return _getCurrCssProp(element, name, styleObj); + + // Read multiple values + var outObj = {}, + key; + + for (var i=0; i < name.length; i++) { + key = name[i]; + outObj[key] = _getCurrCssProp(element, key, styleObj); + } + + return outObj; +} + + +/** + * Check if element has class. + * @param {Element} element - The DOM element. + * @param {string} cls - The class name string. + */ +function jqLiteHasClass(element, cls) { + if (!cls || !element.getAttribute) return false; + return (_getExistingClasses(element).indexOf(' ' + cls + ' ') > -1); +} + + +/** + * Return the type of a variable. + * @param {} somevar - The JavaScript variable. + */ +function jqLiteType(somevar) { + // handle undefined + if (somevar === undefined) return 'undefined'; + + // handle others (of type [object ]) + var typeStr = Object.prototype.toString.call(somevar); + if (typeStr.indexOf('[object ') === 0) { + return typeStr.slice(8, -1).toLowerCase(); + } else { + throw new Error("MUI: Could not understand type: " + typeStr); + } +} + + +/** + * Attach an event handler to a DOM element + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOn(element, type, callback, useCapture) { + useCapture = (useCapture === undefined) ? false : useCapture; + + // add to DOM + element.addEventListener(type, callback, useCapture); + + // add to cache + var cache = element._muiEventCache = element._muiEventCache || {}; + cache[type] = cache[type] || []; + cache[type].push([callback, useCapture]); +} + + +/** + * Remove an event handler from a DOM element + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOff(element, type, callback, useCapture) { + useCapture = (useCapture === undefined) ? false : useCapture; + + // remove from cache + var cache = element._muiEventCache = element._muiEventCache || {}, + argsList = cache[type] || [], + args, + i; + + i = argsList.length; + while (i--) { + args = argsList[i]; + + // remove all events if callback is undefined + if (callback === undefined || + (args[0] === callback && args[1] === useCapture)) { + + // remove from cache + argsList.splice(i, 1); + + // remove from DOM + element.removeEventListener(type, args[0], args[1]); + } + } +} + + +/** + * Attach an event hander which will only execute once + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOne(element, type, callback, useCapture) { + jqLiteOn(element, type, function onFn(ev) { + // execute callback + if (callback) callback.apply(this, arguments); + + // remove wrapper + jqLiteOff(element, type, onFn); + }, useCapture); +} + + +/** + * Get or set horizontal scroll position + * @param {Element} element - The DOM element + * @param {number} [value] - The scroll position + */ +function jqLiteScrollLeft(element, value) { + var win = window; + + // get + if (value === undefined) { + if (element === win) { + var docEl = document.documentElement; + return (win.pageXOffset || docEl.scrollLeft) - (docEl.clientLeft || 0); + } else { + return element.scrollLeft; + } + } + + // set + if (element === win) win.scrollTo(value, jqLiteScrollTop(win)); + else element.scrollLeft = value; +} + + +/** + * Get or set vertical scroll position + * @param {Element} element - The DOM element + * @param {number} value - The scroll position + */ +function jqLiteScrollTop(element, value) { + var win = window; + + // get + if (value === undefined) { + if (element === win) { + var docEl = document.documentElement; + return (win.pageYOffset || docEl.scrollTop) - (docEl.clientTop || 0); + } else { + return element.scrollTop; + } + } + + // set + if (element === win) win.scrollTo(jqLiteScrollLeft(win), value); + else element.scrollTop = value; +} + + +/** + * Return object representing top/left offset and element height/width. + * @param {Element} element - The DOM element. + */ +function jqLiteOffset(element) { + var win = window, + rect = element.getBoundingClientRect(), + scrollTop = jqLiteScrollTop(win), + scrollLeft = jqLiteScrollLeft(win); + + return { + top: rect.top + scrollTop, + left: rect.left + scrollLeft, + height: rect.height, + width: rect.width + }; +} + + +/** + * Attach a callback to the DOM ready event listener + * @param {Function} fn - The callback function. + */ +function jqLiteReady(fn) { + var done = false, + top = true, + doc = document, + win = doc.defaultView, + root = doc.documentElement, + add = doc.addEventListener ? 'addEventListener' : 'attachEvent', + rem = doc.addEventListener ? 'removeEventListener' : 'detachEvent', + pre = doc.addEventListener ? '' : 'on'; + + var init = function(e) { + if (e.type == 'readystatechange' && doc.readyState != 'complete') { + return; + } + + (e.type == 'load' ? win : doc)[rem](pre + e.type, init, false); + if (!done && (done = true)) fn.call(win, e.type || e); + }; + + var poll = function() { + try { root.doScroll('left'); } catch(e) { setTimeout(poll, 50); return; } + init('poll'); + }; + + if (doc.readyState == 'complete') { + fn.call(win, 'lazy'); + } else { + if (doc.createEventObject && root.doScroll) { + try { top = !win.frameElement; } catch(e) { } + if (top) poll(); + } + doc[add](pre + 'DOMContentLoaded', init, false); + doc[add](pre + 'readystatechange', init, false); + win[add](pre + 'load', init, false); + } +} + + +/** + * Remove classes from a DOM element + * @param {Element} element - The DOM element. + * @param {string} cssClasses - Space separated list of class names. + */ +function jqLiteRemoveClass(element, cssClasses) { + if (!cssClasses || !element.setAttribute) return; + + var existingClasses = _getExistingClasses(element), + splitClasses = cssClasses.split(' '), + cssClass; + + for (var i=0; i < splitClasses.length; i++) { + cssClass = splitClasses[i].trim(); + while (existingClasses.indexOf(' ' + cssClass + ' ') >= 0) { + existingClasses = existingClasses.replace(' ' + cssClass + ' ', ' '); + } + } + + element.setAttribute('class', existingClasses.trim()); +} + + +// ------------------------------ +// Utilities +// ------------------------------ +var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g, + MOZ_HACK_REGEXP = /^moz([A-Z])/, + ESCAPE_REGEXP = /([.*+?^=!:${}()|\[\]\/\\])/g, + BOOLEAN_ATTRS; + + +BOOLEAN_ATTRS = { + multiple: true, + selected: true, + checked: true, + disabled: true, + readonly: true, + required: true, + open: true +} + + +function _getExistingClasses(element) { + var classes = (element.getAttribute('class') || '').replace(/[\n\t]/g, ''); + return ' ' + classes + ' '; +} + + +function _camelCase(name) { + return name. + replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) { + return offset ? letter.toUpperCase() : letter; + }). + replace(MOZ_HACK_REGEXP, 'Moz$1'); +} + + +function _escapeRegExp(string) { + return string.replace(ESCAPE_REGEXP, "\\$1"); +} + + +function _getCurrCssProp(elem, name, computed) { + var ret; + + // try computed style + ret = computed.getPropertyValue(name); + + // try style attribute (if element is not attached to document) + if (ret === '' && !elem.ownerDocument) ret = elem.style[_camelCase(name)]; + + return ret; +} + + +/** + * Module API + */ +module.exports = { + /** Add classes */ + addClass: jqLiteAddClass, + + /** Get or set CSS properties */ + css: jqLiteCss, + + /** Check for class */ + hasClass: jqLiteHasClass, + + /** Remove event handlers */ + off: jqLiteOff, + + /** Return offset values */ + offset: jqLiteOffset, + + /** Add event handlers */ + on: jqLiteOn, + + /** Add an execute-once event handler */ + one: jqLiteOne, + + /** DOM ready event handler */ + ready: jqLiteReady, + + /** Remove classes */ + removeClass: jqLiteRemoveClass, + + /** Check JavaScript variable instance type */ + type: jqLiteType, + + /** Get or set horizontal scroll position */ + scrollLeft: jqLiteScrollLeft, + + /** Get or set vertical scroll position */ + scrollTop: jqLiteScrollTop +}; + +},{}],5:[function(require,module,exports){ +/** + * MUI CSS/JS utilities module + * @module lib/util + */ + +'use strict'; + + +var config = require('../config'), + jqLite = require('./jqLite'), + nodeInsertedCallbacks = [], + scrollLock = 0, + scrollLockCls = 'mui-body--scroll-lock', + scrollLockPos, + _supportsPointerEvents; + + +/** + * Logging function + */ +function logFn() { + var win = window; + + if (config.debug && typeof win.console !== "undefined") { + try { + win.console.log.apply(win.console, arguments); + } catch (a) { + var e = Array.prototype.slice.call(arguments); + win.console.log(e.join("\n")); + } + } +} + + +/** + * Load CSS text in new stylesheet + * @param {string} cssText - The css text. + */ +function loadStyleFn(cssText) { + var doc = document, + head; + + // copied from jQuery + head = doc.head || + doc.getElementsByTagName('head')[0] || + doc.documentElement; + + var e = doc.createElement('style'); + e.type = 'text/css'; + + if (e.styleSheet) e.styleSheet.cssText = cssText; + else e.appendChild(doc.createTextNode(cssText)); + + // add to document + head.insertBefore(e, head.firstChild); + + return e; +} + + +/** + * Raise an error + * @param {string} msg - The error message. + */ +function raiseErrorFn(msg, useConsole) { + if (useConsole) { + if (typeof console !== 'undefined') console.error('MUI Warning: ' + msg); + } else { + throw new Error('MUI: ' + msg); + } +} + + +/** + * Register callbacks on muiNodeInserted event + * @param {function} callbackFn - The callback function. + */ +function onNodeInsertedFn(callbackFn) { + nodeInsertedCallbacks.push(callbackFn); + + // initalize listeners + if (nodeInsertedCallbacks._initialized === undefined) { + var doc = document; + + jqLite.on(doc, 'animationstart', animationHandlerFn); + jqLite.on(doc, 'mozAnimationStart', animationHandlerFn); + jqLite.on(doc, 'webkitAnimationStart', animationHandlerFn); + + nodeInsertedCallbacks._initialized = true; + } +} + + +/** + * Execute muiNodeInserted callbacks + * @param {Event} ev - The DOM event. + */ +function animationHandlerFn(ev) { + // check animation name + if (ev.animationName !== 'mui-node-inserted') return; + + var el = ev.target; + + // iterate through callbacks + for (var i=nodeInsertedCallbacks.length - 1; i >= 0; i--) { + nodeInsertedCallbacks[i](el); + } +} + + +/** + * Convert Classname object, with class as key and true/false as value, to an + * class string. + * @param {Object} classes The classes + * @return {String} class string + */ +function classNamesFn(classes) { + var cs = ''; + for (var i in classes) { + cs += (classes[i]) ? i + ' ' : ''; + } + return cs.trim(); +} + + +/** + * Check if client supports pointer events. + */ +function supportsPointerEventsFn() { + // check cache + if (_supportsPointerEvents !== undefined) return _supportsPointerEvents; + + var element = document.createElement('x'); + element.style.cssText = 'pointer-events:auto'; + _supportsPointerEvents = (element.style.pointerEvents === 'auto'); + return _supportsPointerEvents; +} + + +/** + * Create callback closure. + * @param {Object} instance - The object instance. + * @param {String} funcName - The name of the callback function. + */ +function callbackFn(instance, funcName) { + return function() {instance[funcName].apply(instance, arguments);}; +} + + +/** + * Dispatch event. + * @param {Element} element - The DOM element. + * @param {String} eventType - The event type. + * @param {Boolean} bubbles=true - If true, event bubbles. + * @param {Boolean} cancelable=true = If true, event is cancelable + * @param {Object} [data] - Data to add to event object + */ +function dispatchEventFn(element, eventType, bubbles, cancelable, data) { + var ev = document.createEvent('HTMLEvents'), + bubbles = (bubbles !== undefined) ? bubbles : true, + cancelable = (cancelable !== undefined) ? cancelable : true, + k; + + ev.initEvent(eventType, bubbles, cancelable); + + // add data to event object + if (data) for (k in data) ev[k] = data[k]; + + // dispatch + if (element) element.dispatchEvent(ev); + + return ev; +} + + +/** + * Turn on window scroll lock. + */ +function enableScrollLockFn() { + // increment counter + scrollLock += 1 + + // add lock + if (scrollLock === 1) { + var win = window, + doc = document; + + scrollLockPos = {left: jqLite.scrollLeft(win), top: jqLite.scrollTop(win)}; + jqLite.addClass(doc.body, scrollLockCls); + win.scrollTo(scrollLockPos.left, scrollLockPos.top); + } +} + + +/** + * Turn off window scroll lock. + */ +function disableScrollLockFn() { + // ignore + if (scrollLock === 0) return; + + // decrement counter + scrollLock -= 1 + + // remove lock + if (scrollLock === 0) { + var win = window, + doc = document; + + jqLite.removeClass(doc.body, scrollLockCls); + win.scrollTo(scrollLockPos.left, scrollLockPos.top); + } +} + + +/** + * Define the module API + */ +module.exports = { + /** Create callback closures */ + callback: callbackFn, + + /** Classnames object to string */ + classNames: classNamesFn, + + /** Disable scroll lock */ + disableScrollLock: disableScrollLockFn, + + /** Dispatch event */ + dispatchEvent: dispatchEventFn, + + /** Enable scroll lock */ + enableScrollLock: enableScrollLockFn, + + /** Log messages to the console when debug is turned on */ + log: logFn, + + /** Load CSS text as new stylesheet */ + loadStyle: loadStyleFn, + + /** Register muiNodeInserted handler */ + onNodeInserted: onNodeInsertedFn, + + /** Raise MUI error */ + raiseError: raiseErrorFn, + + /** Support Pointer Events check */ + supportsPointerEvents: supportsPointerEventsFn +}; + +},{"../config":2,"./jqLite":4}],6:[function(require,module,exports){ +/** + * MUI CSS/JS dropdown module + * @module dropdowns + */ + +'use strict'; + + +var jqLite = require('./lib/jqLite'), + util = require('./lib/util'), + attrKey = 'data-mui-toggle', + attrSelector = '[data-mui-toggle="dropdown"]', + openClass = 'mui--is-open', + menuClass = 'mui-dropdown__menu'; + + +/** + * Initialize toggle element. + * @param {Element} toggleEl - The toggle element. + */ +function initialize(toggleEl) { + // check flag + if (toggleEl._muiDropdown === true) return; + else toggleEl._muiDropdown = true; + + // use type "button" to prevent form submission by default + if (!toggleEl.hasAttribute('type')) toggleEl.type = 'button'; + + // attach click handler + jqLite.on(toggleEl, 'click', clickHandler); +} + + +/** + * Handle click events on dropdown toggle element. + * @param {Event} ev - The DOM event + */ +function clickHandler(ev) { + // only left clicks + if (ev.button !== 0) return; + + var toggleEl = this; + + // exit if toggle button is disabled + if (toggleEl.getAttribute('disabled') !== null) return; + + // toggle dropdown + toggleDropdown(toggleEl); +} + + +/** + * Toggle the dropdown. + * @param {Element} toggleEl - The dropdown toggle element. + */ +function toggleDropdown(toggleEl) { + var wrapperEl = toggleEl.parentNode, + menuEl = toggleEl.nextElementSibling, + doc = wrapperEl.ownerDocument; + + // exit if no menu element + if (!menuEl || !jqLite.hasClass(menuEl, menuClass)) { + return util.raiseError('Dropdown menu element not found'); + } + + // method to close dropdown + function closeDropdownFn() { + jqLite.removeClass(menuEl, openClass); + + // remove event handlers + jqLite.off(doc, 'click', closeDropdownFn); + } + + // method to open dropdown + function openDropdownFn() { + // position menu element below toggle button + var wrapperRect = wrapperEl.getBoundingClientRect(), + toggleRect = toggleEl.getBoundingClientRect(); + + var top = toggleRect.top - wrapperRect.top + toggleRect.height; + jqLite.css(menuEl, 'top', top + 'px'); + + // add open class to wrapper + jqLite.addClass(menuEl, openClass); + + // close dropdown when user clicks outside of menu + setTimeout(function() {jqLite.on(doc, 'click', closeDropdownFn);}, 0); + } + + // toggle dropdown + if (jqLite.hasClass(menuEl, openClass)) closeDropdownFn(); + else openDropdownFn(); +} + + +/** Define module API */ +module.exports = { + /** Initialize module listeners */ + initListeners: function() { + var doc = document; + + // markup elements available when method is called + var elList = doc.querySelectorAll(attrSelector); + for (var i=elList.length - 1; i >= 0; i--) initialize(elList[i]); + + // listen for new elements + util.onNodeInserted(function(el) { + if (el.getAttribute(attrKey) === 'dropdown') initialize(el); + }); + } +}; + +},{"./lib/jqLite":4,"./lib/util":5}],7:[function(require,module,exports){ +module.exports=require(4) +},{}],8:[function(require,module,exports){ +/** + * MUI CSS/JS overlay module + * @module overlay + */ + +'use strict'; + + +var util = require('./lib/util'), + jqLite = require('./lib/jqLite'), + overlayId = 'mui-overlay', + bodyClass = 'mui--overflow-hidden', + iosRegex = /(iPad|iPhone|iPod)/g; + + +/** + * Turn overlay on/off. + * @param {string} action - Turn overlay "on"/"off". + * @param {object} [options] + * @config {boolean} [keyboard] - If true, close when escape key is pressed. + * @config {boolean} [static] - If false, close when backdrop is clicked. + * @config {Function} [onclose] - Callback function to execute on close + * @param {Element} [childElement] - Child element to add to overlay. + */ +function overlayFn(action) { + var overlayEl; + + if (action === 'on') { + // extract arguments + var arg, options, childElement; + + // pull options and childElement from arguments + for (var i=arguments.length - 1; i > 0; i--) { + arg = arguments[i]; + + if (jqLite.type(arg) === 'object') options = arg; + if (arg instanceof Element && arg.nodeType === 1) childElement = arg; + } + + // option defaults + options = options || {}; + if (options.keyboard === undefined) options.keyboard = true; + if (options.static === undefined) options.static = false; + + // execute method + overlayEl = overlayOn(options, childElement); + + } else if (action === 'off') { + overlayEl = overlayOff(); + + } else { + // raise error + util.raiseError("Expecting 'on' or 'off'"); + } + + return overlayEl; +} + + +/** + * Turn on overlay. + * @param {object} options - Overlay options. + * @param {Element} childElement - The child element. + */ +function overlayOn(options, childElement) { + var bodyEl = document.body, + overlayEl = document.getElementById(overlayId); + + // add overlay + util.enableScrollLock(); + //jqLite.addClass(bodyEl, bodyClass); + + if (!overlayEl) { + // create overlayEl + overlayEl = document.createElement('div'); + overlayEl.setAttribute('id', overlayId); + + // add child element + if (childElement) overlayEl.appendChild(childElement); + + bodyEl.appendChild(overlayEl); + + } else { + // remove existing children + while (overlayEl.firstChild) overlayEl.removeChild(overlayEl.firstChild); + + // add child element + if (childElement) overlayEl.appendChild(childElement); + } + + // iOS bugfix + if (iosRegex.test(navigator.userAgent)) { + jqLite.css(overlayEl, 'cursor', 'pointer'); + } + + // handle options + if (options.keyboard) addKeyupHandler(); + else removeKeyupHandler(); + + if (options.static) removeClickHandler(overlayEl); + else addClickHandler(overlayEl); + + // attach options + overlayEl.muiOptions = options; + + return overlayEl; +} + + +/** + * Turn off overlay. + */ +function overlayOff() { + var overlayEl = document.getElementById(overlayId), + callbackFn; + + if (overlayEl) { + // remove children + while (overlayEl.firstChild) overlayEl.removeChild(overlayEl.firstChild); + + // remove overlay element + overlayEl.parentNode.removeChild(overlayEl); + + // callback reference + callbackFn = overlayEl.muiOptions.onclose; + + // remove click handler + removeClickHandler(overlayEl); + } + + util.disableScrollLock(); + + // remove keyup handler + removeKeyupHandler(); + + // execute callback + if (callbackFn) callbackFn(); + + return overlayEl; +} + + +/** + * Add keyup handler. + */ +function addKeyupHandler() { + jqLite.on(document, 'keyup', onKeyup); +} + + +/** + * Remove keyup handler. + */ +function removeKeyupHandler() { + jqLite.off(document, 'keyup', onKeyup); +} + + +/** + * Teardown overlay when escape key is pressed. + */ +function onKeyup(ev) { + if (ev.keyCode === 27) overlayOff(); +} + + +/** + * Add click handler. + */ +function addClickHandler(overlayEl) { + jqLite.on(overlayEl, 'click', onClick); +} + + +/** + * Remove click handler. + */ +function removeClickHandler(overlayEl) { + jqLite.off(overlayEl, 'click', onClick); +} + + +/** + * Teardown overlay when backdrop is clicked. + */ +function onClick(ev) { + if (ev.target.id === overlayId) overlayOff(); +} + + +/** Define module API */ +module.exports = overlayFn; + +},{"./lib/jqLite":4,"./lib/util":5}],9:[function(require,module,exports){ +/** + * MUI CSS/JS ripple module + * @module ripple + */ + +'use strict'; + + +var jqLite = require('./lib/jqLite'), + util = require('./lib/util'), + btnClass = 'mui-btn', + btnFABClass = 'mui-btn--fab', + rippleClass = 'mui-ripple-effect', + animationName = 'mui-btn-inserted'; + + +/** + * Add ripple effects to button element. + * @param {Element} buttonEl - The button element. + */ +function initialize(buttonEl) { + // check flag + if (buttonEl._muiRipple === true) return; + else buttonEl._muiRipple = true; + + // exit if element is INPUT (doesn't support absolute positioned children) + if (buttonEl.tagName === 'INPUT') return; + + // attach event handler + jqLite.on(buttonEl, 'touchstart', eventHandler); + jqLite.on(buttonEl, 'mousedown', eventHandler); +} + + +/** + * Event handler + * @param {Event} ev - The DOM event + */ +function eventHandler(ev) { + // only left clicks + if (ev.button !== 0) return; + + var buttonEl = this; + + // exit if button is disabled + if (buttonEl.disabled === true) return; + + // de-dupe touchstart and mousedown with 100msec flag + if (buttonEl.touchFlag === true) { + return; + } else { + buttonEl.touchFlag = true; + setTimeout(function() { + buttonEl.touchFlag = false; + }, 100); + } + + var rippleEl = document.createElement('div'); + rippleEl.className = rippleClass; + + var offset = jqLite.offset(buttonEl), + xPos = ev.pageX - offset.left, + yPos = ev.pageY - offset.top, + diameter, + radius; + + // get height + if (jqLite.hasClass(buttonEl, btnFABClass)) diameter = offset.height / 2; + else diameter = offset.height; + + radius = diameter / 2; + + jqLite.css(rippleEl, { + height: diameter + 'px', + width: diameter + 'px', + top: yPos - radius + 'px', + left: xPos - radius + 'px' + }); + + buttonEl.appendChild(rippleEl); + + window.setTimeout(function() { + var parentNode = rippleEl.parentNode; + if (parentNode) parentNode.removeChild(rippleEl); + }, 2000); +} + + +/** Define module API */ +module.exports = { + /** Initialize module listeners */ + initListeners: function() { + var doc = document; + + // markup elements available when method is called + var elList = doc.getElementsByClassName(btnClass); + for (var i=elList.length - 1; i >= 0; i--) initialize(elList[i]); + + // listen for new elements + util.onNodeInserted(function(el) { + if (jqLite.hasClass(el, btnClass)) initialize(el); + }); + } +}; + +},{"./lib/jqLite":4,"./lib/util":5}],10:[function(require,module,exports){ +/** + * MUI CSS/JS select module + * @module forms/select + */ + +'use strict'; + + +var jqLite = require('./lib/jqLite'), + util = require('./lib/util'), + formlib = require('./lib/forms'), + wrapperClass = 'mui-select', + cssSelector = '.mui-select > select', + menuClass = 'mui-select__menu', + selectedClass = 'mui--is-selected', + doc = document, + win = window; + + +/** + * Initialize select element. + * @param {Element} selectEl - The select element. + */ +function initialize(selectEl) { + // check flag + if (selectEl._muiSelect === true) return; + else selectEl._muiSelect = true; + + // use default behavior on touch devices + if ('ontouchstart' in doc.documentElement) return; + + // initialize element + new Select(selectEl); +} + + +/** + * Creates a new Select object + * @class + */ +function Select(selectEl) { + // instance variables + this.selectEl = selectEl; + this.wrapperEl = selectEl.parentNode; + this.useDefault = false; // currently unused but let's keep just in case + + // attach event handlers + jqLite.on(selectEl, 'mousedown', util.callback(this, 'mousedownHandler')); + jqLite.on(selectEl, 'focus', util.callback(this, 'focusHandler')); + jqLite.on(selectEl, 'click', util.callback(this, 'clickHandler')); + + // make wrapper focusable and fix firefox bug + this.wrapperEl.tabIndex = -1; + var callbackFn = util.callback(this, 'wrapperFocusHandler'); + jqLite.on(this.wrapperEl, 'focus', callbackFn); +} + + +/** + * Disable default dropdown on mousedown. + * @param {Event} ev - The DOM event + */ +Select.prototype.mousedownHandler = function(ev) { + if (ev.button !== 0 || this.useDefault === true) return; + ev.preventDefault(); +} + + +/** + * Handle focus event on select element. + * @param {Event} ev - The DOM event + */ +Select.prototype.focusHandler = function(ev) { + // check flag + if (this.useDefault === true) return; + + var selectEl = this.selectEl, + wrapperEl = this.wrapperEl, + origIndex = selectEl.tabIndex, + keydownFn = util.callback(this, 'keydownHandler'); + + // attach keydown handler + jqLite.on(doc, 'keydown', keydownFn); + + // disable tabfocus once + selectEl.tabIndex = -1; + jqLite.one(wrapperEl, 'blur', function() { + selectEl.tabIndex = origIndex; + jqLite.off(doc, 'keydown', keydownFn); + }); + + // defer focus to parent + wrapperEl.focus(); +} + + +/** + * Handle keydown events on doc + **/ +Select.prototype.keydownHandler = function(ev) { + var keyCode = ev.keyCode; + + // spacebar, down, up + if (keyCode === 32 || keyCode === 38 || keyCode === 40) { + // prevent win scroll + ev.preventDefault(); + + if (this.selectEl.disabled !== true) this.renderMenu(); + } +} + + +/** + * Handle focus event on wrapper element. + */ +Select.prototype.wrapperFocusHandler = function() { + // firefox bugfix + if (this.selectEl.disabled) return this.wrapperEl.blur(); +} + + +/** + * Handle click events on select element. + * @param {Event} ev - The DOM event + */ +Select.prototype.clickHandler = function(ev) { + // only left clicks + if (ev.button !== 0) return; + this.renderMenu(); +} + + +/** + * Render options dropdown. + */ +Select.prototype.renderMenu = function() { + // check and reset flag + if (this.useDefault === true) return this.useDefault = false; + + new Menu(this.wrapperEl, this.selectEl); +} + + +/** + * Creates a new Menu + * @class + */ +function Menu(wrapperEl, selectEl) { + // add scroll lock + util.enableScrollLock(); + + // instance variables + this.origIndex = null; + this.currentIndex = null; + this.selectEl = selectEl; + this.menuEl = this._createMenuEl(wrapperEl, selectEl); + this.clickCallbackFn = util.callback(this, 'clickHandler'); + this.keydownCallbackFn = util.callback(this, 'keydownHandler'); + this.destroyCallbackFn = util.callback(this, 'destroy'); + + // add to DOM + wrapperEl.appendChild(this.menuEl); + jqLite.scrollTop(this.menuEl, this.menuEl._muiScrollTop); + + // blur active element + setTimeout(function() { + // ie10 bugfix + if (doc.activeElement.nodeName.toLowerCase() !== "body") { + doc.activeElement.blur(); + } + }, 0); + + // attach event handlers + jqLite.on(this.menuEl, 'click', this.clickCallbackFn); + jqLite.on(doc, 'keydown', this.keydownCallbackFn); + jqLite.on(win, 'resize', this.destroyCallbackFn); + + // attach event handler after current event loop exits + var fn = this.destroyCallbackFn; + setTimeout(function() {jqLite.on(doc, 'click', fn);}, 0); +} + + +/** + * Create menu element + * @param {Element} selectEl - The select element + */ +Menu.prototype._createMenuEl = function(wrapperEl, selectEl) { + var menuEl = doc.createElement('div'), + optionEls = selectEl.children, + numOptions = optionEls.length, + selectedPos = 0, + optionEl, + itemEl, + i; + + menuEl.className = menuClass; + + // add options + for (i=0; i < numOptions; i++) { + optionEl = optionEls[i]; + + itemEl = doc.createElement('div'); + itemEl.textContent = optionEl.textContent; + itemEl._muiPos = i; + + if (optionEl.selected) { + itemEl.setAttribute('class', selectedClass); + selectedPos = i; + } + + menuEl.appendChild(itemEl); + } + + // save indices + this.origIndex = selectedPos; + this.currentIndex = selectedPos; + + // set position + var props = formlib.getMenuPositionalCSS( + wrapperEl, + numOptions, + selectedPos + ); + + jqLite.css(menuEl, props); + menuEl._muiScrollTop = props.scrollTop; + + return menuEl; +} + + +/** + * Handle keydown events on doc element. + * @param {Event} ev - The DOM event + */ +Menu.prototype.keydownHandler = function(ev) { + var keyCode = ev.keyCode; + + // tab + if (keyCode === 9) return this.destroy(); + + // escape | up | down | enter + if (keyCode === 27 || keyCode === 40 || keyCode === 38 || keyCode === 13) { + ev.preventDefault(); + } + + if (keyCode === 27) { + this.destroy(); + } else if (keyCode === 40) { + this.increment(); + } else if (keyCode === 38) { + this.decrement(); + } else if (keyCode === 13) { + this.selectCurrent(); + this.destroy(); + } +} + + +/** + * Handle click events on menu element. + * @param {Event} ev - The DOM event + */ +Menu.prototype.clickHandler = function(ev) { + // don't allow events to bubble + ev.stopPropagation(); + + var pos = ev.target._muiPos; + + // ignore clicks on non-items + if (pos === undefined) return; + + // select option + this.currentIndex = pos; + this.selectCurrent(); + + // destroy menu + this.destroy(); +} + + +/** + * Increment selected item + */ +Menu.prototype.increment = function() { + if (this.currentIndex === this.menuEl.children.length - 1) return; + + var optionEls = this.menuEl.children; + + jqLite.removeClass(optionEls[this.currentIndex], selectedClass); + this.currentIndex += 1; + jqLite.addClass(optionEls[this.currentIndex], selectedClass); +} + + +/** + * Decrement selected item + */ +Menu.prototype.decrement = function() { + if (this.currentIndex === 0) return; + + var optionEls = this.menuEl.children; + + jqLite.removeClass(optionEls[this.currentIndex], selectedClass); + this.currentIndex -= 1; + jqLite.addClass(optionEls[this.currentIndex], selectedClass); +} + + +/** + * Select current item + */ +Menu.prototype.selectCurrent = function() { + if (this.currentIndex !== this.origIndex) { + var optionEls = this.selectEl.children; + optionEls[this.origIndex].selected = false; + optionEls[this.currentIndex].selected = true; + + // trigger change event + util.dispatchEvent(this.selectEl, 'change'); + } +} + + +/** + * Destroy menu and detach event handlers + */ +Menu.prototype.destroy = function() { + // remove element and focus element + var parentNode = this.menuEl.parentNode; + if (parentNode) parentNode.removeChild(this.menuEl); + + this.selectEl.focus(); + + // remove scroll lock + util.disableScrollLock(); + + // remove event handlers + jqLite.off(this.menuEl, 'click', this.clickCallbackFn); + jqLite.off(doc, 'keydown', this.keydownCallbackFn); + jqLite.off(doc, 'click', this.destroyCallbackFn); + jqLite.off(win, 'resize', this.destroyCallbackFn); +} + + +/** Define module API */ +module.exports = { + /** Initialize module listeners */ + initListeners: function() { + // markup elements available when method is called + var elList = doc.querySelectorAll(cssSelector); + for (var i=elList.length - 1; i >= 0; i--) initialize(elList[i]); + + // listen for new elements + util.onNodeInserted(function(el) { + if (el.tagName === 'SELECT' && + jqLite.hasClass(el.parentNode, wrapperClass)) { + initialize(el); + } + }); + } +}; + +},{"./lib/forms":3,"./lib/jqLite":4,"./lib/util":5}],11:[function(require,module,exports){ +/** + * MUI CSS/JS tabs module + * @module tabs + */ + +'use strict'; + + +var jqLite = require('./lib/jqLite'), + util = require('./lib/util'), + attrKey = 'data-mui-toggle', + attrSelector = '[' + attrKey + '="tab"]', + controlsAttrKey = 'data-mui-controls', + activeClass = 'mui--is-active', + showstartKey = 'mui.tabs.showstart', + showendKey = 'mui.tabs.showend', + hidestartKey = 'mui.tabs.hidestart', + hideendKey = 'mui.tabs.hideend'; + + +/** + * Initialize the toggle element + * @param {Element} toggleEl - The toggle element. + */ +function initialize(toggleEl) { + // check flag + if (toggleEl._muiTabs === true) return; + else toggleEl._muiTabs = true; + + // attach click handler + jqLite.on(toggleEl, 'click', clickHandler); +} + + +/** + * Handle clicks on the toggle element. + * @param {Event} ev - The DOM event. + */ +function clickHandler(ev) { + // only left clicks + if (ev.button !== 0) return; + + var toggleEl = this; + + // exit if toggle element is disabled + if (toggleEl.getAttribute('disabled') !== null) return; + + activateTab(toggleEl); +} + + +/** + * Activate the tab controlled by the toggle element. + * @param {Element} toggleEl - The toggle element. + */ +function activateTab(currToggleEl) { + var currTabEl = currToggleEl.parentNode, + currPaneId = currToggleEl.getAttribute(controlsAttrKey), + currPaneEl = document.getElementById(currPaneId), + prevTabEl, + prevPaneEl, + prevPaneId, + prevToggleEl, + currData, + prevData, + ev1, + ev2, + cssSelector; + + // exit if already active + if (jqLite.hasClass(currTabEl, activeClass)) return; + + // raise error if pane doesn't exist + if (!currPaneEl) util.raiseError('Tab pane "' + currPaneId + '" not found'); + + // get previous pane + prevPaneEl = getActiveSibling(currPaneEl); + prevPaneId = prevPaneEl.id; + + // get previous toggle and tab elements + cssSelector = '[' + controlsAttrKey + '="' + prevPaneId + '"]'; + prevToggleEl = document.querySelectorAll(cssSelector)[0]; + prevTabEl = prevToggleEl.parentNode; + + // define event data + currData = {paneId: currPaneId, relatedPaneId: prevPaneId}; + prevData = {paneId: prevPaneId, relatedPaneId: currPaneId}; + + // dispatch 'hidestart', 'showstart' events + ev1 = util.dispatchEvent(prevToggleEl, hidestartKey, true, true, prevData); + ev2 = util.dispatchEvent(currToggleEl, showstartKey, true, true, currData); + + // let events bubble + setTimeout(function() { + // exit if either event was canceled + if (ev1.defaultPrevented || ev2.defaultPrevented) return; + + // de-activate previous + if (prevTabEl) jqLite.removeClass(prevTabEl, activeClass); + if (prevPaneEl) jqLite.removeClass(prevPaneEl, activeClass); + + // activate current + jqLite.addClass(currTabEl, activeClass); + jqLite.addClass(currPaneEl, activeClass); + + // dispatch 'hideend', 'showend' events + util.dispatchEvent(prevToggleEl, hideendKey, true, false, prevData); + util.dispatchEvent(currToggleEl, showendKey, true, false, currData); + }, 0); +} + + +/** + * Get previous active sibling. + * @param {Element} el - The anchor element. + */ +function getActiveSibling(el) { + var elList = el.parentNode.children, + q = elList.length, + activeEl = null, + tmpEl; + + while (q-- && !activeEl) { + tmpEl = elList[q]; + if (tmpEl !== el && jqLite.hasClass(tmpEl, activeClass)) activeEl = tmpEl + } + + return activeEl; +} + + +/** Define module API */ +module.exports = { + /** Initialize module listeners */ + initListeners: function() { + // markup elements available when method is called + var elList = document.querySelectorAll(attrSelector); + for (var i=elList.length - 1; i >= 0; i--) initialize(elList[i]); + + // TODO: listen for new elements + util.onNodeInserted(function(el) { + if (el.getAttribute(attrKey) === 'tab') initialize(el); + }); + }, + + /** External API */ + api: { + activate: function(paneId) { + var cssSelector = '[' + controlsAttrKey + '=' + paneId + ']', + toggleEl = document.querySelectorAll(cssSelector); + + if (!toggleEl.length) { + util.raiseError('Tab control for pane "' + paneId + '" not found'); + } + + activateTab(toggleEl[0]); + } + } +}; + +},{"./lib/jqLite":4,"./lib/util":5}],12:[function(require,module,exports){ +/** + * MUI CSS/JS form-control module + * @module forms/form-control + */ + +'use strict'; + + +var jqLite = require('./lib/jqLite'), + util = require('./lib/util'), + cssSelector = '.mui-textfield > input, .mui-textfield > textarea', + emptyClass = 'mui--is-empty', + notEmptyClass = 'mui--is-not-empty', + dirtyClass = 'mui--is-dirty', + floatingLabelClass = 'mui-textfield--float-label'; + + +/** + * Initialize input element. + * @param {Element} inputEl - The input element. + */ +function initialize(inputEl) { + // check flag + if (inputEl._muiTextfield === true) return; + else inputEl._muiTextfield = true; + + if (inputEl.value.length) jqLite.addClass(inputEl, notEmptyClass); + else jqLite.addClass(inputEl, emptyClass); + + jqLite.on(inputEl, 'input', inputHandler); + jqLite.on(inputEl, 'change', inputHandler); + + // add dirty class on focus + jqLite.on(inputEl, 'focus', function(){jqLite.addClass(this, dirtyClass);}); +} + + +/** + * Handle input events. + */ +function inputHandler() { + var inputEl = this; + + if (inputEl.value.length) { + jqLite.removeClass(inputEl, emptyClass); + jqLite.addClass(inputEl, notEmptyClass); + } else { + jqLite.removeClass(inputEl, notEmptyClass); + jqLite.addClass(inputEl, emptyClass) + } + + jqLite.addClass(inputEl, dirtyClass); +} + + +/** Define module API */ +module.exports = { + /** Initialize input elements */ + initialize: initialize, + + /** Initialize module listeners */ + initListeners: function() { + var doc = document; + + // markup elements available when method is called + var elList = doc.querySelectorAll(cssSelector); + for (var i=elList.length - 1; i >= 0; i--) initialize(elList[i]); + + // listen for new elements + util.onNodeInserted(function(el) { + if (el.tagName === 'INPUT' || el.tagName === 'TEXTAREA') initialize(el); + }); + + // add transition css for floating labels + setTimeout(function() { + var css = '.mui-textfield.mui-textfield--float-label > label {' + [ + '-webkit-transition', + '-moz-transition', + '-o-transition', + 'transition', + '' + ].join(':all .15s ease-out;') + '}'; + + util.loadStyle(css); + }, 150); + + // pointer-events shim for floating labels + if (util.supportsPointerEvents() === false) { + jqLite.on(document, 'click', function(ev) { + var targetEl = ev.target; + + if (targetEl.tagName === 'LABEL' && + jqLite.hasClass(targetEl.parentNode, floatingLabelClass)) { + var inputEl = targetEl.previousElementSibling; + if (inputEl) inputEl.focus(); + } + }); + } + } +}; + +},{"./lib/jqLite":4,"./lib/util":5}]},{},[1]) \ No newline at end of file diff --git a/platforms/android/assets/www/libs/mui/packages/cdn/js/mui.min.js b/platforms/android/assets/www/libs/mui/packages/cdn/js/mui.min.js new file mode 100644 index 0000000..833d99c --- /dev/null +++ b/platforms/android/assets/www/libs/mui/packages/cdn/js/mui.min.js @@ -0,0 +1 @@ +!function e(t,n,i){function o(l,s){if(!n[l]){if(!t[l]){var a="function"==typeof require&&require;if(!s&&a)return a(l,!0);if(r)return r(l,!0);throw new Error("Cannot find module '"+l+"'")}var c=n[l]={exports:{}};t[l][0].call(c.exports,function(e){var n=t[l][1][e];return o(n?n:e)},c,c.exports,e,t,n,i)}return n[l].exports}for(var r="function"==typeof require&&require,l=0;ld&&(h=s+(n+1)*l-(-1*i+o+r),m=t*l+2*s-p,v=Math.min(h,m)),{height:p+"px",top:i+"px",scrollTop:v}}var o=15,r=32,l=42,s=8;t.exports={getMenuPositionalCSS:i}},{}],4:[function(e,t,n){"use strict";function i(e,t){if(t&&e.setAttribute){for(var n,i=m(e),o=t.split(" "),r=0;r-1:!1}function l(e){if(void 0===e)return"undefined";var t=Object.prototype.toString.call(e);if(0===t.indexOf("[object "))return t.slice(8,-1).toLowerCase();throw new Error("MUI: Could not understand type: "+t)}function s(e,t,n,i){i=void 0===i?!1:i,e.addEventListener(t,n,i);var o=e._muiEventCache=e._muiEventCache||{};o[t]=o[t]||[],o[t].push([n,i])}function a(e,t,n,i){i=void 0===i?!1:i;var o,r,l=e._muiEventCache=e._muiEventCache||{},s=l[t]||[];for(r=s.length;r--;)o=s[r],(void 0===n||o[0]===n&&o[1]===i)&&(s.splice(r,1),e.removeEventListener(t,o[0],o[1]))}function c(e,t,n,i){s(e,t,function o(i){n&&n.apply(this,arguments),a(e,t,o)},i)}function u(e,t){var n=window;if(void 0===t){if(e===n){var i=document.documentElement;return(n.pageXOffset||i.scrollLeft)-(i.clientLeft||0)}return e.scrollLeft}e===n?n.scrollTo(t,d(n)):e.scrollLeft=t}function d(e,t){var n=window;if(void 0===t){if(e===n){var i=document.documentElement;return(n.pageYOffset||i.scrollTop)-(i.clientTop||0)}return e.scrollTop}e===n?n.scrollTo(u(n),t):e.scrollTop=t}function f(e){var t=window,n=e.getBoundingClientRect(),i=d(t),o=u(t);return{top:n.top+i,left:n.left+o,height:n.height,width:n.width}}function p(e){var t=!1,n=!0,i=document,o=i.defaultView,r=i.documentElement,l=i.addEventListener?"addEventListener":"attachEvent",s=i.addEventListener?"removeEventListener":"detachEvent",a=i.addEventListener?"":"on",c=function(n){"readystatechange"==n.type&&"complete"!=i.readyState||(("load"==n.type?o:i)[s](a+n.type,c,!1),!t&&(t=!0)&&e.call(o,n.type||n))},u=function(){try{r.doScroll("left")}catch(e){return void setTimeout(u,50)}c("poll")};if("complete"==i.readyState)e.call(o,"lazy");else{if(i.createEventObject&&r.doScroll){try{n=!o.frameElement}catch(d){}n&&u()}i[l](a+"DOMContentLoaded",c,!1),i[l](a+"readystatechange",c,!1),o[l](a+"load",c,!1)}}function h(e,t){if(t&&e.setAttribute){for(var n,i=m(e),o=t.split(" "),r=0;r=0;)i=i.replace(" "+n+" "," ");e.setAttribute("class",i.trim())}}function m(e){var t=(e.getAttribute("class")||"").replace(/[\n\t]/g,"");return" "+t+" "}function v(e){return e.replace(g,function(e,t,n,i){return i?n.toUpperCase():n}).replace(E,"Moz$1")}function b(e,t,n){var i;return i=n.getPropertyValue(t),""!==i||e.ownerDocument||(i=e.style[v(t)]),i}var y,g=/([\:\-\_]+(.))/g,E=/^moz([A-Z])/;y={multiple:!0,selected:!0,checked:!0,disabled:!0,readonly:!0,required:!0,open:!0},t.exports={addClass:i,css:o,hasClass:r,off:a,offset:f,on:s,one:c,ready:p,removeClass:h,type:l,scrollLeft:u,scrollTop:d}},{}],5:[function(e,t,n){"use strict";function i(){var e=window;if(v.debug&&"undefined"!=typeof e.console)try{e.console.log.apply(e.console,arguments)}catch(t){var n=Array.prototype.slice.call(arguments);e.console.log(n.join("\n"))}}function o(e){var t,n=document;t=n.head||n.getElementsByTagName("head")[0]||n.documentElement;var i=n.createElement("style");return i.type="text/css",i.styleSheet?i.styleSheet.cssText=e:i.appendChild(n.createTextNode(e)),t.insertBefore(i,t.firstChild),i}function r(e,t){if(!t)throw new Error("MUI: "+e);"undefined"!=typeof console&&console.error("MUI Warning: "+e)}function l(e){if(y.push(e),void 0===y._initialized){var t=document;b.on(t,"animationstart",s),b.on(t,"mozAnimationStart",s),b.on(t,"webkitAnimationStart",s),y._initialized=!0}}function s(e){if("mui-node-inserted"===e.animationName)for(var t=e.target,n=y.length-1;n>=0;n--)y[n](t)}function a(e){var t="";for(var n in e)t+=e[n]?n+" ":"";return t.trim()}function c(){if(void 0!==m)return m;var e=document.createElement("x");return e.style.cssText="pointer-events:auto",m="auto"===e.style.pointerEvents}function u(e,t){return function(){e[t].apply(e,arguments)}}function d(e,t,n,i,o){var r,l=document.createEvent("HTMLEvents"),n=void 0!==n?n:!0,i=void 0!==i?i:!0;if(l.initEvent(t,n,i),o)for(r in o)l[r]=o[r];return e&&e.dispatchEvent(l),l}function f(){if(g+=1,1===g){var e=window,t=document;h={left:b.scrollLeft(e),top:b.scrollTop(e)},b.addClass(t.body,E),e.scrollTo(h.left,h.top)}}function p(){if(0!==g&&(g-=1,0===g)){var e=window,t=document;b.removeClass(t.body,E),e.scrollTo(h.left,h.top)}}var h,m,v=e("../config"),b=e("./jqLite"),y=[],g=0,E="mui-body--scroll-lock";t.exports={callback:u,classNames:a,disableScrollLock:p,dispatchEvent:d,enableScrollLock:f,log:i,loadStyle:o,onNodeInserted:l,raiseError:r,supportsPointerEvents:c}},{"../config":2,"./jqLite":4}],6:[function(e,t,n){"use strict";function i(e){e._muiDropdown!==!0&&(e._muiDropdown=!0,e.hasAttribute("type")||(e.type="button"),l.on(e,"click",o))}function o(e){if(0===e.button){var t=this;null===t.getAttribute("disabled")&&r(t)}}function r(e){function t(){l.removeClass(o,u),l.off(r,"click",t)}function n(){var n=i.getBoundingClientRect(),s=e.getBoundingClientRect(),a=s.top-n.top+s.height;l.css(o,"top",a+"px"),l.addClass(o,u),setTimeout(function(){l.on(r,"click",t)},0)}var i=e.parentNode,o=e.nextElementSibling,r=i.ownerDocument;return o&&l.hasClass(o,d)?void(l.hasClass(o,u)?t():n()):s.raiseError("Dropdown menu element not found")}var l=e("./lib/jqLite"),s=e("./lib/util"),a="data-mui-toggle",c='[data-mui-toggle="dropdown"]',u="mui--is-open",d="mui-dropdown__menu";t.exports={initListeners:function(){for(var e=document,t=e.querySelectorAll(c),n=t.length-1;n>=0;n--)i(t[n]);s.onNodeInserted(function(e){"dropdown"===e.getAttribute(a)&&i(e)})}}},{"./lib/jqLite":4,"./lib/util":5}],7:[function(e,t,n){t.exports=e(4)},{}],8:[function(e,t,n){"use strict";function i(e){var t;if("on"===e){for(var n,i,l,s=arguments.length-1;s>0;s--)n=arguments[s],"object"===p.type(n)&&(i=n),n instanceof Element&&1===n.nodeType&&(l=n);i=i||{},void 0===i.keyboard&&(i.keyboard=!0),void 0===i["static"]&&(i["static"]=!1),t=o(i,l)}else"off"===e?t=r():f.raiseError("Expecting 'on' or 'off'");return t}function o(e,t){var n=document.body,i=document.getElementById(h);if(f.enableScrollLock(),i){for(;i.firstChild;)i.removeChild(i.firstChild);t&&i.appendChild(t)}else i=document.createElement("div"),i.setAttribute("id",h),t&&i.appendChild(t),n.appendChild(i);return m.test(navigator.userAgent)&&p.css(i,"cursor","pointer"),e.keyboard?l():s(),e["static"]?u(i):c(i),i.muiOptions=e,i}function r(){var e,t=document.getElementById(h);if(t){for(;t.firstChild;)t.removeChild(t.firstChild);t.parentNode.removeChild(t),e=t.muiOptions.onclose,u(t)}return f.disableScrollLock(),s(),e&&e(),t}function l(){p.on(document,"keyup",a)}function s(){p.off(document,"keyup",a)}function a(e){27===e.keyCode&&r()}function c(e){p.on(e,"click",d)}function u(e){p.off(e,"click",d)}function d(e){e.target.id===h&&r()}var f=e("./lib/util"),p=e("./lib/jqLite"),h="mui-overlay",m=/(iPad|iPhone|iPod)/g;t.exports=i},{"./lib/jqLite":4,"./lib/util":5}],9:[function(e,t,n){"use strict";function i(e){e._muiRipple!==!0&&(e._muiRipple=!0,"INPUT"!==e.tagName&&(r.on(e,"touchstart",o),r.on(e,"mousedown",o)))}function o(e){if(0===e.button){var t=this;if(t.disabled!==!0&&t.touchFlag!==!0){t.touchFlag=!0,setTimeout(function(){t.touchFlag=!1},100);var n=document.createElement("div");n.className=c;var i,o,l=r.offset(t),s=e.pageX-l.left,u=e.pageY-l.top;i=r.hasClass(t,a)?l.height/2:l.height,o=i/2,r.css(n,{height:i+"px",width:i+"px",top:u-o+"px",left:s-o+"px"}),t.appendChild(n),window.setTimeout(function(){var e=n.parentNode;e&&e.removeChild(n)},2e3)}}}var r=e("./lib/jqLite"),l=e("./lib/util"),s="mui-btn",a="mui-btn--fab",c="mui-ripple-effect";t.exports={initListeners:function(){for(var e=document,t=e.getElementsByClassName(s),n=t.length-1;n>=0;n--)i(t[n]);l.onNodeInserted(function(e){r.hasClass(e,s)&&i(e)})}}},{"./lib/jqLite":4,"./lib/util":5}],10:[function(e,t,n){"use strict";function i(e){e._muiSelect!==!0&&(e._muiSelect=!0,"ontouchstart"in p.documentElement||new o(e))}function o(e){this.selectEl=e,this.wrapperEl=e.parentNode,this.useDefault=!1,l.on(e,"mousedown",s.callback(this,"mousedownHandler")),l.on(e,"focus",s.callback(this,"focusHandler")),l.on(e,"click",s.callback(this,"clickHandler")),this.wrapperEl.tabIndex=-1;var t=s.callback(this,"wrapperFocusHandler");l.on(this.wrapperEl,"focus",t)}function r(e,t){s.enableScrollLock(),this.origIndex=null,this.currentIndex=null,this.selectEl=t,this.menuEl=this._createMenuEl(e,t),this.clickCallbackFn=s.callback(this,"clickHandler"),this.keydownCallbackFn=s.callback(this,"keydownHandler"),this.destroyCallbackFn=s.callback(this,"destroy"),e.appendChild(this.menuEl),l.scrollTop(this.menuEl,this.menuEl._muiScrollTop),setTimeout(function(){"body"!==p.activeElement.nodeName.toLowerCase()&&p.activeElement.blur()},0),l.on(this.menuEl,"click",this.clickCallbackFn),l.on(p,"keydown",this.keydownCallbackFn),l.on(h,"resize",this.destroyCallbackFn);var n=this.destroyCallbackFn;setTimeout(function(){l.on(p,"click",n)},0)}var l=e("./lib/jqLite"),s=e("./lib/util"),a=e("./lib/forms"),c="mui-select",u=".mui-select > select",d="mui-select__menu",f="mui--is-selected",p=document,h=window;o.prototype.mousedownHandler=function(e){0===e.button&&this.useDefault!==!0&&e.preventDefault()},o.prototype.focusHandler=function(e){if(this.useDefault!==!0){var t=this.selectEl,n=this.wrapperEl,i=t.tabIndex,o=s.callback(this,"keydownHandler");l.on(p,"keydown",o),t.tabIndex=-1,l.one(n,"blur",function(){t.tabIndex=i,l.off(p,"keydown",o)}),n.focus()}},o.prototype.keydownHandler=function(e){var t=e.keyCode;32!==t&&38!==t&&40!==t||(e.preventDefault(),this.selectEl.disabled!==!0&&this.renderMenu())},o.prototype.wrapperFocusHandler=function(){return this.selectEl.disabled?this.wrapperEl.blur():void 0},o.prototype.clickHandler=function(e){0===e.button&&this.renderMenu()},o.prototype.renderMenu=function(){return this.useDefault===!0?this.useDefault=!1:void new r(this.wrapperEl,this.selectEl)},r.prototype._createMenuEl=function(e,t){var n,i,o,r=p.createElement("div"),s=t.children,c=s.length,u=0;for(r.className=d,o=0;c>o;o++)n=s[o],i=p.createElement("div"),i.textContent=n.textContent,i._muiPos=o,n.selected&&(i.setAttribute("class",f),u=o),r.appendChild(i);this.origIndex=u,this.currentIndex=u;var h=a.getMenuPositionalCSS(e,c,u);return l.css(r,h),r._muiScrollTop=h.scrollTop,r},r.prototype.keydownHandler=function(e){var t=e.keyCode;return 9===t?this.destroy():(27!==t&&40!==t&&38!==t&&13!==t||e.preventDefault(),void(27===t?this.destroy():40===t?this.increment():38===t?this.decrement():13===t&&(this.selectCurrent(),this.destroy())))},r.prototype.clickHandler=function(e){e.stopPropagation();var t=e.target._muiPos;void 0!==t&&(this.currentIndex=t,this.selectCurrent(),this.destroy())},r.prototype.increment=function(){if(this.currentIndex!==this.menuEl.children.length-1){var e=this.menuEl.children;l.removeClass(e[this.currentIndex],f),this.currentIndex+=1,l.addClass(e[this.currentIndex],f)}},r.prototype.decrement=function(){if(0!==this.currentIndex){var e=this.menuEl.children;l.removeClass(e[this.currentIndex],f),this.currentIndex-=1,l.addClass(e[this.currentIndex],f)}},r.prototype.selectCurrent=function(){if(this.currentIndex!==this.origIndex){var e=this.selectEl.children;e[this.origIndex].selected=!1,e[this.currentIndex].selected=!0,s.dispatchEvent(this.selectEl,"change")}},r.prototype.destroy=function(){var e=this.menuEl.parentNode;e&&e.removeChild(this.menuEl),this.selectEl.focus(),s.disableScrollLock(),l.off(this.menuEl,"click",this.clickCallbackFn),l.off(p,"keydown",this.keydownCallbackFn),l.off(p,"click",this.destroyCallbackFn),l.off(h,"resize",this.destroyCallbackFn)},t.exports={initListeners:function(){for(var e=p.querySelectorAll(u),t=e.length-1;t>=0;t--)i(e[t]);s.onNodeInserted(function(e){"SELECT"===e.tagName&&l.hasClass(e.parentNode,c)&&i(e)})}}},{"./lib/forms":3,"./lib/jqLite":4,"./lib/util":5}],11:[function(e,t,n){"use strict";function i(e){e._muiTabs!==!0&&(e._muiTabs=!0,s.on(e,"click",o))}function o(e){if(0===e.button){var t=this;null===t.getAttribute("disabled")&&r(t)}}function r(e){var t,n,i,o,r,c,u,b,y,g=e.parentNode,E=e.getAttribute(d),C=document.getElementById(E);s.hasClass(g,f)||(C||a.raiseError('Tab pane "'+E+'" not found'),n=l(C),i=n.id,y="["+d+'="'+i+'"]',o=document.querySelectorAll(y)[0],t=o.parentNode,r={paneId:E,relatedPaneId:i},c={paneId:i,relatedPaneId:E},u=a.dispatchEvent(o,m,!0,!0,c),b=a.dispatchEvent(e,p,!0,!0,r),setTimeout(function(){u.defaultPrevented||b.defaultPrevented||(t&&s.removeClass(t,f),n&&s.removeClass(n,f),s.addClass(g,f),s.addClass(C,f),a.dispatchEvent(o,v,!0,!1,c),a.dispatchEvent(e,h,!0,!1,r))},0))}function l(e){for(var t,n=e.parentNode.children,i=n.length,o=null;i--&&!o;)t=n[i],t!==e&&s.hasClass(t,f)&&(o=t);return o}var s=e("./lib/jqLite"),a=e("./lib/util"),c="data-mui-toggle",u="["+c+'="tab"]',d="data-mui-controls",f="mui--is-active",p="mui.tabs.showstart",h="mui.tabs.showend",m="mui.tabs.hidestart",v="mui.tabs.hideend";t.exports={initListeners:function(){for(var e=document.querySelectorAll(u),t=e.length-1;t>=0;t--)i(e[t]);a.onNodeInserted(function(e){"tab"===e.getAttribute(c)&&i(e)})},api:{activate:function(e){var t="["+d+"="+e+"]",n=document.querySelectorAll(t);n.length||a.raiseError('Tab control for pane "'+e+'" not found'),r(n[0])}}}},{"./lib/jqLite":4,"./lib/util":5}],12:[function(e,t,n){"use strict";function i(e){e._muiTextfield!==!0&&(e._muiTextfield=!0,e.value.length?r.addClass(e,c):r.addClass(e,a),r.on(e,"input",o),r.on(e,"change",o),r.on(e,"focus",function(){r.addClass(this,u)}))}function o(){var e=this;e.value.length?(r.removeClass(e,a),r.addClass(e,c)):(r.removeClass(e,c),r.addClass(e,a)),r.addClass(e,u)}var r=e("./lib/jqLite"),l=e("./lib/util"),s=".mui-textfield > input, .mui-textfield > textarea",a="mui--is-empty",c="mui--is-not-empty",u="mui--is-dirty",d="mui-textfield--float-label";t.exports={initialize:i,initListeners:function(){for(var e=document,t=e.querySelectorAll(s),n=t.length-1;n>=0;n--)i(t[n]);l.onNodeInserted(function(e){"INPUT"!==e.tagName&&"TEXTAREA"!==e.tagName||i(e)}),setTimeout(function(){var e=".mui-textfield.mui-textfield--float-label > label {"+["-webkit-transition","-moz-transition","-o-transition","transition",""].join(":all .15s ease-out;")+"}";l.loadStyle(e)},150),l.supportsPointerEvents()===!1&&r.on(document,"click",function(e){var t=e.target;if("LABEL"===t.tagName&&r.hasClass(t.parentNode,d)){var n=t.previousElementSibling;n&&n.focus()}})}}},{"./lib/jqLite":4,"./lib/util":5}]},{},[1]); \ No newline at end of file diff --git a/platforms/android/assets/www/libs/mui/packages/cdn/react/mui-react.js b/platforms/android/assets/www/libs/mui/packages/cdn/react/mui-react.js new file mode 100644 index 0000000..aefaa3b --- /dev/null +++ b/platforms/android/assets/www/libs/mui/packages/cdn/react/mui-react.js @@ -0,0 +1,3208 @@ +(function (global) { + var babelHelpers = global.babelHelpers = {}; + + babelHelpers.classCallCheck = function (instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + }; + + babelHelpers.createClass = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; + }(); + + babelHelpers.extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; + }; + + babelHelpers.inherits = function (subClass, superClass) { + if (typeof superClass !== "function" && superClass !== null) { + throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); + } + + subClass.prototype = Object.create(superClass && superClass.prototype, { + constructor: { + value: subClass, + enumerable: false, + writable: true, + configurable: true + } + }); + if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; + }; + + babelHelpers.interopRequireDefault = function (obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + }; + + babelHelpers.interopRequireWildcard = function (obj) { + if (obj && obj.__esModule) { + return obj; + } else { + var newObj = {}; + + if (obj != null) { + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; + } + } + + newObj.default = obj; + return newObj; + } + }; + + babelHelpers.objectWithoutProperties = function (obj, keys) { + var target = {}; + + for (var i in obj) { + if (keys.indexOf(i) >= 0) continue; + if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; + target[i] = obj[i]; + } + + return target; + }; + + babelHelpers.possibleConstructorReturn = function (self, call) { + if (!self) { + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + } + + return call && (typeof call === "object" || typeof call === "function") ? call : self; + }; +})(typeof global === "undefined" ? self : global);(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o viewHeight) { + scrollIdeal = menuPadding + (currentIndex + 1) * optionHeight - (-1 * top + wrapperPadding + inputHeight); + scrollMax = numOptions * optionHeight + 2 * menuPadding - height; + scrollTop = Math.min(scrollIdeal, scrollMax); + } + + return { + 'height': height + 'px', + 'top': top + 'px', + 'scrollTop': scrollTop + }; +} + +/** Define module API */ +module.exports = { + getMenuPositionalCSS: getMenuPositionalCSSFn +}; + +},{}],4:[function(require,module,exports){ +/** + * MUI CSS/JS jqLite module + * @module lib/jqLite + */ + +'use strict'; + +/** + * Add a class to an element. + * @param {Element} element - The DOM element. + * @param {string} cssClasses - Space separated list of class names. + */ + +function jqLiteAddClass(element, cssClasses) { + if (!cssClasses || !element.setAttribute) return; + + var existingClasses = _getExistingClasses(element), + splitClasses = cssClasses.split(' '), + cssClass; + + for (var i = 0; i < splitClasses.length; i++) { + cssClass = splitClasses[i].trim(); + if (existingClasses.indexOf(' ' + cssClass + ' ') === -1) { + existingClasses += cssClass + ' '; + } + } + + element.setAttribute('class', existingClasses.trim()); +} + +/** + * Get or set CSS properties. + * @param {Element} element - The DOM element. + * @param {string} [name] - The property name. + * @param {string} [value] - The property value. + */ +function jqLiteCss(element, name, value) { + // Return full style object + if (name === undefined) { + return getComputedStyle(element); + } + + var nameType = jqLiteType(name); + + // Set multiple values + if (nameType === 'object') { + for (var key in name) { + element.style[_camelCase(key)] = name[key]; + }return; + } + + // Set a single value + if (nameType === 'string' && value !== undefined) { + element.style[_camelCase(name)] = value; + } + + var styleObj = getComputedStyle(element), + isArray = jqLiteType(name) === 'array'; + + // Read single value + if (!isArray) return _getCurrCssProp(element, name, styleObj); + + // Read multiple values + var outObj = {}, + key; + + for (var i = 0; i < name.length; i++) { + key = name[i]; + outObj[key] = _getCurrCssProp(element, key, styleObj); + } + + return outObj; +} + +/** + * Check if element has class. + * @param {Element} element - The DOM element. + * @param {string} cls - The class name string. + */ +function jqLiteHasClass(element, cls) { + if (!cls || !element.getAttribute) return false; + return _getExistingClasses(element).indexOf(' ' + cls + ' ') > -1; +} + +/** + * Return the type of a variable. + * @param {} somevar - The JavaScript variable. + */ +function jqLiteType(somevar) { + // handle undefined + if (somevar === undefined) return 'undefined'; + + // handle others (of type [object ]) + var typeStr = Object.prototype.toString.call(somevar); + if (typeStr.indexOf('[object ') === 0) { + return typeStr.slice(8, -1).toLowerCase(); + } else { + throw new Error("MUI: Could not understand type: " + typeStr); + } +} + +/** + * Attach an event handler to a DOM element + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOn(element, type, callback, useCapture) { + useCapture = useCapture === undefined ? false : useCapture; + + // add to DOM + element.addEventListener(type, callback, useCapture); + + // add to cache + var cache = element._muiEventCache = element._muiEventCache || {}; + cache[type] = cache[type] || []; + cache[type].push([callback, useCapture]); +} + +/** + * Remove an event handler from a DOM element + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOff(element, type, callback, useCapture) { + useCapture = useCapture === undefined ? false : useCapture; + + // remove from cache + var cache = element._muiEventCache = element._muiEventCache || {}, + argsList = cache[type] || [], + args, + i; + + i = argsList.length; + while (i--) { + args = argsList[i]; + + // remove all events if callback is undefined + if (callback === undefined || args[0] === callback && args[1] === useCapture) { + + // remove from cache + argsList.splice(i, 1); + + // remove from DOM + element.removeEventListener(type, args[0], args[1]); + } + } +} + +/** + * Attach an event hander which will only execute once + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOne(element, type, callback, useCapture) { + jqLiteOn(element, type, function onFn(ev) { + // execute callback + if (callback) callback.apply(this, arguments); + + // remove wrapper + jqLiteOff(element, type, onFn); + }, useCapture); +} + +/** + * Get or set horizontal scroll position + * @param {Element} element - The DOM element + * @param {number} [value] - The scroll position + */ +function jqLiteScrollLeft(element, value) { + var win = window; + + // get + if (value === undefined) { + if (element === win) { + var docEl = document.documentElement; + return (win.pageXOffset || docEl.scrollLeft) - (docEl.clientLeft || 0); + } else { + return element.scrollLeft; + } + } + + // set + if (element === win) win.scrollTo(value, jqLiteScrollTop(win));else element.scrollLeft = value; +} + +/** + * Get or set vertical scroll position + * @param {Element} element - The DOM element + * @param {number} value - The scroll position + */ +function jqLiteScrollTop(element, value) { + var win = window; + + // get + if (value === undefined) { + if (element === win) { + var docEl = document.documentElement; + return (win.pageYOffset || docEl.scrollTop) - (docEl.clientTop || 0); + } else { + return element.scrollTop; + } + } + + // set + if (element === win) win.scrollTo(jqLiteScrollLeft(win), value);else element.scrollTop = value; +} + +/** + * Return object representing top/left offset and element height/width. + * @param {Element} element - The DOM element. + */ +function jqLiteOffset(element) { + var win = window, + rect = element.getBoundingClientRect(), + scrollTop = jqLiteScrollTop(win), + scrollLeft = jqLiteScrollLeft(win); + + return { + top: rect.top + scrollTop, + left: rect.left + scrollLeft, + height: rect.height, + width: rect.width + }; +} + +/** + * Attach a callback to the DOM ready event listener + * @param {Function} fn - The callback function. + */ +function jqLiteReady(fn) { + var done = false, + top = true, + doc = document, + win = doc.defaultView, + root = doc.documentElement, + add = doc.addEventListener ? 'addEventListener' : 'attachEvent', + rem = doc.addEventListener ? 'removeEventListener' : 'detachEvent', + pre = doc.addEventListener ? '' : 'on'; + + var init = function init(e) { + if (e.type == 'readystatechange' && doc.readyState != 'complete') { + return; + } + + (e.type == 'load' ? win : doc)[rem](pre + e.type, init, false); + if (!done && (done = true)) fn.call(win, e.type || e); + }; + + var poll = function poll() { + try { + root.doScroll('left'); + } catch (e) { + setTimeout(poll, 50);return; + } + init('poll'); + }; + + if (doc.readyState == 'complete') { + fn.call(win, 'lazy'); + } else { + if (doc.createEventObject && root.doScroll) { + try { + top = !win.frameElement; + } catch (e) {} + if (top) poll(); + } + doc[add](pre + 'DOMContentLoaded', init, false); + doc[add](pre + 'readystatechange', init, false); + win[add](pre + 'load', init, false); + } +} + +/** + * Remove classes from a DOM element + * @param {Element} element - The DOM element. + * @param {string} cssClasses - Space separated list of class names. + */ +function jqLiteRemoveClass(element, cssClasses) { + if (!cssClasses || !element.setAttribute) return; + + var existingClasses = _getExistingClasses(element), + splitClasses = cssClasses.split(' '), + cssClass; + + for (var i = 0; i < splitClasses.length; i++) { + cssClass = splitClasses[i].trim(); + while (existingClasses.indexOf(' ' + cssClass + ' ') >= 0) { + existingClasses = existingClasses.replace(' ' + cssClass + ' ', ' '); + } + } + + element.setAttribute('class', existingClasses.trim()); +} + +// ------------------------------ +// Utilities +// ------------------------------ +var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g, + MOZ_HACK_REGEXP = /^moz([A-Z])/, + ESCAPE_REGEXP = /([.*+?^=!:${}()|\[\]\/\\])/g, + BOOLEAN_ATTRS; + +BOOLEAN_ATTRS = { + multiple: true, + selected: true, + checked: true, + disabled: true, + readonly: true, + required: true, + open: true +}; + +function _getExistingClasses(element) { + var classes = (element.getAttribute('class') || '').replace(/[\n\t]/g, ''); + return ' ' + classes + ' '; +} + +function _camelCase(name) { + return name.replace(SPECIAL_CHARS_REGEXP, function (_, separator, letter, offset) { + return offset ? letter.toUpperCase() : letter; + }).replace(MOZ_HACK_REGEXP, 'Moz$1'); +} + +function _escapeRegExp(string) { + return string.replace(ESCAPE_REGEXP, "\\$1"); +} + +function _getCurrCssProp(elem, name, computed) { + var ret; + + // try computed style + ret = computed.getPropertyValue(name); + + // try style attribute (if element is not attached to document) + if (ret === '' && !elem.ownerDocument) ret = elem.style[_camelCase(name)]; + + return ret; +} + +/** + * Module API + */ +module.exports = { + /** Add classes */ + addClass: jqLiteAddClass, + + /** Get or set CSS properties */ + css: jqLiteCss, + + /** Check for class */ + hasClass: jqLiteHasClass, + + /** Remove event handlers */ + off: jqLiteOff, + + /** Return offset values */ + offset: jqLiteOffset, + + /** Add event handlers */ + on: jqLiteOn, + + /** Add an execute-once event handler */ + one: jqLiteOne, + + /** DOM ready event handler */ + ready: jqLiteReady, + + /** Remove classes */ + removeClass: jqLiteRemoveClass, + + /** Check JavaScript variable instance type */ + type: jqLiteType, + + /** Get or set horizontal scroll position */ + scrollLeft: jqLiteScrollLeft, + + /** Get or set vertical scroll position */ + scrollTop: jqLiteScrollTop +}; + +},{}],5:[function(require,module,exports){ +/** + * MUI CSS/JS utilities module + * @module lib/util + */ + +'use strict'; + +var config = require('../config'), + jqLite = require('./jqLite'), + nodeInsertedCallbacks = [], + scrollLock = 0, + scrollLockCls = 'mui-body--scroll-lock', + scrollLockPos, + _supportsPointerEvents; + +/** + * Logging function + */ +function logFn() { + var win = window; + + if (config.debug && typeof win.console !== "undefined") { + try { + win.console.log.apply(win.console, arguments); + } catch (a) { + var e = Array.prototype.slice.call(arguments); + win.console.log(e.join("\n")); + } + } +} + +/** + * Load CSS text in new stylesheet + * @param {string} cssText - The css text. + */ +function loadStyleFn(cssText) { + var doc = document, + head; + + // copied from jQuery + head = doc.head || doc.getElementsByTagName('head')[0] || doc.documentElement; + + var e = doc.createElement('style'); + e.type = 'text/css'; + + if (e.styleSheet) e.styleSheet.cssText = cssText;else e.appendChild(doc.createTextNode(cssText)); + + // add to document + head.insertBefore(e, head.firstChild); + + return e; +} + +/** + * Raise an error + * @param {string} msg - The error message. + */ +function raiseErrorFn(msg, useConsole) { + if (useConsole) { + if (typeof console !== 'undefined') console.error('MUI Warning: ' + msg); + } else { + throw new Error('MUI: ' + msg); + } +} + +/** + * Register callbacks on muiNodeInserted event + * @param {function} callbackFn - The callback function. + */ +function onNodeInsertedFn(callbackFn) { + nodeInsertedCallbacks.push(callbackFn); + + // initalize listeners + if (nodeInsertedCallbacks._initialized === undefined) { + var doc = document; + + jqLite.on(doc, 'animationstart', animationHandlerFn); + jqLite.on(doc, 'mozAnimationStart', animationHandlerFn); + jqLite.on(doc, 'webkitAnimationStart', animationHandlerFn); + + nodeInsertedCallbacks._initialized = true; + } +} + +/** + * Execute muiNodeInserted callbacks + * @param {Event} ev - The DOM event. + */ +function animationHandlerFn(ev) { + // check animation name + if (ev.animationName !== 'mui-node-inserted') return; + + var el = ev.target; + + // iterate through callbacks + for (var i = nodeInsertedCallbacks.length - 1; i >= 0; i--) { + nodeInsertedCallbacks[i](el); + } +} + +/** + * Convert Classname object, with class as key and true/false as value, to an + * class string. + * @param {Object} classes The classes + * @return {String} class string + */ +function classNamesFn(classes) { + var cs = ''; + for (var i in classes) { + cs += classes[i] ? i + ' ' : ''; + } + return cs.trim(); +} + +/** + * Check if client supports pointer events. + */ +function supportsPointerEventsFn() { + // check cache + if (_supportsPointerEvents !== undefined) return _supportsPointerEvents; + + var element = document.createElement('x'); + element.style.cssText = 'pointer-events:auto'; + _supportsPointerEvents = element.style.pointerEvents === 'auto'; + return _supportsPointerEvents; +} + +/** + * Create callback closure. + * @param {Object} instance - The object instance. + * @param {String} funcName - The name of the callback function. + */ +function callbackFn(instance, funcName) { + return function () { + instance[funcName].apply(instance, arguments); + }; +} + +/** + * Dispatch event. + * @param {Element} element - The DOM element. + * @param {String} eventType - The event type. + * @param {Boolean} bubbles=true - If true, event bubbles. + * @param {Boolean} cancelable=true = If true, event is cancelable + * @param {Object} [data] - Data to add to event object + */ +function dispatchEventFn(element, eventType, bubbles, cancelable, data) { + var ev = document.createEvent('HTMLEvents'), + bubbles = bubbles !== undefined ? bubbles : true, + cancelable = cancelable !== undefined ? cancelable : true, + k; + + ev.initEvent(eventType, bubbles, cancelable); + + // add data to event object + if (data) for (k in data) { + ev[k] = data[k]; + } // dispatch + if (element) element.dispatchEvent(ev); + + return ev; +} + +/** + * Turn on window scroll lock. + */ +function enableScrollLockFn() { + // increment counter + scrollLock += 1; + + // add lock + if (scrollLock === 1) { + var win = window, + doc = document; + + scrollLockPos = { left: jqLite.scrollLeft(win), top: jqLite.scrollTop(win) }; + jqLite.addClass(doc.body, scrollLockCls); + win.scrollTo(scrollLockPos.left, scrollLockPos.top); + } +} + +/** + * Turn off window scroll lock. + */ +function disableScrollLockFn() { + // ignore + if (scrollLock === 0) return; + + // decrement counter + scrollLock -= 1; + + // remove lock + if (scrollLock === 0) { + var win = window, + doc = document; + + jqLite.removeClass(doc.body, scrollLockCls); + win.scrollTo(scrollLockPos.left, scrollLockPos.top); + } +} + +/** + * Define the module API + */ +module.exports = { + /** Create callback closures */ + callback: callbackFn, + + /** Classnames object to string */ + classNames: classNamesFn, + + /** Disable scroll lock */ + disableScrollLock: disableScrollLockFn, + + /** Dispatch event */ + dispatchEvent: dispatchEventFn, + + /** Enable scroll lock */ + enableScrollLock: enableScrollLockFn, + + /** Log messages to the console when debug is turned on */ + log: logFn, + + /** Load CSS text as new stylesheet */ + loadStyle: loadStyleFn, + + /** Register muiNodeInserted handler */ + onNodeInserted: onNodeInsertedFn, + + /** Raise MUI error */ + raiseError: raiseErrorFn, + + /** Support Pointer Events check */ + supportsPointerEvents: supportsPointerEventsFn +}; + +},{"../config":2,"./jqLite":4}],6:[function(require,module,exports){ +/** + * MUI React helpers + * @module react/_helpers + */ + +'use strict'; + +var controlledMessage = 'You provided a `value` prop to a form field ' + 'without an `OnChange` handler. Please see React documentation on ' + 'controlled components'; + +module.exports = { controlledMessage: controlledMessage }; + +},{}],7:[function(require,module,exports){ +/** + * MUI React button module + * @module react/button + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var _jqLite = require('../js/lib/jqLite'); + +var jqLite = babelHelpers.interopRequireWildcard(_jqLite); + +var _util = require('../js/lib/util'); + +var util = babelHelpers.interopRequireWildcard(_util); + + +var rippleIter = 0; + +var PropTypes = _react2.default.PropTypes, + btnClass = 'mui-btn', + rippleClass = 'mui-ripple-effect', + btnAttrs = { color: 1, variant: 1, size: 1 }; + +/** + * Button element + * @class + */ + +var Button = function (_React$Component) { + babelHelpers.inherits(Button, _React$Component); + + function Button() { + var _Object$getPrototypeO; + + var _temp, _this, _ret; + + babelHelpers.classCallCheck(this, Button); + + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + return _ret = (_temp = (_this = babelHelpers.possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(Button)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.state = { + ripples: {} + }, _temp), babelHelpers.possibleConstructorReturn(_this, _ret); + } + + babelHelpers.createClass(Button, [{ + key: 'componentDidMount', + value: function componentDidMount() { + // disable MUI js + var el = this.refs.buttonEl; + el._muiDropdown = true; + el._muiRipple = true; + } + }, { + key: 'onClick', + value: function onClick(ev) { + var onClickFn = this.props.onClick; + onClickFn && onClickFn(ev); + } + }, { + key: 'onMouseDown', + value: function onMouseDown(ev) { + // get (x, y) position of click + var offset = jqLite.offset(this.refs.buttonEl); + + // choose diameter + var diameter = offset.height; + if (this.props.variant === 'fab') diameter = diameter / 2; + + // add ripple to state + var ripples = this.state.ripples; + var key = Date.now(); + + ripples[key] = { + xPos: ev.pageX - offset.left, + yPos: ev.pageY - offset.top, + diameter: diameter, + teardownFn: this.teardownRipple.bind(this, key) + }; + + this.setState({ ripples: ripples }); + } + }, { + key: 'onTouchStart', + value: function onTouchStart(ev) {} + }, { + key: 'teardownRipple', + value: function teardownRipple(key) { + // delete ripple + var ripples = this.state.ripples; + delete ripples[key]; + this.setState({ ripples: ripples }); + } + }, { + key: 'render', + value: function render() { + var cls = btnClass, + k = void 0, + v = void 0; + + var ripples = this.state.ripples; + + // button attributes + for (k in btnAttrs) { + v = this.props[k]; + if (v !== 'default') cls += ' ' + btnClass + '--' + v; + } + + return _react2.default.createElement( + 'button', + babelHelpers.extends({}, this.props, { + ref: 'buttonEl', + className: cls + ' ' + this.props.className, + onClick: this.onClick.bind(this), + onMouseDown: this.onMouseDown.bind(this) + }), + this.props.children, + Object.keys(ripples).map(function (k, i) { + var v = ripples[k]; + + return _react2.default.createElement(Ripple, { + key: k, + xPos: v.xPos, + yPos: v.yPos, + diameter: v.diameter, + onTeardown: v.teardownFn + }); + }) + ); + } + }]); + return Button; +}(_react2.default.Component); + +/** + * Ripple component + * @class + */ + + +Button.propTypes = { + color: PropTypes.oneOf(['default', 'primary', 'danger', 'dark', 'accent']), + disabled: PropTypes.bool, + size: PropTypes.oneOf(['default', 'small', 'large']), + type: PropTypes.oneOf(['submit', 'button']), + variant: PropTypes.oneOf(['default', 'flat', 'raised', 'fab']), + onClick: PropTypes.func +}; +Button.defaultProps = { + className: '', + color: 'default', + disabled: false, + size: 'default', + type: null, + variant: 'default', + onClick: null +}; + +var Ripple = function (_React$Component2) { + babelHelpers.inherits(Ripple, _React$Component2); + + function Ripple() { + babelHelpers.classCallCheck(this, Ripple); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Ripple).apply(this, arguments)); + } + + babelHelpers.createClass(Ripple, [{ + key: 'componentDidMount', + value: function componentDidMount() { + var _this3 = this; + + // trigger teardown in 2 sec + this.teardownTimer = setTimeout(function () { + var fn = _this3.props.onTeardown; + fn && fn(); + }, 2000); + } + }, { + key: 'componentWillUnmount', + value: function componentWillUnmount() { + // clear timeout + clearTimeout(this.teardownTimer); + } + }, { + key: 'render', + value: function render() { + var diameter = this.props.diameter, + radius = diameter / 2; + + var style = { + height: diameter, + width: diameter, + top: this.props.yPos - radius || 0, + left: this.props.xPos - radius || 0 + }; + + return _react2.default.createElement('div', { className: rippleClass, style: style }); + } + }]); + return Ripple; +}(_react2.default.Component); + +/** Define module API */ + + +Ripple.propTypes = { + xPos: PropTypes.number, + yPos: PropTypes.number, + diameter: PropTypes.number, + onTeardown: PropTypes.func +}; +Ripple.defaultProps = { + xPos: 0, + yPos: 0, + diameter: 0, + onTeardown: null +}; +exports.default = Button; +module.exports = exports['default']; + +},{"../js/lib/jqLite":4,"../js/lib/util":5,"react":"CwoHg3"}],8:[function(require,module,exports){ +/** + * MUI React Caret Module + * @module react/caret + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +/** + * Caret constructor + * @class + */ + +var Caret = function (_React$Component) { + babelHelpers.inherits(Caret, _React$Component); + + function Caret() { + babelHelpers.classCallCheck(this, Caret); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Caret).apply(this, arguments)); + } + + babelHelpers.createClass(Caret, [{ + key: 'render', + value: function render() { + var _props = this.props; + var children = _props.children; + var other = babelHelpers.objectWithoutProperties(_props, ['children']); + + + return _react2.default.createElement('span', babelHelpers.extends({}, other, { + className: 'mui-caret ' + this.props.className + })); + } + }]); + return Caret; +}(_react2.default.Component); + +/** Define module API */ + + +Caret.defaultProps = { + className: '' +}; +exports.default = Caret; +module.exports = exports['default']; + +},{"react":"CwoHg3"}],9:[function(require,module,exports){ +/** + * MUI React tabs module + * @module react/tabs + */ +/* jshint quotmark:false */ +// jscs:disable validateQuoteMarks + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var PropTypes = _react2.default.PropTypes; + +/** + * Tab constructor + * @class + */ + +var Tab = function (_React$Component) { + babelHelpers.inherits(Tab, _React$Component); + + function Tab() { + babelHelpers.classCallCheck(this, Tab); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Tab).apply(this, arguments)); + } + + babelHelpers.createClass(Tab, [{ + key: 'render', + value: function render() { + return null; + } + }]); + return Tab; +}(_react2.default.Component); + +/** Define module API */ + + +Tab.propTypes = { + value: PropTypes.any, + label: PropTypes.string, + onActive: PropTypes.func +}; +Tab.defaultProps = { + value: null, + label: '', + onActive: null +}; +exports.default = Tab; +module.exports = exports['default']; + +},{"react":"CwoHg3"}],10:[function(require,module,exports){ +/** + * MUI React TextInput Component + * @module react/text-input + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.TextField = undefined; + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var _util = require('../js/lib/util'); + +var util = babelHelpers.interopRequireWildcard(_util); + +var _helpers = require('./_helpers'); + +var PropTypes = _react2.default.PropTypes; + +/** + * Input constructor + * @class + */ + +var Input = function (_React$Component) { + babelHelpers.inherits(Input, _React$Component); + + function Input(props) { + babelHelpers.classCallCheck(this, Input); + + var _this = babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Input).call(this, props)); + + var value = props.value; + var innerValue = value || props.defaultValue; + + _this.state = { + innerValue: innerValue, + isDirty: Boolean(innerValue) + }; + + // warn if value defined but onChange is not + if (value !== undefined && props.onChange === null) { + util.raiseError(_helpers.controlledMessage, true); + } + + var cb = util.callback; + _this.onChangeCB = cb(_this, 'onChange'); + _this.onFocusCB = cb(_this, 'onFocus'); + return _this; + } + + babelHelpers.createClass(Input, [{ + key: 'componentDidMount', + value: function componentDidMount() { + // disable MUI js + this.refs.inputEl._muiTextfield = true; + } + }, { + key: 'onChange', + value: function onChange(ev) { + this.setState({ innerValue: ev.target.value }); + + var fn = this.props.onChange; + if (fn) fn(ev); + } + }, { + key: 'onFocus', + value: function onFocus(ev) { + this.setState({ isDirty: true }); + } + }, { + key: 'triggerFocus', + value: function triggerFocus() { + // hack to enable IE10 pointer-events shim + this.refs.inputEl.focus(); + } + }, { + key: 'render', + value: function render() { + var cls = {}, + isNotEmpty = Boolean(this.state.innerValue), + inputEl = void 0; + + cls['mui--is-empty'] = !isNotEmpty; + cls['mui--is-not-empty'] = isNotEmpty; + cls['mui--is-dirty'] = this.state.isDirty; + cls['mui--is-invalid'] = this.props.invalid; + + cls = util.classNames(cls); + + var _props = this.props; + var children = _props.children; + var other = babelHelpers.objectWithoutProperties(_props, ['children']); + + + if (this.props.type === 'textarea') { + inputEl = _react2.default.createElement('textarea', babelHelpers.extends({}, other, { + ref: 'inputEl', + className: cls, + rows: this.props.rows, + placeholder: this.props.hint, + value: this.props.value, + defaultValue: this.props.defaultValue, + autoFocus: this.props.autoFocus, + onChange: this.onChangeCB, + onFocus: this.onFocusCB, + required: this.props.required + })); + } else { + inputEl = _react2.default.createElement('input', babelHelpers.extends({}, other, { + ref: 'inputEl', + className: cls, + type: this.props.type, + value: this.props.value, + defaultValue: this.props.defaultValue, + placeholder: this.props.hint, + autoFocus: this.props.autofocus, + onChange: this.onChangeCB, + onFocus: this.onFocusCB, + required: this.props.required + })); + } + + return inputEl; + } + }]); + return Input; +}(_react2.default.Component); + +/** + * Label constructor + * @class + */ + + +Input.propTypes = { + hint: PropTypes.string, + value: PropTypes.string, + type: PropTypes.string, + autoFocus: PropTypes.bool, + onChange: PropTypes.func +}; +Input.defaultProps = { + hint: null, + type: null, + autoFocus: false, + onChange: null +}; + +var Label = function (_React$Component2) { + babelHelpers.inherits(Label, _React$Component2); + + function Label() { + var _Object$getPrototypeO; + + var _temp, _this2, _ret; + + babelHelpers.classCallCheck(this, Label); + + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + return _ret = (_temp = (_this2 = babelHelpers.possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(Label)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this2), _this2.state = { + style: {} + }, _temp), babelHelpers.possibleConstructorReturn(_this2, _ret); + } + + babelHelpers.createClass(Label, [{ + key: 'componentDidMount', + value: function componentDidMount() { + var _this3 = this; + + this.styleTimer = setTimeout(function () { + var s = '.15s ease-out'; + var style = void 0; + + style = { + transition: s, + WebkitTransition: s, + MozTransition: s, + OTransition: s, + msTransform: s + }; + + _this3.setState({ style: style }); + }, 150); + } + }, { + key: 'componentWillUnmount', + value: function componentWillUnmount() { + // clear timer + clearTimeout(this.styleTimer); + } + }, { + key: 'render', + value: function render() { + return _react2.default.createElement( + 'label', + { + style: this.state.style, + onClick: this.props.onClick + }, + this.props.text + ); + } + }]); + return Label; +}(_react2.default.Component); + +/** + * TextField constructor + * @class + */ + + +Label.defaultProps = { + text: '', + onClick: null +}; + +var TextField = function (_React$Component3) { + babelHelpers.inherits(TextField, _React$Component3); + + function TextField(props) { + babelHelpers.classCallCheck(this, TextField); + + var _this4 = babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(TextField).call(this, props)); + + _this4.onClickCB = util.callback(_this4, 'onClick'); + return _this4; + } + + babelHelpers.createClass(TextField, [{ + key: 'onClick', + value: function onClick(ev) { + // pointer-events shim + if (util.supportsPointerEvents() === false) { + ev.target.style.cursor = 'text'; + this.refs.inputEl.triggerFocus(); + } + } + }, { + key: 'render', + value: function render() { + var cls = {}, + labelEl = void 0; + + if (this.props.label.length) { + labelEl = _react2.default.createElement(Label, { + text: this.props.label, + onClick: this.onClickCB + }); + } + + cls['mui-textfield'] = true; + cls['mui-textfield--float-label'] = this.props.floatingLabel; + cls = util.classNames(cls); + + return _react2.default.createElement( + 'div', + { className: cls }, + _react2.default.createElement(Input, babelHelpers.extends({ ref: 'inputEl' }, this.props)), + labelEl + ); + } + }]); + return TextField; +}(_react2.default.Component); + +/** Define module API */ + + +TextField.propTypes = { + label: PropTypes.string, + floatingLabel: PropTypes.bool +}; +TextField.defaultProps = { + label: '', + floatingLabel: false +}; +exports.TextField = TextField; + +},{"../js/lib/util":5,"./_helpers":6,"react":"CwoHg3"}],11:[function(require,module,exports){ +/** + * MUI React Appbar Module + * @module react/appbar + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +/** + * Appbar constructor + * @class + */ + +var Appbar = function (_React$Component) { + babelHelpers.inherits(Appbar, _React$Component); + + function Appbar() { + babelHelpers.classCallCheck(this, Appbar); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Appbar).apply(this, arguments)); + } + + babelHelpers.createClass(Appbar, [{ + key: 'render', + value: function render() { + return _react2.default.createElement( + 'div', + babelHelpers.extends({}, this.props, { + className: 'mui-appbar ' + this.props.className + }), + this.props.children + ); + } + }]); + return Appbar; +}(_react2.default.Component); + +/** Define module API */ + + +Appbar.defaultProps = { + className: '' +}; +exports.default = Appbar; +module.exports = exports['default']; + +},{"react":"CwoHg3"}],12:[function(require,module,exports){ +module.exports=require(7) +},{"../js/lib/jqLite":4,"../js/lib/util":5,"react":"CwoHg3"}],13:[function(require,module,exports){ +module.exports=require(8) +},{"react":"CwoHg3"}],14:[function(require,module,exports){ +/** + * MUI React checkbox module + * @module react/checkbox + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var _util = require('../js/lib/util'); + +var util = babelHelpers.interopRequireWildcard(_util); + +var _helpers = require('./_helpers'); + +var PropTypes = _react2.default.PropTypes; + +/** + * Checkbox constructor + * @class + */ + +var Checkbox = function (_React$Component) { + babelHelpers.inherits(Checkbox, _React$Component); + + function Checkbox() { + babelHelpers.classCallCheck(this, Checkbox); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Checkbox).apply(this, arguments)); + } + + babelHelpers.createClass(Checkbox, [{ + key: 'render', + value: function render() { + var _props = this.props; + var children = _props.children; + var onChange = _props.onChange; + var other = babelHelpers.objectWithoutProperties(_props, ['children', 'onChange']); + + + return _react2.default.createElement( + 'div', + babelHelpers.extends({}, other, { + className: 'mui-checkbox ' + this.props.className + }), + _react2.default.createElement( + 'label', + null, + _react2.default.createElement('input', { + ref: 'inputEl', + type: 'checkbox', + name: this.props.name, + value: this.props.value, + checked: this.props.checked, + defaultChecked: this.props.defaultChecked, + disabled: this.props.disabled, + onChange: this.props.onChange + }), + this.props.label + ) + ); + } + }]); + return Checkbox; +}(_react2.default.Component); + +/** Define module API */ + + +Checkbox.propTypes = { + name: PropTypes.string, + label: PropTypes.string, + value: PropTypes.string, + checked: PropTypes.bool, + defaultChecked: PropTypes.bool, + disabled: PropTypes.bool, + onChange: PropTypes.func +}; +Checkbox.defaultProps = { + className: '', + name: null, + label: null, + disabled: false, + onChange: null +}; +exports.default = Checkbox; +module.exports = exports['default']; + +},{"../js/lib/util":5,"./_helpers":6,"react":"CwoHg3"}],15:[function(require,module,exports){ +/** + * MUI React Col Component + * @module react/col + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var _util = require('../js/lib/util'); + +var util = babelHelpers.interopRequireWildcard(_util); + + +var breakpoints = ['xs', 'sm', 'md', 'lg', 'xl']; + +/** + * Col constructor + * @class + */ + +var Col = function (_React$Component) { + babelHelpers.inherits(Col, _React$Component); + + function Col() { + babelHelpers.classCallCheck(this, Col); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Col).apply(this, arguments)); + } + + babelHelpers.createClass(Col, [{ + key: 'defaultProps', + value: function defaultProps() { + var props = { className: '' }, + i = void 0, + v = void 0; + + // add {breakpoint}, {breakpoint}-offset to props + for (i = breakpoints.length - 1; i > -1; i--) { + v = breakpoints[i]; + props[v] = null; + props[v + '-offset'] = null; + } + + return props; + } + }, { + key: 'render', + value: function render() { + var cls = {}, + i = void 0, + bk = void 0, + val = void 0, + baseCls = void 0; + + // add mui-col classes + for (i = breakpoints.length - 1; i > -1; i--) { + bk = breakpoints[i]; + baseCls = 'mui-col-' + bk; + + // add mui-col-{bk}-{val} + val = this.props[bk]; + if (val) cls[baseCls + '-' + val] = true; + + // add mui-col-{bk}-offset-{val} + val = this.props[bk + '-offset']; + if (val) cls[baseCls + '-offset-' + val] = true; + } + + cls = util.classNames(cls); + + return _react2.default.createElement( + 'div', + babelHelpers.extends({}, this.props, { + className: cls + ' ' + this.props.className + }), + this.props.children + ); + } + }]); + return Col; +}(_react2.default.Component); + +/** Define module API */ + + +exports.default = Col; +module.exports = exports['default']; + +},{"../js/lib/util":5,"react":"CwoHg3"}],16:[function(require,module,exports){ +/** + * MUI React container module + * @module react/container + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +/** + * Container constructor + * @class + */ + +var Container = function (_React$Component) { + babelHelpers.inherits(Container, _React$Component); + + function Container() { + babelHelpers.classCallCheck(this, Container); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Container).apply(this, arguments)); + } + + babelHelpers.createClass(Container, [{ + key: 'render', + value: function render() { + var cls = 'mui-container'; + + // fluid containers + if (this.props.fluid) cls += '-fluid'; + + return _react2.default.createElement( + 'div', + babelHelpers.extends({}, this.props, { + className: cls + ' ' + this.props.className + }), + this.props.children + ); + } + }]); + return Container; +}(_react2.default.Component); + +/** Define module API */ + + +Container.propTypes = { + fluid: _react2.default.PropTypes.bool +}; +Container.defaultProps = { + className: '', + fluid: false +}; +exports.default = Container; +module.exports = exports['default']; + +},{"react":"CwoHg3"}],17:[function(require,module,exports){ +/** + * MUI React divider module + * @module react/divider + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +/** + * Divider constructor + * @class + */ + +var Divider = function (_React$Component) { + babelHelpers.inherits(Divider, _React$Component); + + function Divider() { + babelHelpers.classCallCheck(this, Divider); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Divider).apply(this, arguments)); + } + + babelHelpers.createClass(Divider, [{ + key: 'render', + value: function render() { + var _props = this.props; + var children = _props.children; + var other = babelHelpers.objectWithoutProperties(_props, ['children']); + + + return _react2.default.createElement('div', babelHelpers.extends({}, other, { + className: 'mui-divider ' + this.props.className + })); + } + }]); + return Divider; +}(_react2.default.Component); + +/** Define module API */ + + +Divider.defaultProps = { + className: '' +}; +exports.default = Divider; +module.exports = exports['default']; + +},{"react":"CwoHg3"}],18:[function(require,module,exports){ +/** + * MUI React dropdowns module + * @module react/dropdowns + */ +/* jshint quotmark:false */ +// jscs:disable validateQuoteMarks + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var _util = require('../js/lib/util'); + +var util = babelHelpers.interopRequireWildcard(_util); + + +var PropTypes = _react2.default.PropTypes; + +/** + * DropdownItem constructor + * @class + */ + +var DropdownItem = function (_React$Component) { + babelHelpers.inherits(DropdownItem, _React$Component); + + function DropdownItem(props) { + babelHelpers.classCallCheck(this, DropdownItem); + + var _this = babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(DropdownItem).call(this, props)); + + _this.onClickCB = util.callback(_this, 'onClick'); + return _this; + } + + babelHelpers.createClass(DropdownItem, [{ + key: 'onClick', + value: function onClick(ev) { + if (this.props.onClick) this.props.onClick(this, ev); + } + }, { + key: 'render', + value: function render() { + var _props = this.props; + var children = _props.children; + var onClick = _props.onClick; + var other = babelHelpers.objectWithoutProperties(_props, ['children', 'onClick']); + + + return _react2.default.createElement( + 'li', + other, + _react2.default.createElement( + 'a', + { + href: this.props.link, + target: this.props.target, + 'data-mui-value': this.props.value, + onClick: this.onClickCB + }, + children + ) + ); + } + }]); + return DropdownItem; +}(_react2.default.Component); + +/** Define module API */ + + +DropdownItem.propTypes = { + link: PropTypes.string, + target: PropTypes.string, + onClick: PropTypes.func +}; +exports.default = DropdownItem; +module.exports = exports['default']; + +},{"../js/lib/util":5,"react":"CwoHg3"}],19:[function(require,module,exports){ +/** + * MUI React dropdowns module + * @module react/dropdowns + */ +/* jshint quotmark:false */ +// jscs:disable validateQuoteMarks + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var _button = require('./button'); + +var _button2 = babelHelpers.interopRequireDefault(_button); + +var _caret = require('./caret'); + +var _caret2 = babelHelpers.interopRequireDefault(_caret); + +var _jqLite = require('../js/lib/jqLite'); + +var jqLite = babelHelpers.interopRequireWildcard(_jqLite); + +var _util = require('../js/lib/util'); + +var util = babelHelpers.interopRequireWildcard(_util); + + +var PropTypes = _react2.default.PropTypes, + dropdownClass = 'mui-dropdown', + menuClass = 'mui-dropdown__menu', + openClass = 'mui--is-open', + rightClass = 'mui-dropdown__menu--right'; + +/** + * Dropdown constructor + * @class + */ + +var Dropdown = function (_React$Component) { + babelHelpers.inherits(Dropdown, _React$Component); + + function Dropdown(props) { + babelHelpers.classCallCheck(this, Dropdown); + + var _this = babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Dropdown).call(this, props)); + + _this.state = { + opened: false, + menuTop: 0 + }; + + var cb = util.callback; + _this.selectCB = cb(_this, 'select'); + _this.onClickCB = cb(_this, 'onClick'); + _this.onOutsideClickCB = cb(_this, 'onOutsideClick'); + return _this; + } + + babelHelpers.createClass(Dropdown, [{ + key: 'componentWillMount', + value: function componentWillMount() { + document.addEventListener('click', this.onOutsideClickCB); + } + }, { + key: 'componentWillUnmount', + value: function componentWillUnmount() { + document.removeEventListener('click', this.onOutsideClickCB); + } + }, { + key: 'onClick', + value: function onClick(ev) { + // only left clicks + if (ev.button !== 0) return; + + // exit if toggle button is disabled + if (this.props.disabled) return; + + if (!ev.defaultPrevented) { + this.toggle(); + + // execute onClick method + var onClickFn = this.props.onClick; + onClickFn && onClickFn(ev); + } + } + }, { + key: 'toggle', + value: function toggle() { + // exit if no menu element + if (!this.props.children) { + return util.raiseError('Dropdown menu element not found'); + } + + if (this.state.opened) this.close();else this.open(); + } + }, { + key: 'open', + value: function open() { + // position menu element below toggle button + var wrapperRect = this.refs.wrapperEl.getBoundingClientRect(), + toggleRect = void 0; + + toggleRect = this.refs.button.refs.buttonEl.getBoundingClientRect(); + + this.setState({ + opened: true, + menuTop: toggleRect.top - wrapperRect.top + toggleRect.height + }); + } + }, { + key: 'close', + value: function close() { + this.setState({ opened: false }); + } + }, { + key: 'select', + value: function select(ev) { + // onSelect callback + if (this.props.onSelect && ev.target.tagName === 'A') { + this.props.onSelect(ev.target.getAttribute('data-mui-value')); + } + + // close menu + if (!ev.defaultPrevented) this.close(); + } + }, { + key: 'onOutsideClick', + value: function onOutsideClick(ev) { + var isClickInside = this.refs.wrapperEl.contains(ev.target); + if (!isClickInside) this.close(); + } + }, { + key: 'render', + value: function render() { + var buttonEl = void 0, + menuEl = void 0, + labelEl = void 0; + + // build label + if (jqLite.type(this.props.label) === 'string') { + labelEl = _react2.default.createElement( + 'span', + null, + this.props.label, + ' ', + _react2.default.createElement(_caret2.default, null) + ); + } else { + labelEl = this.props.label; + } + + buttonEl = _react2.default.createElement( + _button2.default, + { + ref: 'button', + type: 'button', + onClick: this.onClickCB, + color: this.props.color, + variant: this.props.variant, + size: this.props.size, + disabled: this.props.disabled + }, + labelEl + ); + + if (this.state.opened) { + var cs = {}; + + cs[menuClass] = true; + cs[openClass] = this.state.opened; + cs[rightClass] = this.props.alignMenu === 'right'; + cs = util.classNames(cs); + + menuEl = _react2.default.createElement( + 'ul', + { + ref: 'menuEl', + className: cs, + style: { top: this.state.menuTop }, + onClick: this.selectCB + }, + this.props.children + ); + } + + var _props = this.props; + var className = _props.className; + var children = _props.children; + var onClick = _props.onClick; + var other = babelHelpers.objectWithoutProperties(_props, ['className', 'children', 'onClick']); + + + return _react2.default.createElement( + 'div', + babelHelpers.extends({}, other, { + ref: 'wrapperEl', + className: dropdownClass + ' ' + className + }), + buttonEl, + menuEl + ); + } + }]); + return Dropdown; +}(_react2.default.Component); + +/** Define module API */ + + +Dropdown.propTypes = { + color: PropTypes.oneOf(['default', 'primary', 'danger', 'dark', 'accent']), + variant: PropTypes.oneOf(['default', 'flat', 'raised', 'fab']), + size: PropTypes.oneOf(['default', 'small', 'large']), + label: PropTypes.oneOfType([PropTypes.string, PropTypes.element]), + alignMenu: PropTypes.oneOf(['left', 'right']), + onClick: PropTypes.func, + onSelect: PropTypes.func, + disabled: PropTypes.bool +}; +Dropdown.defaultProps = { + className: '', + color: 'default', + variant: 'default', + size: 'default', + label: '', + alignMenu: 'left', + onClick: null, + onSelect: null, + disabled: false +}; +exports.default = Dropdown; +module.exports = exports['default']; + +},{"../js/lib/jqLite":4,"../js/lib/util":5,"./button":7,"./caret":8,"react":"CwoHg3"}],20:[function(require,module,exports){ +/** + * MUI React form module + * @module react/form + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +/** + * Form constructor + * @class + */ + +var Form = function (_React$Component) { + babelHelpers.inherits(Form, _React$Component); + + function Form() { + babelHelpers.classCallCheck(this, Form); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Form).apply(this, arguments)); + } + + babelHelpers.createClass(Form, [{ + key: 'render', + value: function render() { + var cls = ''; + + // inline form + if (this.props.inline) cls = 'mui-form--inline'; + + return _react2.default.createElement( + 'form', + babelHelpers.extends({}, this.props, { + className: cls + ' ' + this.props.className + }), + this.props.children + ); + } + }]); + return Form; +}(_react2.default.Component); + +/** Define module API */ + + +Form.propTypes = { + inline: _react2.default.PropTypes.bool +}; +Form.defaultProps = { + className: '', + inline: false +}; +exports.default = Form; +module.exports = exports['default']; + +},{"react":"CwoHg3"}],21:[function(require,module,exports){ +/** + * MUI React Input Component + * @module react/input + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var _textField = require('./text-field'); + +var PropTypes = _react2.default.PropTypes; + +/** + * Input constructor + * @class + */ + +var Input = function (_React$Component) { + babelHelpers.inherits(Input, _React$Component); + + function Input() { + babelHelpers.classCallCheck(this, Input); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Input).apply(this, arguments)); + } + + babelHelpers.createClass(Input, [{ + key: 'render', + value: function render() { + return _react2.default.createElement(_textField.TextField, this.props); + } + }]); + return Input; +}(_react2.default.Component); + +Input.propTypes = { + type: PropTypes.oneOf(['text', 'email', 'url', 'tel', 'password']) +}; +Input.defaultProps = { + type: 'text' +}; +exports.default = Input; +module.exports = exports['default']; + +},{"./text-field":10,"react":"CwoHg3"}],22:[function(require,module,exports){ +/** + * MUI React options module + * @module react/option + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var _forms = require('../js/lib/forms'); + +var formlib = babelHelpers.interopRequireWildcard(_forms); + +var _jqLite = require('../js/lib/jqLite'); + +var jqLite = babelHelpers.interopRequireWildcard(_jqLite); + +var _util = require('../js/lib/util'); + +var util = babelHelpers.interopRequireWildcard(_util); + + +var PropTypes = _react2.default.PropTypes; + +/** + * Option constructor + * @class + */ + +var Option = function (_React$Component) { + babelHelpers.inherits(Option, _React$Component); + + function Option() { + babelHelpers.classCallCheck(this, Option); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Option).apply(this, arguments)); + } + + babelHelpers.createClass(Option, [{ + key: 'render', + value: function render() { + var _props = this.props; + var children = _props.children; + var other = babelHelpers.objectWithoutProperties(_props, ['children']); + + + return _react2.default.createElement( + 'option', + babelHelpers.extends({}, other, { value: this.props.value }), + this.props.label + ); + } + }]); + return Option; +}(_react2.default.Component); + +/** Define module API */ + + +Option.propTypes = { + value: PropTypes.string, + label: PropTypes.string +}; +Option.defaultProps = { + value: null, + label: null +}; +exports.default = Option; +module.exports = exports['default']; + +},{"../js/lib/forms":3,"../js/lib/jqLite":4,"../js/lib/util":5,"react":"CwoHg3"}],23:[function(require,module,exports){ +/** + * MUI React layout module + * @module react/layout + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +/** + * Panel constructor + * @class + */ + +var Panel = function (_React$Component) { + babelHelpers.inherits(Panel, _React$Component); + + function Panel() { + babelHelpers.classCallCheck(this, Panel); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Panel).apply(this, arguments)); + } + + babelHelpers.createClass(Panel, [{ + key: 'render', + value: function render() { + return _react2.default.createElement( + 'div', + babelHelpers.extends({}, this.props, { + className: 'mui-panel ' + this.props.className + }), + this.props.children + ); + } + }]); + return Panel; +}(_react2.default.Component); + +/** Define module API */ + + +Panel.defaultProps = { + className: '' +}; +exports.default = Panel; +module.exports = exports['default']; + +},{"react":"CwoHg3"}],24:[function(require,module,exports){ +/** + * MUI React radio module + * @module react/radio + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var PropTypes = _react2.default.PropTypes; + +/** + * Radio constructor + * @class + */ + +var Radio = function (_React$Component) { + babelHelpers.inherits(Radio, _React$Component); + + function Radio() { + babelHelpers.classCallCheck(this, Radio); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Radio).apply(this, arguments)); + } + + babelHelpers.createClass(Radio, [{ + key: 'render', + value: function render() { + var _props = this.props; + var children = _props.children; + var onChange = _props.onChange; + var other = babelHelpers.objectWithoutProperties(_props, ['children', 'onChange']); + + + return _react2.default.createElement( + 'div', + babelHelpers.extends({}, other, { + className: 'mui-radio ' + this.props.className + }), + _react2.default.createElement( + 'label', + null, + _react2.default.createElement('input', { + ref: 'inputEl', + type: 'radio', + name: this.props.name, + value: this.props.value, + checked: this.props.checked, + defaultChecked: this.props.defaultChecked, + disabled: this.props.disabled, + onChange: this.props.onChange + }), + this.props.label + ) + ); + } + }]); + return Radio; +}(_react2.default.Component); + +/** Define module API */ + + +Radio.propTypes = { + name: PropTypes.string, + label: PropTypes.string, + value: PropTypes.string, + checked: PropTypes.bool, + defaultChecked: PropTypes.bool, + disabled: PropTypes.bool, + onChange: PropTypes.func +}; +Radio.defaultProps = { + className: '', + name: null, + label: null, + disabled: false, + onChange: null +}; +exports.default = Radio; +module.exports = exports['default']; + +},{"react":"CwoHg3"}],25:[function(require,module,exports){ +/** + * MUI React Row Component + * @module react/row + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var _util = require('../js/lib/util'); + +var util = babelHelpers.interopRequireWildcard(_util); + + +var breakpoints = ['xs', 'sm', 'md', 'lg']; + +/** + * Row constructor + * @class + */ + +var Row = function (_React$Component) { + babelHelpers.inherits(Row, _React$Component); + + function Row() { + babelHelpers.classCallCheck(this, Row); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Row).apply(this, arguments)); + } + + babelHelpers.createClass(Row, [{ + key: 'render', + value: function render() { + return _react2.default.createElement( + 'div', + babelHelpers.extends({}, this.props, { + className: 'mui-row ' + this.props.className + }), + this.props.children + ); + } + }]); + return Row; +}(_react2.default.Component); + +/** Define module API */ + + +Row.defaultProps = { + className: '' +}; +exports.default = Row; +module.exports = exports['default']; + +},{"../js/lib/util":5,"react":"CwoHg3"}],26:[function(require,module,exports){ +/** + * MUI React select module + * @module react/select + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var _forms = require('../js/lib/forms'); + +var formlib = babelHelpers.interopRequireWildcard(_forms); + +var _jqLite = require('../js/lib/jqLite'); + +var jqLite = babelHelpers.interopRequireWildcard(_jqLite); + +var _util = require('../js/lib/util'); + +var util = babelHelpers.interopRequireWildcard(_util); + +var _helpers = require('./_helpers'); + +var PropTypes = _react2.default.PropTypes; + +/** + * Select constructor + * @class + */ + +var Select = function (_React$Component) { + babelHelpers.inherits(Select, _React$Component); + + function Select(props) { + babelHelpers.classCallCheck(this, Select); + + + // warn if value defined but onChange is not + + var _this = babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Select).call(this, props)); + + _this.state = { + showMenu: false + }; + if (props.readOnly === false && props.value !== undefined && props.onChange === null) { + util.raiseError(_helpers.controlledMessage, true); + } + + _this.state.value = props.value; + + // bind callback function + var cb = util.callback; + _this.hideMenuCB = cb(_this, 'hideMenu'); + _this.onInnerChangeCB = cb(_this, 'onInnerChange'); + _this.onInnerClickCB = cb(_this, 'onInnerClick'); + _this.onInnerFocusCB = cb(_this, 'onInnerFocus'); + _this.onInnerMouseDownCB = cb(_this, 'onInnerMouseDown'); + _this.onKeydownCB = cb(_this, 'onKeydown'); + _this.onMenuChangeCB = cb(_this, 'onMenuChange'); + _this.onOuterFocusCB = cb(_this, 'onOuterFocus'); + _this.onOuterBlurCB = cb(_this, 'onOuterBlur'); + return _this; + } + + babelHelpers.createClass(Select, [{ + key: 'componentDidMount', + value: function componentDidMount() { + // disable MUI js + this.refs.selectEl._muiSelect = true; + + // make wrapper element focusable (to enable Firefox bugfix) + this.refs.wrapperEl.tabIndex = -1; + + // handle autofocus + if (this.props.autoFocus) this.refs.wrapperEl.focus(); + } + }, { + key: 'componentWillReceiveProps', + value: function componentWillReceiveProps(nextProps) { + this.setState({ value: nextProps.value }); + } + }, { + key: 'onInnerMouseDown', + value: function onInnerMouseDown(ev) { + if (ev.button !== 0 || this.props.useDefault === true) return; + ev.preventDefault(); + } + }, { + key: 'onInnerChange', + value: function onInnerChange(ev) { + var value = ev.target.value; + this.setState({ value: value }); + + var fn = this.props.onChange; + if (fn) fn(value); + } + }, { + key: 'onInnerClick', + value: function onInnerClick(ev) { + if (ev.button !== 0) return; // only left clicks + this.showMenu(); + } + }, { + key: 'onInnerFocus', + value: function onInnerFocus(ev) { + var _this2 = this; + + // check flag + if (this.props.useDefault === true) return; + + // defer focus to parent + setTimeout(function () { + _this2.refs.wrapperEl.focus(); + }, 0); + } + }, { + key: 'onOuterFocus', + value: function onOuterFocus(ev) { + // ignore focus on inner element (react artifact) + if (ev.target !== this.refs.wrapperEl) return; + + // disable tabfocus on inner element + var selectEl = this.refs.selectEl; + selectEl._muiOrigIndex = selectEl.tabIndex; + selectEl.tabIndex = -1; + + // firefox bugfix + if (selectEl.disabled) return this.refs.wrapperEl.blur(); + + // attach keydown handler + jqLite.on(document, 'keydown', this.onKeydownCB); + } + }, { + key: 'onOuterBlur', + value: function onOuterBlur(ev) { + // ignore blur on inner element + if (ev.target !== this.refs.wrapperEl) return; + + // restore tab focus on inner element + var selectEl = this.refs.selectEl; + selectEl.tabIndex = selectEl._muiOrigIndex; + + // remove keydown handler + jqLite.off(document, 'keydown', this.onKeydownCB); + } + }, { + key: 'onKeydown', + value: function onKeydown(ev) { + // spacebar, down, up + if (ev.keyCode === 32 || ev.keyCode === 38 || ev.keyCode === 40) { + // prevent win scroll + ev.preventDefault(); + + if (this.refs.selectEl.disabled !== true) this.showMenu(); + } + } + }, { + key: 'showMenu', + value: function showMenu() { + // check useDefault flag + if (this.props.useDefault === true) return; + + // add scroll lock + util.enableScrollLock(); + + // add event listeners + jqLite.on(window, 'resize', this.hideMenuCB); + jqLite.on(document, 'click', this.hideMenuCB); + + // re-draw + this.setState({ showMenu: true }); + } + }, { + key: 'hideMenu', + value: function hideMenu() { + // remove scroll lock + util.disableScrollLock(); + + // remove event listeners + jqLite.off(window, 'resize', this.hideMenuCB); + jqLite.off(document, 'click', this.hideMenuCB); + + // re-draw + this.setState({ showMenu: false }); + + // refocus + this.refs.selectEl.focus(); + } + }, { + key: 'onMenuChange', + value: function onMenuChange(value) { + if (this.props.readOnly === true) return; + + this.setState({ value: value }); + + // execute onChange method + var fn = this.props.onChange; + if (fn) fn(value); + } + }, { + key: 'render', + value: function render() { + var menuElem = void 0; + + if (this.state.showMenu) { + menuElem = _react2.default.createElement(Menu, { + optionEls: this.refs.selectEl.children, + wrapperEl: this.refs.wrapperEl, + onChange: this.onMenuChangeCB, + onClose: this.hideMenuCB + }); + } + + var _props = this.props; + var children = _props.children; + var onChange = _props.onChange; + var other = babelHelpers.objectWithoutProperties(_props, ['children', 'onChange']); + + + return _react2.default.createElement( + 'div', + babelHelpers.extends({}, other, { + ref: 'wrapperEl', + className: 'mui-select ' + this.props.className, + onFocus: this.onOuterFocusCB, + onBlur: this.onOuterBlurCB + }), + _react2.default.createElement( + 'select', + { + ref: 'selectEl', + name: this.props.name, + value: this.state.value, + defaultValue: this.props.defaultValue, + disabled: this.props.disabled, + multiple: this.props.multiple, + readOnly: this.props.readOnly, + required: this.props.required, + onChange: this.onInnerChangeCB, + onMouseDown: this.onInnerMouseDownCB, + onClick: this.onInnerClickCB, + onFocus: this.onInnerFocusCB + }, + this.props.children + ), + menuElem + ); + } + }]); + return Select; +}(_react2.default.Component); + +/** + * Menu constructor + * @class + */ + + +Select.propTypes = { + name: PropTypes.string, + value: PropTypes.string, + defaultValue: PropTypes.string, + autoFocus: PropTypes.bool, + disabled: PropTypes.bool, + multiple: PropTypes.bool, + readOnly: PropTypes.bool, + required: PropTypes.bool, + useDefault: PropTypes.bool, + onChange: PropTypes.func +}; +Select.defaultProps = { + className: '', + name: null, + autoFocus: false, + disabled: false, + multiple: false, + readOnly: false, + required: false, + useDefault: false, + onChange: null +}; + +var Menu = function (_React$Component2) { + babelHelpers.inherits(Menu, _React$Component2); + + function Menu(props) { + babelHelpers.classCallCheck(this, Menu); + + var _this3 = babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Menu).call(this, props)); + + _this3.state = { + origIndex: null, + currentIndex: null + }; + + + _this3.onKeydownCB = util.callback(_this3, 'onKeydown'); + return _this3; + } + + babelHelpers.createClass(Menu, [{ + key: 'componentWillMount', + value: function componentWillMount() { + var optionEls = this.props.optionEls, + m = optionEls.length, + selectedPos = 0, + i = void 0; + + // get current selected position + for (i = m - 1; i > -1; i--) { + if (optionEls[i].selected) selectedPos = i; + }this.setState({ origIndex: selectedPos, currentIndex: selectedPos }); + } + }, { + key: 'componentDidMount', + value: function componentDidMount() { + // blur active element (IE10 bugfix) + this.blurTimer = setTimeout(function () { + var el = document.activeElement; + if (el.nodeName.toLowerCase() !== 'body') el.blur(); + }, 0); + + // set position + var props = formlib.getMenuPositionalCSS(this.props.wrapperEl, this.props.optionEls.length, this.state.currentIndex); + + var el = this.refs.wrapperEl; + jqLite.css(el, props); + jqLite.scrollTop(el, props.scrollTop); + + // attach keydown handler + jqLite.on(document, 'keydown', this.onKeydownCB); + } + }, { + key: 'componentWillUnmount', + value: function componentWillUnmount() { + // clear timer + clearTimeout(this.blurTimer); + + // remove keydown handler + jqLite.off(document, 'keydown', this.onKeydownCB); + } + }, { + key: 'onClick', + value: function onClick(pos, ev) { + // don't allow events to bubble + ev.stopPropagation(); + this.selectAndDestroy(pos); + } + }, { + key: 'onKeydown', + value: function onKeydown(ev) { + var keyCode = ev.keyCode; + + // tab + if (keyCode === 9) return this.destroy(); + + // escape | up | down | enter + if (keyCode === 27 || keyCode === 40 || keyCode === 38 || keyCode === 13) { + ev.preventDefault(); + } + + if (keyCode === 27) this.destroy();else if (keyCode === 40) this.increment();else if (keyCode === 38) this.decrement();else if (keyCode === 13) this.selectAndDestroy(); + } + }, { + key: 'increment', + value: function increment() { + if (this.state.currentIndex === this.props.optionEls.length - 1) { + return; + } + + this.setState({ currentIndex: this.state.currentIndex + 1 }); + } + }, { + key: 'decrement', + value: function decrement() { + if (this.state.currentIndex === 0) return; + this.setState({ currentIndex: this.state.currentIndex - 1 }); + } + }, { + key: 'selectAndDestroy', + value: function selectAndDestroy(pos) { + pos = pos === undefined ? this.state.currentIndex : pos; + + // handle onChange + if (pos !== this.state.origIndex) { + this.props.onChange(this.props.optionEls[pos].value); + } + + // close menu + this.destroy(); + } + }, { + key: 'destroy', + value: function destroy() { + this.props.onClose(); + } + }, { + key: 'render', + value: function render() { + var menuItems = [], + optionEls = this.props.optionEls, + m = optionEls.length, + optionEl = void 0, + cls = void 0, + i = void 0; + + // define menu items + for (i = 0; i < m; i++) { + cls = i === this.state.currentIndex ? 'mui--is-selected' : ''; + + menuItems.push(_react2.default.createElement( + 'div', + { + key: i, + className: cls, + onClick: this.onClick.bind(this, i) + }, + optionEls[i].textContent + )); + } + + return _react2.default.createElement( + 'div', + { ref: 'wrapperEl', className: 'mui-select__menu' }, + menuItems + ); + } + }]); + return Menu; +}(_react2.default.Component); + +/** Define module API */ + + +Menu.defaultProps = { + optionEls: [], + wrapperEl: null, + onChange: null, + onClose: null +}; +exports.default = Select; +module.exports = exports['default']; + +},{"../js/lib/forms":3,"../js/lib/jqLite":4,"../js/lib/util":5,"./_helpers":6,"react":"CwoHg3"}],27:[function(require,module,exports){ +module.exports=require(9) +},{"react":"CwoHg3"}],28:[function(require,module,exports){ +/** + * MUI React tabs module + * @module react/tabs + */ +/* jshint quotmark:false */ +// jscs:disable validateQuoteMarks + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var _tab = require('./tab'); + +var _tab2 = babelHelpers.interopRequireDefault(_tab); + +var _util = require('../js/lib/util'); + +var util = babelHelpers.interopRequireWildcard(_util); + + +var PropTypes = _react2.default.PropTypes, + tabsBarClass = 'mui-tabs__bar', + tabsBarJustifiedClass = 'mui-tabs__bar--justified', + tabsPaneClass = 'mui-tabs__pane', + isActiveClass = 'mui--is-active'; + +/** + * Tabs constructor + * @class + */ + +var Tabs = function (_React$Component) { + babelHelpers.inherits(Tabs, _React$Component); + + function Tabs(props) { + babelHelpers.classCallCheck(this, Tabs); + + var _this = babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Tabs).call(this, props)); + + _this.state = { currentSelectedIndex: props.initialSelectedIndex }; + return _this; + } + + babelHelpers.createClass(Tabs, [{ + key: 'onClick', + value: function onClick(i, tab, ev) { + if (i !== this.state.currentSelectedIndex) { + this.setState({ currentSelectedIndex: i }); + + // onActive callback + if (tab.props.onActive) tab.props.onActive(tab); + + // onChange callback + if (this.props.onChange) { + this.props.onChange(i, tab.props.value, tab, ev); + } + } + } + }, { + key: 'render', + value: function render() { + var _props = this.props; + var children = _props.children; + var other = babelHelpers.objectWithoutProperties(_props, ['children']); + + + var tabEls = [], + paneEls = [], + m = children.length, + selectedIndex = this.state.currentSelectedIndex % m, + isActive = void 0, + item = void 0, + cls = void 0, + i = void 0; + + for (i = 0; i < m; i++) { + item = children[i]; + + // only accept MUITab elements + if (item.type !== _tab2.default) util.raiseError('Expecting MUITab React Element'); + + isActive = i === selectedIndex ? true : false; + + // tab element + tabEls.push(_react2.default.createElement( + 'li', + { key: i, className: isActive ? isActiveClass : '' }, + _react2.default.createElement( + 'a', + { onClick: this.onClick.bind(this, i, item) }, + item.props.label + ) + )); + + // pane element + cls = tabsPaneClass + ' '; + if (isActive) cls += isActiveClass; + + paneEls.push(_react2.default.createElement( + 'div', + { key: i, className: cls }, + item.props.children + )); + } + + cls = tabsBarClass; + if (this.props.justified) cls += ' ' + tabsBarJustifiedClass; + + return _react2.default.createElement( + 'div', + other, + _react2.default.createElement( + 'ul', + { className: cls }, + tabEls + ), + paneEls + ); + } + }]); + return Tabs; +}(_react2.default.Component); + +/** Define module API */ + + +Tabs.propTypes = { + initialSelectedIndex: PropTypes.number, + justified: PropTypes.bool, + onChange: PropTypes.func +}; +Tabs.defaultProps = { + className: '', + initialSelectedIndex: 0, + justified: false, + onChange: null +}; +exports.default = Tabs; +module.exports = exports['default']; + +},{"../js/lib/util":5,"./tab":9,"react":"CwoHg3"}],29:[function(require,module,exports){ +/** + * MUI React Textarea Component + * @module react/textarea + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var _textField = require('./text-field'); + +var PropTypes = _react2.default.PropTypes; + +/** + * Textarea constructor + * @class + */ + +var Textarea = function (_React$Component) { + babelHelpers.inherits(Textarea, _React$Component); + + function Textarea() { + babelHelpers.classCallCheck(this, Textarea); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Textarea).apply(this, arguments)); + } + + babelHelpers.createClass(Textarea, [{ + key: 'render', + value: function render() { + return _react2.default.createElement(_textField.TextField, this.props); + } + }]); + return Textarea; +}(_react2.default.Component); + +Textarea.propTypes = { + rows: PropTypes.number +}; +Textarea.defaultProps = { + type: 'textarea', + rows: 2 +}; +exports.default = Textarea; +module.exports = exports['default']; + +},{"./text-field":10,"react":"CwoHg3"}]},{},[1]) \ No newline at end of file diff --git a/platforms/android/assets/www/libs/mui/packages/cdn/react/mui-react.min.js b/platforms/android/assets/www/libs/mui/packages/cdn/react/mui-react.min.js new file mode 100644 index 0000000..0eb3f23 --- /dev/null +++ b/platforms/android/assets/www/libs/mui/packages/cdn/react/mui-react.min.js @@ -0,0 +1,2 @@ +!function(e){var t=e.babelHelpers={};t.classCallCheck=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},t.createClass=function(){function e(e,t){for(var r=0;r=0||Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=e[n]);return r},t.possibleConstructorReturn=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}}("undefined"==typeof global?self:global),function e(t,r,n){function l(o,a){if(!r[o]){if(!t[o]){var i="function"==typeof require&&require;if(!a&&i)return i(o,!0);if(s)return s(o,!0);throw new Error("Cannot find module '"+o+"'")}var u=r[o]={exports:{}};t[o][0].call(u.exports,function(e){var r=t[o][1][e];return l(r?r:e)},u,u.exports,e,t,r,n)}return r[o].exports}for(var s="function"==typeof require&&require,o=0;op&&(b=a+(r+1)*o-(-1*n+l+s),h=t*o+2*a-f,v=Math.min(b,h)),{height:f+"px",top:n+"px",scrollTop:v}}var l=15,s=32,o=42,a=8;t.exports={getMenuPositionalCSS:n}},{}],4:[function(e,t,r){"use strict";function n(e,t){if(t&&e.setAttribute){for(var r,n=h(e),l=t.split(" "),s=0;s-1:!1}function o(e){if(void 0===e)return"undefined";var t=Object.prototype.toString.call(e);if(0===t.indexOf("[object "))return t.slice(8,-1).toLowerCase();throw new Error("MUI: Could not understand type: "+t)}function a(e,t,r,n){n=void 0===n?!1:n,e.addEventListener(t,r,n);var l=e._muiEventCache=e._muiEventCache||{};l[t]=l[t]||[],l[t].push([r,n])}function i(e,t,r,n){n=void 0===n?!1:n;var l,s,o=e._muiEventCache=e._muiEventCache||{},a=o[t]||[];for(s=a.length;s--;)l=a[s],(void 0===r||l[0]===r&&l[1]===n)&&(a.splice(s,1),e.removeEventListener(t,l[0],l[1]))}function u(e,t,r,n){a(e,t,function l(n){r&&r.apply(this,arguments),i(e,t,l)},n)}function c(e,t){var r=window;if(void 0===t){if(e===r){var n=document.documentElement;return(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}return e.scrollLeft}e===r?r.scrollTo(t,p(r)):e.scrollLeft=t}function p(e,t){var r=window;if(void 0===t){if(e===r){var n=document.documentElement;return(r.pageYOffset||n.scrollTop)-(n.clientTop||0)}return e.scrollTop}e===r?r.scrollTo(c(r),t):e.scrollTop=t}function d(e){var t=window,r=e.getBoundingClientRect(),n=p(t),l=c(t);return{top:r.top+n,left:r.left+l,height:r.height,width:r.width}}function f(e){var t=!1,r=!0,n=document,l=n.defaultView,s=n.documentElement,o=n.addEventListener?"addEventListener":"attachEvent",a=n.addEventListener?"removeEventListener":"detachEvent",i=n.addEventListener?"":"on",u=function d(r){"readystatechange"==r.type&&"complete"!=n.readyState||(("load"==r.type?l:n)[a](i+r.type,d,!1),!t&&(t=!0)&&e.call(l,r.type||r))},c=function f(){try{s.doScroll("left")}catch(e){return void setTimeout(f,50)}u("poll")};if("complete"==n.readyState)e.call(l,"lazy");else{if(n.createEventObject&&s.doScroll){try{r=!l.frameElement}catch(p){}r&&c()}n[o](i+"DOMContentLoaded",u,!1),n[o](i+"readystatechange",u,!1),l[o](i+"load",u,!1)}}function b(e,t){if(t&&e.setAttribute){for(var r,n=h(e),l=t.split(" "),s=0;s=0;)n=n.replace(" "+r+" "," ");e.setAttribute("class",n.trim())}}function h(e){var t=(e.getAttribute("class")||"").replace(/[\n\t]/g,"");return" "+t+" "}function v(e){return e.replace(y,function(e,t,r,n){return n?r.toUpperCase():r}).replace(g,"Moz$1")}function m(e,t,r){var n;return n=r.getPropertyValue(t),""!==n||e.ownerDocument||(n=e.style[v(t)]),n}var C,y=/([\:\-\_]+(.))/g,g=/^moz([A-Z])/;C={multiple:!0,selected:!0,checked:!0,disabled:!0,readonly:!0,required:!0,open:!0},t.exports={addClass:n,css:l,hasClass:s,off:i,offset:d,on:a,one:u,ready:f,removeClass:b,type:o,scrollLeft:c,scrollTop:p}},{}],5:[function(e,t,r){"use strict";function n(){var e=window;if(v.debug&&"undefined"!=typeof e.console)try{e.console.log.apply(e.console,arguments)}catch(t){var r=Array.prototype.slice.call(arguments);e.console.log(r.join("\n"))}}function l(e){var t,r=document;t=r.head||r.getElementsByTagName("head")[0]||r.documentElement;var n=r.createElement("style");return n.type="text/css",n.styleSheet?n.styleSheet.cssText=e:n.appendChild(r.createTextNode(e)),t.insertBefore(n,t.firstChild),n}function s(e,t){if(!t)throw new Error("MUI: "+e);"undefined"!=typeof console&&console.error("MUI Warning: "+e)}function o(e){if(C.push(e),void 0===C._initialized){var t=document;m.on(t,"animationstart",a),m.on(t,"mozAnimationStart",a),m.on(t,"webkitAnimationStart",a),C._initialized=!0}}function a(e){if("mui-node-inserted"===e.animationName)for(var t=e.target,r=C.length-1;r>=0;r--)C[r](t)}function i(e){var t="";for(var r in e)t+=e[r]?r+" ":"";return t.trim()}function u(){if(void 0!==h)return h;var e=document.createElement("x");return e.style.cssText="pointer-events:auto",h="auto"===e.style.pointerEvents}function c(e,t){return function(){e[t].apply(e,arguments)}}function p(e,t,r,n,l){var s,o=document.createEvent("HTMLEvents"),r=void 0!==r?r:!0,n=void 0!==n?n:!0;if(o.initEvent(t,r,n),l)for(s in l)o[s]=l[s];return e&&e.dispatchEvent(o),o}function d(){if(y+=1,1===y){var e=window,t=document;b={left:m.scrollLeft(e),top:m.scrollTop(e)},m.addClass(t.body,g),e.scrollTo(b.left,b.top)}}function f(){if(0!==y&&(y-=1,0===y)){var e=window,t=document;m.removeClass(t.body,g),e.scrollTo(b.left,b.top)}}var b,h,v=e("../config"),m=e("./jqLite"),C=[],y=0,g="mui-body--scroll-lock";t.exports={callback:c,classNames:i,disableScrollLock:f,dispatchEvent:p,enableScrollLock:d,log:n,loadStyle:l,onNodeInserted:o,raiseError:s,supportsPointerEvents:u}},{"../config":2,"./jqLite":4}],6:[function(e,t,r){"use strict";var n="You provided a `value` prop to a form field without an `OnChange` handler. Please see React documentation on controlled components";t.exports={controlledMessage:n}},{}],7:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=e("../js/lib/jqLite"),o=babelHelpers.interopRequireWildcard(s),a=e("../js/lib/util"),i=(babelHelpers.interopRequireWildcard(a),l["default"].PropTypes),u="mui-btn",c="mui-ripple-effect",p={color:1,variant:1,size:1},d=function(e){function t(){var e,r,n,l;babelHelpers.classCallCheck(this,t);for(var s=arguments.length,o=Array(s),a=0;s>a;a++)o[a]=arguments[a];return r=n=babelHelpers.possibleConstructorReturn(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(o))),n.state={ripples:{}},l=r,babelHelpers.possibleConstructorReturn(n,l)}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentDidMount",value:function(){var e=this.refs.buttonEl;e._muiDropdown=!0,e._muiRipple=!0}},{key:"onClick",value:function(e){var t=this.props.onClick;t&&t(e)}},{key:"onMouseDown",value:function(e){var t=o.offset(this.refs.buttonEl),r=t.height;"fab"===this.props.variant&&(r/=2);var n=this.state.ripples,l=Date.now();n[l]={xPos:e.pageX-t.left,yPos:e.pageY-t.top,diameter:r,teardownFn:this.teardownRipple.bind(this,l)},this.setState({ripples:n})}},{key:"onTouchStart",value:function(e){}},{key:"teardownRipple",value:function(e){var t=this.state.ripples;delete t[e],this.setState({ripples:t})}},{key:"render",value:function(){var e=u,t=void 0,r=void 0,n=this.state.ripples;for(t in p)r=this.props[t],"default"!==r&&(e+=" "+u+"--"+r);return l["default"].createElement("button",babelHelpers["extends"]({},this.props,{ref:"buttonEl",className:e+" "+this.props.className,onClick:this.onClick.bind(this),onMouseDown:this.onMouseDown.bind(this)}),this.props.children,Object.keys(n).map(function(e,t){var r=n[e];return l["default"].createElement(f,{key:e,xPos:r.xPos,yPos:r.yPos,diameter:r.diameter,onTeardown:r.teardownFn})}))}}]),t}(l["default"].Component);d.propTypes={color:i.oneOf(["default","primary","danger","dark","accent"]),disabled:i.bool,size:i.oneOf(["default","small","large"]),type:i.oneOf(["submit","button"]),variant:i.oneOf(["default","flat","raised","fab"]),onClick:i.func},d.defaultProps={className:"",color:"default",disabled:!1,size:"default",type:null,variant:"default",onClick:null};var f=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentDidMount",value:function(){var e=this;this.teardownTimer=setTimeout(function(){var t=e.props.onTeardown;t&&t()},2e3)}},{key:"componentWillUnmount",value:function(){clearTimeout(this.teardownTimer)}},{key:"render",value:function(){var e=this.props.diameter,t=e/2,r={height:e,width:e,top:this.props.yPos-t||0,left:this.props.xPos-t||0};return l["default"].createElement("div",{className:c,style:r})}}]),t}(l["default"].Component);f.propTypes={xPos:i.number,yPos:i.number,diameter:i.number,onTeardown:i.func},f.defaultProps={xPos:0,yPos:0,diameter:0,onTeardown:null},r["default"]=d,t.exports=r["default"]},{"../js/lib/jqLite":4,"../js/lib/util":5,react:"CwoHg3"}],8:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e=this.props,t=(e.children,babelHelpers.objectWithoutProperties(e,["children"]));return l["default"].createElement("span",babelHelpers["extends"]({},t,{className:"mui-caret "+this.props.className}))}}]),t}(l["default"].Component);s.defaultProps={className:""},r["default"]=s,t.exports=r["default"]},{react:"CwoHg3"}],9:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=l["default"].PropTypes,o=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){return null}}]),t}(l["default"].Component);o.propTypes={value:s.any,label:s.string,onActive:s.func},o.defaultProps={value:null,label:"",onActive:null},r["default"]=o,t.exports=r["default"]},{react:"CwoHg3"}],10:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.TextField=void 0;var n=window.React,l=babelHelpers.interopRequireDefault(n),s=e("../js/lib/util"),o=babelHelpers.interopRequireWildcard(s),a=e("./_helpers"),i=l["default"].PropTypes,u=function(e){function t(e){babelHelpers.classCallCheck(this,t);var r=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e)),n=e.value,l=n||e.defaultValue;r.state={innerValue:l,isDirty:Boolean(l)},void 0!==n&&null===e.onChange&&o.raiseError(a.controlledMessage,!0);var s=o.callback;return r.onChangeCB=s(r,"onChange"),r.onFocusCB=s(r,"onFocus"),r}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentDidMount",value:function(){this.refs.inputEl._muiTextfield=!0}},{key:"onChange",value:function(e){this.setState({innerValue:e.target.value});var t=this.props.onChange;t&&t(e)}},{key:"onFocus",value:function(e){this.setState({isDirty:!0})}},{key:"triggerFocus",value:function(){this.refs.inputEl.focus()}},{key:"render",value:function(){var e={},t=Boolean(this.state.innerValue),r=void 0;e["mui--is-empty"]=!t,e["mui--is-not-empty"]=t,e["mui--is-dirty"]=this.state.isDirty,e["mui--is-invalid"]=this.props.invalid,e=o.classNames(e);var n=this.props,s=(n.children,babelHelpers.objectWithoutProperties(n,["children"]));return r="textarea"===this.props.type?l["default"].createElement("textarea",babelHelpers["extends"]({},s,{ref:"inputEl",className:e,rows:this.props.rows,placeholder:this.props.hint,value:this.props.value,defaultValue:this.props.defaultValue,autoFocus:this.props.autoFocus,onChange:this.onChangeCB,onFocus:this.onFocusCB,required:this.props.required})):l["default"].createElement("input",babelHelpers["extends"]({},s,{ref:"inputEl",className:e,type:this.props.type,value:this.props.value,defaultValue:this.props.defaultValue,placeholder:this.props.hint,autoFocus:this.props.autofocus,onChange:this.onChangeCB,onFocus:this.onFocusCB,required:this.props.required}))}}]),t}(l["default"].Component);u.propTypes={hint:i.string,value:i.string,type:i.string,autoFocus:i.bool,onChange:i.func},u.defaultProps={hint:null,type:null,autoFocus:!1,onChange:null};var c=function(e){function t(){var e,r,n,l;babelHelpers.classCallCheck(this,t);for(var s=arguments.length,o=Array(s),a=0;s>a;a++)o[a]=arguments[a];return r=n=babelHelpers.possibleConstructorReturn(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(o))),n.state={style:{}},l=r,babelHelpers.possibleConstructorReturn(n,l)}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentDidMount",value:function(){var e=this;this.styleTimer=setTimeout(function(){var t=".15s ease-out",r=void 0;r={transition:t,WebkitTransition:t,MozTransition:t,OTransition:t,msTransform:t},e.setState({style:r})},150)}},{key:"componentWillUnmount",value:function(){clearTimeout(this.styleTimer)}},{key:"render",value:function(){return l["default"].createElement("label",{style:this.state.style,onClick:this.props.onClick},this.props.text)}}]),t}(l["default"].Component);c.defaultProps={text:"",onClick:null};var p=function(e){function t(e){babelHelpers.classCallCheck(this,t);var r=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e));return r.onClickCB=o.callback(r,"onClick"),r}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"onClick",value:function(e){o.supportsPointerEvents()===!1&&(e.target.style.cursor="text",this.refs.inputEl.triggerFocus())}},{key:"render",value:function(){var e={},t=void 0;return this.props.label.length&&(t=l["default"].createElement(c,{text:this.props.label,onClick:this.onClickCB})),e["mui-textfield"]=!0,e["mui-textfield--float-label"]=this.props.floatingLabel,e=o.classNames(e),l["default"].createElement("div",{className:e},l["default"].createElement(u,babelHelpers["extends"]({ref:"inputEl"},this.props)),t)}}]),t}(l["default"].Component);p.propTypes={label:i.string,floatingLabel:i.bool},p.defaultProps={label:"",floatingLabel:!1},r.TextField=p},{"../js/lib/util":5,"./_helpers":6,react:"CwoHg3"}],11:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){return l["default"].createElement("div",babelHelpers["extends"]({},this.props,{className:"mui-appbar "+this.props.className}),this.props.children)}}]),t}(l["default"].Component);s.defaultProps={className:""},r["default"]=s,t.exports=r["default"]},{react:"CwoHg3"}],12:[function(e,t,r){t.exports=e(7)},{"../js/lib/jqLite":4,"../js/lib/util":5,react:"CwoHg3"}],13:[function(e,t,r){t.exports=e(8)},{react:"CwoHg3"}],14:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=e("../js/lib/util"),o=(babelHelpers.interopRequireWildcard(s),e("./_helpers"),l["default"].PropTypes),a=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e=this.props,t=(e.children,e.onChange,babelHelpers.objectWithoutProperties(e,["children","onChange"]));return l["default"].createElement("div",babelHelpers["extends"]({},t,{className:"mui-checkbox "+this.props.className}),l["default"].createElement("label",null,l["default"].createElement("input",{ref:"inputEl",type:"checkbox",name:this.props.name,value:this.props.value,checked:this.props.checked,defaultChecked:this.props.defaultChecked,disabled:this.props.disabled,onChange:this.props.onChange}),this.props.label))}}]),t}(l["default"].Component);a.propTypes={name:o.string,label:o.string,value:o.string,checked:o.bool,defaultChecked:o.bool,disabled:o.bool,onChange:o.func},a.defaultProps={className:"",name:null,label:null,disabled:!1,onChange:null},r["default"]=a,t.exports=r["default"]},{"../js/lib/util":5,"./_helpers":6,react:"CwoHg3"}],15:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=e("../js/lib/util"),o=babelHelpers.interopRequireWildcard(s),a=["xs","sm","md","lg","xl"],i=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"defaultProps",value:function(){var e={className:""},t=void 0,r=void 0;for(t=a.length-1;t>-1;t--)r=a[t],e[r]=null,e[r+"-offset"]=null;return e}},{key:"render",value:function(){var e={},t=void 0,r=void 0,n=void 0,s=void 0;for(t=a.length-1;t>-1;t--)r=a[t],s="mui-col-"+r,n=this.props[r],n&&(e[s+"-"+n]=!0),n=this.props[r+"-offset"],n&&(e[s+"-offset-"+n]=!0);return e=o.classNames(e),l["default"].createElement("div",babelHelpers["extends"]({},this.props,{className:e+" "+this.props.className}),this.props.children)}}]),t}(l["default"].Component);r["default"]=i,t.exports=r["default"]},{"../js/lib/util":5,react:"CwoHg3"}],16:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e="mui-container";return this.props.fluid&&(e+="-fluid"),l["default"].createElement("div",babelHelpers["extends"]({},this.props,{className:e+" "+this.props.className}),this.props.children)}}]),t}(l["default"].Component);s.propTypes={fluid:l["default"].PropTypes.bool},s.defaultProps={className:"",fluid:!1},r["default"]=s,t.exports=r["default"]},{react:"CwoHg3"}],17:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e=this.props,t=(e.children,babelHelpers.objectWithoutProperties(e,["children"]));return l["default"].createElement("div",babelHelpers["extends"]({},t,{className:"mui-divider "+this.props.className}))}}]),t}(l["default"].Component);s.defaultProps={className:""},r["default"]=s,t.exports=r["default"]},{react:"CwoHg3"}],18:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=e("../js/lib/util"),o=babelHelpers.interopRequireWildcard(s),a=l["default"].PropTypes,i=function(e){function t(e){babelHelpers.classCallCheck(this,t);var r=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e));return r.onClickCB=o.callback(r,"onClick"),r}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"onClick",value:function(e){this.props.onClick&&this.props.onClick(this,e)}},{key:"render",value:function(){var e=this.props,t=e.children,r=(e.onClick,babelHelpers.objectWithoutProperties(e,["children","onClick"]));return l["default"].createElement("li",r,l["default"].createElement("a",{href:this.props.link,target:this.props.target,"data-mui-value":this.props.value,onClick:this.onClickCB},t))}}]),t}(l["default"].Component);i.propTypes={link:a.string,target:a.string,onClick:a.func},r["default"]=i,t.exports=r["default"]},{"../js/lib/util":5,react:"CwoHg3"}],19:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=e("./button"),o=babelHelpers.interopRequireDefault(s),a=e("./caret"),i=babelHelpers.interopRequireDefault(a),u=e("../js/lib/jqLite"),c=babelHelpers.interopRequireWildcard(u),p=e("../js/lib/util"),d=babelHelpers.interopRequireWildcard(p),f=l["default"].PropTypes,b="mui-dropdown",h="mui-dropdown__menu",v="mui--is-open",m="mui-dropdown__menu--right",C=function(e){function t(e){babelHelpers.classCallCheck(this,t);var r=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e));r.state={opened:!1,menuTop:0};var n=d.callback;return r.selectCB=n(r,"select"),r.onClickCB=n(r,"onClick"),r.onOutsideClickCB=n(r,"onOutsideClick"),r}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentWillMount",value:function(){document.addEventListener("click",this.onOutsideClickCB)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("click",this.onOutsideClickCB)}},{key:"onClick",value:function(e){if(0===e.button&&!this.props.disabled&&!e.defaultPrevented){this.toggle();var t=this.props.onClick;t&&t(e)}}},{key:"toggle",value:function(){return this.props.children?void(this.state.opened?this.close():this.open()):d.raiseError("Dropdown menu element not found")}},{key:"open",value:function(){var e=this.refs.wrapperEl.getBoundingClientRect(),t=void 0;t=this.refs.button.refs.buttonEl.getBoundingClientRect(),this.setState({opened:!0,menuTop:t.top-e.top+t.height})}},{key:"close",value:function(){this.setState({opened:!1})}},{key:"select",value:function(e){this.props.onSelect&&"A"===e.target.tagName&&this.props.onSelect(e.target.getAttribute("data-mui-value")),e.defaultPrevented||this.close()}},{key:"onOutsideClick",value:function(e){var t=this.refs.wrapperEl.contains(e.target);t||this.close()}},{key:"render",value:function(){var e=void 0,t=void 0,r=void 0;if(r="string"===c.type(this.props.label)?l["default"].createElement("span",null,this.props.label," ",l["default"].createElement(i["default"],null)):this.props.label,e=l["default"].createElement(o["default"],{ref:"button",type:"button",onClick:this.onClickCB,color:this.props.color,variant:this.props.variant,size:this.props.size,disabled:this.props.disabled},r),this.state.opened){var n={};n[h]=!0,n[v]=this.state.opened,n[m]="right"===this.props.alignMenu,n=d.classNames(n),t=l["default"].createElement("ul",{ref:"menuEl",className:n,style:{top:this.state.menuTop},onClick:this.selectCB},this.props.children)}var s=this.props,a=s.className,u=(s.children,s.onClick,babelHelpers.objectWithoutProperties(s,["className","children","onClick"]));return l["default"].createElement("div",babelHelpers["extends"]({},u,{ref:"wrapperEl",className:b+" "+a}),e,t)}}]),t}(l["default"].Component);C.propTypes={color:f.oneOf(["default","primary","danger","dark","accent"]),variant:f.oneOf(["default","flat","raised","fab"]),size:f.oneOf(["default","small","large"]),label:f.oneOfType([f.string,f.element]),alignMenu:f.oneOf(["left","right"]),onClick:f.func,onSelect:f.func,disabled:f.bool},C.defaultProps={className:"",color:"default",variant:"default",size:"default",label:"",alignMenu:"left",onClick:null,onSelect:null,disabled:!1},r["default"]=C,t.exports=r["default"]},{"../js/lib/jqLite":4,"../js/lib/util":5,"./button":7,"./caret":8,react:"CwoHg3"}],20:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e="";return this.props.inline&&(e="mui-form--inline"),l["default"].createElement("form",babelHelpers["extends"]({},this.props,{className:e+" "+this.props.className}),this.props.children)}}]),t}(l["default"].Component);s.propTypes={inline:l["default"].PropTypes.bool},s.defaultProps={className:"",inline:!1},r["default"]=s,t.exports=r["default"]},{react:"CwoHg3"}],21:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=e("./text-field"),o=l["default"].PropTypes,a=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){return l["default"].createElement(s.TextField,this.props)}}]),t}(l["default"].Component);a.propTypes={type:o.oneOf(["text","email","url","tel","password"])},a.defaultProps={type:"text"},r["default"]=a,t.exports=r["default"]},{"./text-field":10,react:"CwoHg3"}],22:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=e("../js/lib/forms"),o=(babelHelpers.interopRequireWildcard(s),e("../js/lib/jqLite")),a=(babelHelpers.interopRequireWildcard(o),e("../js/lib/util")),i=(babelHelpers.interopRequireWildcard(a),l["default"].PropTypes),u=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e=this.props,t=(e.children,babelHelpers.objectWithoutProperties(e,["children"]));return l["default"].createElement("option",babelHelpers["extends"]({},t,{value:this.props.value}),this.props.label)}}]),t}(l["default"].Component);u.propTypes={value:i.string,label:i.string},u.defaultProps={value:null,label:null},r["default"]=u,t.exports=r["default"]},{"../js/lib/forms":3,"../js/lib/jqLite":4,"../js/lib/util":5,react:"CwoHg3"}],23:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){return l["default"].createElement("div",babelHelpers["extends"]({},this.props,{className:"mui-panel "+this.props.className}),this.props.children)}}]),t}(l["default"].Component);s.defaultProps={className:""},r["default"]=s,t.exports=r["default"]},{react:"CwoHg3"}],24:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=l["default"].PropTypes,o=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e=this.props,t=(e.children,e.onChange,babelHelpers.objectWithoutProperties(e,["children","onChange"]));return l["default"].createElement("div",babelHelpers["extends"]({},t,{className:"mui-radio "+this.props.className}),l["default"].createElement("label",null,l["default"].createElement("input",{ref:"inputEl",type:"radio",name:this.props.name,value:this.props.value,checked:this.props.checked,defaultChecked:this.props.defaultChecked,disabled:this.props.disabled,onChange:this.props.onChange}),this.props.label))}}]),t}(l["default"].Component);o.propTypes={name:s.string,label:s.string,value:s.string,checked:s.bool,defaultChecked:s.bool,disabled:s.bool,onChange:s.func},o.defaultProps={className:"",name:null,label:null,disabled:!1,onChange:null},r["default"]=o,t.exports=r["default"]},{react:"CwoHg3"}],25:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=e("../js/lib/util"),o=(babelHelpers.interopRequireWildcard(s),function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){return l["default"].createElement("div",babelHelpers["extends"]({},this.props,{className:"mui-row "+this.props.className}),this.props.children)}}]),t}(l["default"].Component));o.defaultProps={className:""},r["default"]=o,t.exports=r["default"]},{"../js/lib/util":5,react:"CwoHg3"}],26:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=e("../js/lib/forms"),o=babelHelpers.interopRequireWildcard(s),a=e("../js/lib/jqLite"),i=babelHelpers.interopRequireWildcard(a),u=e("../js/lib/util"),c=babelHelpers.interopRequireWildcard(u),p=e("./_helpers"),d=l["default"].PropTypes,f=function(e){ +function t(e){babelHelpers.classCallCheck(this,t);var r=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e));r.state={showMenu:!1},e.readOnly===!1&&void 0!==e.value&&null===e.onChange&&c.raiseError(p.controlledMessage,!0),r.state.value=e.value;var n=c.callback;return r.hideMenuCB=n(r,"hideMenu"),r.onInnerChangeCB=n(r,"onInnerChange"),r.onInnerClickCB=n(r,"onInnerClick"),r.onInnerFocusCB=n(r,"onInnerFocus"),r.onInnerMouseDownCB=n(r,"onInnerMouseDown"),r.onKeydownCB=n(r,"onKeydown"),r.onMenuChangeCB=n(r,"onMenuChange"),r.onOuterFocusCB=n(r,"onOuterFocus"),r.onOuterBlurCB=n(r,"onOuterBlur"),r}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentDidMount",value:function(){this.refs.selectEl._muiSelect=!0,this.refs.wrapperEl.tabIndex=-1,this.props.autoFocus&&this.refs.wrapperEl.focus()}},{key:"componentWillReceiveProps",value:function(e){this.setState({value:e.value})}},{key:"onInnerMouseDown",value:function(e){0===e.button&&this.props.useDefault!==!0&&e.preventDefault()}},{key:"onInnerChange",value:function(e){var t=e.target.value;this.setState({value:t});var r=this.props.onChange;r&&r(t)}},{key:"onInnerClick",value:function(e){0===e.button&&this.showMenu()}},{key:"onInnerFocus",value:function(e){var t=this;this.props.useDefault!==!0&&setTimeout(function(){t.refs.wrapperEl.focus()},0)}},{key:"onOuterFocus",value:function(e){if(e.target===this.refs.wrapperEl){var t=this.refs.selectEl;return t._muiOrigIndex=t.tabIndex,t.tabIndex=-1,t.disabled?this.refs.wrapperEl.blur():void i.on(document,"keydown",this.onKeydownCB)}}},{key:"onOuterBlur",value:function(e){if(e.target===this.refs.wrapperEl){var t=this.refs.selectEl;t.tabIndex=t._muiOrigIndex,i.off(document,"keydown",this.onKeydownCB)}}},{key:"onKeydown",value:function(e){32!==e.keyCode&&38!==e.keyCode&&40!==e.keyCode||(e.preventDefault(),this.refs.selectEl.disabled!==!0&&this.showMenu())}},{key:"showMenu",value:function(){this.props.useDefault!==!0&&(c.enableScrollLock(),i.on(window,"resize",this.hideMenuCB),i.on(document,"click",this.hideMenuCB),this.setState({showMenu:!0}))}},{key:"hideMenu",value:function(){c.disableScrollLock(),i.off(window,"resize",this.hideMenuCB),i.off(document,"click",this.hideMenuCB),this.setState({showMenu:!1}),this.refs.selectEl.focus()}},{key:"onMenuChange",value:function(e){if(this.props.readOnly!==!0){this.setState({value:e});var t=this.props.onChange;t&&t(e)}}},{key:"render",value:function(){var e=void 0;this.state.showMenu&&(e=l["default"].createElement(b,{optionEls:this.refs.selectEl.children,wrapperEl:this.refs.wrapperEl,onChange:this.onMenuChangeCB,onClose:this.hideMenuCB}));var t=this.props,r=(t.children,t.onChange,babelHelpers.objectWithoutProperties(t,["children","onChange"]));return l["default"].createElement("div",babelHelpers["extends"]({},r,{ref:"wrapperEl",className:"mui-select "+this.props.className,onFocus:this.onOuterFocusCB,onBlur:this.onOuterBlurCB}),l["default"].createElement("select",{ref:"selectEl",name:this.props.name,value:this.state.value,defaultValue:this.props.defaultValue,disabled:this.props.disabled,multiple:this.props.multiple,readOnly:this.props.readOnly,required:this.props.required,onChange:this.onInnerChangeCB,onMouseDown:this.onInnerMouseDownCB,onClick:this.onInnerClickCB,onFocus:this.onInnerFocusCB},this.props.children),e)}}]),t}(l["default"].Component);f.propTypes={name:d.string,value:d.string,defaultValue:d.string,autoFocus:d.bool,disabled:d.bool,multiple:d.bool,readOnly:d.bool,required:d.bool,useDefault:d.bool,onChange:d.func},f.defaultProps={className:"",name:null,autoFocus:!1,disabled:!1,multiple:!1,readOnly:!1,required:!1,useDefault:!1,onChange:null};var b=function(e){function t(e){babelHelpers.classCallCheck(this,t);var r=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e));return r.state={origIndex:null,currentIndex:null},r.onKeydownCB=c.callback(r,"onKeydown"),r}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentWillMount",value:function(){var e=this.props.optionEls,t=e.length,r=0,n=void 0;for(n=t-1;n>-1;n--)e[n].selected&&(r=n);this.setState({origIndex:r,currentIndex:r})}},{key:"componentDidMount",value:function(){this.blurTimer=setTimeout(function(){var e=document.activeElement;"body"!==e.nodeName.toLowerCase()&&e.blur()},0);var e=o.getMenuPositionalCSS(this.props.wrapperEl,this.props.optionEls.length,this.state.currentIndex),t=this.refs.wrapperEl;i.css(t,e),i.scrollTop(t,e.scrollTop),i.on(document,"keydown",this.onKeydownCB)}},{key:"componentWillUnmount",value:function(){clearTimeout(this.blurTimer),i.off(document,"keydown",this.onKeydownCB)}},{key:"onClick",value:function(e,t){t.stopPropagation(),this.selectAndDestroy(e)}},{key:"onKeydown",value:function(e){var t=e.keyCode;return 9===t?this.destroy():(27!==t&&40!==t&&38!==t&&13!==t||e.preventDefault(),void(27===t?this.destroy():40===t?this.increment():38===t?this.decrement():13===t&&this.selectAndDestroy()))}},{key:"increment",value:function(){this.state.currentIndex!==this.props.optionEls.length-1&&this.setState({currentIndex:this.state.currentIndex+1})}},{key:"decrement",value:function(){0!==this.state.currentIndex&&this.setState({currentIndex:this.state.currentIndex-1})}},{key:"selectAndDestroy",value:function(e){e=void 0===e?this.state.currentIndex:e,e!==this.state.origIndex&&this.props.onChange(this.props.optionEls[e].value),this.destroy()}},{key:"destroy",value:function(){this.props.onClose()}},{key:"render",value:function(){var e=[],t=this.props.optionEls,r=t.length,n=void 0,s=void 0;for(s=0;r>s;s++)n=s===this.state.currentIndex?"mui--is-selected":"",e.push(l["default"].createElement("div",{key:s,className:n,onClick:this.onClick.bind(this,s)},t[s].textContent));return l["default"].createElement("div",{ref:"wrapperEl",className:"mui-select__menu"},e)}}]),t}(l["default"].Component);b.defaultProps={optionEls:[],wrapperEl:null,onChange:null,onClose:null},r["default"]=f,t.exports=r["default"]},{"../js/lib/forms":3,"../js/lib/jqLite":4,"../js/lib/util":5,"./_helpers":6,react:"CwoHg3"}],27:[function(e,t,r){t.exports=e(9)},{react:"CwoHg3"}],28:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=e("./tab"),o=babelHelpers.interopRequireDefault(s),a=e("../js/lib/util"),i=babelHelpers.interopRequireWildcard(a),u=l["default"].PropTypes,c="mui-tabs__bar",p="mui-tabs__bar--justified",d="mui-tabs__pane",f="mui--is-active",b=function(e){function t(e){babelHelpers.classCallCheck(this,t);var r=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e));return r.state={currentSelectedIndex:e.initialSelectedIndex},r}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"onClick",value:function(e,t,r){e!==this.state.currentSelectedIndex&&(this.setState({currentSelectedIndex:e}),t.props.onActive&&t.props.onActive(t),this.props.onChange&&this.props.onChange(e,t.props.value,t,r))}},{key:"render",value:function(){var e=this.props,t=e.children,r=babelHelpers.objectWithoutProperties(e,["children"]),n=[],s=[],a=t.length,u=this.state.currentSelectedIndex%a,b=void 0,h=void 0,v=void 0,m=void 0;for(m=0;a>m;m++)h=t[m],h.type!==o["default"]&&i.raiseError("Expecting MUITab React Element"),b=m===u,n.push(l["default"].createElement("li",{key:m,className:b?f:""},l["default"].createElement("a",{onClick:this.onClick.bind(this,m,h)},h.props.label))),v=d+" ",b&&(v+=f),s.push(l["default"].createElement("div",{key:m,className:v},h.props.children));return v=c,this.props.justified&&(v+=" "+p),l["default"].createElement("div",r,l["default"].createElement("ul",{className:v},n),s)}}]),t}(l["default"].Component);b.propTypes={initialSelectedIndex:u.number,justified:u.bool,onChange:u.func},b.defaultProps={className:"",initialSelectedIndex:0,justified:!1,onChange:null},r["default"]=b,t.exports=r["default"]},{"../js/lib/util":5,"./tab":9,react:"CwoHg3"}],29:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=e("./text-field"),o=l["default"].PropTypes,a=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){return l["default"].createElement(s.TextField,this.props)}}]),t}(l["default"].Component);a.propTypes={rows:o.number},a.defaultProps={type:"textarea",rows:2},r["default"]=a,t.exports=r["default"]},{"./text-field":10,react:"CwoHg3"}]},{},[1]); \ No newline at end of file diff --git a/platforms/android/assets/www/libs/mui/packages/cdn/webcomponents/mui-webcomponents.js b/platforms/android/assets/www/libs/mui/packages/cdn/webcomponents/mui-webcomponents.js new file mode 100644 index 0000000..6fe112a --- /dev/null +++ b/platforms/android/assets/www/libs/mui/packages/cdn/webcomponents/mui-webcomponents.js @@ -0,0 +1,1023 @@ +(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o -1); +} + + +/** + * Return the type of a variable. + * @param {} somevar - The JavaScript variable. + */ +function jqLiteType(somevar) { + // handle undefined + if (somevar === undefined) return 'undefined'; + + // handle others (of type [object ]) + var typeStr = Object.prototype.toString.call(somevar); + if (typeStr.indexOf('[object ') === 0) { + return typeStr.slice(8, -1).toLowerCase(); + } else { + throw new Error("MUI: Could not understand type: " + typeStr); + } +} + + +/** + * Attach an event handler to a DOM element + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOn(element, type, callback, useCapture) { + useCapture = (useCapture === undefined) ? false : useCapture; + + // add to DOM + element.addEventListener(type, callback, useCapture); + + // add to cache + var cache = element._muiEventCache = element._muiEventCache || {}; + cache[type] = cache[type] || []; + cache[type].push([callback, useCapture]); +} + + +/** + * Remove an event handler from a DOM element + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOff(element, type, callback, useCapture) { + useCapture = (useCapture === undefined) ? false : useCapture; + + // remove from cache + var cache = element._muiEventCache = element._muiEventCache || {}, + argsList = cache[type] || [], + args, + i; + + i = argsList.length; + while (i--) { + args = argsList[i]; + + // remove all events if callback is undefined + if (callback === undefined || + (args[0] === callback && args[1] === useCapture)) { + + // remove from cache + argsList.splice(i, 1); + + // remove from DOM + element.removeEventListener(type, args[0], args[1]); + } + } +} + + +/** + * Attach an event hander which will only execute once + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOne(element, type, callback, useCapture) { + jqLiteOn(element, type, function onFn(ev) { + // execute callback + if (callback) callback.apply(this, arguments); + + // remove wrapper + jqLiteOff(element, type, onFn); + }, useCapture); +} + + +/** + * Get or set horizontal scroll position + * @param {Element} element - The DOM element + * @param {number} [value] - The scroll position + */ +function jqLiteScrollLeft(element, value) { + var win = window; + + // get + if (value === undefined) { + if (element === win) { + var docEl = document.documentElement; + return (win.pageXOffset || docEl.scrollLeft) - (docEl.clientLeft || 0); + } else { + return element.scrollLeft; + } + } + + // set + if (element === win) win.scrollTo(value, jqLiteScrollTop(win)); + else element.scrollLeft = value; +} + + +/** + * Get or set vertical scroll position + * @param {Element} element - The DOM element + * @param {number} value - The scroll position + */ +function jqLiteScrollTop(element, value) { + var win = window; + + // get + if (value === undefined) { + if (element === win) { + var docEl = document.documentElement; + return (win.pageYOffset || docEl.scrollTop) - (docEl.clientTop || 0); + } else { + return element.scrollTop; + } + } + + // set + if (element === win) win.scrollTo(jqLiteScrollLeft(win), value); + else element.scrollTop = value; +} + + +/** + * Return object representing top/left offset and element height/width. + * @param {Element} element - The DOM element. + */ +function jqLiteOffset(element) { + var win = window, + rect = element.getBoundingClientRect(), + scrollTop = jqLiteScrollTop(win), + scrollLeft = jqLiteScrollLeft(win); + + return { + top: rect.top + scrollTop, + left: rect.left + scrollLeft, + height: rect.height, + width: rect.width + }; +} + + +/** + * Attach a callback to the DOM ready event listener + * @param {Function} fn - The callback function. + */ +function jqLiteReady(fn) { + var done = false, + top = true, + doc = document, + win = doc.defaultView, + root = doc.documentElement, + add = doc.addEventListener ? 'addEventListener' : 'attachEvent', + rem = doc.addEventListener ? 'removeEventListener' : 'detachEvent', + pre = doc.addEventListener ? '' : 'on'; + + var init = function(e) { + if (e.type == 'readystatechange' && doc.readyState != 'complete') { + return; + } + + (e.type == 'load' ? win : doc)[rem](pre + e.type, init, false); + if (!done && (done = true)) fn.call(win, e.type || e); + }; + + var poll = function() { + try { root.doScroll('left'); } catch(e) { setTimeout(poll, 50); return; } + init('poll'); + }; + + if (doc.readyState == 'complete') { + fn.call(win, 'lazy'); + } else { + if (doc.createEventObject && root.doScroll) { + try { top = !win.frameElement; } catch(e) { } + if (top) poll(); + } + doc[add](pre + 'DOMContentLoaded', init, false); + doc[add](pre + 'readystatechange', init, false); + win[add](pre + 'load', init, false); + } +} + + +/** + * Remove classes from a DOM element + * @param {Element} element - The DOM element. + * @param {string} cssClasses - Space separated list of class names. + */ +function jqLiteRemoveClass(element, cssClasses) { + if (!cssClasses || !element.setAttribute) return; + + var existingClasses = _getExistingClasses(element), + splitClasses = cssClasses.split(' '), + cssClass; + + for (var i=0; i < splitClasses.length; i++) { + cssClass = splitClasses[i].trim(); + while (existingClasses.indexOf(' ' + cssClass + ' ') >= 0) { + existingClasses = existingClasses.replace(' ' + cssClass + ' ', ' '); + } + } + + element.setAttribute('class', existingClasses.trim()); +} + + +// ------------------------------ +// Utilities +// ------------------------------ +var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g, + MOZ_HACK_REGEXP = /^moz([A-Z])/, + ESCAPE_REGEXP = /([.*+?^=!:${}()|\[\]\/\\])/g, + BOOLEAN_ATTRS; + + +BOOLEAN_ATTRS = { + multiple: true, + selected: true, + checked: true, + disabled: true, + readonly: true, + required: true, + open: true +} + + +function _getExistingClasses(element) { + var classes = (element.getAttribute('class') || '').replace(/[\n\t]/g, ''); + return ' ' + classes + ' '; +} + + +function _camelCase(name) { + return name. + replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) { + return offset ? letter.toUpperCase() : letter; + }). + replace(MOZ_HACK_REGEXP, 'Moz$1'); +} + + +function _escapeRegExp(string) { + return string.replace(ESCAPE_REGEXP, "\\$1"); +} + + +function _getCurrCssProp(elem, name, computed) { + var ret; + + // try computed style + ret = computed.getPropertyValue(name); + + // try style attribute (if element is not attached to document) + if (ret === '' && !elem.ownerDocument) ret = elem.style[_camelCase(name)]; + + return ret; +} + + +/** + * Module API + */ +module.exports = { + /** Add classes */ + addClass: jqLiteAddClass, + + /** Get or set CSS properties */ + css: jqLiteCss, + + /** Check for class */ + hasClass: jqLiteHasClass, + + /** Remove event handlers */ + off: jqLiteOff, + + /** Return offset values */ + offset: jqLiteOffset, + + /** Add event handlers */ + on: jqLiteOn, + + /** Add an execute-once event handler */ + one: jqLiteOne, + + /** DOM ready event handler */ + ready: jqLiteReady, + + /** Remove classes */ + removeClass: jqLiteRemoveClass, + + /** Check JavaScript variable instance type */ + type: jqLiteType, + + /** Get or set horizontal scroll position */ + scrollLeft: jqLiteScrollLeft, + + /** Get or set vertical scroll position */ + scrollTop: jqLiteScrollTop +}; + +},{}],4:[function(require,module,exports){ +/** + * MUI CSS/JS utilities module + * @module lib/util + */ + +'use strict'; + + +var config = require('../config'), + jqLite = require('./jqLite'), + nodeInsertedCallbacks = [], + scrollLock = 0, + scrollLockCls = 'mui-body--scroll-lock', + scrollLockPos, + _supportsPointerEvents; + + +/** + * Logging function + */ +function logFn() { + var win = window; + + if (config.debug && typeof win.console !== "undefined") { + try { + win.console.log.apply(win.console, arguments); + } catch (a) { + var e = Array.prototype.slice.call(arguments); + win.console.log(e.join("\n")); + } + } +} + + +/** + * Load CSS text in new stylesheet + * @param {string} cssText - The css text. + */ +function loadStyleFn(cssText) { + var doc = document, + head; + + // copied from jQuery + head = doc.head || + doc.getElementsByTagName('head')[0] || + doc.documentElement; + + var e = doc.createElement('style'); + e.type = 'text/css'; + + if (e.styleSheet) e.styleSheet.cssText = cssText; + else e.appendChild(doc.createTextNode(cssText)); + + // add to document + head.insertBefore(e, head.firstChild); + + return e; +} + + +/** + * Raise an error + * @param {string} msg - The error message. + */ +function raiseErrorFn(msg, useConsole) { + if (useConsole) { + if (typeof console !== 'undefined') console.error('MUI Warning: ' + msg); + } else { + throw new Error('MUI: ' + msg); + } +} + + +/** + * Register callbacks on muiNodeInserted event + * @param {function} callbackFn - The callback function. + */ +function onNodeInsertedFn(callbackFn) { + nodeInsertedCallbacks.push(callbackFn); + + // initalize listeners + if (nodeInsertedCallbacks._initialized === undefined) { + var doc = document; + + jqLite.on(doc, 'animationstart', animationHandlerFn); + jqLite.on(doc, 'mozAnimationStart', animationHandlerFn); + jqLite.on(doc, 'webkitAnimationStart', animationHandlerFn); + + nodeInsertedCallbacks._initialized = true; + } +} + + +/** + * Execute muiNodeInserted callbacks + * @param {Event} ev - The DOM event. + */ +function animationHandlerFn(ev) { + // check animation name + if (ev.animationName !== 'mui-node-inserted') return; + + var el = ev.target; + + // iterate through callbacks + for (var i=nodeInsertedCallbacks.length - 1; i >= 0; i--) { + nodeInsertedCallbacks[i](el); + } +} + + +/** + * Convert Classname object, with class as key and true/false as value, to an + * class string. + * @param {Object} classes The classes + * @return {String} class string + */ +function classNamesFn(classes) { + var cs = ''; + for (var i in classes) { + cs += (classes[i]) ? i + ' ' : ''; + } + return cs.trim(); +} + + +/** + * Check if client supports pointer events. + */ +function supportsPointerEventsFn() { + // check cache + if (_supportsPointerEvents !== undefined) return _supportsPointerEvents; + + var element = document.createElement('x'); + element.style.cssText = 'pointer-events:auto'; + _supportsPointerEvents = (element.style.pointerEvents === 'auto'); + return _supportsPointerEvents; +} + + +/** + * Create callback closure. + * @param {Object} instance - The object instance. + * @param {String} funcName - The name of the callback function. + */ +function callbackFn(instance, funcName) { + return function() {instance[funcName].apply(instance, arguments);}; +} + + +/** + * Dispatch event. + * @param {Element} element - The DOM element. + * @param {String} eventType - The event type. + * @param {Boolean} bubbles=true - If true, event bubbles. + * @param {Boolean} cancelable=true = If true, event is cancelable + * @param {Object} [data] - Data to add to event object + */ +function dispatchEventFn(element, eventType, bubbles, cancelable, data) { + var ev = document.createEvent('HTMLEvents'), + bubbles = (bubbles !== undefined) ? bubbles : true, + cancelable = (cancelable !== undefined) ? cancelable : true, + k; + + ev.initEvent(eventType, bubbles, cancelable); + + // add data to event object + if (data) for (k in data) ev[k] = data[k]; + + // dispatch + if (element) element.dispatchEvent(ev); + + return ev; +} + + +/** + * Turn on window scroll lock. + */ +function enableScrollLockFn() { + // increment counter + scrollLock += 1 + + // add lock + if (scrollLock === 1) { + var win = window, + doc = document; + + scrollLockPos = {left: jqLite.scrollLeft(win), top: jqLite.scrollTop(win)}; + jqLite.addClass(doc.body, scrollLockCls); + win.scrollTo(scrollLockPos.left, scrollLockPos.top); + } +} + + +/** + * Turn off window scroll lock. + */ +function disableScrollLockFn() { + // ignore + if (scrollLock === 0) return; + + // decrement counter + scrollLock -= 1 + + // remove lock + if (scrollLock === 0) { + var win = window, + doc = document; + + jqLite.removeClass(doc.body, scrollLockCls); + win.scrollTo(scrollLockPos.left, scrollLockPos.top); + } +} + + +/** + * Define the module API + */ +module.exports = { + /** Create callback closures */ + callback: callbackFn, + + /** Classnames object to string */ + classNames: classNamesFn, + + /** Disable scroll lock */ + disableScrollLock: disableScrollLockFn, + + /** Dispatch event */ + dispatchEvent: dispatchEventFn, + + /** Enable scroll lock */ + enableScrollLock: enableScrollLockFn, + + /** Log messages to the console when debug is turned on */ + log: logFn, + + /** Load CSS text as new stylesheet */ + loadStyle: loadStyleFn, + + /** Register muiNodeInserted handler */ + onNodeInserted: onNodeInsertedFn, + + /** Raise MUI error */ + raiseError: raiseErrorFn, + + /** Support Pointer Events check */ + supportsPointerEvents: supportsPointerEventsFn +}; + +},{"../config":2,"./jqLite":3}],5:[function(require,module,exports){ +/** + * MUI CSS/JS form-control module + * @module forms/form-control + */ + +'use strict'; + + +var jqLite = require('./lib/jqLite'), + util = require('./lib/util'), + cssSelector = '.mui-textfield > input, .mui-textfield > textarea', + emptyClass = 'mui--is-empty', + notEmptyClass = 'mui--is-not-empty', + dirtyClass = 'mui--is-dirty', + floatingLabelClass = 'mui-textfield--float-label'; + + +/** + * Initialize input element. + * @param {Element} inputEl - The input element. + */ +function initialize(inputEl) { + // check flag + if (inputEl._muiTextfield === true) return; + else inputEl._muiTextfield = true; + + if (inputEl.value.length) jqLite.addClass(inputEl, notEmptyClass); + else jqLite.addClass(inputEl, emptyClass); + + jqLite.on(inputEl, 'input', inputHandler); + jqLite.on(inputEl, 'change', inputHandler); + + // add dirty class on focus + jqLite.on(inputEl, 'focus', function(){jqLite.addClass(this, dirtyClass);}); +} + + +/** + * Handle input events. + */ +function inputHandler() { + var inputEl = this; + + if (inputEl.value.length) { + jqLite.removeClass(inputEl, emptyClass); + jqLite.addClass(inputEl, notEmptyClass); + } else { + jqLite.removeClass(inputEl, notEmptyClass); + jqLite.addClass(inputEl, emptyClass) + } + + jqLite.addClass(inputEl, dirtyClass); +} + + +/** Define module API */ +module.exports = { + /** Initialize input elements */ + initialize: initialize, + + /** Initialize module listeners */ + initListeners: function() { + var doc = document; + + // markup elements available when method is called + var elList = doc.querySelectorAll(cssSelector); + for (var i=elList.length - 1; i >= 0; i--) initialize(elList[i]); + + // listen for new elements + util.onNodeInserted(function(el) { + if (el.tagName === 'INPUT' || el.tagName === 'TEXTAREA') initialize(el); + }); + + // add transition css for floating labels + setTimeout(function() { + var css = '.mui-textfield.mui-textfield--float-label > label {' + [ + '-webkit-transition', + '-moz-transition', + '-o-transition', + 'transition', + '' + ].join(':all .15s ease-out;') + '}'; + + util.loadStyle(css); + }, 150); + + // pointer-events shim for floating labels + if (util.supportsPointerEvents() === false) { + jqLite.on(document, 'click', function(ev) { + var targetEl = ev.target; + + if (targetEl.tagName === 'LABEL' && + jqLite.hasClass(targetEl.parentNode, floatingLabelClass)) { + var inputEl = targetEl.previousElementSibling; + if (inputEl) inputEl.focus(); + } + }); + } + } +}; + +},{"./lib/jqLite":3,"./lib/util":4}],6:[function(require,module,exports){ +module.exports = "/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-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{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}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{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{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-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:border-box}:after,:before{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:Arial,Verdana,Tahoma;font-size:14px;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);background-color:#FFF}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#2196F3;text-decoration:none}a:focus,a:hover{color:#1976D2;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}p{margin:0 0 10px}ol,ul{margin-top:0;margin-bottom:10px}figure{margin:0}img{vertical-align:middle}hr{margin-top:20px;margin-bottom:20px;border:0;height:1px;background-color:rgba(0,0,0,.12)}legend{display:block;width:100%;padding:0;margin-bottom:10px;font-size:21px;color:rgba(0,0,0,.87);line-height:inherit;border:0}input[type=search]{box-sizing:border-box;-webkit-appearance:none}input[type=checkbox]:focus,input[type=radio]:focus,input[type=file]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type=checkbox]:disabled,input[type=radio]:disabled{cursor:not-allowed}strong{font-weight:700}abbr[title]{cursor:help;border-bottom:1px dotted #2196F3}h1,h2,h3{margin-top:20px;margin-bottom:10px}h4,h5,h6{margin-top:10px;margin-bottom:10px}.mui--appbar-height{height:56px}.mui--appbar-min-height,.mui-appbar{min-height:56px}.mui--appbar-line-height{line-height:56px}.mui--appbar-top{top:56px}@media (orientation:landscape) and (max-height:480px){.mui--appbar-height{height:48px}.mui--appbar-min-height,.mui-appbar{min-height:48px}.mui--appbar-line-height{line-height:48px}.mui--appbar-top{top:48px}}@media (min-width:480px){.mui--appbar-height{height:64px}.mui--appbar-min-height,.mui-appbar{min-height:64px}.mui--appbar-line-height{line-height:64px}.mui--appbar-top{top:64px}}.mui-appbar{background-color:#2196F3;color:#FFF}.mui-btn{animation-duration:.1ms;animation-name:mui-node-inserted;font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase;color:rgba(0,0,0,.87);background-color:#FFF;transition:all .2s ease-in-out;display:inline-block;height:36px;padding:0 26px;margin-top:6px;margin-bottom:6px;border:none;border-radius:2px;cursor:pointer;-ms-touch-action:manipulation;touch-action:manipulation;background-image:none;text-align:center;line-height:36px;vertical-align:middle;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:14px;letter-spacing:.03em;position:relative;overflow:hidden}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{color:rgba(0,0,0,.87);background-color:#fff}.mui-btn[disabled]:active,.mui-btn[disabled]:focus,.mui-btn[disabled]:hover{color:rgba(0,0,0,.87);background-color:#FFF}.mui-btn.mui-btn--flat{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn.mui-btn--flat:active,.mui-btn.mui-btn--flat:focus,.mui-btn.mui-btn--flat:hover{color:rgba(0,0,0,.87);background-color:#f2f2f2}.mui-btn.mui-btn--flat[disabled]:active,.mui-btn.mui-btn--flat[disabled]:focus,.mui-btn.mui-btn--flat[disabled]:hover{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{outline:0;text-decoration:none;color:rgba(0,0,0,.87)}.mui-btn:focus,.mui-btn:hover{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:focus,.mui-btn:hover{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn.mui--is-disabled,.mui-btn:disabled{cursor:not-allowed;pointer-events:none;opacity:.6;box-shadow:none}.mui-btn+.mui-btn{margin-left:8px}.mui-btn--flat{background-color:transparent}.mui-btn--flat:active,.mui-btn--flat:focus,.mui-btn--flat:hover{box-shadow:none;background-color:#f2f2f2}.mui-btn--fab,.mui-btn--raised{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab,.mui-btn--raised{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn--fab{position:relative;padding:0;width:55px;height:55px;line-height:55px;border-radius:50%;z-index:1}.mui-btn--primary{color:#FFF;background-color:#2196F3}.mui-btn--primary:active,.mui-btn--primary:focus,.mui-btn--primary:hover{color:#FFF;background-color:#39a1f4}.mui-btn--primary[disabled]:active,.mui-btn--primary[disabled]:focus,.mui-btn--primary[disabled]:hover{color:#FFF;background-color:#2196F3}.mui-btn--primary.mui-btn--flat{color:#2196F3;background-color:transparent}.mui-btn--primary.mui-btn--flat:active,.mui-btn--primary.mui-btn--flat:focus,.mui-btn--primary.mui-btn--flat:hover{color:#2196F3;background-color:#f2f2f2}.mui-btn--primary.mui-btn--flat[disabled]:active,.mui-btn--primary.mui-btn--flat[disabled]:focus,.mui-btn--primary.mui-btn--flat[disabled]:hover{color:#2196F3;background-color:transparent}.mui-btn--dark{color:#FFF;background-color:#424242}.mui-btn--dark:active,.mui-btn--dark:focus,.mui-btn--dark:hover{color:#FFF;background-color:#4f4f4f}.mui-btn--dark[disabled]:active,.mui-btn--dark[disabled]:focus,.mui-btn--dark[disabled]:hover{color:#FFF;background-color:#424242}.mui-btn--dark.mui-btn--flat{color:#424242;background-color:transparent}.mui-btn--dark.mui-btn--flat:active,.mui-btn--dark.mui-btn--flat:focus,.mui-btn--dark.mui-btn--flat:hover{color:#424242;background-color:#f2f2f2}.mui-btn--dark.mui-btn--flat[disabled]:active,.mui-btn--dark.mui-btn--flat[disabled]:focus,.mui-btn--dark.mui-btn--flat[disabled]:hover{color:#424242;background-color:transparent}.mui-btn--danger{color:#FFF;background-color:#F44336}.mui-btn--danger:active,.mui-btn--danger:focus,.mui-btn--danger:hover{color:#FFF;background-color:#f55a4e}.mui-btn--danger[disabled]:active,.mui-btn--danger[disabled]:focus,.mui-btn--danger[disabled]:hover{color:#FFF;background-color:#F44336}.mui-btn--danger.mui-btn--flat{color:#F44336;background-color:transparent}.mui-btn--danger.mui-btn--flat:active,.mui-btn--danger.mui-btn--flat:focus,.mui-btn--danger.mui-btn--flat:hover{color:#F44336;background-color:#f2f2f2}.mui-btn--danger.mui-btn--flat[disabled]:active,.mui-btn--danger.mui-btn--flat[disabled]:focus,.mui-btn--danger.mui-btn--flat[disabled]:hover{color:#F44336;background-color:transparent}.mui-btn--accent{color:#FFF;background-color:#FF4081}.mui-btn--accent:active,.mui-btn--accent:focus,.mui-btn--accent:hover{color:#FFF;background-color:#ff5a92}.mui-btn--accent[disabled]:active,.mui-btn--accent[disabled]:focus,.mui-btn--accent[disabled]:hover{color:#FFF;background-color:#FF4081}.mui-btn--accent.mui-btn--flat{color:#FF4081;background-color:transparent}.mui-btn--accent.mui-btn--flat:active,.mui-btn--accent.mui-btn--flat:focus,.mui-btn--accent.mui-btn--flat:hover{color:#FF4081;background-color:#f2f2f2}.mui-btn--accent.mui-btn--flat[disabled]:active,.mui-btn--accent.mui-btn--flat[disabled]:focus,.mui-btn--accent.mui-btn--flat[disabled]:hover{color:#FF4081;background-color:transparent}.mui-btn--small{height:30.6px;line-height:30.6px;padding:0 16px;font-size:13px}.mui-btn--large{height:54px;line-height:54px;padding:0 26px;font-size:14px}.mui-btn--fab.mui-btn--small{width:44px;height:44px;line-height:44px}.mui-btn--fab.mui-btn--large{width:75px;height:75px;line-height:75px}.mui-checkbox,.mui-radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.mui-checkbox>label,.mui-radio>label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio],.mui-radio>label>input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px}.mui-checkbox+.mui-checkbox,.mui-radio+.mui-radio{margin-top:-5px}.mui-checkbox--inline,.mui-radio--inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.mui-checkbox--inline>input[type=checkbox],.mui-checkbox--inline>input[type=radio],.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox--inline>label>input[type=radio],.mui-radio--inline>input[type=checkbox],.mui-radio--inline>input[type=radio],.mui-radio--inline>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio]{margin:4px 0 0;line-height:normal}.mui-checkbox--inline+.mui-checkbox--inline,.mui-radio--inline+.mui-radio--inline{margin-top:0;margin-left:10px}.mui-container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container:after,.mui-container:before{content:\" \";display:table}.mui-container:after{clear:both}@media (min-width:544px){.mui-container{max-width:570px}}@media (min-width:768px){.mui-container{max-width:740px}}@media (min-width:992px){.mui-container{max-width:960px}}@media (min-width:1200px){.mui-container{max-width:1170px}}.mui-container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container-fluid:after,.mui-container-fluid:before{content:\" \";display:table}.mui-container-fluid:after{clear:both}.mui-divider{display:block;height:1px;background-color:rgba(0,0,0,.12)}.mui--divider-top{border-top:1px solid rgba(0,0,0,.12)}.mui--divider-bottom{border-bottom:1px solid rgba(0,0,0,.12)}.mui--divider-left{border-left:1px solid rgba(0,0,0,.12)}.mui--divider-right{border-right:1px solid rgba(0,0,0,.12)}.mui-dropdown{display:inline-block;position:relative}[data-mui-toggle=dropdown]{animation-duration:.1ms;animation-name:mui-node-inserted;outline:0}.mui-dropdown__menu{position:absolute;top:100%;left:0;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#FFF;border-radius:2px;z-index:1;background-clip:padding-box}.mui-dropdown__menu.mui--is-open{display:block}.mui-dropdown__menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);white-space:nowrap}.mui-dropdown__menu>li>a:focus,.mui-dropdown__menu>li>a:hover{text-decoration:none;color:rgba(0,0,0,.87);background-color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a,.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;cursor:not-allowed}.mui-dropdown__menu--right{left:auto;right:0}@media (min-width:544px){.mui-form--inline>.mui-textfield{display:inline-block;margin-bottom:0}.mui-form--inline>.mui-checkbox,.mui-form--inline>.mui-radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.mui-form--inline>.mui-checkbox>label,.mui-form--inline>.mui-radio>label{padding-left:0}.mui-form--inline>.mui-checkbox>label>input[type=checkbox],.mui-form--inline>.mui-radio>label>input[type=radio]{position:relative;margin-left:0}.mui-form--inline>.mui-select{display:inline-block}.mui-form--inline>.mui-btn{margin-bottom:0;margin-top:0;vertical-align:bottom}}.mui-row{margin-left:-15px;margin-right:-15px}.mui-row:after,.mui-row:before{content:\" \";display:table}.mui-row:after{clear:both}.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9,.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9,.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9,.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{min-height:1px;padding-left:15px;padding-right:15px}.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{float:left}.mui-col-xs-1{width:8.33333%}.mui-col-xs-2{width:16.66667%}.mui-col-xs-3{width:25%}.mui-col-xs-4{width:33.33333%}.mui-col-xs-5{width:41.66667%}.mui-col-xs-6{width:50%}.mui-col-xs-7{width:58.33333%}.mui-col-xs-8{width:66.66667%}.mui-col-xs-9{width:75%}.mui-col-xs-10{width:83.33333%}.mui-col-xs-11{width:91.66667%}.mui-col-xs-12{width:100%}.mui-col-xs-offset-0{margin-left:0}.mui-col-xs-offset-1{margin-left:8.33333%}.mui-col-xs-offset-2{margin-left:16.66667%}.mui-col-xs-offset-3{margin-left:25%}.mui-col-xs-offset-4{margin-left:33.33333%}.mui-col-xs-offset-5{margin-left:41.66667%}.mui-col-xs-offset-6{margin-left:50%}.mui-col-xs-offset-7{margin-left:58.33333%}.mui-col-xs-offset-8{margin-left:66.66667%}.mui-col-xs-offset-9{margin-left:75%}.mui-col-xs-offset-10{margin-left:83.33333%}.mui-col-xs-offset-11{margin-left:91.66667%}.mui-col-xs-offset-12{margin-left:100%}@media (min-width:544px){.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9{float:left}.mui-col-sm-1{width:8.33333%}.mui-col-sm-2{width:16.66667%}.mui-col-sm-3{width:25%}.mui-col-sm-4{width:33.33333%}.mui-col-sm-5{width:41.66667%}.mui-col-sm-6{width:50%}.mui-col-sm-7{width:58.33333%}.mui-col-sm-8{width:66.66667%}.mui-col-sm-9{width:75%}.mui-col-sm-10{width:83.33333%}.mui-col-sm-11{width:91.66667%}.mui-col-sm-12{width:100%}.mui-col-sm-offset-0{margin-left:0}.mui-col-sm-offset-1{margin-left:8.33333%}.mui-col-sm-offset-2{margin-left:16.66667%}.mui-col-sm-offset-3{margin-left:25%}.mui-col-sm-offset-4{margin-left:33.33333%}.mui-col-sm-offset-5{margin-left:41.66667%}.mui-col-sm-offset-6{margin-left:50%}.mui-col-sm-offset-7{margin-left:58.33333%}.mui-col-sm-offset-8{margin-left:66.66667%}.mui-col-sm-offset-9{margin-left:75%}.mui-col-sm-offset-10{margin-left:83.33333%}.mui-col-sm-offset-11{margin-left:91.66667%}.mui-col-sm-offset-12{margin-left:100%}}@media (min-width:768px){.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9{float:left}.mui-col-md-1{width:8.33333%}.mui-col-md-2{width:16.66667%}.mui-col-md-3{width:25%}.mui-col-md-4{width:33.33333%}.mui-col-md-5{width:41.66667%}.mui-col-md-6{width:50%}.mui-col-md-7{width:58.33333%}.mui-col-md-8{width:66.66667%}.mui-col-md-9{width:75%}.mui-col-md-10{width:83.33333%}.mui-col-md-11{width:91.66667%}.mui-col-md-12{width:100%}.mui-col-md-offset-0{margin-left:0}.mui-col-md-offset-1{margin-left:8.33333%}.mui-col-md-offset-2{margin-left:16.66667%}.mui-col-md-offset-3{margin-left:25%}.mui-col-md-offset-4{margin-left:33.33333%}.mui-col-md-offset-5{margin-left:41.66667%}.mui-col-md-offset-6{margin-left:50%}.mui-col-md-offset-7{margin-left:58.33333%}.mui-col-md-offset-8{margin-left:66.66667%}.mui-col-md-offset-9{margin-left:75%}.mui-col-md-offset-10{margin-left:83.33333%}.mui-col-md-offset-11{margin-left:91.66667%}.mui-col-md-offset-12{margin-left:100%}}@media (min-width:992px){.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9{float:left}.mui-col-lg-1{width:8.33333%}.mui-col-lg-2{width:16.66667%}.mui-col-lg-3{width:25%}.mui-col-lg-4{width:33.33333%}.mui-col-lg-5{width:41.66667%}.mui-col-lg-6{width:50%}.mui-col-lg-7{width:58.33333%}.mui-col-lg-8{width:66.66667%}.mui-col-lg-9{width:75%}.mui-col-lg-10{width:83.33333%}.mui-col-lg-11{width:91.66667%}.mui-col-lg-12{width:100%}.mui-col-lg-offset-0{margin-left:0}.mui-col-lg-offset-1{margin-left:8.33333%}.mui-col-lg-offset-2{margin-left:16.66667%}.mui-col-lg-offset-3{margin-left:25%}.mui-col-lg-offset-4{margin-left:33.33333%}.mui-col-lg-offset-5{margin-left:41.66667%}.mui-col-lg-offset-6{margin-left:50%}.mui-col-lg-offset-7{margin-left:58.33333%}.mui-col-lg-offset-8{margin-left:66.66667%}.mui-col-lg-offset-9{margin-left:75%}.mui-col-lg-offset-10{margin-left:83.33333%}.mui-col-lg-offset-11{margin-left:91.66667%}.mui-col-lg-offset-12{margin-left:100%}}@media (min-width:1200px){.mui-col-xl-1,.mui-col-xl-10,.mui-col-xl-11,.mui-col-xl-12,.mui-col-xl-2,.mui-col-xl-3,.mui-col-xl-4,.mui-col-xl-5,.mui-col-xl-6,.mui-col-xl-7,.mui-col-xl-8,.mui-col-xl-9{float:left}.mui-col-xl-1{width:8.33333%}.mui-col-xl-2{width:16.66667%}.mui-col-xl-3{width:25%}.mui-col-xl-4{width:33.33333%}.mui-col-xl-5{width:41.66667%}.mui-col-xl-6{width:50%}.mui-col-xl-7{width:58.33333%}.mui-col-xl-8{width:66.66667%}.mui-col-xl-9{width:75%}.mui-col-xl-10{width:83.33333%}.mui-col-xl-11{width:91.66667%}.mui-col-xl-12{width:100%}.mui-col-xl-offset-0{margin-left:0}.mui-col-xl-offset-1{margin-left:8.33333%}.mui-col-xl-offset-2{margin-left:16.66667%}.mui-col-xl-offset-3{margin-left:25%}.mui-col-xl-offset-4{margin-left:33.33333%}.mui-col-xl-offset-5{margin-left:41.66667%}.mui-col-xl-offset-6{margin-left:50%}.mui-col-xl-offset-7{margin-left:58.33333%}.mui-col-xl-offset-8{margin-left:66.66667%}.mui-col-xl-offset-9{margin-left:75%}.mui-col-xl-offset-10{margin-left:83.33333%}.mui-col-xl-offset-11{margin-left:91.66667%}.mui-col-xl-offset-12{margin-left:100%}}.mui-panel{padding:15px;margin-bottom:20px;border-radius:0;background-color:#FFF;box-shadow:0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}.mui-panel:after,.mui-panel:before{content:\" \";display:table}.mui-panel:after{clear:both}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-panel{box-shadow:0 -1px 2px 0 rgba(0,0,0,.12),-1px 0 2px 0 rgba(0,0,0,.12),0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}}.mui-select{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-select:focus{outline:0}.mui-select:focus>select{height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;height:32px;width:100%;appearance:none;-webkit-appearance:none;-moz-appearance:none;outline:0;border:none;border-bottom:1px solid rgba(0,0,0,.26);border-radius:0;box-shadow:none;background-color:transparent;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iNiIgd2lkdGg9IjEwIj48cG9seWdvbiBwb2ludHM9IjAsMCAxMCwwIDUsNiIgc3R5bGU9ImZpbGw6cmdiYSgwLDAsMCwuMjQpOyIvPjwvc3ZnPg==);background-repeat:no-repeat;background-position:right center;cursor:pointer;color:rgba(0,0,0,.87);font-size:16px;padding:0 25px 0 0}.mui-select>select::-ms-expand{display:none}.mui-select>select:focus{outline:0;height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select:disabled{color:rgba(0,0,0,.38);cursor:not-allowed;background-color:transparent;opacity:1}.mui-select__menu{position:absolute;z-index:2;min-width:100%;overflow-y:auto;padding:8px 0;background-color:#FFF;font-size:16px}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-select__menu{border-left:1px solid rgba(0,0,0,.12);border-top:1px solid rgba(0,0,0,.12)}}.mui-select__menu>div{padding:0 22px;height:42px;line-height:42px;cursor:pointer;white-space:nowrap}.mui-select__menu>div:hover{background-color:#E0E0E0}.mui-select__menu>div.mui--is-selected{background-color:#EEE}th{text-align:left}.mui-table{width:100%;max-width:100%;margin-bottom:20px}.mui-table>tbody>tr>td,.mui-table>tbody>tr>th,.mui-table>tfoot>tr>td,.mui-table>tfoot>tr>th,.mui-table>thead>tr>td,.mui-table>thead>tr>th{padding:10px;line-height:1.429}.mui-table>thead>tr>th{border-bottom:2px solid rgba(0,0,0,.12);font-weight:700}.mui-table>tbody+tbody{border-top:2px solid rgba(0,0,0,.12)}.mui-table.mui-table--bordered>tbody>tr>td{border-bottom:1px solid rgba(0,0,0,.12)}.mui-tabs__bar{list-style:none;padding-left:0;margin-bottom:0;background-color:transparent;white-space:nowrap;overflow-x:auto}.mui-tabs__bar>li{display:inline-block}.mui-tabs__bar>li>a{display:block;white-space:nowrap;text-transform:uppercase;font-weight:500;font-size:14px;color:rgba(0,0,0,.87);cursor:default;height:48px;line-height:48px;padding-left:24px;padding-right:24px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-tabs__bar>li>a:hover{text-decoration:none}.mui-tabs__bar>li.mui--is-active{border-bottom:2px solid #2196F3}.mui-tabs__bar>li.mui--is-active>a{color:#2196F3}.mui-tabs__bar.mui-tabs__bar--justified{display:table;width:100%;table-layout:fixed}.mui-tabs__bar.mui-tabs__bar--justified>li{display:table-cell}.mui-tabs__bar.mui-tabs__bar--justified>li>a{text-align:center;padding-left:0;padding-right:0}.mui-tabs__pane{display:none}.mui-tabs__pane.mui--is-active{display:block}[data-mui-toggle=tab]{animation-duration:.1ms;animation-name:mui-node-inserted}.mui-textfield{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-textfield>label{position:absolute;top:0;display:block;width:100%;color:rgba(0,0,0,.54);font-size:12px;font-weight:400;line-height:15px;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.mui-textfield>textarea{padding-top:5px}.mui-textfield>input,.mui-textfield>textarea{display:block}.mui-textfield>input:focus~label,.mui-textfield>textarea:focus~label{color:#2196F3}.mui-textfield--float-label>label{position:absolute;transform:translate(0,15px);font-size:16px;line-height:32px;color:rgba(0,0,0,.26);text-overflow:clip;cursor:text;pointer-events:none}.mui-textfield--float-label>input:focus~label,.mui-textfield--float-label>textarea:focus~label{transform:translate(0,0);font-size:12px;line-height:15px;text-overflow:ellipsis}.mui-textfield--float-label>input:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>input:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>input:not(:focus)[value]:not([value=\"\"]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>textarea:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus)[value]:not([value=\"\"]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:rgba(0,0,0,.54);font-size:12px;line-height:15px;transform:translate(0,0);text-overflow:ellipsis}.mui-textfield--wrap-label{display:table;width:100%;padding-top:0}.mui-textfield--wrap-label:not(.mui-textfield--float-label)>label{display:table-header-group;position:static;white-space:normal;overflow-x:visible}.mui-textfield>input,.mui-textfield>textarea{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;background-color:transparent;color:rgba(0,0,0,.87);border:none;border-bottom:1px solid rgba(0,0,0,.26);outline:0;width:100%;font-size:16px;padding:0;box-shadow:none;border-radius:0;background-image:none}.mui-textfield>input:focus,.mui-textfield>textarea:focus{border-color:#2196F3;border-width:2px}.mui-textfield>input:-moz-read-only,.mui-textfield>input:disabled,.mui-textfield>textarea:-moz-read-only,.mui-textfield>textarea:disabled{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input:disabled,.mui-textfield>input:read-only,.mui-textfield>textarea:disabled,.mui-textfield>textarea:read-only{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input::-webkit-input-placeholder,.mui-textfield>textarea::-webkit-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::-moz-placeholder,.mui-textfield>textarea::-moz-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input:-ms-input-placeholder,.mui-textfield>textarea:-ms-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::placeholder,.mui-textfield>textarea::placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input{height:32px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>textarea{min-height:64px}.mui-textfield>textarea[rows]:not([rows=\"2\"]):focus{margin-bottom:-1px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=\"\"]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=\"\"]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):not(:required),.mui-textfield>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=\"\"]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required),.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=\"\"]):not(.mui--is-empty):not(.mui--is-not-empty){border-color:#F44336;border-width:2px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=\"\"]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=\"\"]):not(.mui--is-empty):not(.mui--is-not-empty){height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required)~label,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:invalid:not(:focus):required[value]:not([value=\"\"]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=\"\"]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):not(:required)~label,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=\"\"]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=\"\"]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:#F44336}.mui-textfield:not(.mui-textfield--float-label)>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label{color:#F44336}@keyframes mui-node-inserted{from{opacity:.99}to{opacity:1}}.mui--no-transition{transition:none!important}.mui--no-user-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.mui--text-left{text-align:left!important}.mui--text-right{text-align:right!important}.mui--text-center{text-align:center!important}.mui--text-justify{text-align:justify!important}.mui--text-nowrap{white-space:nowrap!important}.mui--align-baseline{vertical-align:baseline!important}.mui--align-top{vertical-align:top!important}.mui--align-middle{vertical-align:middle!important}.mui--align-bottom{vertical-align:bottom!important}.mui--text-dark{color:rgba(0,0,0,.87)}.mui--text-dark-secondary{color:rgba(0,0,0,.54)}.mui--text-dark-hint{color:rgba(0,0,0,.38)}.mui--text-light{color:#FFF}.mui--text-light-secondary{color:rgba(255,255,255,.7)}.mui--text-light-hint{color:rgba(255,255,255,.3)}.mui--text-accent{color:rgba(255,64,129,.87)}.mui--text-accent-secondary{color:rgba(255,64,129,.54)}.mui--text-accent-hint{color:rgba(255,64,129,.38)}.mui--text-black{color:#000}.mui--text-white{color:#FFF}.mui--text-danger{color:#F44336}.mui-list--unstyled{padding-left:0;list-style:none}.mui-list--inline{padding-left:0;list-style:none;margin-left:-5px}.mui-list--inline>li{display:inline-block;padding-left:5px;padding-right:5px}.mui--z1,.mui-dropdown__menu,.mui-select__menu{box-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24)}.mui--z2{box-shadow:0 3px 6px rgba(0,0,0,.16),0 3px 6px rgba(0,0,0,.23)}.mui--z3{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}.mui--z4{box-shadow:0 14px 28px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.22)}.mui--z5{box-shadow:0 19px 38px rgba(0,0,0,.3),0 15px 12px rgba(0,0,0,.22)}.mui--clearfix:after,.mui--clearfix:before{content:\" \";display:table}.mui--clearfix:after{clear:both}.mui--pull-right{float:right!important}.mui--pull-left{float:left!important}.mui--hide{display:none!important}.mui--show{display:block!important}.mui--invisible{visibility:hidden}.mui--overflow-hidden{overflow:hidden!important}.mui--overflow-hidden-x{overflow-x:hidden!important}.mui--overflow-hidden-y{overflow-y:hidden!important}.mui--visible-lg-block,.mui--visible-lg-inline,.mui--visible-lg-inline-block,.mui--visible-md-block,.mui--visible-md-inline,.mui--visible-md-inline-block,.mui--visible-sm-block,.mui--visible-sm-inline,.mui--visible-sm-inline-block,.mui--visible-xl-block,.mui--visible-xl-inline,.mui--visible-xl-inline-block,.mui--visible-xs-block,.mui--visible-xs-inline,.mui--visible-xs-inline-block{display:none!important}@media (max-width:543px){.mui-visible-xs{display:block!important}table.mui-visible-xs{display:table}tr.mui-visible-xs{display:table-row!important}td.mui-visible-xs,th.mui-visible-xs{display:table-cell!important}.mui--visible-xs-block{display:block!important}.mui--visible-xs-inline{display:inline!important}.mui--visible-xs-inline-block{display:inline-block!important}}@media (min-width:544px) and (max-width:767px){.mui-visible-sm{display:block!important}table.mui-visible-sm{display:table}tr.mui-visible-sm{display:table-row!important}td.mui-visible-sm,th.mui-visible-sm{display:table-cell!important}.mui--visible-sm-block{display:block!important}.mui--visible-sm-inline{display:inline!important}.mui--visible-sm-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.mui-visible-md{display:block!important}table.mui-visible-md{display:table}tr.mui-visible-md{display:table-row!important}td.mui-visible-md,th.mui-visible-md{display:table-cell!important}.mui--visible-md-block{display:block!important}.mui--visible-md-inline{display:inline!important}.mui--visible-md-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.mui-visible-lg{display:block!important}table.mui-visible-lg{display:table}tr.mui-visible-lg{display:table-row!important}td.mui-visible-lg,th.mui-visible-lg{display:table-cell!important}.mui--visible-lg-block{display:block!important}.mui--visible-lg-inline{display:inline!important}.mui--visible-lg-inline-block{display:inline-block!important}}@media (min-width:1200px){.mui-visible-xl{display:block!important}table.mui-visible-xl{display:table}tr.mui-visible-xl{display:table-row!important}td.mui-visible-xl,th.mui-visible-xl{display:table-cell!important}.mui--visible-xl-block{display:block!important}.mui--visible-xl-inline{display:inline!important}.mui--visible-xl-inline-block{display:inline-block!important}}@media (max-width:543px){.mui--hidden-xs{display:none!important}}@media (min-width:544px) and (max-width:767px){.mui--hidden-sm{display:none!important}}@media (min-width:768px) and (max-width:991px){.mui--hidden-md{display:none!important}}@media (min-width:992px) and (max-width:1199px){.mui--hidden-lg{display:none!important}}@media (min-width:1200px){.mui--hidden-xl{display:none!important}}body.mui-body--scroll-lock{overflow:hidden!important}#mui-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:99999999;background-color:rgba(0,0,0,.2);overflow:auto}.mui-ripple-effect{position:absolute;border-radius:50%;pointer-events:none;opacity:0;animation:mui-ripple-animation 2s}@keyframes mui-ripple-animation{from{transform:scale(1);opacity:.4}to{transform:scale(100);opacity:0}}.mui-btn>.mui-ripple-effect{background-color:#a6a6a6}.mui-btn--primary>.mui-ripple-effect{background-color:#FFF}.mui-btn--dark>.mui-ripple-effect{background-color:#FFF}.mui-btn--danger>.mui-ripple-effect{background-color:#FFF}.mui-btn--accent>.mui-ripple-effect{background-color:#FFF}.mui-btn--flat>.mui-ripple-effect{background-color:#a6a6a6}.mui--text-display4{font-weight:300;font-size:112px;line-height:112px}.mui--text-display3{font-weight:400;font-size:56px;line-height:56px}.mui--text-display2{font-weight:400;font-size:45px;line-height:48px}.mui--text-display1,h1{font-weight:400;font-size:34px;line-height:40px}.mui--text-headline,h2{font-weight:400;font-size:24px;line-height:32px}.mui--text-title,h3{font-weight:400;font-size:20px;line-height:28px}.mui--text-subhead,h4{font-weight:400;font-size:16px;line-height:24px}.mui--text-body2,h5{font-weight:500;font-size:14px;line-height:24px}.mui--text-body1{font-weight:400;font-size:14px;line-height:20px}.mui--text-caption{font-weight:400;font-size:12px;line-height:16px}.mui--text-menu{font-weight:500;font-size:13px;line-height:17px}.mui--text-button{font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase}"; + +},{}],7:[function(require,module,exports){ +/** + * MUI WebComponents buttons module + * @module webcomponents/buttons + */ + +'use strict'; + + +var config = require('../js/config'), + jqLite = require('../js/lib/jqLite'), + btnClass = 'mui-btn', + btnTagName = btnClass, + btnAttrs = {style: 1, color: 1, size: 1}; + + +/** + * Class representing a button. + * @class + */ +var BtnProto = Object.create(HTMLElement.prototype); + + +/** Button createdCallback */ +BtnProto.createdCallback = function() { + var root = this.createShadowRoot(), + innerEl = document.createElement('button'), + cls = btnClass, + k, + v; + + // populate innerEl + for (var i=0; i < this.childNodes.length; i++) { + innerEl.appendChild(this.childNodes[i]); + } + + // style|color|size + for (k in btnAttrs) { + v = this.getAttribute(k); + if (v !== 'default') cls += ' ' + btnClass + '--' + v; + } + + jqLite.addClass(innerEl, cls); + + // disabled + if (this.getAttribute('disabled') !== null) { + innerEl.setAttribute('disabled', 'disabled'); + } + + root.appendChild(_getStyleEl().cloneNode(true)); + root.appendChild(innerEl); +}; + + + + +// ============================================================================ +// UTILITIES +// ============================================================================ + +var styleEl; + + +/** + * Get or create a style element. + * @function + */ +function _getStyleEl() { + if (styleEl === undefined) { + styleEl = document.createElement('style'); + styleEl.innerHTML = require('mui.min.css'); + } + + return styleEl; +} + + +/** Define module API */ +module.exports = { + /** Register module elements */ + registerElements: function() { + var BtnElement = document.registerElement(btnTagName, { + prototype: BtnProto + }); + + return { + BtnElement: BtnElement + } + } +}; + +},{"../js/config":2,"../js/lib/jqLite":3,"mui.min.css":6}],8:[function(require,module,exports){ +/** + * MUI WebComponents forms module + * @module webcomponents/forms + */ + +'use strict'; + + +var jqLite = require('../js/lib/jqLite'), + muiTextfield = require('../js/textfield'), + textfieldClass = 'mui-textfield', + floatingMod = '--float-label', + textfieldTagName = textfieldClass; + + +/** + * Class representing a Textfield element. + * @class + */ +var TextfieldProto = Object.create(HTMLElement.prototype); + + +/** Textfield createdCallback */ +TextfieldProto.createdCallback = function() { + var root = this.createShadowRoot(), + innerEl = document.createElement('div'), + cls; + + var attrs = { + type: this.getAttribute('type') || 'text', + value: this.getAttribute('value'), + placeholder: this.getAttribute('placeholder'), + label: this.getAttribute('label'), + floating: this.getAttribute('floating') + }; + + // set class + cls = textfieldClass; + if (attrs.floating !== null) cls += ' ' + textfieldClass + floatingMod; + + innerEl.setAttribute('class', cls); + + // add input element + innerEl.appendChild(_createInputEl(attrs)); + + // label element + if (attrs.label) { + var labelEl = _createLabelEl(attrs); + innerEl.appendChild(labelEl); + } + + // add to root + root.appendChild(_getStyleEl().cloneNode(true)); + root.appendChild(innerEl); +} + + + + +// ============================================================================ +// UTILITIES +// ============================================================================ + +var styleEl; + + +/** + * Get or create style + * @function + */ +function _getStyleEl() { + if (styleEl === undefined) { + styleEl = document.createElement('style'); + styleEl.innerHTML = require('mui.min.css'); + } + + return styleEl; +} + + +/** + * Create input element. + * @function + */ +function _createInputEl(attrs) { + var inputEl; + + // input element + if (attrs.type === 'textarea') { + inputEl = document.createElement('textarea'); + if (attrs.value) inputEl.appendChild(document.createTextNode(attrs.value)); + } else { + inputEl = document.createElement('input'); + inputEl.setAttribute('type', attrs.type); + if (attrs.value) inputEl.setAttribute('value', attrs.value); + } + + if (attrs.placeholder) { + inputEl.setAttribute('placeholder', attrs.placeholder); + } + + // add event listeners + muiTextfield.initialize(inputEl); + + return inputEl; +} + + +/** + * Create label element. + * @function + */ +function _createLabelEl(attrs) { + var labelEl = document.createElement('label'); + labelEl.appendChild(document.createTextNode(attrs.label)); + + return labelEl; +} + + +/** Define module API */ +module.exports = { + /** Register module elements */ + registerElements: function() { + var TextfieldElement = document.registerElement(textfieldTagName, { + prototype: TextfieldProto + }); + + return { + TextfieldElement: TextfieldElement + }; + } +}; + +},{"../js/lib/jqLite":3,"../js/textfield":5,"mui.min.css":6}]},{},[1]) \ No newline at end of file diff --git a/platforms/android/assets/www/libs/mui/packages/cdn/webcomponents/mui-webcomponents.min.js b/platforms/android/assets/www/libs/mui/packages/cdn/webcomponents/mui-webcomponents.min.js new file mode 100644 index 0000000..3b339e1 --- /dev/null +++ b/platforms/android/assets/www/libs/mui/packages/cdn/webcomponents/mui-webcomponents.min.js @@ -0,0 +1,2 @@ +!function i(t,e,o){function n(a,m){if(!e[a]){if(!t[a]){var r="function"==typeof require&&require;if(!m&&r)return r(a,!0);if(l)return l(a,!0);throw new Error("Cannot find module '"+a+"'")}var u=e[a]={exports:{}};t[a][0].call(u.exports,function(i){var e=t[a][1][i];return n(e?e:i)},u,u.exports,i,t,e,o)}return e[a].exports}for(var l="function"==typeof require&&require,a=0;a-1:!1}function a(i){if(void 0===i)return"undefined";var t=Object.prototype.toString.call(i);if(0===t.indexOf("[object "))return t.slice(8,-1).toLowerCase();throw new Error("MUI: Could not understand type: "+t)}function m(i,t,e,o){o=void 0===o?!1:o,i.addEventListener(t,e,o);var n=i._muiEventCache=i._muiEventCache||{};n[t]=n[t]||[],n[t].push([e,o])}function r(i,t,e,o){o=void 0===o?!1:o;var n,l,a=i._muiEventCache=i._muiEventCache||{},m=a[t]||[];for(l=m.length;l--;)n=m[l],(void 0===e||n[0]===e&&n[1]===o)&&(m.splice(l,1),i.removeEventListener(t,n[0],n[1]))}function u(i,t,e,o){m(i,t,function n(o){e&&e.apply(this,arguments),r(i,t,n)},o)}function d(i,t){var e=window;if(void 0===t){if(i===e){var o=document.documentElement;return(e.pageXOffset||o.scrollLeft)-(o.clientLeft||0)}return i.scrollLeft}i===e?e.scrollTo(t,s(e)):i.scrollLeft=t}function s(i,t){var e=window;if(void 0===t){if(i===e){var o=document.documentElement;return(e.pageYOffset||o.scrollTop)-(o.clientTop||0)}return i.scrollTop}i===e?e.scrollTo(d(e),t):i.scrollTop=t}function c(i){var t=window,e=i.getBoundingClientRect(),o=s(t),n=d(t);return{top:e.top+o,left:e.left+n,height:e.height,width:e.width}}function p(i){var t=!1,e=!0,o=document,n=o.defaultView,l=o.documentElement,a=o.addEventListener?"addEventListener":"attachEvent",m=o.addEventListener?"removeEventListener":"detachEvent",r=o.addEventListener?"":"on",u=function(e){"readystatechange"==e.type&&"complete"!=o.readyState||(("load"==e.type?n:o)[m](r+e.type,u,!1),!t&&(t=!0)&&i.call(n,e.type||e))},d=function(){try{l.doScroll("left")}catch(i){return void setTimeout(d,50)}u("poll")};if("complete"==o.readyState)i.call(n,"lazy");else{if(o.createEventObject&&l.doScroll){try{e=!n.frameElement}catch(s){}e&&d()}o[a](r+"DOMContentLoaded",u,!1),o[a](r+"readystatechange",u,!1),n[a](r+"load",u,!1)}}function b(i,t){if(t&&i.setAttribute){for(var e,o=f(i),n=t.split(" "),l=0;l=0;)o=o.replace(" "+e+" "," ");i.setAttribute("class",o.trim())}}function f(i){var t=(i.getAttribute("class")||"").replace(/[\n\t]/g,"");return" "+t+" "}function x(i){return i.replace(v,function(i,t,e,o){return o?e.toUpperCase():e}).replace(y,"Moz$1")}function g(i,t,e){var o;return o=e.getPropertyValue(t),""!==o||i.ownerDocument||(o=i.style[x(t)]),o}var h,v=/([\:\-\_]+(.))/g,y=/^moz([A-Z])/;h={multiple:!0,selected:!0,checked:!0,disabled:!0,readonly:!0,required:!0,open:!0},t.exports={addClass:o,css:n,hasClass:l,off:r,offset:c,on:m,one:u,ready:p,removeClass:b,type:a,scrollLeft:d,scrollTop:s}},{}],4:[function(i,t,e){"use strict";function o(){var i=window;if(x.debug&&"undefined"!=typeof i.console)try{i.console.log.apply(i.console,arguments)}catch(t){var e=Array.prototype.slice.call(arguments);i.console.log(e.join("\n"))}}function n(i){var t,e=document;t=e.head||e.getElementsByTagName("head")[0]||e.documentElement;var o=e.createElement("style");return o.type="text/css",o.styleSheet?o.styleSheet.cssText=i:o.appendChild(e.createTextNode(i)),t.insertBefore(o,t.firstChild),o}function l(i,t){if(!t)throw new Error("MUI: "+i);"undefined"!=typeof console&&console.error("MUI Warning: "+i)}function a(i){if(h.push(i),void 0===h._initialized){var t=document;g.on(t,"animationstart",m),g.on(t,"mozAnimationStart",m),g.on(t,"webkitAnimationStart",m),h._initialized=!0}}function m(i){if("mui-node-inserted"===i.animationName)for(var t=i.target,e=h.length-1;e>=0;e--)h[e](t)}function r(i){var t="";for(var e in i)t+=i[e]?e+" ":"";return t.trim()}function u(){if(void 0!==f)return f;var i=document.createElement("x");return i.style.cssText="pointer-events:auto",f="auto"===i.style.pointerEvents}function d(i,t){return function(){i[t].apply(i,arguments)}}function s(i,t,e,o,n){var l,a=document.createEvent("HTMLEvents"),e=void 0!==e?e:!0,o=void 0!==o?o:!0;if(a.initEvent(t,e,o),n)for(l in n)a[l]=n[l];return i&&i.dispatchEvent(a),a}function c(){if(v+=1,1===v){var i=window,t=document;b={left:g.scrollLeft(i),top:g.scrollTop(i)},g.addClass(t.body,y),i.scrollTo(b.left,b.top)}}function p(){if(0!==v&&(v-=1,0===v)){var i=window,t=document;g.removeClass(t.body,y),i.scrollTo(b.left,b.top)}}var b,f,x=i("../config"),g=i("./jqLite"),h=[],v=0,y="mui-body--scroll-lock";t.exports={callback:d,classNames:r,disableScrollLock:p,dispatchEvent:s,enableScrollLock:c,log:o,loadStyle:n,onNodeInserted:a,raiseError:l,supportsPointerEvents:u}},{"../config":2,"./jqLite":3}],5:[function(i,t,e){"use strict";function o(i){i._muiTextfield!==!0&&(i._muiTextfield=!0,i.value.length?l.addClass(i,u):l.addClass(i,r),l.on(i,"input",n),l.on(i,"change",n),l.on(i,"focus",function(){l.addClass(this,d)}))}function n(){var i=this;i.value.length?(l.removeClass(i,r),l.addClass(i,u)):(l.removeClass(i,u),l.addClass(i,r)),l.addClass(i,d)}var l=i("./lib/jqLite"),a=i("./lib/util"),m=".mui-textfield > input, .mui-textfield > textarea",r="mui--is-empty",u="mui--is-not-empty",d="mui--is-dirty",s="mui-textfield--float-label";t.exports={initialize:o,initListeners:function(){for(var i=document,t=i.querySelectorAll(m),e=t.length-1;e>=0;e--)o(t[e]);a.onNodeInserted(function(i){"INPUT"!==i.tagName&&"TEXTAREA"!==i.tagName||o(i)}),setTimeout(function(){var i=".mui-textfield.mui-textfield--float-label > label {"+["-webkit-transition","-moz-transition","-o-transition","transition",""].join(":all .15s ease-out;")+"}";a.loadStyle(i)},150),a.supportsPointerEvents()===!1&&l.on(document,"click",function(i){var t=i.target;if("LABEL"===t.tagName&&l.hasClass(t.parentNode,s)){var e=t.previousElementSibling;e&&e.focus()}})}}},{"./lib/jqLite":3,"./lib/util":4}],6:[function(i,t,e){t.exports='/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-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{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}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{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{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-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:border-box}:after,:before{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:Arial,Verdana,Tahoma;font-size:14px;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);background-color:#FFF}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#2196F3;text-decoration:none}a:focus,a:hover{color:#1976D2;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}p{margin:0 0 10px}ol,ul{margin-top:0;margin-bottom:10px}figure{margin:0}img{vertical-align:middle}hr{margin-top:20px;margin-bottom:20px;border:0;height:1px;background-color:rgba(0,0,0,.12)}legend{display:block;width:100%;padding:0;margin-bottom:10px;font-size:21px;color:rgba(0,0,0,.87);line-height:inherit;border:0}input[type=search]{box-sizing:border-box;-webkit-appearance:none}input[type=checkbox]:focus,input[type=radio]:focus,input[type=file]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type=checkbox]:disabled,input[type=radio]:disabled{cursor:not-allowed}strong{font-weight:700}abbr[title]{cursor:help;border-bottom:1px dotted #2196F3}h1,h2,h3{margin-top:20px;margin-bottom:10px}h4,h5,h6{margin-top:10px;margin-bottom:10px}.mui--appbar-height{height:56px}.mui--appbar-min-height,.mui-appbar{min-height:56px}.mui--appbar-line-height{line-height:56px}.mui--appbar-top{top:56px}@media (orientation:landscape) and (max-height:480px){.mui--appbar-height{height:48px}.mui--appbar-min-height,.mui-appbar{min-height:48px}.mui--appbar-line-height{line-height:48px}.mui--appbar-top{top:48px}}@media (min-width:480px){.mui--appbar-height{height:64px}.mui--appbar-min-height,.mui-appbar{min-height:64px}.mui--appbar-line-height{line-height:64px}.mui--appbar-top{top:64px}}.mui-appbar{background-color:#2196F3;color:#FFF}.mui-btn{animation-duration:.1ms;animation-name:mui-node-inserted;font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase;color:rgba(0,0,0,.87);background-color:#FFF;transition:all .2s ease-in-out;display:inline-block;height:36px;padding:0 26px;margin-top:6px;margin-bottom:6px;border:none;border-radius:2px;cursor:pointer;-ms-touch-action:manipulation;touch-action:manipulation;background-image:none;text-align:center;line-height:36px;vertical-align:middle;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:14px;letter-spacing:.03em;position:relative;overflow:hidden}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{color:rgba(0,0,0,.87);background-color:#fff}.mui-btn[disabled]:active,.mui-btn[disabled]:focus,.mui-btn[disabled]:hover{color:rgba(0,0,0,.87);background-color:#FFF}.mui-btn.mui-btn--flat{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn.mui-btn--flat:active,.mui-btn.mui-btn--flat:focus,.mui-btn.mui-btn--flat:hover{color:rgba(0,0,0,.87);background-color:#f2f2f2}.mui-btn.mui-btn--flat[disabled]:active,.mui-btn.mui-btn--flat[disabled]:focus,.mui-btn.mui-btn--flat[disabled]:hover{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{outline:0;text-decoration:none;color:rgba(0,0,0,.87)}.mui-btn:focus,.mui-btn:hover{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:focus,.mui-btn:hover{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn.mui--is-disabled,.mui-btn:disabled{cursor:not-allowed;pointer-events:none;opacity:.6;box-shadow:none}.mui-btn+.mui-btn{margin-left:8px}.mui-btn--flat{background-color:transparent}.mui-btn--flat:active,.mui-btn--flat:focus,.mui-btn--flat:hover{box-shadow:none;background-color:#f2f2f2}.mui-btn--fab,.mui-btn--raised{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab,.mui-btn--raised{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn--fab{position:relative;padding:0;width:55px;height:55px;line-height:55px;border-radius:50%;z-index:1}.mui-btn--primary{color:#FFF;background-color:#2196F3}.mui-btn--primary:active,.mui-btn--primary:focus,.mui-btn--primary:hover{color:#FFF;background-color:#39a1f4}.mui-btn--primary[disabled]:active,.mui-btn--primary[disabled]:focus,.mui-btn--primary[disabled]:hover{color:#FFF;background-color:#2196F3}.mui-btn--primary.mui-btn--flat{color:#2196F3;background-color:transparent}.mui-btn--primary.mui-btn--flat:active,.mui-btn--primary.mui-btn--flat:focus,.mui-btn--primary.mui-btn--flat:hover{color:#2196F3;background-color:#f2f2f2}.mui-btn--primary.mui-btn--flat[disabled]:active,.mui-btn--primary.mui-btn--flat[disabled]:focus,.mui-btn--primary.mui-btn--flat[disabled]:hover{color:#2196F3;background-color:transparent}.mui-btn--dark{color:#FFF;background-color:#424242}.mui-btn--dark:active,.mui-btn--dark:focus,.mui-btn--dark:hover{color:#FFF;background-color:#4f4f4f}.mui-btn--dark[disabled]:active,.mui-btn--dark[disabled]:focus,.mui-btn--dark[disabled]:hover{color:#FFF;background-color:#424242}.mui-btn--dark.mui-btn--flat{color:#424242;background-color:transparent}.mui-btn--dark.mui-btn--flat:active,.mui-btn--dark.mui-btn--flat:focus,.mui-btn--dark.mui-btn--flat:hover{color:#424242;background-color:#f2f2f2}.mui-btn--dark.mui-btn--flat[disabled]:active,.mui-btn--dark.mui-btn--flat[disabled]:focus,.mui-btn--dark.mui-btn--flat[disabled]:hover{color:#424242;background-color:transparent}.mui-btn--danger{color:#FFF;background-color:#F44336}.mui-btn--danger:active,.mui-btn--danger:focus,.mui-btn--danger:hover{color:#FFF;background-color:#f55a4e}.mui-btn--danger[disabled]:active,.mui-btn--danger[disabled]:focus,.mui-btn--danger[disabled]:hover{color:#FFF;background-color:#F44336}.mui-btn--danger.mui-btn--flat{color:#F44336;background-color:transparent}.mui-btn--danger.mui-btn--flat:active,.mui-btn--danger.mui-btn--flat:focus,.mui-btn--danger.mui-btn--flat:hover{color:#F44336;background-color:#f2f2f2}.mui-btn--danger.mui-btn--flat[disabled]:active,.mui-btn--danger.mui-btn--flat[disabled]:focus,.mui-btn--danger.mui-btn--flat[disabled]:hover{color:#F44336;background-color:transparent}.mui-btn--accent{color:#FFF;background-color:#FF4081}.mui-btn--accent:active,.mui-btn--accent:focus,.mui-btn--accent:hover{color:#FFF;background-color:#ff5a92}.mui-btn--accent[disabled]:active,.mui-btn--accent[disabled]:focus,.mui-btn--accent[disabled]:hover{color:#FFF;background-color:#FF4081}.mui-btn--accent.mui-btn--flat{color:#FF4081;background-color:transparent}.mui-btn--accent.mui-btn--flat:active,.mui-btn--accent.mui-btn--flat:focus,.mui-btn--accent.mui-btn--flat:hover{color:#FF4081;background-color:#f2f2f2}.mui-btn--accent.mui-btn--flat[disabled]:active,.mui-btn--accent.mui-btn--flat[disabled]:focus,.mui-btn--accent.mui-btn--flat[disabled]:hover{color:#FF4081;background-color:transparent}.mui-btn--small{height:30.6px;line-height:30.6px;padding:0 16px;font-size:13px}.mui-btn--large{height:54px;line-height:54px;padding:0 26px;font-size:14px}.mui-btn--fab.mui-btn--small{width:44px;height:44px;line-height:44px}.mui-btn--fab.mui-btn--large{width:75px;height:75px;line-height:75px}.mui-checkbox,.mui-radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.mui-checkbox>label,.mui-radio>label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio],.mui-radio>label>input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px}.mui-checkbox+.mui-checkbox,.mui-radio+.mui-radio{margin-top:-5px}.mui-checkbox--inline,.mui-radio--inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.mui-checkbox--inline>input[type=checkbox],.mui-checkbox--inline>input[type=radio],.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox--inline>label>input[type=radio],.mui-radio--inline>input[type=checkbox],.mui-radio--inline>input[type=radio],.mui-radio--inline>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio]{margin:4px 0 0;line-height:normal}.mui-checkbox--inline+.mui-checkbox--inline,.mui-radio--inline+.mui-radio--inline{margin-top:0;margin-left:10px}.mui-container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container:after,.mui-container:before{content:" ";display:table}.mui-container:after{clear:both}@media (min-width:544px){.mui-container{max-width:570px}}@media (min-width:768px){.mui-container{max-width:740px}}@media (min-width:992px){.mui-container{max-width:960px}}@media (min-width:1200px){.mui-container{max-width:1170px}}.mui-container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container-fluid:after,.mui-container-fluid:before{content:" ";display:table}.mui-container-fluid:after{clear:both}.mui-divider{display:block;height:1px;background-color:rgba(0,0,0,.12)}.mui--divider-top{border-top:1px solid rgba(0,0,0,.12)}.mui--divider-bottom{border-bottom:1px solid rgba(0,0,0,.12)}.mui--divider-left{border-left:1px solid rgba(0,0,0,.12)}.mui--divider-right{border-right:1px solid rgba(0,0,0,.12)}.mui-dropdown{display:inline-block;position:relative}[data-mui-toggle=dropdown]{animation-duration:.1ms;animation-name:mui-node-inserted;outline:0}.mui-dropdown__menu{position:absolute;top:100%;left:0;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#FFF;border-radius:2px;z-index:1;background-clip:padding-box}.mui-dropdown__menu.mui--is-open{display:block}.mui-dropdown__menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);white-space:nowrap}.mui-dropdown__menu>li>a:focus,.mui-dropdown__menu>li>a:hover{text-decoration:none;color:rgba(0,0,0,.87);background-color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a,.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;cursor:not-allowed}.mui-dropdown__menu--right{left:auto;right:0}@media (min-width:544px){.mui-form--inline>.mui-textfield{display:inline-block;margin-bottom:0}.mui-form--inline>.mui-checkbox,.mui-form--inline>.mui-radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.mui-form--inline>.mui-checkbox>label,.mui-form--inline>.mui-radio>label{padding-left:0}.mui-form--inline>.mui-checkbox>label>input[type=checkbox],.mui-form--inline>.mui-radio>label>input[type=radio]{position:relative;margin-left:0}.mui-form--inline>.mui-select{display:inline-block}.mui-form--inline>.mui-btn{margin-bottom:0;margin-top:0;vertical-align:bottom}}.mui-row{margin-left:-15px;margin-right:-15px}.mui-row:after,.mui-row:before{content:" ";display:table}.mui-row:after{clear:both}.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9,.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9,.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9,.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{min-height:1px;padding-left:15px;padding-right:15px}.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{float:left}.mui-col-xs-1{width:8.33333%}.mui-col-xs-2{width:16.66667%}.mui-col-xs-3{width:25%}.mui-col-xs-4{width:33.33333%}.mui-col-xs-5{width:41.66667%}.mui-col-xs-6{width:50%}.mui-col-xs-7{width:58.33333%}.mui-col-xs-8{width:66.66667%}.mui-col-xs-9{width:75%}.mui-col-xs-10{width:83.33333%}.mui-col-xs-11{width:91.66667%}.mui-col-xs-12{width:100%}.mui-col-xs-offset-0{margin-left:0}.mui-col-xs-offset-1{margin-left:8.33333%}.mui-col-xs-offset-2{margin-left:16.66667%}.mui-col-xs-offset-3{margin-left:25%}.mui-col-xs-offset-4{margin-left:33.33333%}.mui-col-xs-offset-5{margin-left:41.66667%}.mui-col-xs-offset-6{margin-left:50%}.mui-col-xs-offset-7{margin-left:58.33333%}.mui-col-xs-offset-8{margin-left:66.66667%}.mui-col-xs-offset-9{margin-left:75%}.mui-col-xs-offset-10{margin-left:83.33333%}.mui-col-xs-offset-11{margin-left:91.66667%}.mui-col-xs-offset-12{margin-left:100%}@media (min-width:544px){.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9{float:left}.mui-col-sm-1{width:8.33333%}.mui-col-sm-2{width:16.66667%}.mui-col-sm-3{width:25%}.mui-col-sm-4{width:33.33333%}.mui-col-sm-5{width:41.66667%}.mui-col-sm-6{width:50%}.mui-col-sm-7{width:58.33333%}.mui-col-sm-8{width:66.66667%}.mui-col-sm-9{width:75%}.mui-col-sm-10{width:83.33333%}.mui-col-sm-11{width:91.66667%}.mui-col-sm-12{width:100%}.mui-col-sm-offset-0{margin-left:0}.mui-col-sm-offset-1{margin-left:8.33333%}.mui-col-sm-offset-2{margin-left:16.66667%}.mui-col-sm-offset-3{margin-left:25%}.mui-col-sm-offset-4{margin-left:33.33333%}.mui-col-sm-offset-5{margin-left:41.66667%}.mui-col-sm-offset-6{margin-left:50%}.mui-col-sm-offset-7{margin-left:58.33333%}.mui-col-sm-offset-8{margin-left:66.66667%}.mui-col-sm-offset-9{margin-left:75%}.mui-col-sm-offset-10{margin-left:83.33333%}.mui-col-sm-offset-11{margin-left:91.66667%}.mui-col-sm-offset-12{margin-left:100%}}@media (min-width:768px){.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9{float:left}.mui-col-md-1{width:8.33333%}.mui-col-md-2{width:16.66667%}.mui-col-md-3{width:25%}.mui-col-md-4{width:33.33333%}.mui-col-md-5{width:41.66667%}.mui-col-md-6{width:50%}.mui-col-md-7{width:58.33333%}.mui-col-md-8{width:66.66667%}.mui-col-md-9{width:75%}.mui-col-md-10{width:83.33333%}.mui-col-md-11{width:91.66667%}.mui-col-md-12{width:100%}.mui-col-md-offset-0{margin-left:0}.mui-col-md-offset-1{margin-left:8.33333%}.mui-col-md-offset-2{margin-left:16.66667%}.mui-col-md-offset-3{margin-left:25%}.mui-col-md-offset-4{margin-left:33.33333%}.mui-col-md-offset-5{margin-left:41.66667%}.mui-col-md-offset-6{margin-left:50%}.mui-col-md-offset-7{margin-left:58.33333%}.mui-col-md-offset-8{margin-left:66.66667%}.mui-col-md-offset-9{margin-left:75%}.mui-col-md-offset-10{margin-left:83.33333%}.mui-col-md-offset-11{margin-left:91.66667%}.mui-col-md-offset-12{margin-left:100%}}@media (min-width:992px){.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9{float:left}.mui-col-lg-1{width:8.33333%}.mui-col-lg-2{width:16.66667%}.mui-col-lg-3{width:25%}.mui-col-lg-4{width:33.33333%}.mui-col-lg-5{width:41.66667%}.mui-col-lg-6{width:50%}.mui-col-lg-7{width:58.33333%}.mui-col-lg-8{width:66.66667%}.mui-col-lg-9{width:75%}.mui-col-lg-10{width:83.33333%}.mui-col-lg-11{width:91.66667%}.mui-col-lg-12{width:100%}.mui-col-lg-offset-0{margin-left:0}.mui-col-lg-offset-1{margin-left:8.33333%}.mui-col-lg-offset-2{margin-left:16.66667%}.mui-col-lg-offset-3{margin-left:25%}.mui-col-lg-offset-4{margin-left:33.33333%}.mui-col-lg-offset-5{margin-left:41.66667%}.mui-col-lg-offset-6{margin-left:50%}.mui-col-lg-offset-7{margin-left:58.33333%}.mui-col-lg-offset-8{margin-left:66.66667%}.mui-col-lg-offset-9{margin-left:75%}.mui-col-lg-offset-10{margin-left:83.33333%}.mui-col-lg-offset-11{margin-left:91.66667%}.mui-col-lg-offset-12{margin-left:100%}}@media (min-width:1200px){.mui-col-xl-1,.mui-col-xl-10,.mui-col-xl-11,.mui-col-xl-12,.mui-col-xl-2,.mui-col-xl-3,.mui-col-xl-4,.mui-col-xl-5,.mui-col-xl-6,.mui-col-xl-7,.mui-col-xl-8,.mui-col-xl-9{float:left}.mui-col-xl-1{width:8.33333%}.mui-col-xl-2{width:16.66667%}.mui-col-xl-3{width:25%}.mui-col-xl-4{width:33.33333%}.mui-col-xl-5{width:41.66667%}.mui-col-xl-6{width:50%}.mui-col-xl-7{width:58.33333%}.mui-col-xl-8{width:66.66667%}.mui-col-xl-9{width:75%}.mui-col-xl-10{width:83.33333%}.mui-col-xl-11{width:91.66667%}.mui-col-xl-12{width:100%}.mui-col-xl-offset-0{margin-left:0}.mui-col-xl-offset-1{margin-left:8.33333%}.mui-col-xl-offset-2{margin-left:16.66667%}.mui-col-xl-offset-3{margin-left:25%}.mui-col-xl-offset-4{margin-left:33.33333%}.mui-col-xl-offset-5{margin-left:41.66667%}.mui-col-xl-offset-6{margin-left:50%}.mui-col-xl-offset-7{margin-left:58.33333%}.mui-col-xl-offset-8{margin-left:66.66667%}.mui-col-xl-offset-9{margin-left:75%}.mui-col-xl-offset-10{margin-left:83.33333%}.mui-col-xl-offset-11{margin-left:91.66667%}.mui-col-xl-offset-12{margin-left:100%}}.mui-panel{padding:15px;margin-bottom:20px;border-radius:0;background-color:#FFF;box-shadow:0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}.mui-panel:after,.mui-panel:before{content:" ";display:table}.mui-panel:after{clear:both}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-panel{box-shadow:0 -1px 2px 0 rgba(0,0,0,.12),-1px 0 2px 0 rgba(0,0,0,.12),0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}}.mui-select{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-select:focus{outline:0}.mui-select:focus>select{height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;height:32px;width:100%;appearance:none;-webkit-appearance:none;-moz-appearance:none;outline:0;border:none;border-bottom:1px solid rgba(0,0,0,.26);border-radius:0;box-shadow:none;background-color:transparent;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iNiIgd2lkdGg9IjEwIj48cG9seWdvbiBwb2ludHM9IjAsMCAxMCwwIDUsNiIgc3R5bGU9ImZpbGw6cmdiYSgwLDAsMCwuMjQpOyIvPjwvc3ZnPg==);background-repeat:no-repeat;background-position:right center;cursor:pointer;color:rgba(0,0,0,.87);font-size:16px;padding:0 25px 0 0}.mui-select>select::-ms-expand{display:none}.mui-select>select:focus{outline:0;height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select:disabled{color:rgba(0,0,0,.38);cursor:not-allowed;background-color:transparent;opacity:1}.mui-select__menu{position:absolute;z-index:2;min-width:100%;overflow-y:auto;padding:8px 0;background-color:#FFF;font-size:16px}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-select__menu{border-left:1px solid rgba(0,0,0,.12);border-top:1px solid rgba(0,0,0,.12)}}.mui-select__menu>div{padding:0 22px;height:42px;line-height:42px;cursor:pointer;white-space:nowrap}.mui-select__menu>div:hover{background-color:#E0E0E0}.mui-select__menu>div.mui--is-selected{background-color:#EEE}th{text-align:left}.mui-table{width:100%;max-width:100%;margin-bottom:20px}.mui-table>tbody>tr>td,.mui-table>tbody>tr>th,.mui-table>tfoot>tr>td,.mui-table>tfoot>tr>th,.mui-table>thead>tr>td,.mui-table>thead>tr>th{padding:10px;line-height:1.429}.mui-table>thead>tr>th{border-bottom:2px solid rgba(0,0,0,.12);font-weight:700}.mui-table>tbody+tbody{border-top:2px solid rgba(0,0,0,.12)}.mui-table.mui-table--bordered>tbody>tr>td{border-bottom:1px solid rgba(0,0,0,.12)}.mui-tabs__bar{list-style:none;padding-left:0;margin-bottom:0;background-color:transparent;white-space:nowrap;overflow-x:auto}.mui-tabs__bar>li{display:inline-block}.mui-tabs__bar>li>a{display:block;white-space:nowrap;text-transform:uppercase;font-weight:500;font-size:14px;color:rgba(0,0,0,.87);cursor:default;height:48px;line-height:48px;padding-left:24px;padding-right:24px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-tabs__bar>li>a:hover{text-decoration:none}.mui-tabs__bar>li.mui--is-active{border-bottom:2px solid #2196F3}.mui-tabs__bar>li.mui--is-active>a{color:#2196F3}.mui-tabs__bar.mui-tabs__bar--justified{display:table;width:100%;table-layout:fixed}.mui-tabs__bar.mui-tabs__bar--justified>li{display:table-cell}.mui-tabs__bar.mui-tabs__bar--justified>li>a{text-align:center;padding-left:0;padding-right:0}.mui-tabs__pane{display:none}.mui-tabs__pane.mui--is-active{display:block}[data-mui-toggle=tab]{animation-duration:.1ms;animation-name:mui-node-inserted}.mui-textfield{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-textfield>label{position:absolute;top:0;display:block;width:100%;color:rgba(0,0,0,.54);font-size:12px;font-weight:400;line-height:15px;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.mui-textfield>textarea{padding-top:5px}.mui-textfield>input,.mui-textfield>textarea{display:block}.mui-textfield>input:focus~label,.mui-textfield>textarea:focus~label{color:#2196F3}.mui-textfield--float-label>label{position:absolute;transform:translate(0,15px);font-size:16px;line-height:32px;color:rgba(0,0,0,.26);text-overflow:clip;cursor:text;pointer-events:none}.mui-textfield--float-label>input:focus~label,.mui-textfield--float-label>textarea:focus~label{transform:translate(0,0);font-size:12px;line-height:15px;text-overflow:ellipsis}.mui-textfield--float-label>input:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>input:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>input:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>textarea:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:rgba(0,0,0,.54);font-size:12px;line-height:15px;transform:translate(0,0);text-overflow:ellipsis}.mui-textfield--wrap-label{display:table;width:100%;padding-top:0}.mui-textfield--wrap-label:not(.mui-textfield--float-label)>label{display:table-header-group;position:static;white-space:normal;overflow-x:visible}.mui-textfield>input,.mui-textfield>textarea{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;background-color:transparent;color:rgba(0,0,0,.87);border:none;border-bottom:1px solid rgba(0,0,0,.26);outline:0;width:100%;font-size:16px;padding:0;box-shadow:none;border-radius:0;background-image:none}.mui-textfield>input:focus,.mui-textfield>textarea:focus{border-color:#2196F3;border-width:2px}.mui-textfield>input:-moz-read-only,.mui-textfield>input:disabled,.mui-textfield>textarea:-moz-read-only,.mui-textfield>textarea:disabled{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input:disabled,.mui-textfield>input:read-only,.mui-textfield>textarea:disabled,.mui-textfield>textarea:read-only{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input::-webkit-input-placeholder,.mui-textfield>textarea::-webkit-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::-moz-placeholder,.mui-textfield>textarea::-moz-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input:-ms-input-placeholder,.mui-textfield>textarea:-ms-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::placeholder,.mui-textfield>textarea::placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input{height:32px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>textarea{min-height:64px}.mui-textfield>textarea[rows]:not([rows="2"]):focus{margin-bottom:-1px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):not(:required),.mui-textfield>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required),.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty){border-color:#F44336;border-width:2px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty){height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required)~label,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):not(:required)~label,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:#F44336}.mui-textfield:not(.mui-textfield--float-label)>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label{color:#F44336}@keyframes mui-node-inserted{from{opacity:.99}to{opacity:1}}.mui--no-transition{transition:none!important}.mui--no-user-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.mui--text-left{text-align:left!important}.mui--text-right{text-align:right!important}.mui--text-center{text-align:center!important}.mui--text-justify{text-align:justify!important}.mui--text-nowrap{white-space:nowrap!important}.mui--align-baseline{vertical-align:baseline!important}.mui--align-top{vertical-align:top!important}.mui--align-middle{vertical-align:middle!important}.mui--align-bottom{vertical-align:bottom!important}.mui--text-dark{color:rgba(0,0,0,.87)}.mui--text-dark-secondary{color:rgba(0,0,0,.54)}.mui--text-dark-hint{color:rgba(0,0,0,.38)}.mui--text-light{color:#FFF}.mui--text-light-secondary{color:rgba(255,255,255,.7)}.mui--text-light-hint{color:rgba(255,255,255,.3)}.mui--text-accent{color:rgba(255,64,129,.87)}.mui--text-accent-secondary{color:rgba(255,64,129,.54)}.mui--text-accent-hint{color:rgba(255,64,129,.38)}.mui--text-black{color:#000}.mui--text-white{color:#FFF}.mui--text-danger{color:#F44336}.mui-list--unstyled{padding-left:0;list-style:none}.mui-list--inline{padding-left:0;list-style:none;margin-left:-5px}.mui-list--inline>li{display:inline-block;padding-left:5px;padding-right:5px}.mui--z1,.mui-dropdown__menu,.mui-select__menu{box-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24)}.mui--z2{box-shadow:0 3px 6px rgba(0,0,0,.16),0 3px 6px rgba(0,0,0,.23)}.mui--z3{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}.mui--z4{box-shadow:0 14px 28px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.22)}.mui--z5{box-shadow:0 19px 38px rgba(0,0,0,.3),0 15px 12px rgba(0,0,0,.22)}.mui--clearfix:after,.mui--clearfix:before{content:" ";display:table}.mui--clearfix:after{clear:both}.mui--pull-right{float:right!important}.mui--pull-left{float:left!important}.mui--hide{display:none!important}.mui--show{display:block!important}.mui--invisible{visibility:hidden}.mui--overflow-hidden{overflow:hidden!important}.mui--overflow-hidden-x{overflow-x:hidden!important}.mui--overflow-hidden-y{overflow-y:hidden!important}.mui--visible-lg-block,.mui--visible-lg-inline,.mui--visible-lg-inline-block,.mui--visible-md-block,.mui--visible-md-inline,.mui--visible-md-inline-block,.mui--visible-sm-block,.mui--visible-sm-inline,.mui--visible-sm-inline-block,.mui--visible-xl-block,.mui--visible-xl-inline,.mui--visible-xl-inline-block,.mui--visible-xs-block,.mui--visible-xs-inline,.mui--visible-xs-inline-block{display:none!important}@media (max-width:543px){.mui-visible-xs{display:block!important}table.mui-visible-xs{display:table}tr.mui-visible-xs{display:table-row!important}td.mui-visible-xs,th.mui-visible-xs{display:table-cell!important}.mui--visible-xs-block{display:block!important}.mui--visible-xs-inline{display:inline!important}.mui--visible-xs-inline-block{display:inline-block!important}}@media (min-width:544px) and (max-width:767px){.mui-visible-sm{display:block!important}table.mui-visible-sm{display:table}tr.mui-visible-sm{display:table-row!important}td.mui-visible-sm,th.mui-visible-sm{display:table-cell!important}.mui--visible-sm-block{display:block!important}.mui--visible-sm-inline{display:inline!important}.mui--visible-sm-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.mui-visible-md{display:block!important}table.mui-visible-md{display:table}tr.mui-visible-md{display:table-row!important}td.mui-visible-md,th.mui-visible-md{display:table-cell!important}.mui--visible-md-block{display:block!important}.mui--visible-md-inline{display:inline!important}.mui--visible-md-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.mui-visible-lg{display:block!important}table.mui-visible-lg{display:table}tr.mui-visible-lg{display:table-row!important}td.mui-visible-lg,th.mui-visible-lg{display:table-cell!important}.mui--visible-lg-block{display:block!important}.mui--visible-lg-inline{display:inline!important}.mui--visible-lg-inline-block{display:inline-block!important}}@media (min-width:1200px){.mui-visible-xl{display:block!important}table.mui-visible-xl{display:table}tr.mui-visible-xl{display:table-row!important}td.mui-visible-xl,th.mui-visible-xl{display:table-cell!important}.mui--visible-xl-block{display:block!important}.mui--visible-xl-inline{display:inline!important}.mui--visible-xl-inline-block{display:inline-block!important}}@media (max-width:543px){.mui--hidden-xs{display:none!important}}@media (min-width:544px) and (max-width:767px){.mui--hidden-sm{display:none!important}}@media (min-width:768px) and (max-width:991px){.mui--hidden-md{display:none!important}}@media (min-width:992px) and (max-width:1199px){.mui--hidden-lg{display:none!important}}@media (min-width:1200px){.mui--hidden-xl{display:none!important}}body.mui-body--scroll-lock{overflow:hidden!important}#mui-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:99999999;background-color:rgba(0,0,0,.2);overflow:auto}.mui-ripple-effect{position:absolute;border-radius:50%;pointer-events:none;opacity:0;animation:mui-ripple-animation 2s}@keyframes mui-ripple-animation{from{transform:scale(1);opacity:.4}to{transform:scale(100);opacity:0}}.mui-btn>.mui-ripple-effect{background-color:#a6a6a6}.mui-btn--primary>.mui-ripple-effect{background-color:#FFF}.mui-btn--dark>.mui-ripple-effect{background-color:#FFF}.mui-btn--danger>.mui-ripple-effect{background-color:#FFF}.mui-btn--accent>.mui-ripple-effect{background-color:#FFF}.mui-btn--flat>.mui-ripple-effect{background-color:#a6a6a6}.mui--text-display4{font-weight:300;font-size:112px;line-height:112px}.mui--text-display3{font-weight:400;font-size:56px;line-height:56px}.mui--text-display2{font-weight:400;font-size:45px;line-height:48px}.mui--text-display1,h1{font-weight:400;font-size:34px;line-height:40px}.mui--text-headline,h2{font-weight:400;font-size:24px;line-height:32px}.mui--text-title,h3{font-weight:400;font-size:20px;line-height:28px}.mui--text-subhead,h4{font-weight:400;font-size:16px;line-height:24px}.mui--text-body2,h5{font-weight:500;font-size:14px;line-height:24px}.mui--text-body1{font-weight:400;font-size:14px;line-height:20px}.mui--text-caption{font-weight:400;font-size:12px;line-height:16px}.mui--text-menu{font-weight:500;font-size:13px;line-height:17px}.mui--text-button{font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase}'; +},{}],7:[function(i,t,e){"use strict";function o(){return void 0===u&&(u=document.createElement("style"),u.innerHTML=i("mui.min.css")),u}var n=(i("../js/config"),i("../js/lib/jqLite")),l="mui-btn",a=l,m={style:1,color:1,size:1},r=Object.create(HTMLElement.prototype);r.createdCallback=function(){for(var i,t,e=this.createShadowRoot(),a=document.createElement("button"),r=l,u=0;u +muicss:mui/ +├── lib +│ ├── css +│ │ └── mui.css +│ └── js +│ └── mui.js +├── LICENSE.txt +├── package.js +└── README.md + diff --git a/platforms/android/assets/www/libs/mui/packages/meteor/lib/css/mui.css b/platforms/android/assets/www/libs/mui/packages/meteor/lib/css/mui.css new file mode 100644 index 0000000..2a65b9e --- /dev/null +++ b/platforms/android/assets/www/libs/mui/packages/meteor/lib/css/mui.css @@ -0,0 +1,2522 @@ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS and IE text size adjust after device 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, +menu, +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/10/11, Safari, and Firefox < 22. + */ +[hidden], +template { + display: none; +} + +/* Links + ========================================================================== */ +/** + * Remove the gray background color from active links in IE 10. + */ +a { + background-color: transparent; +} + +/** + * Improve readability of focused elements when they are also in an + * active/hover state. + */ +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 { + 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"], +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. + */ +input[type="search"] { + -webkit-appearance: textfield; + /* 1 */ + box-sizing: content-box; + /* 2 */ +} + +/** + * 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; +} + +/** + * MUI Colors module + */ +/** + * MUI Reboot + */ +* { + box-sizing: border-box; +} + +*:before, +*:after { + box-sizing: border-box; +} + +html { + font-size: 10px; + -webkit-tap-highlight-color: transparent; +} + +body { + font-family: Arial, Verdana, Tahoma; + font-size: 14px; + font-weight: 400; + line-height: 1.429; + color: rgba(0, 0, 0, 0.87); + background-color: #FFF; +} + +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +a { + color: #2196F3; + text-decoration: none; +} + +a:hover, a:focus { + color: #1976D2; + text-decoration: underline; +} + +a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +p { + margin: 0 0 10px; +} + +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} + +figure { + margin: 0; +} + +img { + vertical-align: middle; +} + +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + height: 1px; + background-color: rgba(0, 0, 0, 0.12); +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 10px; + font-size: 21px; + color: rgba(0, 0, 0, 0.87); + line-height: inherit; + border: 0; +} + +input[type="search"] { + box-sizing: border-box; + -webkit-appearance: none; +} + +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +input[type="radio"]:disabled, +input[type="checkbox"]:disabled { + cursor: not-allowed; +} + +strong { + font-weight: 700; +} + +abbr[title] { + cursor: help; + border-bottom: 1px dotted #2196F3; +} + +h1, h2, h3 { + margin-top: 20px; + margin-bottom: 10px; +} + +h4, h5, h6 { + margin-top: 10px; + margin-bottom: 10px; +} + +/** + * MUI Appbar + */ +.mui--appbar-height { + height: 56px; +} + +.mui--appbar-min-height, .mui-appbar { + min-height: 56px; +} + +.mui--appbar-line-height { + line-height: 56px; +} + +.mui--appbar-top { + top: 56px; +} + +@media (orientation: landscape) and (max-height: 480px) { + .mui--appbar-height { + height: 48px; + } + .mui--appbar-min-height, .mui-appbar { + min-height: 48px; + } + .mui--appbar-line-height { + line-height: 48px; + } + .mui--appbar-top { + top: 48px; + } +} + +@media (min-width: 480px) { + .mui--appbar-height { + height: 64px; + } + .mui--appbar-min-height, .mui-appbar { + min-height: 64px; + } + .mui--appbar-line-height { + line-height: 64px; + } + .mui--appbar-top { + top: 64px; + } +} + +.mui-appbar { + background-color: #2196F3; + color: #FFF; +} + +/** + * MUI Buttons + */ +.mui-btn { + animation-duration: 0.0001s; + animation-name: mui-node-inserted; + font-weight: 500; + font-size: 14px; + line-height: 18px; + text-transform: uppercase; + color: rgba(0, 0, 0, 0.87); + background-color: #FFF; + transition: all 0.2s ease-in-out; + display: inline-block; + height: 36px; + padding: 0 26px; + margin-top: 6px; + margin-bottom: 6px; + border: none; + border-radius: 2px; + cursor: pointer; + -ms-touch-action: manipulation; + touch-action: manipulation; + background-image: none; + text-align: center; + line-height: 36px; + vertical-align: middle; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + font-size: 14px; + letter-spacing: 0.03em; + position: relative; + overflow: hidden; +} + +.mui-btn:hover, .mui-btn:focus, .mui-btn:active { + color: rgba(0, 0, 0, 0.87); + background-color: white; +} + +.mui-btn[disabled]:hover, .mui-btn[disabled]:focus, .mui-btn[disabled]:active { + color: rgba(0, 0, 0, 0.87); + background-color: #FFF; +} + +.mui-btn.mui-btn--flat { + color: rgba(0, 0, 0, 0.87); + background-color: transparent; +} + +.mui-btn.mui-btn--flat:hover, .mui-btn.mui-btn--flat:focus, .mui-btn.mui-btn--flat:active { + color: rgba(0, 0, 0, 0.87); + background-color: #f2f2f2; +} + +.mui-btn.mui-btn--flat[disabled]:hover, .mui-btn.mui-btn--flat[disabled]:focus, .mui-btn.mui-btn--flat[disabled]:active { + color: rgba(0, 0, 0, 0.87); + background-color: transparent; +} + +.mui-btn:hover, .mui-btn:focus, .mui-btn:active { + outline: 0; + text-decoration: none; + color: rgba(0, 0, 0, 0.87); +} + +.mui-btn:hover, .mui-btn:focus { + box-shadow: 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); +} + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mui-btn:hover, .mui-btn:focus { + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.12), -1px 0px 2px rgba(0, 0, 0, 0.12), 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); + } +} + +.mui-btn:active { + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); +} + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mui-btn:active { + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.12), -1px 0px 2px rgba(0, 0, 0, 0.12), 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); + } +} + +.mui-btn:disabled, .mui-btn.mui--is-disabled { + cursor: not-allowed; + pointer-events: none; + opacity: 0.60; + box-shadow: none; +} + +.mui-btn + .mui-btn { + margin-left: 8px; +} + +.mui-btn--flat { + background-color: transparent; +} + +.mui-btn--flat:hover, .mui-btn--flat:focus, .mui-btn--flat:active { + box-shadow: none; + background-color: #f2f2f2; +} + +.mui-btn--raised, .mui-btn--fab { + box-shadow: 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); +} + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mui-btn--raised, .mui-btn--fab { + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.12), -1px 0px 2px rgba(0, 0, 0, 0.12), 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); + } +} + +.mui-btn--raised:active, .mui-btn--fab:active { + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); +} + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mui-btn--raised:active, .mui-btn--fab:active { + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.12), -1px 0px 2px rgba(0, 0, 0, 0.12), 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); + } +} + +.mui-btn--fab { + position: relative; + padding: 0; + width: 55px; + height: 55px; + line-height: 55px; + border-radius: 50%; + z-index: 1; +} + +.mui-btn--primary { + color: #FFF; + background-color: #2196F3; +} + +.mui-btn--primary:hover, .mui-btn--primary:focus, .mui-btn--primary:active { + color: #FFF; + background-color: #39a1f4; +} + +.mui-btn--primary[disabled]:hover, .mui-btn--primary[disabled]:focus, .mui-btn--primary[disabled]:active { + color: #FFF; + background-color: #2196F3; +} + +.mui-btn--primary.mui-btn--flat { + color: #2196F3; + background-color: transparent; +} + +.mui-btn--primary.mui-btn--flat:hover, .mui-btn--primary.mui-btn--flat:focus, .mui-btn--primary.mui-btn--flat:active { + color: #2196F3; + background-color: #f2f2f2; +} + +.mui-btn--primary.mui-btn--flat[disabled]:hover, .mui-btn--primary.mui-btn--flat[disabled]:focus, .mui-btn--primary.mui-btn--flat[disabled]:active { + color: #2196F3; + background-color: transparent; +} + +.mui-btn--dark { + color: #FFF; + background-color: #424242; +} + +.mui-btn--dark:hover, .mui-btn--dark:focus, .mui-btn--dark:active { + color: #FFF; + background-color: #4f4f4f; +} + +.mui-btn--dark[disabled]:hover, .mui-btn--dark[disabled]:focus, .mui-btn--dark[disabled]:active { + color: #FFF; + background-color: #424242; +} + +.mui-btn--dark.mui-btn--flat { + color: #424242; + background-color: transparent; +} + +.mui-btn--dark.mui-btn--flat:hover, .mui-btn--dark.mui-btn--flat:focus, .mui-btn--dark.mui-btn--flat:active { + color: #424242; + background-color: #f2f2f2; +} + +.mui-btn--dark.mui-btn--flat[disabled]:hover, .mui-btn--dark.mui-btn--flat[disabled]:focus, .mui-btn--dark.mui-btn--flat[disabled]:active { + color: #424242; + background-color: transparent; +} + +.mui-btn--danger { + color: #FFF; + background-color: #F44336; +} + +.mui-btn--danger:hover, .mui-btn--danger:focus, .mui-btn--danger:active { + color: #FFF; + background-color: #f55a4e; +} + +.mui-btn--danger[disabled]:hover, .mui-btn--danger[disabled]:focus, .mui-btn--danger[disabled]:active { + color: #FFF; + background-color: #F44336; +} + +.mui-btn--danger.mui-btn--flat { + color: #F44336; + background-color: transparent; +} + +.mui-btn--danger.mui-btn--flat:hover, .mui-btn--danger.mui-btn--flat:focus, .mui-btn--danger.mui-btn--flat:active { + color: #F44336; + background-color: #f2f2f2; +} + +.mui-btn--danger.mui-btn--flat[disabled]:hover, .mui-btn--danger.mui-btn--flat[disabled]:focus, .mui-btn--danger.mui-btn--flat[disabled]:active { + color: #F44336; + background-color: transparent; +} + +.mui-btn--accent { + color: #FFF; + background-color: #FF4081; +} + +.mui-btn--accent:hover, .mui-btn--accent:focus, .mui-btn--accent:active { + color: #FFF; + background-color: #ff5a92; +} + +.mui-btn--accent[disabled]:hover, .mui-btn--accent[disabled]:focus, .mui-btn--accent[disabled]:active { + color: #FFF; + background-color: #FF4081; +} + +.mui-btn--accent.mui-btn--flat { + color: #FF4081; + background-color: transparent; +} + +.mui-btn--accent.mui-btn--flat:hover, .mui-btn--accent.mui-btn--flat:focus, .mui-btn--accent.mui-btn--flat:active { + color: #FF4081; + background-color: #f2f2f2; +} + +.mui-btn--accent.mui-btn--flat[disabled]:hover, .mui-btn--accent.mui-btn--flat[disabled]:focus, .mui-btn--accent.mui-btn--flat[disabled]:active { + color: #FF4081; + background-color: transparent; +} + +.mui-btn--small { + height: 30.6px; + line-height: 30.6px; + padding: 0 16px; + font-size: 13px; +} + +.mui-btn--large { + height: 54px; + line-height: 54px; + padding: 0 26px; + font-size: 14px; +} + +.mui-btn--fab.mui-btn--small { + width: 44px; + height: 44px; + line-height: 44px; +} + +.mui-btn--fab.mui-btn--large { + width: 75px; + height: 75px; + line-height: 75px; +} + +/** + * MUI Checkboxe and Radio Components + */ +.mui-radio, +.mui-checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} + +.mui-radio > label, +.mui-checkbox > label { + min-height: 20px; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} + +.mui-radio > label > input[type="radio"], +.mui-radio--inline > label > input[type="radio"], +.mui-checkbox > label > input[type="checkbox"], +.mui-checkbox--inline > label > input[type="checkbox"] { + position: absolute; + margin-left: -20px; + margin-top: 4px; +} + +.mui-radio + .mui-radio, +.mui-checkbox + .mui-checkbox { + margin-top: -5px; +} + +.mui-radio--inline, +.mui-checkbox--inline { + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + vertical-align: middle; + font-weight: normal; + cursor: pointer; +} + +.mui-radio--inline > input[type="radio"], +.mui-radio--inline > input[type="checkbox"], +.mui-radio--inline > label > input[type="radio"], +.mui-radio--inline > label > input[type="checkbox"], +.mui-checkbox--inline > input[type="radio"], +.mui-checkbox--inline > input[type="checkbox"], +.mui-checkbox--inline > label > input[type="radio"], +.mui-checkbox--inline > label > input[type="checkbox"] { + margin: 4px 0 0; + line-height: normal; +} + +.mui-radio--inline + .mui-radio--inline, +.mui-checkbox--inline + .mui-checkbox--inline { + margin-top: 0; + margin-left: 10px; +} + +/** + * MUI Container module + */ +.mui-container { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} + +.mui-container:before, .mui-container:after { + content: " "; + display: table; +} + +.mui-container:after { + clear: both; +} + +@media (min-width: 544px) { + .mui-container { + max-width: 570px; + } +} + +@media (min-width: 768px) { + .mui-container { + max-width: 740px; + } +} + +@media (min-width: 992px) { + .mui-container { + max-width: 960px; + } +} + +@media (min-width: 1200px) { + .mui-container { + max-width: 1170px; + } +} + +.mui-container-fluid { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} + +.mui-container-fluid:before, .mui-container-fluid:after { + content: " "; + display: table; +} + +.mui-container-fluid:after { + clear: both; +} + +/** + * MUI Divider Component and CSS Helpers + */ +.mui-divider { + display: block; + height: 1px; + background-color: rgba(0, 0, 0, 0.12); +} + +.mui--divider-top { + border-top: 1px solid rgba(0, 0, 0, 0.12); +} + +.mui--divider-bottom { + border-bottom: 1px solid rgba(0, 0, 0, 0.12); +} + +.mui--divider-left { + border-left: 1px solid rgba(0, 0, 0, 0.12); +} + +.mui--divider-right { + border-right: 1px solid rgba(0, 0, 0, 0.12); +} + +/** + * MUI Dropdown module + */ +.mui-dropdown { + display: inline-block; + position: relative; +} + +[data-mui-toggle="dropdown"] { + animation-duration: 0.0001s; + animation-name: mui-node-inserted; + outline: 0; +} + +.mui-dropdown__menu { + position: absolute; + top: 100%; + left: 0; + display: none; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + list-style: none; + font-size: 14px; + text-align: left; + background-color: #FFF; + border-radius: 2px; + z-index: 1; + background-clip: padding-box; +} + +.mui-dropdown__menu.mui--is-open { + display: block; +} + +.mui-dropdown__menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.429; + color: rgba(0, 0, 0, 0.87); + white-space: nowrap; +} + +.mui-dropdown__menu > li > a:hover, .mui-dropdown__menu > li > a:focus { + text-decoration: none; + color: rgba(0, 0, 0, 0.87); + background-color: #EEEEEE; +} + +.mui-dropdown__menu > .mui--is-disabled > a, .mui-dropdown__menu > .mui--is-disabled > a:hover, .mui-dropdown__menu > .mui--is-disabled > a:focus { + color: #EEEEEE; +} + +.mui-dropdown__menu > .mui--is-disabled > a:hover, .mui-dropdown__menu > .mui--is-disabled > a:focus { + text-decoration: none; + background-color: transparent; + background-image: none; + cursor: not-allowed; +} + +.mui-dropdown__menu--right { + left: auto; + right: 0; +} + +/** + * MUI Form Component + */ +@media (min-width: 544px) { + .mui-form--inline > .mui-textfield { + display: inline-block; + margin-bottom: 0; + } + .mui-form--inline > .mui-radio, + .mui-form--inline > .mui-checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .mui-form--inline > .mui-radio > label, + .mui-form--inline > .mui-checkbox > label { + padding-left: 0; + } + .mui-form--inline > .mui-radio > label > input[type="radio"], + .mui-form--inline > .mui-checkbox > label > input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .mui-form--inline > .mui-select { + display: inline-block; + } + .mui-form--inline > .mui-btn { + margin-bottom: 0; + margin-top: 0; + vertical-align: bottom; + } +} + +/** + * MUI Grid module + */ +.mui-row { + margin-left: -15px; + margin-right: -15px; +} + +.mui-row:before, .mui-row:after { + content: " "; + display: table; +} + +.mui-row:after { + clear: both; +} + +.mui-col-xs-1, .mui-col-sm-1, .mui-col-md-1, .mui-col-lg-1, .mui-col-xs-2, .mui-col-sm-2, .mui-col-md-2, .mui-col-lg-2, .mui-col-xs-3, .mui-col-sm-3, .mui-col-md-3, .mui-col-lg-3, .mui-col-xs-4, .mui-col-sm-4, .mui-col-md-4, .mui-col-lg-4, .mui-col-xs-5, .mui-col-sm-5, .mui-col-md-5, .mui-col-lg-5, .mui-col-xs-6, .mui-col-sm-6, .mui-col-md-6, .mui-col-lg-6, .mui-col-xs-7, .mui-col-sm-7, .mui-col-md-7, .mui-col-lg-7, .mui-col-xs-8, .mui-col-sm-8, .mui-col-md-8, .mui-col-lg-8, .mui-col-xs-9, .mui-col-sm-9, .mui-col-md-9, .mui-col-lg-9, .mui-col-xs-10, .mui-col-sm-10, .mui-col-md-10, .mui-col-lg-10, .mui-col-xs-11, .mui-col-sm-11, .mui-col-md-11, .mui-col-lg-11, .mui-col-xs-12, .mui-col-sm-12, .mui-col-md-12, .mui-col-lg-12 { + min-height: 1px; + padding-left: 15px; + padding-right: 15px; +} + +.mui-col-xs-1, .mui-col-xs-2, .mui-col-xs-3, .mui-col-xs-4, .mui-col-xs-5, .mui-col-xs-6, .mui-col-xs-7, .mui-col-xs-8, .mui-col-xs-9, .mui-col-xs-10, .mui-col-xs-11, .mui-col-xs-12 { + float: left; +} + +.mui-col-xs-1 { + width: 8.33333%; +} + +.mui-col-xs-2 { + width: 16.66667%; +} + +.mui-col-xs-3 { + width: 25%; +} + +.mui-col-xs-4 { + width: 33.33333%; +} + +.mui-col-xs-5 { + width: 41.66667%; +} + +.mui-col-xs-6 { + width: 50%; +} + +.mui-col-xs-7 { + width: 58.33333%; +} + +.mui-col-xs-8 { + width: 66.66667%; +} + +.mui-col-xs-9 { + width: 75%; +} + +.mui-col-xs-10 { + width: 83.33333%; +} + +.mui-col-xs-11 { + width: 91.66667%; +} + +.mui-col-xs-12 { + width: 100%; +} + +.mui-col-xs-offset-0 { + margin-left: 0%; +} + +.mui-col-xs-offset-1 { + margin-left: 8.33333%; +} + +.mui-col-xs-offset-2 { + margin-left: 16.66667%; +} + +.mui-col-xs-offset-3 { + margin-left: 25%; +} + +.mui-col-xs-offset-4 { + margin-left: 33.33333%; +} + +.mui-col-xs-offset-5 { + margin-left: 41.66667%; +} + +.mui-col-xs-offset-6 { + margin-left: 50%; +} + +.mui-col-xs-offset-7 { + margin-left: 58.33333%; +} + +.mui-col-xs-offset-8 { + margin-left: 66.66667%; +} + +.mui-col-xs-offset-9 { + margin-left: 75%; +} + +.mui-col-xs-offset-10 { + margin-left: 83.33333%; +} + +.mui-col-xs-offset-11 { + margin-left: 91.66667%; +} + +.mui-col-xs-offset-12 { + margin-left: 100%; +} + +@media (min-width: 544px) { + .mui-col-sm-1, .mui-col-sm-2, .mui-col-sm-3, .mui-col-sm-4, .mui-col-sm-5, .mui-col-sm-6, .mui-col-sm-7, .mui-col-sm-8, .mui-col-sm-9, .mui-col-sm-10, .mui-col-sm-11, .mui-col-sm-12 { + float: left; + } + .mui-col-sm-1 { + width: 8.33333%; + } + .mui-col-sm-2 { + width: 16.66667%; + } + .mui-col-sm-3 { + width: 25%; + } + .mui-col-sm-4 { + width: 33.33333%; + } + .mui-col-sm-5 { + width: 41.66667%; + } + .mui-col-sm-6 { + width: 50%; + } + .mui-col-sm-7 { + width: 58.33333%; + } + .mui-col-sm-8 { + width: 66.66667%; + } + .mui-col-sm-9 { + width: 75%; + } + .mui-col-sm-10 { + width: 83.33333%; + } + .mui-col-sm-11 { + width: 91.66667%; + } + .mui-col-sm-12 { + width: 100%; + } + .mui-col-sm-offset-0 { + margin-left: 0%; + } + .mui-col-sm-offset-1 { + margin-left: 8.33333%; + } + .mui-col-sm-offset-2 { + margin-left: 16.66667%; + } + .mui-col-sm-offset-3 { + margin-left: 25%; + } + .mui-col-sm-offset-4 { + margin-left: 33.33333%; + } + .mui-col-sm-offset-5 { + margin-left: 41.66667%; + } + .mui-col-sm-offset-6 { + margin-left: 50%; + } + .mui-col-sm-offset-7 { + margin-left: 58.33333%; + } + .mui-col-sm-offset-8 { + margin-left: 66.66667%; + } + .mui-col-sm-offset-9 { + margin-left: 75%; + } + .mui-col-sm-offset-10 { + margin-left: 83.33333%; + } + .mui-col-sm-offset-11 { + margin-left: 91.66667%; + } + .mui-col-sm-offset-12 { + margin-left: 100%; + } +} + +@media (min-width: 768px) { + .mui-col-md-1, .mui-col-md-2, .mui-col-md-3, .mui-col-md-4, .mui-col-md-5, .mui-col-md-6, .mui-col-md-7, .mui-col-md-8, .mui-col-md-9, .mui-col-md-10, .mui-col-md-11, .mui-col-md-12 { + float: left; + } + .mui-col-md-1 { + width: 8.33333%; + } + .mui-col-md-2 { + width: 16.66667%; + } + .mui-col-md-3 { + width: 25%; + } + .mui-col-md-4 { + width: 33.33333%; + } + .mui-col-md-5 { + width: 41.66667%; + } + .mui-col-md-6 { + width: 50%; + } + .mui-col-md-7 { + width: 58.33333%; + } + .mui-col-md-8 { + width: 66.66667%; + } + .mui-col-md-9 { + width: 75%; + } + .mui-col-md-10 { + width: 83.33333%; + } + .mui-col-md-11 { + width: 91.66667%; + } + .mui-col-md-12 { + width: 100%; + } + .mui-col-md-offset-0 { + margin-left: 0%; + } + .mui-col-md-offset-1 { + margin-left: 8.33333%; + } + .mui-col-md-offset-2 { + margin-left: 16.66667%; + } + .mui-col-md-offset-3 { + margin-left: 25%; + } + .mui-col-md-offset-4 { + margin-left: 33.33333%; + } + .mui-col-md-offset-5 { + margin-left: 41.66667%; + } + .mui-col-md-offset-6 { + margin-left: 50%; + } + .mui-col-md-offset-7 { + margin-left: 58.33333%; + } + .mui-col-md-offset-8 { + margin-left: 66.66667%; + } + .mui-col-md-offset-9 { + margin-left: 75%; + } + .mui-col-md-offset-10 { + margin-left: 83.33333%; + } + .mui-col-md-offset-11 { + margin-left: 91.66667%; + } + .mui-col-md-offset-12 { + margin-left: 100%; + } +} + +@media (min-width: 992px) { + .mui-col-lg-1, .mui-col-lg-2, .mui-col-lg-3, .mui-col-lg-4, .mui-col-lg-5, .mui-col-lg-6, .mui-col-lg-7, .mui-col-lg-8, .mui-col-lg-9, .mui-col-lg-10, .mui-col-lg-11, .mui-col-lg-12 { + float: left; + } + .mui-col-lg-1 { + width: 8.33333%; + } + .mui-col-lg-2 { + width: 16.66667%; + } + .mui-col-lg-3 { + width: 25%; + } + .mui-col-lg-4 { + width: 33.33333%; + } + .mui-col-lg-5 { + width: 41.66667%; + } + .mui-col-lg-6 { + width: 50%; + } + .mui-col-lg-7 { + width: 58.33333%; + } + .mui-col-lg-8 { + width: 66.66667%; + } + .mui-col-lg-9 { + width: 75%; + } + .mui-col-lg-10 { + width: 83.33333%; + } + .mui-col-lg-11 { + width: 91.66667%; + } + .mui-col-lg-12 { + width: 100%; + } + .mui-col-lg-offset-0 { + margin-left: 0%; + } + .mui-col-lg-offset-1 { + margin-left: 8.33333%; + } + .mui-col-lg-offset-2 { + margin-left: 16.66667%; + } + .mui-col-lg-offset-3 { + margin-left: 25%; + } + .mui-col-lg-offset-4 { + margin-left: 33.33333%; + } + .mui-col-lg-offset-5 { + margin-left: 41.66667%; + } + .mui-col-lg-offset-6 { + margin-left: 50%; + } + .mui-col-lg-offset-7 { + margin-left: 58.33333%; + } + .mui-col-lg-offset-8 { + margin-left: 66.66667%; + } + .mui-col-lg-offset-9 { + margin-left: 75%; + } + .mui-col-lg-offset-10 { + margin-left: 83.33333%; + } + .mui-col-lg-offset-11 { + margin-left: 91.66667%; + } + .mui-col-lg-offset-12 { + margin-left: 100%; + } +} + +@media (min-width: 1200px) { + .mui-col-xl-1, .mui-col-xl-2, .mui-col-xl-3, .mui-col-xl-4, .mui-col-xl-5, .mui-col-xl-6, .mui-col-xl-7, .mui-col-xl-8, .mui-col-xl-9, .mui-col-xl-10, .mui-col-xl-11, .mui-col-xl-12 { + float: left; + } + .mui-col-xl-1 { + width: 8.33333%; + } + .mui-col-xl-2 { + width: 16.66667%; + } + .mui-col-xl-3 { + width: 25%; + } + .mui-col-xl-4 { + width: 33.33333%; + } + .mui-col-xl-5 { + width: 41.66667%; + } + .mui-col-xl-6 { + width: 50%; + } + .mui-col-xl-7 { + width: 58.33333%; + } + .mui-col-xl-8 { + width: 66.66667%; + } + .mui-col-xl-9 { + width: 75%; + } + .mui-col-xl-10 { + width: 83.33333%; + } + .mui-col-xl-11 { + width: 91.66667%; + } + .mui-col-xl-12 { + width: 100%; + } + .mui-col-xl-offset-0 { + margin-left: 0%; + } + .mui-col-xl-offset-1 { + margin-left: 8.33333%; + } + .mui-col-xl-offset-2 { + margin-left: 16.66667%; + } + .mui-col-xl-offset-3 { + margin-left: 25%; + } + .mui-col-xl-offset-4 { + margin-left: 33.33333%; + } + .mui-col-xl-offset-5 { + margin-left: 41.66667%; + } + .mui-col-xl-offset-6 { + margin-left: 50%; + } + .mui-col-xl-offset-7 { + margin-left: 58.33333%; + } + .mui-col-xl-offset-8 { + margin-left: 66.66667%; + } + .mui-col-xl-offset-9 { + margin-left: 75%; + } + .mui-col-xl-offset-10 { + margin-left: 83.33333%; + } + .mui-col-xl-offset-11 { + margin-left: 91.66667%; + } + .mui-col-xl-offset-12 { + margin-left: 100%; + } +} + +/** + * MUI Panel module + */ +.mui-panel { + padding: 15px; + margin-bottom: 20px; + border-radius: 0; + background-color: #FFF; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.16), 0 0px 2px 0 rgba(0, 0, 0, 0.12); +} + +.mui-panel:before, .mui-panel:after { + content: " "; + display: table; +} + +.mui-panel:after { + clear: both; +} + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mui-panel { + box-shadow: 0 -1px 2px 0 rgba(0, 0, 0, 0.12), -1px 0px 2px 0 rgba(0, 0, 0, 0.12), 0 2px 2px 0 rgba(0, 0, 0, 0.16), 0 0px 2px 0 rgba(0, 0, 0, 0.12); + } +} + +/** + * MUI Select Component + */ +.mui-select { + display: block; + padding-top: 15px; + margin-bottom: 20px; + position: relative; +} + +.mui-select:focus { + outline: 0; +} + +.mui-select:focus > select { + height: 33px; + margin-bottom: -1px; + border-color: #2196F3; + border-width: 2px; +} + +.mui-select > select { + animation-duration: 0.0001s; + animation-name: mui-node-inserted; + display: block; + height: 32px; + width: 100%; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + outline: none; + border: none; + border-bottom: 1px solid rgba(0, 0, 0, 0.26); + border-radius: 0px; + box-shadow: none; + background-color: transparent; + background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iNiIgd2lkdGg9IjEwIj48cG9seWdvbiBwb2ludHM9IjAsMCAxMCwwIDUsNiIgc3R5bGU9ImZpbGw6cmdiYSgwLDAsMCwuMjQpOyIvPjwvc3ZnPg=="); + background-repeat: no-repeat; + background-position: right center; + cursor: pointer; + color: rgba(0, 0, 0, 0.87); + font-size: 16px; + padding: 0 25px 0 0; +} + +.mui-select > select::-ms-expand { + display: none; +} + +.mui-select > select:focus { + outline: 0; + height: 33px; + margin-bottom: -1px; + border-color: #2196F3; + border-width: 2px; +} + +.mui-select > select:disabled { + color: rgba(0, 0, 0, 0.38); + cursor: not-allowed; + background-color: transparent; + opacity: 1; +} + +.mui-select__menu { + position: absolute; + z-index: 2; + min-width: 100%; + overflow-y: auto; + padding: 8px 0; + background-color: #FFF; + font-size: 16px; +} + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mui-select__menu { + border-left: 1px solid rgba(0, 0, 0, 0.12); + border-top: 1px solid rgba(0, 0, 0, 0.12); + } +} + +.mui-select__menu > div { + padding: 0 22px; + height: 42px; + line-height: 42px; + cursor: pointer; + white-space: nowrap; +} + +.mui-select__menu > div:hover { + background-color: #E0E0E0; +} + +.mui-select__menu > div.mui--is-selected { + background-color: #EEEEEE; +} + +/** + * MUI Table Component + */ +th { + text-align: left; +} + +.mui-table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} + +.mui-table > thead > tr > th, +.mui-table > thead > tr > td, +.mui-table > tbody > tr > th, +.mui-table > tbody > tr > td, +.mui-table > tfoot > tr > th, +.mui-table > tfoot > tr > td { + padding: 10px; + line-height: 1.429; +} + +.mui-table > thead > tr > th { + border-bottom: 2px solid rgba(0, 0, 0, 0.12); + font-weight: 700; +} + +.mui-table > tbody + tbody { + border-top: 2px solid rgba(0, 0, 0, 0.12); +} + +.mui-table.mui-table--bordered > tbody > tr > td { + border-bottom: 1px solid rgba(0, 0, 0, 0.12); +} + +/** + * MUI Tabs module + */ +.mui-tabs__bar { + list-style: none; + padding-left: 0; + margin-bottom: 0; + background-color: transparent; + white-space: nowrap; + overflow-x: auto; +} + +.mui-tabs__bar > li { + display: inline-block; +} + +.mui-tabs__bar > li > a { + display: block; + white-space: nowrap; + text-transform: uppercase; + font-weight: 500; + font-size: 14px; + color: rgba(0, 0, 0, 0.87); + cursor: default; + height: 48px; + line-height: 48px; + padding-left: 24px; + padding-right: 24px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.mui-tabs__bar > li > a:hover { + text-decoration: none; +} + +.mui-tabs__bar > li.mui--is-active { + border-bottom: 2px solid #2196F3; +} + +.mui-tabs__bar > li.mui--is-active > a { + color: #2196F3; +} + +.mui-tabs__bar.mui-tabs__bar--justified { + display: table; + width: 100%; + table-layout: fixed; +} + +.mui-tabs__bar.mui-tabs__bar--justified > li { + display: table-cell; +} + +.mui-tabs__bar.mui-tabs__bar--justified > li > a { + text-align: center; + padding-left: 0px; + padding-right: 0px; +} + +.mui-tabs__pane { + display: none; +} + +.mui-tabs__pane.mui--is-active { + display: block; +} + +[data-mui-toggle="tab"] { + animation-duration: 0.0001s; + animation-name: mui-node-inserted; +} + +/** + * MUI Textfield Component + */ +.mui-textfield { + display: block; + padding-top: 15px; + margin-bottom: 20px; + position: relative; +} + +.mui-textfield > label { + position: absolute; + top: 0; + display: block; + width: 100%; + color: rgba(0, 0, 0, 0.54); + font-size: 12px; + font-weight: 400; + line-height: 15px; + overflow-x: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.mui-textfield > textarea { + padding-top: 5px; +} + +.mui-textfield > input, +.mui-textfield > textarea { + display: block; +} + +.mui-textfield > input:focus ~ label, +.mui-textfield > textarea:focus ~ label { + color: #2196F3; +} + +.mui-textfield--float-label > label { + position: absolute; + transform: translate(0px, 15px); + font-size: 16px; + line-height: 32px; + color: rgba(0, 0, 0, 0.26); + text-overflow: clip; + cursor: text; + pointer-events: none; +} + +.mui-textfield--float-label > input:focus ~ label, +.mui-textfield--float-label > textarea:focus ~ label { + transform: translate(0px, 0px); + font-size: 12px; + line-height: 15px; + text-overflow: ellipsis; +} + +.mui-textfield--float-label > input:not(:focus).mui--is-not-empty ~ label, .mui-textfield--float-label > input:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, .mui-textfield--float-label > input:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield--float-label > textarea:not(:focus).mui--is-not-empty ~ label, +.mui-textfield--float-label > textarea:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield--float-label > textarea:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label { + color: rgba(0, 0, 0, 0.54); + font-size: 12px; + line-height: 15px; + transform: translate(0px, 0px); + text-overflow: ellipsis; +} + +.mui-textfield--wrap-label { + display: table; + width: 100%; + padding-top: 0px; +} + +.mui-textfield--wrap-label:not(.mui-textfield--float-label) > label { + display: table-header-group; + position: static; + white-space: normal; + overflow-x: visible; +} + +.mui-textfield > input, +.mui-textfield > textarea { + animation-duration: 0.0001s; + animation-name: mui-node-inserted; + display: block; + background-color: transparent; + color: rgba(0, 0, 0, 0.87); + border: none; + border-bottom: 1px solid rgba(0, 0, 0, 0.26); + outline: none; + width: 100%; + font-size: 16px; + padding: 0; + box-shadow: none; + border-radius: 0px; + background-image: none; +} + +.mui-textfield > input:focus, +.mui-textfield > textarea:focus { + border-color: #2196F3; + border-width: 2px; +} + +.mui-textfield > input:disabled, .mui-textfield > input:-moz-read-only, +.mui-textfield > textarea:disabled, +.mui-textfield > textarea:-moz-read-only { + cursor: not-allowed; + background-color: transparent; + opacity: 1; +} + +.mui-textfield > input:disabled, .mui-textfield > input:read-only, +.mui-textfield > textarea:disabled, +.mui-textfield > textarea:read-only { + cursor: not-allowed; + background-color: transparent; + opacity: 1; +} + +.mui-textfield > input::-webkit-input-placeholder, +.mui-textfield > textarea::-webkit-input-placeholder { + color: rgba(0, 0, 0, 0.26); + opacity: 1; +} + +.mui-textfield > input::-moz-placeholder, +.mui-textfield > textarea::-moz-placeholder { + color: rgba(0, 0, 0, 0.26); + opacity: 1; +} + +.mui-textfield > input:-ms-input-placeholder, +.mui-textfield > textarea:-ms-input-placeholder { + color: rgba(0, 0, 0, 0.26); + opacity: 1; +} + +.mui-textfield > input::placeholder, +.mui-textfield > textarea::placeholder { + color: rgba(0, 0, 0, 0.26); + opacity: 1; +} + +.mui-textfield > input { + height: 32px; +} + +.mui-textfield > input:focus { + height: 33px; + margin-bottom: -1px; +} + +.mui-textfield > textarea { + min-height: 64px; +} + +.mui-textfield > textarea[rows]:not([rows="2"]):focus { + margin-bottom: -1px; +} + +.mui-textfield > input:focus { + height: 33px; + margin-bottom: -1px; +} + +.mui-textfield > input:invalid:not(:focus):not(:required), .mui-textfield > input:invalid:not(:focus):required.mui--is-not-empty, .mui-textfield > input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty, .mui-textfield > input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty), .mui-textfield > input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > textarea:invalid:not(:focus):not(:required), +.mui-textfield > textarea:invalid:not(:focus):required.mui--is-not-empty, +.mui-textfield > textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty, +.mui-textfield > textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > input:not(:focus).mui--is-invalid:not(:required), +.mui-textfield > input:not(:focus).mui--is-invalid:required.mui--is-not-empty, +.mui-textfield > input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty, +.mui-textfield > input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > textarea:not(:focus).mui--is-invalid:not(:required), +.mui-textfield > textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty, +.mui-textfield > textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty, +.mui-textfield > textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) { + border-color: #F44336; + border-width: 2px; +} + +.mui-textfield > input:invalid:not(:focus):not(:required), .mui-textfield > input:invalid:not(:focus):required.mui--is-not-empty, .mui-textfield > input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty, .mui-textfield > input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty), .mui-textfield > input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > input:not(:focus).mui--is-invalid:not(:required), +.mui-textfield > input:not(:focus).mui--is-invalid:required.mui--is-not-empty, +.mui-textfield > input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty, +.mui-textfield > input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) { + height: 33px; + margin-bottom: -1px; +} + +.mui-textfield > input:invalid:not(:focus):not(:required) ~ label, .mui-textfield > input:invalid:not(:focus):required.mui--is-not-empty ~ label, .mui-textfield > input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, .mui-textfield > input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield > textarea:invalid:not(:focus):not(:required) ~ label, +.mui-textfield > textarea:invalid:not(:focus):required.mui--is-not-empty ~ label, +.mui-textfield > textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield > textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield > input:not(:focus).mui--is-invalid:not(:required) ~ label, +.mui-textfield > input:not(:focus).mui--is-invalid:required.mui--is-not-empty ~ label, +.mui-textfield > input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield > input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield > textarea:not(:focus).mui--is-invalid:not(:required) ~ label, +.mui-textfield > textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty ~ label, +.mui-textfield > textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield > textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label { + color: #F44336; +} + +.mui-textfield:not(.mui-textfield--float-label) > input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty ~ label, +.mui-textfield:not(.mui-textfield--float-label) > textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty ~ label, +.mui-textfield:not(.mui-textfield--float-label) > input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty ~ label, +.mui-textfield:not(.mui-textfield--float-label) > textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty ~ label { + color: #F44336; +} + +/** + * MUI Helpers module + */ +@keyframes mui-node-inserted { + from { + opacity: 0.99; + } + to { + opacity: 1; + } +} + +.mui--no-transition { + transition: none !important; +} + +.mui--no-user-select { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.mui-caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px solid; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} + +.mui--text-left { + text-align: left !important; +} + +.mui--text-right { + text-align: right !important; +} + +.mui--text-center { + text-align: center !important; +} + +.mui--text-justify { + text-align: justify !important; +} + +.mui--text-nowrap { + white-space: nowrap !important; +} + +.mui--align-baseline { + vertical-align: baseline !important; +} + +.mui--align-top { + vertical-align: top !important; +} + +.mui--align-middle { + vertical-align: middle !important; +} + +.mui--align-bottom { + vertical-align: bottom !important; +} + +.mui--text-dark { + color: rgba(0, 0, 0, 0.87); +} + +.mui--text-dark-secondary { + color: rgba(0, 0, 0, 0.54); +} + +.mui--text-dark-hint { + color: rgba(0, 0, 0, 0.38); +} + +.mui--text-light { + color: #FFF; +} + +.mui--text-light-secondary { + color: rgba(255, 255, 255, 0.7); +} + +.mui--text-light-hint { + color: rgba(255, 255, 255, 0.3); +} + +.mui--text-accent { + color: rgba(255, 64, 129, 0.87); +} + +.mui--text-accent-secondary { + color: rgba(255, 64, 129, 0.54); +} + +.mui--text-accent-hint { + color: rgba(255, 64, 129, 0.38); +} + +.mui--text-black { + color: #000; +} + +.mui--text-white { + color: #FFF; +} + +.mui--text-danger { + color: #F44336; +} + +.mui-list--unstyled { + padding-left: 0; + list-style: none; +} + +.mui-list--inline { + padding-left: 0; + list-style: none; + margin-left: -5px; +} + +.mui-list--inline > li { + display: inline-block; + padding-left: 5px; + padding-right: 5px; +} + +.mui--z1, .mui-dropdown__menu, .mui-select__menu { + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); +} + +.mui--z2 { + box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23); +} + +.mui--z3 { + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); +} + +.mui--z4 { + box-shadow: 0 14px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.22); +} + +.mui--z5 { + box-shadow: 0 19px 38px rgba(0, 0, 0, 0.3), 0 15px 12px rgba(0, 0, 0, 0.22); +} + +.mui--clearfix:before, .mui--clearfix:after { + content: " "; + display: table; +} + +.mui--clearfix:after { + clear: both; +} + +.mui--pull-right { + float: right !important; +} + +.mui--pull-left { + float: left !important; +} + +.mui--hide { + display: none !important; +} + +.mui--show { + display: block !important; +} + +.mui--invisible { + visibility: hidden; +} + +.mui--overflow-hidden { + overflow: hidden !important; +} + +.mui--overflow-hidden-x { + overflow-x: hidden !important; +} + +.mui--overflow-hidden-y { + overflow-y: hidden !important; +} + +.mui--visible-xs-block, +.mui--visible-xs-inline, +.mui--visible-xs-inline-block, +.mui--visible-sm-block, +.mui--visible-sm-inline, +.mui--visible-sm-inline-block, +.mui--visible-md-block, +.mui--visible-md-inline, +.mui--visible-md-inline-block, +.mui--visible-lg-block, +.mui--visible-lg-inline, +.mui--visible-lg-inline-block, +.mui--visible-xl-block, +.mui--visible-xl-inline, +.mui--visible-xl-inline-block { + display: none !important; +} + +@media (max-width: 543px) { + .mui-visible-xs { + display: block !important; + } + table.mui-visible-xs { + display: table; + } + tr.mui-visible-xs { + display: table-row !important; + } + th.mui-visible-xs, + td.mui-visible-xs { + display: table-cell !important; + } + .mui--visible-xs-block { + display: block !important; + } + .mui--visible-xs-inline { + display: inline !important; + } + .mui--visible-xs-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 544px) and (max-width: 767px) { + .mui-visible-sm { + display: block !important; + } + table.mui-visible-sm { + display: table; + } + tr.mui-visible-sm { + display: table-row !important; + } + th.mui-visible-sm, + td.mui-visible-sm { + display: table-cell !important; + } + .mui--visible-sm-block { + display: block !important; + } + .mui--visible-sm-inline { + display: inline !important; + } + .mui--visible-sm-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .mui-visible-md { + display: block !important; + } + table.mui-visible-md { + display: table; + } + tr.mui-visible-md { + display: table-row !important; + } + th.mui-visible-md, + td.mui-visible-md { + display: table-cell !important; + } + .mui--visible-md-block { + display: block !important; + } + .mui--visible-md-inline { + display: inline !important; + } + .mui--visible-md-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .mui-visible-lg { + display: block !important; + } + table.mui-visible-lg { + display: table; + } + tr.mui-visible-lg { + display: table-row !important; + } + th.mui-visible-lg, + td.mui-visible-lg { + display: table-cell !important; + } + .mui--visible-lg-block { + display: block !important; + } + .mui--visible-lg-inline { + display: inline !important; + } + .mui--visible-lg-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 1200px) { + .mui-visible-xl { + display: block !important; + } + table.mui-visible-xl { + display: table; + } + tr.mui-visible-xl { + display: table-row !important; + } + th.mui-visible-xl, + td.mui-visible-xl { + display: table-cell !important; + } + .mui--visible-xl-block { + display: block !important; + } + .mui--visible-xl-inline { + display: inline !important; + } + .mui--visible-xl-inline-block { + display: inline-block !important; + } +} + +@media (max-width: 543px) { + .mui--hidden-xs { + display: none !important; + } +} + +@media (min-width: 544px) and (max-width: 767px) { + .mui--hidden-sm { + display: none !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .mui--hidden-md { + display: none !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .mui--hidden-lg { + display: none !important; + } +} + +@media (min-width: 1200px) { + .mui--hidden-xl { + display: none !important; + } +} + +body.mui-body--scroll-lock { + overflow: hidden !important; +} + +/** + * MUI Overlay module + */ +#mui-overlay { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 99999999; + background-color: rgba(0, 0, 0, 0.2); + overflow: auto; +} + +/** + * MUI Ripple module + */ +.mui-ripple-effect { + position: absolute; + border-radius: 50%; + pointer-events: none; + opacity: 0; + animation: mui-ripple-animation 2s; +} + +@keyframes mui-ripple-animation { + from { + transform: scale(1); + opacity: 0.4; + } + to { + transform: scale(100); + opacity: 0; + } +} + +.mui-btn > .mui-ripple-effect { + background-color: #a6a6a6; +} + +.mui-btn--primary > .mui-ripple-effect { + background-color: #FFF; +} + +.mui-btn--dark > .mui-ripple-effect { + background-color: #FFF; +} + +.mui-btn--danger > .mui-ripple-effect { + background-color: #FFF; +} + +.mui-btn--accent > .mui-ripple-effect { + background-color: #FFF; +} + +.mui-btn--flat > .mui-ripple-effect { + background-color: #a6a6a6; +} + +/** + * MUI Typography module + */ +.mui--text-display4 { + font-weight: 300; + font-size: 112px; + line-height: 112px; +} + +.mui--text-display3 { + font-weight: 400; + font-size: 56px; + line-height: 56px; +} + +.mui--text-display2 { + font-weight: 400; + font-size: 45px; + line-height: 48px; +} + +.mui--text-display1, h1 { + font-weight: 400; + font-size: 34px; + line-height: 40px; +} + +.mui--text-headline, h2 { + font-weight: 400; + font-size: 24px; + line-height: 32px; +} + +.mui--text-title, h3 { + font-weight: 400; + font-size: 20px; + line-height: 28px; +} + +.mui--text-subhead, h4 { + font-weight: 400; + font-size: 16px; + line-height: 24px; +} + +.mui--text-body2, h5 { + font-weight: 500; + font-size: 14px; + line-height: 24px; +} + +.mui--text-body1 { + font-weight: 400; + font-size: 14px; + line-height: 20px; +} + +.mui--text-caption { + font-weight: 400; + font-size: 12px; + line-height: 16px; +} + +.mui--text-menu { + font-weight: 500; + font-size: 13px; + line-height: 17px; +} + +.mui--text-button { + font-weight: 500; + font-size: 14px; + line-height: 18px; + text-transform: uppercase; +} diff --git a/platforms/android/assets/www/libs/mui/packages/meteor/lib/css/mui.min.css b/platforms/android/assets/www/libs/mui/packages/meteor/lib/css/mui.min.css new file mode 100644 index 0000000..750f365 --- /dev/null +++ b/platforms/android/assets/www/libs/mui/packages/meteor/lib/css/mui.min.css @@ -0,0 +1 @@ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-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{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}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{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{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-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:border-box}:after,:before{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:Arial,Verdana,Tahoma;font-size:14px;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);background-color:#FFF}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#2196F3;text-decoration:none}a:focus,a:hover{color:#1976D2;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}p{margin:0 0 10px}ol,ul{margin-top:0;margin-bottom:10px}figure{margin:0}img{vertical-align:middle}hr{margin-top:20px;margin-bottom:20px;border:0;height:1px;background-color:rgba(0,0,0,.12)}legend{display:block;width:100%;padding:0;margin-bottom:10px;font-size:21px;color:rgba(0,0,0,.87);line-height:inherit;border:0}input[type=search]{box-sizing:border-box;-webkit-appearance:none}input[type=checkbox]:focus,input[type=radio]:focus,input[type=file]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type=checkbox]:disabled,input[type=radio]:disabled{cursor:not-allowed}strong{font-weight:700}abbr[title]{cursor:help;border-bottom:1px dotted #2196F3}h1,h2,h3{margin-top:20px;margin-bottom:10px}h4,h5,h6{margin-top:10px;margin-bottom:10px}.mui--appbar-height{height:56px}.mui--appbar-min-height,.mui-appbar{min-height:56px}.mui--appbar-line-height{line-height:56px}.mui--appbar-top{top:56px}@media (orientation:landscape) and (max-height:480px){.mui--appbar-height{height:48px}.mui--appbar-min-height,.mui-appbar{min-height:48px}.mui--appbar-line-height{line-height:48px}.mui--appbar-top{top:48px}}@media (min-width:480px){.mui--appbar-height{height:64px}.mui--appbar-min-height,.mui-appbar{min-height:64px}.mui--appbar-line-height{line-height:64px}.mui--appbar-top{top:64px}}.mui-appbar{background-color:#2196F3;color:#FFF}.mui-btn{animation-duration:.1ms;animation-name:mui-node-inserted;font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase;color:rgba(0,0,0,.87);background-color:#FFF;transition:all .2s ease-in-out;display:inline-block;height:36px;padding:0 26px;margin-top:6px;margin-bottom:6px;border:none;border-radius:2px;cursor:pointer;-ms-touch-action:manipulation;touch-action:manipulation;background-image:none;text-align:center;line-height:36px;vertical-align:middle;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:14px;letter-spacing:.03em;position:relative;overflow:hidden}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{color:rgba(0,0,0,.87);background-color:#fff}.mui-btn[disabled]:active,.mui-btn[disabled]:focus,.mui-btn[disabled]:hover{color:rgba(0,0,0,.87);background-color:#FFF}.mui-btn.mui-btn--flat{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn.mui-btn--flat:active,.mui-btn.mui-btn--flat:focus,.mui-btn.mui-btn--flat:hover{color:rgba(0,0,0,.87);background-color:#f2f2f2}.mui-btn.mui-btn--flat[disabled]:active,.mui-btn.mui-btn--flat[disabled]:focus,.mui-btn.mui-btn--flat[disabled]:hover{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{outline:0;text-decoration:none;color:rgba(0,0,0,.87)}.mui-btn:focus,.mui-btn:hover{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:focus,.mui-btn:hover{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn.mui--is-disabled,.mui-btn:disabled{cursor:not-allowed;pointer-events:none;opacity:.6;box-shadow:none}.mui-btn+.mui-btn{margin-left:8px}.mui-btn--flat{background-color:transparent}.mui-btn--flat:active,.mui-btn--flat:focus,.mui-btn--flat:hover{box-shadow:none;background-color:#f2f2f2}.mui-btn--fab,.mui-btn--raised{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab,.mui-btn--raised{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn--fab{position:relative;padding:0;width:55px;height:55px;line-height:55px;border-radius:50%;z-index:1}.mui-btn--primary{color:#FFF;background-color:#2196F3}.mui-btn--primary:active,.mui-btn--primary:focus,.mui-btn--primary:hover{color:#FFF;background-color:#39a1f4}.mui-btn--primary[disabled]:active,.mui-btn--primary[disabled]:focus,.mui-btn--primary[disabled]:hover{color:#FFF;background-color:#2196F3}.mui-btn--primary.mui-btn--flat{color:#2196F3;background-color:transparent}.mui-btn--primary.mui-btn--flat:active,.mui-btn--primary.mui-btn--flat:focus,.mui-btn--primary.mui-btn--flat:hover{color:#2196F3;background-color:#f2f2f2}.mui-btn--primary.mui-btn--flat[disabled]:active,.mui-btn--primary.mui-btn--flat[disabled]:focus,.mui-btn--primary.mui-btn--flat[disabled]:hover{color:#2196F3;background-color:transparent}.mui-btn--dark{color:#FFF;background-color:#424242}.mui-btn--dark:active,.mui-btn--dark:focus,.mui-btn--dark:hover{color:#FFF;background-color:#4f4f4f}.mui-btn--dark[disabled]:active,.mui-btn--dark[disabled]:focus,.mui-btn--dark[disabled]:hover{color:#FFF;background-color:#424242}.mui-btn--dark.mui-btn--flat{color:#424242;background-color:transparent}.mui-btn--dark.mui-btn--flat:active,.mui-btn--dark.mui-btn--flat:focus,.mui-btn--dark.mui-btn--flat:hover{color:#424242;background-color:#f2f2f2}.mui-btn--dark.mui-btn--flat[disabled]:active,.mui-btn--dark.mui-btn--flat[disabled]:focus,.mui-btn--dark.mui-btn--flat[disabled]:hover{color:#424242;background-color:transparent}.mui-btn--danger{color:#FFF;background-color:#F44336}.mui-btn--danger:active,.mui-btn--danger:focus,.mui-btn--danger:hover{color:#FFF;background-color:#f55a4e}.mui-btn--danger[disabled]:active,.mui-btn--danger[disabled]:focus,.mui-btn--danger[disabled]:hover{color:#FFF;background-color:#F44336}.mui-btn--danger.mui-btn--flat{color:#F44336;background-color:transparent}.mui-btn--danger.mui-btn--flat:active,.mui-btn--danger.mui-btn--flat:focus,.mui-btn--danger.mui-btn--flat:hover{color:#F44336;background-color:#f2f2f2}.mui-btn--danger.mui-btn--flat[disabled]:active,.mui-btn--danger.mui-btn--flat[disabled]:focus,.mui-btn--danger.mui-btn--flat[disabled]:hover{color:#F44336;background-color:transparent}.mui-btn--accent{color:#FFF;background-color:#FF4081}.mui-btn--accent:active,.mui-btn--accent:focus,.mui-btn--accent:hover{color:#FFF;background-color:#ff5a92}.mui-btn--accent[disabled]:active,.mui-btn--accent[disabled]:focus,.mui-btn--accent[disabled]:hover{color:#FFF;background-color:#FF4081}.mui-btn--accent.mui-btn--flat{color:#FF4081;background-color:transparent}.mui-btn--accent.mui-btn--flat:active,.mui-btn--accent.mui-btn--flat:focus,.mui-btn--accent.mui-btn--flat:hover{color:#FF4081;background-color:#f2f2f2}.mui-btn--accent.mui-btn--flat[disabled]:active,.mui-btn--accent.mui-btn--flat[disabled]:focus,.mui-btn--accent.mui-btn--flat[disabled]:hover{color:#FF4081;background-color:transparent}.mui-btn--small{height:30.6px;line-height:30.6px;padding:0 16px;font-size:13px}.mui-btn--large{height:54px;line-height:54px;padding:0 26px;font-size:14px}.mui-btn--fab.mui-btn--small{width:44px;height:44px;line-height:44px}.mui-btn--fab.mui-btn--large{width:75px;height:75px;line-height:75px}.mui-checkbox,.mui-radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.mui-checkbox>label,.mui-radio>label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio],.mui-radio>label>input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px}.mui-checkbox+.mui-checkbox,.mui-radio+.mui-radio{margin-top:-5px}.mui-checkbox--inline,.mui-radio--inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.mui-checkbox--inline>input[type=checkbox],.mui-checkbox--inline>input[type=radio],.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox--inline>label>input[type=radio],.mui-radio--inline>input[type=checkbox],.mui-radio--inline>input[type=radio],.mui-radio--inline>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio]{margin:4px 0 0;line-height:normal}.mui-checkbox--inline+.mui-checkbox--inline,.mui-radio--inline+.mui-radio--inline{margin-top:0;margin-left:10px}.mui-container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container:after,.mui-container:before{content:" ";display:table}.mui-container:after{clear:both}@media (min-width:544px){.mui-container{max-width:570px}}@media (min-width:768px){.mui-container{max-width:740px}}@media (min-width:992px){.mui-container{max-width:960px}}@media (min-width:1200px){.mui-container{max-width:1170px}}.mui-container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container-fluid:after,.mui-container-fluid:before{content:" ";display:table}.mui-container-fluid:after{clear:both}.mui-divider{display:block;height:1px;background-color:rgba(0,0,0,.12)}.mui--divider-top{border-top:1px solid rgba(0,0,0,.12)}.mui--divider-bottom{border-bottom:1px solid rgba(0,0,0,.12)}.mui--divider-left{border-left:1px solid rgba(0,0,0,.12)}.mui--divider-right{border-right:1px solid rgba(0,0,0,.12)}.mui-dropdown{display:inline-block;position:relative}[data-mui-toggle=dropdown]{animation-duration:.1ms;animation-name:mui-node-inserted;outline:0}.mui-dropdown__menu{position:absolute;top:100%;left:0;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#FFF;border-radius:2px;z-index:1;background-clip:padding-box}.mui-dropdown__menu.mui--is-open{display:block}.mui-dropdown__menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);white-space:nowrap}.mui-dropdown__menu>li>a:focus,.mui-dropdown__menu>li>a:hover{text-decoration:none;color:rgba(0,0,0,.87);background-color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a,.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;cursor:not-allowed}.mui-dropdown__menu--right{left:auto;right:0}@media (min-width:544px){.mui-form--inline>.mui-textfield{display:inline-block;margin-bottom:0}.mui-form--inline>.mui-checkbox,.mui-form--inline>.mui-radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.mui-form--inline>.mui-checkbox>label,.mui-form--inline>.mui-radio>label{padding-left:0}.mui-form--inline>.mui-checkbox>label>input[type=checkbox],.mui-form--inline>.mui-radio>label>input[type=radio]{position:relative;margin-left:0}.mui-form--inline>.mui-select{display:inline-block}.mui-form--inline>.mui-btn{margin-bottom:0;margin-top:0;vertical-align:bottom}}.mui-row{margin-left:-15px;margin-right:-15px}.mui-row:after,.mui-row:before{content:" ";display:table}.mui-row:after{clear:both}.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9,.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9,.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9,.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{min-height:1px;padding-left:15px;padding-right:15px}.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{float:left}.mui-col-xs-1{width:8.33333%}.mui-col-xs-2{width:16.66667%}.mui-col-xs-3{width:25%}.mui-col-xs-4{width:33.33333%}.mui-col-xs-5{width:41.66667%}.mui-col-xs-6{width:50%}.mui-col-xs-7{width:58.33333%}.mui-col-xs-8{width:66.66667%}.mui-col-xs-9{width:75%}.mui-col-xs-10{width:83.33333%}.mui-col-xs-11{width:91.66667%}.mui-col-xs-12{width:100%}.mui-col-xs-offset-0{margin-left:0}.mui-col-xs-offset-1{margin-left:8.33333%}.mui-col-xs-offset-2{margin-left:16.66667%}.mui-col-xs-offset-3{margin-left:25%}.mui-col-xs-offset-4{margin-left:33.33333%}.mui-col-xs-offset-5{margin-left:41.66667%}.mui-col-xs-offset-6{margin-left:50%}.mui-col-xs-offset-7{margin-left:58.33333%}.mui-col-xs-offset-8{margin-left:66.66667%}.mui-col-xs-offset-9{margin-left:75%}.mui-col-xs-offset-10{margin-left:83.33333%}.mui-col-xs-offset-11{margin-left:91.66667%}.mui-col-xs-offset-12{margin-left:100%}@media (min-width:544px){.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9{float:left}.mui-col-sm-1{width:8.33333%}.mui-col-sm-2{width:16.66667%}.mui-col-sm-3{width:25%}.mui-col-sm-4{width:33.33333%}.mui-col-sm-5{width:41.66667%}.mui-col-sm-6{width:50%}.mui-col-sm-7{width:58.33333%}.mui-col-sm-8{width:66.66667%}.mui-col-sm-9{width:75%}.mui-col-sm-10{width:83.33333%}.mui-col-sm-11{width:91.66667%}.mui-col-sm-12{width:100%}.mui-col-sm-offset-0{margin-left:0}.mui-col-sm-offset-1{margin-left:8.33333%}.mui-col-sm-offset-2{margin-left:16.66667%}.mui-col-sm-offset-3{margin-left:25%}.mui-col-sm-offset-4{margin-left:33.33333%}.mui-col-sm-offset-5{margin-left:41.66667%}.mui-col-sm-offset-6{margin-left:50%}.mui-col-sm-offset-7{margin-left:58.33333%}.mui-col-sm-offset-8{margin-left:66.66667%}.mui-col-sm-offset-9{margin-left:75%}.mui-col-sm-offset-10{margin-left:83.33333%}.mui-col-sm-offset-11{margin-left:91.66667%}.mui-col-sm-offset-12{margin-left:100%}}@media (min-width:768px){.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9{float:left}.mui-col-md-1{width:8.33333%}.mui-col-md-2{width:16.66667%}.mui-col-md-3{width:25%}.mui-col-md-4{width:33.33333%}.mui-col-md-5{width:41.66667%}.mui-col-md-6{width:50%}.mui-col-md-7{width:58.33333%}.mui-col-md-8{width:66.66667%}.mui-col-md-9{width:75%}.mui-col-md-10{width:83.33333%}.mui-col-md-11{width:91.66667%}.mui-col-md-12{width:100%}.mui-col-md-offset-0{margin-left:0}.mui-col-md-offset-1{margin-left:8.33333%}.mui-col-md-offset-2{margin-left:16.66667%}.mui-col-md-offset-3{margin-left:25%}.mui-col-md-offset-4{margin-left:33.33333%}.mui-col-md-offset-5{margin-left:41.66667%}.mui-col-md-offset-6{margin-left:50%}.mui-col-md-offset-7{margin-left:58.33333%}.mui-col-md-offset-8{margin-left:66.66667%}.mui-col-md-offset-9{margin-left:75%}.mui-col-md-offset-10{margin-left:83.33333%}.mui-col-md-offset-11{margin-left:91.66667%}.mui-col-md-offset-12{margin-left:100%}}@media (min-width:992px){.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9{float:left}.mui-col-lg-1{width:8.33333%}.mui-col-lg-2{width:16.66667%}.mui-col-lg-3{width:25%}.mui-col-lg-4{width:33.33333%}.mui-col-lg-5{width:41.66667%}.mui-col-lg-6{width:50%}.mui-col-lg-7{width:58.33333%}.mui-col-lg-8{width:66.66667%}.mui-col-lg-9{width:75%}.mui-col-lg-10{width:83.33333%}.mui-col-lg-11{width:91.66667%}.mui-col-lg-12{width:100%}.mui-col-lg-offset-0{margin-left:0}.mui-col-lg-offset-1{margin-left:8.33333%}.mui-col-lg-offset-2{margin-left:16.66667%}.mui-col-lg-offset-3{margin-left:25%}.mui-col-lg-offset-4{margin-left:33.33333%}.mui-col-lg-offset-5{margin-left:41.66667%}.mui-col-lg-offset-6{margin-left:50%}.mui-col-lg-offset-7{margin-left:58.33333%}.mui-col-lg-offset-8{margin-left:66.66667%}.mui-col-lg-offset-9{margin-left:75%}.mui-col-lg-offset-10{margin-left:83.33333%}.mui-col-lg-offset-11{margin-left:91.66667%}.mui-col-lg-offset-12{margin-left:100%}}@media (min-width:1200px){.mui-col-xl-1,.mui-col-xl-10,.mui-col-xl-11,.mui-col-xl-12,.mui-col-xl-2,.mui-col-xl-3,.mui-col-xl-4,.mui-col-xl-5,.mui-col-xl-6,.mui-col-xl-7,.mui-col-xl-8,.mui-col-xl-9{float:left}.mui-col-xl-1{width:8.33333%}.mui-col-xl-2{width:16.66667%}.mui-col-xl-3{width:25%}.mui-col-xl-4{width:33.33333%}.mui-col-xl-5{width:41.66667%}.mui-col-xl-6{width:50%}.mui-col-xl-7{width:58.33333%}.mui-col-xl-8{width:66.66667%}.mui-col-xl-9{width:75%}.mui-col-xl-10{width:83.33333%}.mui-col-xl-11{width:91.66667%}.mui-col-xl-12{width:100%}.mui-col-xl-offset-0{margin-left:0}.mui-col-xl-offset-1{margin-left:8.33333%}.mui-col-xl-offset-2{margin-left:16.66667%}.mui-col-xl-offset-3{margin-left:25%}.mui-col-xl-offset-4{margin-left:33.33333%}.mui-col-xl-offset-5{margin-left:41.66667%}.mui-col-xl-offset-6{margin-left:50%}.mui-col-xl-offset-7{margin-left:58.33333%}.mui-col-xl-offset-8{margin-left:66.66667%}.mui-col-xl-offset-9{margin-left:75%}.mui-col-xl-offset-10{margin-left:83.33333%}.mui-col-xl-offset-11{margin-left:91.66667%}.mui-col-xl-offset-12{margin-left:100%}}.mui-panel{padding:15px;margin-bottom:20px;border-radius:0;background-color:#FFF;box-shadow:0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}.mui-panel:after,.mui-panel:before{content:" ";display:table}.mui-panel:after{clear:both}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-panel{box-shadow:0 -1px 2px 0 rgba(0,0,0,.12),-1px 0 2px 0 rgba(0,0,0,.12),0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}}.mui-select{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-select:focus{outline:0}.mui-select:focus>select{height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;height:32px;width:100%;appearance:none;-webkit-appearance:none;-moz-appearance:none;outline:0;border:none;border-bottom:1px solid rgba(0,0,0,.26);border-radius:0;box-shadow:none;background-color:transparent;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iNiIgd2lkdGg9IjEwIj48cG9seWdvbiBwb2ludHM9IjAsMCAxMCwwIDUsNiIgc3R5bGU9ImZpbGw6cmdiYSgwLDAsMCwuMjQpOyIvPjwvc3ZnPg==);background-repeat:no-repeat;background-position:right center;cursor:pointer;color:rgba(0,0,0,.87);font-size:16px;padding:0 25px 0 0}.mui-select>select::-ms-expand{display:none}.mui-select>select:focus{outline:0;height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select:disabled{color:rgba(0,0,0,.38);cursor:not-allowed;background-color:transparent;opacity:1}.mui-select__menu{position:absolute;z-index:2;min-width:100%;overflow-y:auto;padding:8px 0;background-color:#FFF;font-size:16px}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-select__menu{border-left:1px solid rgba(0,0,0,.12);border-top:1px solid rgba(0,0,0,.12)}}.mui-select__menu>div{padding:0 22px;height:42px;line-height:42px;cursor:pointer;white-space:nowrap}.mui-select__menu>div:hover{background-color:#E0E0E0}.mui-select__menu>div.mui--is-selected{background-color:#EEE}th{text-align:left}.mui-table{width:100%;max-width:100%;margin-bottom:20px}.mui-table>tbody>tr>td,.mui-table>tbody>tr>th,.mui-table>tfoot>tr>td,.mui-table>tfoot>tr>th,.mui-table>thead>tr>td,.mui-table>thead>tr>th{padding:10px;line-height:1.429}.mui-table>thead>tr>th{border-bottom:2px solid rgba(0,0,0,.12);font-weight:700}.mui-table>tbody+tbody{border-top:2px solid rgba(0,0,0,.12)}.mui-table.mui-table--bordered>tbody>tr>td{border-bottom:1px solid rgba(0,0,0,.12)}.mui-tabs__bar{list-style:none;padding-left:0;margin-bottom:0;background-color:transparent;white-space:nowrap;overflow-x:auto}.mui-tabs__bar>li{display:inline-block}.mui-tabs__bar>li>a{display:block;white-space:nowrap;text-transform:uppercase;font-weight:500;font-size:14px;color:rgba(0,0,0,.87);cursor:default;height:48px;line-height:48px;padding-left:24px;padding-right:24px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-tabs__bar>li>a:hover{text-decoration:none}.mui-tabs__bar>li.mui--is-active{border-bottom:2px solid #2196F3}.mui-tabs__bar>li.mui--is-active>a{color:#2196F3}.mui-tabs__bar.mui-tabs__bar--justified{display:table;width:100%;table-layout:fixed}.mui-tabs__bar.mui-tabs__bar--justified>li{display:table-cell}.mui-tabs__bar.mui-tabs__bar--justified>li>a{text-align:center;padding-left:0;padding-right:0}.mui-tabs__pane{display:none}.mui-tabs__pane.mui--is-active{display:block}[data-mui-toggle=tab]{animation-duration:.1ms;animation-name:mui-node-inserted}.mui-textfield{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-textfield>label{position:absolute;top:0;display:block;width:100%;color:rgba(0,0,0,.54);font-size:12px;font-weight:400;line-height:15px;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.mui-textfield>textarea{padding-top:5px}.mui-textfield>input,.mui-textfield>textarea{display:block}.mui-textfield>input:focus~label,.mui-textfield>textarea:focus~label{color:#2196F3}.mui-textfield--float-label>label{position:absolute;transform:translate(0,15px);font-size:16px;line-height:32px;color:rgba(0,0,0,.26);text-overflow:clip;cursor:text;pointer-events:none}.mui-textfield--float-label>input:focus~label,.mui-textfield--float-label>textarea:focus~label{transform:translate(0,0);font-size:12px;line-height:15px;text-overflow:ellipsis}.mui-textfield--float-label>input:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>input:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>input:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>textarea:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:rgba(0,0,0,.54);font-size:12px;line-height:15px;transform:translate(0,0);text-overflow:ellipsis}.mui-textfield--wrap-label{display:table;width:100%;padding-top:0}.mui-textfield--wrap-label:not(.mui-textfield--float-label)>label{display:table-header-group;position:static;white-space:normal;overflow-x:visible}.mui-textfield>input,.mui-textfield>textarea{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;background-color:transparent;color:rgba(0,0,0,.87);border:none;border-bottom:1px solid rgba(0,0,0,.26);outline:0;width:100%;font-size:16px;padding:0;box-shadow:none;border-radius:0;background-image:none}.mui-textfield>input:focus,.mui-textfield>textarea:focus{border-color:#2196F3;border-width:2px}.mui-textfield>input:-moz-read-only,.mui-textfield>input:disabled,.mui-textfield>textarea:-moz-read-only,.mui-textfield>textarea:disabled{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input:disabled,.mui-textfield>input:read-only,.mui-textfield>textarea:disabled,.mui-textfield>textarea:read-only{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input::-webkit-input-placeholder,.mui-textfield>textarea::-webkit-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::-moz-placeholder,.mui-textfield>textarea::-moz-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input:-ms-input-placeholder,.mui-textfield>textarea:-ms-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::placeholder,.mui-textfield>textarea::placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input{height:32px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>textarea{min-height:64px}.mui-textfield>textarea[rows]:not([rows="2"]):focus{margin-bottom:-1px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):not(:required),.mui-textfield>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required),.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty){border-color:#F44336;border-width:2px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty){height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required)~label,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):not(:required)~label,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:#F44336}.mui-textfield:not(.mui-textfield--float-label)>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label{color:#F44336}@keyframes mui-node-inserted{from{opacity:.99}to{opacity:1}}.mui--no-transition{transition:none!important}.mui--no-user-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.mui--text-left{text-align:left!important}.mui--text-right{text-align:right!important}.mui--text-center{text-align:center!important}.mui--text-justify{text-align:justify!important}.mui--text-nowrap{white-space:nowrap!important}.mui--align-baseline{vertical-align:baseline!important}.mui--align-top{vertical-align:top!important}.mui--align-middle{vertical-align:middle!important}.mui--align-bottom{vertical-align:bottom!important}.mui--text-dark{color:rgba(0,0,0,.87)}.mui--text-dark-secondary{color:rgba(0,0,0,.54)}.mui--text-dark-hint{color:rgba(0,0,0,.38)}.mui--text-light{color:#FFF}.mui--text-light-secondary{color:rgba(255,255,255,.7)}.mui--text-light-hint{color:rgba(255,255,255,.3)}.mui--text-accent{color:rgba(255,64,129,.87)}.mui--text-accent-secondary{color:rgba(255,64,129,.54)}.mui--text-accent-hint{color:rgba(255,64,129,.38)}.mui--text-black{color:#000}.mui--text-white{color:#FFF}.mui--text-danger{color:#F44336}.mui-list--unstyled{padding-left:0;list-style:none}.mui-list--inline{padding-left:0;list-style:none;margin-left:-5px}.mui-list--inline>li{display:inline-block;padding-left:5px;padding-right:5px}.mui--z1,.mui-dropdown__menu,.mui-select__menu{box-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24)}.mui--z2{box-shadow:0 3px 6px rgba(0,0,0,.16),0 3px 6px rgba(0,0,0,.23)}.mui--z3{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}.mui--z4{box-shadow:0 14px 28px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.22)}.mui--z5{box-shadow:0 19px 38px rgba(0,0,0,.3),0 15px 12px rgba(0,0,0,.22)}.mui--clearfix:after,.mui--clearfix:before{content:" ";display:table}.mui--clearfix:after{clear:both}.mui--pull-right{float:right!important}.mui--pull-left{float:left!important}.mui--hide{display:none!important}.mui--show{display:block!important}.mui--invisible{visibility:hidden}.mui--overflow-hidden{overflow:hidden!important}.mui--overflow-hidden-x{overflow-x:hidden!important}.mui--overflow-hidden-y{overflow-y:hidden!important}.mui--visible-lg-block,.mui--visible-lg-inline,.mui--visible-lg-inline-block,.mui--visible-md-block,.mui--visible-md-inline,.mui--visible-md-inline-block,.mui--visible-sm-block,.mui--visible-sm-inline,.mui--visible-sm-inline-block,.mui--visible-xl-block,.mui--visible-xl-inline,.mui--visible-xl-inline-block,.mui--visible-xs-block,.mui--visible-xs-inline,.mui--visible-xs-inline-block{display:none!important}@media (max-width:543px){.mui-visible-xs{display:block!important}table.mui-visible-xs{display:table}tr.mui-visible-xs{display:table-row!important}td.mui-visible-xs,th.mui-visible-xs{display:table-cell!important}.mui--visible-xs-block{display:block!important}.mui--visible-xs-inline{display:inline!important}.mui--visible-xs-inline-block{display:inline-block!important}}@media (min-width:544px) and (max-width:767px){.mui-visible-sm{display:block!important}table.mui-visible-sm{display:table}tr.mui-visible-sm{display:table-row!important}td.mui-visible-sm,th.mui-visible-sm{display:table-cell!important}.mui--visible-sm-block{display:block!important}.mui--visible-sm-inline{display:inline!important}.mui--visible-sm-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.mui-visible-md{display:block!important}table.mui-visible-md{display:table}tr.mui-visible-md{display:table-row!important}td.mui-visible-md,th.mui-visible-md{display:table-cell!important}.mui--visible-md-block{display:block!important}.mui--visible-md-inline{display:inline!important}.mui--visible-md-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.mui-visible-lg{display:block!important}table.mui-visible-lg{display:table}tr.mui-visible-lg{display:table-row!important}td.mui-visible-lg,th.mui-visible-lg{display:table-cell!important}.mui--visible-lg-block{display:block!important}.mui--visible-lg-inline{display:inline!important}.mui--visible-lg-inline-block{display:inline-block!important}}@media (min-width:1200px){.mui-visible-xl{display:block!important}table.mui-visible-xl{display:table}tr.mui-visible-xl{display:table-row!important}td.mui-visible-xl,th.mui-visible-xl{display:table-cell!important}.mui--visible-xl-block{display:block!important}.mui--visible-xl-inline{display:inline!important}.mui--visible-xl-inline-block{display:inline-block!important}}@media (max-width:543px){.mui--hidden-xs{display:none!important}}@media (min-width:544px) and (max-width:767px){.mui--hidden-sm{display:none!important}}@media (min-width:768px) and (max-width:991px){.mui--hidden-md{display:none!important}}@media (min-width:992px) and (max-width:1199px){.mui--hidden-lg{display:none!important}}@media (min-width:1200px){.mui--hidden-xl{display:none!important}}body.mui-body--scroll-lock{overflow:hidden!important}#mui-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:99999999;background-color:rgba(0,0,0,.2);overflow:auto}.mui-ripple-effect{position:absolute;border-radius:50%;pointer-events:none;opacity:0;animation:mui-ripple-animation 2s}@keyframes mui-ripple-animation{from{transform:scale(1);opacity:.4}to{transform:scale(100);opacity:0}}.mui-btn>.mui-ripple-effect{background-color:#a6a6a6}.mui-btn--primary>.mui-ripple-effect{background-color:#FFF}.mui-btn--dark>.mui-ripple-effect{background-color:#FFF}.mui-btn--danger>.mui-ripple-effect{background-color:#FFF}.mui-btn--accent>.mui-ripple-effect{background-color:#FFF}.mui-btn--flat>.mui-ripple-effect{background-color:#a6a6a6}.mui--text-display4{font-weight:300;font-size:112px;line-height:112px}.mui--text-display3{font-weight:400;font-size:56px;line-height:56px}.mui--text-display2{font-weight:400;font-size:45px;line-height:48px}.mui--text-display1,h1{font-weight:400;font-size:34px;line-height:40px}.mui--text-headline,h2{font-weight:400;font-size:24px;line-height:32px}.mui--text-title,h3{font-weight:400;font-size:20px;line-height:28px}.mui--text-subhead,h4{font-weight:400;font-size:16px;line-height:24px}.mui--text-body2,h5{font-weight:500;font-size:14px;line-height:24px}.mui--text-body1{font-weight:400;font-size:14px;line-height:20px}.mui--text-caption{font-weight:400;font-size:12px;line-height:16px}.mui--text-menu{font-weight:500;font-size:13px;line-height:17px}.mui--text-button{font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase} \ No newline at end of file diff --git a/platforms/android/assets/www/libs/mui/packages/meteor/lib/js/mui.js b/platforms/android/assets/www/libs/mui/packages/meteor/lib/js/mui.js new file mode 100644 index 0000000..1d101ee --- /dev/null +++ b/platforms/android/assets/www/libs/mui/packages/meteor/lib/js/mui.js @@ -0,0 +1,1809 @@ +(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o viewHeight) { + scrollIdeal = (menuPadding + (currentIndex + 1) * optionHeight) - + (-1 * top + wrapperPadding + inputHeight); + scrollMax = numOptions * optionHeight + 2 * menuPadding - height; + scrollTop = Math.min(scrollIdeal, scrollMax); + } + + return { + 'height': height + 'px', + 'top': top + 'px', + 'scrollTop': scrollTop + }; +} + + +/** Define module API */ +module.exports = { + getMenuPositionalCSS: getMenuPositionalCSSFn +}; + +},{}],4:[function(require,module,exports){ +/** + * MUI CSS/JS jqLite module + * @module lib/jqLite + */ + +'use strict'; + + +/** + * Add a class to an element. + * @param {Element} element - The DOM element. + * @param {string} cssClasses - Space separated list of class names. + */ +function jqLiteAddClass(element, cssClasses) { + if (!cssClasses || !element.setAttribute) return; + + var existingClasses = _getExistingClasses(element), + splitClasses = cssClasses.split(' '), + cssClass; + + for (var i=0; i < splitClasses.length; i++) { + cssClass = splitClasses[i].trim(); + if (existingClasses.indexOf(' ' + cssClass + ' ') === -1) { + existingClasses += cssClass + ' '; + } + } + + element.setAttribute('class', existingClasses.trim()); +} + + +/** + * Get or set CSS properties. + * @param {Element} element - The DOM element. + * @param {string} [name] - The property name. + * @param {string} [value] - The property value. + */ +function jqLiteCss(element, name, value) { + // Return full style object + if (name === undefined) { + return getComputedStyle(element); + } + + var nameType = jqLiteType(name); + + // Set multiple values + if (nameType === 'object') { + for (var key in name) element.style[_camelCase(key)] = name[key]; + return; + } + + // Set a single value + if (nameType === 'string' && value !== undefined) { + element.style[_camelCase(name)] = value; + } + + var styleObj = getComputedStyle(element), + isArray = (jqLiteType(name) === 'array'); + + // Read single value + if (!isArray) return _getCurrCssProp(element, name, styleObj); + + // Read multiple values + var outObj = {}, + key; + + for (var i=0; i < name.length; i++) { + key = name[i]; + outObj[key] = _getCurrCssProp(element, key, styleObj); + } + + return outObj; +} + + +/** + * Check if element has class. + * @param {Element} element - The DOM element. + * @param {string} cls - The class name string. + */ +function jqLiteHasClass(element, cls) { + if (!cls || !element.getAttribute) return false; + return (_getExistingClasses(element).indexOf(' ' + cls + ' ') > -1); +} + + +/** + * Return the type of a variable. + * @param {} somevar - The JavaScript variable. + */ +function jqLiteType(somevar) { + // handle undefined + if (somevar === undefined) return 'undefined'; + + // handle others (of type [object ]) + var typeStr = Object.prototype.toString.call(somevar); + if (typeStr.indexOf('[object ') === 0) { + return typeStr.slice(8, -1).toLowerCase(); + } else { + throw new Error("MUI: Could not understand type: " + typeStr); + } +} + + +/** + * Attach an event handler to a DOM element + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOn(element, type, callback, useCapture) { + useCapture = (useCapture === undefined) ? false : useCapture; + + // add to DOM + element.addEventListener(type, callback, useCapture); + + // add to cache + var cache = element._muiEventCache = element._muiEventCache || {}; + cache[type] = cache[type] || []; + cache[type].push([callback, useCapture]); +} + + +/** + * Remove an event handler from a DOM element + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOff(element, type, callback, useCapture) { + useCapture = (useCapture === undefined) ? false : useCapture; + + // remove from cache + var cache = element._muiEventCache = element._muiEventCache || {}, + argsList = cache[type] || [], + args, + i; + + i = argsList.length; + while (i--) { + args = argsList[i]; + + // remove all events if callback is undefined + if (callback === undefined || + (args[0] === callback && args[1] === useCapture)) { + + // remove from cache + argsList.splice(i, 1); + + // remove from DOM + element.removeEventListener(type, args[0], args[1]); + } + } +} + + +/** + * Attach an event hander which will only execute once + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOne(element, type, callback, useCapture) { + jqLiteOn(element, type, function onFn(ev) { + // execute callback + if (callback) callback.apply(this, arguments); + + // remove wrapper + jqLiteOff(element, type, onFn); + }, useCapture); +} + + +/** + * Get or set horizontal scroll position + * @param {Element} element - The DOM element + * @param {number} [value] - The scroll position + */ +function jqLiteScrollLeft(element, value) { + var win = window; + + // get + if (value === undefined) { + if (element === win) { + var docEl = document.documentElement; + return (win.pageXOffset || docEl.scrollLeft) - (docEl.clientLeft || 0); + } else { + return element.scrollLeft; + } + } + + // set + if (element === win) win.scrollTo(value, jqLiteScrollTop(win)); + else element.scrollLeft = value; +} + + +/** + * Get or set vertical scroll position + * @param {Element} element - The DOM element + * @param {number} value - The scroll position + */ +function jqLiteScrollTop(element, value) { + var win = window; + + // get + if (value === undefined) { + if (element === win) { + var docEl = document.documentElement; + return (win.pageYOffset || docEl.scrollTop) - (docEl.clientTop || 0); + } else { + return element.scrollTop; + } + } + + // set + if (element === win) win.scrollTo(jqLiteScrollLeft(win), value); + else element.scrollTop = value; +} + + +/** + * Return object representing top/left offset and element height/width. + * @param {Element} element - The DOM element. + */ +function jqLiteOffset(element) { + var win = window, + rect = element.getBoundingClientRect(), + scrollTop = jqLiteScrollTop(win), + scrollLeft = jqLiteScrollLeft(win); + + return { + top: rect.top + scrollTop, + left: rect.left + scrollLeft, + height: rect.height, + width: rect.width + }; +} + + +/** + * Attach a callback to the DOM ready event listener + * @param {Function} fn - The callback function. + */ +function jqLiteReady(fn) { + var done = false, + top = true, + doc = document, + win = doc.defaultView, + root = doc.documentElement, + add = doc.addEventListener ? 'addEventListener' : 'attachEvent', + rem = doc.addEventListener ? 'removeEventListener' : 'detachEvent', + pre = doc.addEventListener ? '' : 'on'; + + var init = function(e) { + if (e.type == 'readystatechange' && doc.readyState != 'complete') { + return; + } + + (e.type == 'load' ? win : doc)[rem](pre + e.type, init, false); + if (!done && (done = true)) fn.call(win, e.type || e); + }; + + var poll = function() { + try { root.doScroll('left'); } catch(e) { setTimeout(poll, 50); return; } + init('poll'); + }; + + if (doc.readyState == 'complete') { + fn.call(win, 'lazy'); + } else { + if (doc.createEventObject && root.doScroll) { + try { top = !win.frameElement; } catch(e) { } + if (top) poll(); + } + doc[add](pre + 'DOMContentLoaded', init, false); + doc[add](pre + 'readystatechange', init, false); + win[add](pre + 'load', init, false); + } +} + + +/** + * Remove classes from a DOM element + * @param {Element} element - The DOM element. + * @param {string} cssClasses - Space separated list of class names. + */ +function jqLiteRemoveClass(element, cssClasses) { + if (!cssClasses || !element.setAttribute) return; + + var existingClasses = _getExistingClasses(element), + splitClasses = cssClasses.split(' '), + cssClass; + + for (var i=0; i < splitClasses.length; i++) { + cssClass = splitClasses[i].trim(); + while (existingClasses.indexOf(' ' + cssClass + ' ') >= 0) { + existingClasses = existingClasses.replace(' ' + cssClass + ' ', ' '); + } + } + + element.setAttribute('class', existingClasses.trim()); +} + + +// ------------------------------ +// Utilities +// ------------------------------ +var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g, + MOZ_HACK_REGEXP = /^moz([A-Z])/, + ESCAPE_REGEXP = /([.*+?^=!:${}()|\[\]\/\\])/g, + BOOLEAN_ATTRS; + + +BOOLEAN_ATTRS = { + multiple: true, + selected: true, + checked: true, + disabled: true, + readonly: true, + required: true, + open: true +} + + +function _getExistingClasses(element) { + var classes = (element.getAttribute('class') || '').replace(/[\n\t]/g, ''); + return ' ' + classes + ' '; +} + + +function _camelCase(name) { + return name. + replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) { + return offset ? letter.toUpperCase() : letter; + }). + replace(MOZ_HACK_REGEXP, 'Moz$1'); +} + + +function _escapeRegExp(string) { + return string.replace(ESCAPE_REGEXP, "\\$1"); +} + + +function _getCurrCssProp(elem, name, computed) { + var ret; + + // try computed style + ret = computed.getPropertyValue(name); + + // try style attribute (if element is not attached to document) + if (ret === '' && !elem.ownerDocument) ret = elem.style[_camelCase(name)]; + + return ret; +} + + +/** + * Module API + */ +module.exports = { + /** Add classes */ + addClass: jqLiteAddClass, + + /** Get or set CSS properties */ + css: jqLiteCss, + + /** Check for class */ + hasClass: jqLiteHasClass, + + /** Remove event handlers */ + off: jqLiteOff, + + /** Return offset values */ + offset: jqLiteOffset, + + /** Add event handlers */ + on: jqLiteOn, + + /** Add an execute-once event handler */ + one: jqLiteOne, + + /** DOM ready event handler */ + ready: jqLiteReady, + + /** Remove classes */ + removeClass: jqLiteRemoveClass, + + /** Check JavaScript variable instance type */ + type: jqLiteType, + + /** Get or set horizontal scroll position */ + scrollLeft: jqLiteScrollLeft, + + /** Get or set vertical scroll position */ + scrollTop: jqLiteScrollTop +}; + +},{}],5:[function(require,module,exports){ +/** + * MUI CSS/JS utilities module + * @module lib/util + */ + +'use strict'; + + +var config = require('../config'), + jqLite = require('./jqLite'), + nodeInsertedCallbacks = [], + scrollLock = 0, + scrollLockCls = 'mui-body--scroll-lock', + scrollLockPos, + _supportsPointerEvents; + + +/** + * Logging function + */ +function logFn() { + var win = window; + + if (config.debug && typeof win.console !== "undefined") { + try { + win.console.log.apply(win.console, arguments); + } catch (a) { + var e = Array.prototype.slice.call(arguments); + win.console.log(e.join("\n")); + } + } +} + + +/** + * Load CSS text in new stylesheet + * @param {string} cssText - The css text. + */ +function loadStyleFn(cssText) { + var doc = document, + head; + + // copied from jQuery + head = doc.head || + doc.getElementsByTagName('head')[0] || + doc.documentElement; + + var e = doc.createElement('style'); + e.type = 'text/css'; + + if (e.styleSheet) e.styleSheet.cssText = cssText; + else e.appendChild(doc.createTextNode(cssText)); + + // add to document + head.insertBefore(e, head.firstChild); + + return e; +} + + +/** + * Raise an error + * @param {string} msg - The error message. + */ +function raiseErrorFn(msg, useConsole) { + if (useConsole) { + if (typeof console !== 'undefined') console.error('MUI Warning: ' + msg); + } else { + throw new Error('MUI: ' + msg); + } +} + + +/** + * Register callbacks on muiNodeInserted event + * @param {function} callbackFn - The callback function. + */ +function onNodeInsertedFn(callbackFn) { + nodeInsertedCallbacks.push(callbackFn); + + // initalize listeners + if (nodeInsertedCallbacks._initialized === undefined) { + var doc = document; + + jqLite.on(doc, 'animationstart', animationHandlerFn); + jqLite.on(doc, 'mozAnimationStart', animationHandlerFn); + jqLite.on(doc, 'webkitAnimationStart', animationHandlerFn); + + nodeInsertedCallbacks._initialized = true; + } +} + + +/** + * Execute muiNodeInserted callbacks + * @param {Event} ev - The DOM event. + */ +function animationHandlerFn(ev) { + // check animation name + if (ev.animationName !== 'mui-node-inserted') return; + + var el = ev.target; + + // iterate through callbacks + for (var i=nodeInsertedCallbacks.length - 1; i >= 0; i--) { + nodeInsertedCallbacks[i](el); + } +} + + +/** + * Convert Classname object, with class as key and true/false as value, to an + * class string. + * @param {Object} classes The classes + * @return {String} class string + */ +function classNamesFn(classes) { + var cs = ''; + for (var i in classes) { + cs += (classes[i]) ? i + ' ' : ''; + } + return cs.trim(); +} + + +/** + * Check if client supports pointer events. + */ +function supportsPointerEventsFn() { + // check cache + if (_supportsPointerEvents !== undefined) return _supportsPointerEvents; + + var element = document.createElement('x'); + element.style.cssText = 'pointer-events:auto'; + _supportsPointerEvents = (element.style.pointerEvents === 'auto'); + return _supportsPointerEvents; +} + + +/** + * Create callback closure. + * @param {Object} instance - The object instance. + * @param {String} funcName - The name of the callback function. + */ +function callbackFn(instance, funcName) { + return function() {instance[funcName].apply(instance, arguments);}; +} + + +/** + * Dispatch event. + * @param {Element} element - The DOM element. + * @param {String} eventType - The event type. + * @param {Boolean} bubbles=true - If true, event bubbles. + * @param {Boolean} cancelable=true = If true, event is cancelable + * @param {Object} [data] - Data to add to event object + */ +function dispatchEventFn(element, eventType, bubbles, cancelable, data) { + var ev = document.createEvent('HTMLEvents'), + bubbles = (bubbles !== undefined) ? bubbles : true, + cancelable = (cancelable !== undefined) ? cancelable : true, + k; + + ev.initEvent(eventType, bubbles, cancelable); + + // add data to event object + if (data) for (k in data) ev[k] = data[k]; + + // dispatch + if (element) element.dispatchEvent(ev); + + return ev; +} + + +/** + * Turn on window scroll lock. + */ +function enableScrollLockFn() { + // increment counter + scrollLock += 1 + + // add lock + if (scrollLock === 1) { + var win = window, + doc = document; + + scrollLockPos = {left: jqLite.scrollLeft(win), top: jqLite.scrollTop(win)}; + jqLite.addClass(doc.body, scrollLockCls); + win.scrollTo(scrollLockPos.left, scrollLockPos.top); + } +} + + +/** + * Turn off window scroll lock. + */ +function disableScrollLockFn() { + // ignore + if (scrollLock === 0) return; + + // decrement counter + scrollLock -= 1 + + // remove lock + if (scrollLock === 0) { + var win = window, + doc = document; + + jqLite.removeClass(doc.body, scrollLockCls); + win.scrollTo(scrollLockPos.left, scrollLockPos.top); + } +} + + +/** + * Define the module API + */ +module.exports = { + /** Create callback closures */ + callback: callbackFn, + + /** Classnames object to string */ + classNames: classNamesFn, + + /** Disable scroll lock */ + disableScrollLock: disableScrollLockFn, + + /** Dispatch event */ + dispatchEvent: dispatchEventFn, + + /** Enable scroll lock */ + enableScrollLock: enableScrollLockFn, + + /** Log messages to the console when debug is turned on */ + log: logFn, + + /** Load CSS text as new stylesheet */ + loadStyle: loadStyleFn, + + /** Register muiNodeInserted handler */ + onNodeInserted: onNodeInsertedFn, + + /** Raise MUI error */ + raiseError: raiseErrorFn, + + /** Support Pointer Events check */ + supportsPointerEvents: supportsPointerEventsFn +}; + +},{"../config":2,"./jqLite":4}],6:[function(require,module,exports){ +/** + * MUI CSS/JS dropdown module + * @module dropdowns + */ + +'use strict'; + + +var jqLite = require('./lib/jqLite'), + util = require('./lib/util'), + attrKey = 'data-mui-toggle', + attrSelector = '[data-mui-toggle="dropdown"]', + openClass = 'mui--is-open', + menuClass = 'mui-dropdown__menu'; + + +/** + * Initialize toggle element. + * @param {Element} toggleEl - The toggle element. + */ +function initialize(toggleEl) { + // check flag + if (toggleEl._muiDropdown === true) return; + else toggleEl._muiDropdown = true; + + // use type "button" to prevent form submission by default + if (!toggleEl.hasAttribute('type')) toggleEl.type = 'button'; + + // attach click handler + jqLite.on(toggleEl, 'click', clickHandler); +} + + +/** + * Handle click events on dropdown toggle element. + * @param {Event} ev - The DOM event + */ +function clickHandler(ev) { + // only left clicks + if (ev.button !== 0) return; + + var toggleEl = this; + + // exit if toggle button is disabled + if (toggleEl.getAttribute('disabled') !== null) return; + + // toggle dropdown + toggleDropdown(toggleEl); +} + + +/** + * Toggle the dropdown. + * @param {Element} toggleEl - The dropdown toggle element. + */ +function toggleDropdown(toggleEl) { + var wrapperEl = toggleEl.parentNode, + menuEl = toggleEl.nextElementSibling, + doc = wrapperEl.ownerDocument; + + // exit if no menu element + if (!menuEl || !jqLite.hasClass(menuEl, menuClass)) { + return util.raiseError('Dropdown menu element not found'); + } + + // method to close dropdown + function closeDropdownFn() { + jqLite.removeClass(menuEl, openClass); + + // remove event handlers + jqLite.off(doc, 'click', closeDropdownFn); + } + + // method to open dropdown + function openDropdownFn() { + // position menu element below toggle button + var wrapperRect = wrapperEl.getBoundingClientRect(), + toggleRect = toggleEl.getBoundingClientRect(); + + var top = toggleRect.top - wrapperRect.top + toggleRect.height; + jqLite.css(menuEl, 'top', top + 'px'); + + // add open class to wrapper + jqLite.addClass(menuEl, openClass); + + // close dropdown when user clicks outside of menu + setTimeout(function() {jqLite.on(doc, 'click', closeDropdownFn);}, 0); + } + + // toggle dropdown + if (jqLite.hasClass(menuEl, openClass)) closeDropdownFn(); + else openDropdownFn(); +} + + +/** Define module API */ +module.exports = { + /** Initialize module listeners */ + initListeners: function() { + var doc = document; + + // markup elements available when method is called + var elList = doc.querySelectorAll(attrSelector); + for (var i=elList.length - 1; i >= 0; i--) initialize(elList[i]); + + // listen for new elements + util.onNodeInserted(function(el) { + if (el.getAttribute(attrKey) === 'dropdown') initialize(el); + }); + } +}; + +},{"./lib/jqLite":4,"./lib/util":5}],7:[function(require,module,exports){ +module.exports=require(4) +},{}],8:[function(require,module,exports){ +/** + * MUI CSS/JS overlay module + * @module overlay + */ + +'use strict'; + + +var util = require('./lib/util'), + jqLite = require('./lib/jqLite'), + overlayId = 'mui-overlay', + bodyClass = 'mui--overflow-hidden', + iosRegex = /(iPad|iPhone|iPod)/g; + + +/** + * Turn overlay on/off. + * @param {string} action - Turn overlay "on"/"off". + * @param {object} [options] + * @config {boolean} [keyboard] - If true, close when escape key is pressed. + * @config {boolean} [static] - If false, close when backdrop is clicked. + * @config {Function} [onclose] - Callback function to execute on close + * @param {Element} [childElement] - Child element to add to overlay. + */ +function overlayFn(action) { + var overlayEl; + + if (action === 'on') { + // extract arguments + var arg, options, childElement; + + // pull options and childElement from arguments + for (var i=arguments.length - 1; i > 0; i--) { + arg = arguments[i]; + + if (jqLite.type(arg) === 'object') options = arg; + if (arg instanceof Element && arg.nodeType === 1) childElement = arg; + } + + // option defaults + options = options || {}; + if (options.keyboard === undefined) options.keyboard = true; + if (options.static === undefined) options.static = false; + + // execute method + overlayEl = overlayOn(options, childElement); + + } else if (action === 'off') { + overlayEl = overlayOff(); + + } else { + // raise error + util.raiseError("Expecting 'on' or 'off'"); + } + + return overlayEl; +} + + +/** + * Turn on overlay. + * @param {object} options - Overlay options. + * @param {Element} childElement - The child element. + */ +function overlayOn(options, childElement) { + var bodyEl = document.body, + overlayEl = document.getElementById(overlayId); + + // add overlay + util.enableScrollLock(); + //jqLite.addClass(bodyEl, bodyClass); + + if (!overlayEl) { + // create overlayEl + overlayEl = document.createElement('div'); + overlayEl.setAttribute('id', overlayId); + + // add child element + if (childElement) overlayEl.appendChild(childElement); + + bodyEl.appendChild(overlayEl); + + } else { + // remove existing children + while (overlayEl.firstChild) overlayEl.removeChild(overlayEl.firstChild); + + // add child element + if (childElement) overlayEl.appendChild(childElement); + } + + // iOS bugfix + if (iosRegex.test(navigator.userAgent)) { + jqLite.css(overlayEl, 'cursor', 'pointer'); + } + + // handle options + if (options.keyboard) addKeyupHandler(); + else removeKeyupHandler(); + + if (options.static) removeClickHandler(overlayEl); + else addClickHandler(overlayEl); + + // attach options + overlayEl.muiOptions = options; + + return overlayEl; +} + + +/** + * Turn off overlay. + */ +function overlayOff() { + var overlayEl = document.getElementById(overlayId), + callbackFn; + + if (overlayEl) { + // remove children + while (overlayEl.firstChild) overlayEl.removeChild(overlayEl.firstChild); + + // remove overlay element + overlayEl.parentNode.removeChild(overlayEl); + + // callback reference + callbackFn = overlayEl.muiOptions.onclose; + + // remove click handler + removeClickHandler(overlayEl); + } + + util.disableScrollLock(); + + // remove keyup handler + removeKeyupHandler(); + + // execute callback + if (callbackFn) callbackFn(); + + return overlayEl; +} + + +/** + * Add keyup handler. + */ +function addKeyupHandler() { + jqLite.on(document, 'keyup', onKeyup); +} + + +/** + * Remove keyup handler. + */ +function removeKeyupHandler() { + jqLite.off(document, 'keyup', onKeyup); +} + + +/** + * Teardown overlay when escape key is pressed. + */ +function onKeyup(ev) { + if (ev.keyCode === 27) overlayOff(); +} + + +/** + * Add click handler. + */ +function addClickHandler(overlayEl) { + jqLite.on(overlayEl, 'click', onClick); +} + + +/** + * Remove click handler. + */ +function removeClickHandler(overlayEl) { + jqLite.off(overlayEl, 'click', onClick); +} + + +/** + * Teardown overlay when backdrop is clicked. + */ +function onClick(ev) { + if (ev.target.id === overlayId) overlayOff(); +} + + +/** Define module API */ +module.exports = overlayFn; + +},{"./lib/jqLite":4,"./lib/util":5}],9:[function(require,module,exports){ +/** + * MUI CSS/JS ripple module + * @module ripple + */ + +'use strict'; + + +var jqLite = require('./lib/jqLite'), + util = require('./lib/util'), + btnClass = 'mui-btn', + btnFABClass = 'mui-btn--fab', + rippleClass = 'mui-ripple-effect', + animationName = 'mui-btn-inserted'; + + +/** + * Add ripple effects to button element. + * @param {Element} buttonEl - The button element. + */ +function initialize(buttonEl) { + // check flag + if (buttonEl._muiRipple === true) return; + else buttonEl._muiRipple = true; + + // exit if element is INPUT (doesn't support absolute positioned children) + if (buttonEl.tagName === 'INPUT') return; + + // attach event handler + jqLite.on(buttonEl, 'touchstart', eventHandler); + jqLite.on(buttonEl, 'mousedown', eventHandler); +} + + +/** + * Event handler + * @param {Event} ev - The DOM event + */ +function eventHandler(ev) { + // only left clicks + if (ev.button !== 0) return; + + var buttonEl = this; + + // exit if button is disabled + if (buttonEl.disabled === true) return; + + // de-dupe touchstart and mousedown with 100msec flag + if (buttonEl.touchFlag === true) { + return; + } else { + buttonEl.touchFlag = true; + setTimeout(function() { + buttonEl.touchFlag = false; + }, 100); + } + + var rippleEl = document.createElement('div'); + rippleEl.className = rippleClass; + + var offset = jqLite.offset(buttonEl), + xPos = ev.pageX - offset.left, + yPos = ev.pageY - offset.top, + diameter, + radius; + + // get height + if (jqLite.hasClass(buttonEl, btnFABClass)) diameter = offset.height / 2; + else diameter = offset.height; + + radius = diameter / 2; + + jqLite.css(rippleEl, { + height: diameter + 'px', + width: diameter + 'px', + top: yPos - radius + 'px', + left: xPos - radius + 'px' + }); + + buttonEl.appendChild(rippleEl); + + window.setTimeout(function() { + var parentNode = rippleEl.parentNode; + if (parentNode) parentNode.removeChild(rippleEl); + }, 2000); +} + + +/** Define module API */ +module.exports = { + /** Initialize module listeners */ + initListeners: function() { + var doc = document; + + // markup elements available when method is called + var elList = doc.getElementsByClassName(btnClass); + for (var i=elList.length - 1; i >= 0; i--) initialize(elList[i]); + + // listen for new elements + util.onNodeInserted(function(el) { + if (jqLite.hasClass(el, btnClass)) initialize(el); + }); + } +}; + +},{"./lib/jqLite":4,"./lib/util":5}],10:[function(require,module,exports){ +/** + * MUI CSS/JS select module + * @module forms/select + */ + +'use strict'; + + +var jqLite = require('./lib/jqLite'), + util = require('./lib/util'), + formlib = require('./lib/forms'), + wrapperClass = 'mui-select', + cssSelector = '.mui-select > select', + menuClass = 'mui-select__menu', + selectedClass = 'mui--is-selected', + doc = document, + win = window; + + +/** + * Initialize select element. + * @param {Element} selectEl - The select element. + */ +function initialize(selectEl) { + // check flag + if (selectEl._muiSelect === true) return; + else selectEl._muiSelect = true; + + // use default behavior on touch devices + if ('ontouchstart' in doc.documentElement) return; + + // initialize element + new Select(selectEl); +} + + +/** + * Creates a new Select object + * @class + */ +function Select(selectEl) { + // instance variables + this.selectEl = selectEl; + this.wrapperEl = selectEl.parentNode; + this.useDefault = false; // currently unused but let's keep just in case + + // attach event handlers + jqLite.on(selectEl, 'mousedown', util.callback(this, 'mousedownHandler')); + jqLite.on(selectEl, 'focus', util.callback(this, 'focusHandler')); + jqLite.on(selectEl, 'click', util.callback(this, 'clickHandler')); + + // make wrapper focusable and fix firefox bug + this.wrapperEl.tabIndex = -1; + var callbackFn = util.callback(this, 'wrapperFocusHandler'); + jqLite.on(this.wrapperEl, 'focus', callbackFn); +} + + +/** + * Disable default dropdown on mousedown. + * @param {Event} ev - The DOM event + */ +Select.prototype.mousedownHandler = function(ev) { + if (ev.button !== 0 || this.useDefault === true) return; + ev.preventDefault(); +} + + +/** + * Handle focus event on select element. + * @param {Event} ev - The DOM event + */ +Select.prototype.focusHandler = function(ev) { + // check flag + if (this.useDefault === true) return; + + var selectEl = this.selectEl, + wrapperEl = this.wrapperEl, + origIndex = selectEl.tabIndex, + keydownFn = util.callback(this, 'keydownHandler'); + + // attach keydown handler + jqLite.on(doc, 'keydown', keydownFn); + + // disable tabfocus once + selectEl.tabIndex = -1; + jqLite.one(wrapperEl, 'blur', function() { + selectEl.tabIndex = origIndex; + jqLite.off(doc, 'keydown', keydownFn); + }); + + // defer focus to parent + wrapperEl.focus(); +} + + +/** + * Handle keydown events on doc + **/ +Select.prototype.keydownHandler = function(ev) { + var keyCode = ev.keyCode; + + // spacebar, down, up + if (keyCode === 32 || keyCode === 38 || keyCode === 40) { + // prevent win scroll + ev.preventDefault(); + + if (this.selectEl.disabled !== true) this.renderMenu(); + } +} + + +/** + * Handle focus event on wrapper element. + */ +Select.prototype.wrapperFocusHandler = function() { + // firefox bugfix + if (this.selectEl.disabled) return this.wrapperEl.blur(); +} + + +/** + * Handle click events on select element. + * @param {Event} ev - The DOM event + */ +Select.prototype.clickHandler = function(ev) { + // only left clicks + if (ev.button !== 0) return; + this.renderMenu(); +} + + +/** + * Render options dropdown. + */ +Select.prototype.renderMenu = function() { + // check and reset flag + if (this.useDefault === true) return this.useDefault = false; + + new Menu(this.wrapperEl, this.selectEl); +} + + +/** + * Creates a new Menu + * @class + */ +function Menu(wrapperEl, selectEl) { + // add scroll lock + util.enableScrollLock(); + + // instance variables + this.origIndex = null; + this.currentIndex = null; + this.selectEl = selectEl; + this.menuEl = this._createMenuEl(wrapperEl, selectEl); + this.clickCallbackFn = util.callback(this, 'clickHandler'); + this.keydownCallbackFn = util.callback(this, 'keydownHandler'); + this.destroyCallbackFn = util.callback(this, 'destroy'); + + // add to DOM + wrapperEl.appendChild(this.menuEl); + jqLite.scrollTop(this.menuEl, this.menuEl._muiScrollTop); + + // blur active element + setTimeout(function() { + // ie10 bugfix + if (doc.activeElement.nodeName.toLowerCase() !== "body") { + doc.activeElement.blur(); + } + }, 0); + + // attach event handlers + jqLite.on(this.menuEl, 'click', this.clickCallbackFn); + jqLite.on(doc, 'keydown', this.keydownCallbackFn); + jqLite.on(win, 'resize', this.destroyCallbackFn); + + // attach event handler after current event loop exits + var fn = this.destroyCallbackFn; + setTimeout(function() {jqLite.on(doc, 'click', fn);}, 0); +} + + +/** + * Create menu element + * @param {Element} selectEl - The select element + */ +Menu.prototype._createMenuEl = function(wrapperEl, selectEl) { + var menuEl = doc.createElement('div'), + optionEls = selectEl.children, + numOptions = optionEls.length, + selectedPos = 0, + optionEl, + itemEl, + i; + + menuEl.className = menuClass; + + // add options + for (i=0; i < numOptions; i++) { + optionEl = optionEls[i]; + + itemEl = doc.createElement('div'); + itemEl.textContent = optionEl.textContent; + itemEl._muiPos = i; + + if (optionEl.selected) { + itemEl.setAttribute('class', selectedClass); + selectedPos = i; + } + + menuEl.appendChild(itemEl); + } + + // save indices + this.origIndex = selectedPos; + this.currentIndex = selectedPos; + + // set position + var props = formlib.getMenuPositionalCSS( + wrapperEl, + numOptions, + selectedPos + ); + + jqLite.css(menuEl, props); + menuEl._muiScrollTop = props.scrollTop; + + return menuEl; +} + + +/** + * Handle keydown events on doc element. + * @param {Event} ev - The DOM event + */ +Menu.prototype.keydownHandler = function(ev) { + var keyCode = ev.keyCode; + + // tab + if (keyCode === 9) return this.destroy(); + + // escape | up | down | enter + if (keyCode === 27 || keyCode === 40 || keyCode === 38 || keyCode === 13) { + ev.preventDefault(); + } + + if (keyCode === 27) { + this.destroy(); + } else if (keyCode === 40) { + this.increment(); + } else if (keyCode === 38) { + this.decrement(); + } else if (keyCode === 13) { + this.selectCurrent(); + this.destroy(); + } +} + + +/** + * Handle click events on menu element. + * @param {Event} ev - The DOM event + */ +Menu.prototype.clickHandler = function(ev) { + // don't allow events to bubble + ev.stopPropagation(); + + var pos = ev.target._muiPos; + + // ignore clicks on non-items + if (pos === undefined) return; + + // select option + this.currentIndex = pos; + this.selectCurrent(); + + // destroy menu + this.destroy(); +} + + +/** + * Increment selected item + */ +Menu.prototype.increment = function() { + if (this.currentIndex === this.menuEl.children.length - 1) return; + + var optionEls = this.menuEl.children; + + jqLite.removeClass(optionEls[this.currentIndex], selectedClass); + this.currentIndex += 1; + jqLite.addClass(optionEls[this.currentIndex], selectedClass); +} + + +/** + * Decrement selected item + */ +Menu.prototype.decrement = function() { + if (this.currentIndex === 0) return; + + var optionEls = this.menuEl.children; + + jqLite.removeClass(optionEls[this.currentIndex], selectedClass); + this.currentIndex -= 1; + jqLite.addClass(optionEls[this.currentIndex], selectedClass); +} + + +/** + * Select current item + */ +Menu.prototype.selectCurrent = function() { + if (this.currentIndex !== this.origIndex) { + var optionEls = this.selectEl.children; + optionEls[this.origIndex].selected = false; + optionEls[this.currentIndex].selected = true; + + // trigger change event + util.dispatchEvent(this.selectEl, 'change'); + } +} + + +/** + * Destroy menu and detach event handlers + */ +Menu.prototype.destroy = function() { + // remove element and focus element + var parentNode = this.menuEl.parentNode; + if (parentNode) parentNode.removeChild(this.menuEl); + + this.selectEl.focus(); + + // remove scroll lock + util.disableScrollLock(); + + // remove event handlers + jqLite.off(this.menuEl, 'click', this.clickCallbackFn); + jqLite.off(doc, 'keydown', this.keydownCallbackFn); + jqLite.off(doc, 'click', this.destroyCallbackFn); + jqLite.off(win, 'resize', this.destroyCallbackFn); +} + + +/** Define module API */ +module.exports = { + /** Initialize module listeners */ + initListeners: function() { + // markup elements available when method is called + var elList = doc.querySelectorAll(cssSelector); + for (var i=elList.length - 1; i >= 0; i--) initialize(elList[i]); + + // listen for new elements + util.onNodeInserted(function(el) { + if (el.tagName === 'SELECT' && + jqLite.hasClass(el.parentNode, wrapperClass)) { + initialize(el); + } + }); + } +}; + +},{"./lib/forms":3,"./lib/jqLite":4,"./lib/util":5}],11:[function(require,module,exports){ +/** + * MUI CSS/JS tabs module + * @module tabs + */ + +'use strict'; + + +var jqLite = require('./lib/jqLite'), + util = require('./lib/util'), + attrKey = 'data-mui-toggle', + attrSelector = '[' + attrKey + '="tab"]', + controlsAttrKey = 'data-mui-controls', + activeClass = 'mui--is-active', + showstartKey = 'mui.tabs.showstart', + showendKey = 'mui.tabs.showend', + hidestartKey = 'mui.tabs.hidestart', + hideendKey = 'mui.tabs.hideend'; + + +/** + * Initialize the toggle element + * @param {Element} toggleEl - The toggle element. + */ +function initialize(toggleEl) { + // check flag + if (toggleEl._muiTabs === true) return; + else toggleEl._muiTabs = true; + + // attach click handler + jqLite.on(toggleEl, 'click', clickHandler); +} + + +/** + * Handle clicks on the toggle element. + * @param {Event} ev - The DOM event. + */ +function clickHandler(ev) { + // only left clicks + if (ev.button !== 0) return; + + var toggleEl = this; + + // exit if toggle element is disabled + if (toggleEl.getAttribute('disabled') !== null) return; + + activateTab(toggleEl); +} + + +/** + * Activate the tab controlled by the toggle element. + * @param {Element} toggleEl - The toggle element. + */ +function activateTab(currToggleEl) { + var currTabEl = currToggleEl.parentNode, + currPaneId = currToggleEl.getAttribute(controlsAttrKey), + currPaneEl = document.getElementById(currPaneId), + prevTabEl, + prevPaneEl, + prevPaneId, + prevToggleEl, + currData, + prevData, + ev1, + ev2, + cssSelector; + + // exit if already active + if (jqLite.hasClass(currTabEl, activeClass)) return; + + // raise error if pane doesn't exist + if (!currPaneEl) util.raiseError('Tab pane "' + currPaneId + '" not found'); + + // get previous pane + prevPaneEl = getActiveSibling(currPaneEl); + prevPaneId = prevPaneEl.id; + + // get previous toggle and tab elements + cssSelector = '[' + controlsAttrKey + '="' + prevPaneId + '"]'; + prevToggleEl = document.querySelectorAll(cssSelector)[0]; + prevTabEl = prevToggleEl.parentNode; + + // define event data + currData = {paneId: currPaneId, relatedPaneId: prevPaneId}; + prevData = {paneId: prevPaneId, relatedPaneId: currPaneId}; + + // dispatch 'hidestart', 'showstart' events + ev1 = util.dispatchEvent(prevToggleEl, hidestartKey, true, true, prevData); + ev2 = util.dispatchEvent(currToggleEl, showstartKey, true, true, currData); + + // let events bubble + setTimeout(function() { + // exit if either event was canceled + if (ev1.defaultPrevented || ev2.defaultPrevented) return; + + // de-activate previous + if (prevTabEl) jqLite.removeClass(prevTabEl, activeClass); + if (prevPaneEl) jqLite.removeClass(prevPaneEl, activeClass); + + // activate current + jqLite.addClass(currTabEl, activeClass); + jqLite.addClass(currPaneEl, activeClass); + + // dispatch 'hideend', 'showend' events + util.dispatchEvent(prevToggleEl, hideendKey, true, false, prevData); + util.dispatchEvent(currToggleEl, showendKey, true, false, currData); + }, 0); +} + + +/** + * Get previous active sibling. + * @param {Element} el - The anchor element. + */ +function getActiveSibling(el) { + var elList = el.parentNode.children, + q = elList.length, + activeEl = null, + tmpEl; + + while (q-- && !activeEl) { + tmpEl = elList[q]; + if (tmpEl !== el && jqLite.hasClass(tmpEl, activeClass)) activeEl = tmpEl + } + + return activeEl; +} + + +/** Define module API */ +module.exports = { + /** Initialize module listeners */ + initListeners: function() { + // markup elements available when method is called + var elList = document.querySelectorAll(attrSelector); + for (var i=elList.length - 1; i >= 0; i--) initialize(elList[i]); + + // TODO: listen for new elements + util.onNodeInserted(function(el) { + if (el.getAttribute(attrKey) === 'tab') initialize(el); + }); + }, + + /** External API */ + api: { + activate: function(paneId) { + var cssSelector = '[' + controlsAttrKey + '=' + paneId + ']', + toggleEl = document.querySelectorAll(cssSelector); + + if (!toggleEl.length) { + util.raiseError('Tab control for pane "' + paneId + '" not found'); + } + + activateTab(toggleEl[0]); + } + } +}; + +},{"./lib/jqLite":4,"./lib/util":5}],12:[function(require,module,exports){ +/** + * MUI CSS/JS form-control module + * @module forms/form-control + */ + +'use strict'; + + +var jqLite = require('./lib/jqLite'), + util = require('./lib/util'), + cssSelector = '.mui-textfield > input, .mui-textfield > textarea', + emptyClass = 'mui--is-empty', + notEmptyClass = 'mui--is-not-empty', + dirtyClass = 'mui--is-dirty', + floatingLabelClass = 'mui-textfield--float-label'; + + +/** + * Initialize input element. + * @param {Element} inputEl - The input element. + */ +function initialize(inputEl) { + // check flag + if (inputEl._muiTextfield === true) return; + else inputEl._muiTextfield = true; + + if (inputEl.value.length) jqLite.addClass(inputEl, notEmptyClass); + else jqLite.addClass(inputEl, emptyClass); + + jqLite.on(inputEl, 'input', inputHandler); + jqLite.on(inputEl, 'change', inputHandler); + + // add dirty class on focus + jqLite.on(inputEl, 'focus', function(){jqLite.addClass(this, dirtyClass);}); +} + + +/** + * Handle input events. + */ +function inputHandler() { + var inputEl = this; + + if (inputEl.value.length) { + jqLite.removeClass(inputEl, emptyClass); + jqLite.addClass(inputEl, notEmptyClass); + } else { + jqLite.removeClass(inputEl, notEmptyClass); + jqLite.addClass(inputEl, emptyClass) + } + + jqLite.addClass(inputEl, dirtyClass); +} + + +/** Define module API */ +module.exports = { + /** Initialize input elements */ + initialize: initialize, + + /** Initialize module listeners */ + initListeners: function() { + var doc = document; + + // markup elements available when method is called + var elList = doc.querySelectorAll(cssSelector); + for (var i=elList.length - 1; i >= 0; i--) initialize(elList[i]); + + // listen for new elements + util.onNodeInserted(function(el) { + if (el.tagName === 'INPUT' || el.tagName === 'TEXTAREA') initialize(el); + }); + + // add transition css for floating labels + setTimeout(function() { + var css = '.mui-textfield.mui-textfield--float-label > label {' + [ + '-webkit-transition', + '-moz-transition', + '-o-transition', + 'transition', + '' + ].join(':all .15s ease-out;') + '}'; + + util.loadStyle(css); + }, 150); + + // pointer-events shim for floating labels + if (util.supportsPointerEvents() === false) { + jqLite.on(document, 'click', function(ev) { + var targetEl = ev.target; + + if (targetEl.tagName === 'LABEL' && + jqLite.hasClass(targetEl.parentNode, floatingLabelClass)) { + var inputEl = targetEl.previousElementSibling; + if (inputEl) inputEl.focus(); + } + }); + } + } +}; + +},{"./lib/jqLite":4,"./lib/util":5}]},{},[1]) \ No newline at end of file diff --git a/platforms/android/assets/www/libs/mui/packages/meteor/lib/js/mui.min.js b/platforms/android/assets/www/libs/mui/packages/meteor/lib/js/mui.min.js new file mode 100644 index 0000000..833d99c --- /dev/null +++ b/platforms/android/assets/www/libs/mui/packages/meteor/lib/js/mui.min.js @@ -0,0 +1 @@ +!function e(t,n,i){function o(l,s){if(!n[l]){if(!t[l]){var a="function"==typeof require&&require;if(!s&&a)return a(l,!0);if(r)return r(l,!0);throw new Error("Cannot find module '"+l+"'")}var c=n[l]={exports:{}};t[l][0].call(c.exports,function(e){var n=t[l][1][e];return o(n?n:e)},c,c.exports,e,t,n,i)}return n[l].exports}for(var r="function"==typeof require&&require,l=0;ld&&(h=s+(n+1)*l-(-1*i+o+r),m=t*l+2*s-p,v=Math.min(h,m)),{height:p+"px",top:i+"px",scrollTop:v}}var o=15,r=32,l=42,s=8;t.exports={getMenuPositionalCSS:i}},{}],4:[function(e,t,n){"use strict";function i(e,t){if(t&&e.setAttribute){for(var n,i=m(e),o=t.split(" "),r=0;r-1:!1}function l(e){if(void 0===e)return"undefined";var t=Object.prototype.toString.call(e);if(0===t.indexOf("[object "))return t.slice(8,-1).toLowerCase();throw new Error("MUI: Could not understand type: "+t)}function s(e,t,n,i){i=void 0===i?!1:i,e.addEventListener(t,n,i);var o=e._muiEventCache=e._muiEventCache||{};o[t]=o[t]||[],o[t].push([n,i])}function a(e,t,n,i){i=void 0===i?!1:i;var o,r,l=e._muiEventCache=e._muiEventCache||{},s=l[t]||[];for(r=s.length;r--;)o=s[r],(void 0===n||o[0]===n&&o[1]===i)&&(s.splice(r,1),e.removeEventListener(t,o[0],o[1]))}function c(e,t,n,i){s(e,t,function o(i){n&&n.apply(this,arguments),a(e,t,o)},i)}function u(e,t){var n=window;if(void 0===t){if(e===n){var i=document.documentElement;return(n.pageXOffset||i.scrollLeft)-(i.clientLeft||0)}return e.scrollLeft}e===n?n.scrollTo(t,d(n)):e.scrollLeft=t}function d(e,t){var n=window;if(void 0===t){if(e===n){var i=document.documentElement;return(n.pageYOffset||i.scrollTop)-(i.clientTop||0)}return e.scrollTop}e===n?n.scrollTo(u(n),t):e.scrollTop=t}function f(e){var t=window,n=e.getBoundingClientRect(),i=d(t),o=u(t);return{top:n.top+i,left:n.left+o,height:n.height,width:n.width}}function p(e){var t=!1,n=!0,i=document,o=i.defaultView,r=i.documentElement,l=i.addEventListener?"addEventListener":"attachEvent",s=i.addEventListener?"removeEventListener":"detachEvent",a=i.addEventListener?"":"on",c=function(n){"readystatechange"==n.type&&"complete"!=i.readyState||(("load"==n.type?o:i)[s](a+n.type,c,!1),!t&&(t=!0)&&e.call(o,n.type||n))},u=function(){try{r.doScroll("left")}catch(e){return void setTimeout(u,50)}c("poll")};if("complete"==i.readyState)e.call(o,"lazy");else{if(i.createEventObject&&r.doScroll){try{n=!o.frameElement}catch(d){}n&&u()}i[l](a+"DOMContentLoaded",c,!1),i[l](a+"readystatechange",c,!1),o[l](a+"load",c,!1)}}function h(e,t){if(t&&e.setAttribute){for(var n,i=m(e),o=t.split(" "),r=0;r=0;)i=i.replace(" "+n+" "," ");e.setAttribute("class",i.trim())}}function m(e){var t=(e.getAttribute("class")||"").replace(/[\n\t]/g,"");return" "+t+" "}function v(e){return e.replace(g,function(e,t,n,i){return i?n.toUpperCase():n}).replace(E,"Moz$1")}function b(e,t,n){var i;return i=n.getPropertyValue(t),""!==i||e.ownerDocument||(i=e.style[v(t)]),i}var y,g=/([\:\-\_]+(.))/g,E=/^moz([A-Z])/;y={multiple:!0,selected:!0,checked:!0,disabled:!0,readonly:!0,required:!0,open:!0},t.exports={addClass:i,css:o,hasClass:r,off:a,offset:f,on:s,one:c,ready:p,removeClass:h,type:l,scrollLeft:u,scrollTop:d}},{}],5:[function(e,t,n){"use strict";function i(){var e=window;if(v.debug&&"undefined"!=typeof e.console)try{e.console.log.apply(e.console,arguments)}catch(t){var n=Array.prototype.slice.call(arguments);e.console.log(n.join("\n"))}}function o(e){var t,n=document;t=n.head||n.getElementsByTagName("head")[0]||n.documentElement;var i=n.createElement("style");return i.type="text/css",i.styleSheet?i.styleSheet.cssText=e:i.appendChild(n.createTextNode(e)),t.insertBefore(i,t.firstChild),i}function r(e,t){if(!t)throw new Error("MUI: "+e);"undefined"!=typeof console&&console.error("MUI Warning: "+e)}function l(e){if(y.push(e),void 0===y._initialized){var t=document;b.on(t,"animationstart",s),b.on(t,"mozAnimationStart",s),b.on(t,"webkitAnimationStart",s),y._initialized=!0}}function s(e){if("mui-node-inserted"===e.animationName)for(var t=e.target,n=y.length-1;n>=0;n--)y[n](t)}function a(e){var t="";for(var n in e)t+=e[n]?n+" ":"";return t.trim()}function c(){if(void 0!==m)return m;var e=document.createElement("x");return e.style.cssText="pointer-events:auto",m="auto"===e.style.pointerEvents}function u(e,t){return function(){e[t].apply(e,arguments)}}function d(e,t,n,i,o){var r,l=document.createEvent("HTMLEvents"),n=void 0!==n?n:!0,i=void 0!==i?i:!0;if(l.initEvent(t,n,i),o)for(r in o)l[r]=o[r];return e&&e.dispatchEvent(l),l}function f(){if(g+=1,1===g){var e=window,t=document;h={left:b.scrollLeft(e),top:b.scrollTop(e)},b.addClass(t.body,E),e.scrollTo(h.left,h.top)}}function p(){if(0!==g&&(g-=1,0===g)){var e=window,t=document;b.removeClass(t.body,E),e.scrollTo(h.left,h.top)}}var h,m,v=e("../config"),b=e("./jqLite"),y=[],g=0,E="mui-body--scroll-lock";t.exports={callback:u,classNames:a,disableScrollLock:p,dispatchEvent:d,enableScrollLock:f,log:i,loadStyle:o,onNodeInserted:l,raiseError:r,supportsPointerEvents:c}},{"../config":2,"./jqLite":4}],6:[function(e,t,n){"use strict";function i(e){e._muiDropdown!==!0&&(e._muiDropdown=!0,e.hasAttribute("type")||(e.type="button"),l.on(e,"click",o))}function o(e){if(0===e.button){var t=this;null===t.getAttribute("disabled")&&r(t)}}function r(e){function t(){l.removeClass(o,u),l.off(r,"click",t)}function n(){var n=i.getBoundingClientRect(),s=e.getBoundingClientRect(),a=s.top-n.top+s.height;l.css(o,"top",a+"px"),l.addClass(o,u),setTimeout(function(){l.on(r,"click",t)},0)}var i=e.parentNode,o=e.nextElementSibling,r=i.ownerDocument;return o&&l.hasClass(o,d)?void(l.hasClass(o,u)?t():n()):s.raiseError("Dropdown menu element not found")}var l=e("./lib/jqLite"),s=e("./lib/util"),a="data-mui-toggle",c='[data-mui-toggle="dropdown"]',u="mui--is-open",d="mui-dropdown__menu";t.exports={initListeners:function(){for(var e=document,t=e.querySelectorAll(c),n=t.length-1;n>=0;n--)i(t[n]);s.onNodeInserted(function(e){"dropdown"===e.getAttribute(a)&&i(e)})}}},{"./lib/jqLite":4,"./lib/util":5}],7:[function(e,t,n){t.exports=e(4)},{}],8:[function(e,t,n){"use strict";function i(e){var t;if("on"===e){for(var n,i,l,s=arguments.length-1;s>0;s--)n=arguments[s],"object"===p.type(n)&&(i=n),n instanceof Element&&1===n.nodeType&&(l=n);i=i||{},void 0===i.keyboard&&(i.keyboard=!0),void 0===i["static"]&&(i["static"]=!1),t=o(i,l)}else"off"===e?t=r():f.raiseError("Expecting 'on' or 'off'");return t}function o(e,t){var n=document.body,i=document.getElementById(h);if(f.enableScrollLock(),i){for(;i.firstChild;)i.removeChild(i.firstChild);t&&i.appendChild(t)}else i=document.createElement("div"),i.setAttribute("id",h),t&&i.appendChild(t),n.appendChild(i);return m.test(navigator.userAgent)&&p.css(i,"cursor","pointer"),e.keyboard?l():s(),e["static"]?u(i):c(i),i.muiOptions=e,i}function r(){var e,t=document.getElementById(h);if(t){for(;t.firstChild;)t.removeChild(t.firstChild);t.parentNode.removeChild(t),e=t.muiOptions.onclose,u(t)}return f.disableScrollLock(),s(),e&&e(),t}function l(){p.on(document,"keyup",a)}function s(){p.off(document,"keyup",a)}function a(e){27===e.keyCode&&r()}function c(e){p.on(e,"click",d)}function u(e){p.off(e,"click",d)}function d(e){e.target.id===h&&r()}var f=e("./lib/util"),p=e("./lib/jqLite"),h="mui-overlay",m=/(iPad|iPhone|iPod)/g;t.exports=i},{"./lib/jqLite":4,"./lib/util":5}],9:[function(e,t,n){"use strict";function i(e){e._muiRipple!==!0&&(e._muiRipple=!0,"INPUT"!==e.tagName&&(r.on(e,"touchstart",o),r.on(e,"mousedown",o)))}function o(e){if(0===e.button){var t=this;if(t.disabled!==!0&&t.touchFlag!==!0){t.touchFlag=!0,setTimeout(function(){t.touchFlag=!1},100);var n=document.createElement("div");n.className=c;var i,o,l=r.offset(t),s=e.pageX-l.left,u=e.pageY-l.top;i=r.hasClass(t,a)?l.height/2:l.height,o=i/2,r.css(n,{height:i+"px",width:i+"px",top:u-o+"px",left:s-o+"px"}),t.appendChild(n),window.setTimeout(function(){var e=n.parentNode;e&&e.removeChild(n)},2e3)}}}var r=e("./lib/jqLite"),l=e("./lib/util"),s="mui-btn",a="mui-btn--fab",c="mui-ripple-effect";t.exports={initListeners:function(){for(var e=document,t=e.getElementsByClassName(s),n=t.length-1;n>=0;n--)i(t[n]);l.onNodeInserted(function(e){r.hasClass(e,s)&&i(e)})}}},{"./lib/jqLite":4,"./lib/util":5}],10:[function(e,t,n){"use strict";function i(e){e._muiSelect!==!0&&(e._muiSelect=!0,"ontouchstart"in p.documentElement||new o(e))}function o(e){this.selectEl=e,this.wrapperEl=e.parentNode,this.useDefault=!1,l.on(e,"mousedown",s.callback(this,"mousedownHandler")),l.on(e,"focus",s.callback(this,"focusHandler")),l.on(e,"click",s.callback(this,"clickHandler")),this.wrapperEl.tabIndex=-1;var t=s.callback(this,"wrapperFocusHandler");l.on(this.wrapperEl,"focus",t)}function r(e,t){s.enableScrollLock(),this.origIndex=null,this.currentIndex=null,this.selectEl=t,this.menuEl=this._createMenuEl(e,t),this.clickCallbackFn=s.callback(this,"clickHandler"),this.keydownCallbackFn=s.callback(this,"keydownHandler"),this.destroyCallbackFn=s.callback(this,"destroy"),e.appendChild(this.menuEl),l.scrollTop(this.menuEl,this.menuEl._muiScrollTop),setTimeout(function(){"body"!==p.activeElement.nodeName.toLowerCase()&&p.activeElement.blur()},0),l.on(this.menuEl,"click",this.clickCallbackFn),l.on(p,"keydown",this.keydownCallbackFn),l.on(h,"resize",this.destroyCallbackFn);var n=this.destroyCallbackFn;setTimeout(function(){l.on(p,"click",n)},0)}var l=e("./lib/jqLite"),s=e("./lib/util"),a=e("./lib/forms"),c="mui-select",u=".mui-select > select",d="mui-select__menu",f="mui--is-selected",p=document,h=window;o.prototype.mousedownHandler=function(e){0===e.button&&this.useDefault!==!0&&e.preventDefault()},o.prototype.focusHandler=function(e){if(this.useDefault!==!0){var t=this.selectEl,n=this.wrapperEl,i=t.tabIndex,o=s.callback(this,"keydownHandler");l.on(p,"keydown",o),t.tabIndex=-1,l.one(n,"blur",function(){t.tabIndex=i,l.off(p,"keydown",o)}),n.focus()}},o.prototype.keydownHandler=function(e){var t=e.keyCode;32!==t&&38!==t&&40!==t||(e.preventDefault(),this.selectEl.disabled!==!0&&this.renderMenu())},o.prototype.wrapperFocusHandler=function(){return this.selectEl.disabled?this.wrapperEl.blur():void 0},o.prototype.clickHandler=function(e){0===e.button&&this.renderMenu()},o.prototype.renderMenu=function(){return this.useDefault===!0?this.useDefault=!1:void new r(this.wrapperEl,this.selectEl)},r.prototype._createMenuEl=function(e,t){var n,i,o,r=p.createElement("div"),s=t.children,c=s.length,u=0;for(r.className=d,o=0;c>o;o++)n=s[o],i=p.createElement("div"),i.textContent=n.textContent,i._muiPos=o,n.selected&&(i.setAttribute("class",f),u=o),r.appendChild(i);this.origIndex=u,this.currentIndex=u;var h=a.getMenuPositionalCSS(e,c,u);return l.css(r,h),r._muiScrollTop=h.scrollTop,r},r.prototype.keydownHandler=function(e){var t=e.keyCode;return 9===t?this.destroy():(27!==t&&40!==t&&38!==t&&13!==t||e.preventDefault(),void(27===t?this.destroy():40===t?this.increment():38===t?this.decrement():13===t&&(this.selectCurrent(),this.destroy())))},r.prototype.clickHandler=function(e){e.stopPropagation();var t=e.target._muiPos;void 0!==t&&(this.currentIndex=t,this.selectCurrent(),this.destroy())},r.prototype.increment=function(){if(this.currentIndex!==this.menuEl.children.length-1){var e=this.menuEl.children;l.removeClass(e[this.currentIndex],f),this.currentIndex+=1,l.addClass(e[this.currentIndex],f)}},r.prototype.decrement=function(){if(0!==this.currentIndex){var e=this.menuEl.children;l.removeClass(e[this.currentIndex],f),this.currentIndex-=1,l.addClass(e[this.currentIndex],f)}},r.prototype.selectCurrent=function(){if(this.currentIndex!==this.origIndex){var e=this.selectEl.children;e[this.origIndex].selected=!1,e[this.currentIndex].selected=!0,s.dispatchEvent(this.selectEl,"change")}},r.prototype.destroy=function(){var e=this.menuEl.parentNode;e&&e.removeChild(this.menuEl),this.selectEl.focus(),s.disableScrollLock(),l.off(this.menuEl,"click",this.clickCallbackFn),l.off(p,"keydown",this.keydownCallbackFn),l.off(p,"click",this.destroyCallbackFn),l.off(h,"resize",this.destroyCallbackFn)},t.exports={initListeners:function(){for(var e=p.querySelectorAll(u),t=e.length-1;t>=0;t--)i(e[t]);s.onNodeInserted(function(e){"SELECT"===e.tagName&&l.hasClass(e.parentNode,c)&&i(e)})}}},{"./lib/forms":3,"./lib/jqLite":4,"./lib/util":5}],11:[function(e,t,n){"use strict";function i(e){e._muiTabs!==!0&&(e._muiTabs=!0,s.on(e,"click",o))}function o(e){if(0===e.button){var t=this;null===t.getAttribute("disabled")&&r(t)}}function r(e){var t,n,i,o,r,c,u,b,y,g=e.parentNode,E=e.getAttribute(d),C=document.getElementById(E);s.hasClass(g,f)||(C||a.raiseError('Tab pane "'+E+'" not found'),n=l(C),i=n.id,y="["+d+'="'+i+'"]',o=document.querySelectorAll(y)[0],t=o.parentNode,r={paneId:E,relatedPaneId:i},c={paneId:i,relatedPaneId:E},u=a.dispatchEvent(o,m,!0,!0,c),b=a.dispatchEvent(e,p,!0,!0,r),setTimeout(function(){u.defaultPrevented||b.defaultPrevented||(t&&s.removeClass(t,f),n&&s.removeClass(n,f),s.addClass(g,f),s.addClass(C,f),a.dispatchEvent(o,v,!0,!1,c),a.dispatchEvent(e,h,!0,!1,r))},0))}function l(e){for(var t,n=e.parentNode.children,i=n.length,o=null;i--&&!o;)t=n[i],t!==e&&s.hasClass(t,f)&&(o=t);return o}var s=e("./lib/jqLite"),a=e("./lib/util"),c="data-mui-toggle",u="["+c+'="tab"]',d="data-mui-controls",f="mui--is-active",p="mui.tabs.showstart",h="mui.tabs.showend",m="mui.tabs.hidestart",v="mui.tabs.hideend";t.exports={initListeners:function(){for(var e=document.querySelectorAll(u),t=e.length-1;t>=0;t--)i(e[t]);a.onNodeInserted(function(e){"tab"===e.getAttribute(c)&&i(e)})},api:{activate:function(e){var t="["+d+"="+e+"]",n=document.querySelectorAll(t);n.length||a.raiseError('Tab control for pane "'+e+'" not found'),r(n[0])}}}},{"./lib/jqLite":4,"./lib/util":5}],12:[function(e,t,n){"use strict";function i(e){e._muiTextfield!==!0&&(e._muiTextfield=!0,e.value.length?r.addClass(e,c):r.addClass(e,a),r.on(e,"input",o),r.on(e,"change",o),r.on(e,"focus",function(){r.addClass(this,u)}))}function o(){var e=this;e.value.length?(r.removeClass(e,a),r.addClass(e,c)):(r.removeClass(e,c),r.addClass(e,a)),r.addClass(e,u)}var r=e("./lib/jqLite"),l=e("./lib/util"),s=".mui-textfield > input, .mui-textfield > textarea",a="mui--is-empty",c="mui--is-not-empty",u="mui--is-dirty",d="mui-textfield--float-label";t.exports={initialize:i,initListeners:function(){for(var e=document,t=e.querySelectorAll(s),n=t.length-1;n>=0;n--)i(t[n]);l.onNodeInserted(function(e){"INPUT"!==e.tagName&&"TEXTAREA"!==e.tagName||i(e)}),setTimeout(function(){var e=".mui-textfield.mui-textfield--float-label > label {"+["-webkit-transition","-moz-transition","-o-transition","transition",""].join(":all .15s ease-out;")+"}";l.loadStyle(e)},150),l.supportsPointerEvents()===!1&&r.on(document,"click",function(e){var t=e.target;if("LABEL"===t.tagName&&r.hasClass(t.parentNode,d)){var n=t.previousElementSibling;n&&n.focus()}})}}},{"./lib/jqLite":4,"./lib/util":5}]},{},[1]); \ No newline at end of file diff --git a/platforms/android/assets/www/libs/mui/packages/meteor/package.js b/platforms/android/assets/www/libs/mui/packages/meteor/package.js new file mode 100644 index 0000000..f71c18f --- /dev/null +++ b/platforms/android/assets/www/libs/mui/packages/meteor/package.js @@ -0,0 +1,22 @@ +Package.describe({ + name: 'muicss:mui', + version: '0.5.9', + // Brief, one-line summary of the package. + summary: 'MUI is a lightweight CSS framework based on Google\'s Material Design guidelines', + // URL to the Git repository containing the source code for this package. + git: 'https://github.com/muicss/mui', + // By default, Meteor will default to using README.md for documentation. + // To avoid submitting documentation, set this field to null. + documentation: 'README.md' +}); + +Package.onUse(function(api) { + api.versionsFrom('1.0'); + + api.addFiles([ + 'lib/css/mui.css', + 'lib/css/mui.min.css', + 'lib/js/mui.js', + 'lib/js/mui.min.js' + ], 'client'); +}); diff --git a/platforms/android/assets/www/libs/mui/packages/npm/LICENSE.txt b/platforms/android/assets/www/libs/mui/packages/npm/LICENSE.txt new file mode 100644 index 0000000..4b0aef4 --- /dev/null +++ b/platforms/android/assets/www/libs/mui/packages/npm/LICENSE.txt @@ -0,0 +1,31 @@ +Copyright (c) 2015 Andres Morey + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice 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. + +==== + +All files located in the node_modules and bower_components directories are +externally maintained libraries used by this software which have their +own licenses; we recommend you read them, as their terms may differ from +the terms above. diff --git a/platforms/android/assets/www/libs/mui/packages/npm/README.md b/platforms/android/assets/www/libs/mui/packages/npm/README.md new file mode 100644 index 0000000..0d180d1 --- /dev/null +++ b/platforms/android/assets/www/libs/mui/packages/npm/README.md @@ -0,0 +1,487 @@ +# Material Design CSS Framework + +[![MUI](https://www.muicss.com/static/favicons/icon-192x192.png)](https://www.muicss.com) + +MUI is a lightweight CSS framework that follows Google's Material Design guidelines. + +[![Join the chat at https://gitter.im/muicss/mui](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/muicss/mui?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +[![Build Status](https://travis-ci.org/muicss/mui.svg?branch=master)](https://travis-ci.org/muicss/mui) +[![Dependency Status](https://david-dm.org/muicss/mui.svg)](https://david-dm.org/muicss/mui) +[![devDependency Status](https://david-dm.org/muicss/mui/dev-status.svg)](https://david-dm.org/muicss/mui#info=devDependencies) + +## Introduction + +The MUI NPM package makes it easy to import MUI into a project and create a custom build that only includes the components you need. + +The simplest way to use MUI is via the top level imports `muicss` and `muicss/react`: + +```javascript +import { Appbar, Button, Panel } from 'muicss/react'; +``` + +You can also optimize your builds by importing modules one-by-one from the lower level API: + +```javascript +import Appbar from 'muicss/lib/react/appbar'; +import Button from 'muicss/lib/react/button'; +import Container from 'muicss/lib/react/container'; +``` + +Here's an example of how to use MUI in a React app: + +```javascript +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Appbar, Button, Panel } from 'muicss/react'; + +class Example extends React.Component { + onClick() { + console.log('clicked on button'); + } + + render() { + return ( +
          + + + + + + +
          + ); + } +} + +ReactDOM.render(, document.getElementById('example')); +``` + +## API Documentation + +### React Library + +All of the MUI React components can be accessed as top-level attributes of the `muicss/react` package. In addition, they can be accessed individually at `muicss/lib/react/{component}`. + +#### Appbar + +```jsx +import Appbar from 'muicss/lib/react/appbar'; + + +``` + +Read more: https://www.muicss.com/docs/v1/react/appbar + +#### Button + +```jsx +import Button from 'muicss/lib/react/button'; + +
          '; + + // directive function + return ['$timeout', function ($timeout) { + return { + restrict: 'AE', + require: ['ngModel'], + scope: scopeArgs, + replace: true, + template: template, + link: function link(scope, element, attrs, controllers) { + var inputEl = element.find('input') || element.find('textarea'), + labelEl = element.find('label'), + ngModelCtrl = controllers[0], + formCtrl = controllers[1], + isUndef = _angular2.default.isUndefined, + el = inputEl[0]; + + // disable MUI js + if (el) el._muiTextfield = true; + + // remove attributes from wrapper + element.removeAttr('ng-change'); + element.removeAttr('ng-model'); + + // scope defaults + if (!isTextArea) scope.type = scope.type || 'text';else scope.rows = scope.rows || 2; + + // autofocus + if (!isUndef(attrs.autofocus)) inputEl[0].focus(); + + // required + if (!isUndef(attrs.required)) inputEl.prop('required', true); + + // invalid + if (!isUndef(attrs.invalid)) inputEl.addClass('mui--is-invalid'); + + // set is-empty|is-no-empty + handleEmptyClasses(inputEl, scope.ngModel); + + // float-label + if (!isUndef(scope.floatLabel)) { + element.addClass('mui-textfield--float-label'); + + $timeout(function () { + labelEl.css({ + 'transition': '.15s ease-out', + '-webkit-transition': '.15s ease-out', + '-moz-transition': '.15s ease-out', + '-o-transition': '.15s ease-out', + '-ms-transition': '.15s ease-out' + }); + }, 150); + } + + // handle changes + scope.onChange = function () { + var val = scope.ngModel; + + // trigger ng-change + if (ngModelCtrl) ngModelCtrl.$setViewValue(val); + + // set is-empty|is-no-empty + handleEmptyClasses(inputEl, val); + + // add is-dirty + inputEl.addClass(dirtyClass); + }; + + // handle focus event + scope.onFocus = function () { + inputEl.addClass(dirtyClass); + }; + } + }; + }]; +} + +_angular2.default.module(moduleName, []).directive('muiInput', inputFactory(false)).directive('muiTextarea', inputFactory(true)); + +/** Define module API */ +exports.default = moduleName; +module.exports = exports['default']; \ No newline at end of file diff --git a/platforms/android/assets/www/libs/mui/packages/npm/lib/angular/panel.js b/platforms/android/assets/www/libs/mui/packages/npm/lib/angular/panel.js new file mode 100644 index 0000000..6b07daf --- /dev/null +++ b/platforms/android/assets/www/libs/mui/packages/npm/lib/angular/panel.js @@ -0,0 +1,34 @@ +var babelHelpers = require('./babel-helpers.js'); +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _angular = require('angular'); + +var _angular2 = babelHelpers.interopRequireDefault(_angular); + +var moduleName = 'mui.panel'; /** + * MUI Angular Panel Component + * @module angular/panel + */ + +_angular2.default.module(moduleName, []).directive('muiPanel', function () { + return { + restrict: 'AE', + replace: true, + scope: true, + template: '
          ', + transclude: true, + link: function link(scope, element, attr, controller, transcludeFn) { + transcludeFn(scope, function (clone) { + element.append(clone); + }); + } + }; +}); + +/** Define module API */ +exports.default = moduleName; +module.exports = exports['default']; \ No newline at end of file diff --git a/platforms/android/assets/www/libs/mui/packages/npm/lib/angular/radio.js b/platforms/android/assets/www/libs/mui/packages/npm/lib/angular/radio.js new file mode 100644 index 0000000..17dcc99 --- /dev/null +++ b/platforms/android/assets/www/libs/mui/packages/npm/lib/angular/radio.js @@ -0,0 +1,35 @@ +var babelHelpers = require('./babel-helpers.js'); +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _angular = require('angular'); + +var _angular2 = babelHelpers.interopRequireDefault(_angular); + +var moduleName = 'mui.radio'; /** + * MUI Angular Radio Component + * @module angular/radio + */ + +_angular2.default.module(moduleName, []).directive('muiRadio', function () { + return { + restrict: 'AE', + replace: true, + require: ['?ngModel'], + scope: { + label: '@', + name: '@', + value: '@', + ngModel: '=', + ngDisabled: '=' + }, + template: '
          ' + ' ' + '
          ' + }; +}); + +/** Define module API */ +exports.default = moduleName; +module.exports = exports['default']; \ No newline at end of file diff --git a/platforms/android/assets/www/libs/mui/packages/npm/lib/angular/row.js b/platforms/android/assets/www/libs/mui/packages/npm/lib/angular/row.js new file mode 100644 index 0000000..2e7735b --- /dev/null +++ b/platforms/android/assets/www/libs/mui/packages/npm/lib/angular/row.js @@ -0,0 +1,34 @@ +var babelHelpers = require('./babel-helpers.js'); +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _angular = require('angular'); + +var _angular2 = babelHelpers.interopRequireDefault(_angular); + +var moduleName = 'mui.row'; /** + * MUI Angular Grid/Row Module + * @module angular/row.js + */ + +_angular2.default.module('mui.row', []).directive('muiRow', function () { + return { + restrict: 'AE', + scope: true, + replace: true, + template: '
          ', + transclude: true, + link: function link(scope, element, attr, controller, transcludeFn) { + transcludeFn(scope, function (clone) { + element.append(clone); + }); + } + }; +}); + +/** Define module API */ +exports.default = moduleName; +module.exports = exports['default']; \ No newline at end of file diff --git a/platforms/android/assets/www/libs/mui/packages/npm/lib/angular/select.js b/platforms/android/assets/www/libs/mui/packages/npm/lib/angular/select.js new file mode 100644 index 0000000..2778c9f --- /dev/null +++ b/platforms/android/assets/www/libs/mui/packages/npm/lib/angular/select.js @@ -0,0 +1,256 @@ +var babelHelpers = require('./babel-helpers.js'); +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _angular = require('angular'); + +var _angular2 = babelHelpers.interopRequireDefault(_angular); + +var _forms = require('../js/lib/forms'); + +var formlib = babelHelpers.interopRequireWildcard(_forms); + +var _util = require('../js/lib/util'); + +var util = babelHelpers.interopRequireWildcard(_util); + +var _jqLite = require('../js/lib/jqLite'); + +var jqLite = babelHelpers.interopRequireWildcard(_jqLite); +/** + * MUI Angular Select Component + * @module angular/select + */ + +var moduleName = 'mui.select'; + +_angular2.default.module(moduleName, []).directive('muiSelect', ['$timeout', function ($timeout) { + return { + restrict: 'AE', + require: ['ngModel'], + scope: { + name: '@', + ngDisabled: '=', + ngModel: '=' + }, + replace: true, + transclude: true, + template: '
          ' + '' + '
          ' + '
          {{option.label}}
          ' + '
          ' + '
          ', + link: function link(scope, element, attrs, controller, transcludeFn) { + var wrapperEl = element, + menuEl = element.find('div'), + selectEl = element.find('select'), + isUndef = _angular2.default.isUndefined, + cacheIndex; + + // disable MUI js + selectEl[0]._muiSelect = true; + + // init scope + scope.options = []; + scope.isOpen = false; + scope.useDefault = false; + scope.origTabIndex = selectEl[0].tabIndex; + scope.menuIndex = 0; + + // handle `use-default` attribute + if (!isUndef(attrs.useDefault)) scope.useDefault = true; + + // make wrapper focusable + wrapperEl.prop('tabIndex', -1); + + // extract
          '; + + // directive function + return ['$timeout', function($timeout) { + return { + restrict: 'AE', + require: ['ngModel'], + scope: scopeArgs, + replace: true, + template: template, + link: function(scope, element, attrs, controllers) { + var inputEl = element.find('input') || element.find('textarea'), + labelEl = element.find('label'), + ngModelCtrl = controllers[0], + formCtrl = controllers[1], + isUndef = angular.isUndefined, + el = inputEl[0]; + + // disable MUI js + if (el) el._muiTextfield = true; + + // remove attributes from wrapper + element.removeAttr('ng-change'); + element.removeAttr('ng-model'); + + // scope defaults + if (!isTextArea) scope.type = scope.type || 'text'; + else scope.rows = scope.rows || 2; + + // autofocus + if (!isUndef(attrs.autofocus)) inputEl[0].focus(); + + // required + if (!isUndef(attrs.required)) inputEl.prop('required', true); + + // invalid + if (!isUndef(attrs.invalid)) inputEl.addClass('mui--is-invalid'); + + // set is-empty|is-no-empty + handleEmptyClasses(inputEl, scope.ngModel); + + // float-label + if (!isUndef(scope.floatLabel)) { + element.addClass('mui-textfield--float-label'); + + $timeout(function() { + labelEl.css({ + 'transition': '.15s ease-out', + '-webkit-transition': '.15s ease-out', + '-moz-transition': '.15s ease-out', + '-o-transition': '.15s ease-out', + '-ms-transition': '.15s ease-out', + }) + }, 150); + } + + // handle changes + scope.onChange = function() { + var val = scope.ngModel; + + // trigger ng-change + if (ngModelCtrl) ngModelCtrl.$setViewValue(val); + + // set is-empty|is-no-empty + handleEmptyClasses(inputEl, val); + + // add is-dirty + inputEl.addClass(dirtyClass); + } + + // handle focus event + scope.onFocus = function() { + inputEl.addClass(dirtyClass); + } + } + }; + }]; +} + + +angular.module(moduleName, []) + .directive('muiInput', inputFactory(false)) + .directive('muiTextarea', inputFactory(true)); + + +/** Define module API */ +export default moduleName; diff --git a/platforms/android/assets/www/libs/mui/src/angular/panel.js b/platforms/android/assets/www/libs/mui/src/angular/panel.js new file mode 100644 index 0000000..a9585f0 --- /dev/null +++ b/platforms/android/assets/www/libs/mui/src/angular/panel.js @@ -0,0 +1,30 @@ +/** + * MUI Angular Panel Component + * @module angular/panel + */ + +import angular from 'angular'; + + +const moduleName = 'mui.panel'; + + +angular.module(moduleName, []) + .directive('muiPanel', function() { + return { + restrict: 'AE', + replace: true, + scope : true, + template: '
          ', + transclude: true, + link: function(scope, element, attr, controller, transcludeFn) { + transcludeFn(scope, function(clone) { + element.append(clone); + }); + } + }; + }); + + +/** Define module API */ +export default moduleName; diff --git a/platforms/android/assets/www/libs/mui/src/angular/radio.js b/platforms/android/assets/www/libs/mui/src/angular/radio.js new file mode 100644 index 0000000..5a7351a --- /dev/null +++ b/platforms/android/assets/www/libs/mui/src/angular/radio.js @@ -0,0 +1,39 @@ +/** + * MUI Angular Radio Component + * @module angular/radio + */ + +import angular from 'angular'; + + +const moduleName = 'mui.radio'; + + +angular.module(moduleName, []) + .directive('muiRadio', function() { + return { + restrict: 'AE', + replace: true, + require: ['?ngModel'], + scope: { + label: '@', + name: '@', + value: '@', + ngModel: '=', + ngDisabled: '=' + }, + template: '
          ' + + ' ' + + '
          ' + } + }); + + +/** Define module API */ +export default moduleName; diff --git a/platforms/android/assets/www/libs/mui/src/angular/row.js b/platforms/android/assets/www/libs/mui/src/angular/row.js new file mode 100644 index 0000000..fd3bf31 --- /dev/null +++ b/platforms/android/assets/www/libs/mui/src/angular/row.js @@ -0,0 +1,30 @@ +/** + * MUI Angular Grid/Row Module + * @module angular/row.js + */ + +import angular from 'angular'; + + +const moduleName = 'mui.row'; + + +angular.module('mui.row', []) + .directive('muiRow', function() { + return { + restrict: 'AE', + scope: true, + replace: true, + template: '
          ', + transclude: true, + link: function(scope, element, attr, controller, transcludeFn) { + transcludeFn(scope, function(clone) { + element.append(clone); + }); + } + }; + }); + + +/** Define module API */ +export default moduleName; diff --git a/platforms/android/assets/www/libs/mui/src/angular/select.js b/platforms/android/assets/www/libs/mui/src/angular/select.js new file mode 100644 index 0000000..eb4c67b --- /dev/null +++ b/platforms/android/assets/www/libs/mui/src/angular/select.js @@ -0,0 +1,284 @@ +/** + * MUI Angular Select Component + * @module angular/select + */ + +import angular from 'angular'; + +import * as formlib from '../js/lib/forms'; +import * as util from '../js/lib/util'; +import * as jqLite from '../js/lib/jqLite'; + + +const moduleName = 'mui.select'; + + +angular.module(moduleName, []) + .directive('muiSelect', ['$timeout', function($timeout) { + return { + restrict: 'AE', + require: ['ngModel'], + scope: { + name: '@', + ngDisabled: '=', + ngModel: '=' + }, + replace: true, + transclude: true, + template: '
          ' + + '' + + '
          ' + + '
          {{option.label}}
          ' + + '
          ' + + '
          ', + link: function(scope, element, attrs, controller, transcludeFn) { + var wrapperEl = element, + menuEl = element.find('div'), + selectEl = element.find('select'), + isUndef = angular.isUndefined, + cacheIndex; + + // disable MUI js + selectEl[0]._muiSelect = true; + + // init scope + scope.options = []; + scope.isOpen = false; + scope.useDefault = false; + scope.origTabIndex = selectEl[0].tabIndex; + scope.menuIndex = 0; + + // handle `use-default` attribute + if (!isUndef(attrs.useDefault)) scope.useDefault = true; + + // make wrapper focusable + wrapperEl.prop('tabIndex', -1); + + // extract
          + ); + } +} + + +/** Define module API */ +export default Checkbox; diff --git a/platforms/android/assets/www/libs/mui/src/react/col.jsx b/platforms/android/assets/www/libs/mui/src/react/col.jsx new file mode 100644 index 0000000..d18cbe4 --- /dev/null +++ b/platforms/android/assets/www/libs/mui/src/react/col.jsx @@ -0,0 +1,72 @@ +/** + * MUI React Col Component + * @module react/col + */ + +'use strict'; + +import React from 'react'; + +import * as util from '../js/lib/util'; + + +const breakpoints = ['xs', 'sm', 'md', 'lg', 'xl']; + + +/** + * Col constructor + * @class + */ +class Col extends React.Component { + defaultProps() { + let props = {className: ''}, + i, + v; + + // add {breakpoint}, {breakpoint}-offset to props + for (i=breakpoints.length - 1; i > -1; i--) { + v = breakpoints[i]; + props[v] = null; + props[v + '-offset'] = null; + } + + return props; + } + + render() { + let cls = {}, + i, + bk, + val, + baseCls; + + // add mui-col classes + for (i=breakpoints.length - 1; i > -1; i--) { + bk = breakpoints[i]; + baseCls = 'mui-col-' + bk; + + // add mui-col-{bk}-{val} + val = this.props[bk]; + if (val) cls[baseCls + '-' + val] = true; + + // add mui-col-{bk}-offset-{val} + val = this.props[bk + '-offset']; + if (val) cls[baseCls + '-offset-' + val] = true; + } + + cls = util.classNames(cls); + + return ( +
          + {this.props.children} +
          + ); + } +} + + +/** Define module API */ +export default Col; diff --git a/platforms/android/assets/www/libs/mui/src/react/container.jsx b/platforms/android/assets/www/libs/mui/src/react/container.jsx new file mode 100644 index 0000000..7c665dc --- /dev/null +++ b/platforms/android/assets/www/libs/mui/src/react/container.jsx @@ -0,0 +1,44 @@ +/** + * MUI React container module + * @module react/container + */ + +'use strict'; + +import React from 'react'; + + +/** + * Container constructor + * @class + */ +class Container extends React.Component { + static propTypes = { + fluid: React.PropTypes.bool + }; + + static defaultProps = { + className: '', + fluid: false + }; + + render() { + let cls = 'mui-container'; + + // fluid containers + if (this.props.fluid) cls += '-fluid'; + + return ( +
          + {this.props.children} +
          + ); + } +} + + +/** Define module API */ +export default Container; diff --git a/platforms/android/assets/www/libs/mui/src/react/divider.jsx b/platforms/android/assets/www/libs/mui/src/react/divider.jsx new file mode 100644 index 0000000..c39816e --- /dev/null +++ b/platforms/android/assets/www/libs/mui/src/react/divider.jsx @@ -0,0 +1,35 @@ +/** + * MUI React divider module + * @module react/divider + */ + +'use strict'; + +import React from 'react'; + + +/** + * Divider constructor + * @class + */ +class Divider extends React.Component { + static defaultProps = { + className: '' + }; + + render() { + let { children, ...other } = this.props; + + return ( +
          +
          + ); + } +} + + +/** Define module API */ +export default Divider; diff --git a/platforms/android/assets/www/libs/mui/src/react/dropdown-item.jsx b/platforms/android/assets/www/libs/mui/src/react/dropdown-item.jsx new file mode 100644 index 0000000..17e7117 --- /dev/null +++ b/platforms/android/assets/www/libs/mui/src/react/dropdown-item.jsx @@ -0,0 +1,59 @@ +/** + * MUI React dropdowns module + * @module react/dropdowns + */ +/* jshint quotmark:false */ +// jscs:disable validateQuoteMarks + +'use strict'; + +import React from 'react'; + +import * as util from '../js/lib/util'; + + +const PropTypes = React.PropTypes; + + +/** + * DropdownItem constructor + * @class + */ +class DropdownItem extends React.Component { + constructor(props) { + super(props); + + this.onClickCB = util.callback(this, 'onClick'); + } + + static propTypes = { + link: PropTypes.string, + target: PropTypes.string, + onClick: PropTypes.func + }; + + onClick(ev) { + if (this.props.onClick) this.props.onClick(this, ev); + } + + render() { + let { children, onClick, ...other } = this.props; + + return ( +
        • + + {children} + +
        • + ); + } +} + + +/** Define module API */ +export default DropdownItem; diff --git a/platforms/android/assets/www/libs/mui/src/react/dropdown.jsx b/platforms/android/assets/www/libs/mui/src/react/dropdown.jsx new file mode 100644 index 0000000..af0dffb --- /dev/null +++ b/platforms/android/assets/www/libs/mui/src/react/dropdown.jsx @@ -0,0 +1,200 @@ +/** + * MUI React dropdowns module + * @module react/dropdowns + */ +/* jshint quotmark:false */ +// jscs:disable validateQuoteMarks + +'use strict'; + +import React from 'react'; + +import Button from './button'; +import Caret from './caret'; +import * as jqLite from '../js/lib/jqLite'; +import * as util from '../js/lib/util'; + + +const PropTypes = React.PropTypes, + dropdownClass = 'mui-dropdown', + menuClass = 'mui-dropdown__menu', + openClass = 'mui--is-open', + rightClass = 'mui-dropdown__menu--right'; + + +/** + * Dropdown constructor + * @class + */ +class Dropdown extends React.Component { + constructor(props) { + super(props); + + this.state = { + opened: false, + menuTop: 0 + } + + let cb = util.callback; + this.selectCB = cb(this, 'select'); + this.onClickCB = cb(this, 'onClick'); + this.onOutsideClickCB = cb(this, 'onOutsideClick'); + } + + static propTypes = { + color: PropTypes.oneOf(['default', 'primary', 'danger', 'dark', + 'accent']), + variant: PropTypes.oneOf(['default', 'flat', 'raised', 'fab']), + size: PropTypes.oneOf(['default', 'small', 'large']), + label: PropTypes.oneOfType([ + PropTypes.string, + PropTypes.element + ]), + alignMenu: PropTypes.oneOf(['left', 'right']), + onClick: PropTypes.func, + onSelect: PropTypes.func, + disabled: PropTypes.bool + }; + + static defaultProps = { + className: '', + color: 'default', + variant: 'default', + size: 'default', + label: '', + alignMenu: 'left', + onClick: null, + onSelect: null, + disabled: false + }; + + componentWillMount() { + document.addEventListener('click', this.onOutsideClickCB); + } + + componentWillUnmount() { + document.removeEventListener('click', this.onOutsideClickCB); + } + + onClick(ev) { + // only left clicks + if (ev.button !== 0) return; + + // exit if toggle button is disabled + if (this.props.disabled) return; + + if (!ev.defaultPrevented) { + this.toggle(); + + // execute onClick method + let onClickFn = this.props.onClick; + onClickFn && onClickFn(ev); + } + } + + toggle() { + // exit if no menu element + if (!this.props.children) { + return util.raiseError('Dropdown menu element not found'); + } + + if (this.state.opened) this.close(); + else this.open(); + } + + open() { + // position menu element below toggle button + let wrapperRect = this.refs.wrapperEl.getBoundingClientRect(), + toggleRect; + + toggleRect = this.refs.button.refs.buttonEl.getBoundingClientRect(); + + this.setState({ + opened: true, + menuTop: toggleRect.top - wrapperRect.top + toggleRect.height + }); + } + + close() { + this.setState({opened: false}); + } + + select(ev) { + // onSelect callback + if (this.props.onSelect && ev.target.tagName === 'A') { + this.props.onSelect(ev.target.getAttribute('data-mui-value')); + } + + // close menu + if (!ev.defaultPrevented) this.close(); + } + + onOutsideClick(ev) { + let isClickInside = this.refs.wrapperEl.contains(ev.target); + if (!isClickInside) this.close(); + } + + render() { + let buttonEl, + menuEl, + labelEl; + + // build label + if (jqLite.type(this.props.label) === 'string') { + labelEl = {this.props.label} ; + } else { + labelEl = this.props.label; + } + + buttonEl = ( + + ); + + if (this.state.opened) { + let cs = {}; + + cs[menuClass] = true; + cs[openClass] = this.state.opened; + cs[rightClass] = (this.props.alignMenu === 'right'); + cs = util.classNames(cs); + + menuEl = ( +
            + {this.props.children} +
          + ); + } + + let { className, children, onClick, ...other } = this.props; + + return ( +
          + {buttonEl} + {menuEl} +
          + ); + } +} + + +/** Define module API */ +export default Dropdown; diff --git a/platforms/android/assets/www/libs/mui/src/react/form.jsx b/platforms/android/assets/www/libs/mui/src/react/form.jsx new file mode 100644 index 0000000..127a0d3 --- /dev/null +++ b/platforms/android/assets/www/libs/mui/src/react/form.jsx @@ -0,0 +1,44 @@ +/** + * MUI React form module + * @module react/form + */ + +'use strict'; + +import React from 'react'; + + +/** + * Form constructor + * @class + */ +class Form extends React.Component { + static propTypes = { + inline: React.PropTypes.bool + }; + + static defaultProps = { + className: '', + inline: false + }; + + render() { + let cls = ''; + + // inline form + if (this.props.inline) cls = 'mui-form--inline'; + + return ( + + {this.props.children} + + ); + } +} + + +/** Define module API */ +export default Form; diff --git a/platforms/android/assets/www/libs/mui/src/react/input.jsx b/platforms/android/assets/www/libs/mui/src/react/input.jsx new file mode 100644 index 0000000..722db29 --- /dev/null +++ b/platforms/android/assets/www/libs/mui/src/react/input.jsx @@ -0,0 +1,35 @@ +/** + * MUI React Input Component + * @module react/input + */ + +'use strict'; + +import React from 'react'; + +import { TextField } from './text-field'; + + +const PropTypes = React.PropTypes; + + +/** + * Input constructor + * @class + */ +class Input extends React.Component { + static propTypes = { + type: PropTypes.oneOf(['text', 'email', 'url', 'tel', 'password']) + }; + + static defaultProps = { + type: 'text' + }; + + render() { + return ; + } +} + + +export default Input; diff --git a/platforms/android/assets/www/libs/mui/src/react/option.jsx b/platforms/android/assets/www/libs/mui/src/react/option.jsx new file mode 100644 index 0000000..ca5e461 --- /dev/null +++ b/platforms/android/assets/www/libs/mui/src/react/option.jsx @@ -0,0 +1,46 @@ +/** + * MUI React options module + * @module react/option + */ + +'use strict'; + +import React from 'react'; + +import * as formlib from '../js/lib/forms'; +import * as jqLite from '../js/lib/jqLite'; +import * as util from '../js/lib/util'; + + +const PropTypes = React.PropTypes; + + +/** + * Option constructor + * @class + */ +class Option extends React.Component { + static propTypes = { + value: PropTypes.string, + label: PropTypes.string + }; + + static defaultProps = { + value: null, + label: null + }; + + render() { + let { children, ...other } = this.props; + + return ( + + ); + } +} + + +/** Define module API */ +export default Option; diff --git a/platforms/android/assets/www/libs/mui/src/react/panel.jsx b/platforms/android/assets/www/libs/mui/src/react/panel.jsx new file mode 100644 index 0000000..038371c --- /dev/null +++ b/platforms/android/assets/www/libs/mui/src/react/panel.jsx @@ -0,0 +1,34 @@ +/** + * MUI React layout module + * @module react/layout + */ + +'use strict'; + +import React from 'react'; + + +/** + * Panel constructor + * @class + */ +class Panel extends React.Component { + static defaultProps = { + className: '' + }; + + render() { + return ( +
          + {this.props.children} +
          + ); + } +} + + +/** Define module API */ +export default Panel; diff --git a/platforms/android/assets/www/libs/mui/src/react/radio.jsx b/platforms/android/assets/www/libs/mui/src/react/radio.jsx new file mode 100644 index 0000000..5511429 --- /dev/null +++ b/platforms/android/assets/www/libs/mui/src/react/radio.jsx @@ -0,0 +1,65 @@ +/** + * MUI React radio module + * @module react/radio + */ + +'use strict'; + +import React from 'react'; + + +const PropTypes = React.PropTypes; + + +/** + * Radio constructor + * @class + */ +class Radio extends React.Component { + static propTypes = { + name: PropTypes.string, + label: PropTypes.string, + value: PropTypes.string, + checked: PropTypes.bool, + defaultChecked: PropTypes.bool, + disabled: PropTypes.bool, + onChange: PropTypes.func + }; + + static defaultProps = { + className: '', + name: null, + label: null, + disabled: false, + onChange: null + }; + + render() { + let { children, onChange, ...other } = this.props; + + return ( +
          + +
          + ); + } +} + + +/** Define module API */ +export default Radio; diff --git a/platforms/android/assets/www/libs/mui/src/react/row.jsx b/platforms/android/assets/www/libs/mui/src/react/row.jsx new file mode 100644 index 0000000..a67691e --- /dev/null +++ b/platforms/android/assets/www/libs/mui/src/react/row.jsx @@ -0,0 +1,39 @@ +/** + * MUI React Row Component + * @module react/row + */ + +'use strict'; + +import React from 'react'; + +import * as util from '../js/lib/util'; + + +const breakpoints = ['xs', 'sm', 'md', 'lg']; + + +/** + * Row constructor + * @class + */ +class Row extends React.Component { + static defaultProps = { + className: '' + }; + + render() { + return ( +
          + {this.props.children} +
          + ); + } +} + + +/** Define module API */ +export default Row; diff --git a/platforms/android/assets/www/libs/mui/src/react/select.jsx b/platforms/android/assets/www/libs/mui/src/react/select.jsx new file mode 100644 index 0000000..d467695 --- /dev/null +++ b/platforms/android/assets/www/libs/mui/src/react/select.jsx @@ -0,0 +1,389 @@ +/** + * MUI React select module + * @module react/select + */ + +'use strict'; + +import React from 'react'; + +import * as formlib from '../js/lib/forms'; +import * as jqLite from '../js/lib/jqLite'; +import * as util from '../js/lib/util'; +import { controlledMessage } from './_helpers'; + + +const PropTypes = React.PropTypes; + + +/** + * Select constructor + * @class + */ +class Select extends React.Component { + constructor(props) { + super(props); + + // warn if value defined but onChange is not + if (props.readOnly === false && + props.value !== undefined && + props.onChange === null) { + util.raiseError(controlledMessage, true); + } + + this.state.value = props.value; + + // bind callback function + let cb = util.callback; + this.hideMenuCB = cb(this, 'hideMenu'); + this.onInnerChangeCB = cb(this, 'onInnerChange'); + this.onInnerClickCB = cb(this, 'onInnerClick'); + this.onInnerFocusCB = cb(this, 'onInnerFocus'); + this.onInnerMouseDownCB = cb(this, 'onInnerMouseDown'); + this.onKeydownCB = cb(this, 'onKeydown'); + this.onMenuChangeCB = cb(this, 'onMenuChange'); + this.onOuterFocusCB = cb(this, 'onOuterFocus'); + this.onOuterBlurCB = cb(this, 'onOuterBlur'); + } + + state = { + showMenu: false + }; + + static propTypes = { + name: PropTypes.string, + value: PropTypes.string, + defaultValue: PropTypes.string, + autoFocus: PropTypes.bool, + disabled: PropTypes.bool, + multiple: PropTypes.bool, + readOnly: PropTypes.bool, + required: PropTypes.bool, + useDefault: PropTypes.bool, + onChange: PropTypes.func + }; + + static defaultProps = { + className: '', + name: null, + autoFocus: false, + disabled: false, + multiple: false, + readOnly: false, + required: false, + useDefault: false, + onChange: null + }; + + componentDidMount() { + // disable MUI js + this.refs.selectEl._muiSelect = true; + + // make wrapper element focusable (to enable Firefox bugfix) + this.refs.wrapperEl.tabIndex = -1; + + // handle autofocus + if (this.props.autoFocus) this.refs.wrapperEl.focus(); + } + + componentWillReceiveProps(nextProps) { + this.setState({value: nextProps.value}); + } + + onInnerMouseDown(ev) { + if (ev.button !== 0 || this.props.useDefault === true) return; + ev.preventDefault(); + } + + onInnerChange(ev) { + let value = ev.target.value; + this.setState({ value }); + + let fn = this.props.onChange; + if (fn) fn(value); + } + + onInnerClick(ev) { + if (ev.button !== 0) return; // only left clicks + this.showMenu(); + } + + onInnerFocus(ev) { + // check flag + if (this.props.useDefault === true) return; + + // defer focus to parent + setTimeout(() => {this.refs.wrapperEl.focus();}, 0); + } + + onOuterFocus(ev) { + // ignore focus on inner element (react artifact) + if (ev.target !== this.refs.wrapperEl) return; + + // disable tabfocus on inner element + var selectEl = this.refs.selectEl; + selectEl._muiOrigIndex = selectEl.tabIndex; + selectEl.tabIndex = -1; + + // firefox bugfix + if (selectEl.disabled) return this.refs.wrapperEl.blur(); + + // attach keydown handler + jqLite.on(document, 'keydown', this.onKeydownCB); + } + + onOuterBlur(ev) { + // ignore blur on inner element + if (ev.target !== this.refs.wrapperEl) return; + + // restore tab focus on inner element + let selectEl = this.refs.selectEl; + selectEl.tabIndex = selectEl._muiOrigIndex; + + // remove keydown handler + jqLite.off(document, 'keydown', this.onKeydownCB); + } + + onKeydown(ev) { + // spacebar, down, up + if (ev.keyCode === 32 || ev.keyCode === 38 || ev.keyCode === 40) { + // prevent win scroll + ev.preventDefault(); + + if (this.refs.selectEl.disabled !== true) this.showMenu(); + } + } + + showMenu() { + // check useDefault flag + if (this.props.useDefault === true) return; + + // add scroll lock + util.enableScrollLock(); + + // add event listeners + jqLite.on(window, 'resize', this.hideMenuCB); + jqLite.on(document, 'click', this.hideMenuCB); + + // re-draw + this.setState({showMenu: true}); + } + + hideMenu() { + // remove scroll lock + util.disableScrollLock(); + + // remove event listeners + jqLite.off(window, 'resize', this.hideMenuCB); + jqLite.off(document, 'click', this.hideMenuCB); + + // re-draw + this.setState({showMenu: false}); + + // refocus + this.refs.selectEl.focus(); + } + + onMenuChange(value) { + if (this.props.readOnly === true) return; + + this.setState({ value }); + + // execute onChange method + let fn = this.props.onChange; + if (fn) fn(value); + } + + render() { + let menuElem; + + if (this.state.showMenu) { + menuElem = ( + + ); + } + + let { children, onChange, ...other } = this.props; + + return ( +
          + + {menuElem} +
          + ); + } +} + + +/** + * Menu constructor + * @class + */ +class Menu extends React.Component { + constructor(props) { + super(props); + + this.onKeydownCB = util.callback(this, 'onKeydown'); + } + + state = { + origIndex: null, + currentIndex: null + }; + + static defaultProps = { + optionEls: [], + wrapperEl: null, + onChange: null, + onClose: null + }; + + componentWillMount() { + let optionEls = this.props.optionEls, + m = optionEls.length, + selectedPos = 0, + i; + + // get current selected position + for (i=m - 1; i > -1; i--) if (optionEls[i].selected) selectedPos = i; + this.setState({origIndex: selectedPos, currentIndex: selectedPos}); + } + + componentDidMount() { + // blur active element (IE10 bugfix) + this.blurTimer = setTimeout(function() { + let el = document.activeElement; + if (el.nodeName.toLowerCase() !== 'body') el.blur(); + }, 0); + + // set position + let props = formlib.getMenuPositionalCSS( + this.props.wrapperEl, + this.props.optionEls.length, + this.state.currentIndex + ); + + let el = this.refs.wrapperEl; + jqLite.css(el, props); + jqLite.scrollTop(el, props.scrollTop); + + // attach keydown handler + jqLite.on(document, 'keydown', this.onKeydownCB); + } + + componentWillUnmount() { + // clear timer + clearTimeout(this.blurTimer); + + // remove keydown handler + jqLite.off(document, 'keydown', this.onKeydownCB); + } + + onClick(pos, ev) { + // don't allow events to bubble + ev.stopPropagation(); + this.selectAndDestroy(pos); + } + + onKeydown(ev) { + let keyCode = ev.keyCode; + + // tab + if (keyCode === 9) return this.destroy(); + + // escape | up | down | enter + if (keyCode === 27 || keyCode === 40 || keyCode === 38 || keyCode === 13) { + ev.preventDefault(); + } + + if (keyCode === 27) this.destroy(); + else if (keyCode === 40) this.increment(); + else if (keyCode === 38) this.decrement(); + else if (keyCode === 13) this.selectAndDestroy(); + } + + increment() { + if (this.state.currentIndex === this.props.optionEls.length - 1) { + return; + } + + this.setState({currentIndex: this.state.currentIndex + 1}); + } + + decrement() { + if (this.state.currentIndex === 0) return; + this.setState({currentIndex: this.state.currentIndex - 1}); + } + + selectAndDestroy(pos) { + pos = (pos === undefined) ? this.state.currentIndex : pos; + + // handle onChange + if (pos !== this.state.origIndex) { + this.props.onChange(this.props.optionEls[pos].value); + } + + // close menu + this.destroy(); + } + + destroy() { + this.props.onClose(); + } + + render() { + let menuItems = [], + optionEls = this.props.optionEls, + m = optionEls.length, + optionEl, + cls, + i; + + // define menu items + for (i=0; i < m; i++) { + cls = (i === this.state.currentIndex) ? 'mui--is-selected' : ''; + + menuItems.push( +
          + {optionEls[i].textContent} +
          + ); + } + + return
          {menuItems}
          ; + } +} + + +/** Define module API */ +export default Select; diff --git a/platforms/android/assets/www/libs/mui/src/react/tab.jsx b/platforms/android/assets/www/libs/mui/src/react/tab.jsx new file mode 100644 index 0000000..73b7c4b --- /dev/null +++ b/platforms/android/assets/www/libs/mui/src/react/tab.jsx @@ -0,0 +1,40 @@ +/** + * MUI React tabs module + * @module react/tabs + */ +/* jshint quotmark:false */ +// jscs:disable validateQuoteMarks + +'use strict'; + +import React from 'react'; + + +const PropTypes = React.PropTypes; + + +/** + * Tab constructor + * @class + */ +class Tab extends React.Component { + static propTypes = { + value: PropTypes.any, + label: PropTypes.string, + onActive: PropTypes.func + }; + + static defaultProps = { + value: null, + label: '', + onActive: null + }; + + render() { + return null; + }; +} + + +/** Define module API */ +export default Tab; diff --git a/platforms/android/assets/www/libs/mui/src/react/tabs.jsx b/platforms/android/assets/www/libs/mui/src/react/tabs.jsx new file mode 100644 index 0000000..aa00ae5 --- /dev/null +++ b/platforms/android/assets/www/libs/mui/src/react/tabs.jsx @@ -0,0 +1,116 @@ +/** + * MUI React tabs module + * @module react/tabs + */ +/* jshint quotmark:false */ +// jscs:disable validateQuoteMarks + +'use strict'; + +import React from 'react'; + +import Tab from './tab'; +import * as util from '../js/lib/util'; + + +const PropTypes = React.PropTypes, + tabsBarClass = 'mui-tabs__bar', + tabsBarJustifiedClass = 'mui-tabs__bar--justified', + tabsPaneClass = 'mui-tabs__pane', + isActiveClass = 'mui--is-active'; + + +/** + * Tabs constructor + * @class + */ +class Tabs extends React.Component { + constructor(props) { + super(props); + this.state = {currentSelectedIndex: props.initialSelectedIndex}; + } + + static propTypes = { + initialSelectedIndex: PropTypes.number, + justified: PropTypes.bool, + onChange: PropTypes.func + }; + + static defaultProps = { + className: '', + initialSelectedIndex: 0, + justified: false, + onChange: null + }; + + onClick(i, tab, ev) { + if (i !== this.state.currentSelectedIndex) { + this.setState({currentSelectedIndex: i}); + + // onActive callback + if (tab.props.onActive) tab.props.onActive(tab); + + // onChange callback + if (this.props.onChange) { + this.props.onChange(i, tab.props.value, tab, ev); + } + } + } + + render() { + let { children, ...other } = this.props; + + let tabEls = [], + paneEls = [], + m = children.length, + selectedIndex = this.state.currentSelectedIndex % m, + isActive, + item, + cls, + i; + + for (i=0; i < m; i++) { + item = children[i]; + + // only accept MUITab elements + if (item.type !== Tab) util.raiseError('Expecting MUITab React Element'); + + isActive = (i === selectedIndex) ? true : false; + + // tab element + tabEls.push( +
        • + + {item.props.label} + +
        • + ); + + // pane element + cls = tabsPaneClass + ' '; + if (isActive) cls += isActiveClass; + + paneEls.push( +
          + {item.props.children} +
          + ); + } + + cls = tabsBarClass; + if (this.props.justified) cls += ' ' + tabsBarJustifiedClass; + + return ( +
          +
            + {tabEls} +
          + {paneEls} +
          + ); + } +} + + +/** Define module API */ +export default Tabs; diff --git a/platforms/android/assets/www/libs/mui/src/react/text-field.jsx b/platforms/android/assets/www/libs/mui/src/react/text-field.jsx new file mode 100644 index 0000000..c20b8ea --- /dev/null +++ b/platforms/android/assets/www/libs/mui/src/react/text-field.jsx @@ -0,0 +1,239 @@ +/** + * MUI React TextInput Component + * @module react/text-input + */ + +'use strict'; + +import React from 'react'; + +import * as util from '../js/lib/util'; +import { controlledMessage } from './_helpers'; + + +const PropTypes = React.PropTypes; + + +/** + * Input constructor + * @class + */ +class Input extends React.Component { + constructor(props) { + super(props); + + let value = props.value; + let innerValue = value || props.defaultValue; + + this.state = { + innerValue: innerValue, + isDirty: Boolean(innerValue) + }; + + // warn if value defined but onChange is not + if (value !== undefined && props.onChange === null) { + util.raiseError(controlledMessage, true); + } + + let cb = util.callback; + this.onChangeCB = cb(this, 'onChange'); + this.onFocusCB = cb(this, 'onFocus'); + } + + static propTypes = { + hint: PropTypes.string, + value: PropTypes.string, + type: PropTypes.string, + autoFocus: PropTypes.bool, + onChange: PropTypes.func + }; + + static defaultProps = { + hint: null, + type: null, + autoFocus: false, + onChange: null + }; + + componentDidMount() { + // disable MUI js + this.refs.inputEl._muiTextfield = true; + } + + onChange(ev) { + this.setState({innerValue: ev.target.value}); + + let fn = this.props.onChange; + if (fn) fn(ev); + } + + onFocus(ev) { + this.setState({isDirty: true}); + } + + triggerFocus() { + // hack to enable IE10 pointer-events shim + this.refs.inputEl.focus(); + } + + render() { + let cls = {}, + isNotEmpty = Boolean(this.state.innerValue), + inputEl; + + cls['mui--is-empty'] = !isNotEmpty; + cls['mui--is-not-empty'] = isNotEmpty; + cls['mui--is-dirty'] = this.state.isDirty; + cls['mui--is-invalid'] = this.props.invalid; + + cls = util.classNames(cls); + + let { children, ...other } = this.props; + + if (this.props.type === 'textarea') { + inputEl = ( + "; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; +} )(); + +return support; + +} ); diff --git a/platforms/ios/www/libs/jquery/src/manipulation/var/nodeNames.js b/platforms/ios/www/libs/jquery/src/manipulation/var/nodeNames.js new file mode 100644 index 0000000..05bb604 --- /dev/null +++ b/platforms/ios/www/libs/jquery/src/manipulation/var/nodeNames.js @@ -0,0 +1,5 @@ +define( function() { + return "abbr|article|aside|audio|bdi|canvas|data|datalist|" + + "details|dialog|figcaption|figure|footer|header|hgroup|main|" + + "mark|meter|nav|output|picture|progress|section|summary|template|time|video"; +} ); diff --git a/platforms/ios/www/libs/jquery/src/manipulation/var/rcheckableType.js b/platforms/ios/www/libs/jquery/src/manipulation/var/rcheckableType.js new file mode 100644 index 0000000..4c95394 --- /dev/null +++ b/platforms/ios/www/libs/jquery/src/manipulation/var/rcheckableType.js @@ -0,0 +1,3 @@ +define( function() { + return ( /^(?:checkbox|radio)$/i ); +} ); diff --git a/platforms/ios/www/libs/jquery/src/manipulation/var/rleadingWhitespace.js b/platforms/ios/www/libs/jquery/src/manipulation/var/rleadingWhitespace.js new file mode 100644 index 0000000..96ef95f --- /dev/null +++ b/platforms/ios/www/libs/jquery/src/manipulation/var/rleadingWhitespace.js @@ -0,0 +1,3 @@ +define( function() { + return ( /^\s+/ ); +} ); diff --git a/platforms/ios/www/libs/jquery/src/manipulation/var/rscriptType.js b/platforms/ios/www/libs/jquery/src/manipulation/var/rscriptType.js new file mode 100644 index 0000000..0c77c8a --- /dev/null +++ b/platforms/ios/www/libs/jquery/src/manipulation/var/rscriptType.js @@ -0,0 +1,3 @@ +define( function() { + return ( /^$|\/(?:java|ecma)script/i ); +} ); diff --git a/platforms/ios/www/libs/jquery/src/manipulation/var/rtagName.js b/platforms/ios/www/libs/jquery/src/manipulation/var/rtagName.js new file mode 100644 index 0000000..9e54269 --- /dev/null +++ b/platforms/ios/www/libs/jquery/src/manipulation/var/rtagName.js @@ -0,0 +1,3 @@ +define( function() { + return ( /<([\w:-]+)/ ); +} ); diff --git a/platforms/ios/www/libs/jquery/src/manipulation/wrapMap.js b/platforms/ios/www/libs/jquery/src/manipulation/wrapMap.js new file mode 100644 index 0000000..fdb430a --- /dev/null +++ b/platforms/ios/www/libs/jquery/src/manipulation/wrapMap.js @@ -0,0 +1,27 @@ +define( function() { + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // Support: IE9 + option: [ 1, "" ], + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
          " ], + col: [ 2, "", "
          " ], + tr: [ 2, "", "
          " ], + td: [ 3, "", "
          " ], + + _default: [ 0, "", "" ] +}; + +// Support: IE9 +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +return wrapMap; +} ); diff --git a/platforms/ios/www/libs/jquery/src/offset.js b/platforms/ios/www/libs/jquery/src/offset.js new file mode 100644 index 0000000..08a4543 --- /dev/null +++ b/platforms/ios/www/libs/jquery/src/offset.js @@ -0,0 +1,218 @@ +define( [ + "./core", + "./core/access", + "./var/document", + "./var/documentElement", + "./css/var/rnumnonpx", + "./css/curCSS", + "./css/addGetHookIf", + "./css/support", + + "./core/init", + "./css", + "./selector" // contains +], function( jQuery, access, document, documentElement, rnumnonpx, curCSS, addGetHookIf, support ) { + +/** + * 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 ) ) { + + // Use jQuery.extend here to allow modification of coordinates argument (gh-1848) + options = options.call( elem, i, jQuery.extend( {}, 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; + } + + 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" ) { + + // Assume getBoundingClientRect is there 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 ) + }; + }, + + // This method will return documentElement in the following cases: + // 1) For the element inside the iframe without offsetParent, this method will return + // documentElement of the parent window + // 2) For the hidden or detached element + // 3) For body or html element, i.e. in case of the html node - it will return itself + // + // but those exceptions were never presented as a real life use-cases + // and might be considered as more preferable results. + // + // This logic, however, is not guaranteed and can change at any point in the future + offsetParent: function() { + return this.map( function() { + var offsetParent = this.offsetParent; + + while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) { + offsetParent = offsetParent.offsetParent; + } + + return offsetParent || documentElement; + } ); + } +} ); + +// 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 : win.pageXOffset, + top ? val : win.pageYOffset + ); + + } else { + elem[ method ] = val; + } + }, method, val, arguments.length ); + }; +} ); + +// Support: Safari<7-8+, Chrome<37-44+ +// Add the top/left cssHooks using jQuery.fn.position +// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 +// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280 +// getComputedStyle returns percent when specified for top/left/bottom/right; +// rather than make the css module depend on the offset module, 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/ios/www/libs/jquery/src/outro.js b/platforms/ios/www/libs/jquery/src/outro.js new file mode 100644 index 0000000..d792ffb --- /dev/null +++ b/platforms/ios/www/libs/jquery/src/outro.js @@ -0,0 +1,2 @@ +return jQuery; +})); diff --git a/platforms/ios/www/libs/jquery/src/queue.js b/platforms/ios/www/libs/jquery/src/queue.js new file mode 100644 index 0000000..813c41c --- /dev/null +++ b/platforms/ios/www/libs/jquery/src/queue.js @@ -0,0 +1,143 @@ +define( [ + "./core", + "./data/var/dataPriv", + "./deferred", + "./callbacks" +], function( jQuery, dataPriv ) { + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray( data ) ) { + queue = dataPriv.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 public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.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 = dataPriv.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/ios/www/libs/jquery/src/queue/delay.js b/platforms/ios/www/libs/jquery/src/queue/delay.js new file mode 100644 index 0000000..8d5844d --- /dev/null +++ b/platforms/ios/www/libs/jquery/src/queue/delay.js @@ -0,0 +1,22 @@ +define( [ + "../core", + "../queue", + "../effects" // Delay is optional because of this dependency +], function( jQuery ) { + +// Based off of the plugin by Clint Helfers, with permission. +// http://web.archive.org/web/20100324014747/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 = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + +return jQuery.fn.delay; +} ); diff --git a/platforms/ios/www/libs/jquery/src/selector-native.js b/platforms/ios/www/libs/jquery/src/selector-native.js new file mode 100644 index 0000000..ee81483 --- /dev/null +++ b/platforms/ios/www/libs/jquery/src/selector-native.js @@ -0,0 +1,211 @@ +define( [ + "./core", + "./var/document", + "./var/documentElement", + "./var/hasOwn", + "./var/indexOf" +], function( jQuery, document, documentElement, hasOwn, indexOf ) { + +/* + * 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 hasDuplicate, sortInput, + sortStable = jQuery.expando.split( "" ).sort( sortOrder ).join( "" ) === jQuery.expando, + matches = documentElement.matches || + documentElement.webkitMatchesSelector || + documentElement.mozMatchesSelector || + documentElement.oMatchesSelector || + documentElement.msMatchesSelector; + +function sortOrder( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 ) { + + // Choose the first element that is related to our preferred document + if ( a === document || a.ownerDocument === document && + jQuery.contains( document, a ) ) { + return -1; + } + if ( b === document || b.ownerDocument === document && + jQuery.contains( document, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; +} + +function uniqueSort( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + hasDuplicate = false; + sortInput = !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 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +} + +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; + }, + uniqueSort: uniqueSort, + unique: uniqueSort, + 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 ) { + + // 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; + }, + expr: { + attrHandle: {}, + match: { + bool: new RegExp( "^(?: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 ) { + var fn = jQuery.expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (jQuery #13807) + value = fn && hasOwn.call( jQuery.expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, jQuery.isXMLDoc( elem ) ) : + undefined; + return value !== undefined ? value : elem.getAttribute( name ); + } +} ); + +} ); diff --git a/platforms/ios/www/libs/jquery/src/selector-sizzle.js b/platforms/ios/www/libs/jquery/src/selector-sizzle.js new file mode 100644 index 0000000..9728a1f --- /dev/null +++ b/platforms/ios/www/libs/jquery/src/selector-sizzle.js @@ -0,0 +1,14 @@ +define( [ + "./core", + "../external/sizzle/dist/sizzle" +], function( jQuery, Sizzle ) { + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + +} ); diff --git a/platforms/ios/www/libs/jquery/src/selector.js b/platforms/ios/www/libs/jquery/src/selector.js new file mode 100644 index 0000000..e13f585 --- /dev/null +++ b/platforms/ios/www/libs/jquery/src/selector.js @@ -0,0 +1 @@ +define( [ "./selector-sizzle" ], function() {} ); diff --git a/platforms/ios/www/libs/jquery/src/serialize.js b/platforms/ios/www/libs/jquery/src/serialize.js new file mode 100644 index 0000000..94698fc --- /dev/null +++ b/platforms/ios/www/libs/jquery/src/serialize.js @@ -0,0 +1,125 @@ +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" && v != null ? 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/ios/www/libs/jquery/src/support.js b/platforms/ios/www/libs/jquery/src/support.js new file mode 100644 index 0000000..71ac60f --- /dev/null +++ b/platforms/ios/www/libs/jquery/src/support.js @@ -0,0 +1,63 @@ +define( [ + "./core", + "./var/support", + "./var/document", + "./core/init", // Needed for hasOwn support test + // This is listed as a dependency for build order, but it's still optional in builds + "./core/ready" +], function( jQuery, support, document ) { + +// Support: IE<9 +// Iteration over object's inherited properties before its own +var i; +for ( i in jQuery( support ) ) { + break; +} +support.ownFirst = i === "0"; + +// Note: most support tests are defined in their respective modules. +// false until the test is run +support.inlineBlockNeedsLayout = false; + +// Execute ASAP in case we need to set body.style.zoom +jQuery( function() { + + // Minified: var a,b,c,d + var val, div, body, container; + + body = document.getElementsByTagName( "body" )[ 0 ]; + if ( !body || !body.style ) { + + // Return for frameset docs that don't have a body + return; + } + + // Setup + div = document.createElement( "div" ); + container = document.createElement( "div" ); + container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px"; + body.appendChild( container ).appendChild( div ); + + if ( typeof div.style.zoom !== "undefined" ) { + + // 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.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1"; + + support.inlineBlockNeedsLayout = val = div.offsetWidth === 3; + if ( val ) { + + // 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 ); +} ); + +return support; +} ); diff --git a/platforms/ios/www/libs/jquery/src/traversing.js b/platforms/ios/www/libs/jquery/src/traversing.js new file mode 100644 index 0000000..0d4c1c4 --- /dev/null +++ b/platforms/ios/www/libs/jquery/src/traversing.js @@ -0,0 +1,175 @@ +define( [ + "./core", + "./var/indexOf", + "./traversing/var/dir", + "./traversing/var/siblings", + "./traversing/var/rneedsContext", + "./core/init", + "./traversing/findFilter", + "./selector" +], function( jQuery, indexOf, dir, siblings, 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.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.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + 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.uniqueSort( + 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 dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( 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.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); + +return jQuery; +} ); diff --git a/platforms/ios/www/libs/jquery/src/traversing/findFilter.js b/platforms/ios/www/libs/jquery/src/traversing/findFilter.js new file mode 100644 index 0000000..7d4b2ca --- /dev/null +++ b/platforms/ios/www/libs/jquery/src/traversing/findFilter.js @@ -0,0 +1,100 @@ +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 ) > -1 ) !== 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/ios/www/libs/jquery/src/traversing/var/dir.js b/platforms/ios/www/libs/jquery/src/traversing/var/dir.js new file mode 100644 index 0000000..b98fdca --- /dev/null +++ b/platforms/ios/www/libs/jquery/src/traversing/var/dir.js @@ -0,0 +1,20 @@ +define( [ + "../../core" +], function( jQuery ) { + +return 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; +}; + +} ); diff --git a/platforms/ios/www/libs/jquery/src/traversing/var/rneedsContext.js b/platforms/ios/www/libs/jquery/src/traversing/var/rneedsContext.js new file mode 100644 index 0000000..f57fd9d --- /dev/null +++ b/platforms/ios/www/libs/jquery/src/traversing/var/rneedsContext.js @@ -0,0 +1,6 @@ +define( [ + "../../core", + "../../selector" +], function( jQuery ) { + return jQuery.expr.match.needsContext; +} ); diff --git a/platforms/ios/www/libs/jquery/src/traversing/var/siblings.js b/platforms/ios/www/libs/jquery/src/traversing/var/siblings.js new file mode 100644 index 0000000..8a8880b --- /dev/null +++ b/platforms/ios/www/libs/jquery/src/traversing/var/siblings.js @@ -0,0 +1,15 @@ +define( function() { + +return function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + +} ); diff --git a/platforms/ios/www/libs/jquery/src/var/arr.js b/platforms/ios/www/libs/jquery/src/var/arr.js new file mode 100644 index 0000000..3fd3640 --- /dev/null +++ b/platforms/ios/www/libs/jquery/src/var/arr.js @@ -0,0 +1,3 @@ +define( function() { + return []; +} ); diff --git a/platforms/ios/www/libs/jquery/src/var/class2type.js b/platforms/ios/www/libs/jquery/src/var/class2type.js new file mode 100644 index 0000000..3a6932e --- /dev/null +++ b/platforms/ios/www/libs/jquery/src/var/class2type.js @@ -0,0 +1,5 @@ +define( function() { + + // [[Class]] -> type pairs + return {}; +} ); diff --git a/platforms/ios/www/libs/jquery/src/var/concat.js b/platforms/ios/www/libs/jquery/src/var/concat.js new file mode 100644 index 0000000..9787bea --- /dev/null +++ b/platforms/ios/www/libs/jquery/src/var/concat.js @@ -0,0 +1,5 @@ +define( [ + "./arr" +], function( arr ) { + return arr.concat; +} ); diff --git a/platforms/ios/www/libs/jquery/src/var/deletedIds.js b/platforms/ios/www/libs/jquery/src/var/deletedIds.js new file mode 100644 index 0000000..3fd3640 --- /dev/null +++ b/platforms/ios/www/libs/jquery/src/var/deletedIds.js @@ -0,0 +1,3 @@ +define( function() { + return []; +} ); diff --git a/platforms/ios/www/libs/jquery/src/var/document.js b/platforms/ios/www/libs/jquery/src/var/document.js new file mode 100644 index 0000000..bb94284 --- /dev/null +++ b/platforms/ios/www/libs/jquery/src/var/document.js @@ -0,0 +1,3 @@ +define( function() { + return window.document; +} ); diff --git a/platforms/ios/www/libs/jquery/src/var/documentElement.js b/platforms/ios/www/libs/jquery/src/var/documentElement.js new file mode 100644 index 0000000..e0c0aea --- /dev/null +++ b/platforms/ios/www/libs/jquery/src/var/documentElement.js @@ -0,0 +1,5 @@ +define( [ + "./document" +], function( document ) { + return document.documentElement; +} ); diff --git a/platforms/ios/www/libs/jquery/src/var/hasOwn.js b/platforms/ios/www/libs/jquery/src/var/hasOwn.js new file mode 100644 index 0000000..92f323e --- /dev/null +++ b/platforms/ios/www/libs/jquery/src/var/hasOwn.js @@ -0,0 +1,5 @@ +define( [ + "./class2type" +], function( class2type ) { + return class2type.hasOwnProperty; +} ); diff --git a/platforms/ios/www/libs/jquery/src/var/indexOf.js b/platforms/ios/www/libs/jquery/src/var/indexOf.js new file mode 100644 index 0000000..5283841 --- /dev/null +++ b/platforms/ios/www/libs/jquery/src/var/indexOf.js @@ -0,0 +1,5 @@ +define( [ + "./arr" +], function( arr ) { + return arr.indexOf; +} ); diff --git a/platforms/ios/www/libs/jquery/src/var/pnum.js b/platforms/ios/www/libs/jquery/src/var/pnum.js new file mode 100644 index 0000000..7fd9f66 --- /dev/null +++ b/platforms/ios/www/libs/jquery/src/var/pnum.js @@ -0,0 +1,3 @@ +define( function() { + return ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; +} ); diff --git a/platforms/ios/www/libs/jquery/src/var/push.js b/platforms/ios/www/libs/jquery/src/var/push.js new file mode 100644 index 0000000..bca1a58 --- /dev/null +++ b/platforms/ios/www/libs/jquery/src/var/push.js @@ -0,0 +1,5 @@ +define( [ + "./arr" +], function( arr ) { + return arr.push; +} ); diff --git a/platforms/ios/www/libs/jquery/src/var/rcssNum.js b/platforms/ios/www/libs/jquery/src/var/rcssNum.js new file mode 100644 index 0000000..408f5e2 --- /dev/null +++ b/platforms/ios/www/libs/jquery/src/var/rcssNum.js @@ -0,0 +1,7 @@ +define( [ + "../var/pnum" +], function( pnum ) { + +return new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + +} ); diff --git a/platforms/ios/www/libs/jquery/src/var/rnotwhite.js b/platforms/ios/www/libs/jquery/src/var/rnotwhite.js new file mode 100644 index 0000000..6067728 --- /dev/null +++ b/platforms/ios/www/libs/jquery/src/var/rnotwhite.js @@ -0,0 +1,3 @@ +define( function() { + return ( /\S+/g ); +} ); diff --git a/platforms/ios/www/libs/jquery/src/var/slice.js b/platforms/ios/www/libs/jquery/src/var/slice.js new file mode 100644 index 0000000..d8206d3 --- /dev/null +++ b/platforms/ios/www/libs/jquery/src/var/slice.js @@ -0,0 +1,5 @@ +define( [ + "./arr" +], function( arr ) { + return arr.slice; +} ); diff --git a/platforms/ios/www/libs/jquery/src/var/support.js b/platforms/ios/www/libs/jquery/src/var/support.js new file mode 100644 index 0000000..3db9b67 --- /dev/null +++ b/platforms/ios/www/libs/jquery/src/var/support.js @@ -0,0 +1,5 @@ +define( function() { + + // All support tests are defined in their respective modules. + return {}; +} ); diff --git a/platforms/ios/www/libs/jquery/src/var/toString.js b/platforms/ios/www/libs/jquery/src/var/toString.js new file mode 100644 index 0000000..80ac7f1 --- /dev/null +++ b/platforms/ios/www/libs/jquery/src/var/toString.js @@ -0,0 +1,5 @@ +define( [ + "./class2type" +], function( class2type ) { + return class2type.toString; +} ); diff --git a/platforms/ios/www/libs/jquery/src/wrap.js b/platforms/ios/www/libs/jquery/src/wrap.js new file mode 100644 index 0000000..4d2c3b2 --- /dev/null +++ b/platforms/ios/www/libs/jquery/src/wrap.js @@ -0,0 +1,79 @@ +define( [ + "./core", + "./core/init", + "./manipulation", // clone + "./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/ios/www/libs/mui/.bower.json b/platforms/ios/www/libs/mui/.bower.json new file mode 100644 index 0000000..f041e78 --- /dev/null +++ b/platforms/ios/www/libs/mui/.bower.json @@ -0,0 +1,50 @@ +{ + "name": "mui", + "version": "0.5.9", + "license": "MIT", + "authors": [ + "Andres Morey " + ], + "homepage": "https://www.muicss.com", + "description": "MUI is a lightweight HTML/CSS/JS framework that follows Google's Material Design guidelines.", + "main": [ + "src/sass/mui.scss", + "src/sass/mui/_colors.scss", + "src/email/mui-email-inline.scss", + "src/email/mui-email-styletag.scss", + "packages/cdn/css/mui.css", + "packages/cdn/css/mui.min.css", + "packages/cdn/js/mui.js", + "packages/cdn/js/mui.min.js" + ], + "repository": { + "type": "git", + "url": "git://github.com/muicss/mui.git" + }, + "keywords": [ + "material design", + "frontend framework", + "html, css, and js framework", + "email css template" + ], + "dependencies": {}, + "ignore": [ + "**/.*", + "build-targets", + "e2e-tests", + "examples", + "gulpfile.js", + "node_modules", + "package.json", + "test" + ], + "_release": "0.5.9", + "_resolution": { + "type": "version", + "tag": "0.5.9", + "commit": "12b7c78ed3243af477f16aafb553d977628df82f" + }, + "_source": "https://github.com/muicss/mui.git", + "_target": "^0.5.3", + "_originalSource": "mui" +} \ No newline at end of file diff --git a/platforms/ios/www/libs/mui/AUTHORS.txt b/platforms/ios/www/libs/mui/AUTHORS.txt new file mode 100644 index 0000000..32bc435 --- /dev/null +++ b/platforms/ios/www/libs/mui/AUTHORS.txt @@ -0,0 +1,8 @@ +Authors ordered by first contribution. + +Andres Morey +Matt Bogado +Michiel Schriever +HjtHjtHjt +Aron Jones +Tushar Pokle \ No newline at end of file diff --git a/platforms/ios/www/libs/mui/CHANGELOG.md b/platforms/ios/www/libs/mui/CHANGELOG.md new file mode 100644 index 0000000..1eef2eb --- /dev/null +++ b/platforms/ios/www/libs/mui/CHANGELOG.md @@ -0,0 +1,382 @@ +# MUI Changelog + +## 0.5.9 - May 17, 2016 + +* Set z-index of .mui-select__menu to 2 to fix overlap bug with floating action + buttons + +## 0.5.8 - May 6, 2016 + +* Added react@^15.0.0 as peerDependency in NPM package.json + +## 0.5.7 - May 5, 2016 + +* Fixed Angular injector minification bug in MUI Tabs + +## 0.5.6 - April 28, 2016 + +* Bugfix to Email SASS semantic markup +* Handling timeouts gracefully in React componentWillUnmount + +## 0.5.5 - April 26, 2016 + +* Using ES6 for Angular source code +* Added MUI Angular to NPM package + +## 0.5.4 - April 22, 2016 + +* Added support for `target` attribute to React DropdownItem + +## 0.5.3 - April 16, 2016 + +* Added support for Angular Tabs directive +* Fixed focus bug with Angular Select directive + +## 0.5.2 - April 14, 2016 + +* Added support for React 15.0.1 + +## 0.5.1 - April 12, 2016 + +* Fixed bug causing onChange to be called twice on React and + +## 0.5.0 - April 7, 2016 + +* Major upgrade to Angular library - fixed many bugs and added missing features + +## 0.4.9 - April 6, 2016 + +* Fixed bug in React Dropdown that prevented menu from closing when a + DropdownItem was selected +* Fixed bug in React Dropdown that fired onClick event on DropdownItem twice +* Added support for onSelect event to React Dropdown +* Added support for React elements to React Dropdown label + +## 0.4.8 - March 30, 2016 + +* Fixed bug that kept dropdowns open when other dropdowns were clicked on + +## 0.4.7 - March 1, 2016 + +* Added JS `change` eveent handler to mui-textfield input elements +* Improved organization of MUI sass files +* Improved organization of MUI js files + +## 0.4.6 - February 18, 2016 + +* Fixed component name errors in NPM react.js module + +## 0.4.5 - February 12, 2016 + +* Changed React SelectItem component name to Option +* Added controlled controller support to React Select, Checkbox, Radio +* Bugfixes to Angular library + +## 0.4.4 - February 8, 2016 + +* Changed React input component names to Input and Textarea + +## 0.4.3 - February 7, 2016 + +* Added Angular library + +## 0.4.2 - February 3, 2016 + +* Added support for other React attributes and events +* Set default font-family to "Arial, Verdana, Tahoma" for better cross-browser + support out of the box + +## 0.4.1 - February 2, 2016 + +* Added defaultValue and controlled component support to React TextInput and + TextareaInput + +## 0.4.0 - February 2, 2016 + +* Made CSS/JS ripple node removal more robust +* Added value, defaultValue, onChange support to React Select component +* Changed boolean properties to use React built-in names: + * isAutofocus -> autoFocus + * isChecked -> checked + * isDisabled -> disabled + * isRequired -> required +* Changed other boolean properties to use React-like names: + * isFluid -> fluid + * isInline -> inline + * isInvalid -> invalid + * isJustified -> justified + * isLabelFloating -> floatingLabel +* Added support for defaultChecked to React Checkbox and Radio components + +## 0.3.0 + +* Replaced .mui-textfield--invalid with .mui--is-invalid +* Replaced .mui--text-black-{XX}, .mui--text-white-{XX} color helpers with: + * .mui--text-dark + * .mui--text-dark-secondary + * .mui--text-dark-hint + * .mui--text-light + * .mui--text-light-secondary + * .mui--text-light-hint + * .mui--text-accent + * .mui--text-accent-secondary + * .mui--text-accent-hint +* Major non-backwards compatible modifications to React library +* Added .mui--text-black and .mui--text-white +* Added 'xl' screen size and changed default widths for 'sm', 'md' and 'lg' breakpoints + +## 0.2.10 - January 12, 2016 + +* Fixed bug causing mui.overlay('off') to throw error when called before + turning on overlay + +## 0.2.9 - December 7, 2015 + +* Fixed path to js file for `muicss` npm package + +## 0.2.8 - December 3, 2015 + +* Added .mui-textfield--invalid css helper + +## 0.2.7 - December 1, 2015 + +* Replaced .mui--text-black-26 with .mui--text-black-38 to bring CSS color + helpers in line with MD spec + +## 0.2.6 - November 27, 2015 + +* Improves floating label animation by using CSS transform + +## 0.2.5 - November 27, 2015 + +* Added .mui-body--scroll-lock specifically for scroll lock + +## 0.2.4 - November 26, 2015 + +* Uses body class for scroll lock + +## 0.2.3 - November 21, 2015 + +* Upgraded to React 0.14.3 + +## 0.2.2 - November 20, 2015 + +* Improved IE10+ CSS borders for buttons, panels and select menu +* Improved positioning of select menu +* Improved logic of select menu initial scroll position +* Improved window scroll lock + +## 0.2.1 - October 16, 2015 + +* Moved textfield floating label modifier to wrapper class +* Disabled use of .mui-textfield__input and .mui-textfield__label--floating + +## 0.2.0 - October 12, 2015 + +* Added html email example layout + +## 0.2.0-rc3 - October 10, 2015 + +* Changed .mui--notransition to .mui--no-transition +* Added .mui--no-user-select + +## 0.2.0-rc2 - October 8, 2015 + +* Removed color attribute from typography classes +* Added text color helpers +* Migrated colors.css to BEM syntax + +## 0.2.0-rc1 - October 7, 2015 + +* Migrated CSS/JS and Email Libraries to BEM syntax +* Removed internal bootstrap source code dependency +* Removed MUIRoundButton from React library + +## 0.1.23 - September 19, 2015 + +* Added support for data-attributes in Tabs CSS + +## 0.1.22 - September 18, 2015 + +* Added tab events + +## 0.1.22-rc1 - September 3, 2015 + +* Removed unnecessary styles from button CSS +* Using "mui-is-" syntax for stateful CSS (e.g. mui-is-active) +* Added data-attributes syntax for buttons, dropdowns, tables, container +* Added a dark button option +* Changed floating action button naming from "floating" to "fab" + +## 0.1.21 - August 5, 2015 + +* Removed default down arrow on select component on IE + +## 0.1.20 - August 5, 2015 + +* Raising Error objects +* Decreased $mui-container-sm width by 18px to account for vertical scrollbar +* Bugfix to _outsideClick handler in react library +* Using default <select> behavior on touch devices + +## 0.1.19 - July 26, 2015 + +* Bugfix to mui-react-combined.js build script +* Removed styles on bare
          '}}),n["default"]=a,t.exports=n["default"]},{angular:"aeQg5j"}],10:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i=window.angular,r=babelHelpers.interopRequireDefault(i),a="mui.col";r["default"].module(a,[]).directive("muiCol",function(){return{restrict:"AE",scope:!0,replace:!0,template:"
          ",transclude:!0,link:function(e,t,n,i,a){a(e,function(e){t.append(e)});var l={xs:"mui-col-xs-",sm:"mui-col-sm-",md:"mui-col-md-",lg:"mui-col-lg-","xs-offset":"mui-col-xs-offset-","sm-offset":"mui-col-sm-offset-","md-offset":"mui-col-md-offset-","lg-offset":"mui-col-lg-offset-"};r["default"].forEach(l,function(e,i){var r=n[n.$normalize(i)];r&&t.addClass(e+r)})}}}),n["default"]=a,t.exports=n["default"]},{angular:"aeQg5j"}],11:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i=window.angular,r=babelHelpers.interopRequireDefault(i),a="mui.container";r["default"].module(a,[]).directive("muiContainer",function(){return{restrict:"AE",template:'
          ',transclude:!0,scope:!0,replace:!0,link:function(e,t,n,i,a){a(e,function(e){t.append(e)}),r["default"].isUndefined(n.fluid)||t.removeClass("mui-container").addClass("mui-container-fluid")}}}),n["default"]=a,t.exports=n["default"]},{angular:"aeQg5j"}],12:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i=window.angular,r=babelHelpers.interopRequireDefault(i),a="mui.divider";r["default"].module(a,[]).directive("muiDivider",function(){return{restrict:"AE",replace:!0,compile:function(e,t){e.addClass("mui-divider")}}}),n["default"]=a,t.exports=n["default"]},{angular:"aeQg5j"}],13:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i=window.angular,r=babelHelpers.interopRequireDefault(i),a="mui.dropdown-item";r["default"].module(a,[]).directive("muiDropdownItem",function(){return{restrict:"AE",replace:!0,scope:{link:"@"},transclude:!0,template:'
        • '}}),n["default"]=a,t.exports=n["default"]},{angular:"aeQg5j"}],14:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i=window.angular,r=babelHelpers.interopRequireDefault(i),a="mui.dropdown";r["default"].module(a,[]).directive("muiDropdown",["$timeout","$compile",function(e,t){return{restrict:"AE",transclude:!0,replace:!0,scope:{variant:"@",color:"@",size:"@",open:"=?",ngDisabled:"="},template:'
            ',link:function(e,t,n){function i(){e.open=!1,e.$apply()}var a,l,o="mui-dropdown__menu",u="mui--is-open",s="mui-dropdown__menu--right",d=r["default"].isUndefined;a=r["default"].element(t[0].querySelector("."+o)),l=r["default"].element(t[0].querySelector(".mui-btn")),a.css("margin-top","-3px"),d(n.open)||(e.open=!0),d(n.disabled)||l.attr("disabled",!0),d(n.rightAlign)||a.addClass(s),d(n.noCaret)?l.html(n.label+" "):l.html(n.label),e.$watch("open",function(e){e===!0?(a.addClass(u),document.addEventListener("click",i)):e===!1&&(a.removeClass(u),document.removeEventListener("click",i))}),e.onClick=function(t){e.disabled||(t.preventDefault(),t.stopPropagation(),e.open?e.open=!1:e.open=!0)}}}}]),n["default"]=a,t.exports=n["default"]},{angular:"aeQg5j"}],15:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i=window.angular,r=babelHelpers.interopRequireDefault(i),a="mui.form";r["default"].module(a,[]).directive("muiFormInline",function(){return{restrict:"A",link:function(e,t,n){t.addClass("mui-form--inline")}}}),n["default"]=a,t.exports=n["default"]},{angular:"aeQg5j"}],16:[function(e,t,n){"use strict";function i(e,t){t?e.removeClass(u).addClass(s):e.removeClass(s).addClass(u)}function r(e){var t,n,r="mui--is-dirty";return t={floatLabel:"@",hint:"@",label:"@",ngDisabled:"=",ngModel:"="},n='
            ',e?(t.rows="@",n+=''):(t.type="@",n+=''),n+="
            ",["$timeout",function(a){return{restrict:"AE",require:["ngModel"],scope:t,replace:!0,template:n,link:function(t,n,o,u){var s=n.find("input")||n.find("textarea"),d=n.find("label"),c=u[0],f=(u[1],l["default"].isUndefined),p=s[0];p&&(p._muiTextfield=!0),n.removeAttr("ng-change"),n.removeAttr("ng-model"),e?t.rows=t.rows||2:t.type=t.type||"text",f(o.autofocus)||s[0].focus(),f(o.required)||s.prop("required",!0),f(o.invalid)||s.addClass("mui--is-invalid"),i(s,t.ngModel),f(t.floatLabel)||(n.addClass("mui-textfield--float-label"),a(function(){d.css({transition:".15s ease-out","-webkit-transition":".15s ease-out","-moz-transition":".15s ease-out","-o-transition":".15s ease-out","-ms-transition":".15s ease-out"})},150)),t.onChange=function(){var e=t.ngModel;c&&c.$setViewValue(e),i(s,e),s.addClass(r)},t.onFocus=function(){s.addClass(r)}}}}]}Object.defineProperty(n,"__esModule",{value:!0});var a=window.angular,l=babelHelpers.interopRequireDefault(a),o="mui.input",u="mui--is-empty",s="mui--is-not-empty";l["default"].module(o,[]).directive("muiInput",r(!1)).directive("muiTextarea",r(!0)),n["default"]=o,t.exports=n["default"]},{angular:"aeQg5j"}],17:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i=window.angular,r=babelHelpers.interopRequireDefault(i),a="mui.panel";r["default"].module(a,[]).directive("muiPanel",function(){return{restrict:"AE",replace:!0,scope:!0,template:'
            ',transclude:!0,link:function(e,t,n,i,r){r(e,function(e){t.append(e)})}}}),n["default"]=a,t.exports=n["default"]},{angular:"aeQg5j"}],18:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i=window.angular,r=babelHelpers.interopRequireDefault(i),a="mui.radio";r["default"].module(a,[]).directive("muiRadio",function(){return{restrict:"AE",replace:!0,require:["?ngModel"],scope:{label:"@",name:"@",value:"@",ngModel:"=",ngDisabled:"="},template:'
            '}}),n["default"]=a,t.exports=n["default"]},{angular:"aeQg5j"}],19:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i=window.angular,r=babelHelpers.interopRequireDefault(i),a="mui.row";r["default"].module("mui.row",[]).directive("muiRow",function(){return{restrict:"AE",scope:!0,replace:!0,template:'
            ',transclude:!0,link:function(e,t,n,i,r){r(e,function(e){t.append(e)})}}}),n["default"]=a,t.exports=n["default"]},{angular:"aeQg5j"}],20:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i=window.angular,r=babelHelpers.interopRequireDefault(i),a=e("../js/lib/forms"),l=babelHelpers.interopRequireWildcard(a),o=e("../js/lib/util"),u=babelHelpers.interopRequireWildcard(o),s=e("../js/lib/jqLite"),d=babelHelpers.interopRequireWildcard(s),c="mui.select";r["default"].module(c,[]).directive("muiSelect",["$timeout",function(e){return{restrict:"AE",require:["ngModel"],scope:{name:"@",ngDisabled:"=",ngModel:"="},replace:!0,transclude:!0,template:'
            {{option.label}}
            ',link:function(t,n,i,a,o){function s(){t.isOpen=!1,t.$digest()}var c=n,f=n.find("div"),p=n.find("select"),m=r["default"].isUndefined;p[0]._muiSelect=!0,t.options=[],t.isOpen=!1,t.useDefault=!1,t.origTabIndex=p[0].tabIndex,t.menuIndex=0,m(i.useDefault)||(t.useDefault=!0),c.prop("tabIndex",-1),o(function(e){var n,i;for(i in e)n=e[i],"MUI-OPTION"===n.tagName&&t.options.push({value:n.getAttribute("value"),label:n.getAttribute("label")})}),t.onClick=function(){t.useDefault!==!0&&(t.isOpen=!0,c[0].focus())},t.onFocus=function(){if(t.useDefault!==!0){var e=p[0];t.origTabIndex=e.tabIndex,e.tabIndex=-1,c[0].focus()}},t.onMousedown=function(e){t.useDefault!==!0&&e.preventDefault()},t.onWrapperBlur=function(){p[0].tabIndex=t.origTabIndex},t.onWrapperFocus=function(e){return p[0].disabled?c[0].blur():void 0},t.onWrapperKeydown=function(e){var n=e.keyCode;if(t.isOpen===!1)32!==n&&38!==n&&40!==n||(e.preventDefault(),t.isOpen=!0);else{if(9===n)return t.isOpen=!1;27!==n&&40!==n&&38!==n&&13!==n||e.preventDefault(),27===n?t.isOpen=!1:40===n?t.menuIndex0&&(t.menuIndex-=1):13===n&&(t.ngModel=t.options[t.menuIndex].value,t.isOpen=!1)}},t.chooseOption=function(e){t.ngModel=e.value,t.isOpen=!1},t.$watch("isOpen",function(i,r){if(i!==r&&t.useDefault!==!0)if(i===!0){u.enableScrollLock();var a,o=t.ngModel,c=t.options,m=c.length;for(a=0;m>a;a++)if(c[a].value===o){t.menuIndex=a;break}var v=l.getMenuPositionalCSS(n[0],t.options.length,t.menuIndex);f.css(v),d.scrollTop(f[0],v.scrollTop),e(function(){d.on(document,"click",s),d.on(window,"resize",s)})}else p[0].focus(),u.disableScrollLock(),d.off(document,"click",s),d.off(window,"resize",s)})}}}]),n["default"]=c,t.exports=n["default"]},{"../js/lib/forms":3,"../js/lib/jqLite":4,"../js/lib/util":5,angular:"aeQg5j"}],21:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i=window.angular,r=babelHelpers.interopRequireDefault(i),a=e("../js/lib/jqLite"),l=(babelHelpers.interopRequireWildcard(a),"mui.tabs");r["default"].module(l,[]).directive("muiTabs",function(){return{restrict:"EA",transclude:!0,scope:{selectedId:"=?selected",onChange:"&?"},template:'',controller:["$scope",function(e){var t=0;e.tabs=[],this.addTab=function(n){var i=t;return t+=1,e.tabs.push({label:n.label}),n.isActive&&(e.selectedId=i),i}}],link:function(e,t,n,i,a){var l=r["default"].isUndefined;l(e.selectedId)&&(e.selectedId=0),e.justified=!1,l(n.justified)||(e.justified=!0),e.onClick=function(t){t!==e.selectedId&&(e.selectedId=t,e.onChange&&e.$$postDigest(e.onChange))},a(e,function(e){t.append(e)})}}}).directive("muiTab",["$parse",function(e){return{require:"^?muiTabs",restrict:"AE",scope:{active:"&?",label:"@?"},transclude:!0,template:'
            ',link:function(t,n,i,r,a){var l=e(i.onSelect),o=e(i.onDeselect),u=t.$parent.$parent;t.tabId=null,r&&(t.tabId=r.addTab({label:t.label,isActive:Boolean(t.active)})),a(t,function(e){n.find("div").append(e)}),t.$parent.$watch("selectedId",function(e,n){e!==n&&(e===t.tabId&&l(u),n===t.tabId&&o(u))})}}}]),n["default"]=l,t.exports=n["default"]},{"../js/lib/jqLite":4,angular:"aeQg5j"}]},{},[1]); \ No newline at end of file diff --git a/platforms/ios/www/libs/mui/packages/cdn/css/mui.css b/platforms/ios/www/libs/mui/packages/cdn/css/mui.css new file mode 100644 index 0000000..2a65b9e --- /dev/null +++ b/platforms/ios/www/libs/mui/packages/cdn/css/mui.css @@ -0,0 +1,2522 @@ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS and IE text size adjust after device 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, +menu, +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/10/11, Safari, and Firefox < 22. + */ +[hidden], +template { + display: none; +} + +/* Links + ========================================================================== */ +/** + * Remove the gray background color from active links in IE 10. + */ +a { + background-color: transparent; +} + +/** + * Improve readability of focused elements when they are also in an + * active/hover state. + */ +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 { + 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"], +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. + */ +input[type="search"] { + -webkit-appearance: textfield; + /* 1 */ + box-sizing: content-box; + /* 2 */ +} + +/** + * 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; +} + +/** + * MUI Colors module + */ +/** + * MUI Reboot + */ +* { + box-sizing: border-box; +} + +*:before, +*:after { + box-sizing: border-box; +} + +html { + font-size: 10px; + -webkit-tap-highlight-color: transparent; +} + +body { + font-family: Arial, Verdana, Tahoma; + font-size: 14px; + font-weight: 400; + line-height: 1.429; + color: rgba(0, 0, 0, 0.87); + background-color: #FFF; +} + +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +a { + color: #2196F3; + text-decoration: none; +} + +a:hover, a:focus { + color: #1976D2; + text-decoration: underline; +} + +a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +p { + margin: 0 0 10px; +} + +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} + +figure { + margin: 0; +} + +img { + vertical-align: middle; +} + +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + height: 1px; + background-color: rgba(0, 0, 0, 0.12); +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 10px; + font-size: 21px; + color: rgba(0, 0, 0, 0.87); + line-height: inherit; + border: 0; +} + +input[type="search"] { + box-sizing: border-box; + -webkit-appearance: none; +} + +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +input[type="radio"]:disabled, +input[type="checkbox"]:disabled { + cursor: not-allowed; +} + +strong { + font-weight: 700; +} + +abbr[title] { + cursor: help; + border-bottom: 1px dotted #2196F3; +} + +h1, h2, h3 { + margin-top: 20px; + margin-bottom: 10px; +} + +h4, h5, h6 { + margin-top: 10px; + margin-bottom: 10px; +} + +/** + * MUI Appbar + */ +.mui--appbar-height { + height: 56px; +} + +.mui--appbar-min-height, .mui-appbar { + min-height: 56px; +} + +.mui--appbar-line-height { + line-height: 56px; +} + +.mui--appbar-top { + top: 56px; +} + +@media (orientation: landscape) and (max-height: 480px) { + .mui--appbar-height { + height: 48px; + } + .mui--appbar-min-height, .mui-appbar { + min-height: 48px; + } + .mui--appbar-line-height { + line-height: 48px; + } + .mui--appbar-top { + top: 48px; + } +} + +@media (min-width: 480px) { + .mui--appbar-height { + height: 64px; + } + .mui--appbar-min-height, .mui-appbar { + min-height: 64px; + } + .mui--appbar-line-height { + line-height: 64px; + } + .mui--appbar-top { + top: 64px; + } +} + +.mui-appbar { + background-color: #2196F3; + color: #FFF; +} + +/** + * MUI Buttons + */ +.mui-btn { + animation-duration: 0.0001s; + animation-name: mui-node-inserted; + font-weight: 500; + font-size: 14px; + line-height: 18px; + text-transform: uppercase; + color: rgba(0, 0, 0, 0.87); + background-color: #FFF; + transition: all 0.2s ease-in-out; + display: inline-block; + height: 36px; + padding: 0 26px; + margin-top: 6px; + margin-bottom: 6px; + border: none; + border-radius: 2px; + cursor: pointer; + -ms-touch-action: manipulation; + touch-action: manipulation; + background-image: none; + text-align: center; + line-height: 36px; + vertical-align: middle; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + font-size: 14px; + letter-spacing: 0.03em; + position: relative; + overflow: hidden; +} + +.mui-btn:hover, .mui-btn:focus, .mui-btn:active { + color: rgba(0, 0, 0, 0.87); + background-color: white; +} + +.mui-btn[disabled]:hover, .mui-btn[disabled]:focus, .mui-btn[disabled]:active { + color: rgba(0, 0, 0, 0.87); + background-color: #FFF; +} + +.mui-btn.mui-btn--flat { + color: rgba(0, 0, 0, 0.87); + background-color: transparent; +} + +.mui-btn.mui-btn--flat:hover, .mui-btn.mui-btn--flat:focus, .mui-btn.mui-btn--flat:active { + color: rgba(0, 0, 0, 0.87); + background-color: #f2f2f2; +} + +.mui-btn.mui-btn--flat[disabled]:hover, .mui-btn.mui-btn--flat[disabled]:focus, .mui-btn.mui-btn--flat[disabled]:active { + color: rgba(0, 0, 0, 0.87); + background-color: transparent; +} + +.mui-btn:hover, .mui-btn:focus, .mui-btn:active { + outline: 0; + text-decoration: none; + color: rgba(0, 0, 0, 0.87); +} + +.mui-btn:hover, .mui-btn:focus { + box-shadow: 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); +} + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mui-btn:hover, .mui-btn:focus { + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.12), -1px 0px 2px rgba(0, 0, 0, 0.12), 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); + } +} + +.mui-btn:active { + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); +} + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mui-btn:active { + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.12), -1px 0px 2px rgba(0, 0, 0, 0.12), 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); + } +} + +.mui-btn:disabled, .mui-btn.mui--is-disabled { + cursor: not-allowed; + pointer-events: none; + opacity: 0.60; + box-shadow: none; +} + +.mui-btn + .mui-btn { + margin-left: 8px; +} + +.mui-btn--flat { + background-color: transparent; +} + +.mui-btn--flat:hover, .mui-btn--flat:focus, .mui-btn--flat:active { + box-shadow: none; + background-color: #f2f2f2; +} + +.mui-btn--raised, .mui-btn--fab { + box-shadow: 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); +} + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mui-btn--raised, .mui-btn--fab { + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.12), -1px 0px 2px rgba(0, 0, 0, 0.12), 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); + } +} + +.mui-btn--raised:active, .mui-btn--fab:active { + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); +} + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mui-btn--raised:active, .mui-btn--fab:active { + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.12), -1px 0px 2px rgba(0, 0, 0, 0.12), 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); + } +} + +.mui-btn--fab { + position: relative; + padding: 0; + width: 55px; + height: 55px; + line-height: 55px; + border-radius: 50%; + z-index: 1; +} + +.mui-btn--primary { + color: #FFF; + background-color: #2196F3; +} + +.mui-btn--primary:hover, .mui-btn--primary:focus, .mui-btn--primary:active { + color: #FFF; + background-color: #39a1f4; +} + +.mui-btn--primary[disabled]:hover, .mui-btn--primary[disabled]:focus, .mui-btn--primary[disabled]:active { + color: #FFF; + background-color: #2196F3; +} + +.mui-btn--primary.mui-btn--flat { + color: #2196F3; + background-color: transparent; +} + +.mui-btn--primary.mui-btn--flat:hover, .mui-btn--primary.mui-btn--flat:focus, .mui-btn--primary.mui-btn--flat:active { + color: #2196F3; + background-color: #f2f2f2; +} + +.mui-btn--primary.mui-btn--flat[disabled]:hover, .mui-btn--primary.mui-btn--flat[disabled]:focus, .mui-btn--primary.mui-btn--flat[disabled]:active { + color: #2196F3; + background-color: transparent; +} + +.mui-btn--dark { + color: #FFF; + background-color: #424242; +} + +.mui-btn--dark:hover, .mui-btn--dark:focus, .mui-btn--dark:active { + color: #FFF; + background-color: #4f4f4f; +} + +.mui-btn--dark[disabled]:hover, .mui-btn--dark[disabled]:focus, .mui-btn--dark[disabled]:active { + color: #FFF; + background-color: #424242; +} + +.mui-btn--dark.mui-btn--flat { + color: #424242; + background-color: transparent; +} + +.mui-btn--dark.mui-btn--flat:hover, .mui-btn--dark.mui-btn--flat:focus, .mui-btn--dark.mui-btn--flat:active { + color: #424242; + background-color: #f2f2f2; +} + +.mui-btn--dark.mui-btn--flat[disabled]:hover, .mui-btn--dark.mui-btn--flat[disabled]:focus, .mui-btn--dark.mui-btn--flat[disabled]:active { + color: #424242; + background-color: transparent; +} + +.mui-btn--danger { + color: #FFF; + background-color: #F44336; +} + +.mui-btn--danger:hover, .mui-btn--danger:focus, .mui-btn--danger:active { + color: #FFF; + background-color: #f55a4e; +} + +.mui-btn--danger[disabled]:hover, .mui-btn--danger[disabled]:focus, .mui-btn--danger[disabled]:active { + color: #FFF; + background-color: #F44336; +} + +.mui-btn--danger.mui-btn--flat { + color: #F44336; + background-color: transparent; +} + +.mui-btn--danger.mui-btn--flat:hover, .mui-btn--danger.mui-btn--flat:focus, .mui-btn--danger.mui-btn--flat:active { + color: #F44336; + background-color: #f2f2f2; +} + +.mui-btn--danger.mui-btn--flat[disabled]:hover, .mui-btn--danger.mui-btn--flat[disabled]:focus, .mui-btn--danger.mui-btn--flat[disabled]:active { + color: #F44336; + background-color: transparent; +} + +.mui-btn--accent { + color: #FFF; + background-color: #FF4081; +} + +.mui-btn--accent:hover, .mui-btn--accent:focus, .mui-btn--accent:active { + color: #FFF; + background-color: #ff5a92; +} + +.mui-btn--accent[disabled]:hover, .mui-btn--accent[disabled]:focus, .mui-btn--accent[disabled]:active { + color: #FFF; + background-color: #FF4081; +} + +.mui-btn--accent.mui-btn--flat { + color: #FF4081; + background-color: transparent; +} + +.mui-btn--accent.mui-btn--flat:hover, .mui-btn--accent.mui-btn--flat:focus, .mui-btn--accent.mui-btn--flat:active { + color: #FF4081; + background-color: #f2f2f2; +} + +.mui-btn--accent.mui-btn--flat[disabled]:hover, .mui-btn--accent.mui-btn--flat[disabled]:focus, .mui-btn--accent.mui-btn--flat[disabled]:active { + color: #FF4081; + background-color: transparent; +} + +.mui-btn--small { + height: 30.6px; + line-height: 30.6px; + padding: 0 16px; + font-size: 13px; +} + +.mui-btn--large { + height: 54px; + line-height: 54px; + padding: 0 26px; + font-size: 14px; +} + +.mui-btn--fab.mui-btn--small { + width: 44px; + height: 44px; + line-height: 44px; +} + +.mui-btn--fab.mui-btn--large { + width: 75px; + height: 75px; + line-height: 75px; +} + +/** + * MUI Checkboxe and Radio Components + */ +.mui-radio, +.mui-checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} + +.mui-radio > label, +.mui-checkbox > label { + min-height: 20px; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} + +.mui-radio > label > input[type="radio"], +.mui-radio--inline > label > input[type="radio"], +.mui-checkbox > label > input[type="checkbox"], +.mui-checkbox--inline > label > input[type="checkbox"] { + position: absolute; + margin-left: -20px; + margin-top: 4px; +} + +.mui-radio + .mui-radio, +.mui-checkbox + .mui-checkbox { + margin-top: -5px; +} + +.mui-radio--inline, +.mui-checkbox--inline { + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + vertical-align: middle; + font-weight: normal; + cursor: pointer; +} + +.mui-radio--inline > input[type="radio"], +.mui-radio--inline > input[type="checkbox"], +.mui-radio--inline > label > input[type="radio"], +.mui-radio--inline > label > input[type="checkbox"], +.mui-checkbox--inline > input[type="radio"], +.mui-checkbox--inline > input[type="checkbox"], +.mui-checkbox--inline > label > input[type="radio"], +.mui-checkbox--inline > label > input[type="checkbox"] { + margin: 4px 0 0; + line-height: normal; +} + +.mui-radio--inline + .mui-radio--inline, +.mui-checkbox--inline + .mui-checkbox--inline { + margin-top: 0; + margin-left: 10px; +} + +/** + * MUI Container module + */ +.mui-container { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} + +.mui-container:before, .mui-container:after { + content: " "; + display: table; +} + +.mui-container:after { + clear: both; +} + +@media (min-width: 544px) { + .mui-container { + max-width: 570px; + } +} + +@media (min-width: 768px) { + .mui-container { + max-width: 740px; + } +} + +@media (min-width: 992px) { + .mui-container { + max-width: 960px; + } +} + +@media (min-width: 1200px) { + .mui-container { + max-width: 1170px; + } +} + +.mui-container-fluid { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} + +.mui-container-fluid:before, .mui-container-fluid:after { + content: " "; + display: table; +} + +.mui-container-fluid:after { + clear: both; +} + +/** + * MUI Divider Component and CSS Helpers + */ +.mui-divider { + display: block; + height: 1px; + background-color: rgba(0, 0, 0, 0.12); +} + +.mui--divider-top { + border-top: 1px solid rgba(0, 0, 0, 0.12); +} + +.mui--divider-bottom { + border-bottom: 1px solid rgba(0, 0, 0, 0.12); +} + +.mui--divider-left { + border-left: 1px solid rgba(0, 0, 0, 0.12); +} + +.mui--divider-right { + border-right: 1px solid rgba(0, 0, 0, 0.12); +} + +/** + * MUI Dropdown module + */ +.mui-dropdown { + display: inline-block; + position: relative; +} + +[data-mui-toggle="dropdown"] { + animation-duration: 0.0001s; + animation-name: mui-node-inserted; + outline: 0; +} + +.mui-dropdown__menu { + position: absolute; + top: 100%; + left: 0; + display: none; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + list-style: none; + font-size: 14px; + text-align: left; + background-color: #FFF; + border-radius: 2px; + z-index: 1; + background-clip: padding-box; +} + +.mui-dropdown__menu.mui--is-open { + display: block; +} + +.mui-dropdown__menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.429; + color: rgba(0, 0, 0, 0.87); + white-space: nowrap; +} + +.mui-dropdown__menu > li > a:hover, .mui-dropdown__menu > li > a:focus { + text-decoration: none; + color: rgba(0, 0, 0, 0.87); + background-color: #EEEEEE; +} + +.mui-dropdown__menu > .mui--is-disabled > a, .mui-dropdown__menu > .mui--is-disabled > a:hover, .mui-dropdown__menu > .mui--is-disabled > a:focus { + color: #EEEEEE; +} + +.mui-dropdown__menu > .mui--is-disabled > a:hover, .mui-dropdown__menu > .mui--is-disabled > a:focus { + text-decoration: none; + background-color: transparent; + background-image: none; + cursor: not-allowed; +} + +.mui-dropdown__menu--right { + left: auto; + right: 0; +} + +/** + * MUI Form Component + */ +@media (min-width: 544px) { + .mui-form--inline > .mui-textfield { + display: inline-block; + margin-bottom: 0; + } + .mui-form--inline > .mui-radio, + .mui-form--inline > .mui-checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .mui-form--inline > .mui-radio > label, + .mui-form--inline > .mui-checkbox > label { + padding-left: 0; + } + .mui-form--inline > .mui-radio > label > input[type="radio"], + .mui-form--inline > .mui-checkbox > label > input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .mui-form--inline > .mui-select { + display: inline-block; + } + .mui-form--inline > .mui-btn { + margin-bottom: 0; + margin-top: 0; + vertical-align: bottom; + } +} + +/** + * MUI Grid module + */ +.mui-row { + margin-left: -15px; + margin-right: -15px; +} + +.mui-row:before, .mui-row:after { + content: " "; + display: table; +} + +.mui-row:after { + clear: both; +} + +.mui-col-xs-1, .mui-col-sm-1, .mui-col-md-1, .mui-col-lg-1, .mui-col-xs-2, .mui-col-sm-2, .mui-col-md-2, .mui-col-lg-2, .mui-col-xs-3, .mui-col-sm-3, .mui-col-md-3, .mui-col-lg-3, .mui-col-xs-4, .mui-col-sm-4, .mui-col-md-4, .mui-col-lg-4, .mui-col-xs-5, .mui-col-sm-5, .mui-col-md-5, .mui-col-lg-5, .mui-col-xs-6, .mui-col-sm-6, .mui-col-md-6, .mui-col-lg-6, .mui-col-xs-7, .mui-col-sm-7, .mui-col-md-7, .mui-col-lg-7, .mui-col-xs-8, .mui-col-sm-8, .mui-col-md-8, .mui-col-lg-8, .mui-col-xs-9, .mui-col-sm-9, .mui-col-md-9, .mui-col-lg-9, .mui-col-xs-10, .mui-col-sm-10, .mui-col-md-10, .mui-col-lg-10, .mui-col-xs-11, .mui-col-sm-11, .mui-col-md-11, .mui-col-lg-11, .mui-col-xs-12, .mui-col-sm-12, .mui-col-md-12, .mui-col-lg-12 { + min-height: 1px; + padding-left: 15px; + padding-right: 15px; +} + +.mui-col-xs-1, .mui-col-xs-2, .mui-col-xs-3, .mui-col-xs-4, .mui-col-xs-5, .mui-col-xs-6, .mui-col-xs-7, .mui-col-xs-8, .mui-col-xs-9, .mui-col-xs-10, .mui-col-xs-11, .mui-col-xs-12 { + float: left; +} + +.mui-col-xs-1 { + width: 8.33333%; +} + +.mui-col-xs-2 { + width: 16.66667%; +} + +.mui-col-xs-3 { + width: 25%; +} + +.mui-col-xs-4 { + width: 33.33333%; +} + +.mui-col-xs-5 { + width: 41.66667%; +} + +.mui-col-xs-6 { + width: 50%; +} + +.mui-col-xs-7 { + width: 58.33333%; +} + +.mui-col-xs-8 { + width: 66.66667%; +} + +.mui-col-xs-9 { + width: 75%; +} + +.mui-col-xs-10 { + width: 83.33333%; +} + +.mui-col-xs-11 { + width: 91.66667%; +} + +.mui-col-xs-12 { + width: 100%; +} + +.mui-col-xs-offset-0 { + margin-left: 0%; +} + +.mui-col-xs-offset-1 { + margin-left: 8.33333%; +} + +.mui-col-xs-offset-2 { + margin-left: 16.66667%; +} + +.mui-col-xs-offset-3 { + margin-left: 25%; +} + +.mui-col-xs-offset-4 { + margin-left: 33.33333%; +} + +.mui-col-xs-offset-5 { + margin-left: 41.66667%; +} + +.mui-col-xs-offset-6 { + margin-left: 50%; +} + +.mui-col-xs-offset-7 { + margin-left: 58.33333%; +} + +.mui-col-xs-offset-8 { + margin-left: 66.66667%; +} + +.mui-col-xs-offset-9 { + margin-left: 75%; +} + +.mui-col-xs-offset-10 { + margin-left: 83.33333%; +} + +.mui-col-xs-offset-11 { + margin-left: 91.66667%; +} + +.mui-col-xs-offset-12 { + margin-left: 100%; +} + +@media (min-width: 544px) { + .mui-col-sm-1, .mui-col-sm-2, .mui-col-sm-3, .mui-col-sm-4, .mui-col-sm-5, .mui-col-sm-6, .mui-col-sm-7, .mui-col-sm-8, .mui-col-sm-9, .mui-col-sm-10, .mui-col-sm-11, .mui-col-sm-12 { + float: left; + } + .mui-col-sm-1 { + width: 8.33333%; + } + .mui-col-sm-2 { + width: 16.66667%; + } + .mui-col-sm-3 { + width: 25%; + } + .mui-col-sm-4 { + width: 33.33333%; + } + .mui-col-sm-5 { + width: 41.66667%; + } + .mui-col-sm-6 { + width: 50%; + } + .mui-col-sm-7 { + width: 58.33333%; + } + .mui-col-sm-8 { + width: 66.66667%; + } + .mui-col-sm-9 { + width: 75%; + } + .mui-col-sm-10 { + width: 83.33333%; + } + .mui-col-sm-11 { + width: 91.66667%; + } + .mui-col-sm-12 { + width: 100%; + } + .mui-col-sm-offset-0 { + margin-left: 0%; + } + .mui-col-sm-offset-1 { + margin-left: 8.33333%; + } + .mui-col-sm-offset-2 { + margin-left: 16.66667%; + } + .mui-col-sm-offset-3 { + margin-left: 25%; + } + .mui-col-sm-offset-4 { + margin-left: 33.33333%; + } + .mui-col-sm-offset-5 { + margin-left: 41.66667%; + } + .mui-col-sm-offset-6 { + margin-left: 50%; + } + .mui-col-sm-offset-7 { + margin-left: 58.33333%; + } + .mui-col-sm-offset-8 { + margin-left: 66.66667%; + } + .mui-col-sm-offset-9 { + margin-left: 75%; + } + .mui-col-sm-offset-10 { + margin-left: 83.33333%; + } + .mui-col-sm-offset-11 { + margin-left: 91.66667%; + } + .mui-col-sm-offset-12 { + margin-left: 100%; + } +} + +@media (min-width: 768px) { + .mui-col-md-1, .mui-col-md-2, .mui-col-md-3, .mui-col-md-4, .mui-col-md-5, .mui-col-md-6, .mui-col-md-7, .mui-col-md-8, .mui-col-md-9, .mui-col-md-10, .mui-col-md-11, .mui-col-md-12 { + float: left; + } + .mui-col-md-1 { + width: 8.33333%; + } + .mui-col-md-2 { + width: 16.66667%; + } + .mui-col-md-3 { + width: 25%; + } + .mui-col-md-4 { + width: 33.33333%; + } + .mui-col-md-5 { + width: 41.66667%; + } + .mui-col-md-6 { + width: 50%; + } + .mui-col-md-7 { + width: 58.33333%; + } + .mui-col-md-8 { + width: 66.66667%; + } + .mui-col-md-9 { + width: 75%; + } + .mui-col-md-10 { + width: 83.33333%; + } + .mui-col-md-11 { + width: 91.66667%; + } + .mui-col-md-12 { + width: 100%; + } + .mui-col-md-offset-0 { + margin-left: 0%; + } + .mui-col-md-offset-1 { + margin-left: 8.33333%; + } + .mui-col-md-offset-2 { + margin-left: 16.66667%; + } + .mui-col-md-offset-3 { + margin-left: 25%; + } + .mui-col-md-offset-4 { + margin-left: 33.33333%; + } + .mui-col-md-offset-5 { + margin-left: 41.66667%; + } + .mui-col-md-offset-6 { + margin-left: 50%; + } + .mui-col-md-offset-7 { + margin-left: 58.33333%; + } + .mui-col-md-offset-8 { + margin-left: 66.66667%; + } + .mui-col-md-offset-9 { + margin-left: 75%; + } + .mui-col-md-offset-10 { + margin-left: 83.33333%; + } + .mui-col-md-offset-11 { + margin-left: 91.66667%; + } + .mui-col-md-offset-12 { + margin-left: 100%; + } +} + +@media (min-width: 992px) { + .mui-col-lg-1, .mui-col-lg-2, .mui-col-lg-3, .mui-col-lg-4, .mui-col-lg-5, .mui-col-lg-6, .mui-col-lg-7, .mui-col-lg-8, .mui-col-lg-9, .mui-col-lg-10, .mui-col-lg-11, .mui-col-lg-12 { + float: left; + } + .mui-col-lg-1 { + width: 8.33333%; + } + .mui-col-lg-2 { + width: 16.66667%; + } + .mui-col-lg-3 { + width: 25%; + } + .mui-col-lg-4 { + width: 33.33333%; + } + .mui-col-lg-5 { + width: 41.66667%; + } + .mui-col-lg-6 { + width: 50%; + } + .mui-col-lg-7 { + width: 58.33333%; + } + .mui-col-lg-8 { + width: 66.66667%; + } + .mui-col-lg-9 { + width: 75%; + } + .mui-col-lg-10 { + width: 83.33333%; + } + .mui-col-lg-11 { + width: 91.66667%; + } + .mui-col-lg-12 { + width: 100%; + } + .mui-col-lg-offset-0 { + margin-left: 0%; + } + .mui-col-lg-offset-1 { + margin-left: 8.33333%; + } + .mui-col-lg-offset-2 { + margin-left: 16.66667%; + } + .mui-col-lg-offset-3 { + margin-left: 25%; + } + .mui-col-lg-offset-4 { + margin-left: 33.33333%; + } + .mui-col-lg-offset-5 { + margin-left: 41.66667%; + } + .mui-col-lg-offset-6 { + margin-left: 50%; + } + .mui-col-lg-offset-7 { + margin-left: 58.33333%; + } + .mui-col-lg-offset-8 { + margin-left: 66.66667%; + } + .mui-col-lg-offset-9 { + margin-left: 75%; + } + .mui-col-lg-offset-10 { + margin-left: 83.33333%; + } + .mui-col-lg-offset-11 { + margin-left: 91.66667%; + } + .mui-col-lg-offset-12 { + margin-left: 100%; + } +} + +@media (min-width: 1200px) { + .mui-col-xl-1, .mui-col-xl-2, .mui-col-xl-3, .mui-col-xl-4, .mui-col-xl-5, .mui-col-xl-6, .mui-col-xl-7, .mui-col-xl-8, .mui-col-xl-9, .mui-col-xl-10, .mui-col-xl-11, .mui-col-xl-12 { + float: left; + } + .mui-col-xl-1 { + width: 8.33333%; + } + .mui-col-xl-2 { + width: 16.66667%; + } + .mui-col-xl-3 { + width: 25%; + } + .mui-col-xl-4 { + width: 33.33333%; + } + .mui-col-xl-5 { + width: 41.66667%; + } + .mui-col-xl-6 { + width: 50%; + } + .mui-col-xl-7 { + width: 58.33333%; + } + .mui-col-xl-8 { + width: 66.66667%; + } + .mui-col-xl-9 { + width: 75%; + } + .mui-col-xl-10 { + width: 83.33333%; + } + .mui-col-xl-11 { + width: 91.66667%; + } + .mui-col-xl-12 { + width: 100%; + } + .mui-col-xl-offset-0 { + margin-left: 0%; + } + .mui-col-xl-offset-1 { + margin-left: 8.33333%; + } + .mui-col-xl-offset-2 { + margin-left: 16.66667%; + } + .mui-col-xl-offset-3 { + margin-left: 25%; + } + .mui-col-xl-offset-4 { + margin-left: 33.33333%; + } + .mui-col-xl-offset-5 { + margin-left: 41.66667%; + } + .mui-col-xl-offset-6 { + margin-left: 50%; + } + .mui-col-xl-offset-7 { + margin-left: 58.33333%; + } + .mui-col-xl-offset-8 { + margin-left: 66.66667%; + } + .mui-col-xl-offset-9 { + margin-left: 75%; + } + .mui-col-xl-offset-10 { + margin-left: 83.33333%; + } + .mui-col-xl-offset-11 { + margin-left: 91.66667%; + } + .mui-col-xl-offset-12 { + margin-left: 100%; + } +} + +/** + * MUI Panel module + */ +.mui-panel { + padding: 15px; + margin-bottom: 20px; + border-radius: 0; + background-color: #FFF; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.16), 0 0px 2px 0 rgba(0, 0, 0, 0.12); +} + +.mui-panel:before, .mui-panel:after { + content: " "; + display: table; +} + +.mui-panel:after { + clear: both; +} + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mui-panel { + box-shadow: 0 -1px 2px 0 rgba(0, 0, 0, 0.12), -1px 0px 2px 0 rgba(0, 0, 0, 0.12), 0 2px 2px 0 rgba(0, 0, 0, 0.16), 0 0px 2px 0 rgba(0, 0, 0, 0.12); + } +} + +/** + * MUI Select Component + */ +.mui-select { + display: block; + padding-top: 15px; + margin-bottom: 20px; + position: relative; +} + +.mui-select:focus { + outline: 0; +} + +.mui-select:focus > select { + height: 33px; + margin-bottom: -1px; + border-color: #2196F3; + border-width: 2px; +} + +.mui-select > select { + animation-duration: 0.0001s; + animation-name: mui-node-inserted; + display: block; + height: 32px; + width: 100%; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + outline: none; + border: none; + border-bottom: 1px solid rgba(0, 0, 0, 0.26); + border-radius: 0px; + box-shadow: none; + background-color: transparent; + background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iNiIgd2lkdGg9IjEwIj48cG9seWdvbiBwb2ludHM9IjAsMCAxMCwwIDUsNiIgc3R5bGU9ImZpbGw6cmdiYSgwLDAsMCwuMjQpOyIvPjwvc3ZnPg=="); + background-repeat: no-repeat; + background-position: right center; + cursor: pointer; + color: rgba(0, 0, 0, 0.87); + font-size: 16px; + padding: 0 25px 0 0; +} + +.mui-select > select::-ms-expand { + display: none; +} + +.mui-select > select:focus { + outline: 0; + height: 33px; + margin-bottom: -1px; + border-color: #2196F3; + border-width: 2px; +} + +.mui-select > select:disabled { + color: rgba(0, 0, 0, 0.38); + cursor: not-allowed; + background-color: transparent; + opacity: 1; +} + +.mui-select__menu { + position: absolute; + z-index: 2; + min-width: 100%; + overflow-y: auto; + padding: 8px 0; + background-color: #FFF; + font-size: 16px; +} + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mui-select__menu { + border-left: 1px solid rgba(0, 0, 0, 0.12); + border-top: 1px solid rgba(0, 0, 0, 0.12); + } +} + +.mui-select__menu > div { + padding: 0 22px; + height: 42px; + line-height: 42px; + cursor: pointer; + white-space: nowrap; +} + +.mui-select__menu > div:hover { + background-color: #E0E0E0; +} + +.mui-select__menu > div.mui--is-selected { + background-color: #EEEEEE; +} + +/** + * MUI Table Component + */ +th { + text-align: left; +} + +.mui-table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} + +.mui-table > thead > tr > th, +.mui-table > thead > tr > td, +.mui-table > tbody > tr > th, +.mui-table > tbody > tr > td, +.mui-table > tfoot > tr > th, +.mui-table > tfoot > tr > td { + padding: 10px; + line-height: 1.429; +} + +.mui-table > thead > tr > th { + border-bottom: 2px solid rgba(0, 0, 0, 0.12); + font-weight: 700; +} + +.mui-table > tbody + tbody { + border-top: 2px solid rgba(0, 0, 0, 0.12); +} + +.mui-table.mui-table--bordered > tbody > tr > td { + border-bottom: 1px solid rgba(0, 0, 0, 0.12); +} + +/** + * MUI Tabs module + */ +.mui-tabs__bar { + list-style: none; + padding-left: 0; + margin-bottom: 0; + background-color: transparent; + white-space: nowrap; + overflow-x: auto; +} + +.mui-tabs__bar > li { + display: inline-block; +} + +.mui-tabs__bar > li > a { + display: block; + white-space: nowrap; + text-transform: uppercase; + font-weight: 500; + font-size: 14px; + color: rgba(0, 0, 0, 0.87); + cursor: default; + height: 48px; + line-height: 48px; + padding-left: 24px; + padding-right: 24px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.mui-tabs__bar > li > a:hover { + text-decoration: none; +} + +.mui-tabs__bar > li.mui--is-active { + border-bottom: 2px solid #2196F3; +} + +.mui-tabs__bar > li.mui--is-active > a { + color: #2196F3; +} + +.mui-tabs__bar.mui-tabs__bar--justified { + display: table; + width: 100%; + table-layout: fixed; +} + +.mui-tabs__bar.mui-tabs__bar--justified > li { + display: table-cell; +} + +.mui-tabs__bar.mui-tabs__bar--justified > li > a { + text-align: center; + padding-left: 0px; + padding-right: 0px; +} + +.mui-tabs__pane { + display: none; +} + +.mui-tabs__pane.mui--is-active { + display: block; +} + +[data-mui-toggle="tab"] { + animation-duration: 0.0001s; + animation-name: mui-node-inserted; +} + +/** + * MUI Textfield Component + */ +.mui-textfield { + display: block; + padding-top: 15px; + margin-bottom: 20px; + position: relative; +} + +.mui-textfield > label { + position: absolute; + top: 0; + display: block; + width: 100%; + color: rgba(0, 0, 0, 0.54); + font-size: 12px; + font-weight: 400; + line-height: 15px; + overflow-x: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.mui-textfield > textarea { + padding-top: 5px; +} + +.mui-textfield > input, +.mui-textfield > textarea { + display: block; +} + +.mui-textfield > input:focus ~ label, +.mui-textfield > textarea:focus ~ label { + color: #2196F3; +} + +.mui-textfield--float-label > label { + position: absolute; + transform: translate(0px, 15px); + font-size: 16px; + line-height: 32px; + color: rgba(0, 0, 0, 0.26); + text-overflow: clip; + cursor: text; + pointer-events: none; +} + +.mui-textfield--float-label > input:focus ~ label, +.mui-textfield--float-label > textarea:focus ~ label { + transform: translate(0px, 0px); + font-size: 12px; + line-height: 15px; + text-overflow: ellipsis; +} + +.mui-textfield--float-label > input:not(:focus).mui--is-not-empty ~ label, .mui-textfield--float-label > input:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, .mui-textfield--float-label > input:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield--float-label > textarea:not(:focus).mui--is-not-empty ~ label, +.mui-textfield--float-label > textarea:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield--float-label > textarea:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label { + color: rgba(0, 0, 0, 0.54); + font-size: 12px; + line-height: 15px; + transform: translate(0px, 0px); + text-overflow: ellipsis; +} + +.mui-textfield--wrap-label { + display: table; + width: 100%; + padding-top: 0px; +} + +.mui-textfield--wrap-label:not(.mui-textfield--float-label) > label { + display: table-header-group; + position: static; + white-space: normal; + overflow-x: visible; +} + +.mui-textfield > input, +.mui-textfield > textarea { + animation-duration: 0.0001s; + animation-name: mui-node-inserted; + display: block; + background-color: transparent; + color: rgba(0, 0, 0, 0.87); + border: none; + border-bottom: 1px solid rgba(0, 0, 0, 0.26); + outline: none; + width: 100%; + font-size: 16px; + padding: 0; + box-shadow: none; + border-radius: 0px; + background-image: none; +} + +.mui-textfield > input:focus, +.mui-textfield > textarea:focus { + border-color: #2196F3; + border-width: 2px; +} + +.mui-textfield > input:disabled, .mui-textfield > input:-moz-read-only, +.mui-textfield > textarea:disabled, +.mui-textfield > textarea:-moz-read-only { + cursor: not-allowed; + background-color: transparent; + opacity: 1; +} + +.mui-textfield > input:disabled, .mui-textfield > input:read-only, +.mui-textfield > textarea:disabled, +.mui-textfield > textarea:read-only { + cursor: not-allowed; + background-color: transparent; + opacity: 1; +} + +.mui-textfield > input::-webkit-input-placeholder, +.mui-textfield > textarea::-webkit-input-placeholder { + color: rgba(0, 0, 0, 0.26); + opacity: 1; +} + +.mui-textfield > input::-moz-placeholder, +.mui-textfield > textarea::-moz-placeholder { + color: rgba(0, 0, 0, 0.26); + opacity: 1; +} + +.mui-textfield > input:-ms-input-placeholder, +.mui-textfield > textarea:-ms-input-placeholder { + color: rgba(0, 0, 0, 0.26); + opacity: 1; +} + +.mui-textfield > input::placeholder, +.mui-textfield > textarea::placeholder { + color: rgba(0, 0, 0, 0.26); + opacity: 1; +} + +.mui-textfield > input { + height: 32px; +} + +.mui-textfield > input:focus { + height: 33px; + margin-bottom: -1px; +} + +.mui-textfield > textarea { + min-height: 64px; +} + +.mui-textfield > textarea[rows]:not([rows="2"]):focus { + margin-bottom: -1px; +} + +.mui-textfield > input:focus { + height: 33px; + margin-bottom: -1px; +} + +.mui-textfield > input:invalid:not(:focus):not(:required), .mui-textfield > input:invalid:not(:focus):required.mui--is-not-empty, .mui-textfield > input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty, .mui-textfield > input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty), .mui-textfield > input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > textarea:invalid:not(:focus):not(:required), +.mui-textfield > textarea:invalid:not(:focus):required.mui--is-not-empty, +.mui-textfield > textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty, +.mui-textfield > textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > input:not(:focus).mui--is-invalid:not(:required), +.mui-textfield > input:not(:focus).mui--is-invalid:required.mui--is-not-empty, +.mui-textfield > input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty, +.mui-textfield > input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > textarea:not(:focus).mui--is-invalid:not(:required), +.mui-textfield > textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty, +.mui-textfield > textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty, +.mui-textfield > textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) { + border-color: #F44336; + border-width: 2px; +} + +.mui-textfield > input:invalid:not(:focus):not(:required), .mui-textfield > input:invalid:not(:focus):required.mui--is-not-empty, .mui-textfield > input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty, .mui-textfield > input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty), .mui-textfield > input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > input:not(:focus).mui--is-invalid:not(:required), +.mui-textfield > input:not(:focus).mui--is-invalid:required.mui--is-not-empty, +.mui-textfield > input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty, +.mui-textfield > input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) { + height: 33px; + margin-bottom: -1px; +} + +.mui-textfield > input:invalid:not(:focus):not(:required) ~ label, .mui-textfield > input:invalid:not(:focus):required.mui--is-not-empty ~ label, .mui-textfield > input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, .mui-textfield > input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield > textarea:invalid:not(:focus):not(:required) ~ label, +.mui-textfield > textarea:invalid:not(:focus):required.mui--is-not-empty ~ label, +.mui-textfield > textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield > textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield > input:not(:focus).mui--is-invalid:not(:required) ~ label, +.mui-textfield > input:not(:focus).mui--is-invalid:required.mui--is-not-empty ~ label, +.mui-textfield > input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield > input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield > textarea:not(:focus).mui--is-invalid:not(:required) ~ label, +.mui-textfield > textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty ~ label, +.mui-textfield > textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield > textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label { + color: #F44336; +} + +.mui-textfield:not(.mui-textfield--float-label) > input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty ~ label, +.mui-textfield:not(.mui-textfield--float-label) > textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty ~ label, +.mui-textfield:not(.mui-textfield--float-label) > input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty ~ label, +.mui-textfield:not(.mui-textfield--float-label) > textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty ~ label { + color: #F44336; +} + +/** + * MUI Helpers module + */ +@keyframes mui-node-inserted { + from { + opacity: 0.99; + } + to { + opacity: 1; + } +} + +.mui--no-transition { + transition: none !important; +} + +.mui--no-user-select { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.mui-caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px solid; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} + +.mui--text-left { + text-align: left !important; +} + +.mui--text-right { + text-align: right !important; +} + +.mui--text-center { + text-align: center !important; +} + +.mui--text-justify { + text-align: justify !important; +} + +.mui--text-nowrap { + white-space: nowrap !important; +} + +.mui--align-baseline { + vertical-align: baseline !important; +} + +.mui--align-top { + vertical-align: top !important; +} + +.mui--align-middle { + vertical-align: middle !important; +} + +.mui--align-bottom { + vertical-align: bottom !important; +} + +.mui--text-dark { + color: rgba(0, 0, 0, 0.87); +} + +.mui--text-dark-secondary { + color: rgba(0, 0, 0, 0.54); +} + +.mui--text-dark-hint { + color: rgba(0, 0, 0, 0.38); +} + +.mui--text-light { + color: #FFF; +} + +.mui--text-light-secondary { + color: rgba(255, 255, 255, 0.7); +} + +.mui--text-light-hint { + color: rgba(255, 255, 255, 0.3); +} + +.mui--text-accent { + color: rgba(255, 64, 129, 0.87); +} + +.mui--text-accent-secondary { + color: rgba(255, 64, 129, 0.54); +} + +.mui--text-accent-hint { + color: rgba(255, 64, 129, 0.38); +} + +.mui--text-black { + color: #000; +} + +.mui--text-white { + color: #FFF; +} + +.mui--text-danger { + color: #F44336; +} + +.mui-list--unstyled { + padding-left: 0; + list-style: none; +} + +.mui-list--inline { + padding-left: 0; + list-style: none; + margin-left: -5px; +} + +.mui-list--inline > li { + display: inline-block; + padding-left: 5px; + padding-right: 5px; +} + +.mui--z1, .mui-dropdown__menu, .mui-select__menu { + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); +} + +.mui--z2 { + box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23); +} + +.mui--z3 { + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); +} + +.mui--z4 { + box-shadow: 0 14px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.22); +} + +.mui--z5 { + box-shadow: 0 19px 38px rgba(0, 0, 0, 0.3), 0 15px 12px rgba(0, 0, 0, 0.22); +} + +.mui--clearfix:before, .mui--clearfix:after { + content: " "; + display: table; +} + +.mui--clearfix:after { + clear: both; +} + +.mui--pull-right { + float: right !important; +} + +.mui--pull-left { + float: left !important; +} + +.mui--hide { + display: none !important; +} + +.mui--show { + display: block !important; +} + +.mui--invisible { + visibility: hidden; +} + +.mui--overflow-hidden { + overflow: hidden !important; +} + +.mui--overflow-hidden-x { + overflow-x: hidden !important; +} + +.mui--overflow-hidden-y { + overflow-y: hidden !important; +} + +.mui--visible-xs-block, +.mui--visible-xs-inline, +.mui--visible-xs-inline-block, +.mui--visible-sm-block, +.mui--visible-sm-inline, +.mui--visible-sm-inline-block, +.mui--visible-md-block, +.mui--visible-md-inline, +.mui--visible-md-inline-block, +.mui--visible-lg-block, +.mui--visible-lg-inline, +.mui--visible-lg-inline-block, +.mui--visible-xl-block, +.mui--visible-xl-inline, +.mui--visible-xl-inline-block { + display: none !important; +} + +@media (max-width: 543px) { + .mui-visible-xs { + display: block !important; + } + table.mui-visible-xs { + display: table; + } + tr.mui-visible-xs { + display: table-row !important; + } + th.mui-visible-xs, + td.mui-visible-xs { + display: table-cell !important; + } + .mui--visible-xs-block { + display: block !important; + } + .mui--visible-xs-inline { + display: inline !important; + } + .mui--visible-xs-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 544px) and (max-width: 767px) { + .mui-visible-sm { + display: block !important; + } + table.mui-visible-sm { + display: table; + } + tr.mui-visible-sm { + display: table-row !important; + } + th.mui-visible-sm, + td.mui-visible-sm { + display: table-cell !important; + } + .mui--visible-sm-block { + display: block !important; + } + .mui--visible-sm-inline { + display: inline !important; + } + .mui--visible-sm-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .mui-visible-md { + display: block !important; + } + table.mui-visible-md { + display: table; + } + tr.mui-visible-md { + display: table-row !important; + } + th.mui-visible-md, + td.mui-visible-md { + display: table-cell !important; + } + .mui--visible-md-block { + display: block !important; + } + .mui--visible-md-inline { + display: inline !important; + } + .mui--visible-md-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .mui-visible-lg { + display: block !important; + } + table.mui-visible-lg { + display: table; + } + tr.mui-visible-lg { + display: table-row !important; + } + th.mui-visible-lg, + td.mui-visible-lg { + display: table-cell !important; + } + .mui--visible-lg-block { + display: block !important; + } + .mui--visible-lg-inline { + display: inline !important; + } + .mui--visible-lg-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 1200px) { + .mui-visible-xl { + display: block !important; + } + table.mui-visible-xl { + display: table; + } + tr.mui-visible-xl { + display: table-row !important; + } + th.mui-visible-xl, + td.mui-visible-xl { + display: table-cell !important; + } + .mui--visible-xl-block { + display: block !important; + } + .mui--visible-xl-inline { + display: inline !important; + } + .mui--visible-xl-inline-block { + display: inline-block !important; + } +} + +@media (max-width: 543px) { + .mui--hidden-xs { + display: none !important; + } +} + +@media (min-width: 544px) and (max-width: 767px) { + .mui--hidden-sm { + display: none !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .mui--hidden-md { + display: none !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .mui--hidden-lg { + display: none !important; + } +} + +@media (min-width: 1200px) { + .mui--hidden-xl { + display: none !important; + } +} + +body.mui-body--scroll-lock { + overflow: hidden !important; +} + +/** + * MUI Overlay module + */ +#mui-overlay { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 99999999; + background-color: rgba(0, 0, 0, 0.2); + overflow: auto; +} + +/** + * MUI Ripple module + */ +.mui-ripple-effect { + position: absolute; + border-radius: 50%; + pointer-events: none; + opacity: 0; + animation: mui-ripple-animation 2s; +} + +@keyframes mui-ripple-animation { + from { + transform: scale(1); + opacity: 0.4; + } + to { + transform: scale(100); + opacity: 0; + } +} + +.mui-btn > .mui-ripple-effect { + background-color: #a6a6a6; +} + +.mui-btn--primary > .mui-ripple-effect { + background-color: #FFF; +} + +.mui-btn--dark > .mui-ripple-effect { + background-color: #FFF; +} + +.mui-btn--danger > .mui-ripple-effect { + background-color: #FFF; +} + +.mui-btn--accent > .mui-ripple-effect { + background-color: #FFF; +} + +.mui-btn--flat > .mui-ripple-effect { + background-color: #a6a6a6; +} + +/** + * MUI Typography module + */ +.mui--text-display4 { + font-weight: 300; + font-size: 112px; + line-height: 112px; +} + +.mui--text-display3 { + font-weight: 400; + font-size: 56px; + line-height: 56px; +} + +.mui--text-display2 { + font-weight: 400; + font-size: 45px; + line-height: 48px; +} + +.mui--text-display1, h1 { + font-weight: 400; + font-size: 34px; + line-height: 40px; +} + +.mui--text-headline, h2 { + font-weight: 400; + font-size: 24px; + line-height: 32px; +} + +.mui--text-title, h3 { + font-weight: 400; + font-size: 20px; + line-height: 28px; +} + +.mui--text-subhead, h4 { + font-weight: 400; + font-size: 16px; + line-height: 24px; +} + +.mui--text-body2, h5 { + font-weight: 500; + font-size: 14px; + line-height: 24px; +} + +.mui--text-body1 { + font-weight: 400; + font-size: 14px; + line-height: 20px; +} + +.mui--text-caption { + font-weight: 400; + font-size: 12px; + line-height: 16px; +} + +.mui--text-menu { + font-weight: 500; + font-size: 13px; + line-height: 17px; +} + +.mui--text-button { + font-weight: 500; + font-size: 14px; + line-height: 18px; + text-transform: uppercase; +} diff --git a/platforms/ios/www/libs/mui/packages/cdn/css/mui.min.css b/platforms/ios/www/libs/mui/packages/cdn/css/mui.min.css new file mode 100644 index 0000000..750f365 --- /dev/null +++ b/platforms/ios/www/libs/mui/packages/cdn/css/mui.min.css @@ -0,0 +1 @@ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-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{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}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{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{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-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:border-box}:after,:before{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:Arial,Verdana,Tahoma;font-size:14px;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);background-color:#FFF}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#2196F3;text-decoration:none}a:focus,a:hover{color:#1976D2;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}p{margin:0 0 10px}ol,ul{margin-top:0;margin-bottom:10px}figure{margin:0}img{vertical-align:middle}hr{margin-top:20px;margin-bottom:20px;border:0;height:1px;background-color:rgba(0,0,0,.12)}legend{display:block;width:100%;padding:0;margin-bottom:10px;font-size:21px;color:rgba(0,0,0,.87);line-height:inherit;border:0}input[type=search]{box-sizing:border-box;-webkit-appearance:none}input[type=checkbox]:focus,input[type=radio]:focus,input[type=file]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type=checkbox]:disabled,input[type=radio]:disabled{cursor:not-allowed}strong{font-weight:700}abbr[title]{cursor:help;border-bottom:1px dotted #2196F3}h1,h2,h3{margin-top:20px;margin-bottom:10px}h4,h5,h6{margin-top:10px;margin-bottom:10px}.mui--appbar-height{height:56px}.mui--appbar-min-height,.mui-appbar{min-height:56px}.mui--appbar-line-height{line-height:56px}.mui--appbar-top{top:56px}@media (orientation:landscape) and (max-height:480px){.mui--appbar-height{height:48px}.mui--appbar-min-height,.mui-appbar{min-height:48px}.mui--appbar-line-height{line-height:48px}.mui--appbar-top{top:48px}}@media (min-width:480px){.mui--appbar-height{height:64px}.mui--appbar-min-height,.mui-appbar{min-height:64px}.mui--appbar-line-height{line-height:64px}.mui--appbar-top{top:64px}}.mui-appbar{background-color:#2196F3;color:#FFF}.mui-btn{animation-duration:.1ms;animation-name:mui-node-inserted;font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase;color:rgba(0,0,0,.87);background-color:#FFF;transition:all .2s ease-in-out;display:inline-block;height:36px;padding:0 26px;margin-top:6px;margin-bottom:6px;border:none;border-radius:2px;cursor:pointer;-ms-touch-action:manipulation;touch-action:manipulation;background-image:none;text-align:center;line-height:36px;vertical-align:middle;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:14px;letter-spacing:.03em;position:relative;overflow:hidden}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{color:rgba(0,0,0,.87);background-color:#fff}.mui-btn[disabled]:active,.mui-btn[disabled]:focus,.mui-btn[disabled]:hover{color:rgba(0,0,0,.87);background-color:#FFF}.mui-btn.mui-btn--flat{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn.mui-btn--flat:active,.mui-btn.mui-btn--flat:focus,.mui-btn.mui-btn--flat:hover{color:rgba(0,0,0,.87);background-color:#f2f2f2}.mui-btn.mui-btn--flat[disabled]:active,.mui-btn.mui-btn--flat[disabled]:focus,.mui-btn.mui-btn--flat[disabled]:hover{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{outline:0;text-decoration:none;color:rgba(0,0,0,.87)}.mui-btn:focus,.mui-btn:hover{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:focus,.mui-btn:hover{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn.mui--is-disabled,.mui-btn:disabled{cursor:not-allowed;pointer-events:none;opacity:.6;box-shadow:none}.mui-btn+.mui-btn{margin-left:8px}.mui-btn--flat{background-color:transparent}.mui-btn--flat:active,.mui-btn--flat:focus,.mui-btn--flat:hover{box-shadow:none;background-color:#f2f2f2}.mui-btn--fab,.mui-btn--raised{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab,.mui-btn--raised{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn--fab{position:relative;padding:0;width:55px;height:55px;line-height:55px;border-radius:50%;z-index:1}.mui-btn--primary{color:#FFF;background-color:#2196F3}.mui-btn--primary:active,.mui-btn--primary:focus,.mui-btn--primary:hover{color:#FFF;background-color:#39a1f4}.mui-btn--primary[disabled]:active,.mui-btn--primary[disabled]:focus,.mui-btn--primary[disabled]:hover{color:#FFF;background-color:#2196F3}.mui-btn--primary.mui-btn--flat{color:#2196F3;background-color:transparent}.mui-btn--primary.mui-btn--flat:active,.mui-btn--primary.mui-btn--flat:focus,.mui-btn--primary.mui-btn--flat:hover{color:#2196F3;background-color:#f2f2f2}.mui-btn--primary.mui-btn--flat[disabled]:active,.mui-btn--primary.mui-btn--flat[disabled]:focus,.mui-btn--primary.mui-btn--flat[disabled]:hover{color:#2196F3;background-color:transparent}.mui-btn--dark{color:#FFF;background-color:#424242}.mui-btn--dark:active,.mui-btn--dark:focus,.mui-btn--dark:hover{color:#FFF;background-color:#4f4f4f}.mui-btn--dark[disabled]:active,.mui-btn--dark[disabled]:focus,.mui-btn--dark[disabled]:hover{color:#FFF;background-color:#424242}.mui-btn--dark.mui-btn--flat{color:#424242;background-color:transparent}.mui-btn--dark.mui-btn--flat:active,.mui-btn--dark.mui-btn--flat:focus,.mui-btn--dark.mui-btn--flat:hover{color:#424242;background-color:#f2f2f2}.mui-btn--dark.mui-btn--flat[disabled]:active,.mui-btn--dark.mui-btn--flat[disabled]:focus,.mui-btn--dark.mui-btn--flat[disabled]:hover{color:#424242;background-color:transparent}.mui-btn--danger{color:#FFF;background-color:#F44336}.mui-btn--danger:active,.mui-btn--danger:focus,.mui-btn--danger:hover{color:#FFF;background-color:#f55a4e}.mui-btn--danger[disabled]:active,.mui-btn--danger[disabled]:focus,.mui-btn--danger[disabled]:hover{color:#FFF;background-color:#F44336}.mui-btn--danger.mui-btn--flat{color:#F44336;background-color:transparent}.mui-btn--danger.mui-btn--flat:active,.mui-btn--danger.mui-btn--flat:focus,.mui-btn--danger.mui-btn--flat:hover{color:#F44336;background-color:#f2f2f2}.mui-btn--danger.mui-btn--flat[disabled]:active,.mui-btn--danger.mui-btn--flat[disabled]:focus,.mui-btn--danger.mui-btn--flat[disabled]:hover{color:#F44336;background-color:transparent}.mui-btn--accent{color:#FFF;background-color:#FF4081}.mui-btn--accent:active,.mui-btn--accent:focus,.mui-btn--accent:hover{color:#FFF;background-color:#ff5a92}.mui-btn--accent[disabled]:active,.mui-btn--accent[disabled]:focus,.mui-btn--accent[disabled]:hover{color:#FFF;background-color:#FF4081}.mui-btn--accent.mui-btn--flat{color:#FF4081;background-color:transparent}.mui-btn--accent.mui-btn--flat:active,.mui-btn--accent.mui-btn--flat:focus,.mui-btn--accent.mui-btn--flat:hover{color:#FF4081;background-color:#f2f2f2}.mui-btn--accent.mui-btn--flat[disabled]:active,.mui-btn--accent.mui-btn--flat[disabled]:focus,.mui-btn--accent.mui-btn--flat[disabled]:hover{color:#FF4081;background-color:transparent}.mui-btn--small{height:30.6px;line-height:30.6px;padding:0 16px;font-size:13px}.mui-btn--large{height:54px;line-height:54px;padding:0 26px;font-size:14px}.mui-btn--fab.mui-btn--small{width:44px;height:44px;line-height:44px}.mui-btn--fab.mui-btn--large{width:75px;height:75px;line-height:75px}.mui-checkbox,.mui-radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.mui-checkbox>label,.mui-radio>label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio],.mui-radio>label>input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px}.mui-checkbox+.mui-checkbox,.mui-radio+.mui-radio{margin-top:-5px}.mui-checkbox--inline,.mui-radio--inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.mui-checkbox--inline>input[type=checkbox],.mui-checkbox--inline>input[type=radio],.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox--inline>label>input[type=radio],.mui-radio--inline>input[type=checkbox],.mui-radio--inline>input[type=radio],.mui-radio--inline>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio]{margin:4px 0 0;line-height:normal}.mui-checkbox--inline+.mui-checkbox--inline,.mui-radio--inline+.mui-radio--inline{margin-top:0;margin-left:10px}.mui-container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container:after,.mui-container:before{content:" ";display:table}.mui-container:after{clear:both}@media (min-width:544px){.mui-container{max-width:570px}}@media (min-width:768px){.mui-container{max-width:740px}}@media (min-width:992px){.mui-container{max-width:960px}}@media (min-width:1200px){.mui-container{max-width:1170px}}.mui-container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container-fluid:after,.mui-container-fluid:before{content:" ";display:table}.mui-container-fluid:after{clear:both}.mui-divider{display:block;height:1px;background-color:rgba(0,0,0,.12)}.mui--divider-top{border-top:1px solid rgba(0,0,0,.12)}.mui--divider-bottom{border-bottom:1px solid rgba(0,0,0,.12)}.mui--divider-left{border-left:1px solid rgba(0,0,0,.12)}.mui--divider-right{border-right:1px solid rgba(0,0,0,.12)}.mui-dropdown{display:inline-block;position:relative}[data-mui-toggle=dropdown]{animation-duration:.1ms;animation-name:mui-node-inserted;outline:0}.mui-dropdown__menu{position:absolute;top:100%;left:0;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#FFF;border-radius:2px;z-index:1;background-clip:padding-box}.mui-dropdown__menu.mui--is-open{display:block}.mui-dropdown__menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);white-space:nowrap}.mui-dropdown__menu>li>a:focus,.mui-dropdown__menu>li>a:hover{text-decoration:none;color:rgba(0,0,0,.87);background-color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a,.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;cursor:not-allowed}.mui-dropdown__menu--right{left:auto;right:0}@media (min-width:544px){.mui-form--inline>.mui-textfield{display:inline-block;margin-bottom:0}.mui-form--inline>.mui-checkbox,.mui-form--inline>.mui-radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.mui-form--inline>.mui-checkbox>label,.mui-form--inline>.mui-radio>label{padding-left:0}.mui-form--inline>.mui-checkbox>label>input[type=checkbox],.mui-form--inline>.mui-radio>label>input[type=radio]{position:relative;margin-left:0}.mui-form--inline>.mui-select{display:inline-block}.mui-form--inline>.mui-btn{margin-bottom:0;margin-top:0;vertical-align:bottom}}.mui-row{margin-left:-15px;margin-right:-15px}.mui-row:after,.mui-row:before{content:" ";display:table}.mui-row:after{clear:both}.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9,.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9,.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9,.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{min-height:1px;padding-left:15px;padding-right:15px}.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{float:left}.mui-col-xs-1{width:8.33333%}.mui-col-xs-2{width:16.66667%}.mui-col-xs-3{width:25%}.mui-col-xs-4{width:33.33333%}.mui-col-xs-5{width:41.66667%}.mui-col-xs-6{width:50%}.mui-col-xs-7{width:58.33333%}.mui-col-xs-8{width:66.66667%}.mui-col-xs-9{width:75%}.mui-col-xs-10{width:83.33333%}.mui-col-xs-11{width:91.66667%}.mui-col-xs-12{width:100%}.mui-col-xs-offset-0{margin-left:0}.mui-col-xs-offset-1{margin-left:8.33333%}.mui-col-xs-offset-2{margin-left:16.66667%}.mui-col-xs-offset-3{margin-left:25%}.mui-col-xs-offset-4{margin-left:33.33333%}.mui-col-xs-offset-5{margin-left:41.66667%}.mui-col-xs-offset-6{margin-left:50%}.mui-col-xs-offset-7{margin-left:58.33333%}.mui-col-xs-offset-8{margin-left:66.66667%}.mui-col-xs-offset-9{margin-left:75%}.mui-col-xs-offset-10{margin-left:83.33333%}.mui-col-xs-offset-11{margin-left:91.66667%}.mui-col-xs-offset-12{margin-left:100%}@media (min-width:544px){.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9{float:left}.mui-col-sm-1{width:8.33333%}.mui-col-sm-2{width:16.66667%}.mui-col-sm-3{width:25%}.mui-col-sm-4{width:33.33333%}.mui-col-sm-5{width:41.66667%}.mui-col-sm-6{width:50%}.mui-col-sm-7{width:58.33333%}.mui-col-sm-8{width:66.66667%}.mui-col-sm-9{width:75%}.mui-col-sm-10{width:83.33333%}.mui-col-sm-11{width:91.66667%}.mui-col-sm-12{width:100%}.mui-col-sm-offset-0{margin-left:0}.mui-col-sm-offset-1{margin-left:8.33333%}.mui-col-sm-offset-2{margin-left:16.66667%}.mui-col-sm-offset-3{margin-left:25%}.mui-col-sm-offset-4{margin-left:33.33333%}.mui-col-sm-offset-5{margin-left:41.66667%}.mui-col-sm-offset-6{margin-left:50%}.mui-col-sm-offset-7{margin-left:58.33333%}.mui-col-sm-offset-8{margin-left:66.66667%}.mui-col-sm-offset-9{margin-left:75%}.mui-col-sm-offset-10{margin-left:83.33333%}.mui-col-sm-offset-11{margin-left:91.66667%}.mui-col-sm-offset-12{margin-left:100%}}@media (min-width:768px){.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9{float:left}.mui-col-md-1{width:8.33333%}.mui-col-md-2{width:16.66667%}.mui-col-md-3{width:25%}.mui-col-md-4{width:33.33333%}.mui-col-md-5{width:41.66667%}.mui-col-md-6{width:50%}.mui-col-md-7{width:58.33333%}.mui-col-md-8{width:66.66667%}.mui-col-md-9{width:75%}.mui-col-md-10{width:83.33333%}.mui-col-md-11{width:91.66667%}.mui-col-md-12{width:100%}.mui-col-md-offset-0{margin-left:0}.mui-col-md-offset-1{margin-left:8.33333%}.mui-col-md-offset-2{margin-left:16.66667%}.mui-col-md-offset-3{margin-left:25%}.mui-col-md-offset-4{margin-left:33.33333%}.mui-col-md-offset-5{margin-left:41.66667%}.mui-col-md-offset-6{margin-left:50%}.mui-col-md-offset-7{margin-left:58.33333%}.mui-col-md-offset-8{margin-left:66.66667%}.mui-col-md-offset-9{margin-left:75%}.mui-col-md-offset-10{margin-left:83.33333%}.mui-col-md-offset-11{margin-left:91.66667%}.mui-col-md-offset-12{margin-left:100%}}@media (min-width:992px){.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9{float:left}.mui-col-lg-1{width:8.33333%}.mui-col-lg-2{width:16.66667%}.mui-col-lg-3{width:25%}.mui-col-lg-4{width:33.33333%}.mui-col-lg-5{width:41.66667%}.mui-col-lg-6{width:50%}.mui-col-lg-7{width:58.33333%}.mui-col-lg-8{width:66.66667%}.mui-col-lg-9{width:75%}.mui-col-lg-10{width:83.33333%}.mui-col-lg-11{width:91.66667%}.mui-col-lg-12{width:100%}.mui-col-lg-offset-0{margin-left:0}.mui-col-lg-offset-1{margin-left:8.33333%}.mui-col-lg-offset-2{margin-left:16.66667%}.mui-col-lg-offset-3{margin-left:25%}.mui-col-lg-offset-4{margin-left:33.33333%}.mui-col-lg-offset-5{margin-left:41.66667%}.mui-col-lg-offset-6{margin-left:50%}.mui-col-lg-offset-7{margin-left:58.33333%}.mui-col-lg-offset-8{margin-left:66.66667%}.mui-col-lg-offset-9{margin-left:75%}.mui-col-lg-offset-10{margin-left:83.33333%}.mui-col-lg-offset-11{margin-left:91.66667%}.mui-col-lg-offset-12{margin-left:100%}}@media (min-width:1200px){.mui-col-xl-1,.mui-col-xl-10,.mui-col-xl-11,.mui-col-xl-12,.mui-col-xl-2,.mui-col-xl-3,.mui-col-xl-4,.mui-col-xl-5,.mui-col-xl-6,.mui-col-xl-7,.mui-col-xl-8,.mui-col-xl-9{float:left}.mui-col-xl-1{width:8.33333%}.mui-col-xl-2{width:16.66667%}.mui-col-xl-3{width:25%}.mui-col-xl-4{width:33.33333%}.mui-col-xl-5{width:41.66667%}.mui-col-xl-6{width:50%}.mui-col-xl-7{width:58.33333%}.mui-col-xl-8{width:66.66667%}.mui-col-xl-9{width:75%}.mui-col-xl-10{width:83.33333%}.mui-col-xl-11{width:91.66667%}.mui-col-xl-12{width:100%}.mui-col-xl-offset-0{margin-left:0}.mui-col-xl-offset-1{margin-left:8.33333%}.mui-col-xl-offset-2{margin-left:16.66667%}.mui-col-xl-offset-3{margin-left:25%}.mui-col-xl-offset-4{margin-left:33.33333%}.mui-col-xl-offset-5{margin-left:41.66667%}.mui-col-xl-offset-6{margin-left:50%}.mui-col-xl-offset-7{margin-left:58.33333%}.mui-col-xl-offset-8{margin-left:66.66667%}.mui-col-xl-offset-9{margin-left:75%}.mui-col-xl-offset-10{margin-left:83.33333%}.mui-col-xl-offset-11{margin-left:91.66667%}.mui-col-xl-offset-12{margin-left:100%}}.mui-panel{padding:15px;margin-bottom:20px;border-radius:0;background-color:#FFF;box-shadow:0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}.mui-panel:after,.mui-panel:before{content:" ";display:table}.mui-panel:after{clear:both}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-panel{box-shadow:0 -1px 2px 0 rgba(0,0,0,.12),-1px 0 2px 0 rgba(0,0,0,.12),0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}}.mui-select{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-select:focus{outline:0}.mui-select:focus>select{height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;height:32px;width:100%;appearance:none;-webkit-appearance:none;-moz-appearance:none;outline:0;border:none;border-bottom:1px solid rgba(0,0,0,.26);border-radius:0;box-shadow:none;background-color:transparent;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iNiIgd2lkdGg9IjEwIj48cG9seWdvbiBwb2ludHM9IjAsMCAxMCwwIDUsNiIgc3R5bGU9ImZpbGw6cmdiYSgwLDAsMCwuMjQpOyIvPjwvc3ZnPg==);background-repeat:no-repeat;background-position:right center;cursor:pointer;color:rgba(0,0,0,.87);font-size:16px;padding:0 25px 0 0}.mui-select>select::-ms-expand{display:none}.mui-select>select:focus{outline:0;height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select:disabled{color:rgba(0,0,0,.38);cursor:not-allowed;background-color:transparent;opacity:1}.mui-select__menu{position:absolute;z-index:2;min-width:100%;overflow-y:auto;padding:8px 0;background-color:#FFF;font-size:16px}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-select__menu{border-left:1px solid rgba(0,0,0,.12);border-top:1px solid rgba(0,0,0,.12)}}.mui-select__menu>div{padding:0 22px;height:42px;line-height:42px;cursor:pointer;white-space:nowrap}.mui-select__menu>div:hover{background-color:#E0E0E0}.mui-select__menu>div.mui--is-selected{background-color:#EEE}th{text-align:left}.mui-table{width:100%;max-width:100%;margin-bottom:20px}.mui-table>tbody>tr>td,.mui-table>tbody>tr>th,.mui-table>tfoot>tr>td,.mui-table>tfoot>tr>th,.mui-table>thead>tr>td,.mui-table>thead>tr>th{padding:10px;line-height:1.429}.mui-table>thead>tr>th{border-bottom:2px solid rgba(0,0,0,.12);font-weight:700}.mui-table>tbody+tbody{border-top:2px solid rgba(0,0,0,.12)}.mui-table.mui-table--bordered>tbody>tr>td{border-bottom:1px solid rgba(0,0,0,.12)}.mui-tabs__bar{list-style:none;padding-left:0;margin-bottom:0;background-color:transparent;white-space:nowrap;overflow-x:auto}.mui-tabs__bar>li{display:inline-block}.mui-tabs__bar>li>a{display:block;white-space:nowrap;text-transform:uppercase;font-weight:500;font-size:14px;color:rgba(0,0,0,.87);cursor:default;height:48px;line-height:48px;padding-left:24px;padding-right:24px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-tabs__bar>li>a:hover{text-decoration:none}.mui-tabs__bar>li.mui--is-active{border-bottom:2px solid #2196F3}.mui-tabs__bar>li.mui--is-active>a{color:#2196F3}.mui-tabs__bar.mui-tabs__bar--justified{display:table;width:100%;table-layout:fixed}.mui-tabs__bar.mui-tabs__bar--justified>li{display:table-cell}.mui-tabs__bar.mui-tabs__bar--justified>li>a{text-align:center;padding-left:0;padding-right:0}.mui-tabs__pane{display:none}.mui-tabs__pane.mui--is-active{display:block}[data-mui-toggle=tab]{animation-duration:.1ms;animation-name:mui-node-inserted}.mui-textfield{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-textfield>label{position:absolute;top:0;display:block;width:100%;color:rgba(0,0,0,.54);font-size:12px;font-weight:400;line-height:15px;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.mui-textfield>textarea{padding-top:5px}.mui-textfield>input,.mui-textfield>textarea{display:block}.mui-textfield>input:focus~label,.mui-textfield>textarea:focus~label{color:#2196F3}.mui-textfield--float-label>label{position:absolute;transform:translate(0,15px);font-size:16px;line-height:32px;color:rgba(0,0,0,.26);text-overflow:clip;cursor:text;pointer-events:none}.mui-textfield--float-label>input:focus~label,.mui-textfield--float-label>textarea:focus~label{transform:translate(0,0);font-size:12px;line-height:15px;text-overflow:ellipsis}.mui-textfield--float-label>input:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>input:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>input:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>textarea:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:rgba(0,0,0,.54);font-size:12px;line-height:15px;transform:translate(0,0);text-overflow:ellipsis}.mui-textfield--wrap-label{display:table;width:100%;padding-top:0}.mui-textfield--wrap-label:not(.mui-textfield--float-label)>label{display:table-header-group;position:static;white-space:normal;overflow-x:visible}.mui-textfield>input,.mui-textfield>textarea{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;background-color:transparent;color:rgba(0,0,0,.87);border:none;border-bottom:1px solid rgba(0,0,0,.26);outline:0;width:100%;font-size:16px;padding:0;box-shadow:none;border-radius:0;background-image:none}.mui-textfield>input:focus,.mui-textfield>textarea:focus{border-color:#2196F3;border-width:2px}.mui-textfield>input:-moz-read-only,.mui-textfield>input:disabled,.mui-textfield>textarea:-moz-read-only,.mui-textfield>textarea:disabled{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input:disabled,.mui-textfield>input:read-only,.mui-textfield>textarea:disabled,.mui-textfield>textarea:read-only{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input::-webkit-input-placeholder,.mui-textfield>textarea::-webkit-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::-moz-placeholder,.mui-textfield>textarea::-moz-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input:-ms-input-placeholder,.mui-textfield>textarea:-ms-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::placeholder,.mui-textfield>textarea::placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input{height:32px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>textarea{min-height:64px}.mui-textfield>textarea[rows]:not([rows="2"]):focus{margin-bottom:-1px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):not(:required),.mui-textfield>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required),.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty){border-color:#F44336;border-width:2px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty){height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required)~label,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):not(:required)~label,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:#F44336}.mui-textfield:not(.mui-textfield--float-label)>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label{color:#F44336}@keyframes mui-node-inserted{from{opacity:.99}to{opacity:1}}.mui--no-transition{transition:none!important}.mui--no-user-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.mui--text-left{text-align:left!important}.mui--text-right{text-align:right!important}.mui--text-center{text-align:center!important}.mui--text-justify{text-align:justify!important}.mui--text-nowrap{white-space:nowrap!important}.mui--align-baseline{vertical-align:baseline!important}.mui--align-top{vertical-align:top!important}.mui--align-middle{vertical-align:middle!important}.mui--align-bottom{vertical-align:bottom!important}.mui--text-dark{color:rgba(0,0,0,.87)}.mui--text-dark-secondary{color:rgba(0,0,0,.54)}.mui--text-dark-hint{color:rgba(0,0,0,.38)}.mui--text-light{color:#FFF}.mui--text-light-secondary{color:rgba(255,255,255,.7)}.mui--text-light-hint{color:rgba(255,255,255,.3)}.mui--text-accent{color:rgba(255,64,129,.87)}.mui--text-accent-secondary{color:rgba(255,64,129,.54)}.mui--text-accent-hint{color:rgba(255,64,129,.38)}.mui--text-black{color:#000}.mui--text-white{color:#FFF}.mui--text-danger{color:#F44336}.mui-list--unstyled{padding-left:0;list-style:none}.mui-list--inline{padding-left:0;list-style:none;margin-left:-5px}.mui-list--inline>li{display:inline-block;padding-left:5px;padding-right:5px}.mui--z1,.mui-dropdown__menu,.mui-select__menu{box-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24)}.mui--z2{box-shadow:0 3px 6px rgba(0,0,0,.16),0 3px 6px rgba(0,0,0,.23)}.mui--z3{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}.mui--z4{box-shadow:0 14px 28px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.22)}.mui--z5{box-shadow:0 19px 38px rgba(0,0,0,.3),0 15px 12px rgba(0,0,0,.22)}.mui--clearfix:after,.mui--clearfix:before{content:" ";display:table}.mui--clearfix:after{clear:both}.mui--pull-right{float:right!important}.mui--pull-left{float:left!important}.mui--hide{display:none!important}.mui--show{display:block!important}.mui--invisible{visibility:hidden}.mui--overflow-hidden{overflow:hidden!important}.mui--overflow-hidden-x{overflow-x:hidden!important}.mui--overflow-hidden-y{overflow-y:hidden!important}.mui--visible-lg-block,.mui--visible-lg-inline,.mui--visible-lg-inline-block,.mui--visible-md-block,.mui--visible-md-inline,.mui--visible-md-inline-block,.mui--visible-sm-block,.mui--visible-sm-inline,.mui--visible-sm-inline-block,.mui--visible-xl-block,.mui--visible-xl-inline,.mui--visible-xl-inline-block,.mui--visible-xs-block,.mui--visible-xs-inline,.mui--visible-xs-inline-block{display:none!important}@media (max-width:543px){.mui-visible-xs{display:block!important}table.mui-visible-xs{display:table}tr.mui-visible-xs{display:table-row!important}td.mui-visible-xs,th.mui-visible-xs{display:table-cell!important}.mui--visible-xs-block{display:block!important}.mui--visible-xs-inline{display:inline!important}.mui--visible-xs-inline-block{display:inline-block!important}}@media (min-width:544px) and (max-width:767px){.mui-visible-sm{display:block!important}table.mui-visible-sm{display:table}tr.mui-visible-sm{display:table-row!important}td.mui-visible-sm,th.mui-visible-sm{display:table-cell!important}.mui--visible-sm-block{display:block!important}.mui--visible-sm-inline{display:inline!important}.mui--visible-sm-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.mui-visible-md{display:block!important}table.mui-visible-md{display:table}tr.mui-visible-md{display:table-row!important}td.mui-visible-md,th.mui-visible-md{display:table-cell!important}.mui--visible-md-block{display:block!important}.mui--visible-md-inline{display:inline!important}.mui--visible-md-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.mui-visible-lg{display:block!important}table.mui-visible-lg{display:table}tr.mui-visible-lg{display:table-row!important}td.mui-visible-lg,th.mui-visible-lg{display:table-cell!important}.mui--visible-lg-block{display:block!important}.mui--visible-lg-inline{display:inline!important}.mui--visible-lg-inline-block{display:inline-block!important}}@media (min-width:1200px){.mui-visible-xl{display:block!important}table.mui-visible-xl{display:table}tr.mui-visible-xl{display:table-row!important}td.mui-visible-xl,th.mui-visible-xl{display:table-cell!important}.mui--visible-xl-block{display:block!important}.mui--visible-xl-inline{display:inline!important}.mui--visible-xl-inline-block{display:inline-block!important}}@media (max-width:543px){.mui--hidden-xs{display:none!important}}@media (min-width:544px) and (max-width:767px){.mui--hidden-sm{display:none!important}}@media (min-width:768px) and (max-width:991px){.mui--hidden-md{display:none!important}}@media (min-width:992px) and (max-width:1199px){.mui--hidden-lg{display:none!important}}@media (min-width:1200px){.mui--hidden-xl{display:none!important}}body.mui-body--scroll-lock{overflow:hidden!important}#mui-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:99999999;background-color:rgba(0,0,0,.2);overflow:auto}.mui-ripple-effect{position:absolute;border-radius:50%;pointer-events:none;opacity:0;animation:mui-ripple-animation 2s}@keyframes mui-ripple-animation{from{transform:scale(1);opacity:.4}to{transform:scale(100);opacity:0}}.mui-btn>.mui-ripple-effect{background-color:#a6a6a6}.mui-btn--primary>.mui-ripple-effect{background-color:#FFF}.mui-btn--dark>.mui-ripple-effect{background-color:#FFF}.mui-btn--danger>.mui-ripple-effect{background-color:#FFF}.mui-btn--accent>.mui-ripple-effect{background-color:#FFF}.mui-btn--flat>.mui-ripple-effect{background-color:#a6a6a6}.mui--text-display4{font-weight:300;font-size:112px;line-height:112px}.mui--text-display3{font-weight:400;font-size:56px;line-height:56px}.mui--text-display2{font-weight:400;font-size:45px;line-height:48px}.mui--text-display1,h1{font-weight:400;font-size:34px;line-height:40px}.mui--text-headline,h2{font-weight:400;font-size:24px;line-height:32px}.mui--text-title,h3{font-weight:400;font-size:20px;line-height:28px}.mui--text-subhead,h4{font-weight:400;font-size:16px;line-height:24px}.mui--text-body2,h5{font-weight:500;font-size:14px;line-height:24px}.mui--text-body1{font-weight:400;font-size:14px;line-height:20px}.mui--text-caption{font-weight:400;font-size:12px;line-height:16px}.mui--text-menu{font-weight:500;font-size:13px;line-height:17px}.mui--text-button{font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase} \ No newline at end of file diff --git a/platforms/ios/www/libs/mui/packages/cdn/email/mui-email-inline.css b/platforms/ios/www/libs/mui/packages/cdn/email/mui-email-inline.css new file mode 100644 index 0000000..da4dcc2 --- /dev/null +++ b/platforms/ios/www/libs/mui/packages/cdn/email/mui-email-inline.css @@ -0,0 +1,686 @@ +body { + width: 100% !important; + min-width: 100%; + margin: 0; + padding: 0; +} + +img { + border: 0 none; + height: auto; + line-height: 100%; + outline: none; + text-decoration: none; +} + +a img { + border: 0 none; +} + +table { + border-spacing: 0; + border-collapse: collapse; +} + +td { + padding: 0; + text-align: left; + word-break: break-word; + -webkit-hyphens: auto; + -moz-hyphens: auto; + hyphens: auto; + border-collapse: collapse !important; +} + +table, td { + mso-table-lspace: 0pt; + mso-table-rspace: 0pt; +} + +body, +table, +td, +p, +a, +li, +blockquote { + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +img { + -ms-interpolation-mode: bicubic; +} + +/** + * MUI Colors module + */ +/** + * MUI Email Reboot + */ +body { + color: #212121; + font-family: "Helvetica Neue", Helvetica, Arial, Verdana, "Trebuchet MS"; + font-weight: 400; + font-size: 14px; + line-height: 1.429; + letter-spacing: 0.001em; + background-color: #FFF; +} + +a { + color: #2196F3; + text-decoration: none; +} + +p { + margin: 0 0 10px; +} + +hr { + color: #e0e0e0; + background-color: #e0e0e0; + height: 1px; + border: none; +} + +strong { + font-weight: 700; +} + +h1, h2, h3 { + margin-top: 20px; + margin-bottom: 10px; +} + +h4, h5, h6 { + margin-top: 10px; + margin-bottom: 10px; +} + +/** + * MUI Email Body Component + */ +.mui-body { + margin: 0; + padding: 0; + height: 100%; + width: 100%; + color: #212121; + font-family: "Helvetica Neue", Helvetica, Arial, Verdana, "Trebuchet MS"; + font-weight: 400; + font-size: 14px; + line-height: 1.429; + letter-spacing: 0.001em; + background-color: #FFF; +} + +/** + * MUI Email Buttons + */ +.mui-btn { + cursor: pointer; + white-space: nowrap; +} + +a.mui-btn { + font-weight: 500; + font-size: 14px; + color: #212121; + line-height: 14px; + letter-spacing: 0.03em; + text-transform: uppercase; + border-top: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; + border-top: 1px solid #FFF; + border-left: 1px solid #FFF; + border-right: 1px solid #FFF; + border-bottom: 1px solid #FFF; + color: #212121; + background-color: #FFF; + display: inline-block; + text-decoration: none; + text-align: center; + border-radius: 3px; + padding: 10px 25px; + background-color: transparent; +} + +a.mui-btn.mui-btn--raised { + border-top: 1px solid #f2f2f2; + border-left: 1px solid #e6e6e6; + border-right: 1px solid #e6e6e6; + border-bottom: 2px solid #bababa; +} + +a.mui-btn.mui-btn--flat { + background-color: transparent; + color: #212121; + border-top: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; +} + +a.mui-btn.mui-btn--primary { + border-top: 1px solid #2196F3; + border-left: 1px solid #2196F3; + border-right: 1px solid #2196F3; + border-bottom: 1px solid #2196F3; + color: #FFF; + background-color: #2196F3; +} + +a.mui-btn.mui-btn--primary.mui-btn--raised { + border-top: 1px solid #51adf6; + border-left: 1px solid #2196F3; + border-right: 1px solid #2196F3; + border-bottom: 2px solid #0a6ebd; +} + +a.mui-btn.mui-btn--primary.mui-btn--flat { + background-color: transparent; + color: #2196F3; + border-top: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; +} + +a.mui-btn.mui-btn--danger { + border-top: 1px solid #F44336; + border-left: 1px solid #F44336; + border-right: 1px solid #F44336; + border-bottom: 1px solid #F44336; + color: #FFF; + background-color: #F44336; +} + +a.mui-btn.mui-btn--danger.mui-btn--raised { + border-top: 1px solid #f77066; + border-left: 1px solid #F44336; + border-right: 1px solid #F44336; + border-bottom: 2px solid #d2190b; +} + +a.mui-btn.mui-btn--danger.mui-btn--flat { + background-color: transparent; + color: #F44336; + border-top: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; +} + +a.mui-btn.mui-btn--dark { + border-top: 1px solid #424242; + border-left: 1px solid #424242; + border-right: 1px solid #424242; + border-bottom: 1px solid #424242; + color: #FFF; + background-color: #424242; +} + +a.mui-btn.mui-btn--dark.mui-btn--raised { + border-top: 1px solid #5c5c5c; + border-left: 1px solid #424242; + border-right: 1px solid #424242; + border-bottom: 2px solid #1c1c1c; +} + +a.mui-btn.mui-btn--dark.mui-btn--flat { + background-color: transparent; + color: #424242; + border-top: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; +} + +a.mui-btn.mui-btn--accent { + border-top: 1px solid #FF4081; + border-left: 1px solid #FF4081; + border-right: 1px solid #FF4081; + border-bottom: 1px solid #FF4081; + color: #FFF; + background-color: #FF4081; +} + +a.mui-btn.mui-btn--accent.mui-btn--raised { + border-top: 1px solid #ff73a3; + border-left: 1px solid #FF4081; + border-right: 1px solid #FF4081; + border-bottom: 2px solid #f30053; +} + +a.mui-btn.mui-btn--accent.mui-btn--flat { + background-color: transparent; + color: #FF4081; + border-top: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; +} + +table.mui-btn > tr > td, +table.mui-btn > tbody > tr > td { + background-color: #FFF; +} + +table.mui-btn > tr > td > a, +table.mui-btn > tbody > tr > td > a { + color: #212121; + border-top: 1px solid #FFF; + border-left: 1px solid #FFF; + border-right: 1px solid #FFF; + border-bottom: 1px solid #FFF; +} + +table.mui-btn.mui-btn--raised > tr > td > a, +table.mui-btn.mui-btn--raised > tbody > tr > td > a { + border-top: 1px solid #f2f2f2; + border-left: 1px solid #e6e6e6; + border-right: 1px solid #e6e6e6; + border-bottom: 2px solid #bababa; +} + +table.mui-btn.mui-btn--flat > tr > td, +table.mui-btn.mui-btn--flat > tbody > tr > td { + background-color: transparent; +} + +table.mui-btn.mui-btn--flat > tr > td > a, +table.mui-btn.mui-btn--flat > tbody > tr > td > a { + color: #212121; + border-top: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; +} + +table.mui-btn > tr > td, +table.mui-btn > tbody > tr > td { + border-radius: 3px; +} + +table.mui-btn > tr > td > a, +table.mui-btn > tbody > tr > td > a { + font-weight: 500; + font-size: 14px; + color: #212121; + line-height: 14px; + letter-spacing: 0.03em; + text-transform: uppercase; + border-top: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; + display: inline-block; + text-decoration: none; + text-align: center; + border-radius: 3px; + padding: 10px 25px; + background-color: transparent; +} + +table.mui-btn.mui-btn--primary > tr > td, +table.mui-btn.mui-btn--primary > tbody > tr > td { + background-color: #2196F3; +} + +table.mui-btn.mui-btn--primary > tr > td > a, +table.mui-btn.mui-btn--primary > tbody > tr > td > a { + color: #FFF; + border-top: 1px solid #2196F3; + border-left: 1px solid #2196F3; + border-right: 1px solid #2196F3; + border-bottom: 1px solid #2196F3; +} + +table.mui-btn.mui-btn--primary.mui-btn--raised > tr > td > a, +table.mui-btn.mui-btn--primary.mui-btn--raised > tbody > tr > td > a { + border-top: 1px solid #51adf6; + border-left: 1px solid #2196F3; + border-right: 1px solid #2196F3; + border-bottom: 2px solid #0a6ebd; +} + +table.mui-btn.mui-btn--primary.mui-btn--flat > tr > td, +table.mui-btn.mui-btn--primary.mui-btn--flat > tbody > tr > td { + background-color: transparent; +} + +table.mui-btn.mui-btn--primary.mui-btn--flat > tr > td > a, +table.mui-btn.mui-btn--primary.mui-btn--flat > tbody > tr > td > a { + color: #2196F3; + border-top: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; +} + +table.mui-btn.mui-btn--danger > tr > td, +table.mui-btn.mui-btn--danger > tbody > tr > td { + background-color: #F44336; +} + +table.mui-btn.mui-btn--danger > tr > td > a, +table.mui-btn.mui-btn--danger > tbody > tr > td > a { + color: #FFF; + border-top: 1px solid #F44336; + border-left: 1px solid #F44336; + border-right: 1px solid #F44336; + border-bottom: 1px solid #F44336; +} + +table.mui-btn.mui-btn--danger.mui-btn--raised > tr > td > a, +table.mui-btn.mui-btn--danger.mui-btn--raised > tbody > tr > td > a { + border-top: 1px solid #f77066; + border-left: 1px solid #F44336; + border-right: 1px solid #F44336; + border-bottom: 2px solid #d2190b; +} + +table.mui-btn.mui-btn--danger.mui-btn--flat > tr > td, +table.mui-btn.mui-btn--danger.mui-btn--flat > tbody > tr > td { + background-color: transparent; +} + +table.mui-btn.mui-btn--danger.mui-btn--flat > tr > td > a, +table.mui-btn.mui-btn--danger.mui-btn--flat > tbody > tr > td > a { + color: #F44336; + border-top: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; +} + +table.mui-btn.mui-btn--dark > tr > td, +table.mui-btn.mui-btn--dark > tbody > tr > td { + background-color: #424242; +} + +table.mui-btn.mui-btn--dark > tr > td > a, +table.mui-btn.mui-btn--dark > tbody > tr > td > a { + color: #FFF; + border-top: 1px solid #424242; + border-left: 1px solid #424242; + border-right: 1px solid #424242; + border-bottom: 1px solid #424242; +} + +table.mui-btn.mui-btn--dark.mui-btn--raised > tr > td > a, +table.mui-btn.mui-btn--dark.mui-btn--raised > tbody > tr > td > a { + border-top: 1px solid #5c5c5c; + border-left: 1px solid #424242; + border-right: 1px solid #424242; + border-bottom: 2px solid #1c1c1c; +} + +table.mui-btn.mui-btn--dark.mui-btn--flat > tr > td, +table.mui-btn.mui-btn--dark.mui-btn--flat > tbody > tr > td { + background-color: transparent; +} + +table.mui-btn.mui-btn--dark.mui-btn--flat > tr > td > a, +table.mui-btn.mui-btn--dark.mui-btn--flat > tbody > tr > td > a { + color: #424242; + border-top: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; +} + +table.mui-btn.mui-btn--accent > tr > td, +table.mui-btn.mui-btn--accent > tbody > tr > td { + background-color: #FF4081; +} + +table.mui-btn.mui-btn--accent > tr > td > a, +table.mui-btn.mui-btn--accent > tbody > tr > td > a { + color: #FFF; + border-top: 1px solid #FF4081; + border-left: 1px solid #FF4081; + border-right: 1px solid #FF4081; + border-bottom: 1px solid #FF4081; +} + +table.mui-btn.mui-btn--accent.mui-btn--raised > tr > td > a, +table.mui-btn.mui-btn--accent.mui-btn--raised > tbody > tr > td > a { + border-top: 1px solid #ff73a3; + border-left: 1px solid #FF4081; + border-right: 1px solid #FF4081; + border-bottom: 2px solid #f30053; +} + +table.mui-btn.mui-btn--accent.mui-btn--flat > tr > td, +table.mui-btn.mui-btn--accent.mui-btn--flat > tbody > tr > td { + background-color: transparent; +} + +table.mui-btn.mui-btn--accent.mui-btn--flat > tr > td > a, +table.mui-btn.mui-btn--accent.mui-btn--flat > tbody > tr > td > a { + color: #FF4081; + border-top: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; +} + +a.mui-btn--small, +table.mui-btn--small > tr > td > a, +table.mui-btn--small > tbody > tr > td > a { + font-size: 13px; + padding: 7.8px 15px; +} + +a.mui-btn--large, +table.mui-btn--large > tr > td > a, +table.mui-btn--large > tbody > tr > td > a { + font-size: 14px; + padding: 19px 25px; +} + +/** + * MUI Email Containers + */ +.mui-container, .mui-container-fixed { + max-width: 600px; + display: block; + margin: 0 auto; + clear: both; + text-align: left; + padding-left: 15px; + padding-right: 15px; +} + +.mui-container-fixed { + width: 600px; +} + +/** + * MUI Email Dividers + */ +.mui-divider { + display: block; + height: 1px; + background-color: #e0e0e0; +} + +.mui--divider-top { + border-top: 1px solid #e0e0e0; +} + +.mui--divider-bottom { + border-bottom: 1px solid #e0e0e0; +} + +.mui--divider-left { + border-left: 1px solid #e0e0e0; +} + +.mui--divider-right { + border-right: 1px solid #e0e0e0; +} + +/** + * MUI Email Panel + */ +.mui-panel { + padding: 15px; + border-radius: 0; + background-color: #FFF; + border-top: 1px solid #ededed; + border-left: 1px solid #e6e6e6; + border-right: 1px solid #e6e6e6; + border-bottom: 2px solid #d4d4d4; +} + +/** + * MUI Email Helpers + */ +.mui--text-left { + text-align: left; +} + +.mui--text-right { + text-align: right; +} + +.mui--text-center { + text-align: center; +} + +.mui--text-justify { + text-align: justify; +} + +.mui-image--fix { + display: block; +} + +.mui--text-dark { + color: #212121; +} + +.mui--text-dark-secondary { + color: #757575; +} + +.mui--text-dark-hint { + color: #9e9e9e; +} + +.mui--text-light { + color: #FFF; +} + +.mui--text-light-secondary { + color: #b3b3b3; +} + +.mui--text-light-hint { + color: gray; +} + +.mui--text-accent { + color: #FF4081; +} + +.mui--text-accent-secondary { + color: #ff82ad; +} + +.mui--text-accent-hint { + color: #ffa6c4; +} + +.mui--text-black { + color: #000; +} + +.mui--text-white { + color: #FFF; +} + +.mui--text-danger { + color: #F44336; +} + +/** + * MUI Email Typography + */ +.mui--text-display4 { + font-weight: 300; + font-size: 112px; + line-height: 112px; +} + +.mui--text-display3 { + font-weight: 400; + font-size: 56px; + line-height: 56px; +} + +.mui--text-display2 { + font-weight: 400; + font-size: 45px; + line-height: 48px; +} + +.mui--text-display1, h1 { + font-weight: 400; + font-size: 34px; + line-height: 40px; +} + +.mui--text-headline, h2 { + font-weight: 400; + font-size: 24px; + line-height: 32px; +} + +.mui--text-title, h3 { + font-weight: 400; + font-size: 20px; + line-height: 28px; +} + +.mui--text-subhead, h4 { + font-weight: 400; + font-size: 16px; + line-height: 24px; +} + +.mui--text-body2, h5 { + font-weight: 500; + font-size: 14px; + line-height: 24px; +} + +.mui--text-body1 { + font-weight: 400; + font-size: 14px; + line-height: 20px; +} + +.mui--text-caption { + font-weight: 400; + font-size: 12px; + line-height: 16px; +} + +.mui--text-menu { + font-weight: 500; + font-size: 13px; + line-height: 17px; +} + +.mui--text-button { + font-weight: 500; + font-size: 14px; + line-height: 18px; + text-transform: uppercase; +} diff --git a/platforms/ios/www/libs/mui/packages/cdn/email/mui-email-styletag.css b/platforms/ios/www/libs/mui/packages/cdn/email/mui-email-styletag.css new file mode 100644 index 0000000..1471793 --- /dev/null +++ b/platforms/ios/www/libs/mui/packages/cdn/email/mui-email-styletag.css @@ -0,0 +1,36 @@ +/** + * MUI Colors module + */ +/** + * MUI Email Styletag + */ +#outlook a { + padding: 0; +} + +.ReadMsgBody { + width: 100%; +} + +.ExternalClass { + width: 100%; +} + +.ExternalClass, +.ExternalClass p, +.ExternalClass span, +.ExternalClass font, +.ExternalClass td, +.ExternalClass div { + line-height: 100%; +} + +.mui-container-fixed { + width: 600px; + display: block; + margin: 0 auto; + clear: both; + text-align: left; + padding-left: 15px; + padding-right: 15px; +} diff --git a/platforms/ios/www/libs/mui/packages/cdn/extra/mui-angular-combined.js b/platforms/ios/www/libs/mui/packages/cdn/extra/mui-angular-combined.js new file mode 100644 index 0000000..ab809aa --- /dev/null +++ b/platforms/ios/www/libs/mui/packages/cdn/extra/mui-angular-combined.js @@ -0,0 +1,2 @@ +!function(i){var e=i.babelHelpers={};e.interopRequireDefault=function(i){return i&&i.__esModule?i:{"default":i}},e.interopRequireWildcard=function(i){if(i&&i.__esModule)return i;var e={};if(null!=i)for(var t in i)Object.prototype.hasOwnProperty.call(i,t)&&(e[t]=i[t]);return e["default"]=i,e}}("undefined"==typeof global?self:global),function i(e,t,o){function n(a,r){if(!t[a]){if(!e[a]){var u="function"==typeof require&&require;if(!r&&u)return u(a,!0);if(l)return l(a,!0);throw new Error("Cannot find module '"+a+"'")}var m=t[a]={exports:{}};e[a][0].call(m.exports,function(i){var t=e[a][1][i];return n(t?t:i)},m,m.exports,i,e,t,o)}return t[a].exports}for(var l="function"==typeof require&&require,a=0;as&&(f=r+(t+1)*a-(-1*o+n+l),b=e*a+2*r-p,g=Math.min(f,b)),{height:p+"px",top:o+"px",scrollTop:g}}var n=15,l=32,a=42,r=8;e.exports={getMenuPositionalCSS:o}},{}],5:[function(i,e,t){"use strict";function o(i,e){if(e&&i.setAttribute){for(var t,o=b(i),n=e.split(" "),l=0;l-1:!1}function a(i){if(void 0===i)return"undefined";var e=Object.prototype.toString.call(i);if(0===e.indexOf("[object "))return e.slice(8,-1).toLowerCase();throw new Error("MUI: Could not understand type: "+e)}function r(i,e,t,o){o=void 0===o?!1:o,i.addEventListener(e,t,o);var n=i._muiEventCache=i._muiEventCache||{};n[e]=n[e]||[],n[e].push([t,o])}function u(i,e,t,o){o=void 0===o?!1:o;var n,l,a=i._muiEventCache=i._muiEventCache||{},r=a[e]||[];for(l=r.length;l--;)n=r[l],(void 0===t||n[0]===t&&n[1]===o)&&(r.splice(l,1),i.removeEventListener(e,n[0],n[1]))}function m(i,e,t,o){r(i,e,function n(o){t&&t.apply(this,arguments),u(i,e,n)},o)}function d(i,e){var t=window;if(void 0===e){if(i===t){var o=document.documentElement;return(t.pageXOffset||o.scrollLeft)-(o.clientLeft||0)}return i.scrollLeft}i===t?t.scrollTo(e,s(t)):i.scrollLeft=e}function s(i,e){var t=window;if(void 0===e){if(i===t){var o=document.documentElement;return(t.pageYOffset||o.scrollTop)-(o.clientTop||0)}return i.scrollTop}i===t?t.scrollTo(d(t),e):i.scrollTop=e}function c(i){var e=window,t=i.getBoundingClientRect(),o=s(e),n=d(e);return{top:t.top+o,left:t.left+n,height:t.height,width:t.width}}function p(i){var e=!1,t=!0,o=document,n=o.defaultView,l=o.documentElement,a=o.addEventListener?"addEventListener":"attachEvent",r=o.addEventListener?"removeEventListener":"detachEvent",u=o.addEventListener?"":"on",m=function c(t){"readystatechange"==t.type&&"complete"!=o.readyState||(("load"==t.type?n:o)[r](u+t.type,c,!1),!e&&(e=!0)&&i.call(n,t.type||t))},d=function p(){try{l.doScroll("left")}catch(i){return void setTimeout(p,50)}m("poll")};if("complete"==o.readyState)i.call(n,"lazy");else{if(o.createEventObject&&l.doScroll){try{t=!n.frameElement}catch(s){}t&&d()}o[a](u+"DOMContentLoaded",m,!1),o[a](u+"readystatechange",m,!1),n[a](u+"load",m,!1)}}function f(i,e){if(e&&i.setAttribute){for(var t,o=b(i),n=e.split(" "),l=0;l=0;)o=o.replace(" "+t+" "," ");i.setAttribute("class",o.trim())}}function b(i){var e=(i.getAttribute("class")||"").replace(/[\n\t]/g,"");return" "+e+" "}function g(i){return i.replace(v,function(i,e,t,o){return o?t.toUpperCase():t}).replace(y,"Moz$1")}function x(i,e,t){var o;return o=t.getPropertyValue(e),""!==o||i.ownerDocument||(o=i.style[g(e)]),o}var h,v=/([\:\-\_]+(.))/g,y=/^moz([A-Z])/;h={multiple:!0,selected:!0,checked:!0,disabled:!0,readonly:!0,required:!0,open:!0},e.exports={addClass:o,css:n,hasClass:l,off:u,offset:c,on:r,one:m,ready:p,removeClass:f,type:a,scrollLeft:d,scrollTop:s}},{}],6:[function(i,e,t){"use strict";function o(){var i=window;if(g.debug&&"undefined"!=typeof i.console)try{i.console.log.apply(i.console,arguments)}catch(e){var t=Array.prototype.slice.call(arguments);i.console.log(t.join("\n"))}}function n(i){var e,t=document;e=t.head||t.getElementsByTagName("head")[0]||t.documentElement;var o=t.createElement("style");return o.type="text/css",o.styleSheet?o.styleSheet.cssText=i:o.appendChild(t.createTextNode(i)),e.insertBefore(o,e.firstChild),o}function l(i,e){if(!e)throw new Error("MUI: "+i);"undefined"!=typeof console&&console.error("MUI Warning: "+i)}function a(i){if(h.push(i),void 0===h._initialized){var e=document;x.on(e,"animationstart",r),x.on(e,"mozAnimationStart",r),x.on(e,"webkitAnimationStart",r),h._initialized=!0}}function r(i){if("mui-node-inserted"===i.animationName)for(var e=i.target,t=h.length-1;t>=0;t--)h[t](e)}function u(i){var e="";for(var t in i)e+=i[t]?t+" ":"";return e.trim()}function m(){if(void 0!==b)return b;var i=document.createElement("x");return i.style.cssText="pointer-events:auto",b="auto"===i.style.pointerEvents}function d(i,e){return function(){i[e].apply(i,arguments)}}function s(i,e,t,o,n){var l,a=document.createEvent("HTMLEvents"),t=void 0!==t?t:!0,o=void 0!==o?o:!0;if(a.initEvent(e,t,o),n)for(l in n)a[l]=n[l];return i&&i.dispatchEvent(a),a}function c(){if(v+=1,1===v){var i=window,e=document;f={left:x.scrollLeft(i),top:x.scrollTop(i)},x.addClass(e.body,y),i.scrollTo(f.left,f.top)}}function p(){if(0!==v&&(v-=1,0===v)){var i=window,e=document;x.removeClass(e.body,y),i.scrollTo(f.left,f.top)}}var f,b,g=i("../config"),x=i("./jqLite"),h=[],v=0,y="mui-body--scroll-lock";e.exports={callback:d,classNames:u,disableScrollLock:p,dispatchEvent:s,enableScrollLock:c,log:o,loadStyle:n,onNodeInserted:a,raiseError:l,supportsPointerEvents:m}},{"../config":3,"./jqLite":5}],7:[function(i,e,t){e.exports='/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-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{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}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{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{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-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:border-box}:after,:before{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:Arial,Verdana,Tahoma;font-size:14px;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);background-color:#FFF}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#2196F3;text-decoration:none}a:focus,a:hover{color:#1976D2;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}p{margin:0 0 10px}ol,ul{margin-top:0;margin-bottom:10px}figure{margin:0}img{vertical-align:middle}hr{margin-top:20px;margin-bottom:20px;border:0;height:1px;background-color:rgba(0,0,0,.12)}legend{display:block;width:100%;padding:0;margin-bottom:10px;font-size:21px;color:rgba(0,0,0,.87);line-height:inherit;border:0}input[type=search]{box-sizing:border-box;-webkit-appearance:none}input[type=checkbox]:focus,input[type=radio]:focus,input[type=file]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type=checkbox]:disabled,input[type=radio]:disabled{cursor:not-allowed}strong{font-weight:700}abbr[title]{cursor:help;border-bottom:1px dotted #2196F3}h1,h2,h3{margin-top:20px;margin-bottom:10px}h4,h5,h6{margin-top:10px;margin-bottom:10px}.mui--appbar-height{height:56px}.mui--appbar-min-height,.mui-appbar{min-height:56px}.mui--appbar-line-height{line-height:56px}.mui--appbar-top{top:56px}@media (orientation:landscape) and (max-height:480px){.mui--appbar-height{height:48px}.mui--appbar-min-height,.mui-appbar{min-height:48px}.mui--appbar-line-height{line-height:48px}.mui--appbar-top{top:48px}}@media (min-width:480px){.mui--appbar-height{height:64px}.mui--appbar-min-height,.mui-appbar{min-height:64px}.mui--appbar-line-height{line-height:64px}.mui--appbar-top{top:64px}}.mui-appbar{background-color:#2196F3;color:#FFF}.mui-btn{animation-duration:.1ms;animation-name:mui-node-inserted;font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase;color:rgba(0,0,0,.87);background-color:#FFF;transition:all .2s ease-in-out;display:inline-block;height:36px;padding:0 26px;margin-top:6px;margin-bottom:6px;border:none;border-radius:2px;cursor:pointer;-ms-touch-action:manipulation;touch-action:manipulation;background-image:none;text-align:center;line-height:36px;vertical-align:middle;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:14px;letter-spacing:.03em;position:relative;overflow:hidden}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{color:rgba(0,0,0,.87);background-color:#fff}.mui-btn[disabled]:active,.mui-btn[disabled]:focus,.mui-btn[disabled]:hover{color:rgba(0,0,0,.87);background-color:#FFF}.mui-btn.mui-btn--flat{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn.mui-btn--flat:active,.mui-btn.mui-btn--flat:focus,.mui-btn.mui-btn--flat:hover{color:rgba(0,0,0,.87);background-color:#f2f2f2}.mui-btn.mui-btn--flat[disabled]:active,.mui-btn.mui-btn--flat[disabled]:focus,.mui-btn.mui-btn--flat[disabled]:hover{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{outline:0;text-decoration:none;color:rgba(0,0,0,.87)}.mui-btn:focus,.mui-btn:hover{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:focus,.mui-btn:hover{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn.mui--is-disabled,.mui-btn:disabled{cursor:not-allowed;pointer-events:none;opacity:.6;box-shadow:none}.mui-btn+.mui-btn{margin-left:8px}.mui-btn--flat{background-color:transparent}.mui-btn--flat:active,.mui-btn--flat:focus,.mui-btn--flat:hover{box-shadow:none;background-color:#f2f2f2}.mui-btn--fab,.mui-btn--raised{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab,.mui-btn--raised{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn--fab{position:relative;padding:0;width:55px;height:55px;line-height:55px;border-radius:50%;z-index:1}.mui-btn--primary{color:#FFF;background-color:#2196F3}.mui-btn--primary:active,.mui-btn--primary:focus,.mui-btn--primary:hover{color:#FFF;background-color:#39a1f4}.mui-btn--primary[disabled]:active,.mui-btn--primary[disabled]:focus,.mui-btn--primary[disabled]:hover{color:#FFF;background-color:#2196F3}.mui-btn--primary.mui-btn--flat{color:#2196F3;background-color:transparent}.mui-btn--primary.mui-btn--flat:active,.mui-btn--primary.mui-btn--flat:focus,.mui-btn--primary.mui-btn--flat:hover{color:#2196F3;background-color:#f2f2f2}.mui-btn--primary.mui-btn--flat[disabled]:active,.mui-btn--primary.mui-btn--flat[disabled]:focus,.mui-btn--primary.mui-btn--flat[disabled]:hover{color:#2196F3;background-color:transparent}.mui-btn--dark{color:#FFF;background-color:#424242}.mui-btn--dark:active,.mui-btn--dark:focus,.mui-btn--dark:hover{color:#FFF;background-color:#4f4f4f}.mui-btn--dark[disabled]:active,.mui-btn--dark[disabled]:focus,.mui-btn--dark[disabled]:hover{color:#FFF;background-color:#424242}.mui-btn--dark.mui-btn--flat{color:#424242;background-color:transparent}.mui-btn--dark.mui-btn--flat:active,.mui-btn--dark.mui-btn--flat:focus,.mui-btn--dark.mui-btn--flat:hover{color:#424242;background-color:#f2f2f2}.mui-btn--dark.mui-btn--flat[disabled]:active,.mui-btn--dark.mui-btn--flat[disabled]:focus,.mui-btn--dark.mui-btn--flat[disabled]:hover{color:#424242;background-color:transparent}.mui-btn--danger{color:#FFF;background-color:#F44336}.mui-btn--danger:active,.mui-btn--danger:focus,.mui-btn--danger:hover{color:#FFF;background-color:#f55a4e}.mui-btn--danger[disabled]:active,.mui-btn--danger[disabled]:focus,.mui-btn--danger[disabled]:hover{color:#FFF;background-color:#F44336}.mui-btn--danger.mui-btn--flat{color:#F44336;background-color:transparent}.mui-btn--danger.mui-btn--flat:active,.mui-btn--danger.mui-btn--flat:focus,.mui-btn--danger.mui-btn--flat:hover{color:#F44336;background-color:#f2f2f2}.mui-btn--danger.mui-btn--flat[disabled]:active,.mui-btn--danger.mui-btn--flat[disabled]:focus,.mui-btn--danger.mui-btn--flat[disabled]:hover{color:#F44336;background-color:transparent}.mui-btn--accent{color:#FFF;background-color:#FF4081}.mui-btn--accent:active,.mui-btn--accent:focus,.mui-btn--accent:hover{color:#FFF;background-color:#ff5a92}.mui-btn--accent[disabled]:active,.mui-btn--accent[disabled]:focus,.mui-btn--accent[disabled]:hover{color:#FFF;background-color:#FF4081}.mui-btn--accent.mui-btn--flat{color:#FF4081;background-color:transparent}.mui-btn--accent.mui-btn--flat:active,.mui-btn--accent.mui-btn--flat:focus,.mui-btn--accent.mui-btn--flat:hover{color:#FF4081;background-color:#f2f2f2}.mui-btn--accent.mui-btn--flat[disabled]:active,.mui-btn--accent.mui-btn--flat[disabled]:focus,.mui-btn--accent.mui-btn--flat[disabled]:hover{color:#FF4081;background-color:transparent}.mui-btn--small{height:30.6px;line-height:30.6px;padding:0 16px;font-size:13px}.mui-btn--large{height:54px;line-height:54px;padding:0 26px;font-size:14px}.mui-btn--fab.mui-btn--small{width:44px;height:44px;line-height:44px}.mui-btn--fab.mui-btn--large{width:75px;height:75px;line-height:75px}.mui-checkbox,.mui-radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.mui-checkbox>label,.mui-radio>label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio],.mui-radio>label>input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px}.mui-checkbox+.mui-checkbox,.mui-radio+.mui-radio{margin-top:-5px}.mui-checkbox--inline,.mui-radio--inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.mui-checkbox--inline>input[type=checkbox],.mui-checkbox--inline>input[type=radio],.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox--inline>label>input[type=radio],.mui-radio--inline>input[type=checkbox],.mui-radio--inline>input[type=radio],.mui-radio--inline>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio]{margin:4px 0 0;line-height:normal}.mui-checkbox--inline+.mui-checkbox--inline,.mui-radio--inline+.mui-radio--inline{margin-top:0;margin-left:10px}.mui-container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container:after,.mui-container:before{content:" ";display:table}.mui-container:after{clear:both}@media (min-width:544px){.mui-container{max-width:570px}}@media (min-width:768px){.mui-container{max-width:740px}}@media (min-width:992px){.mui-container{max-width:960px}}@media (min-width:1200px){.mui-container{max-width:1170px}}.mui-container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container-fluid:after,.mui-container-fluid:before{content:" ";display:table}.mui-container-fluid:after{clear:both}.mui-divider{display:block;height:1px;background-color:rgba(0,0,0,.12)}.mui--divider-top{border-top:1px solid rgba(0,0,0,.12)}.mui--divider-bottom{border-bottom:1px solid rgba(0,0,0,.12)}.mui--divider-left{border-left:1px solid rgba(0,0,0,.12)}.mui--divider-right{border-right:1px solid rgba(0,0,0,.12)}.mui-dropdown{display:inline-block;position:relative}[data-mui-toggle=dropdown]{animation-duration:.1ms;animation-name:mui-node-inserted;outline:0}.mui-dropdown__menu{position:absolute;top:100%;left:0;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#FFF;border-radius:2px;z-index:1;background-clip:padding-box}.mui-dropdown__menu.mui--is-open{display:block}.mui-dropdown__menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);white-space:nowrap}.mui-dropdown__menu>li>a:focus,.mui-dropdown__menu>li>a:hover{text-decoration:none;color:rgba(0,0,0,.87);background-color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a,.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;cursor:not-allowed}.mui-dropdown__menu--right{left:auto;right:0}@media (min-width:544px){.mui-form--inline>.mui-textfield{display:inline-block;margin-bottom:0}.mui-form--inline>.mui-checkbox,.mui-form--inline>.mui-radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.mui-form--inline>.mui-checkbox>label,.mui-form--inline>.mui-radio>label{padding-left:0}.mui-form--inline>.mui-checkbox>label>input[type=checkbox],.mui-form--inline>.mui-radio>label>input[type=radio]{position:relative;margin-left:0}.mui-form--inline>.mui-select{display:inline-block}.mui-form--inline>.mui-btn{margin-bottom:0;margin-top:0;vertical-align:bottom}}.mui-row{margin-left:-15px;margin-right:-15px}.mui-row:after,.mui-row:before{content:" ";display:table}.mui-row:after{clear:both}.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9,.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9,.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9,.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{min-height:1px;padding-left:15px;padding-right:15px}.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{float:left}.mui-col-xs-1{width:8.33333%}.mui-col-xs-2{width:16.66667%}.mui-col-xs-3{width:25%}.mui-col-xs-4{width:33.33333%}.mui-col-xs-5{width:41.66667%}.mui-col-xs-6{width:50%}.mui-col-xs-7{width:58.33333%}.mui-col-xs-8{width:66.66667%}.mui-col-xs-9{width:75%}.mui-col-xs-10{width:83.33333%}.mui-col-xs-11{width:91.66667%}.mui-col-xs-12{width:100%}.mui-col-xs-offset-0{margin-left:0}.mui-col-xs-offset-1{margin-left:8.33333%}.mui-col-xs-offset-2{margin-left:16.66667%}.mui-col-xs-offset-3{margin-left:25%}.mui-col-xs-offset-4{margin-left:33.33333%}.mui-col-xs-offset-5{margin-left:41.66667%}.mui-col-xs-offset-6{margin-left:50%}.mui-col-xs-offset-7{margin-left:58.33333%}.mui-col-xs-offset-8{margin-left:66.66667%}.mui-col-xs-offset-9{margin-left:75%}.mui-col-xs-offset-10{margin-left:83.33333%}.mui-col-xs-offset-11{margin-left:91.66667%}.mui-col-xs-offset-12{margin-left:100%}@media (min-width:544px){.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9{float:left}.mui-col-sm-1{width:8.33333%}.mui-col-sm-2{width:16.66667%}.mui-col-sm-3{width:25%}.mui-col-sm-4{width:33.33333%}.mui-col-sm-5{width:41.66667%}.mui-col-sm-6{width:50%}.mui-col-sm-7{width:58.33333%}.mui-col-sm-8{width:66.66667%}.mui-col-sm-9{width:75%}.mui-col-sm-10{width:83.33333%}.mui-col-sm-11{width:91.66667%}.mui-col-sm-12{width:100%}.mui-col-sm-offset-0{margin-left:0}.mui-col-sm-offset-1{margin-left:8.33333%}.mui-col-sm-offset-2{margin-left:16.66667%}.mui-col-sm-offset-3{margin-left:25%}.mui-col-sm-offset-4{margin-left:33.33333%}.mui-col-sm-offset-5{margin-left:41.66667%}.mui-col-sm-offset-6{margin-left:50%}.mui-col-sm-offset-7{margin-left:58.33333%}.mui-col-sm-offset-8{margin-left:66.66667%}.mui-col-sm-offset-9{margin-left:75%}.mui-col-sm-offset-10{margin-left:83.33333%}.mui-col-sm-offset-11{margin-left:91.66667%}.mui-col-sm-offset-12{margin-left:100%}}@media (min-width:768px){.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9{float:left}.mui-col-md-1{width:8.33333%}.mui-col-md-2{width:16.66667%}.mui-col-md-3{width:25%}.mui-col-md-4{width:33.33333%}.mui-col-md-5{width:41.66667%}.mui-col-md-6{width:50%}.mui-col-md-7{width:58.33333%}.mui-col-md-8{width:66.66667%}.mui-col-md-9{width:75%}.mui-col-md-10{width:83.33333%}.mui-col-md-11{width:91.66667%}.mui-col-md-12{width:100%}.mui-col-md-offset-0{margin-left:0}.mui-col-md-offset-1{margin-left:8.33333%}.mui-col-md-offset-2{margin-left:16.66667%}.mui-col-md-offset-3{margin-left:25%}.mui-col-md-offset-4{margin-left:33.33333%}.mui-col-md-offset-5{margin-left:41.66667%}.mui-col-md-offset-6{margin-left:50%}.mui-col-md-offset-7{margin-left:58.33333%}.mui-col-md-offset-8{margin-left:66.66667%}.mui-col-md-offset-9{margin-left:75%}.mui-col-md-offset-10{margin-left:83.33333%}.mui-col-md-offset-11{margin-left:91.66667%}.mui-col-md-offset-12{margin-left:100%}}@media (min-width:992px){.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9{float:left}.mui-col-lg-1{width:8.33333%}.mui-col-lg-2{width:16.66667%}.mui-col-lg-3{width:25%}.mui-col-lg-4{width:33.33333%}.mui-col-lg-5{width:41.66667%}.mui-col-lg-6{width:50%}.mui-col-lg-7{width:58.33333%}.mui-col-lg-8{width:66.66667%}.mui-col-lg-9{width:75%}.mui-col-lg-10{width:83.33333%}.mui-col-lg-11{width:91.66667%}.mui-col-lg-12{width:100%}.mui-col-lg-offset-0{margin-left:0}.mui-col-lg-offset-1{margin-left:8.33333%}.mui-col-lg-offset-2{margin-left:16.66667%}.mui-col-lg-offset-3{margin-left:25%}.mui-col-lg-offset-4{margin-left:33.33333%}.mui-col-lg-offset-5{margin-left:41.66667%}.mui-col-lg-offset-6{margin-left:50%}.mui-col-lg-offset-7{margin-left:58.33333%}.mui-col-lg-offset-8{margin-left:66.66667%}.mui-col-lg-offset-9{margin-left:75%}.mui-col-lg-offset-10{margin-left:83.33333%}.mui-col-lg-offset-11{margin-left:91.66667%}.mui-col-lg-offset-12{margin-left:100%}}@media (min-width:1200px){.mui-col-xl-1,.mui-col-xl-10,.mui-col-xl-11,.mui-col-xl-12,.mui-col-xl-2,.mui-col-xl-3,.mui-col-xl-4,.mui-col-xl-5,.mui-col-xl-6,.mui-col-xl-7,.mui-col-xl-8,.mui-col-xl-9{float:left}.mui-col-xl-1{width:8.33333%}.mui-col-xl-2{width:16.66667%}.mui-col-xl-3{width:25%}.mui-col-xl-4{width:33.33333%}.mui-col-xl-5{width:41.66667%}.mui-col-xl-6{width:50%}.mui-col-xl-7{width:58.33333%}.mui-col-xl-8{width:66.66667%}.mui-col-xl-9{width:75%}.mui-col-xl-10{width:83.33333%}.mui-col-xl-11{width:91.66667%}.mui-col-xl-12{width:100%}.mui-col-xl-offset-0{margin-left:0}.mui-col-xl-offset-1{margin-left:8.33333%}.mui-col-xl-offset-2{margin-left:16.66667%}.mui-col-xl-offset-3{margin-left:25%}.mui-col-xl-offset-4{margin-left:33.33333%}.mui-col-xl-offset-5{margin-left:41.66667%}.mui-col-xl-offset-6{margin-left:50%}.mui-col-xl-offset-7{margin-left:58.33333%}.mui-col-xl-offset-8{margin-left:66.66667%}.mui-col-xl-offset-9{margin-left:75%}.mui-col-xl-offset-10{margin-left:83.33333%}.mui-col-xl-offset-11{margin-left:91.66667%}.mui-col-xl-offset-12{margin-left:100%}}.mui-panel{padding:15px;margin-bottom:20px;border-radius:0;background-color:#FFF;box-shadow:0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}.mui-panel:after,.mui-panel:before{content:" ";display:table}.mui-panel:after{clear:both}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-panel{box-shadow:0 -1px 2px 0 rgba(0,0,0,.12),-1px 0 2px 0 rgba(0,0,0,.12),0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}}.mui-select{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-select:focus{outline:0}.mui-select:focus>select{height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;height:32px;width:100%;appearance:none;-webkit-appearance:none;-moz-appearance:none;outline:0;border:none;border-bottom:1px solid rgba(0,0,0,.26);border-radius:0;box-shadow:none;background-color:transparent;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iNiIgd2lkdGg9IjEwIj48cG9seWdvbiBwb2ludHM9IjAsMCAxMCwwIDUsNiIgc3R5bGU9ImZpbGw6cmdiYSgwLDAsMCwuMjQpOyIvPjwvc3ZnPg==);background-repeat:no-repeat;background-position:right center;cursor:pointer;color:rgba(0,0,0,.87);font-size:16px;padding:0 25px 0 0}.mui-select>select::-ms-expand{display:none}.mui-select>select:focus{outline:0;height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select:disabled{color:rgba(0,0,0,.38);cursor:not-allowed;background-color:transparent;opacity:1}.mui-select__menu{position:absolute;z-index:2;min-width:100%;overflow-y:auto;padding:8px 0;background-color:#FFF;font-size:16px}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-select__menu{border-left:1px solid rgba(0,0,0,.12);border-top:1px solid rgba(0,0,0,.12)}}.mui-select__menu>div{padding:0 22px;height:42px;line-height:42px;cursor:pointer;white-space:nowrap}.mui-select__menu>div:hover{background-color:#E0E0E0}.mui-select__menu>div.mui--is-selected{background-color:#EEE}th{text-align:left}.mui-table{width:100%;max-width:100%;margin-bottom:20px}.mui-table>tbody>tr>td,.mui-table>tbody>tr>th,.mui-table>tfoot>tr>td,.mui-table>tfoot>tr>th,.mui-table>thead>tr>td,.mui-table>thead>tr>th{padding:10px;line-height:1.429}.mui-table>thead>tr>th{border-bottom:2px solid rgba(0,0,0,.12);font-weight:700}.mui-table>tbody+tbody{border-top:2px solid rgba(0,0,0,.12)}.mui-table.mui-table--bordered>tbody>tr>td{border-bottom:1px solid rgba(0,0,0,.12)}.mui-tabs__bar{list-style:none;padding-left:0;margin-bottom:0;background-color:transparent;white-space:nowrap;overflow-x:auto}.mui-tabs__bar>li{display:inline-block}.mui-tabs__bar>li>a{display:block;white-space:nowrap;text-transform:uppercase;font-weight:500;font-size:14px;color:rgba(0,0,0,.87);cursor:default;height:48px;line-height:48px;padding-left:24px;padding-right:24px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-tabs__bar>li>a:hover{text-decoration:none}.mui-tabs__bar>li.mui--is-active{border-bottom:2px solid #2196F3}.mui-tabs__bar>li.mui--is-active>a{color:#2196F3}.mui-tabs__bar.mui-tabs__bar--justified{display:table;width:100%;table-layout:fixed}.mui-tabs__bar.mui-tabs__bar--justified>li{display:table-cell}.mui-tabs__bar.mui-tabs__bar--justified>li>a{text-align:center;padding-left:0;padding-right:0}.mui-tabs__pane{display:none}.mui-tabs__pane.mui--is-active{display:block}[data-mui-toggle=tab]{animation-duration:.1ms;animation-name:mui-node-inserted}.mui-textfield{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-textfield>label{position:absolute;top:0;display:block;width:100%;color:rgba(0,0,0,.54);font-size:12px;font-weight:400;line-height:15px;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.mui-textfield>textarea{padding-top:5px}.mui-textfield>input,.mui-textfield>textarea{display:block}.mui-textfield>input:focus~label,.mui-textfield>textarea:focus~label{color:#2196F3}.mui-textfield--float-label>label{position:absolute;transform:translate(0,15px);font-size:16px;line-height:32px;color:rgba(0,0,0,.26);text-overflow:clip;cursor:text;pointer-events:none}.mui-textfield--float-label>input:focus~label,.mui-textfield--float-label>textarea:focus~label{transform:translate(0,0);font-size:12px;line-height:15px;text-overflow:ellipsis}.mui-textfield--float-label>input:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>input:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>input:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>textarea:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:rgba(0,0,0,.54);font-size:12px;line-height:15px;transform:translate(0,0);text-overflow:ellipsis}.mui-textfield--wrap-label{display:table;width:100%;padding-top:0}.mui-textfield--wrap-label:not(.mui-textfield--float-label)>label{display:table-header-group;position:static;white-space:normal;overflow-x:visible}.mui-textfield>input,.mui-textfield>textarea{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;background-color:transparent;color:rgba(0,0,0,.87);border:none;border-bottom:1px solid rgba(0,0,0,.26);outline:0;width:100%;font-size:16px;padding:0;box-shadow:none;border-radius:0;background-image:none}.mui-textfield>input:focus,.mui-textfield>textarea:focus{border-color:#2196F3;border-width:2px}.mui-textfield>input:-moz-read-only,.mui-textfield>input:disabled,.mui-textfield>textarea:-moz-read-only,.mui-textfield>textarea:disabled{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input:disabled,.mui-textfield>input:read-only,.mui-textfield>textarea:disabled,.mui-textfield>textarea:read-only{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input::-webkit-input-placeholder,.mui-textfield>textarea::-webkit-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::-moz-placeholder,.mui-textfield>textarea::-moz-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input:-ms-input-placeholder,.mui-textfield>textarea:-ms-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::placeholder,.mui-textfield>textarea::placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input{height:32px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>textarea{min-height:64px}.mui-textfield>textarea[rows]:not([rows="2"]):focus{margin-bottom:-1px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):not(:required),.mui-textfield>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required),.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty){border-color:#F44336;border-width:2px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty){height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required)~label,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):not(:required)~label,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:#F44336}.mui-textfield:not(.mui-textfield--float-label)>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label{color:#F44336}@keyframes mui-node-inserted{from{opacity:.99}to{opacity:1}}.mui--no-transition{transition:none!important}.mui--no-user-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.mui--text-left{text-align:left!important}.mui--text-right{text-align:right!important}.mui--text-center{text-align:center!important}.mui--text-justify{text-align:justify!important}.mui--text-nowrap{white-space:nowrap!important}.mui--align-baseline{vertical-align:baseline!important}.mui--align-top{vertical-align:top!important}.mui--align-middle{vertical-align:middle!important}.mui--align-bottom{vertical-align:bottom!important}.mui--text-dark{color:rgba(0,0,0,.87)}.mui--text-dark-secondary{color:rgba(0,0,0,.54)}.mui--text-dark-hint{color:rgba(0,0,0,.38)}.mui--text-light{color:#FFF}.mui--text-light-secondary{color:rgba(255,255,255,.7)}.mui--text-light-hint{color:rgba(255,255,255,.3)}.mui--text-accent{color:rgba(255,64,129,.87)}.mui--text-accent-secondary{color:rgba(255,64,129,.54)}.mui--text-accent-hint{color:rgba(255,64,129,.38)}.mui--text-black{color:#000}.mui--text-white{color:#FFF}.mui--text-danger{color:#F44336}.mui-list--unstyled{padding-left:0;list-style:none}.mui-list--inline{padding-left:0;list-style:none;margin-left:-5px}.mui-list--inline>li{display:inline-block;padding-left:5px;padding-right:5px}.mui--z1,.mui-dropdown__menu,.mui-select__menu{box-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24)}.mui--z2{box-shadow:0 3px 6px rgba(0,0,0,.16),0 3px 6px rgba(0,0,0,.23)}.mui--z3{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}.mui--z4{box-shadow:0 14px 28px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.22)}.mui--z5{box-shadow:0 19px 38px rgba(0,0,0,.3),0 15px 12px rgba(0,0,0,.22)}.mui--clearfix:after,.mui--clearfix:before{content:" ";display:table}.mui--clearfix:after{clear:both}.mui--pull-right{float:right!important}.mui--pull-left{float:left!important}.mui--hide{display:none!important}.mui--show{display:block!important}.mui--invisible{visibility:hidden}.mui--overflow-hidden{overflow:hidden!important}.mui--overflow-hidden-x{overflow-x:hidden!important}.mui--overflow-hidden-y{overflow-y:hidden!important}.mui--visible-lg-block,.mui--visible-lg-inline,.mui--visible-lg-inline-block,.mui--visible-md-block,.mui--visible-md-inline,.mui--visible-md-inline-block,.mui--visible-sm-block,.mui--visible-sm-inline,.mui--visible-sm-inline-block,.mui--visible-xl-block,.mui--visible-xl-inline,.mui--visible-xl-inline-block,.mui--visible-xs-block,.mui--visible-xs-inline,.mui--visible-xs-inline-block{display:none!important}@media (max-width:543px){.mui-visible-xs{display:block!important}table.mui-visible-xs{display:table}tr.mui-visible-xs{display:table-row!important}td.mui-visible-xs,th.mui-visible-xs{display:table-cell!important}.mui--visible-xs-block{display:block!important}.mui--visible-xs-inline{display:inline!important}.mui--visible-xs-inline-block{display:inline-block!important}}@media (min-width:544px) and (max-width:767px){.mui-visible-sm{display:block!important}table.mui-visible-sm{display:table}tr.mui-visible-sm{display:table-row!important}td.mui-visible-sm,th.mui-visible-sm{display:table-cell!important}.mui--visible-sm-block{display:block!important}.mui--visible-sm-inline{display:inline!important}.mui--visible-sm-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.mui-visible-md{display:block!important}table.mui-visible-md{display:table}tr.mui-visible-md{display:table-row!important}td.mui-visible-md,th.mui-visible-md{display:table-cell!important}.mui--visible-md-block{display:block!important}.mui--visible-md-inline{display:inline!important}.mui--visible-md-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.mui-visible-lg{display:block!important}table.mui-visible-lg{display:table}tr.mui-visible-lg{display:table-row!important}td.mui-visible-lg,th.mui-visible-lg{display:table-cell!important}.mui--visible-lg-block{display:block!important}.mui--visible-lg-inline{display:inline!important}.mui--visible-lg-inline-block{display:inline-block!important}}@media (min-width:1200px){.mui-visible-xl{display:block!important}table.mui-visible-xl{display:table}tr.mui-visible-xl{display:table-row!important}td.mui-visible-xl,th.mui-visible-xl{display:table-cell!important}.mui--visible-xl-block{display:block!important}.mui--visible-xl-inline{display:inline!important}.mui--visible-xl-inline-block{display:inline-block!important}}@media (max-width:543px){.mui--hidden-xs{display:none!important}}@media (min-width:544px) and (max-width:767px){.mui--hidden-sm{display:none!important}}@media (min-width:768px) and (max-width:991px){.mui--hidden-md{display:none!important}}@media (min-width:992px) and (max-width:1199px){.mui--hidden-lg{display:none!important}}@media (min-width:1200px){.mui--hidden-xl{display:none!important}}body.mui-body--scroll-lock{overflow:hidden!important}#mui-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:99999999;background-color:rgba(0,0,0,.2);overflow:auto}.mui-ripple-effect{position:absolute;border-radius:50%;pointer-events:none;opacity:0;animation:mui-ripple-animation 2s}@keyframes mui-ripple-animation{from{transform:scale(1);opacity:.4}to{transform:scale(100);opacity:0}}.mui-btn>.mui-ripple-effect{background-color:#a6a6a6}.mui-btn--primary>.mui-ripple-effect{background-color:#FFF}.mui-btn--dark>.mui-ripple-effect{background-color:#FFF}.mui-btn--danger>.mui-ripple-effect{background-color:#FFF}.mui-btn--accent>.mui-ripple-effect{background-color:#FFF}.mui-btn--flat>.mui-ripple-effect{background-color:#a6a6a6}.mui--text-display4{font-weight:300;font-size:112px;line-height:112px}.mui--text-display3{font-weight:400;font-size:56px;line-height:56px}.mui--text-display2{font-weight:400;font-size:45px;line-height:48px}.mui--text-display1,h1{font-weight:400;font-size:34px;line-height:40px}.mui--text-headline,h2{font-weight:400;font-size:24px;line-height:32px}.mui--text-title,h3{font-weight:400;font-size:20px;line-height:28px}.mui--text-subhead,h4{font-weight:400;font-size:16px;line-height:24px}.mui--text-body2,h5{font-weight:500;font-size:14px;line-height:24px}.mui--text-body1{font-weight:400;font-size:14px;line-height:20px}.mui--text-caption{font-weight:400;font-size:12px;line-height:16px}.mui--text-menu{font-weight:500;font-size:13px;line-height:17px}.mui--text-button{font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase}'; +},{}],8:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l="mui.appbar";n["default"].module(l,[]).directive("muiAppbar",function(){return{restrict:"AE",transclude:!0,replace:!0,template:'
            ',link:function(i,e,t,o,n){n(i,function(i){e.append(i)})}}}),t["default"]=l,e.exports=t["default"]},{angular:"aeQg5j"}],9:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l=i("../js/lib/jqLite"),a=babelHelpers.interopRequireWildcard(l),r="mui.button";n["default"].module(r,[]).directive("muiButton",function(){return{restrict:"AE",scope:{type:"@?"},replace:!0,template:'',transclude:!0,link:function(i,e,t){var o=n["default"].isUndefined,l=e[0];l._muiDropdown=!0,l._muiRipple=!0,!o(t.disabled)&&o(t.ngDisabled)&&e.prop("disabled",!0),n["default"].forEach(["variant","color","size"],function(i){var o=t[i];o&&e.addClass("mui-btn--"+o)})}}}).directive("muiRipple",["$timeout",function(i){return{restrict:"A",link:function(e,t,o){var l="mui-ripple-effect";t.on("mousedown",function(e){if(!t.prop("disabled")){var o,r,u=a.offset(t[0]),m=e.pageX-u.left,d=e.pageY-u.top;o=u.height,t.hasClass("mui-btn--fab")&&(o=u.height/2),r=o/2;var s={height:o+"px",width:o+"px",top:d-r+"px",left:m-r+"px"},c=n["default"].element("
            ").addClass(l);for(var p in s)c.css(p,s[p]);t.append(c),i(function(){c.remove()},2e3)}})}}}]),t["default"]=r,e.exports=t["default"]},{"../js/lib/jqLite":5,angular:"aeQg5j"}],10:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l="mui.caret";n["default"].module(l,[]).directive("muiCaret",function(){return{restrict:"AE",replace:!0,template:''}}),t["default"]=l,e.exports=t["default"]},{angular:"aeQg5j"}],11:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l="mui.checkbox";n["default"].module(l,[]).directive("muiCheckbox",function(){return{restrict:"AE",replace:!0,require:["?ngModel"],scope:{label:"@",name:"@",value:"@",ngModel:"=",ngDisabled:"="},template:'
            '}}),t["default"]=l,e.exports=t["default"]},{angular:"aeQg5j"}],12:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l="mui.col";n["default"].module(l,[]).directive("muiCol",function(){return{restrict:"AE",scope:!0,replace:!0,template:"
            ",transclude:!0,link:function(i,e,t,o,l){l(i,function(i){e.append(i)});var a={xs:"mui-col-xs-",sm:"mui-col-sm-",md:"mui-col-md-",lg:"mui-col-lg-","xs-offset":"mui-col-xs-offset-","sm-offset":"mui-col-sm-offset-","md-offset":"mui-col-md-offset-","lg-offset":"mui-col-lg-offset-"};n["default"].forEach(a,function(i,o){var n=t[t.$normalize(o)];n&&e.addClass(i+n)})}}}),t["default"]=l,e.exports=t["default"]},{angular:"aeQg5j"}],13:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l="mui.container";n["default"].module(l,[]).directive("muiContainer",function(){return{restrict:"AE",template:'
            ',transclude:!0,scope:!0,replace:!0,link:function(i,e,t,o,l){l(i,function(i){e.append(i)}),n["default"].isUndefined(t.fluid)||e.removeClass("mui-container").addClass("mui-container-fluid")}}}),t["default"]=l,e.exports=t["default"]},{angular:"aeQg5j"}],14:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l="mui.divider";n["default"].module(l,[]).directive("muiDivider",function(){return{restrict:"AE",replace:!0,compile:function(i,e){i.addClass("mui-divider")}}}),t["default"]=l,e.exports=t["default"]},{angular:"aeQg5j"}],15:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l="mui.dropdown-item";n["default"].module(l,[]).directive("muiDropdownItem",function(){return{restrict:"AE",replace:!0,scope:{link:"@"},transclude:!0,template:'
          • '}}),t["default"]=l,e.exports=t["default"]},{angular:"aeQg5j"}],16:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l="mui.dropdown";n["default"].module(l,[]).directive("muiDropdown",["$timeout","$compile",function(i,e){return{restrict:"AE",transclude:!0,replace:!0,scope:{variant:"@",color:"@",size:"@",open:"=?",ngDisabled:"="},template:'
              ',link:function(i,e,t){function o(){i.open=!1,i.$apply()}var l,a,r="mui-dropdown__menu",u="mui--is-open",m="mui-dropdown__menu--right",d=n["default"].isUndefined;l=n["default"].element(e[0].querySelector("."+r)),a=n["default"].element(e[0].querySelector(".mui-btn")),l.css("margin-top","-3px"),d(t.open)||(i.open=!0),d(t.disabled)||a.attr("disabled",!0),d(t.rightAlign)||l.addClass(m),d(t.noCaret)?a.html(t.label+" "):a.html(t.label),i.$watch("open",function(i){i===!0?(l.addClass(u),document.addEventListener("click",o)):i===!1&&(l.removeClass(u),document.removeEventListener("click",o))}),i.onClick=function(e){i.disabled||(e.preventDefault(),e.stopPropagation(),i.open?i.open=!1:i.open=!0)}}}}]),t["default"]=l,e.exports=t["default"]},{angular:"aeQg5j"}],17:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l="mui.form";n["default"].module(l,[]).directive("muiFormInline",function(){return{restrict:"A",link:function(i,e,t){e.addClass("mui-form--inline")}}}),t["default"]=l,e.exports=t["default"]},{angular:"aeQg5j"}],18:[function(i,e,t){"use strict";function o(i,e){e?i.removeClass(u).addClass(m):i.removeClass(m).addClass(u)}function n(i){var e,t,n="mui--is-dirty";return e={floatLabel:"@",hint:"@",label:"@",ngDisabled:"=",ngModel:"="},t='
              ',i?(e.rows="@",t+=''):(e.type="@",t+=''),t+="
              ",["$timeout",function(l){return{restrict:"AE",require:["ngModel"],scope:e,replace:!0,template:t,link:function(e,t,r,u){var m=t.find("input")||t.find("textarea"),d=t.find("label"),s=u[0],c=(u[1],a["default"].isUndefined),p=m[0];p&&(p._muiTextfield=!0),t.removeAttr("ng-change"),t.removeAttr("ng-model"),i?e.rows=e.rows||2:e.type=e.type||"text",c(r.autofocus)||m[0].focus(),c(r.required)||m.prop("required",!0),c(r.invalid)||m.addClass("mui--is-invalid"),o(m,e.ngModel),c(e.floatLabel)||(t.addClass("mui-textfield--float-label"),l(function(){d.css({transition:".15s ease-out","-webkit-transition":".15s ease-out","-moz-transition":".15s ease-out","-o-transition":".15s ease-out","-ms-transition":".15s ease-out"})},150)),e.onChange=function(){var i=e.ngModel;s&&s.$setViewValue(i),o(m,i),m.addClass(n)},e.onFocus=function(){m.addClass(n)}}}}]}Object.defineProperty(t,"__esModule",{value:!0});var l=window.angular,a=babelHelpers.interopRequireDefault(l),r="mui.input",u="mui--is-empty",m="mui--is-not-empty";a["default"].module(r,[]).directive("muiInput",n(!1)).directive("muiTextarea",n(!0)),t["default"]=r,e.exports=t["default"]},{angular:"aeQg5j"}],19:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l="mui.panel";n["default"].module(l,[]).directive("muiPanel",function(){return{restrict:"AE",replace:!0,scope:!0,template:'
              ',transclude:!0,link:function(i,e,t,o,n){n(i,function(i){e.append(i)})}}}),t["default"]=l,e.exports=t["default"]},{angular:"aeQg5j"}],20:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l="mui.radio";n["default"].module(l,[]).directive("muiRadio",function(){return{restrict:"AE",replace:!0,require:["?ngModel"],scope:{label:"@",name:"@",value:"@",ngModel:"=",ngDisabled:"="},template:'
              '}}),t["default"]=l,e.exports=t["default"]},{angular:"aeQg5j"}],21:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l="mui.row";n["default"].module("mui.row",[]).directive("muiRow",function(){return{restrict:"AE",scope:!0,replace:!0,template:'
              ',transclude:!0,link:function(i,e,t,o,n){n(i,function(i){e.append(i)})}}}),t["default"]=l,e.exports=t["default"]},{angular:"aeQg5j"}],22:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l=i("../js/lib/forms"),a=babelHelpers.interopRequireWildcard(l),r=i("../js/lib/util"),u=babelHelpers.interopRequireWildcard(r),m=i("../js/lib/jqLite"),d=babelHelpers.interopRequireWildcard(m),s="mui.select";n["default"].module(s,[]).directive("muiSelect",["$timeout",function(i){return{restrict:"AE",require:["ngModel"],scope:{name:"@",ngDisabled:"=",ngModel:"="},replace:!0,transclude:!0,template:'
              {{option.label}}
              ',link:function(e,t,o,l,r){function m(){e.isOpen=!1,e.$digest()}var s=t,c=t.find("div"),p=t.find("select"),f=n["default"].isUndefined;p[0]._muiSelect=!0,e.options=[],e.isOpen=!1,e.useDefault=!1,e.origTabIndex=p[0].tabIndex,e.menuIndex=0,f(o.useDefault)||(e.useDefault=!0),s.prop("tabIndex",-1),r(function(i){var t,o;for(o in i)t=i[o],"MUI-OPTION"===t.tagName&&e.options.push({value:t.getAttribute("value"),label:t.getAttribute("label")})}),e.onClick=function(){e.useDefault!==!0&&(e.isOpen=!0,s[0].focus())},e.onFocus=function(){if(e.useDefault!==!0){var i=p[0];e.origTabIndex=i.tabIndex,i.tabIndex=-1,s[0].focus()}},e.onMousedown=function(i){e.useDefault!==!0&&i.preventDefault()},e.onWrapperBlur=function(){p[0].tabIndex=e.origTabIndex},e.onWrapperFocus=function(i){return p[0].disabled?s[0].blur():void 0},e.onWrapperKeydown=function(i){var t=i.keyCode;if(e.isOpen===!1)32!==t&&38!==t&&40!==t||(i.preventDefault(),e.isOpen=!0);else{if(9===t)return e.isOpen=!1;27!==t&&40!==t&&38!==t&&13!==t||i.preventDefault(),27===t?e.isOpen=!1:40===t?e.menuIndex0&&(e.menuIndex-=1):13===t&&(e.ngModel=e.options[e.menuIndex].value,e.isOpen=!1)}},e.chooseOption=function(i){e.ngModel=i.value,e.isOpen=!1},e.$watch("isOpen",function(o,n){if(o!==n&&e.useDefault!==!0)if(o===!0){u.enableScrollLock();var l,r=e.ngModel,s=e.options,f=s.length;for(l=0;f>l;l++)if(s[l].value===r){e.menuIndex=l;break}var b=a.getMenuPositionalCSS(t[0],e.options.length,e.menuIndex);c.css(b),d.scrollTop(c[0],b.scrollTop),i(function(){d.on(document,"click",m),d.on(window,"resize",m)})}else p[0].focus(),u.disableScrollLock(),d.off(document,"click",m),d.off(window,"resize",m)})}}}]),t["default"]=s,e.exports=t["default"]},{"../js/lib/forms":4,"../js/lib/jqLite":5,"../js/lib/util":6,angular:"aeQg5j"}],23:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l=i("../js/lib/jqLite"),a=(babelHelpers.interopRequireWildcard(l),"mui.tabs");n["default"].module(a,[]).directive("muiTabs",function(){return{restrict:"EA",transclude:!0,scope:{selectedId:"=?selected",onChange:"&?"},template:'',controller:["$scope",function(i){var e=0;i.tabs=[],this.addTab=function(t){var o=e;return e+=1,i.tabs.push({label:t.label}),t.isActive&&(i.selectedId=o),o}}],link:function(i,e,t,o,l){var a=n["default"].isUndefined;a(i.selectedId)&&(i.selectedId=0),i.justified=!1,a(t.justified)||(i.justified=!0),i.onClick=function(e){e!==i.selectedId&&(i.selectedId=e,i.onChange&&i.$$postDigest(i.onChange))},l(i,function(i){e.append(i)})}}}).directive("muiTab",["$parse",function(i){return{require:"^?muiTabs",restrict:"AE",scope:{active:"&?",label:"@?"},transclude:!0,template:'
              ',link:function(e,t,o,n,l){var a=i(o.onSelect),r=i(o.onDeselect),u=e.$parent.$parent;e.tabId=null,n&&(e.tabId=n.addTab({label:e.label,isActive:Boolean(e.active)})),l(e,function(i){t.find("div").append(i)}),e.$parent.$watch("selectedId",function(i,t){i!==t&&(i===e.tabId&&a(u),t===e.tabId&&r(u))})}}}]),t["default"]=a,e.exports=t["default"]},{"../js/lib/jqLite":5,angular:"aeQg5j"}],24:[function(i,e,t){e.exports=i(6)},{"../config":3,"./jqLite":5}]},{},[2]); \ No newline at end of file diff --git a/platforms/ios/www/libs/mui/packages/cdn/extra/mui-colors.css b/platforms/ios/www/libs/mui/packages/cdn/extra/mui-colors.css new file mode 100644 index 0000000..db7e7ba --- /dev/null +++ b/platforms/ios/www/libs/mui/packages/cdn/extra/mui-colors.css @@ -0,0 +1 @@ +.mui--color-red-50{color:#FFEBEE!important}.mui--bg-color-red-50{background-color:#FFEBEE!important}.mui--color-red-100{color:#FFCDD2!important}.mui--bg-color-red-100{background-color:#FFCDD2!important}.mui--color-red-200{color:#EF9A9A!important}.mui--bg-color-red-200{background-color:#EF9A9A!important}.mui--color-red-300{color:#E57373!important}.mui--bg-color-red-300{background-color:#E57373!important}.mui--color-red-400{color:#EF5350!important}.mui--color-red,.mui--color-red-500{color:#F44336!important}.mui--bg-color-red-400{background-color:#EF5350!important}.mui--bg-color-red,.mui--bg-color-red-500{background-color:#F44336!important}.mui--color-red-600{color:#E53935!important}.mui--bg-color-red-600{background-color:#E53935!important}.mui--color-red-700{color:#D32F2F!important}.mui--bg-color-red-700{background-color:#D32F2F!important}.mui--color-red-800{color:#C62828!important}.mui--bg-color-red-800{background-color:#C62828!important}.mui--color-red-900{color:#B71C1C!important}.mui--bg-color-red-900{background-color:#B71C1C!important}.mui--color-red-A100{color:#FF8A80!important}.mui--bg-color-red-A100{background-color:#FF8A80!important}.mui--color-red-A200{color:#FF5252!important}.mui--bg-color-red-A200{background-color:#FF5252!important}.mui--color-red-A400{color:#FF1744!important}.mui--bg-color-red-A400{background-color:#FF1744!important}.mui--color-red-A700{color:#D50000!important}.mui--bg-color-red-A700{background-color:#D50000!important}.mui--color-pink-50{color:#FCE4EC!important}.mui--bg-color-pink-50{background-color:#FCE4EC!important}.mui--color-pink-100{color:#F8BBD0!important}.mui--bg-color-pink-100{background-color:#F8BBD0!important}.mui--color-pink-200{color:#F48FB1!important}.mui--bg-color-pink-200{background-color:#F48FB1!important}.mui--color-pink-300{color:#F06292!important}.mui--bg-color-pink-300{background-color:#F06292!important}.mui--color-pink-400{color:#EC407A!important}.mui--color-pink,.mui--color-pink-500{color:#E91E63!important}.mui--bg-color-pink-400{background-color:#EC407A!important}.mui--bg-color-pink,.mui--bg-color-pink-500{background-color:#E91E63!important}.mui--color-pink-600{color:#D81B60!important}.mui--bg-color-pink-600{background-color:#D81B60!important}.mui--color-pink-700{color:#C2185B!important}.mui--bg-color-pink-700{background-color:#C2185B!important}.mui--color-pink-800{color:#AD1457!important}.mui--bg-color-pink-800{background-color:#AD1457!important}.mui--color-pink-900{color:#880E4F!important}.mui--bg-color-pink-900{background-color:#880E4F!important}.mui--color-pink-A100{color:#FF80AB!important}.mui--bg-color-pink-A100{background-color:#FF80AB!important}.mui--color-pink-A200{color:#FF4081!important}.mui--bg-color-pink-A200{background-color:#FF4081!important}.mui--color-pink-A400{color:#F50057!important}.mui--bg-color-pink-A400{background-color:#F50057!important}.mui--color-pink-A700{color:#C51162!important}.mui--bg-color-pink-A700{background-color:#C51162!important}.mui--color-purple-50{color:#F3E5F5!important}.mui--bg-color-purple-50{background-color:#F3E5F5!important}.mui--color-purple-100{color:#E1BEE7!important}.mui--bg-color-purple-100{background-color:#E1BEE7!important}.mui--color-purple-200{color:#CE93D8!important}.mui--bg-color-purple-200{background-color:#CE93D8!important}.mui--color-purple-300{color:#BA68C8!important}.mui--bg-color-purple-300{background-color:#BA68C8!important}.mui--color-purple-400{color:#AB47BC!important}.mui--color-purple,.mui--color-purple-500{color:#9C27B0!important}.mui--bg-color-purple-400{background-color:#AB47BC!important}.mui--bg-color-purple,.mui--bg-color-purple-500{background-color:#9C27B0!important}.mui--color-purple-600{color:#8E24AA!important}.mui--bg-color-purple-600{background-color:#8E24AA!important}.mui--color-purple-700{color:#7B1FA2!important}.mui--bg-color-purple-700{background-color:#7B1FA2!important}.mui--color-purple-800{color:#6A1B9A!important}.mui--bg-color-purple-800{background-color:#6A1B9A!important}.mui--color-purple-900{color:#4A148C!important}.mui--bg-color-purple-900{background-color:#4A148C!important}.mui--color-purple-A100{color:#EA80FC!important}.mui--bg-color-purple-A100{background-color:#EA80FC!important}.mui--color-purple-A200{color:#E040FB!important}.mui--bg-color-purple-A200{background-color:#E040FB!important}.mui--color-purple-A400{color:#D500F9!important}.mui--bg-color-purple-A400{background-color:#D500F9!important}.mui--color-purple-A700{color:#A0F!important}.mui--bg-color-purple-A700{background-color:#A0F!important}.mui--color-deep-purple-50{color:#EDE7F6!important}.mui--bg-color-deep-purple-50{background-color:#EDE7F6!important}.mui--color-deep-purple-100{color:#D1C4E9!important}.mui--bg-color-deep-purple-100{background-color:#D1C4E9!important}.mui--color-deep-purple-200{color:#B39DDB!important}.mui--bg-color-deep-purple-200{background-color:#B39DDB!important}.mui--color-deep-purple-300{color:#9575CD!important}.mui--bg-color-deep-purple-300{background-color:#9575CD!important}.mui--color-deep-purple-400{color:#7E57C2!important}.mui--color-deep-purple,.mui--color-deep-purple-500{color:#673AB7!important}.mui--bg-color-deep-purple-400{background-color:#7E57C2!important}.mui--bg-color-deep-purple,.mui--bg-color-deep-purple-500{background-color:#673AB7!important}.mui--color-deep-purple-600{color:#5E35B1!important}.mui--bg-color-deep-purple-600{background-color:#5E35B1!important}.mui--color-deep-purple-700{color:#512DA8!important}.mui--bg-color-deep-purple-700{background-color:#512DA8!important}.mui--color-deep-purple-800{color:#4527A0!important}.mui--bg-color-deep-purple-800{background-color:#4527A0!important}.mui--color-deep-purple-900{color:#311B92!important}.mui--bg-color-deep-purple-900{background-color:#311B92!important}.mui--color-deep-purple-A100{color:#B388FF!important}.mui--bg-color-deep-purple-A100{background-color:#B388FF!important}.mui--color-deep-purple-A200{color:#7C4DFF!important}.mui--bg-color-deep-purple-A200{background-color:#7C4DFF!important}.mui--color-deep-purple-A400{color:#651FFF!important}.mui--bg-color-deep-purple-A400{background-color:#651FFF!important}.mui--color-deep-purple-A700{color:#6200EA!important}.mui--bg-color-deep-purple-A700{background-color:#6200EA!important}.mui--color-indigo-50{color:#E8EAF6!important}.mui--bg-color-indigo-50{background-color:#E8EAF6!important}.mui--color-indigo-100{color:#C5CAE9!important}.mui--bg-color-indigo-100{background-color:#C5CAE9!important}.mui--color-indigo-200{color:#9FA8DA!important}.mui--bg-color-indigo-200{background-color:#9FA8DA!important}.mui--color-indigo-300{color:#7986CB!important}.mui--bg-color-indigo-300{background-color:#7986CB!important}.mui--color-indigo-400{color:#5C6BC0!important}.mui--color-indigo,.mui--color-indigo-500{color:#3F51B5!important}.mui--bg-color-indigo-400{background-color:#5C6BC0!important}.mui--bg-color-indigo,.mui--bg-color-indigo-500{background-color:#3F51B5!important}.mui--color-indigo-600{color:#3949AB!important}.mui--bg-color-indigo-600{background-color:#3949AB!important}.mui--color-indigo-700{color:#303F9F!important}.mui--bg-color-indigo-700{background-color:#303F9F!important}.mui--color-indigo-800{color:#283593!important}.mui--bg-color-indigo-800{background-color:#283593!important}.mui--color-indigo-900{color:#1A237E!important}.mui--bg-color-indigo-900{background-color:#1A237E!important}.mui--color-indigo-A100{color:#8C9EFF!important}.mui--bg-color-indigo-A100{background-color:#8C9EFF!important}.mui--color-indigo-A200{color:#536DFE!important}.mui--bg-color-indigo-A200{background-color:#536DFE!important}.mui--color-indigo-A400{color:#3D5AFE!important}.mui--bg-color-indigo-A400{background-color:#3D5AFE!important}.mui--color-indigo-A700{color:#304FFE!important}.mui--bg-color-indigo-A700{background-color:#304FFE!important}.mui--color-blue-50{color:#E3F2FD!important}.mui--bg-color-blue-50{background-color:#E3F2FD!important}.mui--color-blue-100{color:#BBDEFB!important}.mui--bg-color-blue-100{background-color:#BBDEFB!important}.mui--color-blue-200{color:#90CAF9!important}.mui--bg-color-blue-200{background-color:#90CAF9!important}.mui--color-blue-300{color:#64B5F6!important}.mui--bg-color-blue-300{background-color:#64B5F6!important}.mui--color-blue-400{color:#42A5F5!important}.mui--color-blue,.mui--color-blue-500{color:#2196F3!important}.mui--bg-color-blue-400{background-color:#42A5F5!important}.mui--bg-color-blue,.mui--bg-color-blue-500{background-color:#2196F3!important}.mui--color-blue-600{color:#1E88E5!important}.mui--bg-color-blue-600{background-color:#1E88E5!important}.mui--color-blue-700{color:#1976D2!important}.mui--bg-color-blue-700{background-color:#1976D2!important}.mui--color-blue-800{color:#1565C0!important}.mui--bg-color-blue-800{background-color:#1565C0!important}.mui--color-blue-900{color:#0D47A1!important}.mui--bg-color-blue-900{background-color:#0D47A1!important}.mui--color-blue-A100{color:#82B1FF!important}.mui--bg-color-blue-A100{background-color:#82B1FF!important}.mui--color-blue-A200{color:#448AFF!important}.mui--bg-color-blue-A200{background-color:#448AFF!important}.mui--color-blue-A400{color:#2979FF!important}.mui--bg-color-blue-A400{background-color:#2979FF!important}.mui--color-blue-A700{color:#2962FF!important}.mui--bg-color-blue-A700{background-color:#2962FF!important}.mui--color-light-blue-50{color:#E1F5FE!important}.mui--bg-color-light-blue-50{background-color:#E1F5FE!important}.mui--color-light-blue-100{color:#B3E5FC!important}.mui--bg-color-light-blue-100{background-color:#B3E5FC!important}.mui--color-light-blue-200{color:#81D4FA!important}.mui--bg-color-light-blue-200{background-color:#81D4FA!important}.mui--color-light-blue-300{color:#4FC3F7!important}.mui--bg-color-light-blue-300{background-color:#4FC3F7!important}.mui--color-light-blue-400{color:#29B6F6!important}.mui--color-light-blue,.mui--color-light-blue-500{color:#03A9F4!important}.mui--bg-color-light-blue-400{background-color:#29B6F6!important}.mui--bg-color-light-blue,.mui--bg-color-light-blue-500{background-color:#03A9F4!important}.mui--color-light-blue-600{color:#039BE5!important}.mui--bg-color-light-blue-600{background-color:#039BE5!important}.mui--color-light-blue-700{color:#0288D1!important}.mui--bg-color-light-blue-700{background-color:#0288D1!important}.mui--color-light-blue-800{color:#0277BD!important}.mui--bg-color-light-blue-800{background-color:#0277BD!important}.mui--color-light-blue-900{color:#01579B!important}.mui--bg-color-light-blue-900{background-color:#01579B!important}.mui--color-light-blue-A100{color:#80D8FF!important}.mui--bg-color-light-blue-A100{background-color:#80D8FF!important}.mui--color-light-blue-A200{color:#40C4FF!important}.mui--bg-color-light-blue-A200{background-color:#40C4FF!important}.mui--color-light-blue-A400{color:#00B0FF!important}.mui--bg-color-light-blue-A400{background-color:#00B0FF!important}.mui--color-light-blue-A700{color:#0091EA!important}.mui--bg-color-light-blue-A700{background-color:#0091EA!important}.mui--color-cyan-50{color:#E0F7FA!important}.mui--bg-color-cyan-50{background-color:#E0F7FA!important}.mui--color-cyan-100{color:#B2EBF2!important}.mui--bg-color-cyan-100{background-color:#B2EBF2!important}.mui--color-cyan-200{color:#80DEEA!important}.mui--bg-color-cyan-200{background-color:#80DEEA!important}.mui--color-cyan-300{color:#4DD0E1!important}.mui--bg-color-cyan-300{background-color:#4DD0E1!important}.mui--color-cyan-400{color:#26C6DA!important}.mui--color-cyan,.mui--color-cyan-500{color:#00BCD4!important}.mui--bg-color-cyan-400{background-color:#26C6DA!important}.mui--bg-color-cyan,.mui--bg-color-cyan-500{background-color:#00BCD4!important}.mui--color-cyan-600{color:#00ACC1!important}.mui--bg-color-cyan-600{background-color:#00ACC1!important}.mui--color-cyan-700{color:#0097A7!important}.mui--bg-color-cyan-700{background-color:#0097A7!important}.mui--color-cyan-800{color:#00838F!important}.mui--bg-color-cyan-800{background-color:#00838F!important}.mui--color-cyan-900{color:#006064!important}.mui--bg-color-cyan-900{background-color:#006064!important}.mui--color-cyan-A100{color:#84FFFF!important}.mui--bg-color-cyan-A100{background-color:#84FFFF!important}.mui--color-cyan-A200{color:#18FFFF!important}.mui--bg-color-cyan-A200{background-color:#18FFFF!important}.mui--color-cyan-A400{color:#00E5FF!important}.mui--bg-color-cyan-A400{background-color:#00E5FF!important}.mui--color-cyan-A700{color:#00B8D4!important}.mui--bg-color-cyan-A700{background-color:#00B8D4!important}.mui--color-teal-50{color:#E0F2F1!important}.mui--bg-color-teal-50{background-color:#E0F2F1!important}.mui--color-teal-100{color:#B2DFDB!important}.mui--bg-color-teal-100{background-color:#B2DFDB!important}.mui--color-teal-200{color:#80CBC4!important}.mui--bg-color-teal-200{background-color:#80CBC4!important}.mui--color-teal-300{color:#4DB6AC!important}.mui--bg-color-teal-300{background-color:#4DB6AC!important}.mui--color-teal-400{color:#26A69A!important}.mui--color-teal,.mui--color-teal-500{color:#009688!important}.mui--bg-color-teal-400{background-color:#26A69A!important}.mui--bg-color-teal,.mui--bg-color-teal-500{background-color:#009688!important}.mui--color-teal-600{color:#00897B!important}.mui--bg-color-teal-600{background-color:#00897B!important}.mui--color-teal-700{color:#00796B!important}.mui--bg-color-teal-700{background-color:#00796B!important}.mui--color-teal-800{color:#00695C!important}.mui--bg-color-teal-800{background-color:#00695C!important}.mui--color-teal-900{color:#004D40!important}.mui--bg-color-teal-900{background-color:#004D40!important}.mui--color-teal-A100{color:#A7FFEB!important}.mui--bg-color-teal-A100{background-color:#A7FFEB!important}.mui--color-teal-A200{color:#64FFDA!important}.mui--bg-color-teal-A200{background-color:#64FFDA!important}.mui--color-teal-A400{color:#1DE9B6!important}.mui--bg-color-teal-A400{background-color:#1DE9B6!important}.mui--color-teal-A700{color:#00BFA5!important}.mui--bg-color-teal-A700{background-color:#00BFA5!important}.mui--color-green-50{color:#E8F5E9!important}.mui--bg-color-green-50{background-color:#E8F5E9!important}.mui--color-green-100{color:#C8E6C9!important}.mui--bg-color-green-100{background-color:#C8E6C9!important}.mui--color-green-200{color:#A5D6A7!important}.mui--bg-color-green-200{background-color:#A5D6A7!important}.mui--color-green-300{color:#81C784!important}.mui--bg-color-green-300{background-color:#81C784!important}.mui--color-green-400{color:#66BB6A!important}.mui--color-green,.mui--color-green-500{color:#4CAF50!important}.mui--bg-color-green-400{background-color:#66BB6A!important}.mui--bg-color-green,.mui--bg-color-green-500{background-color:#4CAF50!important}.mui--color-green-600{color:#43A047!important}.mui--bg-color-green-600{background-color:#43A047!important}.mui--color-green-700{color:#388E3C!important}.mui--bg-color-green-700{background-color:#388E3C!important}.mui--color-green-800{color:#2E7D32!important}.mui--bg-color-green-800{background-color:#2E7D32!important}.mui--color-green-900{color:#1B5E20!important}.mui--bg-color-green-900{background-color:#1B5E20!important}.mui--color-green-A100{color:#B9F6CA!important}.mui--bg-color-green-A100{background-color:#B9F6CA!important}.mui--color-green-A200{color:#69F0AE!important}.mui--bg-color-green-A200{background-color:#69F0AE!important}.mui--color-green-A400{color:#00E676!important}.mui--bg-color-green-A400{background-color:#00E676!important}.mui--color-green-A700{color:#00C853!important}.mui--bg-color-green-A700{background-color:#00C853!important}.mui--color-light-green-50{color:#F1F8E9!important}.mui--bg-color-light-green-50{background-color:#F1F8E9!important}.mui--color-light-green-100{color:#DCEDC8!important}.mui--bg-color-light-green-100{background-color:#DCEDC8!important}.mui--color-light-green-200{color:#C5E1A5!important}.mui--bg-color-light-green-200{background-color:#C5E1A5!important}.mui--color-light-green-300{color:#AED581!important}.mui--bg-color-light-green-300{background-color:#AED581!important}.mui--color-light-green-400{color:#9CCC65!important}.mui--color-light-green,.mui--color-light-green-500{color:#8BC34A!important}.mui--bg-color-light-green-400{background-color:#9CCC65!important}.mui--bg-color-light-green,.mui--bg-color-light-green-500{background-color:#8BC34A!important}.mui--color-light-green-600{color:#7CB342!important}.mui--bg-color-light-green-600{background-color:#7CB342!important}.mui--color-light-green-700{color:#689F38!important}.mui--bg-color-light-green-700{background-color:#689F38!important}.mui--color-light-green-800{color:#558B2F!important}.mui--bg-color-light-green-800{background-color:#558B2F!important}.mui--color-light-green-900{color:#33691E!important}.mui--bg-color-light-green-900{background-color:#33691E!important}.mui--color-light-green-A100{color:#CCFF90!important}.mui--bg-color-light-green-A100{background-color:#CCFF90!important}.mui--color-light-green-A200{color:#B2FF59!important}.mui--bg-color-light-green-A200{background-color:#B2FF59!important}.mui--color-light-green-A400{color:#76FF03!important}.mui--bg-color-light-green-A400{background-color:#76FF03!important}.mui--color-light-green-A700{color:#64DD17!important}.mui--bg-color-light-green-A700{background-color:#64DD17!important}.mui--color-lime-50{color:#F9FBE7!important}.mui--bg-color-lime-50{background-color:#F9FBE7!important}.mui--color-lime-100{color:#F0F4C3!important}.mui--bg-color-lime-100{background-color:#F0F4C3!important}.mui--color-lime-200{color:#E6EE9C!important}.mui--bg-color-lime-200{background-color:#E6EE9C!important}.mui--color-lime-300{color:#DCE775!important}.mui--bg-color-lime-300{background-color:#DCE775!important}.mui--color-lime-400{color:#D4E157!important}.mui--color-lime,.mui--color-lime-500{color:#CDDC39!important}.mui--bg-color-lime-400{background-color:#D4E157!important}.mui--bg-color-lime,.mui--bg-color-lime-500{background-color:#CDDC39!important}.mui--color-lime-600{color:#C0CA33!important}.mui--bg-color-lime-600{background-color:#C0CA33!important}.mui--color-lime-700{color:#AFB42B!important}.mui--bg-color-lime-700{background-color:#AFB42B!important}.mui--color-lime-800{color:#9E9D24!important}.mui--bg-color-lime-800{background-color:#9E9D24!important}.mui--color-lime-900{color:#827717!important}.mui--bg-color-lime-900{background-color:#827717!important}.mui--color-lime-A100{color:#F4FF81!important}.mui--bg-color-lime-A100{background-color:#F4FF81!important}.mui--color-lime-A200{color:#EEFF41!important}.mui--bg-color-lime-A200{background-color:#EEFF41!important}.mui--color-lime-A400{color:#C6FF00!important}.mui--bg-color-lime-A400{background-color:#C6FF00!important}.mui--color-lime-A700{color:#AEEA00!important}.mui--bg-color-lime-A700{background-color:#AEEA00!important}.mui--color-yellow-50{color:#FFFDE7!important}.mui--bg-color-yellow-50{background-color:#FFFDE7!important}.mui--color-yellow-100{color:#FFF9C4!important}.mui--bg-color-yellow-100{background-color:#FFF9C4!important}.mui--color-yellow-200{color:#FFF59D!important}.mui--bg-color-yellow-200{background-color:#FFF59D!important}.mui--color-yellow-300{color:#FFF176!important}.mui--bg-color-yellow-300{background-color:#FFF176!important}.mui--color-yellow-400{color:#FFEE58!important}.mui--color-yellow,.mui--color-yellow-500{color:#FFEB3B!important}.mui--bg-color-yellow-400{background-color:#FFEE58!important}.mui--bg-color-yellow,.mui--bg-color-yellow-500{background-color:#FFEB3B!important}.mui--color-yellow-600{color:#FDD835!important}.mui--bg-color-yellow-600{background-color:#FDD835!important}.mui--color-yellow-700{color:#FBC02D!important}.mui--bg-color-yellow-700{background-color:#FBC02D!important}.mui--color-yellow-800{color:#F9A825!important}.mui--bg-color-yellow-800{background-color:#F9A825!important}.mui--color-yellow-900{color:#F57F17!important}.mui--bg-color-yellow-900{background-color:#F57F17!important}.mui--color-yellow-A100{color:#FFFF8D!important}.mui--bg-color-yellow-A100{background-color:#FFFF8D!important}.mui--color-yellow-A200{color:#FF0!important}.mui--bg-color-yellow-A200{background-color:#FF0!important}.mui--color-yellow-A400{color:#FFEA00!important}.mui--bg-color-yellow-A400{background-color:#FFEA00!important}.mui--color-yellow-A700{color:#FFD600!important}.mui--bg-color-yellow-A700{background-color:#FFD600!important}.mui--color-amber-50{color:#FFF8E1!important}.mui--bg-color-amber-50{background-color:#FFF8E1!important}.mui--color-amber-100{color:#FFECB3!important}.mui--bg-color-amber-100{background-color:#FFECB3!important}.mui--color-amber-200{color:#FFE082!important}.mui--bg-color-amber-200{background-color:#FFE082!important}.mui--color-amber-300{color:#FFD54F!important}.mui--bg-color-amber-300{background-color:#FFD54F!important}.mui--color-amber-400{color:#FFCA28!important}.mui--color-amber,.mui--color-amber-500{color:#FFC107!important}.mui--bg-color-amber-400{background-color:#FFCA28!important}.mui--bg-color-amber,.mui--bg-color-amber-500{background-color:#FFC107!important}.mui--color-amber-600{color:#FFB300!important}.mui--bg-color-amber-600{background-color:#FFB300!important}.mui--color-amber-700{color:#FFA000!important}.mui--bg-color-amber-700{background-color:#FFA000!important}.mui--color-amber-800{color:#FF8F00!important}.mui--bg-color-amber-800{background-color:#FF8F00!important}.mui--color-amber-900{color:#FF6F00!important}.mui--bg-color-amber-900{background-color:#FF6F00!important}.mui--color-amber-A100{color:#FFE57F!important}.mui--bg-color-amber-A100{background-color:#FFE57F!important}.mui--color-amber-A200{color:#FFD740!important}.mui--bg-color-amber-A200{background-color:#FFD740!important}.mui--color-amber-A400{color:#FFC400!important}.mui--bg-color-amber-A400{background-color:#FFC400!important}.mui--color-amber-A700{color:#FFAB00!important}.mui--bg-color-amber-A700{background-color:#FFAB00!important}.mui--color-orange-50{color:#FFF3E0!important}.mui--bg-color-orange-50{background-color:#FFF3E0!important}.mui--color-orange-100{color:#FFE0B2!important}.mui--bg-color-orange-100{background-color:#FFE0B2!important}.mui--color-orange-200{color:#FFCC80!important}.mui--bg-color-orange-200{background-color:#FFCC80!important}.mui--color-orange-300{color:#FFB74D!important}.mui--bg-color-orange-300{background-color:#FFB74D!important}.mui--color-orange-400{color:#FFA726!important}.mui--color-orange,.mui--color-orange-500{color:#FF9800!important}.mui--bg-color-orange-400{background-color:#FFA726!important}.mui--bg-color-orange,.mui--bg-color-orange-500{background-color:#FF9800!important}.mui--color-orange-600{color:#FB8C00!important}.mui--bg-color-orange-600{background-color:#FB8C00!important}.mui--color-orange-700{color:#F57C00!important}.mui--bg-color-orange-700{background-color:#F57C00!important}.mui--color-orange-800{color:#EF6C00!important}.mui--bg-color-orange-800{background-color:#EF6C00!important}.mui--color-orange-900{color:#E65100!important}.mui--bg-color-orange-900{background-color:#E65100!important}.mui--color-orange-A100{color:#FFD180!important}.mui--bg-color-orange-A100{background-color:#FFD180!important}.mui--color-orange-A200{color:#FFAB40!important}.mui--bg-color-orange-A200{background-color:#FFAB40!important}.mui--color-orange-A400{color:#FF9100!important}.mui--bg-color-orange-A400{background-color:#FF9100!important}.mui--color-orange-A700{color:#FF6D00!important}.mui--bg-color-orange-A700{background-color:#FF6D00!important}.mui--color-deep-orange-50{color:#FBE9E7!important}.mui--bg-color-deep-orange-50{background-color:#FBE9E7!important}.mui--color-deep-orange-100{color:#FFCCBC!important}.mui--bg-color-deep-orange-100{background-color:#FFCCBC!important}.mui--color-deep-orange-200{color:#FFAB91!important}.mui--bg-color-deep-orange-200{background-color:#FFAB91!important}.mui--color-deep-orange-300{color:#FF8A65!important}.mui--bg-color-deep-orange-300{background-color:#FF8A65!important}.mui--color-deep-orange-400{color:#FF7043!important}.mui--color-deep-orange,.mui--color-deep-orange-500{color:#FF5722!important}.mui--bg-color-deep-orange-400{background-color:#FF7043!important}.mui--bg-color-deep-orange,.mui--bg-color-deep-orange-500{background-color:#FF5722!important}.mui--color-deep-orange-600{color:#F4511E!important}.mui--bg-color-deep-orange-600{background-color:#F4511E!important}.mui--color-deep-orange-700{color:#E64A19!important}.mui--bg-color-deep-orange-700{background-color:#E64A19!important}.mui--color-deep-orange-800{color:#D84315!important}.mui--bg-color-deep-orange-800{background-color:#D84315!important}.mui--color-deep-orange-900{color:#BF360C!important}.mui--bg-color-deep-orange-900{background-color:#BF360C!important}.mui--color-deep-orange-A100{color:#FF9E80!important}.mui--bg-color-deep-orange-A100{background-color:#FF9E80!important}.mui--color-deep-orange-A200{color:#FF6E40!important}.mui--bg-color-deep-orange-A200{background-color:#FF6E40!important}.mui--color-deep-orange-A400{color:#FF3D00!important}.mui--bg-color-deep-orange-A400{background-color:#FF3D00!important}.mui--color-deep-orange-A700{color:#DD2C00!important}.mui--bg-color-deep-orange-A700{background-color:#DD2C00!important}.mui--color-brown-50{color:#EFEBE9!important}.mui--bg-color-brown-50{background-color:#EFEBE9!important}.mui--color-brown-100{color:#D7CCC8!important}.mui--bg-color-brown-100{background-color:#D7CCC8!important}.mui--color-brown-200{color:#BCAAA4!important}.mui--bg-color-brown-200{background-color:#BCAAA4!important}.mui--color-brown-300{color:#A1887F!important}.mui--bg-color-brown-300{background-color:#A1887F!important}.mui--color-brown-400{color:#8D6E63!important}.mui--color-brown,.mui--color-brown-500{color:#795548!important}.mui--bg-color-brown-400{background-color:#8D6E63!important}.mui--bg-color-brown,.mui--bg-color-brown-500{background-color:#795548!important}.mui--color-brown-600{color:#6D4C41!important}.mui--bg-color-brown-600{background-color:#6D4C41!important}.mui--color-brown-700{color:#5D4037!important}.mui--bg-color-brown-700{background-color:#5D4037!important}.mui--color-brown-800{color:#4E342E!important}.mui--bg-color-brown-800{background-color:#4E342E!important}.mui--color-brown-900{color:#3E2723!important}.mui--bg-color-brown-900{background-color:#3E2723!important}.mui--color-grey-50{color:#FAFAFA!important}.mui--bg-color-grey-50{background-color:#FAFAFA!important}.mui--color-grey-100{color:#F5F5F5!important}.mui--bg-color-grey-100{background-color:#F5F5F5!important}.mui--color-grey-200{color:#EEE!important}.mui--bg-color-grey-200{background-color:#EEE!important}.mui--color-grey-300{color:#E0E0E0!important}.mui--bg-color-grey-300{background-color:#E0E0E0!important}.mui--color-grey-400{color:#BDBDBD!important}.mui--color-grey,.mui--color-grey-500{color:#9E9E9E!important}.mui--bg-color-grey-400{background-color:#BDBDBD!important}.mui--bg-color-grey,.mui--bg-color-grey-500{background-color:#9E9E9E!important}.mui--color-grey-600{color:#757575!important}.mui--bg-color-grey-600{background-color:#757575!important}.mui--color-grey-700{color:#616161!important}.mui--bg-color-grey-700{background-color:#616161!important}.mui--color-grey-800{color:#424242!important}.mui--bg-color-grey-800{background-color:#424242!important}.mui--color-grey-900{color:#212121!important}.mui--bg-color-grey-900{background-color:#212121!important}.mui--color-blue-grey-50{color:#ECEFF1!important}.mui--bg-color-blue-grey-50{background-color:#ECEFF1!important}.mui--color-blue-grey-100{color:#CFD8DC!important}.mui--bg-color-blue-grey-100{background-color:#CFD8DC!important}.mui--color-blue-grey-200{color:#B0BEC5!important}.mui--bg-color-blue-grey-200{background-color:#B0BEC5!important}.mui--color-blue-grey-300{color:#90A4AE!important}.mui--bg-color-blue-grey-300{background-color:#90A4AE!important}.mui--color-blue-grey-400{color:#78909C!important}.mui--color-blue-grey,.mui--color-blue-grey-500{color:#607D8B!important}.mui--bg-color-blue-grey-400{background-color:#78909C!important}.mui--bg-color-blue-grey,.mui--bg-color-blue-grey-500{background-color:#607D8B!important}.mui--color-blue-grey-600{color:#546E7A!important}.mui--bg-color-blue-grey-600{background-color:#546E7A!important}.mui--color-blue-grey-700{color:#455A64!important}.mui--bg-color-blue-grey-700{background-color:#455A64!important}.mui--color-blue-grey-800{color:#37474F!important}.mui--bg-color-blue-grey-800{background-color:#37474F!important}.mui--color-blue-grey-900{color:#263238!important}.mui--bg-color-blue-grey-900{background-color:#263238!important}.mui--color-black{color:#000!important}.mui--bg-color-black{background-color:#000!important}.mui--color-white{color:#FFF!important}.mui--bg-color-white{background-color:#FFF!important}.mui--color-black-alpha-12{color:rgba(0,0,0,.12)!important}.mui--bg-color-black-alpha-12{background-color:rgba(0,0,0,.12)!important}.mui--color-black-alpha-38{color:rgba(0,0,0,.38)!important}.mui--bg-color-black-alpha-38{background-color:rgba(0,0,0,.38)!important}.mui--color-black-alpha-54{color:rgba(0,0,0,.54)!important}.mui--bg-color-black-alpha-54{background-color:rgba(0,0,0,.54)!important}.mui--color-black-alpha-87{color:rgba(0,0,0,.87)!important}.mui--bg-color-black-alpha-87{background-color:rgba(0,0,0,.87)!important}.mui--color-white-alpha-12{color:rgba(255,255,255,.12)!important}.mui--bg-color-white-alpha-12{background-color:rgba(255,255,255,.12)!important}.mui--color-white-alpha-30{color:rgba(255,255,255,.3)!important}.mui--bg-color-white-alpha-30{background-color:rgba(255,255,255,.3)!important}.mui--color-white-alpha-70{color:rgba(255,255,255,.7)!important}.mui--bg-color-white-alpha-70{background-color:rgba(255,255,255,.7)!important} \ No newline at end of file diff --git a/platforms/ios/www/libs/mui/packages/cdn/extra/mui-combined.js b/platforms/ios/www/libs/mui/packages/cdn/extra/mui-combined.js new file mode 100644 index 0000000..2294236 --- /dev/null +++ b/platforms/ios/www/libs/mui/packages/cdn/extra/mui-combined.js @@ -0,0 +1,2 @@ +!function i(t,e,o){function n(a,r){if(!e[a]){if(!t[a]){var u="function"==typeof require&&require;if(!r&&u)return u(a,!0);if(l)return l(a,!0);throw new Error("Cannot find module '"+a+"'")}var m=e[a]={exports:{}};t[a][0].call(m.exports,function(i){var e=t[a][1][i];return n(e?e:i)},m,m.exports,i,t,e,o)}return e[a].exports}for(var l="function"==typeof require&&require,a=0;as&&(f=r+(e+1)*a-(-1*o+n+l),b=t*a+2*r-p,x=Math.min(f,b)),{height:p+"px",top:o+"px",scrollTop:x}}var n=15,l=32,a=42,r=8;t.exports={getMenuPositionalCSS:o}},{}],5:[function(i,t,e){"use strict";function o(i,t){if(t&&i.setAttribute){for(var e,o=b(i),n=t.split(" "),l=0;l-1:!1}function a(i){if(void 0===i)return"undefined";var t=Object.prototype.toString.call(i);if(0===t.indexOf("[object "))return t.slice(8,-1).toLowerCase();throw new Error("MUI: Could not understand type: "+t)}function r(i,t,e,o){o=void 0===o?!1:o,i.addEventListener(t,e,o);var n=i._muiEventCache=i._muiEventCache||{};n[t]=n[t]||[],n[t].push([e,o])}function u(i,t,e,o){o=void 0===o?!1:o;var n,l,a=i._muiEventCache=i._muiEventCache||{},r=a[t]||[];for(l=r.length;l--;)n=r[l],(void 0===e||n[0]===e&&n[1]===o)&&(r.splice(l,1),i.removeEventListener(t,n[0],n[1]))}function m(i,t,e,o){r(i,t,function n(o){e&&e.apply(this,arguments),u(i,t,n)},o)}function d(i,t){var e=window;if(void 0===t){if(i===e){var o=document.documentElement;return(e.pageXOffset||o.scrollLeft)-(o.clientLeft||0)}return i.scrollLeft}i===e?e.scrollTo(t,s(e)):i.scrollLeft=t}function s(i,t){var e=window;if(void 0===t){if(i===e){var o=document.documentElement;return(e.pageYOffset||o.scrollTop)-(o.clientTop||0)}return i.scrollTop}i===e?e.scrollTo(d(e),t):i.scrollTop=t}function c(i){var t=window,e=i.getBoundingClientRect(),o=s(t),n=d(t);return{top:e.top+o,left:e.left+n,height:e.height,width:e.width}}function p(i){var t=!1,e=!0,o=document,n=o.defaultView,l=o.documentElement,a=o.addEventListener?"addEventListener":"attachEvent",r=o.addEventListener?"removeEventListener":"detachEvent",u=o.addEventListener?"":"on",m=function(e){"readystatechange"==e.type&&"complete"!=o.readyState||(("load"==e.type?n:o)[r](u+e.type,m,!1),!t&&(t=!0)&&i.call(n,e.type||e))},d=function(){try{l.doScroll("left")}catch(i){return void setTimeout(d,50)}m("poll")};if("complete"==o.readyState)i.call(n,"lazy");else{if(o.createEventObject&&l.doScroll){try{e=!n.frameElement}catch(s){}e&&d()}o[a](u+"DOMContentLoaded",m,!1),o[a](u+"readystatechange",m,!1),n[a](u+"load",m,!1)}}function f(i,t){if(t&&i.setAttribute){for(var e,o=b(i),n=t.split(" "),l=0;l=0;)o=o.replace(" "+e+" "," ");i.setAttribute("class",o.trim())}}function b(i){var t=(i.getAttribute("class")||"").replace(/[\n\t]/g,"");return" "+t+" "}function x(i){return i.replace(v,function(i,t,e,o){return o?e.toUpperCase():e}).replace(y,"Moz$1")}function h(i,t,e){var o;return o=e.getPropertyValue(t),""!==o||i.ownerDocument||(o=i.style[x(t)]),o}var g,v=/([\:\-\_]+(.))/g,y=/^moz([A-Z])/;g={multiple:!0,selected:!0,checked:!0,disabled:!0,readonly:!0,required:!0,open:!0},t.exports={addClass:o,css:n,hasClass:l,off:u,offset:c,on:r,one:m,ready:p,removeClass:f,type:a,scrollLeft:d,scrollTop:s}},{}],6:[function(i,t,e){"use strict";function o(){var i=window;if(x.debug&&"undefined"!=typeof i.console)try{i.console.log.apply(i.console,arguments)}catch(t){var e=Array.prototype.slice.call(arguments);i.console.log(e.join("\n"))}}function n(i){var t,e=document;t=e.head||e.getElementsByTagName("head")[0]||e.documentElement;var o=e.createElement("style");return o.type="text/css",o.styleSheet?o.styleSheet.cssText=i:o.appendChild(e.createTextNode(i)),t.insertBefore(o,t.firstChild),o}function l(i,t){if(!t)throw new Error("MUI: "+i);"undefined"!=typeof console&&console.error("MUI Warning: "+i)}function a(i){if(g.push(i),void 0===g._initialized){var t=document;h.on(t,"animationstart",r),h.on(t,"mozAnimationStart",r),h.on(t,"webkitAnimationStart",r),g._initialized=!0}}function r(i){if("mui-node-inserted"===i.animationName)for(var t=i.target,e=g.length-1;e>=0;e--)g[e](t)}function u(i){var t="";for(var e in i)t+=i[e]?e+" ":"";return t.trim()}function m(){if(void 0!==b)return b;var i=document.createElement("x");return i.style.cssText="pointer-events:auto",b="auto"===i.style.pointerEvents}function d(i,t){return function(){i[t].apply(i,arguments)}}function s(i,t,e,o,n){var l,a=document.createEvent("HTMLEvents"),e=void 0!==e?e:!0,o=void 0!==o?o:!0;if(a.initEvent(t,e,o),n)for(l in n)a[l]=n[l];return i&&i.dispatchEvent(a),a}function c(){if(v+=1,1===v){var i=window,t=document;f={left:h.scrollLeft(i),top:h.scrollTop(i)},h.addClass(t.body,y),i.scrollTo(f.left,f.top)}}function p(){if(0!==v&&(v-=1,0===v)){var i=window,t=document;h.removeClass(t.body,y),i.scrollTo(f.left,f.top)}}var f,b,x=i("../config"),h=i("./jqLite"),g=[],v=0,y="mui-body--scroll-lock";t.exports={callback:d,classNames:u,disableScrollLock:p,dispatchEvent:s,enableScrollLock:c,log:o,loadStyle:n,onNodeInserted:a,raiseError:l,supportsPointerEvents:m}},{"../config":3,"./jqLite":5}],7:[function(i,t,e){t.exports='/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-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{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}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{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{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-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:border-box}:after,:before{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:Arial,Verdana,Tahoma;font-size:14px;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);background-color:#FFF}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#2196F3;text-decoration:none}a:focus,a:hover{color:#1976D2;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}p{margin:0 0 10px}ol,ul{margin-top:0;margin-bottom:10px}figure{margin:0}img{vertical-align:middle}hr{margin-top:20px;margin-bottom:20px;border:0;height:1px;background-color:rgba(0,0,0,.12)}legend{display:block;width:100%;padding:0;margin-bottom:10px;font-size:21px;color:rgba(0,0,0,.87);line-height:inherit;border:0}input[type=search]{box-sizing:border-box;-webkit-appearance:none}input[type=checkbox]:focus,input[type=radio]:focus,input[type=file]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type=checkbox]:disabled,input[type=radio]:disabled{cursor:not-allowed}strong{font-weight:700}abbr[title]{cursor:help;border-bottom:1px dotted #2196F3}h1,h2,h3{margin-top:20px;margin-bottom:10px}h4,h5,h6{margin-top:10px;margin-bottom:10px}.mui--appbar-height{height:56px}.mui--appbar-min-height,.mui-appbar{min-height:56px}.mui--appbar-line-height{line-height:56px}.mui--appbar-top{top:56px}@media (orientation:landscape) and (max-height:480px){.mui--appbar-height{height:48px}.mui--appbar-min-height,.mui-appbar{min-height:48px}.mui--appbar-line-height{line-height:48px}.mui--appbar-top{top:48px}}@media (min-width:480px){.mui--appbar-height{height:64px}.mui--appbar-min-height,.mui-appbar{min-height:64px}.mui--appbar-line-height{line-height:64px}.mui--appbar-top{top:64px}}.mui-appbar{background-color:#2196F3;color:#FFF}.mui-btn{animation-duration:.1ms;animation-name:mui-node-inserted;font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase;color:rgba(0,0,0,.87);background-color:#FFF;transition:all .2s ease-in-out;display:inline-block;height:36px;padding:0 26px;margin-top:6px;margin-bottom:6px;border:none;border-radius:2px;cursor:pointer;-ms-touch-action:manipulation;touch-action:manipulation;background-image:none;text-align:center;line-height:36px;vertical-align:middle;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:14px;letter-spacing:.03em;position:relative;overflow:hidden}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{color:rgba(0,0,0,.87);background-color:#fff}.mui-btn[disabled]:active,.mui-btn[disabled]:focus,.mui-btn[disabled]:hover{color:rgba(0,0,0,.87);background-color:#FFF}.mui-btn.mui-btn--flat{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn.mui-btn--flat:active,.mui-btn.mui-btn--flat:focus,.mui-btn.mui-btn--flat:hover{color:rgba(0,0,0,.87);background-color:#f2f2f2}.mui-btn.mui-btn--flat[disabled]:active,.mui-btn.mui-btn--flat[disabled]:focus,.mui-btn.mui-btn--flat[disabled]:hover{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{outline:0;text-decoration:none;color:rgba(0,0,0,.87)}.mui-btn:focus,.mui-btn:hover{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:focus,.mui-btn:hover{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn.mui--is-disabled,.mui-btn:disabled{cursor:not-allowed;pointer-events:none;opacity:.6;box-shadow:none}.mui-btn+.mui-btn{margin-left:8px}.mui-btn--flat{background-color:transparent}.mui-btn--flat:active,.mui-btn--flat:focus,.mui-btn--flat:hover{box-shadow:none;background-color:#f2f2f2}.mui-btn--fab,.mui-btn--raised{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab,.mui-btn--raised{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn--fab{position:relative;padding:0;width:55px;height:55px;line-height:55px;border-radius:50%;z-index:1}.mui-btn--primary{color:#FFF;background-color:#2196F3}.mui-btn--primary:active,.mui-btn--primary:focus,.mui-btn--primary:hover{color:#FFF;background-color:#39a1f4}.mui-btn--primary[disabled]:active,.mui-btn--primary[disabled]:focus,.mui-btn--primary[disabled]:hover{color:#FFF;background-color:#2196F3}.mui-btn--primary.mui-btn--flat{color:#2196F3;background-color:transparent}.mui-btn--primary.mui-btn--flat:active,.mui-btn--primary.mui-btn--flat:focus,.mui-btn--primary.mui-btn--flat:hover{color:#2196F3;background-color:#f2f2f2}.mui-btn--primary.mui-btn--flat[disabled]:active,.mui-btn--primary.mui-btn--flat[disabled]:focus,.mui-btn--primary.mui-btn--flat[disabled]:hover{color:#2196F3;background-color:transparent}.mui-btn--dark{color:#FFF;background-color:#424242}.mui-btn--dark:active,.mui-btn--dark:focus,.mui-btn--dark:hover{color:#FFF;background-color:#4f4f4f}.mui-btn--dark[disabled]:active,.mui-btn--dark[disabled]:focus,.mui-btn--dark[disabled]:hover{color:#FFF;background-color:#424242}.mui-btn--dark.mui-btn--flat{color:#424242;background-color:transparent}.mui-btn--dark.mui-btn--flat:active,.mui-btn--dark.mui-btn--flat:focus,.mui-btn--dark.mui-btn--flat:hover{color:#424242;background-color:#f2f2f2}.mui-btn--dark.mui-btn--flat[disabled]:active,.mui-btn--dark.mui-btn--flat[disabled]:focus,.mui-btn--dark.mui-btn--flat[disabled]:hover{color:#424242;background-color:transparent}.mui-btn--danger{color:#FFF;background-color:#F44336}.mui-btn--danger:active,.mui-btn--danger:focus,.mui-btn--danger:hover{color:#FFF;background-color:#f55a4e}.mui-btn--danger[disabled]:active,.mui-btn--danger[disabled]:focus,.mui-btn--danger[disabled]:hover{color:#FFF;background-color:#F44336}.mui-btn--danger.mui-btn--flat{color:#F44336;background-color:transparent}.mui-btn--danger.mui-btn--flat:active,.mui-btn--danger.mui-btn--flat:focus,.mui-btn--danger.mui-btn--flat:hover{color:#F44336;background-color:#f2f2f2}.mui-btn--danger.mui-btn--flat[disabled]:active,.mui-btn--danger.mui-btn--flat[disabled]:focus,.mui-btn--danger.mui-btn--flat[disabled]:hover{color:#F44336;background-color:transparent}.mui-btn--accent{color:#FFF;background-color:#FF4081}.mui-btn--accent:active,.mui-btn--accent:focus,.mui-btn--accent:hover{color:#FFF;background-color:#ff5a92}.mui-btn--accent[disabled]:active,.mui-btn--accent[disabled]:focus,.mui-btn--accent[disabled]:hover{color:#FFF;background-color:#FF4081}.mui-btn--accent.mui-btn--flat{color:#FF4081;background-color:transparent}.mui-btn--accent.mui-btn--flat:active,.mui-btn--accent.mui-btn--flat:focus,.mui-btn--accent.mui-btn--flat:hover{color:#FF4081;background-color:#f2f2f2}.mui-btn--accent.mui-btn--flat[disabled]:active,.mui-btn--accent.mui-btn--flat[disabled]:focus,.mui-btn--accent.mui-btn--flat[disabled]:hover{color:#FF4081;background-color:transparent}.mui-btn--small{height:30.6px;line-height:30.6px;padding:0 16px;font-size:13px}.mui-btn--large{height:54px;line-height:54px;padding:0 26px;font-size:14px}.mui-btn--fab.mui-btn--small{width:44px;height:44px;line-height:44px}.mui-btn--fab.mui-btn--large{width:75px;height:75px;line-height:75px}.mui-checkbox,.mui-radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.mui-checkbox>label,.mui-radio>label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio],.mui-radio>label>input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px}.mui-checkbox+.mui-checkbox,.mui-radio+.mui-radio{margin-top:-5px}.mui-checkbox--inline,.mui-radio--inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.mui-checkbox--inline>input[type=checkbox],.mui-checkbox--inline>input[type=radio],.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox--inline>label>input[type=radio],.mui-radio--inline>input[type=checkbox],.mui-radio--inline>input[type=radio],.mui-radio--inline>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio]{margin:4px 0 0;line-height:normal}.mui-checkbox--inline+.mui-checkbox--inline,.mui-radio--inline+.mui-radio--inline{margin-top:0;margin-left:10px}.mui-container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container:after,.mui-container:before{content:" ";display:table}.mui-container:after{clear:both}@media (min-width:544px){.mui-container{max-width:570px}}@media (min-width:768px){.mui-container{max-width:740px}}@media (min-width:992px){.mui-container{max-width:960px}}@media (min-width:1200px){.mui-container{max-width:1170px}}.mui-container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container-fluid:after,.mui-container-fluid:before{content:" ";display:table}.mui-container-fluid:after{clear:both}.mui-divider{display:block;height:1px;background-color:rgba(0,0,0,.12)}.mui--divider-top{border-top:1px solid rgba(0,0,0,.12)}.mui--divider-bottom{border-bottom:1px solid rgba(0,0,0,.12)}.mui--divider-left{border-left:1px solid rgba(0,0,0,.12)}.mui--divider-right{border-right:1px solid rgba(0,0,0,.12)}.mui-dropdown{display:inline-block;position:relative}[data-mui-toggle=dropdown]{animation-duration:.1ms;animation-name:mui-node-inserted;outline:0}.mui-dropdown__menu{position:absolute;top:100%;left:0;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#FFF;border-radius:2px;z-index:1;background-clip:padding-box}.mui-dropdown__menu.mui--is-open{display:block}.mui-dropdown__menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);white-space:nowrap}.mui-dropdown__menu>li>a:focus,.mui-dropdown__menu>li>a:hover{text-decoration:none;color:rgba(0,0,0,.87);background-color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a,.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;cursor:not-allowed}.mui-dropdown__menu--right{left:auto;right:0}@media (min-width:544px){.mui-form--inline>.mui-textfield{display:inline-block;margin-bottom:0}.mui-form--inline>.mui-checkbox,.mui-form--inline>.mui-radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.mui-form--inline>.mui-checkbox>label,.mui-form--inline>.mui-radio>label{padding-left:0}.mui-form--inline>.mui-checkbox>label>input[type=checkbox],.mui-form--inline>.mui-radio>label>input[type=radio]{position:relative;margin-left:0}.mui-form--inline>.mui-select{display:inline-block}.mui-form--inline>.mui-btn{margin-bottom:0;margin-top:0;vertical-align:bottom}}.mui-row{margin-left:-15px;margin-right:-15px}.mui-row:after,.mui-row:before{content:" ";display:table}.mui-row:after{clear:both}.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9,.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9,.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9,.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{min-height:1px;padding-left:15px;padding-right:15px}.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{float:left}.mui-col-xs-1{width:8.33333%}.mui-col-xs-2{width:16.66667%}.mui-col-xs-3{width:25%}.mui-col-xs-4{width:33.33333%}.mui-col-xs-5{width:41.66667%}.mui-col-xs-6{width:50%}.mui-col-xs-7{width:58.33333%}.mui-col-xs-8{width:66.66667%}.mui-col-xs-9{width:75%}.mui-col-xs-10{width:83.33333%}.mui-col-xs-11{width:91.66667%}.mui-col-xs-12{width:100%}.mui-col-xs-offset-0{margin-left:0}.mui-col-xs-offset-1{margin-left:8.33333%}.mui-col-xs-offset-2{margin-left:16.66667%}.mui-col-xs-offset-3{margin-left:25%}.mui-col-xs-offset-4{margin-left:33.33333%}.mui-col-xs-offset-5{margin-left:41.66667%}.mui-col-xs-offset-6{margin-left:50%}.mui-col-xs-offset-7{margin-left:58.33333%}.mui-col-xs-offset-8{margin-left:66.66667%}.mui-col-xs-offset-9{margin-left:75%}.mui-col-xs-offset-10{margin-left:83.33333%}.mui-col-xs-offset-11{margin-left:91.66667%}.mui-col-xs-offset-12{margin-left:100%}@media (min-width:544px){.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9{float:left}.mui-col-sm-1{width:8.33333%}.mui-col-sm-2{width:16.66667%}.mui-col-sm-3{width:25%}.mui-col-sm-4{width:33.33333%}.mui-col-sm-5{width:41.66667%}.mui-col-sm-6{width:50%}.mui-col-sm-7{width:58.33333%}.mui-col-sm-8{width:66.66667%}.mui-col-sm-9{width:75%}.mui-col-sm-10{width:83.33333%}.mui-col-sm-11{width:91.66667%}.mui-col-sm-12{width:100%}.mui-col-sm-offset-0{margin-left:0}.mui-col-sm-offset-1{margin-left:8.33333%}.mui-col-sm-offset-2{margin-left:16.66667%}.mui-col-sm-offset-3{margin-left:25%}.mui-col-sm-offset-4{margin-left:33.33333%}.mui-col-sm-offset-5{margin-left:41.66667%}.mui-col-sm-offset-6{margin-left:50%}.mui-col-sm-offset-7{margin-left:58.33333%}.mui-col-sm-offset-8{margin-left:66.66667%}.mui-col-sm-offset-9{margin-left:75%}.mui-col-sm-offset-10{margin-left:83.33333%}.mui-col-sm-offset-11{margin-left:91.66667%}.mui-col-sm-offset-12{margin-left:100%}}@media (min-width:768px){.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9{float:left}.mui-col-md-1{width:8.33333%}.mui-col-md-2{width:16.66667%}.mui-col-md-3{width:25%}.mui-col-md-4{width:33.33333%}.mui-col-md-5{width:41.66667%}.mui-col-md-6{width:50%}.mui-col-md-7{width:58.33333%}.mui-col-md-8{width:66.66667%}.mui-col-md-9{width:75%}.mui-col-md-10{width:83.33333%}.mui-col-md-11{width:91.66667%}.mui-col-md-12{width:100%}.mui-col-md-offset-0{margin-left:0}.mui-col-md-offset-1{margin-left:8.33333%}.mui-col-md-offset-2{margin-left:16.66667%}.mui-col-md-offset-3{margin-left:25%}.mui-col-md-offset-4{margin-left:33.33333%}.mui-col-md-offset-5{margin-left:41.66667%}.mui-col-md-offset-6{margin-left:50%}.mui-col-md-offset-7{margin-left:58.33333%}.mui-col-md-offset-8{margin-left:66.66667%}.mui-col-md-offset-9{margin-left:75%}.mui-col-md-offset-10{margin-left:83.33333%}.mui-col-md-offset-11{margin-left:91.66667%}.mui-col-md-offset-12{margin-left:100%}}@media (min-width:992px){.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9{float:left}.mui-col-lg-1{width:8.33333%}.mui-col-lg-2{width:16.66667%}.mui-col-lg-3{width:25%}.mui-col-lg-4{width:33.33333%}.mui-col-lg-5{width:41.66667%}.mui-col-lg-6{width:50%}.mui-col-lg-7{width:58.33333%}.mui-col-lg-8{width:66.66667%}.mui-col-lg-9{width:75%}.mui-col-lg-10{width:83.33333%}.mui-col-lg-11{width:91.66667%}.mui-col-lg-12{width:100%}.mui-col-lg-offset-0{margin-left:0}.mui-col-lg-offset-1{margin-left:8.33333%}.mui-col-lg-offset-2{margin-left:16.66667%}.mui-col-lg-offset-3{margin-left:25%}.mui-col-lg-offset-4{margin-left:33.33333%}.mui-col-lg-offset-5{margin-left:41.66667%}.mui-col-lg-offset-6{margin-left:50%}.mui-col-lg-offset-7{margin-left:58.33333%}.mui-col-lg-offset-8{margin-left:66.66667%}.mui-col-lg-offset-9{margin-left:75%}.mui-col-lg-offset-10{margin-left:83.33333%}.mui-col-lg-offset-11{margin-left:91.66667%}.mui-col-lg-offset-12{margin-left:100%}}@media (min-width:1200px){.mui-col-xl-1,.mui-col-xl-10,.mui-col-xl-11,.mui-col-xl-12,.mui-col-xl-2,.mui-col-xl-3,.mui-col-xl-4,.mui-col-xl-5,.mui-col-xl-6,.mui-col-xl-7,.mui-col-xl-8,.mui-col-xl-9{float:left}.mui-col-xl-1{width:8.33333%}.mui-col-xl-2{width:16.66667%}.mui-col-xl-3{width:25%}.mui-col-xl-4{width:33.33333%}.mui-col-xl-5{width:41.66667%}.mui-col-xl-6{width:50%}.mui-col-xl-7{width:58.33333%}.mui-col-xl-8{width:66.66667%}.mui-col-xl-9{width:75%}.mui-col-xl-10{width:83.33333%}.mui-col-xl-11{width:91.66667%}.mui-col-xl-12{width:100%}.mui-col-xl-offset-0{margin-left:0}.mui-col-xl-offset-1{margin-left:8.33333%}.mui-col-xl-offset-2{margin-left:16.66667%}.mui-col-xl-offset-3{margin-left:25%}.mui-col-xl-offset-4{margin-left:33.33333%}.mui-col-xl-offset-5{margin-left:41.66667%}.mui-col-xl-offset-6{margin-left:50%}.mui-col-xl-offset-7{margin-left:58.33333%}.mui-col-xl-offset-8{margin-left:66.66667%}.mui-col-xl-offset-9{margin-left:75%}.mui-col-xl-offset-10{margin-left:83.33333%}.mui-col-xl-offset-11{margin-left:91.66667%}.mui-col-xl-offset-12{margin-left:100%}}.mui-panel{padding:15px;margin-bottom:20px;border-radius:0;background-color:#FFF;box-shadow:0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}.mui-panel:after,.mui-panel:before{content:" ";display:table}.mui-panel:after{clear:both}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-panel{box-shadow:0 -1px 2px 0 rgba(0,0,0,.12),-1px 0 2px 0 rgba(0,0,0,.12),0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}}.mui-select{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-select:focus{outline:0}.mui-select:focus>select{height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;height:32px;width:100%;appearance:none;-webkit-appearance:none;-moz-appearance:none;outline:0;border:none;border-bottom:1px solid rgba(0,0,0,.26);border-radius:0;box-shadow:none;background-color:transparent;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iNiIgd2lkdGg9IjEwIj48cG9seWdvbiBwb2ludHM9IjAsMCAxMCwwIDUsNiIgc3R5bGU9ImZpbGw6cmdiYSgwLDAsMCwuMjQpOyIvPjwvc3ZnPg==);background-repeat:no-repeat;background-position:right center;cursor:pointer;color:rgba(0,0,0,.87);font-size:16px;padding:0 25px 0 0}.mui-select>select::-ms-expand{display:none}.mui-select>select:focus{outline:0;height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select:disabled{color:rgba(0,0,0,.38);cursor:not-allowed;background-color:transparent;opacity:1}.mui-select__menu{position:absolute;z-index:2;min-width:100%;overflow-y:auto;padding:8px 0;background-color:#FFF;font-size:16px}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-select__menu{border-left:1px solid rgba(0,0,0,.12);border-top:1px solid rgba(0,0,0,.12)}}.mui-select__menu>div{padding:0 22px;height:42px;line-height:42px;cursor:pointer;white-space:nowrap}.mui-select__menu>div:hover{background-color:#E0E0E0}.mui-select__menu>div.mui--is-selected{background-color:#EEE}th{text-align:left}.mui-table{width:100%;max-width:100%;margin-bottom:20px}.mui-table>tbody>tr>td,.mui-table>tbody>tr>th,.mui-table>tfoot>tr>td,.mui-table>tfoot>tr>th,.mui-table>thead>tr>td,.mui-table>thead>tr>th{padding:10px;line-height:1.429}.mui-table>thead>tr>th{border-bottom:2px solid rgba(0,0,0,.12);font-weight:700}.mui-table>tbody+tbody{border-top:2px solid rgba(0,0,0,.12)}.mui-table.mui-table--bordered>tbody>tr>td{border-bottom:1px solid rgba(0,0,0,.12)}.mui-tabs__bar{list-style:none;padding-left:0;margin-bottom:0;background-color:transparent;white-space:nowrap;overflow-x:auto}.mui-tabs__bar>li{display:inline-block}.mui-tabs__bar>li>a{display:block;white-space:nowrap;text-transform:uppercase;font-weight:500;font-size:14px;color:rgba(0,0,0,.87);cursor:default;height:48px;line-height:48px;padding-left:24px;padding-right:24px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-tabs__bar>li>a:hover{text-decoration:none}.mui-tabs__bar>li.mui--is-active{border-bottom:2px solid #2196F3}.mui-tabs__bar>li.mui--is-active>a{color:#2196F3}.mui-tabs__bar.mui-tabs__bar--justified{display:table;width:100%;table-layout:fixed}.mui-tabs__bar.mui-tabs__bar--justified>li{display:table-cell}.mui-tabs__bar.mui-tabs__bar--justified>li>a{text-align:center;padding-left:0;padding-right:0}.mui-tabs__pane{display:none}.mui-tabs__pane.mui--is-active{display:block}[data-mui-toggle=tab]{animation-duration:.1ms;animation-name:mui-node-inserted}.mui-textfield{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-textfield>label{position:absolute;top:0;display:block;width:100%;color:rgba(0,0,0,.54);font-size:12px;font-weight:400;line-height:15px;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.mui-textfield>textarea{padding-top:5px}.mui-textfield>input,.mui-textfield>textarea{display:block}.mui-textfield>input:focus~label,.mui-textfield>textarea:focus~label{color:#2196F3}.mui-textfield--float-label>label{position:absolute;transform:translate(0,15px);font-size:16px;line-height:32px;color:rgba(0,0,0,.26);text-overflow:clip;cursor:text;pointer-events:none}.mui-textfield--float-label>input:focus~label,.mui-textfield--float-label>textarea:focus~label{transform:translate(0,0);font-size:12px;line-height:15px;text-overflow:ellipsis}.mui-textfield--float-label>input:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>input:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>input:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>textarea:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:rgba(0,0,0,.54);font-size:12px;line-height:15px;transform:translate(0,0);text-overflow:ellipsis}.mui-textfield--wrap-label{display:table;width:100%;padding-top:0}.mui-textfield--wrap-label:not(.mui-textfield--float-label)>label{display:table-header-group;position:static;white-space:normal;overflow-x:visible}.mui-textfield>input,.mui-textfield>textarea{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;background-color:transparent;color:rgba(0,0,0,.87);border:none;border-bottom:1px solid rgba(0,0,0,.26);outline:0;width:100%;font-size:16px;padding:0;box-shadow:none;border-radius:0;background-image:none}.mui-textfield>input:focus,.mui-textfield>textarea:focus{border-color:#2196F3;border-width:2px}.mui-textfield>input:-moz-read-only,.mui-textfield>input:disabled,.mui-textfield>textarea:-moz-read-only,.mui-textfield>textarea:disabled{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input:disabled,.mui-textfield>input:read-only,.mui-textfield>textarea:disabled,.mui-textfield>textarea:read-only{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input::-webkit-input-placeholder,.mui-textfield>textarea::-webkit-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::-moz-placeholder,.mui-textfield>textarea::-moz-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input:-ms-input-placeholder,.mui-textfield>textarea:-ms-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::placeholder,.mui-textfield>textarea::placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input{height:32px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>textarea{min-height:64px}.mui-textfield>textarea[rows]:not([rows="2"]):focus{margin-bottom:-1px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):not(:required),.mui-textfield>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required),.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty){border-color:#F44336;border-width:2px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty){height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required)~label,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):not(:required)~label,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:#F44336}.mui-textfield:not(.mui-textfield--float-label)>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label{color:#F44336}@keyframes mui-node-inserted{from{opacity:.99}to{opacity:1}}.mui--no-transition{transition:none!important}.mui--no-user-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.mui--text-left{text-align:left!important}.mui--text-right{text-align:right!important}.mui--text-center{text-align:center!important}.mui--text-justify{text-align:justify!important}.mui--text-nowrap{white-space:nowrap!important}.mui--align-baseline{vertical-align:baseline!important}.mui--align-top{vertical-align:top!important}.mui--align-middle{vertical-align:middle!important}.mui--align-bottom{vertical-align:bottom!important}.mui--text-dark{color:rgba(0,0,0,.87)}.mui--text-dark-secondary{color:rgba(0,0,0,.54)}.mui--text-dark-hint{color:rgba(0,0,0,.38)}.mui--text-light{color:#FFF}.mui--text-light-secondary{color:rgba(255,255,255,.7)}.mui--text-light-hint{color:rgba(255,255,255,.3)}.mui--text-accent{color:rgba(255,64,129,.87)}.mui--text-accent-secondary{color:rgba(255,64,129,.54)}.mui--text-accent-hint{color:rgba(255,64,129,.38)}.mui--text-black{color:#000}.mui--text-white{color:#FFF}.mui--text-danger{color:#F44336}.mui-list--unstyled{padding-left:0;list-style:none}.mui-list--inline{padding-left:0;list-style:none;margin-left:-5px}.mui-list--inline>li{display:inline-block;padding-left:5px;padding-right:5px}.mui--z1,.mui-dropdown__menu,.mui-select__menu{box-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24)}.mui--z2{box-shadow:0 3px 6px rgba(0,0,0,.16),0 3px 6px rgba(0,0,0,.23)}.mui--z3{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}.mui--z4{box-shadow:0 14px 28px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.22)}.mui--z5{box-shadow:0 19px 38px rgba(0,0,0,.3),0 15px 12px rgba(0,0,0,.22)}.mui--clearfix:after,.mui--clearfix:before{content:" ";display:table}.mui--clearfix:after{clear:both}.mui--pull-right{float:right!important}.mui--pull-left{float:left!important}.mui--hide{display:none!important}.mui--show{display:block!important}.mui--invisible{visibility:hidden}.mui--overflow-hidden{overflow:hidden!important}.mui--overflow-hidden-x{overflow-x:hidden!important}.mui--overflow-hidden-y{overflow-y:hidden!important}.mui--visible-lg-block,.mui--visible-lg-inline,.mui--visible-lg-inline-block,.mui--visible-md-block,.mui--visible-md-inline,.mui--visible-md-inline-block,.mui--visible-sm-block,.mui--visible-sm-inline,.mui--visible-sm-inline-block,.mui--visible-xl-block,.mui--visible-xl-inline,.mui--visible-xl-inline-block,.mui--visible-xs-block,.mui--visible-xs-inline,.mui--visible-xs-inline-block{display:none!important}@media (max-width:543px){.mui-visible-xs{display:block!important}table.mui-visible-xs{display:table}tr.mui-visible-xs{display:table-row!important}td.mui-visible-xs,th.mui-visible-xs{display:table-cell!important}.mui--visible-xs-block{display:block!important}.mui--visible-xs-inline{display:inline!important}.mui--visible-xs-inline-block{display:inline-block!important}}@media (min-width:544px) and (max-width:767px){.mui-visible-sm{display:block!important}table.mui-visible-sm{display:table}tr.mui-visible-sm{display:table-row!important}td.mui-visible-sm,th.mui-visible-sm{display:table-cell!important}.mui--visible-sm-block{display:block!important}.mui--visible-sm-inline{display:inline!important}.mui--visible-sm-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.mui-visible-md{display:block!important}table.mui-visible-md{display:table}tr.mui-visible-md{display:table-row!important}td.mui-visible-md,th.mui-visible-md{display:table-cell!important}.mui--visible-md-block{display:block!important}.mui--visible-md-inline{display:inline!important}.mui--visible-md-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.mui-visible-lg{display:block!important}table.mui-visible-lg{display:table}tr.mui-visible-lg{display:table-row!important}td.mui-visible-lg,th.mui-visible-lg{display:table-cell!important}.mui--visible-lg-block{display:block!important}.mui--visible-lg-inline{display:inline!important}.mui--visible-lg-inline-block{display:inline-block!important}}@media (min-width:1200px){.mui-visible-xl{display:block!important}table.mui-visible-xl{display:table}tr.mui-visible-xl{display:table-row!important}td.mui-visible-xl,th.mui-visible-xl{display:table-cell!important}.mui--visible-xl-block{display:block!important}.mui--visible-xl-inline{display:inline!important}.mui--visible-xl-inline-block{display:inline-block!important}}@media (max-width:543px){.mui--hidden-xs{display:none!important}}@media (min-width:544px) and (max-width:767px){.mui--hidden-sm{display:none!important}}@media (min-width:768px) and (max-width:991px){.mui--hidden-md{display:none!important}}@media (min-width:992px) and (max-width:1199px){.mui--hidden-lg{display:none!important}}@media (min-width:1200px){.mui--hidden-xl{display:none!important}}body.mui-body--scroll-lock{overflow:hidden!important}#mui-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:99999999;background-color:rgba(0,0,0,.2);overflow:auto}.mui-ripple-effect{position:absolute;border-radius:50%;pointer-events:none;opacity:0;animation:mui-ripple-animation 2s}@keyframes mui-ripple-animation{from{transform:scale(1);opacity:.4}to{transform:scale(100);opacity:0}}.mui-btn>.mui-ripple-effect{background-color:#a6a6a6}.mui-btn--primary>.mui-ripple-effect{background-color:#FFF}.mui-btn--dark>.mui-ripple-effect{background-color:#FFF}.mui-btn--danger>.mui-ripple-effect{background-color:#FFF}.mui-btn--accent>.mui-ripple-effect{background-color:#FFF}.mui-btn--flat>.mui-ripple-effect{background-color:#a6a6a6}.mui--text-display4{font-weight:300;font-size:112px;line-height:112px}.mui--text-display3{font-weight:400;font-size:56px;line-height:56px}.mui--text-display2{font-weight:400;font-size:45px;line-height:48px}.mui--text-display1,h1{font-weight:400;font-size:34px;line-height:40px}.mui--text-headline,h2{font-weight:400;font-size:24px;line-height:32px}.mui--text-title,h3{font-weight:400;font-size:20px;line-height:28px}.mui--text-subhead,h4{font-weight:400;font-size:16px;line-height:24px}.mui--text-body2,h5{font-weight:500;font-size:14px;line-height:24px}.mui--text-body1{font-weight:400;font-size:14px;line-height:20px}.mui--text-caption{font-weight:400;font-size:12px;line-height:16px}.mui--text-menu{font-weight:500;font-size:13px;line-height:17px}.mui--text-button{font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase}'; +},{}],8:[function(i,t,e){"use strict";function o(i){i._muiDropdown!==!0&&(i._muiDropdown=!0,i.hasAttribute("type")||(i.type="button"),a.on(i,"click",n))}function n(i){if(0===i.button){var t=this;null===t.getAttribute("disabled")&&l(t)}}function l(i){function t(){a.removeClass(n,d),a.off(l,"click",t)}function e(){var e=o.getBoundingClientRect(),r=i.getBoundingClientRect(),u=r.top-e.top+r.height;a.css(n,"top",u+"px"),a.addClass(n,d),setTimeout(function(){a.on(l,"click",t)},0)}var o=i.parentNode,n=i.nextElementSibling,l=o.ownerDocument;return n&&a.hasClass(n,s)?void(a.hasClass(n,d)?t():e()):r.raiseError("Dropdown menu element not found")}var a=i("./lib/jqLite"),r=i("./lib/util"),u="data-mui-toggle",m='[data-mui-toggle="dropdown"]',d="mui--is-open",s="mui-dropdown__menu";t.exports={initListeners:function(){for(var i=document,t=i.querySelectorAll(m),e=t.length-1;e>=0;e--)o(t[e]);r.onNodeInserted(function(i){"dropdown"===i.getAttribute(u)&&o(i)})}}},{"./lib/jqLite":5,"./lib/util":6}],9:[function(i,t,e){t.exports=i(5)},{}],10:[function(i,t,e){t.exports=i(6)},{"../config":3,"./jqLite":5}],11:[function(i,t,e){"use strict";function o(i){var t;if("on"===i){for(var e,o,a,r=arguments.length-1;r>0;r--)e=arguments[r],"object"===p.type(e)&&(o=e),e instanceof Element&&1===e.nodeType&&(a=e);o=o||{},void 0===o.keyboard&&(o.keyboard=!0),void 0===o["static"]&&(o["static"]=!1),t=n(o,a)}else"off"===i?t=l():c.raiseError("Expecting 'on' or 'off'");return t}function n(i,t){var e=document.body,o=document.getElementById(f);if(c.enableScrollLock(),o){for(;o.firstChild;)o.removeChild(o.firstChild);t&&o.appendChild(t)}else o=document.createElement("div"),o.setAttribute("id",f),t&&o.appendChild(t),e.appendChild(o);return b.test(navigator.userAgent)&&p.css(o,"cursor","pointer"),i.keyboard?a():r(),i["static"]?d(o):m(o),o.muiOptions=i,o}function l(){var i,t=document.getElementById(f);if(t){for(;t.firstChild;)t.removeChild(t.firstChild);t.parentNode.removeChild(t),i=t.muiOptions.onclose,d(t)}return c.disableScrollLock(),r(),i&&i(),t}function a(){p.on(document,"keyup",u)}function r(){p.off(document,"keyup",u)}function u(i){27===i.keyCode&&l()}function m(i){p.on(i,"click",s)}function d(i){p.off(i,"click",s)}function s(i){i.target.id===f&&l()}var c=i("./lib/util"),p=i("./lib/jqLite"),f="mui-overlay",b=/(iPad|iPhone|iPod)/g;t.exports=o},{"./lib/jqLite":5,"./lib/util":6}],12:[function(i,t,e){"use strict";function o(i){i._muiRipple!==!0&&(i._muiRipple=!0,"INPUT"!==i.tagName&&(l.on(i,"touchstart",n),l.on(i,"mousedown",n)))}function n(i){if(0===i.button){var t=this;if(t.disabled!==!0&&t.touchFlag!==!0){t.touchFlag=!0,setTimeout(function(){t.touchFlag=!1},100);var e=document.createElement("div");e.className=m;var o,n,a=l.offset(t),r=i.pageX-a.left,d=i.pageY-a.top;o=l.hasClass(t,u)?a.height/2:a.height,n=o/2,l.css(e,{height:o+"px",width:o+"px",top:d-n+"px",left:r-n+"px"}),t.appendChild(e),window.setTimeout(function(){var i=e.parentNode;i&&i.removeChild(e)},2e3)}}}var l=i("./lib/jqLite"),a=i("./lib/util"),r="mui-btn",u="mui-btn--fab",m="mui-ripple-effect";t.exports={initListeners:function(){for(var i=document,t=i.getElementsByClassName(r),e=t.length-1;e>=0;e--)o(t[e]);a.onNodeInserted(function(i){l.hasClass(i,r)&&o(i)})}}},{"./lib/jqLite":5,"./lib/util":6}],13:[function(i,t,e){"use strict";function o(i){i._muiSelect!==!0&&(i._muiSelect=!0,"ontouchstart"in p.documentElement||new n(i))}function n(i){this.selectEl=i,this.wrapperEl=i.parentNode,this.useDefault=!1,a.on(i,"mousedown",r.callback(this,"mousedownHandler")),a.on(i,"focus",r.callback(this,"focusHandler")),a.on(i,"click",r.callback(this,"clickHandler")),this.wrapperEl.tabIndex=-1;var t=r.callback(this,"wrapperFocusHandler");a.on(this.wrapperEl,"focus",t)}function l(i,t){r.enableScrollLock(),this.origIndex=null,this.currentIndex=null,this.selectEl=t,this.menuEl=this._createMenuEl(i,t),this.clickCallbackFn=r.callback(this,"clickHandler"),this.keydownCallbackFn=r.callback(this,"keydownHandler"),this.destroyCallbackFn=r.callback(this,"destroy"),i.appendChild(this.menuEl),a.scrollTop(this.menuEl,this.menuEl._muiScrollTop),setTimeout(function(){"body"!==p.activeElement.nodeName.toLowerCase()&&p.activeElement.blur()},0),a.on(this.menuEl,"click",this.clickCallbackFn),a.on(p,"keydown",this.keydownCallbackFn),a.on(f,"resize",this.destroyCallbackFn);var e=this.destroyCallbackFn;setTimeout(function(){a.on(p,"click",e)},0)}var a=i("./lib/jqLite"),r=i("./lib/util"),u=i("./lib/forms"),m="mui-select",d=".mui-select > select",s="mui-select__menu",c="mui--is-selected",p=document,f=window;n.prototype.mousedownHandler=function(i){0===i.button&&this.useDefault!==!0&&i.preventDefault()},n.prototype.focusHandler=function(i){if(this.useDefault!==!0){var t=this.selectEl,e=this.wrapperEl,o=t.tabIndex,n=r.callback(this,"keydownHandler");a.on(p,"keydown",n),t.tabIndex=-1,a.one(e,"blur",function(){t.tabIndex=o,a.off(p,"keydown",n)}),e.focus()}},n.prototype.keydownHandler=function(i){var t=i.keyCode;32!==t&&38!==t&&40!==t||(i.preventDefault(),this.selectEl.disabled!==!0&&this.renderMenu())},n.prototype.wrapperFocusHandler=function(){return this.selectEl.disabled?this.wrapperEl.blur():void 0},n.prototype.clickHandler=function(i){0===i.button&&this.renderMenu()},n.prototype.renderMenu=function(){return this.useDefault===!0?this.useDefault=!1:void new l(this.wrapperEl,this.selectEl)},l.prototype._createMenuEl=function(i,t){var e,o,n,l=p.createElement("div"),r=t.children,m=r.length,d=0;for(l.className=s,n=0;m>n;n++)e=r[n],o=p.createElement("div"),o.textContent=e.textContent,o._muiPos=n,e.selected&&(o.setAttribute("class",c),d=n),l.appendChild(o);this.origIndex=d,this.currentIndex=d;var f=u.getMenuPositionalCSS(i,m,d);return a.css(l,f),l._muiScrollTop=f.scrollTop,l},l.prototype.keydownHandler=function(i){var t=i.keyCode;return 9===t?this.destroy():(27!==t&&40!==t&&38!==t&&13!==t||i.preventDefault(),void(27===t?this.destroy():40===t?this.increment():38===t?this.decrement():13===t&&(this.selectCurrent(),this.destroy())))},l.prototype.clickHandler=function(i){i.stopPropagation();var t=i.target._muiPos;void 0!==t&&(this.currentIndex=t,this.selectCurrent(),this.destroy())},l.prototype.increment=function(){if(this.currentIndex!==this.menuEl.children.length-1){var i=this.menuEl.children;a.removeClass(i[this.currentIndex],c),this.currentIndex+=1,a.addClass(i[this.currentIndex],c)}},l.prototype.decrement=function(){if(0!==this.currentIndex){var i=this.menuEl.children;a.removeClass(i[this.currentIndex],c),this.currentIndex-=1,a.addClass(i[this.currentIndex],c)}},l.prototype.selectCurrent=function(){if(this.currentIndex!==this.origIndex){var i=this.selectEl.children;i[this.origIndex].selected=!1,i[this.currentIndex].selected=!0,r.dispatchEvent(this.selectEl,"change")}},l.prototype.destroy=function(){var i=this.menuEl.parentNode;i&&i.removeChild(this.menuEl),this.selectEl.focus(),r.disableScrollLock(),a.off(this.menuEl,"click",this.clickCallbackFn),a.off(p,"keydown",this.keydownCallbackFn),a.off(p,"click",this.destroyCallbackFn),a.off(f,"resize",this.destroyCallbackFn)},t.exports={initListeners:function(){for(var i=p.querySelectorAll(d),t=i.length-1;t>=0;t--)o(i[t]);r.onNodeInserted(function(i){"SELECT"===i.tagName&&a.hasClass(i.parentNode,m)&&o(i)})}}},{"./lib/forms":4,"./lib/jqLite":5,"./lib/util":6}],14:[function(i,t,e){"use strict";function o(i){i._muiTabs!==!0&&(i._muiTabs=!0,r.on(i,"click",n))}function n(i){if(0===i.button){var t=this;null===t.getAttribute("disabled")&&l(t)}}function l(i){var t,e,o,n,l,m,d,h,g,v=i.parentNode,y=i.getAttribute(s),w=document.getElementById(y);r.hasClass(v,c)||(w||u.raiseError('Tab pane "'+y+'" not found'),e=a(w),o=e.id,g="["+s+'="'+o+'"]',n=document.querySelectorAll(g)[0],t=n.parentNode,l={paneId:y,relatedPaneId:o},m={paneId:o,relatedPaneId:y},d=u.dispatchEvent(n,b,!0,!0,m),h=u.dispatchEvent(i,p,!0,!0,l),setTimeout(function(){d.defaultPrevented||h.defaultPrevented||(t&&r.removeClass(t,c),e&&r.removeClass(e,c),r.addClass(v,c),r.addClass(w,c),u.dispatchEvent(n,x,!0,!1,m),u.dispatchEvent(i,f,!0,!1,l))},0))}function a(i){for(var t,e=i.parentNode.children,o=e.length,n=null;o--&&!n;)t=e[o],t!==i&&r.hasClass(t,c)&&(n=t);return n}var r=i("./lib/jqLite"),u=i("./lib/util"),m="data-mui-toggle",d="["+m+'="tab"]',s="data-mui-controls",c="mui--is-active",p="mui.tabs.showstart",f="mui.tabs.showend",b="mui.tabs.hidestart",x="mui.tabs.hideend";t.exports={initListeners:function(){for(var i=document.querySelectorAll(d),t=i.length-1;t>=0;t--)o(i[t]);u.onNodeInserted(function(i){"tab"===i.getAttribute(m)&&o(i)})},api:{activate:function(i){var t="["+s+"="+i+"]",e=document.querySelectorAll(t);e.length||u.raiseError('Tab control for pane "'+i+'" not found'),l(e[0])}}}},{"./lib/jqLite":5,"./lib/util":6}],15:[function(i,t,e){"use strict";function o(i){i._muiTextfield!==!0&&(i._muiTextfield=!0,i.value.length?l.addClass(i,m):l.addClass(i,u),l.on(i,"input",n),l.on(i,"change",n),l.on(i,"focus",function(){l.addClass(this,d)}))}function n(){var i=this;i.value.length?(l.removeClass(i,u),l.addClass(i,m)):(l.removeClass(i,m),l.addClass(i,u)),l.addClass(i,d)}var l=i("./lib/jqLite"),a=i("./lib/util"),r=".mui-textfield > input, .mui-textfield > textarea",u="mui--is-empty",m="mui--is-not-empty",d="mui--is-dirty",s="mui-textfield--float-label";t.exports={initialize:o,initListeners:function(){for(var i=document,t=i.querySelectorAll(r),e=t.length-1;e>=0;e--)o(t[e]);a.onNodeInserted(function(i){"INPUT"!==i.tagName&&"TEXTAREA"!==i.tagName||o(i)}),setTimeout(function(){var i=".mui-textfield.mui-textfield--float-label > label {"+["-webkit-transition","-moz-transition","-o-transition","transition",""].join(":all .15s ease-out;")+"}";a.loadStyle(i)},150),a.supportsPointerEvents()===!1&&l.on(document,"click",function(i){var t=i.target;if("LABEL"===t.tagName&&l.hasClass(t.parentNode,s)){var e=t.previousElementSibling;e&&e.focus()}})}}},{"./lib/jqLite":5,"./lib/util":6}]},{},[2]); \ No newline at end of file diff --git a/platforms/ios/www/libs/mui/packages/cdn/extra/mui-react-combined.js b/platforms/ios/www/libs/mui/packages/cdn/extra/mui-react-combined.js new file mode 100644 index 0000000..ba3dbcc --- /dev/null +++ b/platforms/ios/www/libs/mui/packages/cdn/extra/mui-react-combined.js @@ -0,0 +1,2 @@ +!function(e){var t=e.babelHelpers={};t.classCallCheck=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},t.createClass=function(){function e(e,t){for(var i=0;i=0||Object.prototype.hasOwnProperty.call(e,o)&&(i[o]=e[o]);return i},t.possibleConstructorReturn=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}}("undefined"==typeof global?self:global),function e(t,i,o){function l(r,a){if(!i[r]){if(!t[r]){var s="function"==typeof require&&require;if(!a&&s)return s(r,!0);if(n)return n(r,!0);throw new Error("Cannot find module '"+r+"'")}var u=i[r]={exports:{}};t[r][0].call(u.exports,function(e){var i=t[r][1][e];return l(i?i:e)},u,u.exports,e,t,i,o)}return i[r].exports}for(var n="function"==typeof require&&require,r=0;rp&&(b=a+(i+1)*r-(-1*o+l+n),f=t*r+2*a-m,h=Math.min(b,f)),{height:m+"px",top:o+"px",scrollTop:h}}var l=15,n=32,r=42,a=8;t.exports={getMenuPositionalCSS:o}},{}],5:[function(e,t,i){"use strict";function o(e,t){if(t&&e.setAttribute){for(var i,o=f(e),l=t.split(" "),n=0;n-1:!1}function r(e){if(void 0===e)return"undefined";var t=Object.prototype.toString.call(e);if(0===t.indexOf("[object "))return t.slice(8,-1).toLowerCase();throw new Error("MUI: Could not understand type: "+t)}function a(e,t,i,o){o=void 0===o?!1:o,e.addEventListener(t,i,o);var l=e._muiEventCache=e._muiEventCache||{};l[t]=l[t]||[],l[t].push([i,o])}function s(e,t,i,o){o=void 0===o?!1:o;var l,n,r=e._muiEventCache=e._muiEventCache||{},a=r[t]||[];for(n=a.length;n--;)l=a[n],(void 0===i||l[0]===i&&l[1]===o)&&(a.splice(n,1),e.removeEventListener(t,l[0],l[1]))}function u(e,t,i,o){a(e,t,function l(o){i&&i.apply(this,arguments),s(e,t,l)},o)}function c(e,t){var i=window;if(void 0===t){if(e===i){var o=document.documentElement;return(i.pageXOffset||o.scrollLeft)-(o.clientLeft||0)}return e.scrollLeft}e===i?i.scrollTo(t,p(i)):e.scrollLeft=t}function p(e,t){var i=window;if(void 0===t){if(e===i){var o=document.documentElement;return(i.pageYOffset||o.scrollTop)-(o.clientTop||0)}return e.scrollTop}e===i?i.scrollTo(c(i),t):e.scrollTop=t}function d(e){var t=window,i=e.getBoundingClientRect(),o=p(t),l=c(t);return{top:i.top+o,left:i.left+l,height:i.height,width:i.width}}function m(e){var t=!1,i=!0,o=document,l=o.defaultView,n=o.documentElement,r=o.addEventListener?"addEventListener":"attachEvent",a=o.addEventListener?"removeEventListener":"detachEvent",s=o.addEventListener?"":"on",u=function d(i){"readystatechange"==i.type&&"complete"!=o.readyState||(("load"==i.type?l:o)[a](s+i.type,d,!1),!t&&(t=!0)&&e.call(l,i.type||i))},c=function m(){try{n.doScroll("left")}catch(e){return void setTimeout(m,50)}u("poll")};if("complete"==o.readyState)e.call(l,"lazy");else{if(o.createEventObject&&n.doScroll){try{i=!l.frameElement}catch(p){}i&&c()}o[r](s+"DOMContentLoaded",u,!1),o[r](s+"readystatechange",u,!1),l[r](s+"load",u,!1)}}function b(e,t){if(t&&e.setAttribute){for(var i,o=f(e),l=t.split(" "),n=0;n=0;)o=o.replace(" "+i+" "," ");e.setAttribute("class",o.trim())}}function f(e){var t=(e.getAttribute("class")||"").replace(/[\n\t]/g,"");return" "+t+" "}function h(e){return e.replace(v,function(e,t,i,o){return o?i.toUpperCase():i}).replace(y,"Moz$1")}function g(e,t,i){var o;return o=i.getPropertyValue(t),""!==o||e.ownerDocument||(o=e.style[h(t)]),o}var x,v=/([\:\-\_]+(.))/g,y=/^moz([A-Z])/;x={multiple:!0,selected:!0,checked:!0,disabled:!0,readonly:!0,required:!0,open:!0},t.exports={addClass:o,css:l,hasClass:n,off:s,offset:d,on:a,one:u,ready:m,removeClass:b,type:r,scrollLeft:c,scrollTop:p}},{}],6:[function(e,t,i){"use strict";function o(){var e=window;if(h.debug&&"undefined"!=typeof e.console)try{e.console.log.apply(e.console,arguments)}catch(t){var i=Array.prototype.slice.call(arguments);e.console.log(i.join("\n"))}}function l(e){var t,i=document;t=i.head||i.getElementsByTagName("head")[0]||i.documentElement;var o=i.createElement("style");return o.type="text/css",o.styleSheet?o.styleSheet.cssText=e:o.appendChild(i.createTextNode(e)),t.insertBefore(o,t.firstChild),o}function n(e,t){if(!t)throw new Error("MUI: "+e);"undefined"!=typeof console&&console.error("MUI Warning: "+e)}function r(e){if(x.push(e),void 0===x._initialized){var t=document;g.on(t,"animationstart",a),g.on(t,"mozAnimationStart",a),g.on(t,"webkitAnimationStart",a),x._initialized=!0}}function a(e){if("mui-node-inserted"===e.animationName)for(var t=e.target,i=x.length-1;i>=0;i--)x[i](t)}function s(e){var t="";for(var i in e)t+=e[i]?i+" ":"";return t.trim()}function u(){if(void 0!==f)return f;var e=document.createElement("x");return e.style.cssText="pointer-events:auto",f="auto"===e.style.pointerEvents}function c(e,t){return function(){e[t].apply(e,arguments)}}function p(e,t,i,o,l){var n,r=document.createEvent("HTMLEvents"),i=void 0!==i?i:!0,o=void 0!==o?o:!0;if(r.initEvent(t,i,o),l)for(n in l)r[n]=l[n];return e&&e.dispatchEvent(r),r}function d(){if(v+=1,1===v){var e=window,t=document;b={left:g.scrollLeft(e),top:g.scrollTop(e)},g.addClass(t.body,y),e.scrollTo(b.left,b.top)}}function m(){if(0!==v&&(v-=1,0===v)){var e=window,t=document;g.removeClass(t.body,y),e.scrollTo(b.left,b.top)}}var b,f,h=e("../config"),g=e("./jqLite"),x=[],v=0,y="mui-body--scroll-lock";t.exports={callback:c,classNames:s,disableScrollLock:m,dispatchEvent:p,enableScrollLock:d,log:o,loadStyle:l,onNodeInserted:r,raiseError:n,supportsPointerEvents:u}},{"../config":3,"./jqLite":5}],7:[function(e,t,i){"use strict";var o="You provided a `value` prop to a form field without an `OnChange` handler. Please see React documentation on controlled components";t.exports={controlledMessage:o}},{}],8:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=e("../js/lib/jqLite"),r=babelHelpers.interopRequireWildcard(n),a=e("../js/lib/util"),s=(babelHelpers.interopRequireWildcard(a),l["default"].PropTypes),u="mui-btn",c="mui-ripple-effect",p={color:1,variant:1,size:1},d=function(e){function t(){var e,i,o,l;babelHelpers.classCallCheck(this,t);for(var n=arguments.length,r=Array(n),a=0;n>a;a++)r[a]=arguments[a];return i=o=babelHelpers.possibleConstructorReturn(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(r))),o.state={ripples:{}},l=i,babelHelpers.possibleConstructorReturn(o,l)}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentDidMount",value:function(){var e=this.refs.buttonEl;e._muiDropdown=!0,e._muiRipple=!0}},{key:"onClick",value:function(e){var t=this.props.onClick;t&&t(e)}},{key:"onMouseDown",value:function(e){var t=r.offset(this.refs.buttonEl),i=t.height;"fab"===this.props.variant&&(i/=2);var o=this.state.ripples,l=Date.now();o[l]={xPos:e.pageX-t.left,yPos:e.pageY-t.top,diameter:i,teardownFn:this.teardownRipple.bind(this,l)},this.setState({ripples:o})}},{key:"onTouchStart",value:function(e){}},{key:"teardownRipple",value:function(e){var t=this.state.ripples;delete t[e],this.setState({ripples:t})}},{key:"render",value:function(){var e=u,t=void 0,i=void 0,o=this.state.ripples;for(t in p)i=this.props[t],"default"!==i&&(e+=" "+u+"--"+i);return l["default"].createElement("button",babelHelpers["extends"]({},this.props,{ref:"buttonEl",className:e+" "+this.props.className,onClick:this.onClick.bind(this),onMouseDown:this.onMouseDown.bind(this)}),this.props.children,Object.keys(o).map(function(e,t){var i=o[e];return l["default"].createElement(m,{key:e,xPos:i.xPos,yPos:i.yPos,diameter:i.diameter,onTeardown:i.teardownFn})}))}}]),t}(l["default"].Component);d.propTypes={color:s.oneOf(["default","primary","danger","dark","accent"]),disabled:s.bool,size:s.oneOf(["default","small","large"]),type:s.oneOf(["submit","button"]),variant:s.oneOf(["default","flat","raised","fab"]),onClick:s.func},d.defaultProps={className:"",color:"default",disabled:!1,size:"default",type:null,variant:"default",onClick:null};var m=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentDidMount",value:function(){var e=this;this.teardownTimer=setTimeout(function(){var t=e.props.onTeardown;t&&t()},2e3)}},{key:"componentWillUnmount",value:function(){clearTimeout(this.teardownTimer)}},{key:"render",value:function(){var e=this.props.diameter,t=e/2,i={height:e,width:e,top:this.props.yPos-t||0,left:this.props.xPos-t||0};return l["default"].createElement("div",{className:c,style:i})}}]),t}(l["default"].Component);m.propTypes={xPos:s.number,yPos:s.number,diameter:s.number,onTeardown:s.func},m.defaultProps={xPos:0,yPos:0,diameter:0,onTeardown:null},i["default"]=d,t.exports=i["default"]},{"../js/lib/jqLite":5,"../js/lib/util":6,react:"CwoHg3"}],9:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e=this.props,t=(e.children,babelHelpers.objectWithoutProperties(e,["children"]));return l["default"].createElement("span",babelHelpers["extends"]({},t,{className:"mui-caret "+this.props.className}))}}]),t}(l["default"].Component);n.defaultProps={className:""},i["default"]=n,t.exports=i["default"]},{react:"CwoHg3"}],10:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=l["default"].PropTypes,r=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){return null}}]),t}(l["default"].Component);r.propTypes={value:n.any,label:n.string,onActive:n.func},r.defaultProps={value:null,label:"",onActive:null},i["default"]=r,t.exports=i["default"]},{react:"CwoHg3"}],11:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.TextField=void 0;var o=window.React,l=babelHelpers.interopRequireDefault(o),n=e("../js/lib/util"),r=babelHelpers.interopRequireWildcard(n),a=e("./_helpers"),s=l["default"].PropTypes,u=function(e){function t(e){babelHelpers.classCallCheck(this,t);var i=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e)),o=e.value,l=o||e.defaultValue;i.state={innerValue:l,isDirty:Boolean(l)},void 0!==o&&null===e.onChange&&r.raiseError(a.controlledMessage,!0);var n=r.callback;return i.onChangeCB=n(i,"onChange"),i.onFocusCB=n(i,"onFocus"),i}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentDidMount",value:function(){this.refs.inputEl._muiTextfield=!0}},{key:"onChange",value:function(e){this.setState({innerValue:e.target.value});var t=this.props.onChange;t&&t(e)}},{key:"onFocus",value:function(e){this.setState({isDirty:!0})}},{key:"triggerFocus",value:function(){this.refs.inputEl.focus()}},{key:"render",value:function(){var e={},t=Boolean(this.state.innerValue),i=void 0;e["mui--is-empty"]=!t,e["mui--is-not-empty"]=t,e["mui--is-dirty"]=this.state.isDirty,e["mui--is-invalid"]=this.props.invalid,e=r.classNames(e);var o=this.props,n=(o.children,babelHelpers.objectWithoutProperties(o,["children"]));return i="textarea"===this.props.type?l["default"].createElement("textarea",babelHelpers["extends"]({},n,{ref:"inputEl",className:e,rows:this.props.rows,placeholder:this.props.hint,value:this.props.value,defaultValue:this.props.defaultValue,autoFocus:this.props.autoFocus,onChange:this.onChangeCB,onFocus:this.onFocusCB,required:this.props.required})):l["default"].createElement("input",babelHelpers["extends"]({},n,{ref:"inputEl",className:e,type:this.props.type,value:this.props.value,defaultValue:this.props.defaultValue,placeholder:this.props.hint,autoFocus:this.props.autofocus,onChange:this.onChangeCB,onFocus:this.onFocusCB,required:this.props.required}))}}]),t}(l["default"].Component);u.propTypes={hint:s.string,value:s.string,type:s.string,autoFocus:s.bool,onChange:s.func},u.defaultProps={hint:null,type:null,autoFocus:!1,onChange:null};var c=function(e){function t(){var e,i,o,l;babelHelpers.classCallCheck(this,t);for(var n=arguments.length,r=Array(n),a=0;n>a;a++)r[a]=arguments[a];return i=o=babelHelpers.possibleConstructorReturn(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(r))),o.state={style:{}},l=i,babelHelpers.possibleConstructorReturn(o,l)}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentDidMount",value:function(){var e=this;this.styleTimer=setTimeout(function(){var t=".15s ease-out",i=void 0;i={transition:t,WebkitTransition:t,MozTransition:t,OTransition:t,msTransform:t},e.setState({style:i})},150)}},{key:"componentWillUnmount",value:function(){clearTimeout(this.styleTimer)}},{key:"render",value:function(){return l["default"].createElement("label",{style:this.state.style,onClick:this.props.onClick},this.props.text)}}]),t}(l["default"].Component);c.defaultProps={text:"",onClick:null};var p=function(e){function t(e){babelHelpers.classCallCheck(this,t);var i=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e));return i.onClickCB=r.callback(i,"onClick"),i}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"onClick",value:function(e){r.supportsPointerEvents()===!1&&(e.target.style.cursor="text",this.refs.inputEl.triggerFocus())}},{key:"render",value:function(){var e={},t=void 0;return this.props.label.length&&(t=l["default"].createElement(c,{text:this.props.label,onClick:this.onClickCB})),e["mui-textfield"]=!0,e["mui-textfield--float-label"]=this.props.floatingLabel,e=r.classNames(e),l["default"].createElement("div",{className:e},l["default"].createElement(u,babelHelpers["extends"]({ref:"inputEl"},this.props)),t)}}]),t}(l["default"].Component);p.propTypes={label:s.string,floatingLabel:s.bool},p.defaultProps={label:"",floatingLabel:!1},i.TextField=p},{"../js/lib/util":6,"./_helpers":7,react:"CwoHg3"}],12:[function(e,t,i){t.exports='/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-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{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}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{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{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-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:border-box}:after,:before{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:Arial,Verdana,Tahoma;font-size:14px;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);background-color:#FFF}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#2196F3;text-decoration:none}a:focus,a:hover{color:#1976D2;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}p{margin:0 0 10px}ol,ul{margin-top:0;margin-bottom:10px}figure{margin:0}img{vertical-align:middle}hr{margin-top:20px;margin-bottom:20px;border:0;height:1px;background-color:rgba(0,0,0,.12)}legend{display:block;width:100%;padding:0;margin-bottom:10px;font-size:21px;color:rgba(0,0,0,.87);line-height:inherit;border:0}input[type=search]{box-sizing:border-box;-webkit-appearance:none}input[type=checkbox]:focus,input[type=radio]:focus,input[type=file]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type=checkbox]:disabled,input[type=radio]:disabled{cursor:not-allowed}strong{font-weight:700}abbr[title]{cursor:help;border-bottom:1px dotted #2196F3}h1,h2,h3{margin-top:20px;margin-bottom:10px}h4,h5,h6{margin-top:10px;margin-bottom:10px}.mui--appbar-height{height:56px}.mui--appbar-min-height,.mui-appbar{min-height:56px}.mui--appbar-line-height{line-height:56px}.mui--appbar-top{top:56px}@media (orientation:landscape) and (max-height:480px){.mui--appbar-height{height:48px}.mui--appbar-min-height,.mui-appbar{min-height:48px}.mui--appbar-line-height{line-height:48px}.mui--appbar-top{top:48px}}@media (min-width:480px){.mui--appbar-height{height:64px}.mui--appbar-min-height,.mui-appbar{min-height:64px}.mui--appbar-line-height{line-height:64px}.mui--appbar-top{top:64px}}.mui-appbar{background-color:#2196F3;color:#FFF}.mui-btn{animation-duration:.1ms;animation-name:mui-node-inserted;font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase;color:rgba(0,0,0,.87);background-color:#FFF;transition:all .2s ease-in-out;display:inline-block;height:36px;padding:0 26px;margin-top:6px;margin-bottom:6px;border:none;border-radius:2px;cursor:pointer;-ms-touch-action:manipulation;touch-action:manipulation;background-image:none;text-align:center;line-height:36px;vertical-align:middle;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:14px;letter-spacing:.03em;position:relative;overflow:hidden}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{color:rgba(0,0,0,.87);background-color:#fff}.mui-btn[disabled]:active,.mui-btn[disabled]:focus,.mui-btn[disabled]:hover{color:rgba(0,0,0,.87);background-color:#FFF}.mui-btn.mui-btn--flat{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn.mui-btn--flat:active,.mui-btn.mui-btn--flat:focus,.mui-btn.mui-btn--flat:hover{color:rgba(0,0,0,.87);background-color:#f2f2f2}.mui-btn.mui-btn--flat[disabled]:active,.mui-btn.mui-btn--flat[disabled]:focus,.mui-btn.mui-btn--flat[disabled]:hover{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{outline:0;text-decoration:none;color:rgba(0,0,0,.87)}.mui-btn:focus,.mui-btn:hover{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:focus,.mui-btn:hover{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn.mui--is-disabled,.mui-btn:disabled{cursor:not-allowed;pointer-events:none;opacity:.6;box-shadow:none}.mui-btn+.mui-btn{margin-left:8px}.mui-btn--flat{background-color:transparent}.mui-btn--flat:active,.mui-btn--flat:focus,.mui-btn--flat:hover{box-shadow:none;background-color:#f2f2f2}.mui-btn--fab,.mui-btn--raised{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab,.mui-btn--raised{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn--fab{position:relative;padding:0;width:55px;height:55px;line-height:55px;border-radius:50%;z-index:1}.mui-btn--primary{color:#FFF;background-color:#2196F3}.mui-btn--primary:active,.mui-btn--primary:focus,.mui-btn--primary:hover{color:#FFF;background-color:#39a1f4}.mui-btn--primary[disabled]:active,.mui-btn--primary[disabled]:focus,.mui-btn--primary[disabled]:hover{color:#FFF;background-color:#2196F3}.mui-btn--primary.mui-btn--flat{color:#2196F3;background-color:transparent}.mui-btn--primary.mui-btn--flat:active,.mui-btn--primary.mui-btn--flat:focus,.mui-btn--primary.mui-btn--flat:hover{color:#2196F3;background-color:#f2f2f2}.mui-btn--primary.mui-btn--flat[disabled]:active,.mui-btn--primary.mui-btn--flat[disabled]:focus,.mui-btn--primary.mui-btn--flat[disabled]:hover{color:#2196F3;background-color:transparent}.mui-btn--dark{color:#FFF;background-color:#424242}.mui-btn--dark:active,.mui-btn--dark:focus,.mui-btn--dark:hover{color:#FFF;background-color:#4f4f4f}.mui-btn--dark[disabled]:active,.mui-btn--dark[disabled]:focus,.mui-btn--dark[disabled]:hover{color:#FFF;background-color:#424242}.mui-btn--dark.mui-btn--flat{color:#424242;background-color:transparent}.mui-btn--dark.mui-btn--flat:active,.mui-btn--dark.mui-btn--flat:focus,.mui-btn--dark.mui-btn--flat:hover{color:#424242;background-color:#f2f2f2}.mui-btn--dark.mui-btn--flat[disabled]:active,.mui-btn--dark.mui-btn--flat[disabled]:focus,.mui-btn--dark.mui-btn--flat[disabled]:hover{color:#424242;background-color:transparent}.mui-btn--danger{color:#FFF;background-color:#F44336}.mui-btn--danger:active,.mui-btn--danger:focus,.mui-btn--danger:hover{color:#FFF;background-color:#f55a4e}.mui-btn--danger[disabled]:active,.mui-btn--danger[disabled]:focus,.mui-btn--danger[disabled]:hover{color:#FFF;background-color:#F44336}.mui-btn--danger.mui-btn--flat{color:#F44336;background-color:transparent}.mui-btn--danger.mui-btn--flat:active,.mui-btn--danger.mui-btn--flat:focus,.mui-btn--danger.mui-btn--flat:hover{color:#F44336;background-color:#f2f2f2}.mui-btn--danger.mui-btn--flat[disabled]:active,.mui-btn--danger.mui-btn--flat[disabled]:focus,.mui-btn--danger.mui-btn--flat[disabled]:hover{color:#F44336;background-color:transparent}.mui-btn--accent{color:#FFF;background-color:#FF4081}.mui-btn--accent:active,.mui-btn--accent:focus,.mui-btn--accent:hover{color:#FFF;background-color:#ff5a92}.mui-btn--accent[disabled]:active,.mui-btn--accent[disabled]:focus,.mui-btn--accent[disabled]:hover{color:#FFF;background-color:#FF4081}.mui-btn--accent.mui-btn--flat{color:#FF4081;background-color:transparent}.mui-btn--accent.mui-btn--flat:active,.mui-btn--accent.mui-btn--flat:focus,.mui-btn--accent.mui-btn--flat:hover{color:#FF4081;background-color:#f2f2f2}.mui-btn--accent.mui-btn--flat[disabled]:active,.mui-btn--accent.mui-btn--flat[disabled]:focus,.mui-btn--accent.mui-btn--flat[disabled]:hover{color:#FF4081;background-color:transparent}.mui-btn--small{height:30.6px;line-height:30.6px;padding:0 16px;font-size:13px}.mui-btn--large{height:54px;line-height:54px;padding:0 26px;font-size:14px}.mui-btn--fab.mui-btn--small{width:44px;height:44px;line-height:44px}.mui-btn--fab.mui-btn--large{width:75px;height:75px;line-height:75px}.mui-checkbox,.mui-radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.mui-checkbox>label,.mui-radio>label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio],.mui-radio>label>input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px}.mui-checkbox+.mui-checkbox,.mui-radio+.mui-radio{margin-top:-5px}.mui-checkbox--inline,.mui-radio--inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.mui-checkbox--inline>input[type=checkbox],.mui-checkbox--inline>input[type=radio],.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox--inline>label>input[type=radio],.mui-radio--inline>input[type=checkbox],.mui-radio--inline>input[type=radio],.mui-radio--inline>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio]{margin:4px 0 0;line-height:normal}.mui-checkbox--inline+.mui-checkbox--inline,.mui-radio--inline+.mui-radio--inline{margin-top:0;margin-left:10px}.mui-container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container:after,.mui-container:before{content:" ";display:table}.mui-container:after{clear:both}@media (min-width:544px){.mui-container{max-width:570px}}@media (min-width:768px){.mui-container{max-width:740px}}@media (min-width:992px){.mui-container{max-width:960px}}@media (min-width:1200px){.mui-container{max-width:1170px}}.mui-container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container-fluid:after,.mui-container-fluid:before{content:" ";display:table}.mui-container-fluid:after{clear:both}.mui-divider{display:block;height:1px;background-color:rgba(0,0,0,.12)}.mui--divider-top{border-top:1px solid rgba(0,0,0,.12)}.mui--divider-bottom{border-bottom:1px solid rgba(0,0,0,.12)}.mui--divider-left{border-left:1px solid rgba(0,0,0,.12)}.mui--divider-right{border-right:1px solid rgba(0,0,0,.12)}.mui-dropdown{display:inline-block;position:relative}[data-mui-toggle=dropdown]{animation-duration:.1ms;animation-name:mui-node-inserted;outline:0}.mui-dropdown__menu{position:absolute;top:100%;left:0;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#FFF;border-radius:2px;z-index:1;background-clip:padding-box}.mui-dropdown__menu.mui--is-open{display:block}.mui-dropdown__menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);white-space:nowrap}.mui-dropdown__menu>li>a:focus,.mui-dropdown__menu>li>a:hover{text-decoration:none;color:rgba(0,0,0,.87);background-color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a,.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;cursor:not-allowed}.mui-dropdown__menu--right{left:auto;right:0}@media (min-width:544px){.mui-form--inline>.mui-textfield{display:inline-block;margin-bottom:0}.mui-form--inline>.mui-checkbox,.mui-form--inline>.mui-radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.mui-form--inline>.mui-checkbox>label,.mui-form--inline>.mui-radio>label{padding-left:0}.mui-form--inline>.mui-checkbox>label>input[type=checkbox],.mui-form--inline>.mui-radio>label>input[type=radio]{position:relative;margin-left:0}.mui-form--inline>.mui-select{display:inline-block}.mui-form--inline>.mui-btn{margin-bottom:0;margin-top:0;vertical-align:bottom}}.mui-row{margin-left:-15px;margin-right:-15px}.mui-row:after,.mui-row:before{content:" ";display:table}.mui-row:after{clear:both}.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9,.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9,.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9,.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{min-height:1px;padding-left:15px;padding-right:15px}.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{float:left}.mui-col-xs-1{width:8.33333%}.mui-col-xs-2{width:16.66667%}.mui-col-xs-3{width:25%}.mui-col-xs-4{width:33.33333%}.mui-col-xs-5{width:41.66667%}.mui-col-xs-6{width:50%}.mui-col-xs-7{width:58.33333%}.mui-col-xs-8{width:66.66667%}.mui-col-xs-9{width:75%}.mui-col-xs-10{width:83.33333%}.mui-col-xs-11{width:91.66667%}.mui-col-xs-12{width:100%}.mui-col-xs-offset-0{margin-left:0}.mui-col-xs-offset-1{margin-left:8.33333%}.mui-col-xs-offset-2{margin-left:16.66667%}.mui-col-xs-offset-3{margin-left:25%}.mui-col-xs-offset-4{margin-left:33.33333%}.mui-col-xs-offset-5{margin-left:41.66667%}.mui-col-xs-offset-6{margin-left:50%}.mui-col-xs-offset-7{margin-left:58.33333%}.mui-col-xs-offset-8{margin-left:66.66667%}.mui-col-xs-offset-9{margin-left:75%}.mui-col-xs-offset-10{margin-left:83.33333%}.mui-col-xs-offset-11{margin-left:91.66667%}.mui-col-xs-offset-12{margin-left:100%}@media (min-width:544px){.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9{float:left}.mui-col-sm-1{width:8.33333%}.mui-col-sm-2{width:16.66667%}.mui-col-sm-3{width:25%}.mui-col-sm-4{width:33.33333%}.mui-col-sm-5{width:41.66667%}.mui-col-sm-6{width:50%}.mui-col-sm-7{width:58.33333%}.mui-col-sm-8{width:66.66667%}.mui-col-sm-9{width:75%}.mui-col-sm-10{width:83.33333%}.mui-col-sm-11{width:91.66667%}.mui-col-sm-12{width:100%}.mui-col-sm-offset-0{margin-left:0}.mui-col-sm-offset-1{margin-left:8.33333%}.mui-col-sm-offset-2{margin-left:16.66667%}.mui-col-sm-offset-3{margin-left:25%}.mui-col-sm-offset-4{margin-left:33.33333%}.mui-col-sm-offset-5{margin-left:41.66667%}.mui-col-sm-offset-6{margin-left:50%}.mui-col-sm-offset-7{margin-left:58.33333%}.mui-col-sm-offset-8{margin-left:66.66667%}.mui-col-sm-offset-9{margin-left:75%}.mui-col-sm-offset-10{margin-left:83.33333%}.mui-col-sm-offset-11{margin-left:91.66667%}.mui-col-sm-offset-12{margin-left:100%}}@media (min-width:768px){.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9{float:left}.mui-col-md-1{width:8.33333%}.mui-col-md-2{width:16.66667%}.mui-col-md-3{width:25%}.mui-col-md-4{width:33.33333%}.mui-col-md-5{width:41.66667%}.mui-col-md-6{width:50%}.mui-col-md-7{width:58.33333%}.mui-col-md-8{width:66.66667%}.mui-col-md-9{width:75%}.mui-col-md-10{width:83.33333%}.mui-col-md-11{width:91.66667%}.mui-col-md-12{width:100%}.mui-col-md-offset-0{margin-left:0}.mui-col-md-offset-1{margin-left:8.33333%}.mui-col-md-offset-2{margin-left:16.66667%}.mui-col-md-offset-3{margin-left:25%}.mui-col-md-offset-4{margin-left:33.33333%}.mui-col-md-offset-5{margin-left:41.66667%}.mui-col-md-offset-6{margin-left:50%}.mui-col-md-offset-7{margin-left:58.33333%}.mui-col-md-offset-8{margin-left:66.66667%}.mui-col-md-offset-9{margin-left:75%}.mui-col-md-offset-10{margin-left:83.33333%}.mui-col-md-offset-11{margin-left:91.66667%}.mui-col-md-offset-12{margin-left:100%}}@media (min-width:992px){.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9{float:left}.mui-col-lg-1{width:8.33333%}.mui-col-lg-2{width:16.66667%}.mui-col-lg-3{width:25%}.mui-col-lg-4{width:33.33333%}.mui-col-lg-5{width:41.66667%}.mui-col-lg-6{width:50%}.mui-col-lg-7{width:58.33333%}.mui-col-lg-8{width:66.66667%}.mui-col-lg-9{width:75%}.mui-col-lg-10{width:83.33333%}.mui-col-lg-11{width:91.66667%}.mui-col-lg-12{width:100%}.mui-col-lg-offset-0{margin-left:0}.mui-col-lg-offset-1{margin-left:8.33333%}.mui-col-lg-offset-2{margin-left:16.66667%}.mui-col-lg-offset-3{margin-left:25%}.mui-col-lg-offset-4{margin-left:33.33333%}.mui-col-lg-offset-5{margin-left:41.66667%}.mui-col-lg-offset-6{margin-left:50%}.mui-col-lg-offset-7{margin-left:58.33333%}.mui-col-lg-offset-8{margin-left:66.66667%}.mui-col-lg-offset-9{margin-left:75%}.mui-col-lg-offset-10{margin-left:83.33333%}.mui-col-lg-offset-11{margin-left:91.66667%}.mui-col-lg-offset-12{margin-left:100%}}@media (min-width:1200px){.mui-col-xl-1,.mui-col-xl-10,.mui-col-xl-11,.mui-col-xl-12,.mui-col-xl-2,.mui-col-xl-3,.mui-col-xl-4,.mui-col-xl-5,.mui-col-xl-6,.mui-col-xl-7,.mui-col-xl-8,.mui-col-xl-9{float:left}.mui-col-xl-1{width:8.33333%}.mui-col-xl-2{width:16.66667%}.mui-col-xl-3{width:25%}.mui-col-xl-4{width:33.33333%}.mui-col-xl-5{width:41.66667%}.mui-col-xl-6{width:50%}.mui-col-xl-7{width:58.33333%}.mui-col-xl-8{width:66.66667%}.mui-col-xl-9{width:75%}.mui-col-xl-10{width:83.33333%}.mui-col-xl-11{width:91.66667%}.mui-col-xl-12{width:100%}.mui-col-xl-offset-0{margin-left:0}.mui-col-xl-offset-1{margin-left:8.33333%}.mui-col-xl-offset-2{margin-left:16.66667%}.mui-col-xl-offset-3{margin-left:25%}.mui-col-xl-offset-4{margin-left:33.33333%}.mui-col-xl-offset-5{margin-left:41.66667%}.mui-col-xl-offset-6{margin-left:50%}.mui-col-xl-offset-7{margin-left:58.33333%}.mui-col-xl-offset-8{margin-left:66.66667%}.mui-col-xl-offset-9{margin-left:75%}.mui-col-xl-offset-10{margin-left:83.33333%}.mui-col-xl-offset-11{margin-left:91.66667%}.mui-col-xl-offset-12{margin-left:100%}}.mui-panel{padding:15px;margin-bottom:20px;border-radius:0;background-color:#FFF;box-shadow:0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}.mui-panel:after,.mui-panel:before{content:" ";display:table}.mui-panel:after{clear:both}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-panel{box-shadow:0 -1px 2px 0 rgba(0,0,0,.12),-1px 0 2px 0 rgba(0,0,0,.12),0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}}.mui-select{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-select:focus{outline:0}.mui-select:focus>select{height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;height:32px;width:100%;appearance:none;-webkit-appearance:none;-moz-appearance:none;outline:0;border:none;border-bottom:1px solid rgba(0,0,0,.26);border-radius:0;box-shadow:none;background-color:transparent;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iNiIgd2lkdGg9IjEwIj48cG9seWdvbiBwb2ludHM9IjAsMCAxMCwwIDUsNiIgc3R5bGU9ImZpbGw6cmdiYSgwLDAsMCwuMjQpOyIvPjwvc3ZnPg==);background-repeat:no-repeat;background-position:right center;cursor:pointer;color:rgba(0,0,0,.87);font-size:16px;padding:0 25px 0 0}.mui-select>select::-ms-expand{display:none}.mui-select>select:focus{outline:0;height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select:disabled{color:rgba(0,0,0,.38);cursor:not-allowed;background-color:transparent;opacity:1}.mui-select__menu{position:absolute;z-index:2;min-width:100%;overflow-y:auto;padding:8px 0;background-color:#FFF;font-size:16px}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-select__menu{border-left:1px solid rgba(0,0,0,.12);border-top:1px solid rgba(0,0,0,.12)}}.mui-select__menu>div{padding:0 22px;height:42px;line-height:42px;cursor:pointer;white-space:nowrap}.mui-select__menu>div:hover{background-color:#E0E0E0}.mui-select__menu>div.mui--is-selected{background-color:#EEE}th{text-align:left}.mui-table{width:100%;max-width:100%;margin-bottom:20px}.mui-table>tbody>tr>td,.mui-table>tbody>tr>th,.mui-table>tfoot>tr>td,.mui-table>tfoot>tr>th,.mui-table>thead>tr>td,.mui-table>thead>tr>th{padding:10px;line-height:1.429}.mui-table>thead>tr>th{border-bottom:2px solid rgba(0,0,0,.12);font-weight:700}.mui-table>tbody+tbody{border-top:2px solid rgba(0,0,0,.12)}.mui-table.mui-table--bordered>tbody>tr>td{border-bottom:1px solid rgba(0,0,0,.12)}.mui-tabs__bar{list-style:none;padding-left:0;margin-bottom:0;background-color:transparent;white-space:nowrap;overflow-x:auto}.mui-tabs__bar>li{display:inline-block}.mui-tabs__bar>li>a{display:block;white-space:nowrap;text-transform:uppercase;font-weight:500;font-size:14px;color:rgba(0,0,0,.87);cursor:default;height:48px;line-height:48px;padding-left:24px;padding-right:24px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-tabs__bar>li>a:hover{text-decoration:none}.mui-tabs__bar>li.mui--is-active{border-bottom:2px solid #2196F3}.mui-tabs__bar>li.mui--is-active>a{color:#2196F3}.mui-tabs__bar.mui-tabs__bar--justified{display:table;width:100%;table-layout:fixed}.mui-tabs__bar.mui-tabs__bar--justified>li{display:table-cell}.mui-tabs__bar.mui-tabs__bar--justified>li>a{text-align:center;padding-left:0;padding-right:0}.mui-tabs__pane{display:none}.mui-tabs__pane.mui--is-active{display:block}[data-mui-toggle=tab]{animation-duration:.1ms;animation-name:mui-node-inserted}.mui-textfield{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-textfield>label{position:absolute;top:0;display:block;width:100%;color:rgba(0,0,0,.54);font-size:12px;font-weight:400;line-height:15px;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.mui-textfield>textarea{padding-top:5px}.mui-textfield>input,.mui-textfield>textarea{display:block}.mui-textfield>input:focus~label,.mui-textfield>textarea:focus~label{color:#2196F3}.mui-textfield--float-label>label{position:absolute;transform:translate(0,15px);font-size:16px;line-height:32px;color:rgba(0,0,0,.26);text-overflow:clip;cursor:text;pointer-events:none}.mui-textfield--float-label>input:focus~label,.mui-textfield--float-label>textarea:focus~label{transform:translate(0,0);font-size:12px;line-height:15px;text-overflow:ellipsis}.mui-textfield--float-label>input:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>input:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>input:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>textarea:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:rgba(0,0,0,.54);font-size:12px;line-height:15px;transform:translate(0,0);text-overflow:ellipsis}.mui-textfield--wrap-label{display:table;width:100%;padding-top:0}.mui-textfield--wrap-label:not(.mui-textfield--float-label)>label{display:table-header-group;position:static;white-space:normal;overflow-x:visible}.mui-textfield>input,.mui-textfield>textarea{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;background-color:transparent;color:rgba(0,0,0,.87);border:none;border-bottom:1px solid rgba(0,0,0,.26);outline:0;width:100%;font-size:16px;padding:0;box-shadow:none;border-radius:0;background-image:none}.mui-textfield>input:focus,.mui-textfield>textarea:focus{border-color:#2196F3;border-width:2px}.mui-textfield>input:-moz-read-only,.mui-textfield>input:disabled,.mui-textfield>textarea:-moz-read-only,.mui-textfield>textarea:disabled{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input:disabled,.mui-textfield>input:read-only,.mui-textfield>textarea:disabled,.mui-textfield>textarea:read-only{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input::-webkit-input-placeholder,.mui-textfield>textarea::-webkit-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::-moz-placeholder,.mui-textfield>textarea::-moz-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input:-ms-input-placeholder,.mui-textfield>textarea:-ms-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::placeholder,.mui-textfield>textarea::placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input{height:32px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>textarea{min-height:64px}.mui-textfield>textarea[rows]:not([rows="2"]):focus{margin-bottom:-1px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):not(:required),.mui-textfield>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required),.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty){border-color:#F44336;border-width:2px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty){height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required)~label,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):not(:required)~label,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:#F44336}.mui-textfield:not(.mui-textfield--float-label)>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label{color:#F44336}@keyframes mui-node-inserted{from{opacity:.99}to{opacity:1}}.mui--no-transition{transition:none!important}.mui--no-user-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.mui--text-left{text-align:left!important}.mui--text-right{text-align:right!important}.mui--text-center{text-align:center!important}.mui--text-justify{text-align:justify!important}.mui--text-nowrap{white-space:nowrap!important}.mui--align-baseline{vertical-align:baseline!important}.mui--align-top{vertical-align:top!important}.mui--align-middle{vertical-align:middle!important}.mui--align-bottom{vertical-align:bottom!important}.mui--text-dark{color:rgba(0,0,0,.87)}.mui--text-dark-secondary{color:rgba(0,0,0,.54)}.mui--text-dark-hint{color:rgba(0,0,0,.38)}.mui--text-light{color:#FFF}.mui--text-light-secondary{color:rgba(255,255,255,.7)}.mui--text-light-hint{color:rgba(255,255,255,.3)}.mui--text-accent{color:rgba(255,64,129,.87)}.mui--text-accent-secondary{color:rgba(255,64,129,.54)}.mui--text-accent-hint{color:rgba(255,64,129,.38)}.mui--text-black{color:#000}.mui--text-white{color:#FFF}.mui--text-danger{color:#F44336}.mui-list--unstyled{padding-left:0;list-style:none}.mui-list--inline{padding-left:0;list-style:none;margin-left:-5px}.mui-list--inline>li{display:inline-block;padding-left:5px;padding-right:5px}.mui--z1,.mui-dropdown__menu,.mui-select__menu{box-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24)}.mui--z2{box-shadow:0 3px 6px rgba(0,0,0,.16),0 3px 6px rgba(0,0,0,.23)}.mui--z3{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}.mui--z4{box-shadow:0 14px 28px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.22)}.mui--z5{box-shadow:0 19px 38px rgba(0,0,0,.3),0 15px 12px rgba(0,0,0,.22)}.mui--clearfix:after,.mui--clearfix:before{content:" ";display:table}.mui--clearfix:after{clear:both}.mui--pull-right{float:right!important}.mui--pull-left{float:left!important}.mui--hide{display:none!important}.mui--show{display:block!important}.mui--invisible{visibility:hidden}.mui--overflow-hidden{overflow:hidden!important}.mui--overflow-hidden-x{overflow-x:hidden!important}.mui--overflow-hidden-y{overflow-y:hidden!important}.mui--visible-lg-block,.mui--visible-lg-inline,.mui--visible-lg-inline-block,.mui--visible-md-block,.mui--visible-md-inline,.mui--visible-md-inline-block,.mui--visible-sm-block,.mui--visible-sm-inline,.mui--visible-sm-inline-block,.mui--visible-xl-block,.mui--visible-xl-inline,.mui--visible-xl-inline-block,.mui--visible-xs-block,.mui--visible-xs-inline,.mui--visible-xs-inline-block{display:none!important}@media (max-width:543px){.mui-visible-xs{display:block!important}table.mui-visible-xs{display:table}tr.mui-visible-xs{display:table-row!important}td.mui-visible-xs,th.mui-visible-xs{display:table-cell!important}.mui--visible-xs-block{display:block!important}.mui--visible-xs-inline{display:inline!important}.mui--visible-xs-inline-block{display:inline-block!important}}@media (min-width:544px) and (max-width:767px){.mui-visible-sm{display:block!important}table.mui-visible-sm{display:table}tr.mui-visible-sm{display:table-row!important}td.mui-visible-sm,th.mui-visible-sm{display:table-cell!important}.mui--visible-sm-block{display:block!important}.mui--visible-sm-inline{display:inline!important}.mui--visible-sm-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.mui-visible-md{display:block!important}table.mui-visible-md{display:table}tr.mui-visible-md{display:table-row!important}td.mui-visible-md,th.mui-visible-md{display:table-cell!important}.mui--visible-md-block{display:block!important}.mui--visible-md-inline{display:inline!important}.mui--visible-md-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.mui-visible-lg{display:block!important}table.mui-visible-lg{display:table}tr.mui-visible-lg{display:table-row!important}td.mui-visible-lg,th.mui-visible-lg{display:table-cell!important}.mui--visible-lg-block{display:block!important}.mui--visible-lg-inline{display:inline!important}.mui--visible-lg-inline-block{display:inline-block!important}}@media (min-width:1200px){.mui-visible-xl{display:block!important}table.mui-visible-xl{display:table}tr.mui-visible-xl{display:table-row!important}td.mui-visible-xl,th.mui-visible-xl{display:table-cell!important}.mui--visible-xl-block{display:block!important}.mui--visible-xl-inline{display:inline!important}.mui--visible-xl-inline-block{display:inline-block!important}}@media (max-width:543px){.mui--hidden-xs{display:none!important}}@media (min-width:544px) and (max-width:767px){.mui--hidden-sm{display:none!important}}@media (min-width:768px) and (max-width:991px){.mui--hidden-md{display:none!important}}@media (min-width:992px) and (max-width:1199px){.mui--hidden-lg{display:none!important}}@media (min-width:1200px){.mui--hidden-xl{display:none!important}}body.mui-body--scroll-lock{overflow:hidden!important}#mui-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:99999999;background-color:rgba(0,0,0,.2);overflow:auto}.mui-ripple-effect{position:absolute;border-radius:50%;pointer-events:none;opacity:0;animation:mui-ripple-animation 2s}@keyframes mui-ripple-animation{from{transform:scale(1);opacity:.4}to{transform:scale(100);opacity:0}}.mui-btn>.mui-ripple-effect{background-color:#a6a6a6}.mui-btn--primary>.mui-ripple-effect{background-color:#FFF}.mui-btn--dark>.mui-ripple-effect{background-color:#FFF}.mui-btn--danger>.mui-ripple-effect{background-color:#FFF}.mui-btn--accent>.mui-ripple-effect{background-color:#FFF}.mui-btn--flat>.mui-ripple-effect{background-color:#a6a6a6}.mui--text-display4{font-weight:300;font-size:112px;line-height:112px}.mui--text-display3{font-weight:400;font-size:56px;line-height:56px}.mui--text-display2{font-weight:400;font-size:45px;line-height:48px}.mui--text-display1,h1{font-weight:400;font-size:34px;line-height:40px}.mui--text-headline,h2{font-weight:400;font-size:24px;line-height:32px}.mui--text-title,h3{font-weight:400;font-size:20px;line-height:28px}.mui--text-subhead,h4{font-weight:400;font-size:16px;line-height:24px}.mui--text-body2,h5{font-weight:500;font-size:14px;line-height:24px}.mui--text-body1{font-weight:400;font-size:14px;line-height:20px}.mui--text-caption{font-weight:400;font-size:12px;line-height:16px}.mui--text-menu{font-weight:500;font-size:13px;line-height:17px}.mui--text-button{font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase}'; +},{}],13:[function(e,t,i){t.exports=e(6)},{"../config":3,"./jqLite":5}],14:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){return l["default"].createElement("div",babelHelpers["extends"]({},this.props,{className:"mui-appbar "+this.props.className}),this.props.children)}}]),t}(l["default"].Component);n.defaultProps={className:""},i["default"]=n,t.exports=i["default"]},{react:"CwoHg3"}],15:[function(e,t,i){t.exports=e(8)},{"../js/lib/jqLite":5,"../js/lib/util":6,react:"CwoHg3"}],16:[function(e,t,i){t.exports=e(9)},{react:"CwoHg3"}],17:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=e("../js/lib/util"),r=(babelHelpers.interopRequireWildcard(n),e("./_helpers"),l["default"].PropTypes),a=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e=this.props,t=(e.children,e.onChange,babelHelpers.objectWithoutProperties(e,["children","onChange"]));return l["default"].createElement("div",babelHelpers["extends"]({},t,{className:"mui-checkbox "+this.props.className}),l["default"].createElement("label",null,l["default"].createElement("input",{ref:"inputEl",type:"checkbox",name:this.props.name,value:this.props.value,checked:this.props.checked,defaultChecked:this.props.defaultChecked,disabled:this.props.disabled,onChange:this.props.onChange}),this.props.label))}}]),t}(l["default"].Component);a.propTypes={name:r.string,label:r.string,value:r.string,checked:r.bool,defaultChecked:r.bool,disabled:r.bool,onChange:r.func},a.defaultProps={className:"",name:null,label:null,disabled:!1,onChange:null},i["default"]=a,t.exports=i["default"]},{"../js/lib/util":6,"./_helpers":7,react:"CwoHg3"}],18:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=e("../js/lib/util"),r=babelHelpers.interopRequireWildcard(n),a=["xs","sm","md","lg","xl"],s=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"defaultProps",value:function(){var e={className:""},t=void 0,i=void 0;for(t=a.length-1;t>-1;t--)i=a[t],e[i]=null,e[i+"-offset"]=null;return e}},{key:"render",value:function(){var e={},t=void 0,i=void 0,o=void 0,n=void 0;for(t=a.length-1;t>-1;t--)i=a[t],n="mui-col-"+i,o=this.props[i],o&&(e[n+"-"+o]=!0),o=this.props[i+"-offset"],o&&(e[n+"-offset-"+o]=!0);return e=r.classNames(e),l["default"].createElement("div",babelHelpers["extends"]({},this.props,{className:e+" "+this.props.className}),this.props.children)}}]),t}(l["default"].Component);i["default"]=s,t.exports=i["default"]},{"../js/lib/util":6,react:"CwoHg3"}],19:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e="mui-container";return this.props.fluid&&(e+="-fluid"),l["default"].createElement("div",babelHelpers["extends"]({},this.props,{className:e+" "+this.props.className}),this.props.children)}}]),t}(l["default"].Component);n.propTypes={fluid:l["default"].PropTypes.bool},n.defaultProps={className:"",fluid:!1},i["default"]=n,t.exports=i["default"]},{react:"CwoHg3"}],20:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e=this.props,t=(e.children,babelHelpers.objectWithoutProperties(e,["children"]));return l["default"].createElement("div",babelHelpers["extends"]({},t,{className:"mui-divider "+this.props.className}))}}]),t}(l["default"].Component);n.defaultProps={className:""},i["default"]=n,t.exports=i["default"]},{react:"CwoHg3"}],21:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=e("../js/lib/util"),r=babelHelpers.interopRequireWildcard(n),a=l["default"].PropTypes,s=function(e){function t(e){babelHelpers.classCallCheck(this,t);var i=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e));return i.onClickCB=r.callback(i,"onClick"),i}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"onClick",value:function(e){this.props.onClick&&this.props.onClick(this,e)}},{key:"render",value:function(){var e=this.props,t=e.children,i=(e.onClick,babelHelpers.objectWithoutProperties(e,["children","onClick"]));return l["default"].createElement("li",i,l["default"].createElement("a",{href:this.props.link,target:this.props.target,"data-mui-value":this.props.value,onClick:this.onClickCB},t))}}]),t}(l["default"].Component);s.propTypes={link:a.string,target:a.string,onClick:a.func},i["default"]=s,t.exports=i["default"]},{"../js/lib/util":6,react:"CwoHg3"}],22:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=e("./button"),r=babelHelpers.interopRequireDefault(n),a=e("./caret"),s=babelHelpers.interopRequireDefault(a),u=e("../js/lib/jqLite"),c=babelHelpers.interopRequireWildcard(u),p=e("../js/lib/util"),d=babelHelpers.interopRequireWildcard(p),m=l["default"].PropTypes,b="mui-dropdown",f="mui-dropdown__menu",h="mui--is-open",g="mui-dropdown__menu--right",x=function(e){function t(e){babelHelpers.classCallCheck(this,t);var i=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e));i.state={opened:!1,menuTop:0};var o=d.callback;return i.selectCB=o(i,"select"),i.onClickCB=o(i,"onClick"),i.onOutsideClickCB=o(i,"onOutsideClick"),i}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentWillMount",value:function(){document.addEventListener("click",this.onOutsideClickCB)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("click",this.onOutsideClickCB)}},{key:"onClick",value:function(e){if(0===e.button&&!this.props.disabled&&!e.defaultPrevented){this.toggle();var t=this.props.onClick;t&&t(e)}}},{key:"toggle",value:function(){return this.props.children?void(this.state.opened?this.close():this.open()):d.raiseError("Dropdown menu element not found")}},{key:"open",value:function(){var e=this.refs.wrapperEl.getBoundingClientRect(),t=void 0;t=this.refs.button.refs.buttonEl.getBoundingClientRect(),this.setState({opened:!0,menuTop:t.top-e.top+t.height})}},{key:"close",value:function(){this.setState({opened:!1})}},{key:"select",value:function(e){this.props.onSelect&&"A"===e.target.tagName&&this.props.onSelect(e.target.getAttribute("data-mui-value")),e.defaultPrevented||this.close()}},{key:"onOutsideClick",value:function(e){var t=this.refs.wrapperEl.contains(e.target);t||this.close()}},{key:"render",value:function(){var e=void 0,t=void 0,i=void 0;if(i="string"===c.type(this.props.label)?l["default"].createElement("span",null,this.props.label," ",l["default"].createElement(s["default"],null)):this.props.label,e=l["default"].createElement(r["default"],{ref:"button",type:"button",onClick:this.onClickCB,color:this.props.color,variant:this.props.variant,size:this.props.size,disabled:this.props.disabled},i),this.state.opened){var o={};o[f]=!0,o[h]=this.state.opened,o[g]="right"===this.props.alignMenu,o=d.classNames(o),t=l["default"].createElement("ul",{ref:"menuEl",className:o,style:{top:this.state.menuTop},onClick:this.selectCB},this.props.children)}var n=this.props,a=n.className,u=(n.children,n.onClick,babelHelpers.objectWithoutProperties(n,["className","children","onClick"]));return l["default"].createElement("div",babelHelpers["extends"]({},u,{ref:"wrapperEl",className:b+" "+a}),e,t)}}]),t}(l["default"].Component);x.propTypes={color:m.oneOf(["default","primary","danger","dark","accent"]),variant:m.oneOf(["default","flat","raised","fab"]),size:m.oneOf(["default","small","large"]),label:m.oneOfType([m.string,m.element]),alignMenu:m.oneOf(["left","right"]),onClick:m.func,onSelect:m.func,disabled:m.bool},x.defaultProps={className:"",color:"default",variant:"default",size:"default",label:"",alignMenu:"left",onClick:null,onSelect:null,disabled:!1},i["default"]=x,t.exports=i["default"]},{"../js/lib/jqLite":5,"../js/lib/util":6,"./button":8,"./caret":9,react:"CwoHg3"}],23:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e="";return this.props.inline&&(e="mui-form--inline"),l["default"].createElement("form",babelHelpers["extends"]({},this.props,{className:e+" "+this.props.className}),this.props.children)}}]),t}(l["default"].Component);n.propTypes={inline:l["default"].PropTypes.bool},n.defaultProps={className:"",inline:!1},i["default"]=n,t.exports=i["default"]},{react:"CwoHg3"}],24:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=e("./text-field"),r=l["default"].PropTypes,a=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){return l["default"].createElement(n.TextField,this.props)}}]),t}(l["default"].Component);a.propTypes={type:r.oneOf(["text","email","url","tel","password"])},a.defaultProps={type:"text"},i["default"]=a,t.exports=i["default"]},{"./text-field":11,react:"CwoHg3"}],25:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=e("../js/lib/forms"),r=(babelHelpers.interopRequireWildcard(n),e("../js/lib/jqLite")),a=(babelHelpers.interopRequireWildcard(r),e("../js/lib/util")),s=(babelHelpers.interopRequireWildcard(a),l["default"].PropTypes),u=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e=this.props,t=(e.children,babelHelpers.objectWithoutProperties(e,["children"]));return l["default"].createElement("option",babelHelpers["extends"]({},t,{value:this.props.value}),this.props.label)}}]),t}(l["default"].Component);u.propTypes={value:s.string,label:s.string},u.defaultProps={value:null,label:null},i["default"]=u,t.exports=i["default"]},{"../js/lib/forms":4,"../js/lib/jqLite":5,"../js/lib/util":6,react:"CwoHg3"}],26:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){return l["default"].createElement("div",babelHelpers["extends"]({},this.props,{className:"mui-panel "+this.props.className}),this.props.children)}}]),t}(l["default"].Component);n.defaultProps={className:""},i["default"]=n,t.exports=i["default"]},{react:"CwoHg3"}],27:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=l["default"].PropTypes,r=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e=this.props,t=(e.children,e.onChange,babelHelpers.objectWithoutProperties(e,["children","onChange"]));return l["default"].createElement("div",babelHelpers["extends"]({},t,{className:"mui-radio "+this.props.className}),l["default"].createElement("label",null,l["default"].createElement("input",{ref:"inputEl",type:"radio",name:this.props.name,value:this.props.value,checked:this.props.checked,defaultChecked:this.props.defaultChecked,disabled:this.props.disabled,onChange:this.props.onChange}),this.props.label))}}]),t}(l["default"].Component);r.propTypes={name:n.string,label:n.string,value:n.string,checked:n.bool,defaultChecked:n.bool,disabled:n.bool,onChange:n.func},r.defaultProps={className:"",name:null,label:null,disabled:!1,onChange:null},i["default"]=r,t.exports=i["default"]},{react:"CwoHg3"}],28:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=e("../js/lib/util"),r=(babelHelpers.interopRequireWildcard(n),function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){return l["default"].createElement("div",babelHelpers["extends"]({},this.props,{className:"mui-row "+this.props.className}),this.props.children)}}]),t}(l["default"].Component));r.defaultProps={className:""},i["default"]=r,t.exports=i["default"]},{"../js/lib/util":6,react:"CwoHg3"}],29:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=e("../js/lib/forms"),r=babelHelpers.interopRequireWildcard(n),a=e("../js/lib/jqLite"),s=babelHelpers.interopRequireWildcard(a),u=e("../js/lib/util"),c=babelHelpers.interopRequireWildcard(u),p=e("./_helpers"),d=l["default"].PropTypes,m=function(e){function t(e){babelHelpers.classCallCheck(this,t);var i=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e));i.state={showMenu:!1},e.readOnly===!1&&void 0!==e.value&&null===e.onChange&&c.raiseError(p.controlledMessage,!0),i.state.value=e.value;var o=c.callback;return i.hideMenuCB=o(i,"hideMenu"),i.onInnerChangeCB=o(i,"onInnerChange"),i.onInnerClickCB=o(i,"onInnerClick"),i.onInnerFocusCB=o(i,"onInnerFocus"),i.onInnerMouseDownCB=o(i,"onInnerMouseDown"),i.onKeydownCB=o(i,"onKeydown"),i.onMenuChangeCB=o(i,"onMenuChange"),i.onOuterFocusCB=o(i,"onOuterFocus"),i.onOuterBlurCB=o(i,"onOuterBlur"),i}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentDidMount",value:function(){this.refs.selectEl._muiSelect=!0,this.refs.wrapperEl.tabIndex=-1,this.props.autoFocus&&this.refs.wrapperEl.focus()}},{key:"componentWillReceiveProps",value:function(e){this.setState({value:e.value})}},{key:"onInnerMouseDown",value:function(e){0===e.button&&this.props.useDefault!==!0&&e.preventDefault()}},{key:"onInnerChange",value:function(e){var t=e.target.value;this.setState({value:t});var i=this.props.onChange;i&&i(t)}},{key:"onInnerClick",value:function(e){0===e.button&&this.showMenu()}},{key:"onInnerFocus",value:function(e){var t=this;this.props.useDefault!==!0&&setTimeout(function(){t.refs.wrapperEl.focus()},0)}},{key:"onOuterFocus",value:function(e){if(e.target===this.refs.wrapperEl){var t=this.refs.selectEl;return t._muiOrigIndex=t.tabIndex,t.tabIndex=-1,t.disabled?this.refs.wrapperEl.blur():void s.on(document,"keydown",this.onKeydownCB)}}},{key:"onOuterBlur",value:function(e){if(e.target===this.refs.wrapperEl){var t=this.refs.selectEl;t.tabIndex=t._muiOrigIndex,s.off(document,"keydown",this.onKeydownCB)}}},{key:"onKeydown",value:function(e){32!==e.keyCode&&38!==e.keyCode&&40!==e.keyCode||(e.preventDefault(),this.refs.selectEl.disabled!==!0&&this.showMenu())}},{key:"showMenu",value:function(){this.props.useDefault!==!0&&(c.enableScrollLock(),s.on(window,"resize",this.hideMenuCB),s.on(document,"click",this.hideMenuCB),this.setState({showMenu:!0}))}},{key:"hideMenu",value:function(){c.disableScrollLock(),s.off(window,"resize",this.hideMenuCB),s.off(document,"click",this.hideMenuCB),this.setState({showMenu:!1}),this.refs.selectEl.focus()}},{key:"onMenuChange",value:function(e){if(this.props.readOnly!==!0){this.setState({value:e});var t=this.props.onChange;t&&t(e)}}},{key:"render",value:function(){var e=void 0;this.state.showMenu&&(e=l["default"].createElement(b,{optionEls:this.refs.selectEl.children,wrapperEl:this.refs.wrapperEl,onChange:this.onMenuChangeCB,onClose:this.hideMenuCB}));var t=this.props,i=(t.children,t.onChange,babelHelpers.objectWithoutProperties(t,["children","onChange"]));return l["default"].createElement("div",babelHelpers["extends"]({},i,{ref:"wrapperEl",className:"mui-select "+this.props.className,onFocus:this.onOuterFocusCB,onBlur:this.onOuterBlurCB}),l["default"].createElement("select",{ref:"selectEl",name:this.props.name,value:this.state.value,defaultValue:this.props.defaultValue,disabled:this.props.disabled,multiple:this.props.multiple,readOnly:this.props.readOnly,required:this.props.required,onChange:this.onInnerChangeCB,onMouseDown:this.onInnerMouseDownCB,onClick:this.onInnerClickCB,onFocus:this.onInnerFocusCB},this.props.children),e)}}]),t}(l["default"].Component);m.propTypes={name:d.string,value:d.string,defaultValue:d.string,autoFocus:d.bool,disabled:d.bool,multiple:d.bool,readOnly:d.bool,required:d.bool,useDefault:d.bool,onChange:d.func},m.defaultProps={className:"",name:null,autoFocus:!1,disabled:!1,multiple:!1,readOnly:!1,required:!1,useDefault:!1,onChange:null};var b=function(e){function t(e){babelHelpers.classCallCheck(this,t);var i=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e));return i.state={origIndex:null,currentIndex:null},i.onKeydownCB=c.callback(i,"onKeydown"),i}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentWillMount",value:function(){var e=this.props.optionEls,t=e.length,i=0,o=void 0;for(o=t-1;o>-1;o--)e[o].selected&&(i=o);this.setState({origIndex:i,currentIndex:i})}},{key:"componentDidMount",value:function(){this.blurTimer=setTimeout(function(){var e=document.activeElement;"body"!==e.nodeName.toLowerCase()&&e.blur()},0);var e=r.getMenuPositionalCSS(this.props.wrapperEl,this.props.optionEls.length,this.state.currentIndex),t=this.refs.wrapperEl;s.css(t,e),s.scrollTop(t,e.scrollTop),s.on(document,"keydown",this.onKeydownCB)}},{key:"componentWillUnmount",value:function(){clearTimeout(this.blurTimer),s.off(document,"keydown",this.onKeydownCB)}},{key:"onClick",value:function(e,t){t.stopPropagation(),this.selectAndDestroy(e)}},{key:"onKeydown",value:function(e){var t=e.keyCode;return 9===t?this.destroy():(27!==t&&40!==t&&38!==t&&13!==t||e.preventDefault(),void(27===t?this.destroy():40===t?this.increment():38===t?this.decrement():13===t&&this.selectAndDestroy()))}},{key:"increment",value:function(){this.state.currentIndex!==this.props.optionEls.length-1&&this.setState({currentIndex:this.state.currentIndex+1})}},{key:"decrement",value:function(){0!==this.state.currentIndex&&this.setState({currentIndex:this.state.currentIndex-1})}},{key:"selectAndDestroy",value:function(e){e=void 0===e?this.state.currentIndex:e,e!==this.state.origIndex&&this.props.onChange(this.props.optionEls[e].value),this.destroy()}},{key:"destroy",value:function(){this.props.onClose()}},{key:"render",value:function(){var e=[],t=this.props.optionEls,i=t.length,o=void 0,n=void 0;for(n=0;i>n;n++)o=n===this.state.currentIndex?"mui--is-selected":"",e.push(l["default"].createElement("div",{key:n,className:o,onClick:this.onClick.bind(this,n)},t[n].textContent));return l["default"].createElement("div",{ref:"wrapperEl",className:"mui-select__menu"},e)}}]),t}(l["default"].Component);b.defaultProps={optionEls:[],wrapperEl:null,onChange:null,onClose:null},i["default"]=m,t.exports=i["default"]},{"../js/lib/forms":4,"../js/lib/jqLite":5,"../js/lib/util":6,"./_helpers":7,react:"CwoHg3"}],30:[function(e,t,i){t.exports=e(10)},{react:"CwoHg3"}],31:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=e("./tab"),r=babelHelpers.interopRequireDefault(n),a=e("../js/lib/util"),s=babelHelpers.interopRequireWildcard(a),u=l["default"].PropTypes,c="mui-tabs__bar",p="mui-tabs__bar--justified",d="mui-tabs__pane",m="mui--is-active",b=function(e){function t(e){babelHelpers.classCallCheck(this,t);var i=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e));return i.state={currentSelectedIndex:e.initialSelectedIndex},i}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"onClick",value:function(e,t,i){e!==this.state.currentSelectedIndex&&(this.setState({currentSelectedIndex:e}),t.props.onActive&&t.props.onActive(t),this.props.onChange&&this.props.onChange(e,t.props.value,t,i))}},{key:"render",value:function(){var e=this.props,t=e.children,i=babelHelpers.objectWithoutProperties(e,["children"]),o=[],n=[],a=t.length,u=this.state.currentSelectedIndex%a,b=void 0,f=void 0,h=void 0,g=void 0;for(g=0;a>g;g++)f=t[g],f.type!==r["default"]&&s.raiseError("Expecting MUITab React Element"),b=g===u,o.push(l["default"].createElement("li",{key:g,className:b?m:""},l["default"].createElement("a",{onClick:this.onClick.bind(this,g,f)},f.props.label))),h=d+" ",b&&(h+=m),n.push(l["default"].createElement("div",{key:g,className:h},f.props.children));return h=c,this.props.justified&&(h+=" "+p),l["default"].createElement("div",i,l["default"].createElement("ul",{className:h},o),n)}}]),t}(l["default"].Component);b.propTypes={initialSelectedIndex:u.number,justified:u.bool,onChange:u.func},b.defaultProps={className:"",initialSelectedIndex:0,justified:!1,onChange:null},i["default"]=b,t.exports=i["default"]},{"../js/lib/util":6,"./tab":10,react:"CwoHg3"}],32:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=e("./text-field"),r=l["default"].PropTypes,a=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){return l["default"].createElement(n.TextField,this.props)}}]),t}(l["default"].Component);a.propTypes={rows:r.number},a.defaultProps={type:"textarea",rows:2},i["default"]=a,t.exports=i["default"]},{"./text-field":11,react:"CwoHg3"}]},{},[2]); \ No newline at end of file diff --git a/platforms/ios/www/libs/mui/packages/cdn/js/mui.js b/platforms/ios/www/libs/mui/packages/cdn/js/mui.js new file mode 100644 index 0000000..1d101ee --- /dev/null +++ b/platforms/ios/www/libs/mui/packages/cdn/js/mui.js @@ -0,0 +1,1809 @@ +(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o viewHeight) { + scrollIdeal = (menuPadding + (currentIndex + 1) * optionHeight) - + (-1 * top + wrapperPadding + inputHeight); + scrollMax = numOptions * optionHeight + 2 * menuPadding - height; + scrollTop = Math.min(scrollIdeal, scrollMax); + } + + return { + 'height': height + 'px', + 'top': top + 'px', + 'scrollTop': scrollTop + }; +} + + +/** Define module API */ +module.exports = { + getMenuPositionalCSS: getMenuPositionalCSSFn +}; + +},{}],4:[function(require,module,exports){ +/** + * MUI CSS/JS jqLite module + * @module lib/jqLite + */ + +'use strict'; + + +/** + * Add a class to an element. + * @param {Element} element - The DOM element. + * @param {string} cssClasses - Space separated list of class names. + */ +function jqLiteAddClass(element, cssClasses) { + if (!cssClasses || !element.setAttribute) return; + + var existingClasses = _getExistingClasses(element), + splitClasses = cssClasses.split(' '), + cssClass; + + for (var i=0; i < splitClasses.length; i++) { + cssClass = splitClasses[i].trim(); + if (existingClasses.indexOf(' ' + cssClass + ' ') === -1) { + existingClasses += cssClass + ' '; + } + } + + element.setAttribute('class', existingClasses.trim()); +} + + +/** + * Get or set CSS properties. + * @param {Element} element - The DOM element. + * @param {string} [name] - The property name. + * @param {string} [value] - The property value. + */ +function jqLiteCss(element, name, value) { + // Return full style object + if (name === undefined) { + return getComputedStyle(element); + } + + var nameType = jqLiteType(name); + + // Set multiple values + if (nameType === 'object') { + for (var key in name) element.style[_camelCase(key)] = name[key]; + return; + } + + // Set a single value + if (nameType === 'string' && value !== undefined) { + element.style[_camelCase(name)] = value; + } + + var styleObj = getComputedStyle(element), + isArray = (jqLiteType(name) === 'array'); + + // Read single value + if (!isArray) return _getCurrCssProp(element, name, styleObj); + + // Read multiple values + var outObj = {}, + key; + + for (var i=0; i < name.length; i++) { + key = name[i]; + outObj[key] = _getCurrCssProp(element, key, styleObj); + } + + return outObj; +} + + +/** + * Check if element has class. + * @param {Element} element - The DOM element. + * @param {string} cls - The class name string. + */ +function jqLiteHasClass(element, cls) { + if (!cls || !element.getAttribute) return false; + return (_getExistingClasses(element).indexOf(' ' + cls + ' ') > -1); +} + + +/** + * Return the type of a variable. + * @param {} somevar - The JavaScript variable. + */ +function jqLiteType(somevar) { + // handle undefined + if (somevar === undefined) return 'undefined'; + + // handle others (of type [object ]) + var typeStr = Object.prototype.toString.call(somevar); + if (typeStr.indexOf('[object ') === 0) { + return typeStr.slice(8, -1).toLowerCase(); + } else { + throw new Error("MUI: Could not understand type: " + typeStr); + } +} + + +/** + * Attach an event handler to a DOM element + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOn(element, type, callback, useCapture) { + useCapture = (useCapture === undefined) ? false : useCapture; + + // add to DOM + element.addEventListener(type, callback, useCapture); + + // add to cache + var cache = element._muiEventCache = element._muiEventCache || {}; + cache[type] = cache[type] || []; + cache[type].push([callback, useCapture]); +} + + +/** + * Remove an event handler from a DOM element + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOff(element, type, callback, useCapture) { + useCapture = (useCapture === undefined) ? false : useCapture; + + // remove from cache + var cache = element._muiEventCache = element._muiEventCache || {}, + argsList = cache[type] || [], + args, + i; + + i = argsList.length; + while (i--) { + args = argsList[i]; + + // remove all events if callback is undefined + if (callback === undefined || + (args[0] === callback && args[1] === useCapture)) { + + // remove from cache + argsList.splice(i, 1); + + // remove from DOM + element.removeEventListener(type, args[0], args[1]); + } + } +} + + +/** + * Attach an event hander which will only execute once + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOne(element, type, callback, useCapture) { + jqLiteOn(element, type, function onFn(ev) { + // execute callback + if (callback) callback.apply(this, arguments); + + // remove wrapper + jqLiteOff(element, type, onFn); + }, useCapture); +} + + +/** + * Get or set horizontal scroll position + * @param {Element} element - The DOM element + * @param {number} [value] - The scroll position + */ +function jqLiteScrollLeft(element, value) { + var win = window; + + // get + if (value === undefined) { + if (element === win) { + var docEl = document.documentElement; + return (win.pageXOffset || docEl.scrollLeft) - (docEl.clientLeft || 0); + } else { + return element.scrollLeft; + } + } + + // set + if (element === win) win.scrollTo(value, jqLiteScrollTop(win)); + else element.scrollLeft = value; +} + + +/** + * Get or set vertical scroll position + * @param {Element} element - The DOM element + * @param {number} value - The scroll position + */ +function jqLiteScrollTop(element, value) { + var win = window; + + // get + if (value === undefined) { + if (element === win) { + var docEl = document.documentElement; + return (win.pageYOffset || docEl.scrollTop) - (docEl.clientTop || 0); + } else { + return element.scrollTop; + } + } + + // set + if (element === win) win.scrollTo(jqLiteScrollLeft(win), value); + else element.scrollTop = value; +} + + +/** + * Return object representing top/left offset and element height/width. + * @param {Element} element - The DOM element. + */ +function jqLiteOffset(element) { + var win = window, + rect = element.getBoundingClientRect(), + scrollTop = jqLiteScrollTop(win), + scrollLeft = jqLiteScrollLeft(win); + + return { + top: rect.top + scrollTop, + left: rect.left + scrollLeft, + height: rect.height, + width: rect.width + }; +} + + +/** + * Attach a callback to the DOM ready event listener + * @param {Function} fn - The callback function. + */ +function jqLiteReady(fn) { + var done = false, + top = true, + doc = document, + win = doc.defaultView, + root = doc.documentElement, + add = doc.addEventListener ? 'addEventListener' : 'attachEvent', + rem = doc.addEventListener ? 'removeEventListener' : 'detachEvent', + pre = doc.addEventListener ? '' : 'on'; + + var init = function(e) { + if (e.type == 'readystatechange' && doc.readyState != 'complete') { + return; + } + + (e.type == 'load' ? win : doc)[rem](pre + e.type, init, false); + if (!done && (done = true)) fn.call(win, e.type || e); + }; + + var poll = function() { + try { root.doScroll('left'); } catch(e) { setTimeout(poll, 50); return; } + init('poll'); + }; + + if (doc.readyState == 'complete') { + fn.call(win, 'lazy'); + } else { + if (doc.createEventObject && root.doScroll) { + try { top = !win.frameElement; } catch(e) { } + if (top) poll(); + } + doc[add](pre + 'DOMContentLoaded', init, false); + doc[add](pre + 'readystatechange', init, false); + win[add](pre + 'load', init, false); + } +} + + +/** + * Remove classes from a DOM element + * @param {Element} element - The DOM element. + * @param {string} cssClasses - Space separated list of class names. + */ +function jqLiteRemoveClass(element, cssClasses) { + if (!cssClasses || !element.setAttribute) return; + + var existingClasses = _getExistingClasses(element), + splitClasses = cssClasses.split(' '), + cssClass; + + for (var i=0; i < splitClasses.length; i++) { + cssClass = splitClasses[i].trim(); + while (existingClasses.indexOf(' ' + cssClass + ' ') >= 0) { + existingClasses = existingClasses.replace(' ' + cssClass + ' ', ' '); + } + } + + element.setAttribute('class', existingClasses.trim()); +} + + +// ------------------------------ +// Utilities +// ------------------------------ +var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g, + MOZ_HACK_REGEXP = /^moz([A-Z])/, + ESCAPE_REGEXP = /([.*+?^=!:${}()|\[\]\/\\])/g, + BOOLEAN_ATTRS; + + +BOOLEAN_ATTRS = { + multiple: true, + selected: true, + checked: true, + disabled: true, + readonly: true, + required: true, + open: true +} + + +function _getExistingClasses(element) { + var classes = (element.getAttribute('class') || '').replace(/[\n\t]/g, ''); + return ' ' + classes + ' '; +} + + +function _camelCase(name) { + return name. + replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) { + return offset ? letter.toUpperCase() : letter; + }). + replace(MOZ_HACK_REGEXP, 'Moz$1'); +} + + +function _escapeRegExp(string) { + return string.replace(ESCAPE_REGEXP, "\\$1"); +} + + +function _getCurrCssProp(elem, name, computed) { + var ret; + + // try computed style + ret = computed.getPropertyValue(name); + + // try style attribute (if element is not attached to document) + if (ret === '' && !elem.ownerDocument) ret = elem.style[_camelCase(name)]; + + return ret; +} + + +/** + * Module API + */ +module.exports = { + /** Add classes */ + addClass: jqLiteAddClass, + + /** Get or set CSS properties */ + css: jqLiteCss, + + /** Check for class */ + hasClass: jqLiteHasClass, + + /** Remove event handlers */ + off: jqLiteOff, + + /** Return offset values */ + offset: jqLiteOffset, + + /** Add event handlers */ + on: jqLiteOn, + + /** Add an execute-once event handler */ + one: jqLiteOne, + + /** DOM ready event handler */ + ready: jqLiteReady, + + /** Remove classes */ + removeClass: jqLiteRemoveClass, + + /** Check JavaScript variable instance type */ + type: jqLiteType, + + /** Get or set horizontal scroll position */ + scrollLeft: jqLiteScrollLeft, + + /** Get or set vertical scroll position */ + scrollTop: jqLiteScrollTop +}; + +},{}],5:[function(require,module,exports){ +/** + * MUI CSS/JS utilities module + * @module lib/util + */ + +'use strict'; + + +var config = require('../config'), + jqLite = require('./jqLite'), + nodeInsertedCallbacks = [], + scrollLock = 0, + scrollLockCls = 'mui-body--scroll-lock', + scrollLockPos, + _supportsPointerEvents; + + +/** + * Logging function + */ +function logFn() { + var win = window; + + if (config.debug && typeof win.console !== "undefined") { + try { + win.console.log.apply(win.console, arguments); + } catch (a) { + var e = Array.prototype.slice.call(arguments); + win.console.log(e.join("\n")); + } + } +} + + +/** + * Load CSS text in new stylesheet + * @param {string} cssText - The css text. + */ +function loadStyleFn(cssText) { + var doc = document, + head; + + // copied from jQuery + head = doc.head || + doc.getElementsByTagName('head')[0] || + doc.documentElement; + + var e = doc.createElement('style'); + e.type = 'text/css'; + + if (e.styleSheet) e.styleSheet.cssText = cssText; + else e.appendChild(doc.createTextNode(cssText)); + + // add to document + head.insertBefore(e, head.firstChild); + + return e; +} + + +/** + * Raise an error + * @param {string} msg - The error message. + */ +function raiseErrorFn(msg, useConsole) { + if (useConsole) { + if (typeof console !== 'undefined') console.error('MUI Warning: ' + msg); + } else { + throw new Error('MUI: ' + msg); + } +} + + +/** + * Register callbacks on muiNodeInserted event + * @param {function} callbackFn - The callback function. + */ +function onNodeInsertedFn(callbackFn) { + nodeInsertedCallbacks.push(callbackFn); + + // initalize listeners + if (nodeInsertedCallbacks._initialized === undefined) { + var doc = document; + + jqLite.on(doc, 'animationstart', animationHandlerFn); + jqLite.on(doc, 'mozAnimationStart', animationHandlerFn); + jqLite.on(doc, 'webkitAnimationStart', animationHandlerFn); + + nodeInsertedCallbacks._initialized = true; + } +} + + +/** + * Execute muiNodeInserted callbacks + * @param {Event} ev - The DOM event. + */ +function animationHandlerFn(ev) { + // check animation name + if (ev.animationName !== 'mui-node-inserted') return; + + var el = ev.target; + + // iterate through callbacks + for (var i=nodeInsertedCallbacks.length - 1; i >= 0; i--) { + nodeInsertedCallbacks[i](el); + } +} + + +/** + * Convert Classname object, with class as key and true/false as value, to an + * class string. + * @param {Object} classes The classes + * @return {String} class string + */ +function classNamesFn(classes) { + var cs = ''; + for (var i in classes) { + cs += (classes[i]) ? i + ' ' : ''; + } + return cs.trim(); +} + + +/** + * Check if client supports pointer events. + */ +function supportsPointerEventsFn() { + // check cache + if (_supportsPointerEvents !== undefined) return _supportsPointerEvents; + + var element = document.createElement('x'); + element.style.cssText = 'pointer-events:auto'; + _supportsPointerEvents = (element.style.pointerEvents === 'auto'); + return _supportsPointerEvents; +} + + +/** + * Create callback closure. + * @param {Object} instance - The object instance. + * @param {String} funcName - The name of the callback function. + */ +function callbackFn(instance, funcName) { + return function() {instance[funcName].apply(instance, arguments);}; +} + + +/** + * Dispatch event. + * @param {Element} element - The DOM element. + * @param {String} eventType - The event type. + * @param {Boolean} bubbles=true - If true, event bubbles. + * @param {Boolean} cancelable=true = If true, event is cancelable + * @param {Object} [data] - Data to add to event object + */ +function dispatchEventFn(element, eventType, bubbles, cancelable, data) { + var ev = document.createEvent('HTMLEvents'), + bubbles = (bubbles !== undefined) ? bubbles : true, + cancelable = (cancelable !== undefined) ? cancelable : true, + k; + + ev.initEvent(eventType, bubbles, cancelable); + + // add data to event object + if (data) for (k in data) ev[k] = data[k]; + + // dispatch + if (element) element.dispatchEvent(ev); + + return ev; +} + + +/** + * Turn on window scroll lock. + */ +function enableScrollLockFn() { + // increment counter + scrollLock += 1 + + // add lock + if (scrollLock === 1) { + var win = window, + doc = document; + + scrollLockPos = {left: jqLite.scrollLeft(win), top: jqLite.scrollTop(win)}; + jqLite.addClass(doc.body, scrollLockCls); + win.scrollTo(scrollLockPos.left, scrollLockPos.top); + } +} + + +/** + * Turn off window scroll lock. + */ +function disableScrollLockFn() { + // ignore + if (scrollLock === 0) return; + + // decrement counter + scrollLock -= 1 + + // remove lock + if (scrollLock === 0) { + var win = window, + doc = document; + + jqLite.removeClass(doc.body, scrollLockCls); + win.scrollTo(scrollLockPos.left, scrollLockPos.top); + } +} + + +/** + * Define the module API + */ +module.exports = { + /** Create callback closures */ + callback: callbackFn, + + /** Classnames object to string */ + classNames: classNamesFn, + + /** Disable scroll lock */ + disableScrollLock: disableScrollLockFn, + + /** Dispatch event */ + dispatchEvent: dispatchEventFn, + + /** Enable scroll lock */ + enableScrollLock: enableScrollLockFn, + + /** Log messages to the console when debug is turned on */ + log: logFn, + + /** Load CSS text as new stylesheet */ + loadStyle: loadStyleFn, + + /** Register muiNodeInserted handler */ + onNodeInserted: onNodeInsertedFn, + + /** Raise MUI error */ + raiseError: raiseErrorFn, + + /** Support Pointer Events check */ + supportsPointerEvents: supportsPointerEventsFn +}; + +},{"../config":2,"./jqLite":4}],6:[function(require,module,exports){ +/** + * MUI CSS/JS dropdown module + * @module dropdowns + */ + +'use strict'; + + +var jqLite = require('./lib/jqLite'), + util = require('./lib/util'), + attrKey = 'data-mui-toggle', + attrSelector = '[data-mui-toggle="dropdown"]', + openClass = 'mui--is-open', + menuClass = 'mui-dropdown__menu'; + + +/** + * Initialize toggle element. + * @param {Element} toggleEl - The toggle element. + */ +function initialize(toggleEl) { + // check flag + if (toggleEl._muiDropdown === true) return; + else toggleEl._muiDropdown = true; + + // use type "button" to prevent form submission by default + if (!toggleEl.hasAttribute('type')) toggleEl.type = 'button'; + + // attach click handler + jqLite.on(toggleEl, 'click', clickHandler); +} + + +/** + * Handle click events on dropdown toggle element. + * @param {Event} ev - The DOM event + */ +function clickHandler(ev) { + // only left clicks + if (ev.button !== 0) return; + + var toggleEl = this; + + // exit if toggle button is disabled + if (toggleEl.getAttribute('disabled') !== null) return; + + // toggle dropdown + toggleDropdown(toggleEl); +} + + +/** + * Toggle the dropdown. + * @param {Element} toggleEl - The dropdown toggle element. + */ +function toggleDropdown(toggleEl) { + var wrapperEl = toggleEl.parentNode, + menuEl = toggleEl.nextElementSibling, + doc = wrapperEl.ownerDocument; + + // exit if no menu element + if (!menuEl || !jqLite.hasClass(menuEl, menuClass)) { + return util.raiseError('Dropdown menu element not found'); + } + + // method to close dropdown + function closeDropdownFn() { + jqLite.removeClass(menuEl, openClass); + + // remove event handlers + jqLite.off(doc, 'click', closeDropdownFn); + } + + // method to open dropdown + function openDropdownFn() { + // position menu element below toggle button + var wrapperRect = wrapperEl.getBoundingClientRect(), + toggleRect = toggleEl.getBoundingClientRect(); + + var top = toggleRect.top - wrapperRect.top + toggleRect.height; + jqLite.css(menuEl, 'top', top + 'px'); + + // add open class to wrapper + jqLite.addClass(menuEl, openClass); + + // close dropdown when user clicks outside of menu + setTimeout(function() {jqLite.on(doc, 'click', closeDropdownFn);}, 0); + } + + // toggle dropdown + if (jqLite.hasClass(menuEl, openClass)) closeDropdownFn(); + else openDropdownFn(); +} + + +/** Define module API */ +module.exports = { + /** Initialize module listeners */ + initListeners: function() { + var doc = document; + + // markup elements available when method is called + var elList = doc.querySelectorAll(attrSelector); + for (var i=elList.length - 1; i >= 0; i--) initialize(elList[i]); + + // listen for new elements + util.onNodeInserted(function(el) { + if (el.getAttribute(attrKey) === 'dropdown') initialize(el); + }); + } +}; + +},{"./lib/jqLite":4,"./lib/util":5}],7:[function(require,module,exports){ +module.exports=require(4) +},{}],8:[function(require,module,exports){ +/** + * MUI CSS/JS overlay module + * @module overlay + */ + +'use strict'; + + +var util = require('./lib/util'), + jqLite = require('./lib/jqLite'), + overlayId = 'mui-overlay', + bodyClass = 'mui--overflow-hidden', + iosRegex = /(iPad|iPhone|iPod)/g; + + +/** + * Turn overlay on/off. + * @param {string} action - Turn overlay "on"/"off". + * @param {object} [options] + * @config {boolean} [keyboard] - If true, close when escape key is pressed. + * @config {boolean} [static] - If false, close when backdrop is clicked. + * @config {Function} [onclose] - Callback function to execute on close + * @param {Element} [childElement] - Child element to add to overlay. + */ +function overlayFn(action) { + var overlayEl; + + if (action === 'on') { + // extract arguments + var arg, options, childElement; + + // pull options and childElement from arguments + for (var i=arguments.length - 1; i > 0; i--) { + arg = arguments[i]; + + if (jqLite.type(arg) === 'object') options = arg; + if (arg instanceof Element && arg.nodeType === 1) childElement = arg; + } + + // option defaults + options = options || {}; + if (options.keyboard === undefined) options.keyboard = true; + if (options.static === undefined) options.static = false; + + // execute method + overlayEl = overlayOn(options, childElement); + + } else if (action === 'off') { + overlayEl = overlayOff(); + + } else { + // raise error + util.raiseError("Expecting 'on' or 'off'"); + } + + return overlayEl; +} + + +/** + * Turn on overlay. + * @param {object} options - Overlay options. + * @param {Element} childElement - The child element. + */ +function overlayOn(options, childElement) { + var bodyEl = document.body, + overlayEl = document.getElementById(overlayId); + + // add overlay + util.enableScrollLock(); + //jqLite.addClass(bodyEl, bodyClass); + + if (!overlayEl) { + // create overlayEl + overlayEl = document.createElement('div'); + overlayEl.setAttribute('id', overlayId); + + // add child element + if (childElement) overlayEl.appendChild(childElement); + + bodyEl.appendChild(overlayEl); + + } else { + // remove existing children + while (overlayEl.firstChild) overlayEl.removeChild(overlayEl.firstChild); + + // add child element + if (childElement) overlayEl.appendChild(childElement); + } + + // iOS bugfix + if (iosRegex.test(navigator.userAgent)) { + jqLite.css(overlayEl, 'cursor', 'pointer'); + } + + // handle options + if (options.keyboard) addKeyupHandler(); + else removeKeyupHandler(); + + if (options.static) removeClickHandler(overlayEl); + else addClickHandler(overlayEl); + + // attach options + overlayEl.muiOptions = options; + + return overlayEl; +} + + +/** + * Turn off overlay. + */ +function overlayOff() { + var overlayEl = document.getElementById(overlayId), + callbackFn; + + if (overlayEl) { + // remove children + while (overlayEl.firstChild) overlayEl.removeChild(overlayEl.firstChild); + + // remove overlay element + overlayEl.parentNode.removeChild(overlayEl); + + // callback reference + callbackFn = overlayEl.muiOptions.onclose; + + // remove click handler + removeClickHandler(overlayEl); + } + + util.disableScrollLock(); + + // remove keyup handler + removeKeyupHandler(); + + // execute callback + if (callbackFn) callbackFn(); + + return overlayEl; +} + + +/** + * Add keyup handler. + */ +function addKeyupHandler() { + jqLite.on(document, 'keyup', onKeyup); +} + + +/** + * Remove keyup handler. + */ +function removeKeyupHandler() { + jqLite.off(document, 'keyup', onKeyup); +} + + +/** + * Teardown overlay when escape key is pressed. + */ +function onKeyup(ev) { + if (ev.keyCode === 27) overlayOff(); +} + + +/** + * Add click handler. + */ +function addClickHandler(overlayEl) { + jqLite.on(overlayEl, 'click', onClick); +} + + +/** + * Remove click handler. + */ +function removeClickHandler(overlayEl) { + jqLite.off(overlayEl, 'click', onClick); +} + + +/** + * Teardown overlay when backdrop is clicked. + */ +function onClick(ev) { + if (ev.target.id === overlayId) overlayOff(); +} + + +/** Define module API */ +module.exports = overlayFn; + +},{"./lib/jqLite":4,"./lib/util":5}],9:[function(require,module,exports){ +/** + * MUI CSS/JS ripple module + * @module ripple + */ + +'use strict'; + + +var jqLite = require('./lib/jqLite'), + util = require('./lib/util'), + btnClass = 'mui-btn', + btnFABClass = 'mui-btn--fab', + rippleClass = 'mui-ripple-effect', + animationName = 'mui-btn-inserted'; + + +/** + * Add ripple effects to button element. + * @param {Element} buttonEl - The button element. + */ +function initialize(buttonEl) { + // check flag + if (buttonEl._muiRipple === true) return; + else buttonEl._muiRipple = true; + + // exit if element is INPUT (doesn't support absolute positioned children) + if (buttonEl.tagName === 'INPUT') return; + + // attach event handler + jqLite.on(buttonEl, 'touchstart', eventHandler); + jqLite.on(buttonEl, 'mousedown', eventHandler); +} + + +/** + * Event handler + * @param {Event} ev - The DOM event + */ +function eventHandler(ev) { + // only left clicks + if (ev.button !== 0) return; + + var buttonEl = this; + + // exit if button is disabled + if (buttonEl.disabled === true) return; + + // de-dupe touchstart and mousedown with 100msec flag + if (buttonEl.touchFlag === true) { + return; + } else { + buttonEl.touchFlag = true; + setTimeout(function() { + buttonEl.touchFlag = false; + }, 100); + } + + var rippleEl = document.createElement('div'); + rippleEl.className = rippleClass; + + var offset = jqLite.offset(buttonEl), + xPos = ev.pageX - offset.left, + yPos = ev.pageY - offset.top, + diameter, + radius; + + // get height + if (jqLite.hasClass(buttonEl, btnFABClass)) diameter = offset.height / 2; + else diameter = offset.height; + + radius = diameter / 2; + + jqLite.css(rippleEl, { + height: diameter + 'px', + width: diameter + 'px', + top: yPos - radius + 'px', + left: xPos - radius + 'px' + }); + + buttonEl.appendChild(rippleEl); + + window.setTimeout(function() { + var parentNode = rippleEl.parentNode; + if (parentNode) parentNode.removeChild(rippleEl); + }, 2000); +} + + +/** Define module API */ +module.exports = { + /** Initialize module listeners */ + initListeners: function() { + var doc = document; + + // markup elements available when method is called + var elList = doc.getElementsByClassName(btnClass); + for (var i=elList.length - 1; i >= 0; i--) initialize(elList[i]); + + // listen for new elements + util.onNodeInserted(function(el) { + if (jqLite.hasClass(el, btnClass)) initialize(el); + }); + } +}; + +},{"./lib/jqLite":4,"./lib/util":5}],10:[function(require,module,exports){ +/** + * MUI CSS/JS select module + * @module forms/select + */ + +'use strict'; + + +var jqLite = require('./lib/jqLite'), + util = require('./lib/util'), + formlib = require('./lib/forms'), + wrapperClass = 'mui-select', + cssSelector = '.mui-select > select', + menuClass = 'mui-select__menu', + selectedClass = 'mui--is-selected', + doc = document, + win = window; + + +/** + * Initialize select element. + * @param {Element} selectEl - The select element. + */ +function initialize(selectEl) { + // check flag + if (selectEl._muiSelect === true) return; + else selectEl._muiSelect = true; + + // use default behavior on touch devices + if ('ontouchstart' in doc.documentElement) return; + + // initialize element + new Select(selectEl); +} + + +/** + * Creates a new Select object + * @class + */ +function Select(selectEl) { + // instance variables + this.selectEl = selectEl; + this.wrapperEl = selectEl.parentNode; + this.useDefault = false; // currently unused but let's keep just in case + + // attach event handlers + jqLite.on(selectEl, 'mousedown', util.callback(this, 'mousedownHandler')); + jqLite.on(selectEl, 'focus', util.callback(this, 'focusHandler')); + jqLite.on(selectEl, 'click', util.callback(this, 'clickHandler')); + + // make wrapper focusable and fix firefox bug + this.wrapperEl.tabIndex = -1; + var callbackFn = util.callback(this, 'wrapperFocusHandler'); + jqLite.on(this.wrapperEl, 'focus', callbackFn); +} + + +/** + * Disable default dropdown on mousedown. + * @param {Event} ev - The DOM event + */ +Select.prototype.mousedownHandler = function(ev) { + if (ev.button !== 0 || this.useDefault === true) return; + ev.preventDefault(); +} + + +/** + * Handle focus event on select element. + * @param {Event} ev - The DOM event + */ +Select.prototype.focusHandler = function(ev) { + // check flag + if (this.useDefault === true) return; + + var selectEl = this.selectEl, + wrapperEl = this.wrapperEl, + origIndex = selectEl.tabIndex, + keydownFn = util.callback(this, 'keydownHandler'); + + // attach keydown handler + jqLite.on(doc, 'keydown', keydownFn); + + // disable tabfocus once + selectEl.tabIndex = -1; + jqLite.one(wrapperEl, 'blur', function() { + selectEl.tabIndex = origIndex; + jqLite.off(doc, 'keydown', keydownFn); + }); + + // defer focus to parent + wrapperEl.focus(); +} + + +/** + * Handle keydown events on doc + **/ +Select.prototype.keydownHandler = function(ev) { + var keyCode = ev.keyCode; + + // spacebar, down, up + if (keyCode === 32 || keyCode === 38 || keyCode === 40) { + // prevent win scroll + ev.preventDefault(); + + if (this.selectEl.disabled !== true) this.renderMenu(); + } +} + + +/** + * Handle focus event on wrapper element. + */ +Select.prototype.wrapperFocusHandler = function() { + // firefox bugfix + if (this.selectEl.disabled) return this.wrapperEl.blur(); +} + + +/** + * Handle click events on select element. + * @param {Event} ev - The DOM event + */ +Select.prototype.clickHandler = function(ev) { + // only left clicks + if (ev.button !== 0) return; + this.renderMenu(); +} + + +/** + * Render options dropdown. + */ +Select.prototype.renderMenu = function() { + // check and reset flag + if (this.useDefault === true) return this.useDefault = false; + + new Menu(this.wrapperEl, this.selectEl); +} + + +/** + * Creates a new Menu + * @class + */ +function Menu(wrapperEl, selectEl) { + // add scroll lock + util.enableScrollLock(); + + // instance variables + this.origIndex = null; + this.currentIndex = null; + this.selectEl = selectEl; + this.menuEl = this._createMenuEl(wrapperEl, selectEl); + this.clickCallbackFn = util.callback(this, 'clickHandler'); + this.keydownCallbackFn = util.callback(this, 'keydownHandler'); + this.destroyCallbackFn = util.callback(this, 'destroy'); + + // add to DOM + wrapperEl.appendChild(this.menuEl); + jqLite.scrollTop(this.menuEl, this.menuEl._muiScrollTop); + + // blur active element + setTimeout(function() { + // ie10 bugfix + if (doc.activeElement.nodeName.toLowerCase() !== "body") { + doc.activeElement.blur(); + } + }, 0); + + // attach event handlers + jqLite.on(this.menuEl, 'click', this.clickCallbackFn); + jqLite.on(doc, 'keydown', this.keydownCallbackFn); + jqLite.on(win, 'resize', this.destroyCallbackFn); + + // attach event handler after current event loop exits + var fn = this.destroyCallbackFn; + setTimeout(function() {jqLite.on(doc, 'click', fn);}, 0); +} + + +/** + * Create menu element + * @param {Element} selectEl - The select element + */ +Menu.prototype._createMenuEl = function(wrapperEl, selectEl) { + var menuEl = doc.createElement('div'), + optionEls = selectEl.children, + numOptions = optionEls.length, + selectedPos = 0, + optionEl, + itemEl, + i; + + menuEl.className = menuClass; + + // add options + for (i=0; i < numOptions; i++) { + optionEl = optionEls[i]; + + itemEl = doc.createElement('div'); + itemEl.textContent = optionEl.textContent; + itemEl._muiPos = i; + + if (optionEl.selected) { + itemEl.setAttribute('class', selectedClass); + selectedPos = i; + } + + menuEl.appendChild(itemEl); + } + + // save indices + this.origIndex = selectedPos; + this.currentIndex = selectedPos; + + // set position + var props = formlib.getMenuPositionalCSS( + wrapperEl, + numOptions, + selectedPos + ); + + jqLite.css(menuEl, props); + menuEl._muiScrollTop = props.scrollTop; + + return menuEl; +} + + +/** + * Handle keydown events on doc element. + * @param {Event} ev - The DOM event + */ +Menu.prototype.keydownHandler = function(ev) { + var keyCode = ev.keyCode; + + // tab + if (keyCode === 9) return this.destroy(); + + // escape | up | down | enter + if (keyCode === 27 || keyCode === 40 || keyCode === 38 || keyCode === 13) { + ev.preventDefault(); + } + + if (keyCode === 27) { + this.destroy(); + } else if (keyCode === 40) { + this.increment(); + } else if (keyCode === 38) { + this.decrement(); + } else if (keyCode === 13) { + this.selectCurrent(); + this.destroy(); + } +} + + +/** + * Handle click events on menu element. + * @param {Event} ev - The DOM event + */ +Menu.prototype.clickHandler = function(ev) { + // don't allow events to bubble + ev.stopPropagation(); + + var pos = ev.target._muiPos; + + // ignore clicks on non-items + if (pos === undefined) return; + + // select option + this.currentIndex = pos; + this.selectCurrent(); + + // destroy menu + this.destroy(); +} + + +/** + * Increment selected item + */ +Menu.prototype.increment = function() { + if (this.currentIndex === this.menuEl.children.length - 1) return; + + var optionEls = this.menuEl.children; + + jqLite.removeClass(optionEls[this.currentIndex], selectedClass); + this.currentIndex += 1; + jqLite.addClass(optionEls[this.currentIndex], selectedClass); +} + + +/** + * Decrement selected item + */ +Menu.prototype.decrement = function() { + if (this.currentIndex === 0) return; + + var optionEls = this.menuEl.children; + + jqLite.removeClass(optionEls[this.currentIndex], selectedClass); + this.currentIndex -= 1; + jqLite.addClass(optionEls[this.currentIndex], selectedClass); +} + + +/** + * Select current item + */ +Menu.prototype.selectCurrent = function() { + if (this.currentIndex !== this.origIndex) { + var optionEls = this.selectEl.children; + optionEls[this.origIndex].selected = false; + optionEls[this.currentIndex].selected = true; + + // trigger change event + util.dispatchEvent(this.selectEl, 'change'); + } +} + + +/** + * Destroy menu and detach event handlers + */ +Menu.prototype.destroy = function() { + // remove element and focus element + var parentNode = this.menuEl.parentNode; + if (parentNode) parentNode.removeChild(this.menuEl); + + this.selectEl.focus(); + + // remove scroll lock + util.disableScrollLock(); + + // remove event handlers + jqLite.off(this.menuEl, 'click', this.clickCallbackFn); + jqLite.off(doc, 'keydown', this.keydownCallbackFn); + jqLite.off(doc, 'click', this.destroyCallbackFn); + jqLite.off(win, 'resize', this.destroyCallbackFn); +} + + +/** Define module API */ +module.exports = { + /** Initialize module listeners */ + initListeners: function() { + // markup elements available when method is called + var elList = doc.querySelectorAll(cssSelector); + for (var i=elList.length - 1; i >= 0; i--) initialize(elList[i]); + + // listen for new elements + util.onNodeInserted(function(el) { + if (el.tagName === 'SELECT' && + jqLite.hasClass(el.parentNode, wrapperClass)) { + initialize(el); + } + }); + } +}; + +},{"./lib/forms":3,"./lib/jqLite":4,"./lib/util":5}],11:[function(require,module,exports){ +/** + * MUI CSS/JS tabs module + * @module tabs + */ + +'use strict'; + + +var jqLite = require('./lib/jqLite'), + util = require('./lib/util'), + attrKey = 'data-mui-toggle', + attrSelector = '[' + attrKey + '="tab"]', + controlsAttrKey = 'data-mui-controls', + activeClass = 'mui--is-active', + showstartKey = 'mui.tabs.showstart', + showendKey = 'mui.tabs.showend', + hidestartKey = 'mui.tabs.hidestart', + hideendKey = 'mui.tabs.hideend'; + + +/** + * Initialize the toggle element + * @param {Element} toggleEl - The toggle element. + */ +function initialize(toggleEl) { + // check flag + if (toggleEl._muiTabs === true) return; + else toggleEl._muiTabs = true; + + // attach click handler + jqLite.on(toggleEl, 'click', clickHandler); +} + + +/** + * Handle clicks on the toggle element. + * @param {Event} ev - The DOM event. + */ +function clickHandler(ev) { + // only left clicks + if (ev.button !== 0) return; + + var toggleEl = this; + + // exit if toggle element is disabled + if (toggleEl.getAttribute('disabled') !== null) return; + + activateTab(toggleEl); +} + + +/** + * Activate the tab controlled by the toggle element. + * @param {Element} toggleEl - The toggle element. + */ +function activateTab(currToggleEl) { + var currTabEl = currToggleEl.parentNode, + currPaneId = currToggleEl.getAttribute(controlsAttrKey), + currPaneEl = document.getElementById(currPaneId), + prevTabEl, + prevPaneEl, + prevPaneId, + prevToggleEl, + currData, + prevData, + ev1, + ev2, + cssSelector; + + // exit if already active + if (jqLite.hasClass(currTabEl, activeClass)) return; + + // raise error if pane doesn't exist + if (!currPaneEl) util.raiseError('Tab pane "' + currPaneId + '" not found'); + + // get previous pane + prevPaneEl = getActiveSibling(currPaneEl); + prevPaneId = prevPaneEl.id; + + // get previous toggle and tab elements + cssSelector = '[' + controlsAttrKey + '="' + prevPaneId + '"]'; + prevToggleEl = document.querySelectorAll(cssSelector)[0]; + prevTabEl = prevToggleEl.parentNode; + + // define event data + currData = {paneId: currPaneId, relatedPaneId: prevPaneId}; + prevData = {paneId: prevPaneId, relatedPaneId: currPaneId}; + + // dispatch 'hidestart', 'showstart' events + ev1 = util.dispatchEvent(prevToggleEl, hidestartKey, true, true, prevData); + ev2 = util.dispatchEvent(currToggleEl, showstartKey, true, true, currData); + + // let events bubble + setTimeout(function() { + // exit if either event was canceled + if (ev1.defaultPrevented || ev2.defaultPrevented) return; + + // de-activate previous + if (prevTabEl) jqLite.removeClass(prevTabEl, activeClass); + if (prevPaneEl) jqLite.removeClass(prevPaneEl, activeClass); + + // activate current + jqLite.addClass(currTabEl, activeClass); + jqLite.addClass(currPaneEl, activeClass); + + // dispatch 'hideend', 'showend' events + util.dispatchEvent(prevToggleEl, hideendKey, true, false, prevData); + util.dispatchEvent(currToggleEl, showendKey, true, false, currData); + }, 0); +} + + +/** + * Get previous active sibling. + * @param {Element} el - The anchor element. + */ +function getActiveSibling(el) { + var elList = el.parentNode.children, + q = elList.length, + activeEl = null, + tmpEl; + + while (q-- && !activeEl) { + tmpEl = elList[q]; + if (tmpEl !== el && jqLite.hasClass(tmpEl, activeClass)) activeEl = tmpEl + } + + return activeEl; +} + + +/** Define module API */ +module.exports = { + /** Initialize module listeners */ + initListeners: function() { + // markup elements available when method is called + var elList = document.querySelectorAll(attrSelector); + for (var i=elList.length - 1; i >= 0; i--) initialize(elList[i]); + + // TODO: listen for new elements + util.onNodeInserted(function(el) { + if (el.getAttribute(attrKey) === 'tab') initialize(el); + }); + }, + + /** External API */ + api: { + activate: function(paneId) { + var cssSelector = '[' + controlsAttrKey + '=' + paneId + ']', + toggleEl = document.querySelectorAll(cssSelector); + + if (!toggleEl.length) { + util.raiseError('Tab control for pane "' + paneId + '" not found'); + } + + activateTab(toggleEl[0]); + } + } +}; + +},{"./lib/jqLite":4,"./lib/util":5}],12:[function(require,module,exports){ +/** + * MUI CSS/JS form-control module + * @module forms/form-control + */ + +'use strict'; + + +var jqLite = require('./lib/jqLite'), + util = require('./lib/util'), + cssSelector = '.mui-textfield > input, .mui-textfield > textarea', + emptyClass = 'mui--is-empty', + notEmptyClass = 'mui--is-not-empty', + dirtyClass = 'mui--is-dirty', + floatingLabelClass = 'mui-textfield--float-label'; + + +/** + * Initialize input element. + * @param {Element} inputEl - The input element. + */ +function initialize(inputEl) { + // check flag + if (inputEl._muiTextfield === true) return; + else inputEl._muiTextfield = true; + + if (inputEl.value.length) jqLite.addClass(inputEl, notEmptyClass); + else jqLite.addClass(inputEl, emptyClass); + + jqLite.on(inputEl, 'input', inputHandler); + jqLite.on(inputEl, 'change', inputHandler); + + // add dirty class on focus + jqLite.on(inputEl, 'focus', function(){jqLite.addClass(this, dirtyClass);}); +} + + +/** + * Handle input events. + */ +function inputHandler() { + var inputEl = this; + + if (inputEl.value.length) { + jqLite.removeClass(inputEl, emptyClass); + jqLite.addClass(inputEl, notEmptyClass); + } else { + jqLite.removeClass(inputEl, notEmptyClass); + jqLite.addClass(inputEl, emptyClass) + } + + jqLite.addClass(inputEl, dirtyClass); +} + + +/** Define module API */ +module.exports = { + /** Initialize input elements */ + initialize: initialize, + + /** Initialize module listeners */ + initListeners: function() { + var doc = document; + + // markup elements available when method is called + var elList = doc.querySelectorAll(cssSelector); + for (var i=elList.length - 1; i >= 0; i--) initialize(elList[i]); + + // listen for new elements + util.onNodeInserted(function(el) { + if (el.tagName === 'INPUT' || el.tagName === 'TEXTAREA') initialize(el); + }); + + // add transition css for floating labels + setTimeout(function() { + var css = '.mui-textfield.mui-textfield--float-label > label {' + [ + '-webkit-transition', + '-moz-transition', + '-o-transition', + 'transition', + '' + ].join(':all .15s ease-out;') + '}'; + + util.loadStyle(css); + }, 150); + + // pointer-events shim for floating labels + if (util.supportsPointerEvents() === false) { + jqLite.on(document, 'click', function(ev) { + var targetEl = ev.target; + + if (targetEl.tagName === 'LABEL' && + jqLite.hasClass(targetEl.parentNode, floatingLabelClass)) { + var inputEl = targetEl.previousElementSibling; + if (inputEl) inputEl.focus(); + } + }); + } + } +}; + +},{"./lib/jqLite":4,"./lib/util":5}]},{},[1]) \ No newline at end of file diff --git a/platforms/ios/www/libs/mui/packages/cdn/js/mui.min.js b/platforms/ios/www/libs/mui/packages/cdn/js/mui.min.js new file mode 100644 index 0000000..833d99c --- /dev/null +++ b/platforms/ios/www/libs/mui/packages/cdn/js/mui.min.js @@ -0,0 +1 @@ +!function e(t,n,i){function o(l,s){if(!n[l]){if(!t[l]){var a="function"==typeof require&&require;if(!s&&a)return a(l,!0);if(r)return r(l,!0);throw new Error("Cannot find module '"+l+"'")}var c=n[l]={exports:{}};t[l][0].call(c.exports,function(e){var n=t[l][1][e];return o(n?n:e)},c,c.exports,e,t,n,i)}return n[l].exports}for(var r="function"==typeof require&&require,l=0;ld&&(h=s+(n+1)*l-(-1*i+o+r),m=t*l+2*s-p,v=Math.min(h,m)),{height:p+"px",top:i+"px",scrollTop:v}}var o=15,r=32,l=42,s=8;t.exports={getMenuPositionalCSS:i}},{}],4:[function(e,t,n){"use strict";function i(e,t){if(t&&e.setAttribute){for(var n,i=m(e),o=t.split(" "),r=0;r-1:!1}function l(e){if(void 0===e)return"undefined";var t=Object.prototype.toString.call(e);if(0===t.indexOf("[object "))return t.slice(8,-1).toLowerCase();throw new Error("MUI: Could not understand type: "+t)}function s(e,t,n,i){i=void 0===i?!1:i,e.addEventListener(t,n,i);var o=e._muiEventCache=e._muiEventCache||{};o[t]=o[t]||[],o[t].push([n,i])}function a(e,t,n,i){i=void 0===i?!1:i;var o,r,l=e._muiEventCache=e._muiEventCache||{},s=l[t]||[];for(r=s.length;r--;)o=s[r],(void 0===n||o[0]===n&&o[1]===i)&&(s.splice(r,1),e.removeEventListener(t,o[0],o[1]))}function c(e,t,n,i){s(e,t,function o(i){n&&n.apply(this,arguments),a(e,t,o)},i)}function u(e,t){var n=window;if(void 0===t){if(e===n){var i=document.documentElement;return(n.pageXOffset||i.scrollLeft)-(i.clientLeft||0)}return e.scrollLeft}e===n?n.scrollTo(t,d(n)):e.scrollLeft=t}function d(e,t){var n=window;if(void 0===t){if(e===n){var i=document.documentElement;return(n.pageYOffset||i.scrollTop)-(i.clientTop||0)}return e.scrollTop}e===n?n.scrollTo(u(n),t):e.scrollTop=t}function f(e){var t=window,n=e.getBoundingClientRect(),i=d(t),o=u(t);return{top:n.top+i,left:n.left+o,height:n.height,width:n.width}}function p(e){var t=!1,n=!0,i=document,o=i.defaultView,r=i.documentElement,l=i.addEventListener?"addEventListener":"attachEvent",s=i.addEventListener?"removeEventListener":"detachEvent",a=i.addEventListener?"":"on",c=function(n){"readystatechange"==n.type&&"complete"!=i.readyState||(("load"==n.type?o:i)[s](a+n.type,c,!1),!t&&(t=!0)&&e.call(o,n.type||n))},u=function(){try{r.doScroll("left")}catch(e){return void setTimeout(u,50)}c("poll")};if("complete"==i.readyState)e.call(o,"lazy");else{if(i.createEventObject&&r.doScroll){try{n=!o.frameElement}catch(d){}n&&u()}i[l](a+"DOMContentLoaded",c,!1),i[l](a+"readystatechange",c,!1),o[l](a+"load",c,!1)}}function h(e,t){if(t&&e.setAttribute){for(var n,i=m(e),o=t.split(" "),r=0;r=0;)i=i.replace(" "+n+" "," ");e.setAttribute("class",i.trim())}}function m(e){var t=(e.getAttribute("class")||"").replace(/[\n\t]/g,"");return" "+t+" "}function v(e){return e.replace(g,function(e,t,n,i){return i?n.toUpperCase():n}).replace(E,"Moz$1")}function b(e,t,n){var i;return i=n.getPropertyValue(t),""!==i||e.ownerDocument||(i=e.style[v(t)]),i}var y,g=/([\:\-\_]+(.))/g,E=/^moz([A-Z])/;y={multiple:!0,selected:!0,checked:!0,disabled:!0,readonly:!0,required:!0,open:!0},t.exports={addClass:i,css:o,hasClass:r,off:a,offset:f,on:s,one:c,ready:p,removeClass:h,type:l,scrollLeft:u,scrollTop:d}},{}],5:[function(e,t,n){"use strict";function i(){var e=window;if(v.debug&&"undefined"!=typeof e.console)try{e.console.log.apply(e.console,arguments)}catch(t){var n=Array.prototype.slice.call(arguments);e.console.log(n.join("\n"))}}function o(e){var t,n=document;t=n.head||n.getElementsByTagName("head")[0]||n.documentElement;var i=n.createElement("style");return i.type="text/css",i.styleSheet?i.styleSheet.cssText=e:i.appendChild(n.createTextNode(e)),t.insertBefore(i,t.firstChild),i}function r(e,t){if(!t)throw new Error("MUI: "+e);"undefined"!=typeof console&&console.error("MUI Warning: "+e)}function l(e){if(y.push(e),void 0===y._initialized){var t=document;b.on(t,"animationstart",s),b.on(t,"mozAnimationStart",s),b.on(t,"webkitAnimationStart",s),y._initialized=!0}}function s(e){if("mui-node-inserted"===e.animationName)for(var t=e.target,n=y.length-1;n>=0;n--)y[n](t)}function a(e){var t="";for(var n in e)t+=e[n]?n+" ":"";return t.trim()}function c(){if(void 0!==m)return m;var e=document.createElement("x");return e.style.cssText="pointer-events:auto",m="auto"===e.style.pointerEvents}function u(e,t){return function(){e[t].apply(e,arguments)}}function d(e,t,n,i,o){var r,l=document.createEvent("HTMLEvents"),n=void 0!==n?n:!0,i=void 0!==i?i:!0;if(l.initEvent(t,n,i),o)for(r in o)l[r]=o[r];return e&&e.dispatchEvent(l),l}function f(){if(g+=1,1===g){var e=window,t=document;h={left:b.scrollLeft(e),top:b.scrollTop(e)},b.addClass(t.body,E),e.scrollTo(h.left,h.top)}}function p(){if(0!==g&&(g-=1,0===g)){var e=window,t=document;b.removeClass(t.body,E),e.scrollTo(h.left,h.top)}}var h,m,v=e("../config"),b=e("./jqLite"),y=[],g=0,E="mui-body--scroll-lock";t.exports={callback:u,classNames:a,disableScrollLock:p,dispatchEvent:d,enableScrollLock:f,log:i,loadStyle:o,onNodeInserted:l,raiseError:r,supportsPointerEvents:c}},{"../config":2,"./jqLite":4}],6:[function(e,t,n){"use strict";function i(e){e._muiDropdown!==!0&&(e._muiDropdown=!0,e.hasAttribute("type")||(e.type="button"),l.on(e,"click",o))}function o(e){if(0===e.button){var t=this;null===t.getAttribute("disabled")&&r(t)}}function r(e){function t(){l.removeClass(o,u),l.off(r,"click",t)}function n(){var n=i.getBoundingClientRect(),s=e.getBoundingClientRect(),a=s.top-n.top+s.height;l.css(o,"top",a+"px"),l.addClass(o,u),setTimeout(function(){l.on(r,"click",t)},0)}var i=e.parentNode,o=e.nextElementSibling,r=i.ownerDocument;return o&&l.hasClass(o,d)?void(l.hasClass(o,u)?t():n()):s.raiseError("Dropdown menu element not found")}var l=e("./lib/jqLite"),s=e("./lib/util"),a="data-mui-toggle",c='[data-mui-toggle="dropdown"]',u="mui--is-open",d="mui-dropdown__menu";t.exports={initListeners:function(){for(var e=document,t=e.querySelectorAll(c),n=t.length-1;n>=0;n--)i(t[n]);s.onNodeInserted(function(e){"dropdown"===e.getAttribute(a)&&i(e)})}}},{"./lib/jqLite":4,"./lib/util":5}],7:[function(e,t,n){t.exports=e(4)},{}],8:[function(e,t,n){"use strict";function i(e){var t;if("on"===e){for(var n,i,l,s=arguments.length-1;s>0;s--)n=arguments[s],"object"===p.type(n)&&(i=n),n instanceof Element&&1===n.nodeType&&(l=n);i=i||{},void 0===i.keyboard&&(i.keyboard=!0),void 0===i["static"]&&(i["static"]=!1),t=o(i,l)}else"off"===e?t=r():f.raiseError("Expecting 'on' or 'off'");return t}function o(e,t){var n=document.body,i=document.getElementById(h);if(f.enableScrollLock(),i){for(;i.firstChild;)i.removeChild(i.firstChild);t&&i.appendChild(t)}else i=document.createElement("div"),i.setAttribute("id",h),t&&i.appendChild(t),n.appendChild(i);return m.test(navigator.userAgent)&&p.css(i,"cursor","pointer"),e.keyboard?l():s(),e["static"]?u(i):c(i),i.muiOptions=e,i}function r(){var e,t=document.getElementById(h);if(t){for(;t.firstChild;)t.removeChild(t.firstChild);t.parentNode.removeChild(t),e=t.muiOptions.onclose,u(t)}return f.disableScrollLock(),s(),e&&e(),t}function l(){p.on(document,"keyup",a)}function s(){p.off(document,"keyup",a)}function a(e){27===e.keyCode&&r()}function c(e){p.on(e,"click",d)}function u(e){p.off(e,"click",d)}function d(e){e.target.id===h&&r()}var f=e("./lib/util"),p=e("./lib/jqLite"),h="mui-overlay",m=/(iPad|iPhone|iPod)/g;t.exports=i},{"./lib/jqLite":4,"./lib/util":5}],9:[function(e,t,n){"use strict";function i(e){e._muiRipple!==!0&&(e._muiRipple=!0,"INPUT"!==e.tagName&&(r.on(e,"touchstart",o),r.on(e,"mousedown",o)))}function o(e){if(0===e.button){var t=this;if(t.disabled!==!0&&t.touchFlag!==!0){t.touchFlag=!0,setTimeout(function(){t.touchFlag=!1},100);var n=document.createElement("div");n.className=c;var i,o,l=r.offset(t),s=e.pageX-l.left,u=e.pageY-l.top;i=r.hasClass(t,a)?l.height/2:l.height,o=i/2,r.css(n,{height:i+"px",width:i+"px",top:u-o+"px",left:s-o+"px"}),t.appendChild(n),window.setTimeout(function(){var e=n.parentNode;e&&e.removeChild(n)},2e3)}}}var r=e("./lib/jqLite"),l=e("./lib/util"),s="mui-btn",a="mui-btn--fab",c="mui-ripple-effect";t.exports={initListeners:function(){for(var e=document,t=e.getElementsByClassName(s),n=t.length-1;n>=0;n--)i(t[n]);l.onNodeInserted(function(e){r.hasClass(e,s)&&i(e)})}}},{"./lib/jqLite":4,"./lib/util":5}],10:[function(e,t,n){"use strict";function i(e){e._muiSelect!==!0&&(e._muiSelect=!0,"ontouchstart"in p.documentElement||new o(e))}function o(e){this.selectEl=e,this.wrapperEl=e.parentNode,this.useDefault=!1,l.on(e,"mousedown",s.callback(this,"mousedownHandler")),l.on(e,"focus",s.callback(this,"focusHandler")),l.on(e,"click",s.callback(this,"clickHandler")),this.wrapperEl.tabIndex=-1;var t=s.callback(this,"wrapperFocusHandler");l.on(this.wrapperEl,"focus",t)}function r(e,t){s.enableScrollLock(),this.origIndex=null,this.currentIndex=null,this.selectEl=t,this.menuEl=this._createMenuEl(e,t),this.clickCallbackFn=s.callback(this,"clickHandler"),this.keydownCallbackFn=s.callback(this,"keydownHandler"),this.destroyCallbackFn=s.callback(this,"destroy"),e.appendChild(this.menuEl),l.scrollTop(this.menuEl,this.menuEl._muiScrollTop),setTimeout(function(){"body"!==p.activeElement.nodeName.toLowerCase()&&p.activeElement.blur()},0),l.on(this.menuEl,"click",this.clickCallbackFn),l.on(p,"keydown",this.keydownCallbackFn),l.on(h,"resize",this.destroyCallbackFn);var n=this.destroyCallbackFn;setTimeout(function(){l.on(p,"click",n)},0)}var l=e("./lib/jqLite"),s=e("./lib/util"),a=e("./lib/forms"),c="mui-select",u=".mui-select > select",d="mui-select__menu",f="mui--is-selected",p=document,h=window;o.prototype.mousedownHandler=function(e){0===e.button&&this.useDefault!==!0&&e.preventDefault()},o.prototype.focusHandler=function(e){if(this.useDefault!==!0){var t=this.selectEl,n=this.wrapperEl,i=t.tabIndex,o=s.callback(this,"keydownHandler");l.on(p,"keydown",o),t.tabIndex=-1,l.one(n,"blur",function(){t.tabIndex=i,l.off(p,"keydown",o)}),n.focus()}},o.prototype.keydownHandler=function(e){var t=e.keyCode;32!==t&&38!==t&&40!==t||(e.preventDefault(),this.selectEl.disabled!==!0&&this.renderMenu())},o.prototype.wrapperFocusHandler=function(){return this.selectEl.disabled?this.wrapperEl.blur():void 0},o.prototype.clickHandler=function(e){0===e.button&&this.renderMenu()},o.prototype.renderMenu=function(){return this.useDefault===!0?this.useDefault=!1:void new r(this.wrapperEl,this.selectEl)},r.prototype._createMenuEl=function(e,t){var n,i,o,r=p.createElement("div"),s=t.children,c=s.length,u=0;for(r.className=d,o=0;c>o;o++)n=s[o],i=p.createElement("div"),i.textContent=n.textContent,i._muiPos=o,n.selected&&(i.setAttribute("class",f),u=o),r.appendChild(i);this.origIndex=u,this.currentIndex=u;var h=a.getMenuPositionalCSS(e,c,u);return l.css(r,h),r._muiScrollTop=h.scrollTop,r},r.prototype.keydownHandler=function(e){var t=e.keyCode;return 9===t?this.destroy():(27!==t&&40!==t&&38!==t&&13!==t||e.preventDefault(),void(27===t?this.destroy():40===t?this.increment():38===t?this.decrement():13===t&&(this.selectCurrent(),this.destroy())))},r.prototype.clickHandler=function(e){e.stopPropagation();var t=e.target._muiPos;void 0!==t&&(this.currentIndex=t,this.selectCurrent(),this.destroy())},r.prototype.increment=function(){if(this.currentIndex!==this.menuEl.children.length-1){var e=this.menuEl.children;l.removeClass(e[this.currentIndex],f),this.currentIndex+=1,l.addClass(e[this.currentIndex],f)}},r.prototype.decrement=function(){if(0!==this.currentIndex){var e=this.menuEl.children;l.removeClass(e[this.currentIndex],f),this.currentIndex-=1,l.addClass(e[this.currentIndex],f)}},r.prototype.selectCurrent=function(){if(this.currentIndex!==this.origIndex){var e=this.selectEl.children;e[this.origIndex].selected=!1,e[this.currentIndex].selected=!0,s.dispatchEvent(this.selectEl,"change")}},r.prototype.destroy=function(){var e=this.menuEl.parentNode;e&&e.removeChild(this.menuEl),this.selectEl.focus(),s.disableScrollLock(),l.off(this.menuEl,"click",this.clickCallbackFn),l.off(p,"keydown",this.keydownCallbackFn),l.off(p,"click",this.destroyCallbackFn),l.off(h,"resize",this.destroyCallbackFn)},t.exports={initListeners:function(){for(var e=p.querySelectorAll(u),t=e.length-1;t>=0;t--)i(e[t]);s.onNodeInserted(function(e){"SELECT"===e.tagName&&l.hasClass(e.parentNode,c)&&i(e)})}}},{"./lib/forms":3,"./lib/jqLite":4,"./lib/util":5}],11:[function(e,t,n){"use strict";function i(e){e._muiTabs!==!0&&(e._muiTabs=!0,s.on(e,"click",o))}function o(e){if(0===e.button){var t=this;null===t.getAttribute("disabled")&&r(t)}}function r(e){var t,n,i,o,r,c,u,b,y,g=e.parentNode,E=e.getAttribute(d),C=document.getElementById(E);s.hasClass(g,f)||(C||a.raiseError('Tab pane "'+E+'" not found'),n=l(C),i=n.id,y="["+d+'="'+i+'"]',o=document.querySelectorAll(y)[0],t=o.parentNode,r={paneId:E,relatedPaneId:i},c={paneId:i,relatedPaneId:E},u=a.dispatchEvent(o,m,!0,!0,c),b=a.dispatchEvent(e,p,!0,!0,r),setTimeout(function(){u.defaultPrevented||b.defaultPrevented||(t&&s.removeClass(t,f),n&&s.removeClass(n,f),s.addClass(g,f),s.addClass(C,f),a.dispatchEvent(o,v,!0,!1,c),a.dispatchEvent(e,h,!0,!1,r))},0))}function l(e){for(var t,n=e.parentNode.children,i=n.length,o=null;i--&&!o;)t=n[i],t!==e&&s.hasClass(t,f)&&(o=t);return o}var s=e("./lib/jqLite"),a=e("./lib/util"),c="data-mui-toggle",u="["+c+'="tab"]',d="data-mui-controls",f="mui--is-active",p="mui.tabs.showstart",h="mui.tabs.showend",m="mui.tabs.hidestart",v="mui.tabs.hideend";t.exports={initListeners:function(){for(var e=document.querySelectorAll(u),t=e.length-1;t>=0;t--)i(e[t]);a.onNodeInserted(function(e){"tab"===e.getAttribute(c)&&i(e)})},api:{activate:function(e){var t="["+d+"="+e+"]",n=document.querySelectorAll(t);n.length||a.raiseError('Tab control for pane "'+e+'" not found'),r(n[0])}}}},{"./lib/jqLite":4,"./lib/util":5}],12:[function(e,t,n){"use strict";function i(e){e._muiTextfield!==!0&&(e._muiTextfield=!0,e.value.length?r.addClass(e,c):r.addClass(e,a),r.on(e,"input",o),r.on(e,"change",o),r.on(e,"focus",function(){r.addClass(this,u)}))}function o(){var e=this;e.value.length?(r.removeClass(e,a),r.addClass(e,c)):(r.removeClass(e,c),r.addClass(e,a)),r.addClass(e,u)}var r=e("./lib/jqLite"),l=e("./lib/util"),s=".mui-textfield > input, .mui-textfield > textarea",a="mui--is-empty",c="mui--is-not-empty",u="mui--is-dirty",d="mui-textfield--float-label";t.exports={initialize:i,initListeners:function(){for(var e=document,t=e.querySelectorAll(s),n=t.length-1;n>=0;n--)i(t[n]);l.onNodeInserted(function(e){"INPUT"!==e.tagName&&"TEXTAREA"!==e.tagName||i(e)}),setTimeout(function(){var e=".mui-textfield.mui-textfield--float-label > label {"+["-webkit-transition","-moz-transition","-o-transition","transition",""].join(":all .15s ease-out;")+"}";l.loadStyle(e)},150),l.supportsPointerEvents()===!1&&r.on(document,"click",function(e){var t=e.target;if("LABEL"===t.tagName&&r.hasClass(t.parentNode,d)){var n=t.previousElementSibling;n&&n.focus()}})}}},{"./lib/jqLite":4,"./lib/util":5}]},{},[1]); \ No newline at end of file diff --git a/platforms/ios/www/libs/mui/packages/cdn/react/mui-react.js b/platforms/ios/www/libs/mui/packages/cdn/react/mui-react.js new file mode 100644 index 0000000..aefaa3b --- /dev/null +++ b/platforms/ios/www/libs/mui/packages/cdn/react/mui-react.js @@ -0,0 +1,3208 @@ +(function (global) { + var babelHelpers = global.babelHelpers = {}; + + babelHelpers.classCallCheck = function (instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + }; + + babelHelpers.createClass = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; + }(); + + babelHelpers.extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; + }; + + babelHelpers.inherits = function (subClass, superClass) { + if (typeof superClass !== "function" && superClass !== null) { + throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); + } + + subClass.prototype = Object.create(superClass && superClass.prototype, { + constructor: { + value: subClass, + enumerable: false, + writable: true, + configurable: true + } + }); + if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; + }; + + babelHelpers.interopRequireDefault = function (obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + }; + + babelHelpers.interopRequireWildcard = function (obj) { + if (obj && obj.__esModule) { + return obj; + } else { + var newObj = {}; + + if (obj != null) { + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; + } + } + + newObj.default = obj; + return newObj; + } + }; + + babelHelpers.objectWithoutProperties = function (obj, keys) { + var target = {}; + + for (var i in obj) { + if (keys.indexOf(i) >= 0) continue; + if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; + target[i] = obj[i]; + } + + return target; + }; + + babelHelpers.possibleConstructorReturn = function (self, call) { + if (!self) { + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + } + + return call && (typeof call === "object" || typeof call === "function") ? call : self; + }; +})(typeof global === "undefined" ? self : global);(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o viewHeight) { + scrollIdeal = menuPadding + (currentIndex + 1) * optionHeight - (-1 * top + wrapperPadding + inputHeight); + scrollMax = numOptions * optionHeight + 2 * menuPadding - height; + scrollTop = Math.min(scrollIdeal, scrollMax); + } + + return { + 'height': height + 'px', + 'top': top + 'px', + 'scrollTop': scrollTop + }; +} + +/** Define module API */ +module.exports = { + getMenuPositionalCSS: getMenuPositionalCSSFn +}; + +},{}],4:[function(require,module,exports){ +/** + * MUI CSS/JS jqLite module + * @module lib/jqLite + */ + +'use strict'; + +/** + * Add a class to an element. + * @param {Element} element - The DOM element. + * @param {string} cssClasses - Space separated list of class names. + */ + +function jqLiteAddClass(element, cssClasses) { + if (!cssClasses || !element.setAttribute) return; + + var existingClasses = _getExistingClasses(element), + splitClasses = cssClasses.split(' '), + cssClass; + + for (var i = 0; i < splitClasses.length; i++) { + cssClass = splitClasses[i].trim(); + if (existingClasses.indexOf(' ' + cssClass + ' ') === -1) { + existingClasses += cssClass + ' '; + } + } + + element.setAttribute('class', existingClasses.trim()); +} + +/** + * Get or set CSS properties. + * @param {Element} element - The DOM element. + * @param {string} [name] - The property name. + * @param {string} [value] - The property value. + */ +function jqLiteCss(element, name, value) { + // Return full style object + if (name === undefined) { + return getComputedStyle(element); + } + + var nameType = jqLiteType(name); + + // Set multiple values + if (nameType === 'object') { + for (var key in name) { + element.style[_camelCase(key)] = name[key]; + }return; + } + + // Set a single value + if (nameType === 'string' && value !== undefined) { + element.style[_camelCase(name)] = value; + } + + var styleObj = getComputedStyle(element), + isArray = jqLiteType(name) === 'array'; + + // Read single value + if (!isArray) return _getCurrCssProp(element, name, styleObj); + + // Read multiple values + var outObj = {}, + key; + + for (var i = 0; i < name.length; i++) { + key = name[i]; + outObj[key] = _getCurrCssProp(element, key, styleObj); + } + + return outObj; +} + +/** + * Check if element has class. + * @param {Element} element - The DOM element. + * @param {string} cls - The class name string. + */ +function jqLiteHasClass(element, cls) { + if (!cls || !element.getAttribute) return false; + return _getExistingClasses(element).indexOf(' ' + cls + ' ') > -1; +} + +/** + * Return the type of a variable. + * @param {} somevar - The JavaScript variable. + */ +function jqLiteType(somevar) { + // handle undefined + if (somevar === undefined) return 'undefined'; + + // handle others (of type [object ]) + var typeStr = Object.prototype.toString.call(somevar); + if (typeStr.indexOf('[object ') === 0) { + return typeStr.slice(8, -1).toLowerCase(); + } else { + throw new Error("MUI: Could not understand type: " + typeStr); + } +} + +/** + * Attach an event handler to a DOM element + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOn(element, type, callback, useCapture) { + useCapture = useCapture === undefined ? false : useCapture; + + // add to DOM + element.addEventListener(type, callback, useCapture); + + // add to cache + var cache = element._muiEventCache = element._muiEventCache || {}; + cache[type] = cache[type] || []; + cache[type].push([callback, useCapture]); +} + +/** + * Remove an event handler from a DOM element + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOff(element, type, callback, useCapture) { + useCapture = useCapture === undefined ? false : useCapture; + + // remove from cache + var cache = element._muiEventCache = element._muiEventCache || {}, + argsList = cache[type] || [], + args, + i; + + i = argsList.length; + while (i--) { + args = argsList[i]; + + // remove all events if callback is undefined + if (callback === undefined || args[0] === callback && args[1] === useCapture) { + + // remove from cache + argsList.splice(i, 1); + + // remove from DOM + element.removeEventListener(type, args[0], args[1]); + } + } +} + +/** + * Attach an event hander which will only execute once + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOne(element, type, callback, useCapture) { + jqLiteOn(element, type, function onFn(ev) { + // execute callback + if (callback) callback.apply(this, arguments); + + // remove wrapper + jqLiteOff(element, type, onFn); + }, useCapture); +} + +/** + * Get or set horizontal scroll position + * @param {Element} element - The DOM element + * @param {number} [value] - The scroll position + */ +function jqLiteScrollLeft(element, value) { + var win = window; + + // get + if (value === undefined) { + if (element === win) { + var docEl = document.documentElement; + return (win.pageXOffset || docEl.scrollLeft) - (docEl.clientLeft || 0); + } else { + return element.scrollLeft; + } + } + + // set + if (element === win) win.scrollTo(value, jqLiteScrollTop(win));else element.scrollLeft = value; +} + +/** + * Get or set vertical scroll position + * @param {Element} element - The DOM element + * @param {number} value - The scroll position + */ +function jqLiteScrollTop(element, value) { + var win = window; + + // get + if (value === undefined) { + if (element === win) { + var docEl = document.documentElement; + return (win.pageYOffset || docEl.scrollTop) - (docEl.clientTop || 0); + } else { + return element.scrollTop; + } + } + + // set + if (element === win) win.scrollTo(jqLiteScrollLeft(win), value);else element.scrollTop = value; +} + +/** + * Return object representing top/left offset and element height/width. + * @param {Element} element - The DOM element. + */ +function jqLiteOffset(element) { + var win = window, + rect = element.getBoundingClientRect(), + scrollTop = jqLiteScrollTop(win), + scrollLeft = jqLiteScrollLeft(win); + + return { + top: rect.top + scrollTop, + left: rect.left + scrollLeft, + height: rect.height, + width: rect.width + }; +} + +/** + * Attach a callback to the DOM ready event listener + * @param {Function} fn - The callback function. + */ +function jqLiteReady(fn) { + var done = false, + top = true, + doc = document, + win = doc.defaultView, + root = doc.documentElement, + add = doc.addEventListener ? 'addEventListener' : 'attachEvent', + rem = doc.addEventListener ? 'removeEventListener' : 'detachEvent', + pre = doc.addEventListener ? '' : 'on'; + + var init = function init(e) { + if (e.type == 'readystatechange' && doc.readyState != 'complete') { + return; + } + + (e.type == 'load' ? win : doc)[rem](pre + e.type, init, false); + if (!done && (done = true)) fn.call(win, e.type || e); + }; + + var poll = function poll() { + try { + root.doScroll('left'); + } catch (e) { + setTimeout(poll, 50);return; + } + init('poll'); + }; + + if (doc.readyState == 'complete') { + fn.call(win, 'lazy'); + } else { + if (doc.createEventObject && root.doScroll) { + try { + top = !win.frameElement; + } catch (e) {} + if (top) poll(); + } + doc[add](pre + 'DOMContentLoaded', init, false); + doc[add](pre + 'readystatechange', init, false); + win[add](pre + 'load', init, false); + } +} + +/** + * Remove classes from a DOM element + * @param {Element} element - The DOM element. + * @param {string} cssClasses - Space separated list of class names. + */ +function jqLiteRemoveClass(element, cssClasses) { + if (!cssClasses || !element.setAttribute) return; + + var existingClasses = _getExistingClasses(element), + splitClasses = cssClasses.split(' '), + cssClass; + + for (var i = 0; i < splitClasses.length; i++) { + cssClass = splitClasses[i].trim(); + while (existingClasses.indexOf(' ' + cssClass + ' ') >= 0) { + existingClasses = existingClasses.replace(' ' + cssClass + ' ', ' '); + } + } + + element.setAttribute('class', existingClasses.trim()); +} + +// ------------------------------ +// Utilities +// ------------------------------ +var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g, + MOZ_HACK_REGEXP = /^moz([A-Z])/, + ESCAPE_REGEXP = /([.*+?^=!:${}()|\[\]\/\\])/g, + BOOLEAN_ATTRS; + +BOOLEAN_ATTRS = { + multiple: true, + selected: true, + checked: true, + disabled: true, + readonly: true, + required: true, + open: true +}; + +function _getExistingClasses(element) { + var classes = (element.getAttribute('class') || '').replace(/[\n\t]/g, ''); + return ' ' + classes + ' '; +} + +function _camelCase(name) { + return name.replace(SPECIAL_CHARS_REGEXP, function (_, separator, letter, offset) { + return offset ? letter.toUpperCase() : letter; + }).replace(MOZ_HACK_REGEXP, 'Moz$1'); +} + +function _escapeRegExp(string) { + return string.replace(ESCAPE_REGEXP, "\\$1"); +} + +function _getCurrCssProp(elem, name, computed) { + var ret; + + // try computed style + ret = computed.getPropertyValue(name); + + // try style attribute (if element is not attached to document) + if (ret === '' && !elem.ownerDocument) ret = elem.style[_camelCase(name)]; + + return ret; +} + +/** + * Module API + */ +module.exports = { + /** Add classes */ + addClass: jqLiteAddClass, + + /** Get or set CSS properties */ + css: jqLiteCss, + + /** Check for class */ + hasClass: jqLiteHasClass, + + /** Remove event handlers */ + off: jqLiteOff, + + /** Return offset values */ + offset: jqLiteOffset, + + /** Add event handlers */ + on: jqLiteOn, + + /** Add an execute-once event handler */ + one: jqLiteOne, + + /** DOM ready event handler */ + ready: jqLiteReady, + + /** Remove classes */ + removeClass: jqLiteRemoveClass, + + /** Check JavaScript variable instance type */ + type: jqLiteType, + + /** Get or set horizontal scroll position */ + scrollLeft: jqLiteScrollLeft, + + /** Get or set vertical scroll position */ + scrollTop: jqLiteScrollTop +}; + +},{}],5:[function(require,module,exports){ +/** + * MUI CSS/JS utilities module + * @module lib/util + */ + +'use strict'; + +var config = require('../config'), + jqLite = require('./jqLite'), + nodeInsertedCallbacks = [], + scrollLock = 0, + scrollLockCls = 'mui-body--scroll-lock', + scrollLockPos, + _supportsPointerEvents; + +/** + * Logging function + */ +function logFn() { + var win = window; + + if (config.debug && typeof win.console !== "undefined") { + try { + win.console.log.apply(win.console, arguments); + } catch (a) { + var e = Array.prototype.slice.call(arguments); + win.console.log(e.join("\n")); + } + } +} + +/** + * Load CSS text in new stylesheet + * @param {string} cssText - The css text. + */ +function loadStyleFn(cssText) { + var doc = document, + head; + + // copied from jQuery + head = doc.head || doc.getElementsByTagName('head')[0] || doc.documentElement; + + var e = doc.createElement('style'); + e.type = 'text/css'; + + if (e.styleSheet) e.styleSheet.cssText = cssText;else e.appendChild(doc.createTextNode(cssText)); + + // add to document + head.insertBefore(e, head.firstChild); + + return e; +} + +/** + * Raise an error + * @param {string} msg - The error message. + */ +function raiseErrorFn(msg, useConsole) { + if (useConsole) { + if (typeof console !== 'undefined') console.error('MUI Warning: ' + msg); + } else { + throw new Error('MUI: ' + msg); + } +} + +/** + * Register callbacks on muiNodeInserted event + * @param {function} callbackFn - The callback function. + */ +function onNodeInsertedFn(callbackFn) { + nodeInsertedCallbacks.push(callbackFn); + + // initalize listeners + if (nodeInsertedCallbacks._initialized === undefined) { + var doc = document; + + jqLite.on(doc, 'animationstart', animationHandlerFn); + jqLite.on(doc, 'mozAnimationStart', animationHandlerFn); + jqLite.on(doc, 'webkitAnimationStart', animationHandlerFn); + + nodeInsertedCallbacks._initialized = true; + } +} + +/** + * Execute muiNodeInserted callbacks + * @param {Event} ev - The DOM event. + */ +function animationHandlerFn(ev) { + // check animation name + if (ev.animationName !== 'mui-node-inserted') return; + + var el = ev.target; + + // iterate through callbacks + for (var i = nodeInsertedCallbacks.length - 1; i >= 0; i--) { + nodeInsertedCallbacks[i](el); + } +} + +/** + * Convert Classname object, with class as key and true/false as value, to an + * class string. + * @param {Object} classes The classes + * @return {String} class string + */ +function classNamesFn(classes) { + var cs = ''; + for (var i in classes) { + cs += classes[i] ? i + ' ' : ''; + } + return cs.trim(); +} + +/** + * Check if client supports pointer events. + */ +function supportsPointerEventsFn() { + // check cache + if (_supportsPointerEvents !== undefined) return _supportsPointerEvents; + + var element = document.createElement('x'); + element.style.cssText = 'pointer-events:auto'; + _supportsPointerEvents = element.style.pointerEvents === 'auto'; + return _supportsPointerEvents; +} + +/** + * Create callback closure. + * @param {Object} instance - The object instance. + * @param {String} funcName - The name of the callback function. + */ +function callbackFn(instance, funcName) { + return function () { + instance[funcName].apply(instance, arguments); + }; +} + +/** + * Dispatch event. + * @param {Element} element - The DOM element. + * @param {String} eventType - The event type. + * @param {Boolean} bubbles=true - If true, event bubbles. + * @param {Boolean} cancelable=true = If true, event is cancelable + * @param {Object} [data] - Data to add to event object + */ +function dispatchEventFn(element, eventType, bubbles, cancelable, data) { + var ev = document.createEvent('HTMLEvents'), + bubbles = bubbles !== undefined ? bubbles : true, + cancelable = cancelable !== undefined ? cancelable : true, + k; + + ev.initEvent(eventType, bubbles, cancelable); + + // add data to event object + if (data) for (k in data) { + ev[k] = data[k]; + } // dispatch + if (element) element.dispatchEvent(ev); + + return ev; +} + +/** + * Turn on window scroll lock. + */ +function enableScrollLockFn() { + // increment counter + scrollLock += 1; + + // add lock + if (scrollLock === 1) { + var win = window, + doc = document; + + scrollLockPos = { left: jqLite.scrollLeft(win), top: jqLite.scrollTop(win) }; + jqLite.addClass(doc.body, scrollLockCls); + win.scrollTo(scrollLockPos.left, scrollLockPos.top); + } +} + +/** + * Turn off window scroll lock. + */ +function disableScrollLockFn() { + // ignore + if (scrollLock === 0) return; + + // decrement counter + scrollLock -= 1; + + // remove lock + if (scrollLock === 0) { + var win = window, + doc = document; + + jqLite.removeClass(doc.body, scrollLockCls); + win.scrollTo(scrollLockPos.left, scrollLockPos.top); + } +} + +/** + * Define the module API + */ +module.exports = { + /** Create callback closures */ + callback: callbackFn, + + /** Classnames object to string */ + classNames: classNamesFn, + + /** Disable scroll lock */ + disableScrollLock: disableScrollLockFn, + + /** Dispatch event */ + dispatchEvent: dispatchEventFn, + + /** Enable scroll lock */ + enableScrollLock: enableScrollLockFn, + + /** Log messages to the console when debug is turned on */ + log: logFn, + + /** Load CSS text as new stylesheet */ + loadStyle: loadStyleFn, + + /** Register muiNodeInserted handler */ + onNodeInserted: onNodeInsertedFn, + + /** Raise MUI error */ + raiseError: raiseErrorFn, + + /** Support Pointer Events check */ + supportsPointerEvents: supportsPointerEventsFn +}; + +},{"../config":2,"./jqLite":4}],6:[function(require,module,exports){ +/** + * MUI React helpers + * @module react/_helpers + */ + +'use strict'; + +var controlledMessage = 'You provided a `value` prop to a form field ' + 'without an `OnChange` handler. Please see React documentation on ' + 'controlled components'; + +module.exports = { controlledMessage: controlledMessage }; + +},{}],7:[function(require,module,exports){ +/** + * MUI React button module + * @module react/button + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var _jqLite = require('../js/lib/jqLite'); + +var jqLite = babelHelpers.interopRequireWildcard(_jqLite); + +var _util = require('../js/lib/util'); + +var util = babelHelpers.interopRequireWildcard(_util); + + +var rippleIter = 0; + +var PropTypes = _react2.default.PropTypes, + btnClass = 'mui-btn', + rippleClass = 'mui-ripple-effect', + btnAttrs = { color: 1, variant: 1, size: 1 }; + +/** + * Button element + * @class + */ + +var Button = function (_React$Component) { + babelHelpers.inherits(Button, _React$Component); + + function Button() { + var _Object$getPrototypeO; + + var _temp, _this, _ret; + + babelHelpers.classCallCheck(this, Button); + + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + return _ret = (_temp = (_this = babelHelpers.possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(Button)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.state = { + ripples: {} + }, _temp), babelHelpers.possibleConstructorReturn(_this, _ret); + } + + babelHelpers.createClass(Button, [{ + key: 'componentDidMount', + value: function componentDidMount() { + // disable MUI js + var el = this.refs.buttonEl; + el._muiDropdown = true; + el._muiRipple = true; + } + }, { + key: 'onClick', + value: function onClick(ev) { + var onClickFn = this.props.onClick; + onClickFn && onClickFn(ev); + } + }, { + key: 'onMouseDown', + value: function onMouseDown(ev) { + // get (x, y) position of click + var offset = jqLite.offset(this.refs.buttonEl); + + // choose diameter + var diameter = offset.height; + if (this.props.variant === 'fab') diameter = diameter / 2; + + // add ripple to state + var ripples = this.state.ripples; + var key = Date.now(); + + ripples[key] = { + xPos: ev.pageX - offset.left, + yPos: ev.pageY - offset.top, + diameter: diameter, + teardownFn: this.teardownRipple.bind(this, key) + }; + + this.setState({ ripples: ripples }); + } + }, { + key: 'onTouchStart', + value: function onTouchStart(ev) {} + }, { + key: 'teardownRipple', + value: function teardownRipple(key) { + // delete ripple + var ripples = this.state.ripples; + delete ripples[key]; + this.setState({ ripples: ripples }); + } + }, { + key: 'render', + value: function render() { + var cls = btnClass, + k = void 0, + v = void 0; + + var ripples = this.state.ripples; + + // button attributes + for (k in btnAttrs) { + v = this.props[k]; + if (v !== 'default') cls += ' ' + btnClass + '--' + v; + } + + return _react2.default.createElement( + 'button', + babelHelpers.extends({}, this.props, { + ref: 'buttonEl', + className: cls + ' ' + this.props.className, + onClick: this.onClick.bind(this), + onMouseDown: this.onMouseDown.bind(this) + }), + this.props.children, + Object.keys(ripples).map(function (k, i) { + var v = ripples[k]; + + return _react2.default.createElement(Ripple, { + key: k, + xPos: v.xPos, + yPos: v.yPos, + diameter: v.diameter, + onTeardown: v.teardownFn + }); + }) + ); + } + }]); + return Button; +}(_react2.default.Component); + +/** + * Ripple component + * @class + */ + + +Button.propTypes = { + color: PropTypes.oneOf(['default', 'primary', 'danger', 'dark', 'accent']), + disabled: PropTypes.bool, + size: PropTypes.oneOf(['default', 'small', 'large']), + type: PropTypes.oneOf(['submit', 'button']), + variant: PropTypes.oneOf(['default', 'flat', 'raised', 'fab']), + onClick: PropTypes.func +}; +Button.defaultProps = { + className: '', + color: 'default', + disabled: false, + size: 'default', + type: null, + variant: 'default', + onClick: null +}; + +var Ripple = function (_React$Component2) { + babelHelpers.inherits(Ripple, _React$Component2); + + function Ripple() { + babelHelpers.classCallCheck(this, Ripple); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Ripple).apply(this, arguments)); + } + + babelHelpers.createClass(Ripple, [{ + key: 'componentDidMount', + value: function componentDidMount() { + var _this3 = this; + + // trigger teardown in 2 sec + this.teardownTimer = setTimeout(function () { + var fn = _this3.props.onTeardown; + fn && fn(); + }, 2000); + } + }, { + key: 'componentWillUnmount', + value: function componentWillUnmount() { + // clear timeout + clearTimeout(this.teardownTimer); + } + }, { + key: 'render', + value: function render() { + var diameter = this.props.diameter, + radius = diameter / 2; + + var style = { + height: diameter, + width: diameter, + top: this.props.yPos - radius || 0, + left: this.props.xPos - radius || 0 + }; + + return _react2.default.createElement('div', { className: rippleClass, style: style }); + } + }]); + return Ripple; +}(_react2.default.Component); + +/** Define module API */ + + +Ripple.propTypes = { + xPos: PropTypes.number, + yPos: PropTypes.number, + diameter: PropTypes.number, + onTeardown: PropTypes.func +}; +Ripple.defaultProps = { + xPos: 0, + yPos: 0, + diameter: 0, + onTeardown: null +}; +exports.default = Button; +module.exports = exports['default']; + +},{"../js/lib/jqLite":4,"../js/lib/util":5,"react":"CwoHg3"}],8:[function(require,module,exports){ +/** + * MUI React Caret Module + * @module react/caret + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +/** + * Caret constructor + * @class + */ + +var Caret = function (_React$Component) { + babelHelpers.inherits(Caret, _React$Component); + + function Caret() { + babelHelpers.classCallCheck(this, Caret); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Caret).apply(this, arguments)); + } + + babelHelpers.createClass(Caret, [{ + key: 'render', + value: function render() { + var _props = this.props; + var children = _props.children; + var other = babelHelpers.objectWithoutProperties(_props, ['children']); + + + return _react2.default.createElement('span', babelHelpers.extends({}, other, { + className: 'mui-caret ' + this.props.className + })); + } + }]); + return Caret; +}(_react2.default.Component); + +/** Define module API */ + + +Caret.defaultProps = { + className: '' +}; +exports.default = Caret; +module.exports = exports['default']; + +},{"react":"CwoHg3"}],9:[function(require,module,exports){ +/** + * MUI React tabs module + * @module react/tabs + */ +/* jshint quotmark:false */ +// jscs:disable validateQuoteMarks + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var PropTypes = _react2.default.PropTypes; + +/** + * Tab constructor + * @class + */ + +var Tab = function (_React$Component) { + babelHelpers.inherits(Tab, _React$Component); + + function Tab() { + babelHelpers.classCallCheck(this, Tab); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Tab).apply(this, arguments)); + } + + babelHelpers.createClass(Tab, [{ + key: 'render', + value: function render() { + return null; + } + }]); + return Tab; +}(_react2.default.Component); + +/** Define module API */ + + +Tab.propTypes = { + value: PropTypes.any, + label: PropTypes.string, + onActive: PropTypes.func +}; +Tab.defaultProps = { + value: null, + label: '', + onActive: null +}; +exports.default = Tab; +module.exports = exports['default']; + +},{"react":"CwoHg3"}],10:[function(require,module,exports){ +/** + * MUI React TextInput Component + * @module react/text-input + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.TextField = undefined; + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var _util = require('../js/lib/util'); + +var util = babelHelpers.interopRequireWildcard(_util); + +var _helpers = require('./_helpers'); + +var PropTypes = _react2.default.PropTypes; + +/** + * Input constructor + * @class + */ + +var Input = function (_React$Component) { + babelHelpers.inherits(Input, _React$Component); + + function Input(props) { + babelHelpers.classCallCheck(this, Input); + + var _this = babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Input).call(this, props)); + + var value = props.value; + var innerValue = value || props.defaultValue; + + _this.state = { + innerValue: innerValue, + isDirty: Boolean(innerValue) + }; + + // warn if value defined but onChange is not + if (value !== undefined && props.onChange === null) { + util.raiseError(_helpers.controlledMessage, true); + } + + var cb = util.callback; + _this.onChangeCB = cb(_this, 'onChange'); + _this.onFocusCB = cb(_this, 'onFocus'); + return _this; + } + + babelHelpers.createClass(Input, [{ + key: 'componentDidMount', + value: function componentDidMount() { + // disable MUI js + this.refs.inputEl._muiTextfield = true; + } + }, { + key: 'onChange', + value: function onChange(ev) { + this.setState({ innerValue: ev.target.value }); + + var fn = this.props.onChange; + if (fn) fn(ev); + } + }, { + key: 'onFocus', + value: function onFocus(ev) { + this.setState({ isDirty: true }); + } + }, { + key: 'triggerFocus', + value: function triggerFocus() { + // hack to enable IE10 pointer-events shim + this.refs.inputEl.focus(); + } + }, { + key: 'render', + value: function render() { + var cls = {}, + isNotEmpty = Boolean(this.state.innerValue), + inputEl = void 0; + + cls['mui--is-empty'] = !isNotEmpty; + cls['mui--is-not-empty'] = isNotEmpty; + cls['mui--is-dirty'] = this.state.isDirty; + cls['mui--is-invalid'] = this.props.invalid; + + cls = util.classNames(cls); + + var _props = this.props; + var children = _props.children; + var other = babelHelpers.objectWithoutProperties(_props, ['children']); + + + if (this.props.type === 'textarea') { + inputEl = _react2.default.createElement('textarea', babelHelpers.extends({}, other, { + ref: 'inputEl', + className: cls, + rows: this.props.rows, + placeholder: this.props.hint, + value: this.props.value, + defaultValue: this.props.defaultValue, + autoFocus: this.props.autoFocus, + onChange: this.onChangeCB, + onFocus: this.onFocusCB, + required: this.props.required + })); + } else { + inputEl = _react2.default.createElement('input', babelHelpers.extends({}, other, { + ref: 'inputEl', + className: cls, + type: this.props.type, + value: this.props.value, + defaultValue: this.props.defaultValue, + placeholder: this.props.hint, + autoFocus: this.props.autofocus, + onChange: this.onChangeCB, + onFocus: this.onFocusCB, + required: this.props.required + })); + } + + return inputEl; + } + }]); + return Input; +}(_react2.default.Component); + +/** + * Label constructor + * @class + */ + + +Input.propTypes = { + hint: PropTypes.string, + value: PropTypes.string, + type: PropTypes.string, + autoFocus: PropTypes.bool, + onChange: PropTypes.func +}; +Input.defaultProps = { + hint: null, + type: null, + autoFocus: false, + onChange: null +}; + +var Label = function (_React$Component2) { + babelHelpers.inherits(Label, _React$Component2); + + function Label() { + var _Object$getPrototypeO; + + var _temp, _this2, _ret; + + babelHelpers.classCallCheck(this, Label); + + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + return _ret = (_temp = (_this2 = babelHelpers.possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(Label)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this2), _this2.state = { + style: {} + }, _temp), babelHelpers.possibleConstructorReturn(_this2, _ret); + } + + babelHelpers.createClass(Label, [{ + key: 'componentDidMount', + value: function componentDidMount() { + var _this3 = this; + + this.styleTimer = setTimeout(function () { + var s = '.15s ease-out'; + var style = void 0; + + style = { + transition: s, + WebkitTransition: s, + MozTransition: s, + OTransition: s, + msTransform: s + }; + + _this3.setState({ style: style }); + }, 150); + } + }, { + key: 'componentWillUnmount', + value: function componentWillUnmount() { + // clear timer + clearTimeout(this.styleTimer); + } + }, { + key: 'render', + value: function render() { + return _react2.default.createElement( + 'label', + { + style: this.state.style, + onClick: this.props.onClick + }, + this.props.text + ); + } + }]); + return Label; +}(_react2.default.Component); + +/** + * TextField constructor + * @class + */ + + +Label.defaultProps = { + text: '', + onClick: null +}; + +var TextField = function (_React$Component3) { + babelHelpers.inherits(TextField, _React$Component3); + + function TextField(props) { + babelHelpers.classCallCheck(this, TextField); + + var _this4 = babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(TextField).call(this, props)); + + _this4.onClickCB = util.callback(_this4, 'onClick'); + return _this4; + } + + babelHelpers.createClass(TextField, [{ + key: 'onClick', + value: function onClick(ev) { + // pointer-events shim + if (util.supportsPointerEvents() === false) { + ev.target.style.cursor = 'text'; + this.refs.inputEl.triggerFocus(); + } + } + }, { + key: 'render', + value: function render() { + var cls = {}, + labelEl = void 0; + + if (this.props.label.length) { + labelEl = _react2.default.createElement(Label, { + text: this.props.label, + onClick: this.onClickCB + }); + } + + cls['mui-textfield'] = true; + cls['mui-textfield--float-label'] = this.props.floatingLabel; + cls = util.classNames(cls); + + return _react2.default.createElement( + 'div', + { className: cls }, + _react2.default.createElement(Input, babelHelpers.extends({ ref: 'inputEl' }, this.props)), + labelEl + ); + } + }]); + return TextField; +}(_react2.default.Component); + +/** Define module API */ + + +TextField.propTypes = { + label: PropTypes.string, + floatingLabel: PropTypes.bool +}; +TextField.defaultProps = { + label: '', + floatingLabel: false +}; +exports.TextField = TextField; + +},{"../js/lib/util":5,"./_helpers":6,"react":"CwoHg3"}],11:[function(require,module,exports){ +/** + * MUI React Appbar Module + * @module react/appbar + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +/** + * Appbar constructor + * @class + */ + +var Appbar = function (_React$Component) { + babelHelpers.inherits(Appbar, _React$Component); + + function Appbar() { + babelHelpers.classCallCheck(this, Appbar); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Appbar).apply(this, arguments)); + } + + babelHelpers.createClass(Appbar, [{ + key: 'render', + value: function render() { + return _react2.default.createElement( + 'div', + babelHelpers.extends({}, this.props, { + className: 'mui-appbar ' + this.props.className + }), + this.props.children + ); + } + }]); + return Appbar; +}(_react2.default.Component); + +/** Define module API */ + + +Appbar.defaultProps = { + className: '' +}; +exports.default = Appbar; +module.exports = exports['default']; + +},{"react":"CwoHg3"}],12:[function(require,module,exports){ +module.exports=require(7) +},{"../js/lib/jqLite":4,"../js/lib/util":5,"react":"CwoHg3"}],13:[function(require,module,exports){ +module.exports=require(8) +},{"react":"CwoHg3"}],14:[function(require,module,exports){ +/** + * MUI React checkbox module + * @module react/checkbox + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var _util = require('../js/lib/util'); + +var util = babelHelpers.interopRequireWildcard(_util); + +var _helpers = require('./_helpers'); + +var PropTypes = _react2.default.PropTypes; + +/** + * Checkbox constructor + * @class + */ + +var Checkbox = function (_React$Component) { + babelHelpers.inherits(Checkbox, _React$Component); + + function Checkbox() { + babelHelpers.classCallCheck(this, Checkbox); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Checkbox).apply(this, arguments)); + } + + babelHelpers.createClass(Checkbox, [{ + key: 'render', + value: function render() { + var _props = this.props; + var children = _props.children; + var onChange = _props.onChange; + var other = babelHelpers.objectWithoutProperties(_props, ['children', 'onChange']); + + + return _react2.default.createElement( + 'div', + babelHelpers.extends({}, other, { + className: 'mui-checkbox ' + this.props.className + }), + _react2.default.createElement( + 'label', + null, + _react2.default.createElement('input', { + ref: 'inputEl', + type: 'checkbox', + name: this.props.name, + value: this.props.value, + checked: this.props.checked, + defaultChecked: this.props.defaultChecked, + disabled: this.props.disabled, + onChange: this.props.onChange + }), + this.props.label + ) + ); + } + }]); + return Checkbox; +}(_react2.default.Component); + +/** Define module API */ + + +Checkbox.propTypes = { + name: PropTypes.string, + label: PropTypes.string, + value: PropTypes.string, + checked: PropTypes.bool, + defaultChecked: PropTypes.bool, + disabled: PropTypes.bool, + onChange: PropTypes.func +}; +Checkbox.defaultProps = { + className: '', + name: null, + label: null, + disabled: false, + onChange: null +}; +exports.default = Checkbox; +module.exports = exports['default']; + +},{"../js/lib/util":5,"./_helpers":6,"react":"CwoHg3"}],15:[function(require,module,exports){ +/** + * MUI React Col Component + * @module react/col + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var _util = require('../js/lib/util'); + +var util = babelHelpers.interopRequireWildcard(_util); + + +var breakpoints = ['xs', 'sm', 'md', 'lg', 'xl']; + +/** + * Col constructor + * @class + */ + +var Col = function (_React$Component) { + babelHelpers.inherits(Col, _React$Component); + + function Col() { + babelHelpers.classCallCheck(this, Col); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Col).apply(this, arguments)); + } + + babelHelpers.createClass(Col, [{ + key: 'defaultProps', + value: function defaultProps() { + var props = { className: '' }, + i = void 0, + v = void 0; + + // add {breakpoint}, {breakpoint}-offset to props + for (i = breakpoints.length - 1; i > -1; i--) { + v = breakpoints[i]; + props[v] = null; + props[v + '-offset'] = null; + } + + return props; + } + }, { + key: 'render', + value: function render() { + var cls = {}, + i = void 0, + bk = void 0, + val = void 0, + baseCls = void 0; + + // add mui-col classes + for (i = breakpoints.length - 1; i > -1; i--) { + bk = breakpoints[i]; + baseCls = 'mui-col-' + bk; + + // add mui-col-{bk}-{val} + val = this.props[bk]; + if (val) cls[baseCls + '-' + val] = true; + + // add mui-col-{bk}-offset-{val} + val = this.props[bk + '-offset']; + if (val) cls[baseCls + '-offset-' + val] = true; + } + + cls = util.classNames(cls); + + return _react2.default.createElement( + 'div', + babelHelpers.extends({}, this.props, { + className: cls + ' ' + this.props.className + }), + this.props.children + ); + } + }]); + return Col; +}(_react2.default.Component); + +/** Define module API */ + + +exports.default = Col; +module.exports = exports['default']; + +},{"../js/lib/util":5,"react":"CwoHg3"}],16:[function(require,module,exports){ +/** + * MUI React container module + * @module react/container + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +/** + * Container constructor + * @class + */ + +var Container = function (_React$Component) { + babelHelpers.inherits(Container, _React$Component); + + function Container() { + babelHelpers.classCallCheck(this, Container); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Container).apply(this, arguments)); + } + + babelHelpers.createClass(Container, [{ + key: 'render', + value: function render() { + var cls = 'mui-container'; + + // fluid containers + if (this.props.fluid) cls += '-fluid'; + + return _react2.default.createElement( + 'div', + babelHelpers.extends({}, this.props, { + className: cls + ' ' + this.props.className + }), + this.props.children + ); + } + }]); + return Container; +}(_react2.default.Component); + +/** Define module API */ + + +Container.propTypes = { + fluid: _react2.default.PropTypes.bool +}; +Container.defaultProps = { + className: '', + fluid: false +}; +exports.default = Container; +module.exports = exports['default']; + +},{"react":"CwoHg3"}],17:[function(require,module,exports){ +/** + * MUI React divider module + * @module react/divider + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +/** + * Divider constructor + * @class + */ + +var Divider = function (_React$Component) { + babelHelpers.inherits(Divider, _React$Component); + + function Divider() { + babelHelpers.classCallCheck(this, Divider); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Divider).apply(this, arguments)); + } + + babelHelpers.createClass(Divider, [{ + key: 'render', + value: function render() { + var _props = this.props; + var children = _props.children; + var other = babelHelpers.objectWithoutProperties(_props, ['children']); + + + return _react2.default.createElement('div', babelHelpers.extends({}, other, { + className: 'mui-divider ' + this.props.className + })); + } + }]); + return Divider; +}(_react2.default.Component); + +/** Define module API */ + + +Divider.defaultProps = { + className: '' +}; +exports.default = Divider; +module.exports = exports['default']; + +},{"react":"CwoHg3"}],18:[function(require,module,exports){ +/** + * MUI React dropdowns module + * @module react/dropdowns + */ +/* jshint quotmark:false */ +// jscs:disable validateQuoteMarks + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var _util = require('../js/lib/util'); + +var util = babelHelpers.interopRequireWildcard(_util); + + +var PropTypes = _react2.default.PropTypes; + +/** + * DropdownItem constructor + * @class + */ + +var DropdownItem = function (_React$Component) { + babelHelpers.inherits(DropdownItem, _React$Component); + + function DropdownItem(props) { + babelHelpers.classCallCheck(this, DropdownItem); + + var _this = babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(DropdownItem).call(this, props)); + + _this.onClickCB = util.callback(_this, 'onClick'); + return _this; + } + + babelHelpers.createClass(DropdownItem, [{ + key: 'onClick', + value: function onClick(ev) { + if (this.props.onClick) this.props.onClick(this, ev); + } + }, { + key: 'render', + value: function render() { + var _props = this.props; + var children = _props.children; + var onClick = _props.onClick; + var other = babelHelpers.objectWithoutProperties(_props, ['children', 'onClick']); + + + return _react2.default.createElement( + 'li', + other, + _react2.default.createElement( + 'a', + { + href: this.props.link, + target: this.props.target, + 'data-mui-value': this.props.value, + onClick: this.onClickCB + }, + children + ) + ); + } + }]); + return DropdownItem; +}(_react2.default.Component); + +/** Define module API */ + + +DropdownItem.propTypes = { + link: PropTypes.string, + target: PropTypes.string, + onClick: PropTypes.func +}; +exports.default = DropdownItem; +module.exports = exports['default']; + +},{"../js/lib/util":5,"react":"CwoHg3"}],19:[function(require,module,exports){ +/** + * MUI React dropdowns module + * @module react/dropdowns + */ +/* jshint quotmark:false */ +// jscs:disable validateQuoteMarks + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var _button = require('./button'); + +var _button2 = babelHelpers.interopRequireDefault(_button); + +var _caret = require('./caret'); + +var _caret2 = babelHelpers.interopRequireDefault(_caret); + +var _jqLite = require('../js/lib/jqLite'); + +var jqLite = babelHelpers.interopRequireWildcard(_jqLite); + +var _util = require('../js/lib/util'); + +var util = babelHelpers.interopRequireWildcard(_util); + + +var PropTypes = _react2.default.PropTypes, + dropdownClass = 'mui-dropdown', + menuClass = 'mui-dropdown__menu', + openClass = 'mui--is-open', + rightClass = 'mui-dropdown__menu--right'; + +/** + * Dropdown constructor + * @class + */ + +var Dropdown = function (_React$Component) { + babelHelpers.inherits(Dropdown, _React$Component); + + function Dropdown(props) { + babelHelpers.classCallCheck(this, Dropdown); + + var _this = babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Dropdown).call(this, props)); + + _this.state = { + opened: false, + menuTop: 0 + }; + + var cb = util.callback; + _this.selectCB = cb(_this, 'select'); + _this.onClickCB = cb(_this, 'onClick'); + _this.onOutsideClickCB = cb(_this, 'onOutsideClick'); + return _this; + } + + babelHelpers.createClass(Dropdown, [{ + key: 'componentWillMount', + value: function componentWillMount() { + document.addEventListener('click', this.onOutsideClickCB); + } + }, { + key: 'componentWillUnmount', + value: function componentWillUnmount() { + document.removeEventListener('click', this.onOutsideClickCB); + } + }, { + key: 'onClick', + value: function onClick(ev) { + // only left clicks + if (ev.button !== 0) return; + + // exit if toggle button is disabled + if (this.props.disabled) return; + + if (!ev.defaultPrevented) { + this.toggle(); + + // execute onClick method + var onClickFn = this.props.onClick; + onClickFn && onClickFn(ev); + } + } + }, { + key: 'toggle', + value: function toggle() { + // exit if no menu element + if (!this.props.children) { + return util.raiseError('Dropdown menu element not found'); + } + + if (this.state.opened) this.close();else this.open(); + } + }, { + key: 'open', + value: function open() { + // position menu element below toggle button + var wrapperRect = this.refs.wrapperEl.getBoundingClientRect(), + toggleRect = void 0; + + toggleRect = this.refs.button.refs.buttonEl.getBoundingClientRect(); + + this.setState({ + opened: true, + menuTop: toggleRect.top - wrapperRect.top + toggleRect.height + }); + } + }, { + key: 'close', + value: function close() { + this.setState({ opened: false }); + } + }, { + key: 'select', + value: function select(ev) { + // onSelect callback + if (this.props.onSelect && ev.target.tagName === 'A') { + this.props.onSelect(ev.target.getAttribute('data-mui-value')); + } + + // close menu + if (!ev.defaultPrevented) this.close(); + } + }, { + key: 'onOutsideClick', + value: function onOutsideClick(ev) { + var isClickInside = this.refs.wrapperEl.contains(ev.target); + if (!isClickInside) this.close(); + } + }, { + key: 'render', + value: function render() { + var buttonEl = void 0, + menuEl = void 0, + labelEl = void 0; + + // build label + if (jqLite.type(this.props.label) === 'string') { + labelEl = _react2.default.createElement( + 'span', + null, + this.props.label, + ' ', + _react2.default.createElement(_caret2.default, null) + ); + } else { + labelEl = this.props.label; + } + + buttonEl = _react2.default.createElement( + _button2.default, + { + ref: 'button', + type: 'button', + onClick: this.onClickCB, + color: this.props.color, + variant: this.props.variant, + size: this.props.size, + disabled: this.props.disabled + }, + labelEl + ); + + if (this.state.opened) { + var cs = {}; + + cs[menuClass] = true; + cs[openClass] = this.state.opened; + cs[rightClass] = this.props.alignMenu === 'right'; + cs = util.classNames(cs); + + menuEl = _react2.default.createElement( + 'ul', + { + ref: 'menuEl', + className: cs, + style: { top: this.state.menuTop }, + onClick: this.selectCB + }, + this.props.children + ); + } + + var _props = this.props; + var className = _props.className; + var children = _props.children; + var onClick = _props.onClick; + var other = babelHelpers.objectWithoutProperties(_props, ['className', 'children', 'onClick']); + + + return _react2.default.createElement( + 'div', + babelHelpers.extends({}, other, { + ref: 'wrapperEl', + className: dropdownClass + ' ' + className + }), + buttonEl, + menuEl + ); + } + }]); + return Dropdown; +}(_react2.default.Component); + +/** Define module API */ + + +Dropdown.propTypes = { + color: PropTypes.oneOf(['default', 'primary', 'danger', 'dark', 'accent']), + variant: PropTypes.oneOf(['default', 'flat', 'raised', 'fab']), + size: PropTypes.oneOf(['default', 'small', 'large']), + label: PropTypes.oneOfType([PropTypes.string, PropTypes.element]), + alignMenu: PropTypes.oneOf(['left', 'right']), + onClick: PropTypes.func, + onSelect: PropTypes.func, + disabled: PropTypes.bool +}; +Dropdown.defaultProps = { + className: '', + color: 'default', + variant: 'default', + size: 'default', + label: '', + alignMenu: 'left', + onClick: null, + onSelect: null, + disabled: false +}; +exports.default = Dropdown; +module.exports = exports['default']; + +},{"../js/lib/jqLite":4,"../js/lib/util":5,"./button":7,"./caret":8,"react":"CwoHg3"}],20:[function(require,module,exports){ +/** + * MUI React form module + * @module react/form + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +/** + * Form constructor + * @class + */ + +var Form = function (_React$Component) { + babelHelpers.inherits(Form, _React$Component); + + function Form() { + babelHelpers.classCallCheck(this, Form); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Form).apply(this, arguments)); + } + + babelHelpers.createClass(Form, [{ + key: 'render', + value: function render() { + var cls = ''; + + // inline form + if (this.props.inline) cls = 'mui-form--inline'; + + return _react2.default.createElement( + 'form', + babelHelpers.extends({}, this.props, { + className: cls + ' ' + this.props.className + }), + this.props.children + ); + } + }]); + return Form; +}(_react2.default.Component); + +/** Define module API */ + + +Form.propTypes = { + inline: _react2.default.PropTypes.bool +}; +Form.defaultProps = { + className: '', + inline: false +}; +exports.default = Form; +module.exports = exports['default']; + +},{"react":"CwoHg3"}],21:[function(require,module,exports){ +/** + * MUI React Input Component + * @module react/input + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var _textField = require('./text-field'); + +var PropTypes = _react2.default.PropTypes; + +/** + * Input constructor + * @class + */ + +var Input = function (_React$Component) { + babelHelpers.inherits(Input, _React$Component); + + function Input() { + babelHelpers.classCallCheck(this, Input); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Input).apply(this, arguments)); + } + + babelHelpers.createClass(Input, [{ + key: 'render', + value: function render() { + return _react2.default.createElement(_textField.TextField, this.props); + } + }]); + return Input; +}(_react2.default.Component); + +Input.propTypes = { + type: PropTypes.oneOf(['text', 'email', 'url', 'tel', 'password']) +}; +Input.defaultProps = { + type: 'text' +}; +exports.default = Input; +module.exports = exports['default']; + +},{"./text-field":10,"react":"CwoHg3"}],22:[function(require,module,exports){ +/** + * MUI React options module + * @module react/option + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var _forms = require('../js/lib/forms'); + +var formlib = babelHelpers.interopRequireWildcard(_forms); + +var _jqLite = require('../js/lib/jqLite'); + +var jqLite = babelHelpers.interopRequireWildcard(_jqLite); + +var _util = require('../js/lib/util'); + +var util = babelHelpers.interopRequireWildcard(_util); + + +var PropTypes = _react2.default.PropTypes; + +/** + * Option constructor + * @class + */ + +var Option = function (_React$Component) { + babelHelpers.inherits(Option, _React$Component); + + function Option() { + babelHelpers.classCallCheck(this, Option); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Option).apply(this, arguments)); + } + + babelHelpers.createClass(Option, [{ + key: 'render', + value: function render() { + var _props = this.props; + var children = _props.children; + var other = babelHelpers.objectWithoutProperties(_props, ['children']); + + + return _react2.default.createElement( + 'option', + babelHelpers.extends({}, other, { value: this.props.value }), + this.props.label + ); + } + }]); + return Option; +}(_react2.default.Component); + +/** Define module API */ + + +Option.propTypes = { + value: PropTypes.string, + label: PropTypes.string +}; +Option.defaultProps = { + value: null, + label: null +}; +exports.default = Option; +module.exports = exports['default']; + +},{"../js/lib/forms":3,"../js/lib/jqLite":4,"../js/lib/util":5,"react":"CwoHg3"}],23:[function(require,module,exports){ +/** + * MUI React layout module + * @module react/layout + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +/** + * Panel constructor + * @class + */ + +var Panel = function (_React$Component) { + babelHelpers.inherits(Panel, _React$Component); + + function Panel() { + babelHelpers.classCallCheck(this, Panel); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Panel).apply(this, arguments)); + } + + babelHelpers.createClass(Panel, [{ + key: 'render', + value: function render() { + return _react2.default.createElement( + 'div', + babelHelpers.extends({}, this.props, { + className: 'mui-panel ' + this.props.className + }), + this.props.children + ); + } + }]); + return Panel; +}(_react2.default.Component); + +/** Define module API */ + + +Panel.defaultProps = { + className: '' +}; +exports.default = Panel; +module.exports = exports['default']; + +},{"react":"CwoHg3"}],24:[function(require,module,exports){ +/** + * MUI React radio module + * @module react/radio + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var PropTypes = _react2.default.PropTypes; + +/** + * Radio constructor + * @class + */ + +var Radio = function (_React$Component) { + babelHelpers.inherits(Radio, _React$Component); + + function Radio() { + babelHelpers.classCallCheck(this, Radio); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Radio).apply(this, arguments)); + } + + babelHelpers.createClass(Radio, [{ + key: 'render', + value: function render() { + var _props = this.props; + var children = _props.children; + var onChange = _props.onChange; + var other = babelHelpers.objectWithoutProperties(_props, ['children', 'onChange']); + + + return _react2.default.createElement( + 'div', + babelHelpers.extends({}, other, { + className: 'mui-radio ' + this.props.className + }), + _react2.default.createElement( + 'label', + null, + _react2.default.createElement('input', { + ref: 'inputEl', + type: 'radio', + name: this.props.name, + value: this.props.value, + checked: this.props.checked, + defaultChecked: this.props.defaultChecked, + disabled: this.props.disabled, + onChange: this.props.onChange + }), + this.props.label + ) + ); + } + }]); + return Radio; +}(_react2.default.Component); + +/** Define module API */ + + +Radio.propTypes = { + name: PropTypes.string, + label: PropTypes.string, + value: PropTypes.string, + checked: PropTypes.bool, + defaultChecked: PropTypes.bool, + disabled: PropTypes.bool, + onChange: PropTypes.func +}; +Radio.defaultProps = { + className: '', + name: null, + label: null, + disabled: false, + onChange: null +}; +exports.default = Radio; +module.exports = exports['default']; + +},{"react":"CwoHg3"}],25:[function(require,module,exports){ +/** + * MUI React Row Component + * @module react/row + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var _util = require('../js/lib/util'); + +var util = babelHelpers.interopRequireWildcard(_util); + + +var breakpoints = ['xs', 'sm', 'md', 'lg']; + +/** + * Row constructor + * @class + */ + +var Row = function (_React$Component) { + babelHelpers.inherits(Row, _React$Component); + + function Row() { + babelHelpers.classCallCheck(this, Row); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Row).apply(this, arguments)); + } + + babelHelpers.createClass(Row, [{ + key: 'render', + value: function render() { + return _react2.default.createElement( + 'div', + babelHelpers.extends({}, this.props, { + className: 'mui-row ' + this.props.className + }), + this.props.children + ); + } + }]); + return Row; +}(_react2.default.Component); + +/** Define module API */ + + +Row.defaultProps = { + className: '' +}; +exports.default = Row; +module.exports = exports['default']; + +},{"../js/lib/util":5,"react":"CwoHg3"}],26:[function(require,module,exports){ +/** + * MUI React select module + * @module react/select + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var _forms = require('../js/lib/forms'); + +var formlib = babelHelpers.interopRequireWildcard(_forms); + +var _jqLite = require('../js/lib/jqLite'); + +var jqLite = babelHelpers.interopRequireWildcard(_jqLite); + +var _util = require('../js/lib/util'); + +var util = babelHelpers.interopRequireWildcard(_util); + +var _helpers = require('./_helpers'); + +var PropTypes = _react2.default.PropTypes; + +/** + * Select constructor + * @class + */ + +var Select = function (_React$Component) { + babelHelpers.inherits(Select, _React$Component); + + function Select(props) { + babelHelpers.classCallCheck(this, Select); + + + // warn if value defined but onChange is not + + var _this = babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Select).call(this, props)); + + _this.state = { + showMenu: false + }; + if (props.readOnly === false && props.value !== undefined && props.onChange === null) { + util.raiseError(_helpers.controlledMessage, true); + } + + _this.state.value = props.value; + + // bind callback function + var cb = util.callback; + _this.hideMenuCB = cb(_this, 'hideMenu'); + _this.onInnerChangeCB = cb(_this, 'onInnerChange'); + _this.onInnerClickCB = cb(_this, 'onInnerClick'); + _this.onInnerFocusCB = cb(_this, 'onInnerFocus'); + _this.onInnerMouseDownCB = cb(_this, 'onInnerMouseDown'); + _this.onKeydownCB = cb(_this, 'onKeydown'); + _this.onMenuChangeCB = cb(_this, 'onMenuChange'); + _this.onOuterFocusCB = cb(_this, 'onOuterFocus'); + _this.onOuterBlurCB = cb(_this, 'onOuterBlur'); + return _this; + } + + babelHelpers.createClass(Select, [{ + key: 'componentDidMount', + value: function componentDidMount() { + // disable MUI js + this.refs.selectEl._muiSelect = true; + + // make wrapper element focusable (to enable Firefox bugfix) + this.refs.wrapperEl.tabIndex = -1; + + // handle autofocus + if (this.props.autoFocus) this.refs.wrapperEl.focus(); + } + }, { + key: 'componentWillReceiveProps', + value: function componentWillReceiveProps(nextProps) { + this.setState({ value: nextProps.value }); + } + }, { + key: 'onInnerMouseDown', + value: function onInnerMouseDown(ev) { + if (ev.button !== 0 || this.props.useDefault === true) return; + ev.preventDefault(); + } + }, { + key: 'onInnerChange', + value: function onInnerChange(ev) { + var value = ev.target.value; + this.setState({ value: value }); + + var fn = this.props.onChange; + if (fn) fn(value); + } + }, { + key: 'onInnerClick', + value: function onInnerClick(ev) { + if (ev.button !== 0) return; // only left clicks + this.showMenu(); + } + }, { + key: 'onInnerFocus', + value: function onInnerFocus(ev) { + var _this2 = this; + + // check flag + if (this.props.useDefault === true) return; + + // defer focus to parent + setTimeout(function () { + _this2.refs.wrapperEl.focus(); + }, 0); + } + }, { + key: 'onOuterFocus', + value: function onOuterFocus(ev) { + // ignore focus on inner element (react artifact) + if (ev.target !== this.refs.wrapperEl) return; + + // disable tabfocus on inner element + var selectEl = this.refs.selectEl; + selectEl._muiOrigIndex = selectEl.tabIndex; + selectEl.tabIndex = -1; + + // firefox bugfix + if (selectEl.disabled) return this.refs.wrapperEl.blur(); + + // attach keydown handler + jqLite.on(document, 'keydown', this.onKeydownCB); + } + }, { + key: 'onOuterBlur', + value: function onOuterBlur(ev) { + // ignore blur on inner element + if (ev.target !== this.refs.wrapperEl) return; + + // restore tab focus on inner element + var selectEl = this.refs.selectEl; + selectEl.tabIndex = selectEl._muiOrigIndex; + + // remove keydown handler + jqLite.off(document, 'keydown', this.onKeydownCB); + } + }, { + key: 'onKeydown', + value: function onKeydown(ev) { + // spacebar, down, up + if (ev.keyCode === 32 || ev.keyCode === 38 || ev.keyCode === 40) { + // prevent win scroll + ev.preventDefault(); + + if (this.refs.selectEl.disabled !== true) this.showMenu(); + } + } + }, { + key: 'showMenu', + value: function showMenu() { + // check useDefault flag + if (this.props.useDefault === true) return; + + // add scroll lock + util.enableScrollLock(); + + // add event listeners + jqLite.on(window, 'resize', this.hideMenuCB); + jqLite.on(document, 'click', this.hideMenuCB); + + // re-draw + this.setState({ showMenu: true }); + } + }, { + key: 'hideMenu', + value: function hideMenu() { + // remove scroll lock + util.disableScrollLock(); + + // remove event listeners + jqLite.off(window, 'resize', this.hideMenuCB); + jqLite.off(document, 'click', this.hideMenuCB); + + // re-draw + this.setState({ showMenu: false }); + + // refocus + this.refs.selectEl.focus(); + } + }, { + key: 'onMenuChange', + value: function onMenuChange(value) { + if (this.props.readOnly === true) return; + + this.setState({ value: value }); + + // execute onChange method + var fn = this.props.onChange; + if (fn) fn(value); + } + }, { + key: 'render', + value: function render() { + var menuElem = void 0; + + if (this.state.showMenu) { + menuElem = _react2.default.createElement(Menu, { + optionEls: this.refs.selectEl.children, + wrapperEl: this.refs.wrapperEl, + onChange: this.onMenuChangeCB, + onClose: this.hideMenuCB + }); + } + + var _props = this.props; + var children = _props.children; + var onChange = _props.onChange; + var other = babelHelpers.objectWithoutProperties(_props, ['children', 'onChange']); + + + return _react2.default.createElement( + 'div', + babelHelpers.extends({}, other, { + ref: 'wrapperEl', + className: 'mui-select ' + this.props.className, + onFocus: this.onOuterFocusCB, + onBlur: this.onOuterBlurCB + }), + _react2.default.createElement( + 'select', + { + ref: 'selectEl', + name: this.props.name, + value: this.state.value, + defaultValue: this.props.defaultValue, + disabled: this.props.disabled, + multiple: this.props.multiple, + readOnly: this.props.readOnly, + required: this.props.required, + onChange: this.onInnerChangeCB, + onMouseDown: this.onInnerMouseDownCB, + onClick: this.onInnerClickCB, + onFocus: this.onInnerFocusCB + }, + this.props.children + ), + menuElem + ); + } + }]); + return Select; +}(_react2.default.Component); + +/** + * Menu constructor + * @class + */ + + +Select.propTypes = { + name: PropTypes.string, + value: PropTypes.string, + defaultValue: PropTypes.string, + autoFocus: PropTypes.bool, + disabled: PropTypes.bool, + multiple: PropTypes.bool, + readOnly: PropTypes.bool, + required: PropTypes.bool, + useDefault: PropTypes.bool, + onChange: PropTypes.func +}; +Select.defaultProps = { + className: '', + name: null, + autoFocus: false, + disabled: false, + multiple: false, + readOnly: false, + required: false, + useDefault: false, + onChange: null +}; + +var Menu = function (_React$Component2) { + babelHelpers.inherits(Menu, _React$Component2); + + function Menu(props) { + babelHelpers.classCallCheck(this, Menu); + + var _this3 = babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Menu).call(this, props)); + + _this3.state = { + origIndex: null, + currentIndex: null + }; + + + _this3.onKeydownCB = util.callback(_this3, 'onKeydown'); + return _this3; + } + + babelHelpers.createClass(Menu, [{ + key: 'componentWillMount', + value: function componentWillMount() { + var optionEls = this.props.optionEls, + m = optionEls.length, + selectedPos = 0, + i = void 0; + + // get current selected position + for (i = m - 1; i > -1; i--) { + if (optionEls[i].selected) selectedPos = i; + }this.setState({ origIndex: selectedPos, currentIndex: selectedPos }); + } + }, { + key: 'componentDidMount', + value: function componentDidMount() { + // blur active element (IE10 bugfix) + this.blurTimer = setTimeout(function () { + var el = document.activeElement; + if (el.nodeName.toLowerCase() !== 'body') el.blur(); + }, 0); + + // set position + var props = formlib.getMenuPositionalCSS(this.props.wrapperEl, this.props.optionEls.length, this.state.currentIndex); + + var el = this.refs.wrapperEl; + jqLite.css(el, props); + jqLite.scrollTop(el, props.scrollTop); + + // attach keydown handler + jqLite.on(document, 'keydown', this.onKeydownCB); + } + }, { + key: 'componentWillUnmount', + value: function componentWillUnmount() { + // clear timer + clearTimeout(this.blurTimer); + + // remove keydown handler + jqLite.off(document, 'keydown', this.onKeydownCB); + } + }, { + key: 'onClick', + value: function onClick(pos, ev) { + // don't allow events to bubble + ev.stopPropagation(); + this.selectAndDestroy(pos); + } + }, { + key: 'onKeydown', + value: function onKeydown(ev) { + var keyCode = ev.keyCode; + + // tab + if (keyCode === 9) return this.destroy(); + + // escape | up | down | enter + if (keyCode === 27 || keyCode === 40 || keyCode === 38 || keyCode === 13) { + ev.preventDefault(); + } + + if (keyCode === 27) this.destroy();else if (keyCode === 40) this.increment();else if (keyCode === 38) this.decrement();else if (keyCode === 13) this.selectAndDestroy(); + } + }, { + key: 'increment', + value: function increment() { + if (this.state.currentIndex === this.props.optionEls.length - 1) { + return; + } + + this.setState({ currentIndex: this.state.currentIndex + 1 }); + } + }, { + key: 'decrement', + value: function decrement() { + if (this.state.currentIndex === 0) return; + this.setState({ currentIndex: this.state.currentIndex - 1 }); + } + }, { + key: 'selectAndDestroy', + value: function selectAndDestroy(pos) { + pos = pos === undefined ? this.state.currentIndex : pos; + + // handle onChange + if (pos !== this.state.origIndex) { + this.props.onChange(this.props.optionEls[pos].value); + } + + // close menu + this.destroy(); + } + }, { + key: 'destroy', + value: function destroy() { + this.props.onClose(); + } + }, { + key: 'render', + value: function render() { + var menuItems = [], + optionEls = this.props.optionEls, + m = optionEls.length, + optionEl = void 0, + cls = void 0, + i = void 0; + + // define menu items + for (i = 0; i < m; i++) { + cls = i === this.state.currentIndex ? 'mui--is-selected' : ''; + + menuItems.push(_react2.default.createElement( + 'div', + { + key: i, + className: cls, + onClick: this.onClick.bind(this, i) + }, + optionEls[i].textContent + )); + } + + return _react2.default.createElement( + 'div', + { ref: 'wrapperEl', className: 'mui-select__menu' }, + menuItems + ); + } + }]); + return Menu; +}(_react2.default.Component); + +/** Define module API */ + + +Menu.defaultProps = { + optionEls: [], + wrapperEl: null, + onChange: null, + onClose: null +}; +exports.default = Select; +module.exports = exports['default']; + +},{"../js/lib/forms":3,"../js/lib/jqLite":4,"../js/lib/util":5,"./_helpers":6,"react":"CwoHg3"}],27:[function(require,module,exports){ +module.exports=require(9) +},{"react":"CwoHg3"}],28:[function(require,module,exports){ +/** + * MUI React tabs module + * @module react/tabs + */ +/* jshint quotmark:false */ +// jscs:disable validateQuoteMarks + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var _tab = require('./tab'); + +var _tab2 = babelHelpers.interopRequireDefault(_tab); + +var _util = require('../js/lib/util'); + +var util = babelHelpers.interopRequireWildcard(_util); + + +var PropTypes = _react2.default.PropTypes, + tabsBarClass = 'mui-tabs__bar', + tabsBarJustifiedClass = 'mui-tabs__bar--justified', + tabsPaneClass = 'mui-tabs__pane', + isActiveClass = 'mui--is-active'; + +/** + * Tabs constructor + * @class + */ + +var Tabs = function (_React$Component) { + babelHelpers.inherits(Tabs, _React$Component); + + function Tabs(props) { + babelHelpers.classCallCheck(this, Tabs); + + var _this = babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Tabs).call(this, props)); + + _this.state = { currentSelectedIndex: props.initialSelectedIndex }; + return _this; + } + + babelHelpers.createClass(Tabs, [{ + key: 'onClick', + value: function onClick(i, tab, ev) { + if (i !== this.state.currentSelectedIndex) { + this.setState({ currentSelectedIndex: i }); + + // onActive callback + if (tab.props.onActive) tab.props.onActive(tab); + + // onChange callback + if (this.props.onChange) { + this.props.onChange(i, tab.props.value, tab, ev); + } + } + } + }, { + key: 'render', + value: function render() { + var _props = this.props; + var children = _props.children; + var other = babelHelpers.objectWithoutProperties(_props, ['children']); + + + var tabEls = [], + paneEls = [], + m = children.length, + selectedIndex = this.state.currentSelectedIndex % m, + isActive = void 0, + item = void 0, + cls = void 0, + i = void 0; + + for (i = 0; i < m; i++) { + item = children[i]; + + // only accept MUITab elements + if (item.type !== _tab2.default) util.raiseError('Expecting MUITab React Element'); + + isActive = i === selectedIndex ? true : false; + + // tab element + tabEls.push(_react2.default.createElement( + 'li', + { key: i, className: isActive ? isActiveClass : '' }, + _react2.default.createElement( + 'a', + { onClick: this.onClick.bind(this, i, item) }, + item.props.label + ) + )); + + // pane element + cls = tabsPaneClass + ' '; + if (isActive) cls += isActiveClass; + + paneEls.push(_react2.default.createElement( + 'div', + { key: i, className: cls }, + item.props.children + )); + } + + cls = tabsBarClass; + if (this.props.justified) cls += ' ' + tabsBarJustifiedClass; + + return _react2.default.createElement( + 'div', + other, + _react2.default.createElement( + 'ul', + { className: cls }, + tabEls + ), + paneEls + ); + } + }]); + return Tabs; +}(_react2.default.Component); + +/** Define module API */ + + +Tabs.propTypes = { + initialSelectedIndex: PropTypes.number, + justified: PropTypes.bool, + onChange: PropTypes.func +}; +Tabs.defaultProps = { + className: '', + initialSelectedIndex: 0, + justified: false, + onChange: null +}; +exports.default = Tabs; +module.exports = exports['default']; + +},{"../js/lib/util":5,"./tab":9,"react":"CwoHg3"}],29:[function(require,module,exports){ +/** + * MUI React Textarea Component + * @module react/textarea + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var _textField = require('./text-field'); + +var PropTypes = _react2.default.PropTypes; + +/** + * Textarea constructor + * @class + */ + +var Textarea = function (_React$Component) { + babelHelpers.inherits(Textarea, _React$Component); + + function Textarea() { + babelHelpers.classCallCheck(this, Textarea); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Textarea).apply(this, arguments)); + } + + babelHelpers.createClass(Textarea, [{ + key: 'render', + value: function render() { + return _react2.default.createElement(_textField.TextField, this.props); + } + }]); + return Textarea; +}(_react2.default.Component); + +Textarea.propTypes = { + rows: PropTypes.number +}; +Textarea.defaultProps = { + type: 'textarea', + rows: 2 +}; +exports.default = Textarea; +module.exports = exports['default']; + +},{"./text-field":10,"react":"CwoHg3"}]},{},[1]) \ No newline at end of file diff --git a/platforms/ios/www/libs/mui/packages/cdn/react/mui-react.min.js b/platforms/ios/www/libs/mui/packages/cdn/react/mui-react.min.js new file mode 100644 index 0000000..0eb3f23 --- /dev/null +++ b/platforms/ios/www/libs/mui/packages/cdn/react/mui-react.min.js @@ -0,0 +1,2 @@ +!function(e){var t=e.babelHelpers={};t.classCallCheck=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},t.createClass=function(){function e(e,t){for(var r=0;r=0||Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=e[n]);return r},t.possibleConstructorReturn=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}}("undefined"==typeof global?self:global),function e(t,r,n){function l(o,a){if(!r[o]){if(!t[o]){var i="function"==typeof require&&require;if(!a&&i)return i(o,!0);if(s)return s(o,!0);throw new Error("Cannot find module '"+o+"'")}var u=r[o]={exports:{}};t[o][0].call(u.exports,function(e){var r=t[o][1][e];return l(r?r:e)},u,u.exports,e,t,r,n)}return r[o].exports}for(var s="function"==typeof require&&require,o=0;op&&(b=a+(r+1)*o-(-1*n+l+s),h=t*o+2*a-f,v=Math.min(b,h)),{height:f+"px",top:n+"px",scrollTop:v}}var l=15,s=32,o=42,a=8;t.exports={getMenuPositionalCSS:n}},{}],4:[function(e,t,r){"use strict";function n(e,t){if(t&&e.setAttribute){for(var r,n=h(e),l=t.split(" "),s=0;s-1:!1}function o(e){if(void 0===e)return"undefined";var t=Object.prototype.toString.call(e);if(0===t.indexOf("[object "))return t.slice(8,-1).toLowerCase();throw new Error("MUI: Could not understand type: "+t)}function a(e,t,r,n){n=void 0===n?!1:n,e.addEventListener(t,r,n);var l=e._muiEventCache=e._muiEventCache||{};l[t]=l[t]||[],l[t].push([r,n])}function i(e,t,r,n){n=void 0===n?!1:n;var l,s,o=e._muiEventCache=e._muiEventCache||{},a=o[t]||[];for(s=a.length;s--;)l=a[s],(void 0===r||l[0]===r&&l[1]===n)&&(a.splice(s,1),e.removeEventListener(t,l[0],l[1]))}function u(e,t,r,n){a(e,t,function l(n){r&&r.apply(this,arguments),i(e,t,l)},n)}function c(e,t){var r=window;if(void 0===t){if(e===r){var n=document.documentElement;return(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}return e.scrollLeft}e===r?r.scrollTo(t,p(r)):e.scrollLeft=t}function p(e,t){var r=window;if(void 0===t){if(e===r){var n=document.documentElement;return(r.pageYOffset||n.scrollTop)-(n.clientTop||0)}return e.scrollTop}e===r?r.scrollTo(c(r),t):e.scrollTop=t}function d(e){var t=window,r=e.getBoundingClientRect(),n=p(t),l=c(t);return{top:r.top+n,left:r.left+l,height:r.height,width:r.width}}function f(e){var t=!1,r=!0,n=document,l=n.defaultView,s=n.documentElement,o=n.addEventListener?"addEventListener":"attachEvent",a=n.addEventListener?"removeEventListener":"detachEvent",i=n.addEventListener?"":"on",u=function d(r){"readystatechange"==r.type&&"complete"!=n.readyState||(("load"==r.type?l:n)[a](i+r.type,d,!1),!t&&(t=!0)&&e.call(l,r.type||r))},c=function f(){try{s.doScroll("left")}catch(e){return void setTimeout(f,50)}u("poll")};if("complete"==n.readyState)e.call(l,"lazy");else{if(n.createEventObject&&s.doScroll){try{r=!l.frameElement}catch(p){}r&&c()}n[o](i+"DOMContentLoaded",u,!1),n[o](i+"readystatechange",u,!1),l[o](i+"load",u,!1)}}function b(e,t){if(t&&e.setAttribute){for(var r,n=h(e),l=t.split(" "),s=0;s=0;)n=n.replace(" "+r+" "," ");e.setAttribute("class",n.trim())}}function h(e){var t=(e.getAttribute("class")||"").replace(/[\n\t]/g,"");return" "+t+" "}function v(e){return e.replace(y,function(e,t,r,n){return n?r.toUpperCase():r}).replace(g,"Moz$1")}function m(e,t,r){var n;return n=r.getPropertyValue(t),""!==n||e.ownerDocument||(n=e.style[v(t)]),n}var C,y=/([\:\-\_]+(.))/g,g=/^moz([A-Z])/;C={multiple:!0,selected:!0,checked:!0,disabled:!0,readonly:!0,required:!0,open:!0},t.exports={addClass:n,css:l,hasClass:s,off:i,offset:d,on:a,one:u,ready:f,removeClass:b,type:o,scrollLeft:c,scrollTop:p}},{}],5:[function(e,t,r){"use strict";function n(){var e=window;if(v.debug&&"undefined"!=typeof e.console)try{e.console.log.apply(e.console,arguments)}catch(t){var r=Array.prototype.slice.call(arguments);e.console.log(r.join("\n"))}}function l(e){var t,r=document;t=r.head||r.getElementsByTagName("head")[0]||r.documentElement;var n=r.createElement("style");return n.type="text/css",n.styleSheet?n.styleSheet.cssText=e:n.appendChild(r.createTextNode(e)),t.insertBefore(n,t.firstChild),n}function s(e,t){if(!t)throw new Error("MUI: "+e);"undefined"!=typeof console&&console.error("MUI Warning: "+e)}function o(e){if(C.push(e),void 0===C._initialized){var t=document;m.on(t,"animationstart",a),m.on(t,"mozAnimationStart",a),m.on(t,"webkitAnimationStart",a),C._initialized=!0}}function a(e){if("mui-node-inserted"===e.animationName)for(var t=e.target,r=C.length-1;r>=0;r--)C[r](t)}function i(e){var t="";for(var r in e)t+=e[r]?r+" ":"";return t.trim()}function u(){if(void 0!==h)return h;var e=document.createElement("x");return e.style.cssText="pointer-events:auto",h="auto"===e.style.pointerEvents}function c(e,t){return function(){e[t].apply(e,arguments)}}function p(e,t,r,n,l){var s,o=document.createEvent("HTMLEvents"),r=void 0!==r?r:!0,n=void 0!==n?n:!0;if(o.initEvent(t,r,n),l)for(s in l)o[s]=l[s];return e&&e.dispatchEvent(o),o}function d(){if(y+=1,1===y){var e=window,t=document;b={left:m.scrollLeft(e),top:m.scrollTop(e)},m.addClass(t.body,g),e.scrollTo(b.left,b.top)}}function f(){if(0!==y&&(y-=1,0===y)){var e=window,t=document;m.removeClass(t.body,g),e.scrollTo(b.left,b.top)}}var b,h,v=e("../config"),m=e("./jqLite"),C=[],y=0,g="mui-body--scroll-lock";t.exports={callback:c,classNames:i,disableScrollLock:f,dispatchEvent:p,enableScrollLock:d,log:n,loadStyle:l,onNodeInserted:o,raiseError:s,supportsPointerEvents:u}},{"../config":2,"./jqLite":4}],6:[function(e,t,r){"use strict";var n="You provided a `value` prop to a form field without an `OnChange` handler. Please see React documentation on controlled components";t.exports={controlledMessage:n}},{}],7:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=e("../js/lib/jqLite"),o=babelHelpers.interopRequireWildcard(s),a=e("../js/lib/util"),i=(babelHelpers.interopRequireWildcard(a),l["default"].PropTypes),u="mui-btn",c="mui-ripple-effect",p={color:1,variant:1,size:1},d=function(e){function t(){var e,r,n,l;babelHelpers.classCallCheck(this,t);for(var s=arguments.length,o=Array(s),a=0;s>a;a++)o[a]=arguments[a];return r=n=babelHelpers.possibleConstructorReturn(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(o))),n.state={ripples:{}},l=r,babelHelpers.possibleConstructorReturn(n,l)}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentDidMount",value:function(){var e=this.refs.buttonEl;e._muiDropdown=!0,e._muiRipple=!0}},{key:"onClick",value:function(e){var t=this.props.onClick;t&&t(e)}},{key:"onMouseDown",value:function(e){var t=o.offset(this.refs.buttonEl),r=t.height;"fab"===this.props.variant&&(r/=2);var n=this.state.ripples,l=Date.now();n[l]={xPos:e.pageX-t.left,yPos:e.pageY-t.top,diameter:r,teardownFn:this.teardownRipple.bind(this,l)},this.setState({ripples:n})}},{key:"onTouchStart",value:function(e){}},{key:"teardownRipple",value:function(e){var t=this.state.ripples;delete t[e],this.setState({ripples:t})}},{key:"render",value:function(){var e=u,t=void 0,r=void 0,n=this.state.ripples;for(t in p)r=this.props[t],"default"!==r&&(e+=" "+u+"--"+r);return l["default"].createElement("button",babelHelpers["extends"]({},this.props,{ref:"buttonEl",className:e+" "+this.props.className,onClick:this.onClick.bind(this),onMouseDown:this.onMouseDown.bind(this)}),this.props.children,Object.keys(n).map(function(e,t){var r=n[e];return l["default"].createElement(f,{key:e,xPos:r.xPos,yPos:r.yPos,diameter:r.diameter,onTeardown:r.teardownFn})}))}}]),t}(l["default"].Component);d.propTypes={color:i.oneOf(["default","primary","danger","dark","accent"]),disabled:i.bool,size:i.oneOf(["default","small","large"]),type:i.oneOf(["submit","button"]),variant:i.oneOf(["default","flat","raised","fab"]),onClick:i.func},d.defaultProps={className:"",color:"default",disabled:!1,size:"default",type:null,variant:"default",onClick:null};var f=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentDidMount",value:function(){var e=this;this.teardownTimer=setTimeout(function(){var t=e.props.onTeardown;t&&t()},2e3)}},{key:"componentWillUnmount",value:function(){clearTimeout(this.teardownTimer)}},{key:"render",value:function(){var e=this.props.diameter,t=e/2,r={height:e,width:e,top:this.props.yPos-t||0,left:this.props.xPos-t||0};return l["default"].createElement("div",{className:c,style:r})}}]),t}(l["default"].Component);f.propTypes={xPos:i.number,yPos:i.number,diameter:i.number,onTeardown:i.func},f.defaultProps={xPos:0,yPos:0,diameter:0,onTeardown:null},r["default"]=d,t.exports=r["default"]},{"../js/lib/jqLite":4,"../js/lib/util":5,react:"CwoHg3"}],8:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e=this.props,t=(e.children,babelHelpers.objectWithoutProperties(e,["children"]));return l["default"].createElement("span",babelHelpers["extends"]({},t,{className:"mui-caret "+this.props.className}))}}]),t}(l["default"].Component);s.defaultProps={className:""},r["default"]=s,t.exports=r["default"]},{react:"CwoHg3"}],9:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=l["default"].PropTypes,o=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){return null}}]),t}(l["default"].Component);o.propTypes={value:s.any,label:s.string,onActive:s.func},o.defaultProps={value:null,label:"",onActive:null},r["default"]=o,t.exports=r["default"]},{react:"CwoHg3"}],10:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.TextField=void 0;var n=window.React,l=babelHelpers.interopRequireDefault(n),s=e("../js/lib/util"),o=babelHelpers.interopRequireWildcard(s),a=e("./_helpers"),i=l["default"].PropTypes,u=function(e){function t(e){babelHelpers.classCallCheck(this,t);var r=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e)),n=e.value,l=n||e.defaultValue;r.state={innerValue:l,isDirty:Boolean(l)},void 0!==n&&null===e.onChange&&o.raiseError(a.controlledMessage,!0);var s=o.callback;return r.onChangeCB=s(r,"onChange"),r.onFocusCB=s(r,"onFocus"),r}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentDidMount",value:function(){this.refs.inputEl._muiTextfield=!0}},{key:"onChange",value:function(e){this.setState({innerValue:e.target.value});var t=this.props.onChange;t&&t(e)}},{key:"onFocus",value:function(e){this.setState({isDirty:!0})}},{key:"triggerFocus",value:function(){this.refs.inputEl.focus()}},{key:"render",value:function(){var e={},t=Boolean(this.state.innerValue),r=void 0;e["mui--is-empty"]=!t,e["mui--is-not-empty"]=t,e["mui--is-dirty"]=this.state.isDirty,e["mui--is-invalid"]=this.props.invalid,e=o.classNames(e);var n=this.props,s=(n.children,babelHelpers.objectWithoutProperties(n,["children"]));return r="textarea"===this.props.type?l["default"].createElement("textarea",babelHelpers["extends"]({},s,{ref:"inputEl",className:e,rows:this.props.rows,placeholder:this.props.hint,value:this.props.value,defaultValue:this.props.defaultValue,autoFocus:this.props.autoFocus,onChange:this.onChangeCB,onFocus:this.onFocusCB,required:this.props.required})):l["default"].createElement("input",babelHelpers["extends"]({},s,{ref:"inputEl",className:e,type:this.props.type,value:this.props.value,defaultValue:this.props.defaultValue,placeholder:this.props.hint,autoFocus:this.props.autofocus,onChange:this.onChangeCB,onFocus:this.onFocusCB,required:this.props.required}))}}]),t}(l["default"].Component);u.propTypes={hint:i.string,value:i.string,type:i.string,autoFocus:i.bool,onChange:i.func},u.defaultProps={hint:null,type:null,autoFocus:!1,onChange:null};var c=function(e){function t(){var e,r,n,l;babelHelpers.classCallCheck(this,t);for(var s=arguments.length,o=Array(s),a=0;s>a;a++)o[a]=arguments[a];return r=n=babelHelpers.possibleConstructorReturn(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(o))),n.state={style:{}},l=r,babelHelpers.possibleConstructorReturn(n,l)}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentDidMount",value:function(){var e=this;this.styleTimer=setTimeout(function(){var t=".15s ease-out",r=void 0;r={transition:t,WebkitTransition:t,MozTransition:t,OTransition:t,msTransform:t},e.setState({style:r})},150)}},{key:"componentWillUnmount",value:function(){clearTimeout(this.styleTimer)}},{key:"render",value:function(){return l["default"].createElement("label",{style:this.state.style,onClick:this.props.onClick},this.props.text)}}]),t}(l["default"].Component);c.defaultProps={text:"",onClick:null};var p=function(e){function t(e){babelHelpers.classCallCheck(this,t);var r=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e));return r.onClickCB=o.callback(r,"onClick"),r}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"onClick",value:function(e){o.supportsPointerEvents()===!1&&(e.target.style.cursor="text",this.refs.inputEl.triggerFocus())}},{key:"render",value:function(){var e={},t=void 0;return this.props.label.length&&(t=l["default"].createElement(c,{text:this.props.label,onClick:this.onClickCB})),e["mui-textfield"]=!0,e["mui-textfield--float-label"]=this.props.floatingLabel,e=o.classNames(e),l["default"].createElement("div",{className:e},l["default"].createElement(u,babelHelpers["extends"]({ref:"inputEl"},this.props)),t)}}]),t}(l["default"].Component);p.propTypes={label:i.string,floatingLabel:i.bool},p.defaultProps={label:"",floatingLabel:!1},r.TextField=p},{"../js/lib/util":5,"./_helpers":6,react:"CwoHg3"}],11:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){return l["default"].createElement("div",babelHelpers["extends"]({},this.props,{className:"mui-appbar "+this.props.className}),this.props.children)}}]),t}(l["default"].Component);s.defaultProps={className:""},r["default"]=s,t.exports=r["default"]},{react:"CwoHg3"}],12:[function(e,t,r){t.exports=e(7)},{"../js/lib/jqLite":4,"../js/lib/util":5,react:"CwoHg3"}],13:[function(e,t,r){t.exports=e(8)},{react:"CwoHg3"}],14:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=e("../js/lib/util"),o=(babelHelpers.interopRequireWildcard(s),e("./_helpers"),l["default"].PropTypes),a=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e=this.props,t=(e.children,e.onChange,babelHelpers.objectWithoutProperties(e,["children","onChange"]));return l["default"].createElement("div",babelHelpers["extends"]({},t,{className:"mui-checkbox "+this.props.className}),l["default"].createElement("label",null,l["default"].createElement("input",{ref:"inputEl",type:"checkbox",name:this.props.name,value:this.props.value,checked:this.props.checked,defaultChecked:this.props.defaultChecked,disabled:this.props.disabled,onChange:this.props.onChange}),this.props.label))}}]),t}(l["default"].Component);a.propTypes={name:o.string,label:o.string,value:o.string,checked:o.bool,defaultChecked:o.bool,disabled:o.bool,onChange:o.func},a.defaultProps={className:"",name:null,label:null,disabled:!1,onChange:null},r["default"]=a,t.exports=r["default"]},{"../js/lib/util":5,"./_helpers":6,react:"CwoHg3"}],15:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=e("../js/lib/util"),o=babelHelpers.interopRequireWildcard(s),a=["xs","sm","md","lg","xl"],i=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"defaultProps",value:function(){var e={className:""},t=void 0,r=void 0;for(t=a.length-1;t>-1;t--)r=a[t],e[r]=null,e[r+"-offset"]=null;return e}},{key:"render",value:function(){var e={},t=void 0,r=void 0,n=void 0,s=void 0;for(t=a.length-1;t>-1;t--)r=a[t],s="mui-col-"+r,n=this.props[r],n&&(e[s+"-"+n]=!0),n=this.props[r+"-offset"],n&&(e[s+"-offset-"+n]=!0);return e=o.classNames(e),l["default"].createElement("div",babelHelpers["extends"]({},this.props,{className:e+" "+this.props.className}),this.props.children)}}]),t}(l["default"].Component);r["default"]=i,t.exports=r["default"]},{"../js/lib/util":5,react:"CwoHg3"}],16:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e="mui-container";return this.props.fluid&&(e+="-fluid"),l["default"].createElement("div",babelHelpers["extends"]({},this.props,{className:e+" "+this.props.className}),this.props.children)}}]),t}(l["default"].Component);s.propTypes={fluid:l["default"].PropTypes.bool},s.defaultProps={className:"",fluid:!1},r["default"]=s,t.exports=r["default"]},{react:"CwoHg3"}],17:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e=this.props,t=(e.children,babelHelpers.objectWithoutProperties(e,["children"]));return l["default"].createElement("div",babelHelpers["extends"]({},t,{className:"mui-divider "+this.props.className}))}}]),t}(l["default"].Component);s.defaultProps={className:""},r["default"]=s,t.exports=r["default"]},{react:"CwoHg3"}],18:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=e("../js/lib/util"),o=babelHelpers.interopRequireWildcard(s),a=l["default"].PropTypes,i=function(e){function t(e){babelHelpers.classCallCheck(this,t);var r=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e));return r.onClickCB=o.callback(r,"onClick"),r}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"onClick",value:function(e){this.props.onClick&&this.props.onClick(this,e)}},{key:"render",value:function(){var e=this.props,t=e.children,r=(e.onClick,babelHelpers.objectWithoutProperties(e,["children","onClick"]));return l["default"].createElement("li",r,l["default"].createElement("a",{href:this.props.link,target:this.props.target,"data-mui-value":this.props.value,onClick:this.onClickCB},t))}}]),t}(l["default"].Component);i.propTypes={link:a.string,target:a.string,onClick:a.func},r["default"]=i,t.exports=r["default"]},{"../js/lib/util":5,react:"CwoHg3"}],19:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=e("./button"),o=babelHelpers.interopRequireDefault(s),a=e("./caret"),i=babelHelpers.interopRequireDefault(a),u=e("../js/lib/jqLite"),c=babelHelpers.interopRequireWildcard(u),p=e("../js/lib/util"),d=babelHelpers.interopRequireWildcard(p),f=l["default"].PropTypes,b="mui-dropdown",h="mui-dropdown__menu",v="mui--is-open",m="mui-dropdown__menu--right",C=function(e){function t(e){babelHelpers.classCallCheck(this,t);var r=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e));r.state={opened:!1,menuTop:0};var n=d.callback;return r.selectCB=n(r,"select"),r.onClickCB=n(r,"onClick"),r.onOutsideClickCB=n(r,"onOutsideClick"),r}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentWillMount",value:function(){document.addEventListener("click",this.onOutsideClickCB)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("click",this.onOutsideClickCB)}},{key:"onClick",value:function(e){if(0===e.button&&!this.props.disabled&&!e.defaultPrevented){this.toggle();var t=this.props.onClick;t&&t(e)}}},{key:"toggle",value:function(){return this.props.children?void(this.state.opened?this.close():this.open()):d.raiseError("Dropdown menu element not found")}},{key:"open",value:function(){var e=this.refs.wrapperEl.getBoundingClientRect(),t=void 0;t=this.refs.button.refs.buttonEl.getBoundingClientRect(),this.setState({opened:!0,menuTop:t.top-e.top+t.height})}},{key:"close",value:function(){this.setState({opened:!1})}},{key:"select",value:function(e){this.props.onSelect&&"A"===e.target.tagName&&this.props.onSelect(e.target.getAttribute("data-mui-value")),e.defaultPrevented||this.close()}},{key:"onOutsideClick",value:function(e){var t=this.refs.wrapperEl.contains(e.target);t||this.close()}},{key:"render",value:function(){var e=void 0,t=void 0,r=void 0;if(r="string"===c.type(this.props.label)?l["default"].createElement("span",null,this.props.label," ",l["default"].createElement(i["default"],null)):this.props.label,e=l["default"].createElement(o["default"],{ref:"button",type:"button",onClick:this.onClickCB,color:this.props.color,variant:this.props.variant,size:this.props.size,disabled:this.props.disabled},r),this.state.opened){var n={};n[h]=!0,n[v]=this.state.opened,n[m]="right"===this.props.alignMenu,n=d.classNames(n),t=l["default"].createElement("ul",{ref:"menuEl",className:n,style:{top:this.state.menuTop},onClick:this.selectCB},this.props.children)}var s=this.props,a=s.className,u=(s.children,s.onClick,babelHelpers.objectWithoutProperties(s,["className","children","onClick"]));return l["default"].createElement("div",babelHelpers["extends"]({},u,{ref:"wrapperEl",className:b+" "+a}),e,t)}}]),t}(l["default"].Component);C.propTypes={color:f.oneOf(["default","primary","danger","dark","accent"]),variant:f.oneOf(["default","flat","raised","fab"]),size:f.oneOf(["default","small","large"]),label:f.oneOfType([f.string,f.element]),alignMenu:f.oneOf(["left","right"]),onClick:f.func,onSelect:f.func,disabled:f.bool},C.defaultProps={className:"",color:"default",variant:"default",size:"default",label:"",alignMenu:"left",onClick:null,onSelect:null,disabled:!1},r["default"]=C,t.exports=r["default"]},{"../js/lib/jqLite":4,"../js/lib/util":5,"./button":7,"./caret":8,react:"CwoHg3"}],20:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e="";return this.props.inline&&(e="mui-form--inline"),l["default"].createElement("form",babelHelpers["extends"]({},this.props,{className:e+" "+this.props.className}),this.props.children)}}]),t}(l["default"].Component);s.propTypes={inline:l["default"].PropTypes.bool},s.defaultProps={className:"",inline:!1},r["default"]=s,t.exports=r["default"]},{react:"CwoHg3"}],21:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=e("./text-field"),o=l["default"].PropTypes,a=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){return l["default"].createElement(s.TextField,this.props)}}]),t}(l["default"].Component);a.propTypes={type:o.oneOf(["text","email","url","tel","password"])},a.defaultProps={type:"text"},r["default"]=a,t.exports=r["default"]},{"./text-field":10,react:"CwoHg3"}],22:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=e("../js/lib/forms"),o=(babelHelpers.interopRequireWildcard(s),e("../js/lib/jqLite")),a=(babelHelpers.interopRequireWildcard(o),e("../js/lib/util")),i=(babelHelpers.interopRequireWildcard(a),l["default"].PropTypes),u=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e=this.props,t=(e.children,babelHelpers.objectWithoutProperties(e,["children"]));return l["default"].createElement("option",babelHelpers["extends"]({},t,{value:this.props.value}),this.props.label)}}]),t}(l["default"].Component);u.propTypes={value:i.string,label:i.string},u.defaultProps={value:null,label:null},r["default"]=u,t.exports=r["default"]},{"../js/lib/forms":3,"../js/lib/jqLite":4,"../js/lib/util":5,react:"CwoHg3"}],23:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){return l["default"].createElement("div",babelHelpers["extends"]({},this.props,{className:"mui-panel "+this.props.className}),this.props.children)}}]),t}(l["default"].Component);s.defaultProps={className:""},r["default"]=s,t.exports=r["default"]},{react:"CwoHg3"}],24:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=l["default"].PropTypes,o=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e=this.props,t=(e.children,e.onChange,babelHelpers.objectWithoutProperties(e,["children","onChange"]));return l["default"].createElement("div",babelHelpers["extends"]({},t,{className:"mui-radio "+this.props.className}),l["default"].createElement("label",null,l["default"].createElement("input",{ref:"inputEl",type:"radio",name:this.props.name,value:this.props.value,checked:this.props.checked,defaultChecked:this.props.defaultChecked,disabled:this.props.disabled,onChange:this.props.onChange}),this.props.label))}}]),t}(l["default"].Component);o.propTypes={name:s.string,label:s.string,value:s.string,checked:s.bool,defaultChecked:s.bool,disabled:s.bool,onChange:s.func},o.defaultProps={className:"",name:null,label:null,disabled:!1,onChange:null},r["default"]=o,t.exports=r["default"]},{react:"CwoHg3"}],25:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=e("../js/lib/util"),o=(babelHelpers.interopRequireWildcard(s),function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){return l["default"].createElement("div",babelHelpers["extends"]({},this.props,{className:"mui-row "+this.props.className}),this.props.children)}}]),t}(l["default"].Component));o.defaultProps={className:""},r["default"]=o,t.exports=r["default"]},{"../js/lib/util":5,react:"CwoHg3"}],26:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=e("../js/lib/forms"),o=babelHelpers.interopRequireWildcard(s),a=e("../js/lib/jqLite"),i=babelHelpers.interopRequireWildcard(a),u=e("../js/lib/util"),c=babelHelpers.interopRequireWildcard(u),p=e("./_helpers"),d=l["default"].PropTypes,f=function(e){ +function t(e){babelHelpers.classCallCheck(this,t);var r=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e));r.state={showMenu:!1},e.readOnly===!1&&void 0!==e.value&&null===e.onChange&&c.raiseError(p.controlledMessage,!0),r.state.value=e.value;var n=c.callback;return r.hideMenuCB=n(r,"hideMenu"),r.onInnerChangeCB=n(r,"onInnerChange"),r.onInnerClickCB=n(r,"onInnerClick"),r.onInnerFocusCB=n(r,"onInnerFocus"),r.onInnerMouseDownCB=n(r,"onInnerMouseDown"),r.onKeydownCB=n(r,"onKeydown"),r.onMenuChangeCB=n(r,"onMenuChange"),r.onOuterFocusCB=n(r,"onOuterFocus"),r.onOuterBlurCB=n(r,"onOuterBlur"),r}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentDidMount",value:function(){this.refs.selectEl._muiSelect=!0,this.refs.wrapperEl.tabIndex=-1,this.props.autoFocus&&this.refs.wrapperEl.focus()}},{key:"componentWillReceiveProps",value:function(e){this.setState({value:e.value})}},{key:"onInnerMouseDown",value:function(e){0===e.button&&this.props.useDefault!==!0&&e.preventDefault()}},{key:"onInnerChange",value:function(e){var t=e.target.value;this.setState({value:t});var r=this.props.onChange;r&&r(t)}},{key:"onInnerClick",value:function(e){0===e.button&&this.showMenu()}},{key:"onInnerFocus",value:function(e){var t=this;this.props.useDefault!==!0&&setTimeout(function(){t.refs.wrapperEl.focus()},0)}},{key:"onOuterFocus",value:function(e){if(e.target===this.refs.wrapperEl){var t=this.refs.selectEl;return t._muiOrigIndex=t.tabIndex,t.tabIndex=-1,t.disabled?this.refs.wrapperEl.blur():void i.on(document,"keydown",this.onKeydownCB)}}},{key:"onOuterBlur",value:function(e){if(e.target===this.refs.wrapperEl){var t=this.refs.selectEl;t.tabIndex=t._muiOrigIndex,i.off(document,"keydown",this.onKeydownCB)}}},{key:"onKeydown",value:function(e){32!==e.keyCode&&38!==e.keyCode&&40!==e.keyCode||(e.preventDefault(),this.refs.selectEl.disabled!==!0&&this.showMenu())}},{key:"showMenu",value:function(){this.props.useDefault!==!0&&(c.enableScrollLock(),i.on(window,"resize",this.hideMenuCB),i.on(document,"click",this.hideMenuCB),this.setState({showMenu:!0}))}},{key:"hideMenu",value:function(){c.disableScrollLock(),i.off(window,"resize",this.hideMenuCB),i.off(document,"click",this.hideMenuCB),this.setState({showMenu:!1}),this.refs.selectEl.focus()}},{key:"onMenuChange",value:function(e){if(this.props.readOnly!==!0){this.setState({value:e});var t=this.props.onChange;t&&t(e)}}},{key:"render",value:function(){var e=void 0;this.state.showMenu&&(e=l["default"].createElement(b,{optionEls:this.refs.selectEl.children,wrapperEl:this.refs.wrapperEl,onChange:this.onMenuChangeCB,onClose:this.hideMenuCB}));var t=this.props,r=(t.children,t.onChange,babelHelpers.objectWithoutProperties(t,["children","onChange"]));return l["default"].createElement("div",babelHelpers["extends"]({},r,{ref:"wrapperEl",className:"mui-select "+this.props.className,onFocus:this.onOuterFocusCB,onBlur:this.onOuterBlurCB}),l["default"].createElement("select",{ref:"selectEl",name:this.props.name,value:this.state.value,defaultValue:this.props.defaultValue,disabled:this.props.disabled,multiple:this.props.multiple,readOnly:this.props.readOnly,required:this.props.required,onChange:this.onInnerChangeCB,onMouseDown:this.onInnerMouseDownCB,onClick:this.onInnerClickCB,onFocus:this.onInnerFocusCB},this.props.children),e)}}]),t}(l["default"].Component);f.propTypes={name:d.string,value:d.string,defaultValue:d.string,autoFocus:d.bool,disabled:d.bool,multiple:d.bool,readOnly:d.bool,required:d.bool,useDefault:d.bool,onChange:d.func},f.defaultProps={className:"",name:null,autoFocus:!1,disabled:!1,multiple:!1,readOnly:!1,required:!1,useDefault:!1,onChange:null};var b=function(e){function t(e){babelHelpers.classCallCheck(this,t);var r=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e));return r.state={origIndex:null,currentIndex:null},r.onKeydownCB=c.callback(r,"onKeydown"),r}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentWillMount",value:function(){var e=this.props.optionEls,t=e.length,r=0,n=void 0;for(n=t-1;n>-1;n--)e[n].selected&&(r=n);this.setState({origIndex:r,currentIndex:r})}},{key:"componentDidMount",value:function(){this.blurTimer=setTimeout(function(){var e=document.activeElement;"body"!==e.nodeName.toLowerCase()&&e.blur()},0);var e=o.getMenuPositionalCSS(this.props.wrapperEl,this.props.optionEls.length,this.state.currentIndex),t=this.refs.wrapperEl;i.css(t,e),i.scrollTop(t,e.scrollTop),i.on(document,"keydown",this.onKeydownCB)}},{key:"componentWillUnmount",value:function(){clearTimeout(this.blurTimer),i.off(document,"keydown",this.onKeydownCB)}},{key:"onClick",value:function(e,t){t.stopPropagation(),this.selectAndDestroy(e)}},{key:"onKeydown",value:function(e){var t=e.keyCode;return 9===t?this.destroy():(27!==t&&40!==t&&38!==t&&13!==t||e.preventDefault(),void(27===t?this.destroy():40===t?this.increment():38===t?this.decrement():13===t&&this.selectAndDestroy()))}},{key:"increment",value:function(){this.state.currentIndex!==this.props.optionEls.length-1&&this.setState({currentIndex:this.state.currentIndex+1})}},{key:"decrement",value:function(){0!==this.state.currentIndex&&this.setState({currentIndex:this.state.currentIndex-1})}},{key:"selectAndDestroy",value:function(e){e=void 0===e?this.state.currentIndex:e,e!==this.state.origIndex&&this.props.onChange(this.props.optionEls[e].value),this.destroy()}},{key:"destroy",value:function(){this.props.onClose()}},{key:"render",value:function(){var e=[],t=this.props.optionEls,r=t.length,n=void 0,s=void 0;for(s=0;r>s;s++)n=s===this.state.currentIndex?"mui--is-selected":"",e.push(l["default"].createElement("div",{key:s,className:n,onClick:this.onClick.bind(this,s)},t[s].textContent));return l["default"].createElement("div",{ref:"wrapperEl",className:"mui-select__menu"},e)}}]),t}(l["default"].Component);b.defaultProps={optionEls:[],wrapperEl:null,onChange:null,onClose:null},r["default"]=f,t.exports=r["default"]},{"../js/lib/forms":3,"../js/lib/jqLite":4,"../js/lib/util":5,"./_helpers":6,react:"CwoHg3"}],27:[function(e,t,r){t.exports=e(9)},{react:"CwoHg3"}],28:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=e("./tab"),o=babelHelpers.interopRequireDefault(s),a=e("../js/lib/util"),i=babelHelpers.interopRequireWildcard(a),u=l["default"].PropTypes,c="mui-tabs__bar",p="mui-tabs__bar--justified",d="mui-tabs__pane",f="mui--is-active",b=function(e){function t(e){babelHelpers.classCallCheck(this,t);var r=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e));return r.state={currentSelectedIndex:e.initialSelectedIndex},r}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"onClick",value:function(e,t,r){e!==this.state.currentSelectedIndex&&(this.setState({currentSelectedIndex:e}),t.props.onActive&&t.props.onActive(t),this.props.onChange&&this.props.onChange(e,t.props.value,t,r))}},{key:"render",value:function(){var e=this.props,t=e.children,r=babelHelpers.objectWithoutProperties(e,["children"]),n=[],s=[],a=t.length,u=this.state.currentSelectedIndex%a,b=void 0,h=void 0,v=void 0,m=void 0;for(m=0;a>m;m++)h=t[m],h.type!==o["default"]&&i.raiseError("Expecting MUITab React Element"),b=m===u,n.push(l["default"].createElement("li",{key:m,className:b?f:""},l["default"].createElement("a",{onClick:this.onClick.bind(this,m,h)},h.props.label))),v=d+" ",b&&(v+=f),s.push(l["default"].createElement("div",{key:m,className:v},h.props.children));return v=c,this.props.justified&&(v+=" "+p),l["default"].createElement("div",r,l["default"].createElement("ul",{className:v},n),s)}}]),t}(l["default"].Component);b.propTypes={initialSelectedIndex:u.number,justified:u.bool,onChange:u.func},b.defaultProps={className:"",initialSelectedIndex:0,justified:!1,onChange:null},r["default"]=b,t.exports=r["default"]},{"../js/lib/util":5,"./tab":9,react:"CwoHg3"}],29:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=e("./text-field"),o=l["default"].PropTypes,a=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){return l["default"].createElement(s.TextField,this.props)}}]),t}(l["default"].Component);a.propTypes={rows:o.number},a.defaultProps={type:"textarea",rows:2},r["default"]=a,t.exports=r["default"]},{"./text-field":10,react:"CwoHg3"}]},{},[1]); \ No newline at end of file diff --git a/platforms/ios/www/libs/mui/packages/cdn/webcomponents/mui-webcomponents.js b/platforms/ios/www/libs/mui/packages/cdn/webcomponents/mui-webcomponents.js new file mode 100644 index 0000000..6fe112a --- /dev/null +++ b/platforms/ios/www/libs/mui/packages/cdn/webcomponents/mui-webcomponents.js @@ -0,0 +1,1023 @@ +(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o -1); +} + + +/** + * Return the type of a variable. + * @param {} somevar - The JavaScript variable. + */ +function jqLiteType(somevar) { + // handle undefined + if (somevar === undefined) return 'undefined'; + + // handle others (of type [object ]) + var typeStr = Object.prototype.toString.call(somevar); + if (typeStr.indexOf('[object ') === 0) { + return typeStr.slice(8, -1).toLowerCase(); + } else { + throw new Error("MUI: Could not understand type: " + typeStr); + } +} + + +/** + * Attach an event handler to a DOM element + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOn(element, type, callback, useCapture) { + useCapture = (useCapture === undefined) ? false : useCapture; + + // add to DOM + element.addEventListener(type, callback, useCapture); + + // add to cache + var cache = element._muiEventCache = element._muiEventCache || {}; + cache[type] = cache[type] || []; + cache[type].push([callback, useCapture]); +} + + +/** + * Remove an event handler from a DOM element + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOff(element, type, callback, useCapture) { + useCapture = (useCapture === undefined) ? false : useCapture; + + // remove from cache + var cache = element._muiEventCache = element._muiEventCache || {}, + argsList = cache[type] || [], + args, + i; + + i = argsList.length; + while (i--) { + args = argsList[i]; + + // remove all events if callback is undefined + if (callback === undefined || + (args[0] === callback && args[1] === useCapture)) { + + // remove from cache + argsList.splice(i, 1); + + // remove from DOM + element.removeEventListener(type, args[0], args[1]); + } + } +} + + +/** + * Attach an event hander which will only execute once + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOne(element, type, callback, useCapture) { + jqLiteOn(element, type, function onFn(ev) { + // execute callback + if (callback) callback.apply(this, arguments); + + // remove wrapper + jqLiteOff(element, type, onFn); + }, useCapture); +} + + +/** + * Get or set horizontal scroll position + * @param {Element} element - The DOM element + * @param {number} [value] - The scroll position + */ +function jqLiteScrollLeft(element, value) { + var win = window; + + // get + if (value === undefined) { + if (element === win) { + var docEl = document.documentElement; + return (win.pageXOffset || docEl.scrollLeft) - (docEl.clientLeft || 0); + } else { + return element.scrollLeft; + } + } + + // set + if (element === win) win.scrollTo(value, jqLiteScrollTop(win)); + else element.scrollLeft = value; +} + + +/** + * Get or set vertical scroll position + * @param {Element} element - The DOM element + * @param {number} value - The scroll position + */ +function jqLiteScrollTop(element, value) { + var win = window; + + // get + if (value === undefined) { + if (element === win) { + var docEl = document.documentElement; + return (win.pageYOffset || docEl.scrollTop) - (docEl.clientTop || 0); + } else { + return element.scrollTop; + } + } + + // set + if (element === win) win.scrollTo(jqLiteScrollLeft(win), value); + else element.scrollTop = value; +} + + +/** + * Return object representing top/left offset and element height/width. + * @param {Element} element - The DOM element. + */ +function jqLiteOffset(element) { + var win = window, + rect = element.getBoundingClientRect(), + scrollTop = jqLiteScrollTop(win), + scrollLeft = jqLiteScrollLeft(win); + + return { + top: rect.top + scrollTop, + left: rect.left + scrollLeft, + height: rect.height, + width: rect.width + }; +} + + +/** + * Attach a callback to the DOM ready event listener + * @param {Function} fn - The callback function. + */ +function jqLiteReady(fn) { + var done = false, + top = true, + doc = document, + win = doc.defaultView, + root = doc.documentElement, + add = doc.addEventListener ? 'addEventListener' : 'attachEvent', + rem = doc.addEventListener ? 'removeEventListener' : 'detachEvent', + pre = doc.addEventListener ? '' : 'on'; + + var init = function(e) { + if (e.type == 'readystatechange' && doc.readyState != 'complete') { + return; + } + + (e.type == 'load' ? win : doc)[rem](pre + e.type, init, false); + if (!done && (done = true)) fn.call(win, e.type || e); + }; + + var poll = function() { + try { root.doScroll('left'); } catch(e) { setTimeout(poll, 50); return; } + init('poll'); + }; + + if (doc.readyState == 'complete') { + fn.call(win, 'lazy'); + } else { + if (doc.createEventObject && root.doScroll) { + try { top = !win.frameElement; } catch(e) { } + if (top) poll(); + } + doc[add](pre + 'DOMContentLoaded', init, false); + doc[add](pre + 'readystatechange', init, false); + win[add](pre + 'load', init, false); + } +} + + +/** + * Remove classes from a DOM element + * @param {Element} element - The DOM element. + * @param {string} cssClasses - Space separated list of class names. + */ +function jqLiteRemoveClass(element, cssClasses) { + if (!cssClasses || !element.setAttribute) return; + + var existingClasses = _getExistingClasses(element), + splitClasses = cssClasses.split(' '), + cssClass; + + for (var i=0; i < splitClasses.length; i++) { + cssClass = splitClasses[i].trim(); + while (existingClasses.indexOf(' ' + cssClass + ' ') >= 0) { + existingClasses = existingClasses.replace(' ' + cssClass + ' ', ' '); + } + } + + element.setAttribute('class', existingClasses.trim()); +} + + +// ------------------------------ +// Utilities +// ------------------------------ +var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g, + MOZ_HACK_REGEXP = /^moz([A-Z])/, + ESCAPE_REGEXP = /([.*+?^=!:${}()|\[\]\/\\])/g, + BOOLEAN_ATTRS; + + +BOOLEAN_ATTRS = { + multiple: true, + selected: true, + checked: true, + disabled: true, + readonly: true, + required: true, + open: true +} + + +function _getExistingClasses(element) { + var classes = (element.getAttribute('class') || '').replace(/[\n\t]/g, ''); + return ' ' + classes + ' '; +} + + +function _camelCase(name) { + return name. + replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) { + return offset ? letter.toUpperCase() : letter; + }). + replace(MOZ_HACK_REGEXP, 'Moz$1'); +} + + +function _escapeRegExp(string) { + return string.replace(ESCAPE_REGEXP, "\\$1"); +} + + +function _getCurrCssProp(elem, name, computed) { + var ret; + + // try computed style + ret = computed.getPropertyValue(name); + + // try style attribute (if element is not attached to document) + if (ret === '' && !elem.ownerDocument) ret = elem.style[_camelCase(name)]; + + return ret; +} + + +/** + * Module API + */ +module.exports = { + /** Add classes */ + addClass: jqLiteAddClass, + + /** Get or set CSS properties */ + css: jqLiteCss, + + /** Check for class */ + hasClass: jqLiteHasClass, + + /** Remove event handlers */ + off: jqLiteOff, + + /** Return offset values */ + offset: jqLiteOffset, + + /** Add event handlers */ + on: jqLiteOn, + + /** Add an execute-once event handler */ + one: jqLiteOne, + + /** DOM ready event handler */ + ready: jqLiteReady, + + /** Remove classes */ + removeClass: jqLiteRemoveClass, + + /** Check JavaScript variable instance type */ + type: jqLiteType, + + /** Get or set horizontal scroll position */ + scrollLeft: jqLiteScrollLeft, + + /** Get or set vertical scroll position */ + scrollTop: jqLiteScrollTop +}; + +},{}],4:[function(require,module,exports){ +/** + * MUI CSS/JS utilities module + * @module lib/util + */ + +'use strict'; + + +var config = require('../config'), + jqLite = require('./jqLite'), + nodeInsertedCallbacks = [], + scrollLock = 0, + scrollLockCls = 'mui-body--scroll-lock', + scrollLockPos, + _supportsPointerEvents; + + +/** + * Logging function + */ +function logFn() { + var win = window; + + if (config.debug && typeof win.console !== "undefined") { + try { + win.console.log.apply(win.console, arguments); + } catch (a) { + var e = Array.prototype.slice.call(arguments); + win.console.log(e.join("\n")); + } + } +} + + +/** + * Load CSS text in new stylesheet + * @param {string} cssText - The css text. + */ +function loadStyleFn(cssText) { + var doc = document, + head; + + // copied from jQuery + head = doc.head || + doc.getElementsByTagName('head')[0] || + doc.documentElement; + + var e = doc.createElement('style'); + e.type = 'text/css'; + + if (e.styleSheet) e.styleSheet.cssText = cssText; + else e.appendChild(doc.createTextNode(cssText)); + + // add to document + head.insertBefore(e, head.firstChild); + + return e; +} + + +/** + * Raise an error + * @param {string} msg - The error message. + */ +function raiseErrorFn(msg, useConsole) { + if (useConsole) { + if (typeof console !== 'undefined') console.error('MUI Warning: ' + msg); + } else { + throw new Error('MUI: ' + msg); + } +} + + +/** + * Register callbacks on muiNodeInserted event + * @param {function} callbackFn - The callback function. + */ +function onNodeInsertedFn(callbackFn) { + nodeInsertedCallbacks.push(callbackFn); + + // initalize listeners + if (nodeInsertedCallbacks._initialized === undefined) { + var doc = document; + + jqLite.on(doc, 'animationstart', animationHandlerFn); + jqLite.on(doc, 'mozAnimationStart', animationHandlerFn); + jqLite.on(doc, 'webkitAnimationStart', animationHandlerFn); + + nodeInsertedCallbacks._initialized = true; + } +} + + +/** + * Execute muiNodeInserted callbacks + * @param {Event} ev - The DOM event. + */ +function animationHandlerFn(ev) { + // check animation name + if (ev.animationName !== 'mui-node-inserted') return; + + var el = ev.target; + + // iterate through callbacks + for (var i=nodeInsertedCallbacks.length - 1; i >= 0; i--) { + nodeInsertedCallbacks[i](el); + } +} + + +/** + * Convert Classname object, with class as key and true/false as value, to an + * class string. + * @param {Object} classes The classes + * @return {String} class string + */ +function classNamesFn(classes) { + var cs = ''; + for (var i in classes) { + cs += (classes[i]) ? i + ' ' : ''; + } + return cs.trim(); +} + + +/** + * Check if client supports pointer events. + */ +function supportsPointerEventsFn() { + // check cache + if (_supportsPointerEvents !== undefined) return _supportsPointerEvents; + + var element = document.createElement('x'); + element.style.cssText = 'pointer-events:auto'; + _supportsPointerEvents = (element.style.pointerEvents === 'auto'); + return _supportsPointerEvents; +} + + +/** + * Create callback closure. + * @param {Object} instance - The object instance. + * @param {String} funcName - The name of the callback function. + */ +function callbackFn(instance, funcName) { + return function() {instance[funcName].apply(instance, arguments);}; +} + + +/** + * Dispatch event. + * @param {Element} element - The DOM element. + * @param {String} eventType - The event type. + * @param {Boolean} bubbles=true - If true, event bubbles. + * @param {Boolean} cancelable=true = If true, event is cancelable + * @param {Object} [data] - Data to add to event object + */ +function dispatchEventFn(element, eventType, bubbles, cancelable, data) { + var ev = document.createEvent('HTMLEvents'), + bubbles = (bubbles !== undefined) ? bubbles : true, + cancelable = (cancelable !== undefined) ? cancelable : true, + k; + + ev.initEvent(eventType, bubbles, cancelable); + + // add data to event object + if (data) for (k in data) ev[k] = data[k]; + + // dispatch + if (element) element.dispatchEvent(ev); + + return ev; +} + + +/** + * Turn on window scroll lock. + */ +function enableScrollLockFn() { + // increment counter + scrollLock += 1 + + // add lock + if (scrollLock === 1) { + var win = window, + doc = document; + + scrollLockPos = {left: jqLite.scrollLeft(win), top: jqLite.scrollTop(win)}; + jqLite.addClass(doc.body, scrollLockCls); + win.scrollTo(scrollLockPos.left, scrollLockPos.top); + } +} + + +/** + * Turn off window scroll lock. + */ +function disableScrollLockFn() { + // ignore + if (scrollLock === 0) return; + + // decrement counter + scrollLock -= 1 + + // remove lock + if (scrollLock === 0) { + var win = window, + doc = document; + + jqLite.removeClass(doc.body, scrollLockCls); + win.scrollTo(scrollLockPos.left, scrollLockPos.top); + } +} + + +/** + * Define the module API + */ +module.exports = { + /** Create callback closures */ + callback: callbackFn, + + /** Classnames object to string */ + classNames: classNamesFn, + + /** Disable scroll lock */ + disableScrollLock: disableScrollLockFn, + + /** Dispatch event */ + dispatchEvent: dispatchEventFn, + + /** Enable scroll lock */ + enableScrollLock: enableScrollLockFn, + + /** Log messages to the console when debug is turned on */ + log: logFn, + + /** Load CSS text as new stylesheet */ + loadStyle: loadStyleFn, + + /** Register muiNodeInserted handler */ + onNodeInserted: onNodeInsertedFn, + + /** Raise MUI error */ + raiseError: raiseErrorFn, + + /** Support Pointer Events check */ + supportsPointerEvents: supportsPointerEventsFn +}; + +},{"../config":2,"./jqLite":3}],5:[function(require,module,exports){ +/** + * MUI CSS/JS form-control module + * @module forms/form-control + */ + +'use strict'; + + +var jqLite = require('./lib/jqLite'), + util = require('./lib/util'), + cssSelector = '.mui-textfield > input, .mui-textfield > textarea', + emptyClass = 'mui--is-empty', + notEmptyClass = 'mui--is-not-empty', + dirtyClass = 'mui--is-dirty', + floatingLabelClass = 'mui-textfield--float-label'; + + +/** + * Initialize input element. + * @param {Element} inputEl - The input element. + */ +function initialize(inputEl) { + // check flag + if (inputEl._muiTextfield === true) return; + else inputEl._muiTextfield = true; + + if (inputEl.value.length) jqLite.addClass(inputEl, notEmptyClass); + else jqLite.addClass(inputEl, emptyClass); + + jqLite.on(inputEl, 'input', inputHandler); + jqLite.on(inputEl, 'change', inputHandler); + + // add dirty class on focus + jqLite.on(inputEl, 'focus', function(){jqLite.addClass(this, dirtyClass);}); +} + + +/** + * Handle input events. + */ +function inputHandler() { + var inputEl = this; + + if (inputEl.value.length) { + jqLite.removeClass(inputEl, emptyClass); + jqLite.addClass(inputEl, notEmptyClass); + } else { + jqLite.removeClass(inputEl, notEmptyClass); + jqLite.addClass(inputEl, emptyClass) + } + + jqLite.addClass(inputEl, dirtyClass); +} + + +/** Define module API */ +module.exports = { + /** Initialize input elements */ + initialize: initialize, + + /** Initialize module listeners */ + initListeners: function() { + var doc = document; + + // markup elements available when method is called + var elList = doc.querySelectorAll(cssSelector); + for (var i=elList.length - 1; i >= 0; i--) initialize(elList[i]); + + // listen for new elements + util.onNodeInserted(function(el) { + if (el.tagName === 'INPUT' || el.tagName === 'TEXTAREA') initialize(el); + }); + + // add transition css for floating labels + setTimeout(function() { + var css = '.mui-textfield.mui-textfield--float-label > label {' + [ + '-webkit-transition', + '-moz-transition', + '-o-transition', + 'transition', + '' + ].join(':all .15s ease-out;') + '}'; + + util.loadStyle(css); + }, 150); + + // pointer-events shim for floating labels + if (util.supportsPointerEvents() === false) { + jqLite.on(document, 'click', function(ev) { + var targetEl = ev.target; + + if (targetEl.tagName === 'LABEL' && + jqLite.hasClass(targetEl.parentNode, floatingLabelClass)) { + var inputEl = targetEl.previousElementSibling; + if (inputEl) inputEl.focus(); + } + }); + } + } +}; + +},{"./lib/jqLite":3,"./lib/util":4}],6:[function(require,module,exports){ +module.exports = "/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-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{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}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{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{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-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:border-box}:after,:before{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:Arial,Verdana,Tahoma;font-size:14px;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);background-color:#FFF}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#2196F3;text-decoration:none}a:focus,a:hover{color:#1976D2;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}p{margin:0 0 10px}ol,ul{margin-top:0;margin-bottom:10px}figure{margin:0}img{vertical-align:middle}hr{margin-top:20px;margin-bottom:20px;border:0;height:1px;background-color:rgba(0,0,0,.12)}legend{display:block;width:100%;padding:0;margin-bottom:10px;font-size:21px;color:rgba(0,0,0,.87);line-height:inherit;border:0}input[type=search]{box-sizing:border-box;-webkit-appearance:none}input[type=checkbox]:focus,input[type=radio]:focus,input[type=file]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type=checkbox]:disabled,input[type=radio]:disabled{cursor:not-allowed}strong{font-weight:700}abbr[title]{cursor:help;border-bottom:1px dotted #2196F3}h1,h2,h3{margin-top:20px;margin-bottom:10px}h4,h5,h6{margin-top:10px;margin-bottom:10px}.mui--appbar-height{height:56px}.mui--appbar-min-height,.mui-appbar{min-height:56px}.mui--appbar-line-height{line-height:56px}.mui--appbar-top{top:56px}@media (orientation:landscape) and (max-height:480px){.mui--appbar-height{height:48px}.mui--appbar-min-height,.mui-appbar{min-height:48px}.mui--appbar-line-height{line-height:48px}.mui--appbar-top{top:48px}}@media (min-width:480px){.mui--appbar-height{height:64px}.mui--appbar-min-height,.mui-appbar{min-height:64px}.mui--appbar-line-height{line-height:64px}.mui--appbar-top{top:64px}}.mui-appbar{background-color:#2196F3;color:#FFF}.mui-btn{animation-duration:.1ms;animation-name:mui-node-inserted;font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase;color:rgba(0,0,0,.87);background-color:#FFF;transition:all .2s ease-in-out;display:inline-block;height:36px;padding:0 26px;margin-top:6px;margin-bottom:6px;border:none;border-radius:2px;cursor:pointer;-ms-touch-action:manipulation;touch-action:manipulation;background-image:none;text-align:center;line-height:36px;vertical-align:middle;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:14px;letter-spacing:.03em;position:relative;overflow:hidden}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{color:rgba(0,0,0,.87);background-color:#fff}.mui-btn[disabled]:active,.mui-btn[disabled]:focus,.mui-btn[disabled]:hover{color:rgba(0,0,0,.87);background-color:#FFF}.mui-btn.mui-btn--flat{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn.mui-btn--flat:active,.mui-btn.mui-btn--flat:focus,.mui-btn.mui-btn--flat:hover{color:rgba(0,0,0,.87);background-color:#f2f2f2}.mui-btn.mui-btn--flat[disabled]:active,.mui-btn.mui-btn--flat[disabled]:focus,.mui-btn.mui-btn--flat[disabled]:hover{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{outline:0;text-decoration:none;color:rgba(0,0,0,.87)}.mui-btn:focus,.mui-btn:hover{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:focus,.mui-btn:hover{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn.mui--is-disabled,.mui-btn:disabled{cursor:not-allowed;pointer-events:none;opacity:.6;box-shadow:none}.mui-btn+.mui-btn{margin-left:8px}.mui-btn--flat{background-color:transparent}.mui-btn--flat:active,.mui-btn--flat:focus,.mui-btn--flat:hover{box-shadow:none;background-color:#f2f2f2}.mui-btn--fab,.mui-btn--raised{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab,.mui-btn--raised{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn--fab{position:relative;padding:0;width:55px;height:55px;line-height:55px;border-radius:50%;z-index:1}.mui-btn--primary{color:#FFF;background-color:#2196F3}.mui-btn--primary:active,.mui-btn--primary:focus,.mui-btn--primary:hover{color:#FFF;background-color:#39a1f4}.mui-btn--primary[disabled]:active,.mui-btn--primary[disabled]:focus,.mui-btn--primary[disabled]:hover{color:#FFF;background-color:#2196F3}.mui-btn--primary.mui-btn--flat{color:#2196F3;background-color:transparent}.mui-btn--primary.mui-btn--flat:active,.mui-btn--primary.mui-btn--flat:focus,.mui-btn--primary.mui-btn--flat:hover{color:#2196F3;background-color:#f2f2f2}.mui-btn--primary.mui-btn--flat[disabled]:active,.mui-btn--primary.mui-btn--flat[disabled]:focus,.mui-btn--primary.mui-btn--flat[disabled]:hover{color:#2196F3;background-color:transparent}.mui-btn--dark{color:#FFF;background-color:#424242}.mui-btn--dark:active,.mui-btn--dark:focus,.mui-btn--dark:hover{color:#FFF;background-color:#4f4f4f}.mui-btn--dark[disabled]:active,.mui-btn--dark[disabled]:focus,.mui-btn--dark[disabled]:hover{color:#FFF;background-color:#424242}.mui-btn--dark.mui-btn--flat{color:#424242;background-color:transparent}.mui-btn--dark.mui-btn--flat:active,.mui-btn--dark.mui-btn--flat:focus,.mui-btn--dark.mui-btn--flat:hover{color:#424242;background-color:#f2f2f2}.mui-btn--dark.mui-btn--flat[disabled]:active,.mui-btn--dark.mui-btn--flat[disabled]:focus,.mui-btn--dark.mui-btn--flat[disabled]:hover{color:#424242;background-color:transparent}.mui-btn--danger{color:#FFF;background-color:#F44336}.mui-btn--danger:active,.mui-btn--danger:focus,.mui-btn--danger:hover{color:#FFF;background-color:#f55a4e}.mui-btn--danger[disabled]:active,.mui-btn--danger[disabled]:focus,.mui-btn--danger[disabled]:hover{color:#FFF;background-color:#F44336}.mui-btn--danger.mui-btn--flat{color:#F44336;background-color:transparent}.mui-btn--danger.mui-btn--flat:active,.mui-btn--danger.mui-btn--flat:focus,.mui-btn--danger.mui-btn--flat:hover{color:#F44336;background-color:#f2f2f2}.mui-btn--danger.mui-btn--flat[disabled]:active,.mui-btn--danger.mui-btn--flat[disabled]:focus,.mui-btn--danger.mui-btn--flat[disabled]:hover{color:#F44336;background-color:transparent}.mui-btn--accent{color:#FFF;background-color:#FF4081}.mui-btn--accent:active,.mui-btn--accent:focus,.mui-btn--accent:hover{color:#FFF;background-color:#ff5a92}.mui-btn--accent[disabled]:active,.mui-btn--accent[disabled]:focus,.mui-btn--accent[disabled]:hover{color:#FFF;background-color:#FF4081}.mui-btn--accent.mui-btn--flat{color:#FF4081;background-color:transparent}.mui-btn--accent.mui-btn--flat:active,.mui-btn--accent.mui-btn--flat:focus,.mui-btn--accent.mui-btn--flat:hover{color:#FF4081;background-color:#f2f2f2}.mui-btn--accent.mui-btn--flat[disabled]:active,.mui-btn--accent.mui-btn--flat[disabled]:focus,.mui-btn--accent.mui-btn--flat[disabled]:hover{color:#FF4081;background-color:transparent}.mui-btn--small{height:30.6px;line-height:30.6px;padding:0 16px;font-size:13px}.mui-btn--large{height:54px;line-height:54px;padding:0 26px;font-size:14px}.mui-btn--fab.mui-btn--small{width:44px;height:44px;line-height:44px}.mui-btn--fab.mui-btn--large{width:75px;height:75px;line-height:75px}.mui-checkbox,.mui-radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.mui-checkbox>label,.mui-radio>label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio],.mui-radio>label>input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px}.mui-checkbox+.mui-checkbox,.mui-radio+.mui-radio{margin-top:-5px}.mui-checkbox--inline,.mui-radio--inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.mui-checkbox--inline>input[type=checkbox],.mui-checkbox--inline>input[type=radio],.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox--inline>label>input[type=radio],.mui-radio--inline>input[type=checkbox],.mui-radio--inline>input[type=radio],.mui-radio--inline>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio]{margin:4px 0 0;line-height:normal}.mui-checkbox--inline+.mui-checkbox--inline,.mui-radio--inline+.mui-radio--inline{margin-top:0;margin-left:10px}.mui-container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container:after,.mui-container:before{content:\" \";display:table}.mui-container:after{clear:both}@media (min-width:544px){.mui-container{max-width:570px}}@media (min-width:768px){.mui-container{max-width:740px}}@media (min-width:992px){.mui-container{max-width:960px}}@media (min-width:1200px){.mui-container{max-width:1170px}}.mui-container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container-fluid:after,.mui-container-fluid:before{content:\" \";display:table}.mui-container-fluid:after{clear:both}.mui-divider{display:block;height:1px;background-color:rgba(0,0,0,.12)}.mui--divider-top{border-top:1px solid rgba(0,0,0,.12)}.mui--divider-bottom{border-bottom:1px solid rgba(0,0,0,.12)}.mui--divider-left{border-left:1px solid rgba(0,0,0,.12)}.mui--divider-right{border-right:1px solid rgba(0,0,0,.12)}.mui-dropdown{display:inline-block;position:relative}[data-mui-toggle=dropdown]{animation-duration:.1ms;animation-name:mui-node-inserted;outline:0}.mui-dropdown__menu{position:absolute;top:100%;left:0;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#FFF;border-radius:2px;z-index:1;background-clip:padding-box}.mui-dropdown__menu.mui--is-open{display:block}.mui-dropdown__menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);white-space:nowrap}.mui-dropdown__menu>li>a:focus,.mui-dropdown__menu>li>a:hover{text-decoration:none;color:rgba(0,0,0,.87);background-color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a,.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;cursor:not-allowed}.mui-dropdown__menu--right{left:auto;right:0}@media (min-width:544px){.mui-form--inline>.mui-textfield{display:inline-block;margin-bottom:0}.mui-form--inline>.mui-checkbox,.mui-form--inline>.mui-radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.mui-form--inline>.mui-checkbox>label,.mui-form--inline>.mui-radio>label{padding-left:0}.mui-form--inline>.mui-checkbox>label>input[type=checkbox],.mui-form--inline>.mui-radio>label>input[type=radio]{position:relative;margin-left:0}.mui-form--inline>.mui-select{display:inline-block}.mui-form--inline>.mui-btn{margin-bottom:0;margin-top:0;vertical-align:bottom}}.mui-row{margin-left:-15px;margin-right:-15px}.mui-row:after,.mui-row:before{content:\" \";display:table}.mui-row:after{clear:both}.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9,.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9,.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9,.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{min-height:1px;padding-left:15px;padding-right:15px}.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{float:left}.mui-col-xs-1{width:8.33333%}.mui-col-xs-2{width:16.66667%}.mui-col-xs-3{width:25%}.mui-col-xs-4{width:33.33333%}.mui-col-xs-5{width:41.66667%}.mui-col-xs-6{width:50%}.mui-col-xs-7{width:58.33333%}.mui-col-xs-8{width:66.66667%}.mui-col-xs-9{width:75%}.mui-col-xs-10{width:83.33333%}.mui-col-xs-11{width:91.66667%}.mui-col-xs-12{width:100%}.mui-col-xs-offset-0{margin-left:0}.mui-col-xs-offset-1{margin-left:8.33333%}.mui-col-xs-offset-2{margin-left:16.66667%}.mui-col-xs-offset-3{margin-left:25%}.mui-col-xs-offset-4{margin-left:33.33333%}.mui-col-xs-offset-5{margin-left:41.66667%}.mui-col-xs-offset-6{margin-left:50%}.mui-col-xs-offset-7{margin-left:58.33333%}.mui-col-xs-offset-8{margin-left:66.66667%}.mui-col-xs-offset-9{margin-left:75%}.mui-col-xs-offset-10{margin-left:83.33333%}.mui-col-xs-offset-11{margin-left:91.66667%}.mui-col-xs-offset-12{margin-left:100%}@media (min-width:544px){.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9{float:left}.mui-col-sm-1{width:8.33333%}.mui-col-sm-2{width:16.66667%}.mui-col-sm-3{width:25%}.mui-col-sm-4{width:33.33333%}.mui-col-sm-5{width:41.66667%}.mui-col-sm-6{width:50%}.mui-col-sm-7{width:58.33333%}.mui-col-sm-8{width:66.66667%}.mui-col-sm-9{width:75%}.mui-col-sm-10{width:83.33333%}.mui-col-sm-11{width:91.66667%}.mui-col-sm-12{width:100%}.mui-col-sm-offset-0{margin-left:0}.mui-col-sm-offset-1{margin-left:8.33333%}.mui-col-sm-offset-2{margin-left:16.66667%}.mui-col-sm-offset-3{margin-left:25%}.mui-col-sm-offset-4{margin-left:33.33333%}.mui-col-sm-offset-5{margin-left:41.66667%}.mui-col-sm-offset-6{margin-left:50%}.mui-col-sm-offset-7{margin-left:58.33333%}.mui-col-sm-offset-8{margin-left:66.66667%}.mui-col-sm-offset-9{margin-left:75%}.mui-col-sm-offset-10{margin-left:83.33333%}.mui-col-sm-offset-11{margin-left:91.66667%}.mui-col-sm-offset-12{margin-left:100%}}@media (min-width:768px){.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9{float:left}.mui-col-md-1{width:8.33333%}.mui-col-md-2{width:16.66667%}.mui-col-md-3{width:25%}.mui-col-md-4{width:33.33333%}.mui-col-md-5{width:41.66667%}.mui-col-md-6{width:50%}.mui-col-md-7{width:58.33333%}.mui-col-md-8{width:66.66667%}.mui-col-md-9{width:75%}.mui-col-md-10{width:83.33333%}.mui-col-md-11{width:91.66667%}.mui-col-md-12{width:100%}.mui-col-md-offset-0{margin-left:0}.mui-col-md-offset-1{margin-left:8.33333%}.mui-col-md-offset-2{margin-left:16.66667%}.mui-col-md-offset-3{margin-left:25%}.mui-col-md-offset-4{margin-left:33.33333%}.mui-col-md-offset-5{margin-left:41.66667%}.mui-col-md-offset-6{margin-left:50%}.mui-col-md-offset-7{margin-left:58.33333%}.mui-col-md-offset-8{margin-left:66.66667%}.mui-col-md-offset-9{margin-left:75%}.mui-col-md-offset-10{margin-left:83.33333%}.mui-col-md-offset-11{margin-left:91.66667%}.mui-col-md-offset-12{margin-left:100%}}@media (min-width:992px){.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9{float:left}.mui-col-lg-1{width:8.33333%}.mui-col-lg-2{width:16.66667%}.mui-col-lg-3{width:25%}.mui-col-lg-4{width:33.33333%}.mui-col-lg-5{width:41.66667%}.mui-col-lg-6{width:50%}.mui-col-lg-7{width:58.33333%}.mui-col-lg-8{width:66.66667%}.mui-col-lg-9{width:75%}.mui-col-lg-10{width:83.33333%}.mui-col-lg-11{width:91.66667%}.mui-col-lg-12{width:100%}.mui-col-lg-offset-0{margin-left:0}.mui-col-lg-offset-1{margin-left:8.33333%}.mui-col-lg-offset-2{margin-left:16.66667%}.mui-col-lg-offset-3{margin-left:25%}.mui-col-lg-offset-4{margin-left:33.33333%}.mui-col-lg-offset-5{margin-left:41.66667%}.mui-col-lg-offset-6{margin-left:50%}.mui-col-lg-offset-7{margin-left:58.33333%}.mui-col-lg-offset-8{margin-left:66.66667%}.mui-col-lg-offset-9{margin-left:75%}.mui-col-lg-offset-10{margin-left:83.33333%}.mui-col-lg-offset-11{margin-left:91.66667%}.mui-col-lg-offset-12{margin-left:100%}}@media (min-width:1200px){.mui-col-xl-1,.mui-col-xl-10,.mui-col-xl-11,.mui-col-xl-12,.mui-col-xl-2,.mui-col-xl-3,.mui-col-xl-4,.mui-col-xl-5,.mui-col-xl-6,.mui-col-xl-7,.mui-col-xl-8,.mui-col-xl-9{float:left}.mui-col-xl-1{width:8.33333%}.mui-col-xl-2{width:16.66667%}.mui-col-xl-3{width:25%}.mui-col-xl-4{width:33.33333%}.mui-col-xl-5{width:41.66667%}.mui-col-xl-6{width:50%}.mui-col-xl-7{width:58.33333%}.mui-col-xl-8{width:66.66667%}.mui-col-xl-9{width:75%}.mui-col-xl-10{width:83.33333%}.mui-col-xl-11{width:91.66667%}.mui-col-xl-12{width:100%}.mui-col-xl-offset-0{margin-left:0}.mui-col-xl-offset-1{margin-left:8.33333%}.mui-col-xl-offset-2{margin-left:16.66667%}.mui-col-xl-offset-3{margin-left:25%}.mui-col-xl-offset-4{margin-left:33.33333%}.mui-col-xl-offset-5{margin-left:41.66667%}.mui-col-xl-offset-6{margin-left:50%}.mui-col-xl-offset-7{margin-left:58.33333%}.mui-col-xl-offset-8{margin-left:66.66667%}.mui-col-xl-offset-9{margin-left:75%}.mui-col-xl-offset-10{margin-left:83.33333%}.mui-col-xl-offset-11{margin-left:91.66667%}.mui-col-xl-offset-12{margin-left:100%}}.mui-panel{padding:15px;margin-bottom:20px;border-radius:0;background-color:#FFF;box-shadow:0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}.mui-panel:after,.mui-panel:before{content:\" \";display:table}.mui-panel:after{clear:both}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-panel{box-shadow:0 -1px 2px 0 rgba(0,0,0,.12),-1px 0 2px 0 rgba(0,0,0,.12),0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}}.mui-select{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-select:focus{outline:0}.mui-select:focus>select{height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;height:32px;width:100%;appearance:none;-webkit-appearance:none;-moz-appearance:none;outline:0;border:none;border-bottom:1px solid rgba(0,0,0,.26);border-radius:0;box-shadow:none;background-color:transparent;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iNiIgd2lkdGg9IjEwIj48cG9seWdvbiBwb2ludHM9IjAsMCAxMCwwIDUsNiIgc3R5bGU9ImZpbGw6cmdiYSgwLDAsMCwuMjQpOyIvPjwvc3ZnPg==);background-repeat:no-repeat;background-position:right center;cursor:pointer;color:rgba(0,0,0,.87);font-size:16px;padding:0 25px 0 0}.mui-select>select::-ms-expand{display:none}.mui-select>select:focus{outline:0;height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select:disabled{color:rgba(0,0,0,.38);cursor:not-allowed;background-color:transparent;opacity:1}.mui-select__menu{position:absolute;z-index:2;min-width:100%;overflow-y:auto;padding:8px 0;background-color:#FFF;font-size:16px}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-select__menu{border-left:1px solid rgba(0,0,0,.12);border-top:1px solid rgba(0,0,0,.12)}}.mui-select__menu>div{padding:0 22px;height:42px;line-height:42px;cursor:pointer;white-space:nowrap}.mui-select__menu>div:hover{background-color:#E0E0E0}.mui-select__menu>div.mui--is-selected{background-color:#EEE}th{text-align:left}.mui-table{width:100%;max-width:100%;margin-bottom:20px}.mui-table>tbody>tr>td,.mui-table>tbody>tr>th,.mui-table>tfoot>tr>td,.mui-table>tfoot>tr>th,.mui-table>thead>tr>td,.mui-table>thead>tr>th{padding:10px;line-height:1.429}.mui-table>thead>tr>th{border-bottom:2px solid rgba(0,0,0,.12);font-weight:700}.mui-table>tbody+tbody{border-top:2px solid rgba(0,0,0,.12)}.mui-table.mui-table--bordered>tbody>tr>td{border-bottom:1px solid rgba(0,0,0,.12)}.mui-tabs__bar{list-style:none;padding-left:0;margin-bottom:0;background-color:transparent;white-space:nowrap;overflow-x:auto}.mui-tabs__bar>li{display:inline-block}.mui-tabs__bar>li>a{display:block;white-space:nowrap;text-transform:uppercase;font-weight:500;font-size:14px;color:rgba(0,0,0,.87);cursor:default;height:48px;line-height:48px;padding-left:24px;padding-right:24px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-tabs__bar>li>a:hover{text-decoration:none}.mui-tabs__bar>li.mui--is-active{border-bottom:2px solid #2196F3}.mui-tabs__bar>li.mui--is-active>a{color:#2196F3}.mui-tabs__bar.mui-tabs__bar--justified{display:table;width:100%;table-layout:fixed}.mui-tabs__bar.mui-tabs__bar--justified>li{display:table-cell}.mui-tabs__bar.mui-tabs__bar--justified>li>a{text-align:center;padding-left:0;padding-right:0}.mui-tabs__pane{display:none}.mui-tabs__pane.mui--is-active{display:block}[data-mui-toggle=tab]{animation-duration:.1ms;animation-name:mui-node-inserted}.mui-textfield{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-textfield>label{position:absolute;top:0;display:block;width:100%;color:rgba(0,0,0,.54);font-size:12px;font-weight:400;line-height:15px;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.mui-textfield>textarea{padding-top:5px}.mui-textfield>input,.mui-textfield>textarea{display:block}.mui-textfield>input:focus~label,.mui-textfield>textarea:focus~label{color:#2196F3}.mui-textfield--float-label>label{position:absolute;transform:translate(0,15px);font-size:16px;line-height:32px;color:rgba(0,0,0,.26);text-overflow:clip;cursor:text;pointer-events:none}.mui-textfield--float-label>input:focus~label,.mui-textfield--float-label>textarea:focus~label{transform:translate(0,0);font-size:12px;line-height:15px;text-overflow:ellipsis}.mui-textfield--float-label>input:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>input:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>input:not(:focus)[value]:not([value=\"\"]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>textarea:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus)[value]:not([value=\"\"]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:rgba(0,0,0,.54);font-size:12px;line-height:15px;transform:translate(0,0);text-overflow:ellipsis}.mui-textfield--wrap-label{display:table;width:100%;padding-top:0}.mui-textfield--wrap-label:not(.mui-textfield--float-label)>label{display:table-header-group;position:static;white-space:normal;overflow-x:visible}.mui-textfield>input,.mui-textfield>textarea{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;background-color:transparent;color:rgba(0,0,0,.87);border:none;border-bottom:1px solid rgba(0,0,0,.26);outline:0;width:100%;font-size:16px;padding:0;box-shadow:none;border-radius:0;background-image:none}.mui-textfield>input:focus,.mui-textfield>textarea:focus{border-color:#2196F3;border-width:2px}.mui-textfield>input:-moz-read-only,.mui-textfield>input:disabled,.mui-textfield>textarea:-moz-read-only,.mui-textfield>textarea:disabled{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input:disabled,.mui-textfield>input:read-only,.mui-textfield>textarea:disabled,.mui-textfield>textarea:read-only{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input::-webkit-input-placeholder,.mui-textfield>textarea::-webkit-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::-moz-placeholder,.mui-textfield>textarea::-moz-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input:-ms-input-placeholder,.mui-textfield>textarea:-ms-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::placeholder,.mui-textfield>textarea::placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input{height:32px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>textarea{min-height:64px}.mui-textfield>textarea[rows]:not([rows=\"2\"]):focus{margin-bottom:-1px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=\"\"]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=\"\"]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):not(:required),.mui-textfield>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=\"\"]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required),.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=\"\"]):not(.mui--is-empty):not(.mui--is-not-empty){border-color:#F44336;border-width:2px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=\"\"]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=\"\"]):not(.mui--is-empty):not(.mui--is-not-empty){height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required)~label,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:invalid:not(:focus):required[value]:not([value=\"\"]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=\"\"]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):not(:required)~label,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=\"\"]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=\"\"]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:#F44336}.mui-textfield:not(.mui-textfield--float-label)>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label{color:#F44336}@keyframes mui-node-inserted{from{opacity:.99}to{opacity:1}}.mui--no-transition{transition:none!important}.mui--no-user-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.mui--text-left{text-align:left!important}.mui--text-right{text-align:right!important}.mui--text-center{text-align:center!important}.mui--text-justify{text-align:justify!important}.mui--text-nowrap{white-space:nowrap!important}.mui--align-baseline{vertical-align:baseline!important}.mui--align-top{vertical-align:top!important}.mui--align-middle{vertical-align:middle!important}.mui--align-bottom{vertical-align:bottom!important}.mui--text-dark{color:rgba(0,0,0,.87)}.mui--text-dark-secondary{color:rgba(0,0,0,.54)}.mui--text-dark-hint{color:rgba(0,0,0,.38)}.mui--text-light{color:#FFF}.mui--text-light-secondary{color:rgba(255,255,255,.7)}.mui--text-light-hint{color:rgba(255,255,255,.3)}.mui--text-accent{color:rgba(255,64,129,.87)}.mui--text-accent-secondary{color:rgba(255,64,129,.54)}.mui--text-accent-hint{color:rgba(255,64,129,.38)}.mui--text-black{color:#000}.mui--text-white{color:#FFF}.mui--text-danger{color:#F44336}.mui-list--unstyled{padding-left:0;list-style:none}.mui-list--inline{padding-left:0;list-style:none;margin-left:-5px}.mui-list--inline>li{display:inline-block;padding-left:5px;padding-right:5px}.mui--z1,.mui-dropdown__menu,.mui-select__menu{box-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24)}.mui--z2{box-shadow:0 3px 6px rgba(0,0,0,.16),0 3px 6px rgba(0,0,0,.23)}.mui--z3{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}.mui--z4{box-shadow:0 14px 28px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.22)}.mui--z5{box-shadow:0 19px 38px rgba(0,0,0,.3),0 15px 12px rgba(0,0,0,.22)}.mui--clearfix:after,.mui--clearfix:before{content:\" \";display:table}.mui--clearfix:after{clear:both}.mui--pull-right{float:right!important}.mui--pull-left{float:left!important}.mui--hide{display:none!important}.mui--show{display:block!important}.mui--invisible{visibility:hidden}.mui--overflow-hidden{overflow:hidden!important}.mui--overflow-hidden-x{overflow-x:hidden!important}.mui--overflow-hidden-y{overflow-y:hidden!important}.mui--visible-lg-block,.mui--visible-lg-inline,.mui--visible-lg-inline-block,.mui--visible-md-block,.mui--visible-md-inline,.mui--visible-md-inline-block,.mui--visible-sm-block,.mui--visible-sm-inline,.mui--visible-sm-inline-block,.mui--visible-xl-block,.mui--visible-xl-inline,.mui--visible-xl-inline-block,.mui--visible-xs-block,.mui--visible-xs-inline,.mui--visible-xs-inline-block{display:none!important}@media (max-width:543px){.mui-visible-xs{display:block!important}table.mui-visible-xs{display:table}tr.mui-visible-xs{display:table-row!important}td.mui-visible-xs,th.mui-visible-xs{display:table-cell!important}.mui--visible-xs-block{display:block!important}.mui--visible-xs-inline{display:inline!important}.mui--visible-xs-inline-block{display:inline-block!important}}@media (min-width:544px) and (max-width:767px){.mui-visible-sm{display:block!important}table.mui-visible-sm{display:table}tr.mui-visible-sm{display:table-row!important}td.mui-visible-sm,th.mui-visible-sm{display:table-cell!important}.mui--visible-sm-block{display:block!important}.mui--visible-sm-inline{display:inline!important}.mui--visible-sm-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.mui-visible-md{display:block!important}table.mui-visible-md{display:table}tr.mui-visible-md{display:table-row!important}td.mui-visible-md,th.mui-visible-md{display:table-cell!important}.mui--visible-md-block{display:block!important}.mui--visible-md-inline{display:inline!important}.mui--visible-md-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.mui-visible-lg{display:block!important}table.mui-visible-lg{display:table}tr.mui-visible-lg{display:table-row!important}td.mui-visible-lg,th.mui-visible-lg{display:table-cell!important}.mui--visible-lg-block{display:block!important}.mui--visible-lg-inline{display:inline!important}.mui--visible-lg-inline-block{display:inline-block!important}}@media (min-width:1200px){.mui-visible-xl{display:block!important}table.mui-visible-xl{display:table}tr.mui-visible-xl{display:table-row!important}td.mui-visible-xl,th.mui-visible-xl{display:table-cell!important}.mui--visible-xl-block{display:block!important}.mui--visible-xl-inline{display:inline!important}.mui--visible-xl-inline-block{display:inline-block!important}}@media (max-width:543px){.mui--hidden-xs{display:none!important}}@media (min-width:544px) and (max-width:767px){.mui--hidden-sm{display:none!important}}@media (min-width:768px) and (max-width:991px){.mui--hidden-md{display:none!important}}@media (min-width:992px) and (max-width:1199px){.mui--hidden-lg{display:none!important}}@media (min-width:1200px){.mui--hidden-xl{display:none!important}}body.mui-body--scroll-lock{overflow:hidden!important}#mui-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:99999999;background-color:rgba(0,0,0,.2);overflow:auto}.mui-ripple-effect{position:absolute;border-radius:50%;pointer-events:none;opacity:0;animation:mui-ripple-animation 2s}@keyframes mui-ripple-animation{from{transform:scale(1);opacity:.4}to{transform:scale(100);opacity:0}}.mui-btn>.mui-ripple-effect{background-color:#a6a6a6}.mui-btn--primary>.mui-ripple-effect{background-color:#FFF}.mui-btn--dark>.mui-ripple-effect{background-color:#FFF}.mui-btn--danger>.mui-ripple-effect{background-color:#FFF}.mui-btn--accent>.mui-ripple-effect{background-color:#FFF}.mui-btn--flat>.mui-ripple-effect{background-color:#a6a6a6}.mui--text-display4{font-weight:300;font-size:112px;line-height:112px}.mui--text-display3{font-weight:400;font-size:56px;line-height:56px}.mui--text-display2{font-weight:400;font-size:45px;line-height:48px}.mui--text-display1,h1{font-weight:400;font-size:34px;line-height:40px}.mui--text-headline,h2{font-weight:400;font-size:24px;line-height:32px}.mui--text-title,h3{font-weight:400;font-size:20px;line-height:28px}.mui--text-subhead,h4{font-weight:400;font-size:16px;line-height:24px}.mui--text-body2,h5{font-weight:500;font-size:14px;line-height:24px}.mui--text-body1{font-weight:400;font-size:14px;line-height:20px}.mui--text-caption{font-weight:400;font-size:12px;line-height:16px}.mui--text-menu{font-weight:500;font-size:13px;line-height:17px}.mui--text-button{font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase}"; + +},{}],7:[function(require,module,exports){ +/** + * MUI WebComponents buttons module + * @module webcomponents/buttons + */ + +'use strict'; + + +var config = require('../js/config'), + jqLite = require('../js/lib/jqLite'), + btnClass = 'mui-btn', + btnTagName = btnClass, + btnAttrs = {style: 1, color: 1, size: 1}; + + +/** + * Class representing a button. + * @class + */ +var BtnProto = Object.create(HTMLElement.prototype); + + +/** Button createdCallback */ +BtnProto.createdCallback = function() { + var root = this.createShadowRoot(), + innerEl = document.createElement('button'), + cls = btnClass, + k, + v; + + // populate innerEl + for (var i=0; i < this.childNodes.length; i++) { + innerEl.appendChild(this.childNodes[i]); + } + + // style|color|size + for (k in btnAttrs) { + v = this.getAttribute(k); + if (v !== 'default') cls += ' ' + btnClass + '--' + v; + } + + jqLite.addClass(innerEl, cls); + + // disabled + if (this.getAttribute('disabled') !== null) { + innerEl.setAttribute('disabled', 'disabled'); + } + + root.appendChild(_getStyleEl().cloneNode(true)); + root.appendChild(innerEl); +}; + + + + +// ============================================================================ +// UTILITIES +// ============================================================================ + +var styleEl; + + +/** + * Get or create a style element. + * @function + */ +function _getStyleEl() { + if (styleEl === undefined) { + styleEl = document.createElement('style'); + styleEl.innerHTML = require('mui.min.css'); + } + + return styleEl; +} + + +/** Define module API */ +module.exports = { + /** Register module elements */ + registerElements: function() { + var BtnElement = document.registerElement(btnTagName, { + prototype: BtnProto + }); + + return { + BtnElement: BtnElement + } + } +}; + +},{"../js/config":2,"../js/lib/jqLite":3,"mui.min.css":6}],8:[function(require,module,exports){ +/** + * MUI WebComponents forms module + * @module webcomponents/forms + */ + +'use strict'; + + +var jqLite = require('../js/lib/jqLite'), + muiTextfield = require('../js/textfield'), + textfieldClass = 'mui-textfield', + floatingMod = '--float-label', + textfieldTagName = textfieldClass; + + +/** + * Class representing a Textfield element. + * @class + */ +var TextfieldProto = Object.create(HTMLElement.prototype); + + +/** Textfield createdCallback */ +TextfieldProto.createdCallback = function() { + var root = this.createShadowRoot(), + innerEl = document.createElement('div'), + cls; + + var attrs = { + type: this.getAttribute('type') || 'text', + value: this.getAttribute('value'), + placeholder: this.getAttribute('placeholder'), + label: this.getAttribute('label'), + floating: this.getAttribute('floating') + }; + + // set class + cls = textfieldClass; + if (attrs.floating !== null) cls += ' ' + textfieldClass + floatingMod; + + innerEl.setAttribute('class', cls); + + // add input element + innerEl.appendChild(_createInputEl(attrs)); + + // label element + if (attrs.label) { + var labelEl = _createLabelEl(attrs); + innerEl.appendChild(labelEl); + } + + // add to root + root.appendChild(_getStyleEl().cloneNode(true)); + root.appendChild(innerEl); +} + + + + +// ============================================================================ +// UTILITIES +// ============================================================================ + +var styleEl; + + +/** + * Get or create style + * @function + */ +function _getStyleEl() { + if (styleEl === undefined) { + styleEl = document.createElement('style'); + styleEl.innerHTML = require('mui.min.css'); + } + + return styleEl; +} + + +/** + * Create input element. + * @function + */ +function _createInputEl(attrs) { + var inputEl; + + // input element + if (attrs.type === 'textarea') { + inputEl = document.createElement('textarea'); + if (attrs.value) inputEl.appendChild(document.createTextNode(attrs.value)); + } else { + inputEl = document.createElement('input'); + inputEl.setAttribute('type', attrs.type); + if (attrs.value) inputEl.setAttribute('value', attrs.value); + } + + if (attrs.placeholder) { + inputEl.setAttribute('placeholder', attrs.placeholder); + } + + // add event listeners + muiTextfield.initialize(inputEl); + + return inputEl; +} + + +/** + * Create label element. + * @function + */ +function _createLabelEl(attrs) { + var labelEl = document.createElement('label'); + labelEl.appendChild(document.createTextNode(attrs.label)); + + return labelEl; +} + + +/** Define module API */ +module.exports = { + /** Register module elements */ + registerElements: function() { + var TextfieldElement = document.registerElement(textfieldTagName, { + prototype: TextfieldProto + }); + + return { + TextfieldElement: TextfieldElement + }; + } +}; + +},{"../js/lib/jqLite":3,"../js/textfield":5,"mui.min.css":6}]},{},[1]) \ No newline at end of file diff --git a/platforms/ios/www/libs/mui/packages/cdn/webcomponents/mui-webcomponents.min.js b/platforms/ios/www/libs/mui/packages/cdn/webcomponents/mui-webcomponents.min.js new file mode 100644 index 0000000..3b339e1 --- /dev/null +++ b/platforms/ios/www/libs/mui/packages/cdn/webcomponents/mui-webcomponents.min.js @@ -0,0 +1,2 @@ +!function i(t,e,o){function n(a,m){if(!e[a]){if(!t[a]){var r="function"==typeof require&&require;if(!m&&r)return r(a,!0);if(l)return l(a,!0);throw new Error("Cannot find module '"+a+"'")}var u=e[a]={exports:{}};t[a][0].call(u.exports,function(i){var e=t[a][1][i];return n(e?e:i)},u,u.exports,i,t,e,o)}return e[a].exports}for(var l="function"==typeof require&&require,a=0;a-1:!1}function a(i){if(void 0===i)return"undefined";var t=Object.prototype.toString.call(i);if(0===t.indexOf("[object "))return t.slice(8,-1).toLowerCase();throw new Error("MUI: Could not understand type: "+t)}function m(i,t,e,o){o=void 0===o?!1:o,i.addEventListener(t,e,o);var n=i._muiEventCache=i._muiEventCache||{};n[t]=n[t]||[],n[t].push([e,o])}function r(i,t,e,o){o=void 0===o?!1:o;var n,l,a=i._muiEventCache=i._muiEventCache||{},m=a[t]||[];for(l=m.length;l--;)n=m[l],(void 0===e||n[0]===e&&n[1]===o)&&(m.splice(l,1),i.removeEventListener(t,n[0],n[1]))}function u(i,t,e,o){m(i,t,function n(o){e&&e.apply(this,arguments),r(i,t,n)},o)}function d(i,t){var e=window;if(void 0===t){if(i===e){var o=document.documentElement;return(e.pageXOffset||o.scrollLeft)-(o.clientLeft||0)}return i.scrollLeft}i===e?e.scrollTo(t,s(e)):i.scrollLeft=t}function s(i,t){var e=window;if(void 0===t){if(i===e){var o=document.documentElement;return(e.pageYOffset||o.scrollTop)-(o.clientTop||0)}return i.scrollTop}i===e?e.scrollTo(d(e),t):i.scrollTop=t}function c(i){var t=window,e=i.getBoundingClientRect(),o=s(t),n=d(t);return{top:e.top+o,left:e.left+n,height:e.height,width:e.width}}function p(i){var t=!1,e=!0,o=document,n=o.defaultView,l=o.documentElement,a=o.addEventListener?"addEventListener":"attachEvent",m=o.addEventListener?"removeEventListener":"detachEvent",r=o.addEventListener?"":"on",u=function(e){"readystatechange"==e.type&&"complete"!=o.readyState||(("load"==e.type?n:o)[m](r+e.type,u,!1),!t&&(t=!0)&&i.call(n,e.type||e))},d=function(){try{l.doScroll("left")}catch(i){return void setTimeout(d,50)}u("poll")};if("complete"==o.readyState)i.call(n,"lazy");else{if(o.createEventObject&&l.doScroll){try{e=!n.frameElement}catch(s){}e&&d()}o[a](r+"DOMContentLoaded",u,!1),o[a](r+"readystatechange",u,!1),n[a](r+"load",u,!1)}}function b(i,t){if(t&&i.setAttribute){for(var e,o=f(i),n=t.split(" "),l=0;l=0;)o=o.replace(" "+e+" "," ");i.setAttribute("class",o.trim())}}function f(i){var t=(i.getAttribute("class")||"").replace(/[\n\t]/g,"");return" "+t+" "}function x(i){return i.replace(v,function(i,t,e,o){return o?e.toUpperCase():e}).replace(y,"Moz$1")}function g(i,t,e){var o;return o=e.getPropertyValue(t),""!==o||i.ownerDocument||(o=i.style[x(t)]),o}var h,v=/([\:\-\_]+(.))/g,y=/^moz([A-Z])/;h={multiple:!0,selected:!0,checked:!0,disabled:!0,readonly:!0,required:!0,open:!0},t.exports={addClass:o,css:n,hasClass:l,off:r,offset:c,on:m,one:u,ready:p,removeClass:b,type:a,scrollLeft:d,scrollTop:s}},{}],4:[function(i,t,e){"use strict";function o(){var i=window;if(x.debug&&"undefined"!=typeof i.console)try{i.console.log.apply(i.console,arguments)}catch(t){var e=Array.prototype.slice.call(arguments);i.console.log(e.join("\n"))}}function n(i){var t,e=document;t=e.head||e.getElementsByTagName("head")[0]||e.documentElement;var o=e.createElement("style");return o.type="text/css",o.styleSheet?o.styleSheet.cssText=i:o.appendChild(e.createTextNode(i)),t.insertBefore(o,t.firstChild),o}function l(i,t){if(!t)throw new Error("MUI: "+i);"undefined"!=typeof console&&console.error("MUI Warning: "+i)}function a(i){if(h.push(i),void 0===h._initialized){var t=document;g.on(t,"animationstart",m),g.on(t,"mozAnimationStart",m),g.on(t,"webkitAnimationStart",m),h._initialized=!0}}function m(i){if("mui-node-inserted"===i.animationName)for(var t=i.target,e=h.length-1;e>=0;e--)h[e](t)}function r(i){var t="";for(var e in i)t+=i[e]?e+" ":"";return t.trim()}function u(){if(void 0!==f)return f;var i=document.createElement("x");return i.style.cssText="pointer-events:auto",f="auto"===i.style.pointerEvents}function d(i,t){return function(){i[t].apply(i,arguments)}}function s(i,t,e,o,n){var l,a=document.createEvent("HTMLEvents"),e=void 0!==e?e:!0,o=void 0!==o?o:!0;if(a.initEvent(t,e,o),n)for(l in n)a[l]=n[l];return i&&i.dispatchEvent(a),a}function c(){if(v+=1,1===v){var i=window,t=document;b={left:g.scrollLeft(i),top:g.scrollTop(i)},g.addClass(t.body,y),i.scrollTo(b.left,b.top)}}function p(){if(0!==v&&(v-=1,0===v)){var i=window,t=document;g.removeClass(t.body,y),i.scrollTo(b.left,b.top)}}var b,f,x=i("../config"),g=i("./jqLite"),h=[],v=0,y="mui-body--scroll-lock";t.exports={callback:d,classNames:r,disableScrollLock:p,dispatchEvent:s,enableScrollLock:c,log:o,loadStyle:n,onNodeInserted:a,raiseError:l,supportsPointerEvents:u}},{"../config":2,"./jqLite":3}],5:[function(i,t,e){"use strict";function o(i){i._muiTextfield!==!0&&(i._muiTextfield=!0,i.value.length?l.addClass(i,u):l.addClass(i,r),l.on(i,"input",n),l.on(i,"change",n),l.on(i,"focus",function(){l.addClass(this,d)}))}function n(){var i=this;i.value.length?(l.removeClass(i,r),l.addClass(i,u)):(l.removeClass(i,u),l.addClass(i,r)),l.addClass(i,d)}var l=i("./lib/jqLite"),a=i("./lib/util"),m=".mui-textfield > input, .mui-textfield > textarea",r="mui--is-empty",u="mui--is-not-empty",d="mui--is-dirty",s="mui-textfield--float-label";t.exports={initialize:o,initListeners:function(){for(var i=document,t=i.querySelectorAll(m),e=t.length-1;e>=0;e--)o(t[e]);a.onNodeInserted(function(i){"INPUT"!==i.tagName&&"TEXTAREA"!==i.tagName||o(i)}),setTimeout(function(){var i=".mui-textfield.mui-textfield--float-label > label {"+["-webkit-transition","-moz-transition","-o-transition","transition",""].join(":all .15s ease-out;")+"}";a.loadStyle(i)},150),a.supportsPointerEvents()===!1&&l.on(document,"click",function(i){var t=i.target;if("LABEL"===t.tagName&&l.hasClass(t.parentNode,s)){var e=t.previousElementSibling;e&&e.focus()}})}}},{"./lib/jqLite":3,"./lib/util":4}],6:[function(i,t,e){t.exports='/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-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{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}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{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{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-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:border-box}:after,:before{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:Arial,Verdana,Tahoma;font-size:14px;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);background-color:#FFF}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#2196F3;text-decoration:none}a:focus,a:hover{color:#1976D2;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}p{margin:0 0 10px}ol,ul{margin-top:0;margin-bottom:10px}figure{margin:0}img{vertical-align:middle}hr{margin-top:20px;margin-bottom:20px;border:0;height:1px;background-color:rgba(0,0,0,.12)}legend{display:block;width:100%;padding:0;margin-bottom:10px;font-size:21px;color:rgba(0,0,0,.87);line-height:inherit;border:0}input[type=search]{box-sizing:border-box;-webkit-appearance:none}input[type=checkbox]:focus,input[type=radio]:focus,input[type=file]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type=checkbox]:disabled,input[type=radio]:disabled{cursor:not-allowed}strong{font-weight:700}abbr[title]{cursor:help;border-bottom:1px dotted #2196F3}h1,h2,h3{margin-top:20px;margin-bottom:10px}h4,h5,h6{margin-top:10px;margin-bottom:10px}.mui--appbar-height{height:56px}.mui--appbar-min-height,.mui-appbar{min-height:56px}.mui--appbar-line-height{line-height:56px}.mui--appbar-top{top:56px}@media (orientation:landscape) and (max-height:480px){.mui--appbar-height{height:48px}.mui--appbar-min-height,.mui-appbar{min-height:48px}.mui--appbar-line-height{line-height:48px}.mui--appbar-top{top:48px}}@media (min-width:480px){.mui--appbar-height{height:64px}.mui--appbar-min-height,.mui-appbar{min-height:64px}.mui--appbar-line-height{line-height:64px}.mui--appbar-top{top:64px}}.mui-appbar{background-color:#2196F3;color:#FFF}.mui-btn{animation-duration:.1ms;animation-name:mui-node-inserted;font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase;color:rgba(0,0,0,.87);background-color:#FFF;transition:all .2s ease-in-out;display:inline-block;height:36px;padding:0 26px;margin-top:6px;margin-bottom:6px;border:none;border-radius:2px;cursor:pointer;-ms-touch-action:manipulation;touch-action:manipulation;background-image:none;text-align:center;line-height:36px;vertical-align:middle;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:14px;letter-spacing:.03em;position:relative;overflow:hidden}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{color:rgba(0,0,0,.87);background-color:#fff}.mui-btn[disabled]:active,.mui-btn[disabled]:focus,.mui-btn[disabled]:hover{color:rgba(0,0,0,.87);background-color:#FFF}.mui-btn.mui-btn--flat{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn.mui-btn--flat:active,.mui-btn.mui-btn--flat:focus,.mui-btn.mui-btn--flat:hover{color:rgba(0,0,0,.87);background-color:#f2f2f2}.mui-btn.mui-btn--flat[disabled]:active,.mui-btn.mui-btn--flat[disabled]:focus,.mui-btn.mui-btn--flat[disabled]:hover{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{outline:0;text-decoration:none;color:rgba(0,0,0,.87)}.mui-btn:focus,.mui-btn:hover{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:focus,.mui-btn:hover{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn.mui--is-disabled,.mui-btn:disabled{cursor:not-allowed;pointer-events:none;opacity:.6;box-shadow:none}.mui-btn+.mui-btn{margin-left:8px}.mui-btn--flat{background-color:transparent}.mui-btn--flat:active,.mui-btn--flat:focus,.mui-btn--flat:hover{box-shadow:none;background-color:#f2f2f2}.mui-btn--fab,.mui-btn--raised{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab,.mui-btn--raised{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn--fab{position:relative;padding:0;width:55px;height:55px;line-height:55px;border-radius:50%;z-index:1}.mui-btn--primary{color:#FFF;background-color:#2196F3}.mui-btn--primary:active,.mui-btn--primary:focus,.mui-btn--primary:hover{color:#FFF;background-color:#39a1f4}.mui-btn--primary[disabled]:active,.mui-btn--primary[disabled]:focus,.mui-btn--primary[disabled]:hover{color:#FFF;background-color:#2196F3}.mui-btn--primary.mui-btn--flat{color:#2196F3;background-color:transparent}.mui-btn--primary.mui-btn--flat:active,.mui-btn--primary.mui-btn--flat:focus,.mui-btn--primary.mui-btn--flat:hover{color:#2196F3;background-color:#f2f2f2}.mui-btn--primary.mui-btn--flat[disabled]:active,.mui-btn--primary.mui-btn--flat[disabled]:focus,.mui-btn--primary.mui-btn--flat[disabled]:hover{color:#2196F3;background-color:transparent}.mui-btn--dark{color:#FFF;background-color:#424242}.mui-btn--dark:active,.mui-btn--dark:focus,.mui-btn--dark:hover{color:#FFF;background-color:#4f4f4f}.mui-btn--dark[disabled]:active,.mui-btn--dark[disabled]:focus,.mui-btn--dark[disabled]:hover{color:#FFF;background-color:#424242}.mui-btn--dark.mui-btn--flat{color:#424242;background-color:transparent}.mui-btn--dark.mui-btn--flat:active,.mui-btn--dark.mui-btn--flat:focus,.mui-btn--dark.mui-btn--flat:hover{color:#424242;background-color:#f2f2f2}.mui-btn--dark.mui-btn--flat[disabled]:active,.mui-btn--dark.mui-btn--flat[disabled]:focus,.mui-btn--dark.mui-btn--flat[disabled]:hover{color:#424242;background-color:transparent}.mui-btn--danger{color:#FFF;background-color:#F44336}.mui-btn--danger:active,.mui-btn--danger:focus,.mui-btn--danger:hover{color:#FFF;background-color:#f55a4e}.mui-btn--danger[disabled]:active,.mui-btn--danger[disabled]:focus,.mui-btn--danger[disabled]:hover{color:#FFF;background-color:#F44336}.mui-btn--danger.mui-btn--flat{color:#F44336;background-color:transparent}.mui-btn--danger.mui-btn--flat:active,.mui-btn--danger.mui-btn--flat:focus,.mui-btn--danger.mui-btn--flat:hover{color:#F44336;background-color:#f2f2f2}.mui-btn--danger.mui-btn--flat[disabled]:active,.mui-btn--danger.mui-btn--flat[disabled]:focus,.mui-btn--danger.mui-btn--flat[disabled]:hover{color:#F44336;background-color:transparent}.mui-btn--accent{color:#FFF;background-color:#FF4081}.mui-btn--accent:active,.mui-btn--accent:focus,.mui-btn--accent:hover{color:#FFF;background-color:#ff5a92}.mui-btn--accent[disabled]:active,.mui-btn--accent[disabled]:focus,.mui-btn--accent[disabled]:hover{color:#FFF;background-color:#FF4081}.mui-btn--accent.mui-btn--flat{color:#FF4081;background-color:transparent}.mui-btn--accent.mui-btn--flat:active,.mui-btn--accent.mui-btn--flat:focus,.mui-btn--accent.mui-btn--flat:hover{color:#FF4081;background-color:#f2f2f2}.mui-btn--accent.mui-btn--flat[disabled]:active,.mui-btn--accent.mui-btn--flat[disabled]:focus,.mui-btn--accent.mui-btn--flat[disabled]:hover{color:#FF4081;background-color:transparent}.mui-btn--small{height:30.6px;line-height:30.6px;padding:0 16px;font-size:13px}.mui-btn--large{height:54px;line-height:54px;padding:0 26px;font-size:14px}.mui-btn--fab.mui-btn--small{width:44px;height:44px;line-height:44px}.mui-btn--fab.mui-btn--large{width:75px;height:75px;line-height:75px}.mui-checkbox,.mui-radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.mui-checkbox>label,.mui-radio>label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio],.mui-radio>label>input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px}.mui-checkbox+.mui-checkbox,.mui-radio+.mui-radio{margin-top:-5px}.mui-checkbox--inline,.mui-radio--inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.mui-checkbox--inline>input[type=checkbox],.mui-checkbox--inline>input[type=radio],.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox--inline>label>input[type=radio],.mui-radio--inline>input[type=checkbox],.mui-radio--inline>input[type=radio],.mui-radio--inline>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio]{margin:4px 0 0;line-height:normal}.mui-checkbox--inline+.mui-checkbox--inline,.mui-radio--inline+.mui-radio--inline{margin-top:0;margin-left:10px}.mui-container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container:after,.mui-container:before{content:" ";display:table}.mui-container:after{clear:both}@media (min-width:544px){.mui-container{max-width:570px}}@media (min-width:768px){.mui-container{max-width:740px}}@media (min-width:992px){.mui-container{max-width:960px}}@media (min-width:1200px){.mui-container{max-width:1170px}}.mui-container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container-fluid:after,.mui-container-fluid:before{content:" ";display:table}.mui-container-fluid:after{clear:both}.mui-divider{display:block;height:1px;background-color:rgba(0,0,0,.12)}.mui--divider-top{border-top:1px solid rgba(0,0,0,.12)}.mui--divider-bottom{border-bottom:1px solid rgba(0,0,0,.12)}.mui--divider-left{border-left:1px solid rgba(0,0,0,.12)}.mui--divider-right{border-right:1px solid rgba(0,0,0,.12)}.mui-dropdown{display:inline-block;position:relative}[data-mui-toggle=dropdown]{animation-duration:.1ms;animation-name:mui-node-inserted;outline:0}.mui-dropdown__menu{position:absolute;top:100%;left:0;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#FFF;border-radius:2px;z-index:1;background-clip:padding-box}.mui-dropdown__menu.mui--is-open{display:block}.mui-dropdown__menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);white-space:nowrap}.mui-dropdown__menu>li>a:focus,.mui-dropdown__menu>li>a:hover{text-decoration:none;color:rgba(0,0,0,.87);background-color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a,.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;cursor:not-allowed}.mui-dropdown__menu--right{left:auto;right:0}@media (min-width:544px){.mui-form--inline>.mui-textfield{display:inline-block;margin-bottom:0}.mui-form--inline>.mui-checkbox,.mui-form--inline>.mui-radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.mui-form--inline>.mui-checkbox>label,.mui-form--inline>.mui-radio>label{padding-left:0}.mui-form--inline>.mui-checkbox>label>input[type=checkbox],.mui-form--inline>.mui-radio>label>input[type=radio]{position:relative;margin-left:0}.mui-form--inline>.mui-select{display:inline-block}.mui-form--inline>.mui-btn{margin-bottom:0;margin-top:0;vertical-align:bottom}}.mui-row{margin-left:-15px;margin-right:-15px}.mui-row:after,.mui-row:before{content:" ";display:table}.mui-row:after{clear:both}.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9,.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9,.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9,.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{min-height:1px;padding-left:15px;padding-right:15px}.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{float:left}.mui-col-xs-1{width:8.33333%}.mui-col-xs-2{width:16.66667%}.mui-col-xs-3{width:25%}.mui-col-xs-4{width:33.33333%}.mui-col-xs-5{width:41.66667%}.mui-col-xs-6{width:50%}.mui-col-xs-7{width:58.33333%}.mui-col-xs-8{width:66.66667%}.mui-col-xs-9{width:75%}.mui-col-xs-10{width:83.33333%}.mui-col-xs-11{width:91.66667%}.mui-col-xs-12{width:100%}.mui-col-xs-offset-0{margin-left:0}.mui-col-xs-offset-1{margin-left:8.33333%}.mui-col-xs-offset-2{margin-left:16.66667%}.mui-col-xs-offset-3{margin-left:25%}.mui-col-xs-offset-4{margin-left:33.33333%}.mui-col-xs-offset-5{margin-left:41.66667%}.mui-col-xs-offset-6{margin-left:50%}.mui-col-xs-offset-7{margin-left:58.33333%}.mui-col-xs-offset-8{margin-left:66.66667%}.mui-col-xs-offset-9{margin-left:75%}.mui-col-xs-offset-10{margin-left:83.33333%}.mui-col-xs-offset-11{margin-left:91.66667%}.mui-col-xs-offset-12{margin-left:100%}@media (min-width:544px){.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9{float:left}.mui-col-sm-1{width:8.33333%}.mui-col-sm-2{width:16.66667%}.mui-col-sm-3{width:25%}.mui-col-sm-4{width:33.33333%}.mui-col-sm-5{width:41.66667%}.mui-col-sm-6{width:50%}.mui-col-sm-7{width:58.33333%}.mui-col-sm-8{width:66.66667%}.mui-col-sm-9{width:75%}.mui-col-sm-10{width:83.33333%}.mui-col-sm-11{width:91.66667%}.mui-col-sm-12{width:100%}.mui-col-sm-offset-0{margin-left:0}.mui-col-sm-offset-1{margin-left:8.33333%}.mui-col-sm-offset-2{margin-left:16.66667%}.mui-col-sm-offset-3{margin-left:25%}.mui-col-sm-offset-4{margin-left:33.33333%}.mui-col-sm-offset-5{margin-left:41.66667%}.mui-col-sm-offset-6{margin-left:50%}.mui-col-sm-offset-7{margin-left:58.33333%}.mui-col-sm-offset-8{margin-left:66.66667%}.mui-col-sm-offset-9{margin-left:75%}.mui-col-sm-offset-10{margin-left:83.33333%}.mui-col-sm-offset-11{margin-left:91.66667%}.mui-col-sm-offset-12{margin-left:100%}}@media (min-width:768px){.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9{float:left}.mui-col-md-1{width:8.33333%}.mui-col-md-2{width:16.66667%}.mui-col-md-3{width:25%}.mui-col-md-4{width:33.33333%}.mui-col-md-5{width:41.66667%}.mui-col-md-6{width:50%}.mui-col-md-7{width:58.33333%}.mui-col-md-8{width:66.66667%}.mui-col-md-9{width:75%}.mui-col-md-10{width:83.33333%}.mui-col-md-11{width:91.66667%}.mui-col-md-12{width:100%}.mui-col-md-offset-0{margin-left:0}.mui-col-md-offset-1{margin-left:8.33333%}.mui-col-md-offset-2{margin-left:16.66667%}.mui-col-md-offset-3{margin-left:25%}.mui-col-md-offset-4{margin-left:33.33333%}.mui-col-md-offset-5{margin-left:41.66667%}.mui-col-md-offset-6{margin-left:50%}.mui-col-md-offset-7{margin-left:58.33333%}.mui-col-md-offset-8{margin-left:66.66667%}.mui-col-md-offset-9{margin-left:75%}.mui-col-md-offset-10{margin-left:83.33333%}.mui-col-md-offset-11{margin-left:91.66667%}.mui-col-md-offset-12{margin-left:100%}}@media (min-width:992px){.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9{float:left}.mui-col-lg-1{width:8.33333%}.mui-col-lg-2{width:16.66667%}.mui-col-lg-3{width:25%}.mui-col-lg-4{width:33.33333%}.mui-col-lg-5{width:41.66667%}.mui-col-lg-6{width:50%}.mui-col-lg-7{width:58.33333%}.mui-col-lg-8{width:66.66667%}.mui-col-lg-9{width:75%}.mui-col-lg-10{width:83.33333%}.mui-col-lg-11{width:91.66667%}.mui-col-lg-12{width:100%}.mui-col-lg-offset-0{margin-left:0}.mui-col-lg-offset-1{margin-left:8.33333%}.mui-col-lg-offset-2{margin-left:16.66667%}.mui-col-lg-offset-3{margin-left:25%}.mui-col-lg-offset-4{margin-left:33.33333%}.mui-col-lg-offset-5{margin-left:41.66667%}.mui-col-lg-offset-6{margin-left:50%}.mui-col-lg-offset-7{margin-left:58.33333%}.mui-col-lg-offset-8{margin-left:66.66667%}.mui-col-lg-offset-9{margin-left:75%}.mui-col-lg-offset-10{margin-left:83.33333%}.mui-col-lg-offset-11{margin-left:91.66667%}.mui-col-lg-offset-12{margin-left:100%}}@media (min-width:1200px){.mui-col-xl-1,.mui-col-xl-10,.mui-col-xl-11,.mui-col-xl-12,.mui-col-xl-2,.mui-col-xl-3,.mui-col-xl-4,.mui-col-xl-5,.mui-col-xl-6,.mui-col-xl-7,.mui-col-xl-8,.mui-col-xl-9{float:left}.mui-col-xl-1{width:8.33333%}.mui-col-xl-2{width:16.66667%}.mui-col-xl-3{width:25%}.mui-col-xl-4{width:33.33333%}.mui-col-xl-5{width:41.66667%}.mui-col-xl-6{width:50%}.mui-col-xl-7{width:58.33333%}.mui-col-xl-8{width:66.66667%}.mui-col-xl-9{width:75%}.mui-col-xl-10{width:83.33333%}.mui-col-xl-11{width:91.66667%}.mui-col-xl-12{width:100%}.mui-col-xl-offset-0{margin-left:0}.mui-col-xl-offset-1{margin-left:8.33333%}.mui-col-xl-offset-2{margin-left:16.66667%}.mui-col-xl-offset-3{margin-left:25%}.mui-col-xl-offset-4{margin-left:33.33333%}.mui-col-xl-offset-5{margin-left:41.66667%}.mui-col-xl-offset-6{margin-left:50%}.mui-col-xl-offset-7{margin-left:58.33333%}.mui-col-xl-offset-8{margin-left:66.66667%}.mui-col-xl-offset-9{margin-left:75%}.mui-col-xl-offset-10{margin-left:83.33333%}.mui-col-xl-offset-11{margin-left:91.66667%}.mui-col-xl-offset-12{margin-left:100%}}.mui-panel{padding:15px;margin-bottom:20px;border-radius:0;background-color:#FFF;box-shadow:0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}.mui-panel:after,.mui-panel:before{content:" ";display:table}.mui-panel:after{clear:both}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-panel{box-shadow:0 -1px 2px 0 rgba(0,0,0,.12),-1px 0 2px 0 rgba(0,0,0,.12),0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}}.mui-select{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-select:focus{outline:0}.mui-select:focus>select{height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;height:32px;width:100%;appearance:none;-webkit-appearance:none;-moz-appearance:none;outline:0;border:none;border-bottom:1px solid rgba(0,0,0,.26);border-radius:0;box-shadow:none;background-color:transparent;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iNiIgd2lkdGg9IjEwIj48cG9seWdvbiBwb2ludHM9IjAsMCAxMCwwIDUsNiIgc3R5bGU9ImZpbGw6cmdiYSgwLDAsMCwuMjQpOyIvPjwvc3ZnPg==);background-repeat:no-repeat;background-position:right center;cursor:pointer;color:rgba(0,0,0,.87);font-size:16px;padding:0 25px 0 0}.mui-select>select::-ms-expand{display:none}.mui-select>select:focus{outline:0;height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select:disabled{color:rgba(0,0,0,.38);cursor:not-allowed;background-color:transparent;opacity:1}.mui-select__menu{position:absolute;z-index:2;min-width:100%;overflow-y:auto;padding:8px 0;background-color:#FFF;font-size:16px}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-select__menu{border-left:1px solid rgba(0,0,0,.12);border-top:1px solid rgba(0,0,0,.12)}}.mui-select__menu>div{padding:0 22px;height:42px;line-height:42px;cursor:pointer;white-space:nowrap}.mui-select__menu>div:hover{background-color:#E0E0E0}.mui-select__menu>div.mui--is-selected{background-color:#EEE}th{text-align:left}.mui-table{width:100%;max-width:100%;margin-bottom:20px}.mui-table>tbody>tr>td,.mui-table>tbody>tr>th,.mui-table>tfoot>tr>td,.mui-table>tfoot>tr>th,.mui-table>thead>tr>td,.mui-table>thead>tr>th{padding:10px;line-height:1.429}.mui-table>thead>tr>th{border-bottom:2px solid rgba(0,0,0,.12);font-weight:700}.mui-table>tbody+tbody{border-top:2px solid rgba(0,0,0,.12)}.mui-table.mui-table--bordered>tbody>tr>td{border-bottom:1px solid rgba(0,0,0,.12)}.mui-tabs__bar{list-style:none;padding-left:0;margin-bottom:0;background-color:transparent;white-space:nowrap;overflow-x:auto}.mui-tabs__bar>li{display:inline-block}.mui-tabs__bar>li>a{display:block;white-space:nowrap;text-transform:uppercase;font-weight:500;font-size:14px;color:rgba(0,0,0,.87);cursor:default;height:48px;line-height:48px;padding-left:24px;padding-right:24px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-tabs__bar>li>a:hover{text-decoration:none}.mui-tabs__bar>li.mui--is-active{border-bottom:2px solid #2196F3}.mui-tabs__bar>li.mui--is-active>a{color:#2196F3}.mui-tabs__bar.mui-tabs__bar--justified{display:table;width:100%;table-layout:fixed}.mui-tabs__bar.mui-tabs__bar--justified>li{display:table-cell}.mui-tabs__bar.mui-tabs__bar--justified>li>a{text-align:center;padding-left:0;padding-right:0}.mui-tabs__pane{display:none}.mui-tabs__pane.mui--is-active{display:block}[data-mui-toggle=tab]{animation-duration:.1ms;animation-name:mui-node-inserted}.mui-textfield{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-textfield>label{position:absolute;top:0;display:block;width:100%;color:rgba(0,0,0,.54);font-size:12px;font-weight:400;line-height:15px;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.mui-textfield>textarea{padding-top:5px}.mui-textfield>input,.mui-textfield>textarea{display:block}.mui-textfield>input:focus~label,.mui-textfield>textarea:focus~label{color:#2196F3}.mui-textfield--float-label>label{position:absolute;transform:translate(0,15px);font-size:16px;line-height:32px;color:rgba(0,0,0,.26);text-overflow:clip;cursor:text;pointer-events:none}.mui-textfield--float-label>input:focus~label,.mui-textfield--float-label>textarea:focus~label{transform:translate(0,0);font-size:12px;line-height:15px;text-overflow:ellipsis}.mui-textfield--float-label>input:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>input:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>input:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>textarea:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:rgba(0,0,0,.54);font-size:12px;line-height:15px;transform:translate(0,0);text-overflow:ellipsis}.mui-textfield--wrap-label{display:table;width:100%;padding-top:0}.mui-textfield--wrap-label:not(.mui-textfield--float-label)>label{display:table-header-group;position:static;white-space:normal;overflow-x:visible}.mui-textfield>input,.mui-textfield>textarea{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;background-color:transparent;color:rgba(0,0,0,.87);border:none;border-bottom:1px solid rgba(0,0,0,.26);outline:0;width:100%;font-size:16px;padding:0;box-shadow:none;border-radius:0;background-image:none}.mui-textfield>input:focus,.mui-textfield>textarea:focus{border-color:#2196F3;border-width:2px}.mui-textfield>input:-moz-read-only,.mui-textfield>input:disabled,.mui-textfield>textarea:-moz-read-only,.mui-textfield>textarea:disabled{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input:disabled,.mui-textfield>input:read-only,.mui-textfield>textarea:disabled,.mui-textfield>textarea:read-only{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input::-webkit-input-placeholder,.mui-textfield>textarea::-webkit-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::-moz-placeholder,.mui-textfield>textarea::-moz-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input:-ms-input-placeholder,.mui-textfield>textarea:-ms-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::placeholder,.mui-textfield>textarea::placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input{height:32px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>textarea{min-height:64px}.mui-textfield>textarea[rows]:not([rows="2"]):focus{margin-bottom:-1px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):not(:required),.mui-textfield>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required),.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty){border-color:#F44336;border-width:2px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty){height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required)~label,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):not(:required)~label,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:#F44336}.mui-textfield:not(.mui-textfield--float-label)>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label{color:#F44336}@keyframes mui-node-inserted{from{opacity:.99}to{opacity:1}}.mui--no-transition{transition:none!important}.mui--no-user-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.mui--text-left{text-align:left!important}.mui--text-right{text-align:right!important}.mui--text-center{text-align:center!important}.mui--text-justify{text-align:justify!important}.mui--text-nowrap{white-space:nowrap!important}.mui--align-baseline{vertical-align:baseline!important}.mui--align-top{vertical-align:top!important}.mui--align-middle{vertical-align:middle!important}.mui--align-bottom{vertical-align:bottom!important}.mui--text-dark{color:rgba(0,0,0,.87)}.mui--text-dark-secondary{color:rgba(0,0,0,.54)}.mui--text-dark-hint{color:rgba(0,0,0,.38)}.mui--text-light{color:#FFF}.mui--text-light-secondary{color:rgba(255,255,255,.7)}.mui--text-light-hint{color:rgba(255,255,255,.3)}.mui--text-accent{color:rgba(255,64,129,.87)}.mui--text-accent-secondary{color:rgba(255,64,129,.54)}.mui--text-accent-hint{color:rgba(255,64,129,.38)}.mui--text-black{color:#000}.mui--text-white{color:#FFF}.mui--text-danger{color:#F44336}.mui-list--unstyled{padding-left:0;list-style:none}.mui-list--inline{padding-left:0;list-style:none;margin-left:-5px}.mui-list--inline>li{display:inline-block;padding-left:5px;padding-right:5px}.mui--z1,.mui-dropdown__menu,.mui-select__menu{box-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24)}.mui--z2{box-shadow:0 3px 6px rgba(0,0,0,.16),0 3px 6px rgba(0,0,0,.23)}.mui--z3{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}.mui--z4{box-shadow:0 14px 28px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.22)}.mui--z5{box-shadow:0 19px 38px rgba(0,0,0,.3),0 15px 12px rgba(0,0,0,.22)}.mui--clearfix:after,.mui--clearfix:before{content:" ";display:table}.mui--clearfix:after{clear:both}.mui--pull-right{float:right!important}.mui--pull-left{float:left!important}.mui--hide{display:none!important}.mui--show{display:block!important}.mui--invisible{visibility:hidden}.mui--overflow-hidden{overflow:hidden!important}.mui--overflow-hidden-x{overflow-x:hidden!important}.mui--overflow-hidden-y{overflow-y:hidden!important}.mui--visible-lg-block,.mui--visible-lg-inline,.mui--visible-lg-inline-block,.mui--visible-md-block,.mui--visible-md-inline,.mui--visible-md-inline-block,.mui--visible-sm-block,.mui--visible-sm-inline,.mui--visible-sm-inline-block,.mui--visible-xl-block,.mui--visible-xl-inline,.mui--visible-xl-inline-block,.mui--visible-xs-block,.mui--visible-xs-inline,.mui--visible-xs-inline-block{display:none!important}@media (max-width:543px){.mui-visible-xs{display:block!important}table.mui-visible-xs{display:table}tr.mui-visible-xs{display:table-row!important}td.mui-visible-xs,th.mui-visible-xs{display:table-cell!important}.mui--visible-xs-block{display:block!important}.mui--visible-xs-inline{display:inline!important}.mui--visible-xs-inline-block{display:inline-block!important}}@media (min-width:544px) and (max-width:767px){.mui-visible-sm{display:block!important}table.mui-visible-sm{display:table}tr.mui-visible-sm{display:table-row!important}td.mui-visible-sm,th.mui-visible-sm{display:table-cell!important}.mui--visible-sm-block{display:block!important}.mui--visible-sm-inline{display:inline!important}.mui--visible-sm-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.mui-visible-md{display:block!important}table.mui-visible-md{display:table}tr.mui-visible-md{display:table-row!important}td.mui-visible-md,th.mui-visible-md{display:table-cell!important}.mui--visible-md-block{display:block!important}.mui--visible-md-inline{display:inline!important}.mui--visible-md-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.mui-visible-lg{display:block!important}table.mui-visible-lg{display:table}tr.mui-visible-lg{display:table-row!important}td.mui-visible-lg,th.mui-visible-lg{display:table-cell!important}.mui--visible-lg-block{display:block!important}.mui--visible-lg-inline{display:inline!important}.mui--visible-lg-inline-block{display:inline-block!important}}@media (min-width:1200px){.mui-visible-xl{display:block!important}table.mui-visible-xl{display:table}tr.mui-visible-xl{display:table-row!important}td.mui-visible-xl,th.mui-visible-xl{display:table-cell!important}.mui--visible-xl-block{display:block!important}.mui--visible-xl-inline{display:inline!important}.mui--visible-xl-inline-block{display:inline-block!important}}@media (max-width:543px){.mui--hidden-xs{display:none!important}}@media (min-width:544px) and (max-width:767px){.mui--hidden-sm{display:none!important}}@media (min-width:768px) and (max-width:991px){.mui--hidden-md{display:none!important}}@media (min-width:992px) and (max-width:1199px){.mui--hidden-lg{display:none!important}}@media (min-width:1200px){.mui--hidden-xl{display:none!important}}body.mui-body--scroll-lock{overflow:hidden!important}#mui-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:99999999;background-color:rgba(0,0,0,.2);overflow:auto}.mui-ripple-effect{position:absolute;border-radius:50%;pointer-events:none;opacity:0;animation:mui-ripple-animation 2s}@keyframes mui-ripple-animation{from{transform:scale(1);opacity:.4}to{transform:scale(100);opacity:0}}.mui-btn>.mui-ripple-effect{background-color:#a6a6a6}.mui-btn--primary>.mui-ripple-effect{background-color:#FFF}.mui-btn--dark>.mui-ripple-effect{background-color:#FFF}.mui-btn--danger>.mui-ripple-effect{background-color:#FFF}.mui-btn--accent>.mui-ripple-effect{background-color:#FFF}.mui-btn--flat>.mui-ripple-effect{background-color:#a6a6a6}.mui--text-display4{font-weight:300;font-size:112px;line-height:112px}.mui--text-display3{font-weight:400;font-size:56px;line-height:56px}.mui--text-display2{font-weight:400;font-size:45px;line-height:48px}.mui--text-display1,h1{font-weight:400;font-size:34px;line-height:40px}.mui--text-headline,h2{font-weight:400;font-size:24px;line-height:32px}.mui--text-title,h3{font-weight:400;font-size:20px;line-height:28px}.mui--text-subhead,h4{font-weight:400;font-size:16px;line-height:24px}.mui--text-body2,h5{font-weight:500;font-size:14px;line-height:24px}.mui--text-body1{font-weight:400;font-size:14px;line-height:20px}.mui--text-caption{font-weight:400;font-size:12px;line-height:16px}.mui--text-menu{font-weight:500;font-size:13px;line-height:17px}.mui--text-button{font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase}'; +},{}],7:[function(i,t,e){"use strict";function o(){return void 0===u&&(u=document.createElement("style"),u.innerHTML=i("mui.min.css")),u}var n=(i("../js/config"),i("../js/lib/jqLite")),l="mui-btn",a=l,m={style:1,color:1,size:1},r=Object.create(HTMLElement.prototype);r.createdCallback=function(){for(var i,t,e=this.createShadowRoot(),a=document.createElement("button"),r=l,u=0;u +muicss:mui/ +├── lib +│ ├── css +│ │ └── mui.css +│ └── js +│ └── mui.js +├── LICENSE.txt +├── package.js +└── README.md + diff --git a/platforms/ios/www/libs/mui/packages/meteor/lib/css/mui.css b/platforms/ios/www/libs/mui/packages/meteor/lib/css/mui.css new file mode 100644 index 0000000..2a65b9e --- /dev/null +++ b/platforms/ios/www/libs/mui/packages/meteor/lib/css/mui.css @@ -0,0 +1,2522 @@ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS and IE text size adjust after device 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, +menu, +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/10/11, Safari, and Firefox < 22. + */ +[hidden], +template { + display: none; +} + +/* Links + ========================================================================== */ +/** + * Remove the gray background color from active links in IE 10. + */ +a { + background-color: transparent; +} + +/** + * Improve readability of focused elements when they are also in an + * active/hover state. + */ +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 { + 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"], +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. + */ +input[type="search"] { + -webkit-appearance: textfield; + /* 1 */ + box-sizing: content-box; + /* 2 */ +} + +/** + * 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; +} + +/** + * MUI Colors module + */ +/** + * MUI Reboot + */ +* { + box-sizing: border-box; +} + +*:before, +*:after { + box-sizing: border-box; +} + +html { + font-size: 10px; + -webkit-tap-highlight-color: transparent; +} + +body { + font-family: Arial, Verdana, Tahoma; + font-size: 14px; + font-weight: 400; + line-height: 1.429; + color: rgba(0, 0, 0, 0.87); + background-color: #FFF; +} + +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +a { + color: #2196F3; + text-decoration: none; +} + +a:hover, a:focus { + color: #1976D2; + text-decoration: underline; +} + +a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +p { + margin: 0 0 10px; +} + +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} + +figure { + margin: 0; +} + +img { + vertical-align: middle; +} + +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + height: 1px; + background-color: rgba(0, 0, 0, 0.12); +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 10px; + font-size: 21px; + color: rgba(0, 0, 0, 0.87); + line-height: inherit; + border: 0; +} + +input[type="search"] { + box-sizing: border-box; + -webkit-appearance: none; +} + +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +input[type="radio"]:disabled, +input[type="checkbox"]:disabled { + cursor: not-allowed; +} + +strong { + font-weight: 700; +} + +abbr[title] { + cursor: help; + border-bottom: 1px dotted #2196F3; +} + +h1, h2, h3 { + margin-top: 20px; + margin-bottom: 10px; +} + +h4, h5, h6 { + margin-top: 10px; + margin-bottom: 10px; +} + +/** + * MUI Appbar + */ +.mui--appbar-height { + height: 56px; +} + +.mui--appbar-min-height, .mui-appbar { + min-height: 56px; +} + +.mui--appbar-line-height { + line-height: 56px; +} + +.mui--appbar-top { + top: 56px; +} + +@media (orientation: landscape) and (max-height: 480px) { + .mui--appbar-height { + height: 48px; + } + .mui--appbar-min-height, .mui-appbar { + min-height: 48px; + } + .mui--appbar-line-height { + line-height: 48px; + } + .mui--appbar-top { + top: 48px; + } +} + +@media (min-width: 480px) { + .mui--appbar-height { + height: 64px; + } + .mui--appbar-min-height, .mui-appbar { + min-height: 64px; + } + .mui--appbar-line-height { + line-height: 64px; + } + .mui--appbar-top { + top: 64px; + } +} + +.mui-appbar { + background-color: #2196F3; + color: #FFF; +} + +/** + * MUI Buttons + */ +.mui-btn { + animation-duration: 0.0001s; + animation-name: mui-node-inserted; + font-weight: 500; + font-size: 14px; + line-height: 18px; + text-transform: uppercase; + color: rgba(0, 0, 0, 0.87); + background-color: #FFF; + transition: all 0.2s ease-in-out; + display: inline-block; + height: 36px; + padding: 0 26px; + margin-top: 6px; + margin-bottom: 6px; + border: none; + border-radius: 2px; + cursor: pointer; + -ms-touch-action: manipulation; + touch-action: manipulation; + background-image: none; + text-align: center; + line-height: 36px; + vertical-align: middle; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + font-size: 14px; + letter-spacing: 0.03em; + position: relative; + overflow: hidden; +} + +.mui-btn:hover, .mui-btn:focus, .mui-btn:active { + color: rgba(0, 0, 0, 0.87); + background-color: white; +} + +.mui-btn[disabled]:hover, .mui-btn[disabled]:focus, .mui-btn[disabled]:active { + color: rgba(0, 0, 0, 0.87); + background-color: #FFF; +} + +.mui-btn.mui-btn--flat { + color: rgba(0, 0, 0, 0.87); + background-color: transparent; +} + +.mui-btn.mui-btn--flat:hover, .mui-btn.mui-btn--flat:focus, .mui-btn.mui-btn--flat:active { + color: rgba(0, 0, 0, 0.87); + background-color: #f2f2f2; +} + +.mui-btn.mui-btn--flat[disabled]:hover, .mui-btn.mui-btn--flat[disabled]:focus, .mui-btn.mui-btn--flat[disabled]:active { + color: rgba(0, 0, 0, 0.87); + background-color: transparent; +} + +.mui-btn:hover, .mui-btn:focus, .mui-btn:active { + outline: 0; + text-decoration: none; + color: rgba(0, 0, 0, 0.87); +} + +.mui-btn:hover, .mui-btn:focus { + box-shadow: 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); +} + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mui-btn:hover, .mui-btn:focus { + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.12), -1px 0px 2px rgba(0, 0, 0, 0.12), 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); + } +} + +.mui-btn:active { + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); +} + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mui-btn:active { + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.12), -1px 0px 2px rgba(0, 0, 0, 0.12), 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); + } +} + +.mui-btn:disabled, .mui-btn.mui--is-disabled { + cursor: not-allowed; + pointer-events: none; + opacity: 0.60; + box-shadow: none; +} + +.mui-btn + .mui-btn { + margin-left: 8px; +} + +.mui-btn--flat { + background-color: transparent; +} + +.mui-btn--flat:hover, .mui-btn--flat:focus, .mui-btn--flat:active { + box-shadow: none; + background-color: #f2f2f2; +} + +.mui-btn--raised, .mui-btn--fab { + box-shadow: 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); +} + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mui-btn--raised, .mui-btn--fab { + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.12), -1px 0px 2px rgba(0, 0, 0, 0.12), 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); + } +} + +.mui-btn--raised:active, .mui-btn--fab:active { + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); +} + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mui-btn--raised:active, .mui-btn--fab:active { + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.12), -1px 0px 2px rgba(0, 0, 0, 0.12), 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); + } +} + +.mui-btn--fab { + position: relative; + padding: 0; + width: 55px; + height: 55px; + line-height: 55px; + border-radius: 50%; + z-index: 1; +} + +.mui-btn--primary { + color: #FFF; + background-color: #2196F3; +} + +.mui-btn--primary:hover, .mui-btn--primary:focus, .mui-btn--primary:active { + color: #FFF; + background-color: #39a1f4; +} + +.mui-btn--primary[disabled]:hover, .mui-btn--primary[disabled]:focus, .mui-btn--primary[disabled]:active { + color: #FFF; + background-color: #2196F3; +} + +.mui-btn--primary.mui-btn--flat { + color: #2196F3; + background-color: transparent; +} + +.mui-btn--primary.mui-btn--flat:hover, .mui-btn--primary.mui-btn--flat:focus, .mui-btn--primary.mui-btn--flat:active { + color: #2196F3; + background-color: #f2f2f2; +} + +.mui-btn--primary.mui-btn--flat[disabled]:hover, .mui-btn--primary.mui-btn--flat[disabled]:focus, .mui-btn--primary.mui-btn--flat[disabled]:active { + color: #2196F3; + background-color: transparent; +} + +.mui-btn--dark { + color: #FFF; + background-color: #424242; +} + +.mui-btn--dark:hover, .mui-btn--dark:focus, .mui-btn--dark:active { + color: #FFF; + background-color: #4f4f4f; +} + +.mui-btn--dark[disabled]:hover, .mui-btn--dark[disabled]:focus, .mui-btn--dark[disabled]:active { + color: #FFF; + background-color: #424242; +} + +.mui-btn--dark.mui-btn--flat { + color: #424242; + background-color: transparent; +} + +.mui-btn--dark.mui-btn--flat:hover, .mui-btn--dark.mui-btn--flat:focus, .mui-btn--dark.mui-btn--flat:active { + color: #424242; + background-color: #f2f2f2; +} + +.mui-btn--dark.mui-btn--flat[disabled]:hover, .mui-btn--dark.mui-btn--flat[disabled]:focus, .mui-btn--dark.mui-btn--flat[disabled]:active { + color: #424242; + background-color: transparent; +} + +.mui-btn--danger { + color: #FFF; + background-color: #F44336; +} + +.mui-btn--danger:hover, .mui-btn--danger:focus, .mui-btn--danger:active { + color: #FFF; + background-color: #f55a4e; +} + +.mui-btn--danger[disabled]:hover, .mui-btn--danger[disabled]:focus, .mui-btn--danger[disabled]:active { + color: #FFF; + background-color: #F44336; +} + +.mui-btn--danger.mui-btn--flat { + color: #F44336; + background-color: transparent; +} + +.mui-btn--danger.mui-btn--flat:hover, .mui-btn--danger.mui-btn--flat:focus, .mui-btn--danger.mui-btn--flat:active { + color: #F44336; + background-color: #f2f2f2; +} + +.mui-btn--danger.mui-btn--flat[disabled]:hover, .mui-btn--danger.mui-btn--flat[disabled]:focus, .mui-btn--danger.mui-btn--flat[disabled]:active { + color: #F44336; + background-color: transparent; +} + +.mui-btn--accent { + color: #FFF; + background-color: #FF4081; +} + +.mui-btn--accent:hover, .mui-btn--accent:focus, .mui-btn--accent:active { + color: #FFF; + background-color: #ff5a92; +} + +.mui-btn--accent[disabled]:hover, .mui-btn--accent[disabled]:focus, .mui-btn--accent[disabled]:active { + color: #FFF; + background-color: #FF4081; +} + +.mui-btn--accent.mui-btn--flat { + color: #FF4081; + background-color: transparent; +} + +.mui-btn--accent.mui-btn--flat:hover, .mui-btn--accent.mui-btn--flat:focus, .mui-btn--accent.mui-btn--flat:active { + color: #FF4081; + background-color: #f2f2f2; +} + +.mui-btn--accent.mui-btn--flat[disabled]:hover, .mui-btn--accent.mui-btn--flat[disabled]:focus, .mui-btn--accent.mui-btn--flat[disabled]:active { + color: #FF4081; + background-color: transparent; +} + +.mui-btn--small { + height: 30.6px; + line-height: 30.6px; + padding: 0 16px; + font-size: 13px; +} + +.mui-btn--large { + height: 54px; + line-height: 54px; + padding: 0 26px; + font-size: 14px; +} + +.mui-btn--fab.mui-btn--small { + width: 44px; + height: 44px; + line-height: 44px; +} + +.mui-btn--fab.mui-btn--large { + width: 75px; + height: 75px; + line-height: 75px; +} + +/** + * MUI Checkboxe and Radio Components + */ +.mui-radio, +.mui-checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} + +.mui-radio > label, +.mui-checkbox > label { + min-height: 20px; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} + +.mui-radio > label > input[type="radio"], +.mui-radio--inline > label > input[type="radio"], +.mui-checkbox > label > input[type="checkbox"], +.mui-checkbox--inline > label > input[type="checkbox"] { + position: absolute; + margin-left: -20px; + margin-top: 4px; +} + +.mui-radio + .mui-radio, +.mui-checkbox + .mui-checkbox { + margin-top: -5px; +} + +.mui-radio--inline, +.mui-checkbox--inline { + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + vertical-align: middle; + font-weight: normal; + cursor: pointer; +} + +.mui-radio--inline > input[type="radio"], +.mui-radio--inline > input[type="checkbox"], +.mui-radio--inline > label > input[type="radio"], +.mui-radio--inline > label > input[type="checkbox"], +.mui-checkbox--inline > input[type="radio"], +.mui-checkbox--inline > input[type="checkbox"], +.mui-checkbox--inline > label > input[type="radio"], +.mui-checkbox--inline > label > input[type="checkbox"] { + margin: 4px 0 0; + line-height: normal; +} + +.mui-radio--inline + .mui-radio--inline, +.mui-checkbox--inline + .mui-checkbox--inline { + margin-top: 0; + margin-left: 10px; +} + +/** + * MUI Container module + */ +.mui-container { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} + +.mui-container:before, .mui-container:after { + content: " "; + display: table; +} + +.mui-container:after { + clear: both; +} + +@media (min-width: 544px) { + .mui-container { + max-width: 570px; + } +} + +@media (min-width: 768px) { + .mui-container { + max-width: 740px; + } +} + +@media (min-width: 992px) { + .mui-container { + max-width: 960px; + } +} + +@media (min-width: 1200px) { + .mui-container { + max-width: 1170px; + } +} + +.mui-container-fluid { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} + +.mui-container-fluid:before, .mui-container-fluid:after { + content: " "; + display: table; +} + +.mui-container-fluid:after { + clear: both; +} + +/** + * MUI Divider Component and CSS Helpers + */ +.mui-divider { + display: block; + height: 1px; + background-color: rgba(0, 0, 0, 0.12); +} + +.mui--divider-top { + border-top: 1px solid rgba(0, 0, 0, 0.12); +} + +.mui--divider-bottom { + border-bottom: 1px solid rgba(0, 0, 0, 0.12); +} + +.mui--divider-left { + border-left: 1px solid rgba(0, 0, 0, 0.12); +} + +.mui--divider-right { + border-right: 1px solid rgba(0, 0, 0, 0.12); +} + +/** + * MUI Dropdown module + */ +.mui-dropdown { + display: inline-block; + position: relative; +} + +[data-mui-toggle="dropdown"] { + animation-duration: 0.0001s; + animation-name: mui-node-inserted; + outline: 0; +} + +.mui-dropdown__menu { + position: absolute; + top: 100%; + left: 0; + display: none; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + list-style: none; + font-size: 14px; + text-align: left; + background-color: #FFF; + border-radius: 2px; + z-index: 1; + background-clip: padding-box; +} + +.mui-dropdown__menu.mui--is-open { + display: block; +} + +.mui-dropdown__menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.429; + color: rgba(0, 0, 0, 0.87); + white-space: nowrap; +} + +.mui-dropdown__menu > li > a:hover, .mui-dropdown__menu > li > a:focus { + text-decoration: none; + color: rgba(0, 0, 0, 0.87); + background-color: #EEEEEE; +} + +.mui-dropdown__menu > .mui--is-disabled > a, .mui-dropdown__menu > .mui--is-disabled > a:hover, .mui-dropdown__menu > .mui--is-disabled > a:focus { + color: #EEEEEE; +} + +.mui-dropdown__menu > .mui--is-disabled > a:hover, .mui-dropdown__menu > .mui--is-disabled > a:focus { + text-decoration: none; + background-color: transparent; + background-image: none; + cursor: not-allowed; +} + +.mui-dropdown__menu--right { + left: auto; + right: 0; +} + +/** + * MUI Form Component + */ +@media (min-width: 544px) { + .mui-form--inline > .mui-textfield { + display: inline-block; + margin-bottom: 0; + } + .mui-form--inline > .mui-radio, + .mui-form--inline > .mui-checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .mui-form--inline > .mui-radio > label, + .mui-form--inline > .mui-checkbox > label { + padding-left: 0; + } + .mui-form--inline > .mui-radio > label > input[type="radio"], + .mui-form--inline > .mui-checkbox > label > input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .mui-form--inline > .mui-select { + display: inline-block; + } + .mui-form--inline > .mui-btn { + margin-bottom: 0; + margin-top: 0; + vertical-align: bottom; + } +} + +/** + * MUI Grid module + */ +.mui-row { + margin-left: -15px; + margin-right: -15px; +} + +.mui-row:before, .mui-row:after { + content: " "; + display: table; +} + +.mui-row:after { + clear: both; +} + +.mui-col-xs-1, .mui-col-sm-1, .mui-col-md-1, .mui-col-lg-1, .mui-col-xs-2, .mui-col-sm-2, .mui-col-md-2, .mui-col-lg-2, .mui-col-xs-3, .mui-col-sm-3, .mui-col-md-3, .mui-col-lg-3, .mui-col-xs-4, .mui-col-sm-4, .mui-col-md-4, .mui-col-lg-4, .mui-col-xs-5, .mui-col-sm-5, .mui-col-md-5, .mui-col-lg-5, .mui-col-xs-6, .mui-col-sm-6, .mui-col-md-6, .mui-col-lg-6, .mui-col-xs-7, .mui-col-sm-7, .mui-col-md-7, .mui-col-lg-7, .mui-col-xs-8, .mui-col-sm-8, .mui-col-md-8, .mui-col-lg-8, .mui-col-xs-9, .mui-col-sm-9, .mui-col-md-9, .mui-col-lg-9, .mui-col-xs-10, .mui-col-sm-10, .mui-col-md-10, .mui-col-lg-10, .mui-col-xs-11, .mui-col-sm-11, .mui-col-md-11, .mui-col-lg-11, .mui-col-xs-12, .mui-col-sm-12, .mui-col-md-12, .mui-col-lg-12 { + min-height: 1px; + padding-left: 15px; + padding-right: 15px; +} + +.mui-col-xs-1, .mui-col-xs-2, .mui-col-xs-3, .mui-col-xs-4, .mui-col-xs-5, .mui-col-xs-6, .mui-col-xs-7, .mui-col-xs-8, .mui-col-xs-9, .mui-col-xs-10, .mui-col-xs-11, .mui-col-xs-12 { + float: left; +} + +.mui-col-xs-1 { + width: 8.33333%; +} + +.mui-col-xs-2 { + width: 16.66667%; +} + +.mui-col-xs-3 { + width: 25%; +} + +.mui-col-xs-4 { + width: 33.33333%; +} + +.mui-col-xs-5 { + width: 41.66667%; +} + +.mui-col-xs-6 { + width: 50%; +} + +.mui-col-xs-7 { + width: 58.33333%; +} + +.mui-col-xs-8 { + width: 66.66667%; +} + +.mui-col-xs-9 { + width: 75%; +} + +.mui-col-xs-10 { + width: 83.33333%; +} + +.mui-col-xs-11 { + width: 91.66667%; +} + +.mui-col-xs-12 { + width: 100%; +} + +.mui-col-xs-offset-0 { + margin-left: 0%; +} + +.mui-col-xs-offset-1 { + margin-left: 8.33333%; +} + +.mui-col-xs-offset-2 { + margin-left: 16.66667%; +} + +.mui-col-xs-offset-3 { + margin-left: 25%; +} + +.mui-col-xs-offset-4 { + margin-left: 33.33333%; +} + +.mui-col-xs-offset-5 { + margin-left: 41.66667%; +} + +.mui-col-xs-offset-6 { + margin-left: 50%; +} + +.mui-col-xs-offset-7 { + margin-left: 58.33333%; +} + +.mui-col-xs-offset-8 { + margin-left: 66.66667%; +} + +.mui-col-xs-offset-9 { + margin-left: 75%; +} + +.mui-col-xs-offset-10 { + margin-left: 83.33333%; +} + +.mui-col-xs-offset-11 { + margin-left: 91.66667%; +} + +.mui-col-xs-offset-12 { + margin-left: 100%; +} + +@media (min-width: 544px) { + .mui-col-sm-1, .mui-col-sm-2, .mui-col-sm-3, .mui-col-sm-4, .mui-col-sm-5, .mui-col-sm-6, .mui-col-sm-7, .mui-col-sm-8, .mui-col-sm-9, .mui-col-sm-10, .mui-col-sm-11, .mui-col-sm-12 { + float: left; + } + .mui-col-sm-1 { + width: 8.33333%; + } + .mui-col-sm-2 { + width: 16.66667%; + } + .mui-col-sm-3 { + width: 25%; + } + .mui-col-sm-4 { + width: 33.33333%; + } + .mui-col-sm-5 { + width: 41.66667%; + } + .mui-col-sm-6 { + width: 50%; + } + .mui-col-sm-7 { + width: 58.33333%; + } + .mui-col-sm-8 { + width: 66.66667%; + } + .mui-col-sm-9 { + width: 75%; + } + .mui-col-sm-10 { + width: 83.33333%; + } + .mui-col-sm-11 { + width: 91.66667%; + } + .mui-col-sm-12 { + width: 100%; + } + .mui-col-sm-offset-0 { + margin-left: 0%; + } + .mui-col-sm-offset-1 { + margin-left: 8.33333%; + } + .mui-col-sm-offset-2 { + margin-left: 16.66667%; + } + .mui-col-sm-offset-3 { + margin-left: 25%; + } + .mui-col-sm-offset-4 { + margin-left: 33.33333%; + } + .mui-col-sm-offset-5 { + margin-left: 41.66667%; + } + .mui-col-sm-offset-6 { + margin-left: 50%; + } + .mui-col-sm-offset-7 { + margin-left: 58.33333%; + } + .mui-col-sm-offset-8 { + margin-left: 66.66667%; + } + .mui-col-sm-offset-9 { + margin-left: 75%; + } + .mui-col-sm-offset-10 { + margin-left: 83.33333%; + } + .mui-col-sm-offset-11 { + margin-left: 91.66667%; + } + .mui-col-sm-offset-12 { + margin-left: 100%; + } +} + +@media (min-width: 768px) { + .mui-col-md-1, .mui-col-md-2, .mui-col-md-3, .mui-col-md-4, .mui-col-md-5, .mui-col-md-6, .mui-col-md-7, .mui-col-md-8, .mui-col-md-9, .mui-col-md-10, .mui-col-md-11, .mui-col-md-12 { + float: left; + } + .mui-col-md-1 { + width: 8.33333%; + } + .mui-col-md-2 { + width: 16.66667%; + } + .mui-col-md-3 { + width: 25%; + } + .mui-col-md-4 { + width: 33.33333%; + } + .mui-col-md-5 { + width: 41.66667%; + } + .mui-col-md-6 { + width: 50%; + } + .mui-col-md-7 { + width: 58.33333%; + } + .mui-col-md-8 { + width: 66.66667%; + } + .mui-col-md-9 { + width: 75%; + } + .mui-col-md-10 { + width: 83.33333%; + } + .mui-col-md-11 { + width: 91.66667%; + } + .mui-col-md-12 { + width: 100%; + } + .mui-col-md-offset-0 { + margin-left: 0%; + } + .mui-col-md-offset-1 { + margin-left: 8.33333%; + } + .mui-col-md-offset-2 { + margin-left: 16.66667%; + } + .mui-col-md-offset-3 { + margin-left: 25%; + } + .mui-col-md-offset-4 { + margin-left: 33.33333%; + } + .mui-col-md-offset-5 { + margin-left: 41.66667%; + } + .mui-col-md-offset-6 { + margin-left: 50%; + } + .mui-col-md-offset-7 { + margin-left: 58.33333%; + } + .mui-col-md-offset-8 { + margin-left: 66.66667%; + } + .mui-col-md-offset-9 { + margin-left: 75%; + } + .mui-col-md-offset-10 { + margin-left: 83.33333%; + } + .mui-col-md-offset-11 { + margin-left: 91.66667%; + } + .mui-col-md-offset-12 { + margin-left: 100%; + } +} + +@media (min-width: 992px) { + .mui-col-lg-1, .mui-col-lg-2, .mui-col-lg-3, .mui-col-lg-4, .mui-col-lg-5, .mui-col-lg-6, .mui-col-lg-7, .mui-col-lg-8, .mui-col-lg-9, .mui-col-lg-10, .mui-col-lg-11, .mui-col-lg-12 { + float: left; + } + .mui-col-lg-1 { + width: 8.33333%; + } + .mui-col-lg-2 { + width: 16.66667%; + } + .mui-col-lg-3 { + width: 25%; + } + .mui-col-lg-4 { + width: 33.33333%; + } + .mui-col-lg-5 { + width: 41.66667%; + } + .mui-col-lg-6 { + width: 50%; + } + .mui-col-lg-7 { + width: 58.33333%; + } + .mui-col-lg-8 { + width: 66.66667%; + } + .mui-col-lg-9 { + width: 75%; + } + .mui-col-lg-10 { + width: 83.33333%; + } + .mui-col-lg-11 { + width: 91.66667%; + } + .mui-col-lg-12 { + width: 100%; + } + .mui-col-lg-offset-0 { + margin-left: 0%; + } + .mui-col-lg-offset-1 { + margin-left: 8.33333%; + } + .mui-col-lg-offset-2 { + margin-left: 16.66667%; + } + .mui-col-lg-offset-3 { + margin-left: 25%; + } + .mui-col-lg-offset-4 { + margin-left: 33.33333%; + } + .mui-col-lg-offset-5 { + margin-left: 41.66667%; + } + .mui-col-lg-offset-6 { + margin-left: 50%; + } + .mui-col-lg-offset-7 { + margin-left: 58.33333%; + } + .mui-col-lg-offset-8 { + margin-left: 66.66667%; + } + .mui-col-lg-offset-9 { + margin-left: 75%; + } + .mui-col-lg-offset-10 { + margin-left: 83.33333%; + } + .mui-col-lg-offset-11 { + margin-left: 91.66667%; + } + .mui-col-lg-offset-12 { + margin-left: 100%; + } +} + +@media (min-width: 1200px) { + .mui-col-xl-1, .mui-col-xl-2, .mui-col-xl-3, .mui-col-xl-4, .mui-col-xl-5, .mui-col-xl-6, .mui-col-xl-7, .mui-col-xl-8, .mui-col-xl-9, .mui-col-xl-10, .mui-col-xl-11, .mui-col-xl-12 { + float: left; + } + .mui-col-xl-1 { + width: 8.33333%; + } + .mui-col-xl-2 { + width: 16.66667%; + } + .mui-col-xl-3 { + width: 25%; + } + .mui-col-xl-4 { + width: 33.33333%; + } + .mui-col-xl-5 { + width: 41.66667%; + } + .mui-col-xl-6 { + width: 50%; + } + .mui-col-xl-7 { + width: 58.33333%; + } + .mui-col-xl-8 { + width: 66.66667%; + } + .mui-col-xl-9 { + width: 75%; + } + .mui-col-xl-10 { + width: 83.33333%; + } + .mui-col-xl-11 { + width: 91.66667%; + } + .mui-col-xl-12 { + width: 100%; + } + .mui-col-xl-offset-0 { + margin-left: 0%; + } + .mui-col-xl-offset-1 { + margin-left: 8.33333%; + } + .mui-col-xl-offset-2 { + margin-left: 16.66667%; + } + .mui-col-xl-offset-3 { + margin-left: 25%; + } + .mui-col-xl-offset-4 { + margin-left: 33.33333%; + } + .mui-col-xl-offset-5 { + margin-left: 41.66667%; + } + .mui-col-xl-offset-6 { + margin-left: 50%; + } + .mui-col-xl-offset-7 { + margin-left: 58.33333%; + } + .mui-col-xl-offset-8 { + margin-left: 66.66667%; + } + .mui-col-xl-offset-9 { + margin-left: 75%; + } + .mui-col-xl-offset-10 { + margin-left: 83.33333%; + } + .mui-col-xl-offset-11 { + margin-left: 91.66667%; + } + .mui-col-xl-offset-12 { + margin-left: 100%; + } +} + +/** + * MUI Panel module + */ +.mui-panel { + padding: 15px; + margin-bottom: 20px; + border-radius: 0; + background-color: #FFF; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.16), 0 0px 2px 0 rgba(0, 0, 0, 0.12); +} + +.mui-panel:before, .mui-panel:after { + content: " "; + display: table; +} + +.mui-panel:after { + clear: both; +} + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mui-panel { + box-shadow: 0 -1px 2px 0 rgba(0, 0, 0, 0.12), -1px 0px 2px 0 rgba(0, 0, 0, 0.12), 0 2px 2px 0 rgba(0, 0, 0, 0.16), 0 0px 2px 0 rgba(0, 0, 0, 0.12); + } +} + +/** + * MUI Select Component + */ +.mui-select { + display: block; + padding-top: 15px; + margin-bottom: 20px; + position: relative; +} + +.mui-select:focus { + outline: 0; +} + +.mui-select:focus > select { + height: 33px; + margin-bottom: -1px; + border-color: #2196F3; + border-width: 2px; +} + +.mui-select > select { + animation-duration: 0.0001s; + animation-name: mui-node-inserted; + display: block; + height: 32px; + width: 100%; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + outline: none; + border: none; + border-bottom: 1px solid rgba(0, 0, 0, 0.26); + border-radius: 0px; + box-shadow: none; + background-color: transparent; + background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iNiIgd2lkdGg9IjEwIj48cG9seWdvbiBwb2ludHM9IjAsMCAxMCwwIDUsNiIgc3R5bGU9ImZpbGw6cmdiYSgwLDAsMCwuMjQpOyIvPjwvc3ZnPg=="); + background-repeat: no-repeat; + background-position: right center; + cursor: pointer; + color: rgba(0, 0, 0, 0.87); + font-size: 16px; + padding: 0 25px 0 0; +} + +.mui-select > select::-ms-expand { + display: none; +} + +.mui-select > select:focus { + outline: 0; + height: 33px; + margin-bottom: -1px; + border-color: #2196F3; + border-width: 2px; +} + +.mui-select > select:disabled { + color: rgba(0, 0, 0, 0.38); + cursor: not-allowed; + background-color: transparent; + opacity: 1; +} + +.mui-select__menu { + position: absolute; + z-index: 2; + min-width: 100%; + overflow-y: auto; + padding: 8px 0; + background-color: #FFF; + font-size: 16px; +} + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mui-select__menu { + border-left: 1px solid rgba(0, 0, 0, 0.12); + border-top: 1px solid rgba(0, 0, 0, 0.12); + } +} + +.mui-select__menu > div { + padding: 0 22px; + height: 42px; + line-height: 42px; + cursor: pointer; + white-space: nowrap; +} + +.mui-select__menu > div:hover { + background-color: #E0E0E0; +} + +.mui-select__menu > div.mui--is-selected { + background-color: #EEEEEE; +} + +/** + * MUI Table Component + */ +th { + text-align: left; +} + +.mui-table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} + +.mui-table > thead > tr > th, +.mui-table > thead > tr > td, +.mui-table > tbody > tr > th, +.mui-table > tbody > tr > td, +.mui-table > tfoot > tr > th, +.mui-table > tfoot > tr > td { + padding: 10px; + line-height: 1.429; +} + +.mui-table > thead > tr > th { + border-bottom: 2px solid rgba(0, 0, 0, 0.12); + font-weight: 700; +} + +.mui-table > tbody + tbody { + border-top: 2px solid rgba(0, 0, 0, 0.12); +} + +.mui-table.mui-table--bordered > tbody > tr > td { + border-bottom: 1px solid rgba(0, 0, 0, 0.12); +} + +/** + * MUI Tabs module + */ +.mui-tabs__bar { + list-style: none; + padding-left: 0; + margin-bottom: 0; + background-color: transparent; + white-space: nowrap; + overflow-x: auto; +} + +.mui-tabs__bar > li { + display: inline-block; +} + +.mui-tabs__bar > li > a { + display: block; + white-space: nowrap; + text-transform: uppercase; + font-weight: 500; + font-size: 14px; + color: rgba(0, 0, 0, 0.87); + cursor: default; + height: 48px; + line-height: 48px; + padding-left: 24px; + padding-right: 24px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.mui-tabs__bar > li > a:hover { + text-decoration: none; +} + +.mui-tabs__bar > li.mui--is-active { + border-bottom: 2px solid #2196F3; +} + +.mui-tabs__bar > li.mui--is-active > a { + color: #2196F3; +} + +.mui-tabs__bar.mui-tabs__bar--justified { + display: table; + width: 100%; + table-layout: fixed; +} + +.mui-tabs__bar.mui-tabs__bar--justified > li { + display: table-cell; +} + +.mui-tabs__bar.mui-tabs__bar--justified > li > a { + text-align: center; + padding-left: 0px; + padding-right: 0px; +} + +.mui-tabs__pane { + display: none; +} + +.mui-tabs__pane.mui--is-active { + display: block; +} + +[data-mui-toggle="tab"] { + animation-duration: 0.0001s; + animation-name: mui-node-inserted; +} + +/** + * MUI Textfield Component + */ +.mui-textfield { + display: block; + padding-top: 15px; + margin-bottom: 20px; + position: relative; +} + +.mui-textfield > label { + position: absolute; + top: 0; + display: block; + width: 100%; + color: rgba(0, 0, 0, 0.54); + font-size: 12px; + font-weight: 400; + line-height: 15px; + overflow-x: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.mui-textfield > textarea { + padding-top: 5px; +} + +.mui-textfield > input, +.mui-textfield > textarea { + display: block; +} + +.mui-textfield > input:focus ~ label, +.mui-textfield > textarea:focus ~ label { + color: #2196F3; +} + +.mui-textfield--float-label > label { + position: absolute; + transform: translate(0px, 15px); + font-size: 16px; + line-height: 32px; + color: rgba(0, 0, 0, 0.26); + text-overflow: clip; + cursor: text; + pointer-events: none; +} + +.mui-textfield--float-label > input:focus ~ label, +.mui-textfield--float-label > textarea:focus ~ label { + transform: translate(0px, 0px); + font-size: 12px; + line-height: 15px; + text-overflow: ellipsis; +} + +.mui-textfield--float-label > input:not(:focus).mui--is-not-empty ~ label, .mui-textfield--float-label > input:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, .mui-textfield--float-label > input:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield--float-label > textarea:not(:focus).mui--is-not-empty ~ label, +.mui-textfield--float-label > textarea:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield--float-label > textarea:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label { + color: rgba(0, 0, 0, 0.54); + font-size: 12px; + line-height: 15px; + transform: translate(0px, 0px); + text-overflow: ellipsis; +} + +.mui-textfield--wrap-label { + display: table; + width: 100%; + padding-top: 0px; +} + +.mui-textfield--wrap-label:not(.mui-textfield--float-label) > label { + display: table-header-group; + position: static; + white-space: normal; + overflow-x: visible; +} + +.mui-textfield > input, +.mui-textfield > textarea { + animation-duration: 0.0001s; + animation-name: mui-node-inserted; + display: block; + background-color: transparent; + color: rgba(0, 0, 0, 0.87); + border: none; + border-bottom: 1px solid rgba(0, 0, 0, 0.26); + outline: none; + width: 100%; + font-size: 16px; + padding: 0; + box-shadow: none; + border-radius: 0px; + background-image: none; +} + +.mui-textfield > input:focus, +.mui-textfield > textarea:focus { + border-color: #2196F3; + border-width: 2px; +} + +.mui-textfield > input:disabled, .mui-textfield > input:-moz-read-only, +.mui-textfield > textarea:disabled, +.mui-textfield > textarea:-moz-read-only { + cursor: not-allowed; + background-color: transparent; + opacity: 1; +} + +.mui-textfield > input:disabled, .mui-textfield > input:read-only, +.mui-textfield > textarea:disabled, +.mui-textfield > textarea:read-only { + cursor: not-allowed; + background-color: transparent; + opacity: 1; +} + +.mui-textfield > input::-webkit-input-placeholder, +.mui-textfield > textarea::-webkit-input-placeholder { + color: rgba(0, 0, 0, 0.26); + opacity: 1; +} + +.mui-textfield > input::-moz-placeholder, +.mui-textfield > textarea::-moz-placeholder { + color: rgba(0, 0, 0, 0.26); + opacity: 1; +} + +.mui-textfield > input:-ms-input-placeholder, +.mui-textfield > textarea:-ms-input-placeholder { + color: rgba(0, 0, 0, 0.26); + opacity: 1; +} + +.mui-textfield > input::placeholder, +.mui-textfield > textarea::placeholder { + color: rgba(0, 0, 0, 0.26); + opacity: 1; +} + +.mui-textfield > input { + height: 32px; +} + +.mui-textfield > input:focus { + height: 33px; + margin-bottom: -1px; +} + +.mui-textfield > textarea { + min-height: 64px; +} + +.mui-textfield > textarea[rows]:not([rows="2"]):focus { + margin-bottom: -1px; +} + +.mui-textfield > input:focus { + height: 33px; + margin-bottom: -1px; +} + +.mui-textfield > input:invalid:not(:focus):not(:required), .mui-textfield > input:invalid:not(:focus):required.mui--is-not-empty, .mui-textfield > input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty, .mui-textfield > input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty), .mui-textfield > input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > textarea:invalid:not(:focus):not(:required), +.mui-textfield > textarea:invalid:not(:focus):required.mui--is-not-empty, +.mui-textfield > textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty, +.mui-textfield > textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > input:not(:focus).mui--is-invalid:not(:required), +.mui-textfield > input:not(:focus).mui--is-invalid:required.mui--is-not-empty, +.mui-textfield > input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty, +.mui-textfield > input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > textarea:not(:focus).mui--is-invalid:not(:required), +.mui-textfield > textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty, +.mui-textfield > textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty, +.mui-textfield > textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) { + border-color: #F44336; + border-width: 2px; +} + +.mui-textfield > input:invalid:not(:focus):not(:required), .mui-textfield > input:invalid:not(:focus):required.mui--is-not-empty, .mui-textfield > input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty, .mui-textfield > input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty), .mui-textfield > input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > input:not(:focus).mui--is-invalid:not(:required), +.mui-textfield > input:not(:focus).mui--is-invalid:required.mui--is-not-empty, +.mui-textfield > input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty, +.mui-textfield > input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) { + height: 33px; + margin-bottom: -1px; +} + +.mui-textfield > input:invalid:not(:focus):not(:required) ~ label, .mui-textfield > input:invalid:not(:focus):required.mui--is-not-empty ~ label, .mui-textfield > input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, .mui-textfield > input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield > textarea:invalid:not(:focus):not(:required) ~ label, +.mui-textfield > textarea:invalid:not(:focus):required.mui--is-not-empty ~ label, +.mui-textfield > textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield > textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield > input:not(:focus).mui--is-invalid:not(:required) ~ label, +.mui-textfield > input:not(:focus).mui--is-invalid:required.mui--is-not-empty ~ label, +.mui-textfield > input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield > input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield > textarea:not(:focus).mui--is-invalid:not(:required) ~ label, +.mui-textfield > textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty ~ label, +.mui-textfield > textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield > textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label { + color: #F44336; +} + +.mui-textfield:not(.mui-textfield--float-label) > input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty ~ label, +.mui-textfield:not(.mui-textfield--float-label) > textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty ~ label, +.mui-textfield:not(.mui-textfield--float-label) > input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty ~ label, +.mui-textfield:not(.mui-textfield--float-label) > textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty ~ label { + color: #F44336; +} + +/** + * MUI Helpers module + */ +@keyframes mui-node-inserted { + from { + opacity: 0.99; + } + to { + opacity: 1; + } +} + +.mui--no-transition { + transition: none !important; +} + +.mui--no-user-select { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.mui-caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px solid; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} + +.mui--text-left { + text-align: left !important; +} + +.mui--text-right { + text-align: right !important; +} + +.mui--text-center { + text-align: center !important; +} + +.mui--text-justify { + text-align: justify !important; +} + +.mui--text-nowrap { + white-space: nowrap !important; +} + +.mui--align-baseline { + vertical-align: baseline !important; +} + +.mui--align-top { + vertical-align: top !important; +} + +.mui--align-middle { + vertical-align: middle !important; +} + +.mui--align-bottom { + vertical-align: bottom !important; +} + +.mui--text-dark { + color: rgba(0, 0, 0, 0.87); +} + +.mui--text-dark-secondary { + color: rgba(0, 0, 0, 0.54); +} + +.mui--text-dark-hint { + color: rgba(0, 0, 0, 0.38); +} + +.mui--text-light { + color: #FFF; +} + +.mui--text-light-secondary { + color: rgba(255, 255, 255, 0.7); +} + +.mui--text-light-hint { + color: rgba(255, 255, 255, 0.3); +} + +.mui--text-accent { + color: rgba(255, 64, 129, 0.87); +} + +.mui--text-accent-secondary { + color: rgba(255, 64, 129, 0.54); +} + +.mui--text-accent-hint { + color: rgba(255, 64, 129, 0.38); +} + +.mui--text-black { + color: #000; +} + +.mui--text-white { + color: #FFF; +} + +.mui--text-danger { + color: #F44336; +} + +.mui-list--unstyled { + padding-left: 0; + list-style: none; +} + +.mui-list--inline { + padding-left: 0; + list-style: none; + margin-left: -5px; +} + +.mui-list--inline > li { + display: inline-block; + padding-left: 5px; + padding-right: 5px; +} + +.mui--z1, .mui-dropdown__menu, .mui-select__menu { + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); +} + +.mui--z2 { + box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23); +} + +.mui--z3 { + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); +} + +.mui--z4 { + box-shadow: 0 14px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.22); +} + +.mui--z5 { + box-shadow: 0 19px 38px rgba(0, 0, 0, 0.3), 0 15px 12px rgba(0, 0, 0, 0.22); +} + +.mui--clearfix:before, .mui--clearfix:after { + content: " "; + display: table; +} + +.mui--clearfix:after { + clear: both; +} + +.mui--pull-right { + float: right !important; +} + +.mui--pull-left { + float: left !important; +} + +.mui--hide { + display: none !important; +} + +.mui--show { + display: block !important; +} + +.mui--invisible { + visibility: hidden; +} + +.mui--overflow-hidden { + overflow: hidden !important; +} + +.mui--overflow-hidden-x { + overflow-x: hidden !important; +} + +.mui--overflow-hidden-y { + overflow-y: hidden !important; +} + +.mui--visible-xs-block, +.mui--visible-xs-inline, +.mui--visible-xs-inline-block, +.mui--visible-sm-block, +.mui--visible-sm-inline, +.mui--visible-sm-inline-block, +.mui--visible-md-block, +.mui--visible-md-inline, +.mui--visible-md-inline-block, +.mui--visible-lg-block, +.mui--visible-lg-inline, +.mui--visible-lg-inline-block, +.mui--visible-xl-block, +.mui--visible-xl-inline, +.mui--visible-xl-inline-block { + display: none !important; +} + +@media (max-width: 543px) { + .mui-visible-xs { + display: block !important; + } + table.mui-visible-xs { + display: table; + } + tr.mui-visible-xs { + display: table-row !important; + } + th.mui-visible-xs, + td.mui-visible-xs { + display: table-cell !important; + } + .mui--visible-xs-block { + display: block !important; + } + .mui--visible-xs-inline { + display: inline !important; + } + .mui--visible-xs-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 544px) and (max-width: 767px) { + .mui-visible-sm { + display: block !important; + } + table.mui-visible-sm { + display: table; + } + tr.mui-visible-sm { + display: table-row !important; + } + th.mui-visible-sm, + td.mui-visible-sm { + display: table-cell !important; + } + .mui--visible-sm-block { + display: block !important; + } + .mui--visible-sm-inline { + display: inline !important; + } + .mui--visible-sm-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .mui-visible-md { + display: block !important; + } + table.mui-visible-md { + display: table; + } + tr.mui-visible-md { + display: table-row !important; + } + th.mui-visible-md, + td.mui-visible-md { + display: table-cell !important; + } + .mui--visible-md-block { + display: block !important; + } + .mui--visible-md-inline { + display: inline !important; + } + .mui--visible-md-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .mui-visible-lg { + display: block !important; + } + table.mui-visible-lg { + display: table; + } + tr.mui-visible-lg { + display: table-row !important; + } + th.mui-visible-lg, + td.mui-visible-lg { + display: table-cell !important; + } + .mui--visible-lg-block { + display: block !important; + } + .mui--visible-lg-inline { + display: inline !important; + } + .mui--visible-lg-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 1200px) { + .mui-visible-xl { + display: block !important; + } + table.mui-visible-xl { + display: table; + } + tr.mui-visible-xl { + display: table-row !important; + } + th.mui-visible-xl, + td.mui-visible-xl { + display: table-cell !important; + } + .mui--visible-xl-block { + display: block !important; + } + .mui--visible-xl-inline { + display: inline !important; + } + .mui--visible-xl-inline-block { + display: inline-block !important; + } +} + +@media (max-width: 543px) { + .mui--hidden-xs { + display: none !important; + } +} + +@media (min-width: 544px) and (max-width: 767px) { + .mui--hidden-sm { + display: none !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .mui--hidden-md { + display: none !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .mui--hidden-lg { + display: none !important; + } +} + +@media (min-width: 1200px) { + .mui--hidden-xl { + display: none !important; + } +} + +body.mui-body--scroll-lock { + overflow: hidden !important; +} + +/** + * MUI Overlay module + */ +#mui-overlay { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 99999999; + background-color: rgba(0, 0, 0, 0.2); + overflow: auto; +} + +/** + * MUI Ripple module + */ +.mui-ripple-effect { + position: absolute; + border-radius: 50%; + pointer-events: none; + opacity: 0; + animation: mui-ripple-animation 2s; +} + +@keyframes mui-ripple-animation { + from { + transform: scale(1); + opacity: 0.4; + } + to { + transform: scale(100); + opacity: 0; + } +} + +.mui-btn > .mui-ripple-effect { + background-color: #a6a6a6; +} + +.mui-btn--primary > .mui-ripple-effect { + background-color: #FFF; +} + +.mui-btn--dark > .mui-ripple-effect { + background-color: #FFF; +} + +.mui-btn--danger > .mui-ripple-effect { + background-color: #FFF; +} + +.mui-btn--accent > .mui-ripple-effect { + background-color: #FFF; +} + +.mui-btn--flat > .mui-ripple-effect { + background-color: #a6a6a6; +} + +/** + * MUI Typography module + */ +.mui--text-display4 { + font-weight: 300; + font-size: 112px; + line-height: 112px; +} + +.mui--text-display3 { + font-weight: 400; + font-size: 56px; + line-height: 56px; +} + +.mui--text-display2 { + font-weight: 400; + font-size: 45px; + line-height: 48px; +} + +.mui--text-display1, h1 { + font-weight: 400; + font-size: 34px; + line-height: 40px; +} + +.mui--text-headline, h2 { + font-weight: 400; + font-size: 24px; + line-height: 32px; +} + +.mui--text-title, h3 { + font-weight: 400; + font-size: 20px; + line-height: 28px; +} + +.mui--text-subhead, h4 { + font-weight: 400; + font-size: 16px; + line-height: 24px; +} + +.mui--text-body2, h5 { + font-weight: 500; + font-size: 14px; + line-height: 24px; +} + +.mui--text-body1 { + font-weight: 400; + font-size: 14px; + line-height: 20px; +} + +.mui--text-caption { + font-weight: 400; + font-size: 12px; + line-height: 16px; +} + +.mui--text-menu { + font-weight: 500; + font-size: 13px; + line-height: 17px; +} + +.mui--text-button { + font-weight: 500; + font-size: 14px; + line-height: 18px; + text-transform: uppercase; +} diff --git a/platforms/ios/www/libs/mui/packages/meteor/lib/css/mui.min.css b/platforms/ios/www/libs/mui/packages/meteor/lib/css/mui.min.css new file mode 100644 index 0000000..750f365 --- /dev/null +++ b/platforms/ios/www/libs/mui/packages/meteor/lib/css/mui.min.css @@ -0,0 +1 @@ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-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{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}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{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{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-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:border-box}:after,:before{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:Arial,Verdana,Tahoma;font-size:14px;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);background-color:#FFF}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#2196F3;text-decoration:none}a:focus,a:hover{color:#1976D2;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}p{margin:0 0 10px}ol,ul{margin-top:0;margin-bottom:10px}figure{margin:0}img{vertical-align:middle}hr{margin-top:20px;margin-bottom:20px;border:0;height:1px;background-color:rgba(0,0,0,.12)}legend{display:block;width:100%;padding:0;margin-bottom:10px;font-size:21px;color:rgba(0,0,0,.87);line-height:inherit;border:0}input[type=search]{box-sizing:border-box;-webkit-appearance:none}input[type=checkbox]:focus,input[type=radio]:focus,input[type=file]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type=checkbox]:disabled,input[type=radio]:disabled{cursor:not-allowed}strong{font-weight:700}abbr[title]{cursor:help;border-bottom:1px dotted #2196F3}h1,h2,h3{margin-top:20px;margin-bottom:10px}h4,h5,h6{margin-top:10px;margin-bottom:10px}.mui--appbar-height{height:56px}.mui--appbar-min-height,.mui-appbar{min-height:56px}.mui--appbar-line-height{line-height:56px}.mui--appbar-top{top:56px}@media (orientation:landscape) and (max-height:480px){.mui--appbar-height{height:48px}.mui--appbar-min-height,.mui-appbar{min-height:48px}.mui--appbar-line-height{line-height:48px}.mui--appbar-top{top:48px}}@media (min-width:480px){.mui--appbar-height{height:64px}.mui--appbar-min-height,.mui-appbar{min-height:64px}.mui--appbar-line-height{line-height:64px}.mui--appbar-top{top:64px}}.mui-appbar{background-color:#2196F3;color:#FFF}.mui-btn{animation-duration:.1ms;animation-name:mui-node-inserted;font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase;color:rgba(0,0,0,.87);background-color:#FFF;transition:all .2s ease-in-out;display:inline-block;height:36px;padding:0 26px;margin-top:6px;margin-bottom:6px;border:none;border-radius:2px;cursor:pointer;-ms-touch-action:manipulation;touch-action:manipulation;background-image:none;text-align:center;line-height:36px;vertical-align:middle;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:14px;letter-spacing:.03em;position:relative;overflow:hidden}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{color:rgba(0,0,0,.87);background-color:#fff}.mui-btn[disabled]:active,.mui-btn[disabled]:focus,.mui-btn[disabled]:hover{color:rgba(0,0,0,.87);background-color:#FFF}.mui-btn.mui-btn--flat{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn.mui-btn--flat:active,.mui-btn.mui-btn--flat:focus,.mui-btn.mui-btn--flat:hover{color:rgba(0,0,0,.87);background-color:#f2f2f2}.mui-btn.mui-btn--flat[disabled]:active,.mui-btn.mui-btn--flat[disabled]:focus,.mui-btn.mui-btn--flat[disabled]:hover{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{outline:0;text-decoration:none;color:rgba(0,0,0,.87)}.mui-btn:focus,.mui-btn:hover{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:focus,.mui-btn:hover{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn.mui--is-disabled,.mui-btn:disabled{cursor:not-allowed;pointer-events:none;opacity:.6;box-shadow:none}.mui-btn+.mui-btn{margin-left:8px}.mui-btn--flat{background-color:transparent}.mui-btn--flat:active,.mui-btn--flat:focus,.mui-btn--flat:hover{box-shadow:none;background-color:#f2f2f2}.mui-btn--fab,.mui-btn--raised{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab,.mui-btn--raised{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn--fab{position:relative;padding:0;width:55px;height:55px;line-height:55px;border-radius:50%;z-index:1}.mui-btn--primary{color:#FFF;background-color:#2196F3}.mui-btn--primary:active,.mui-btn--primary:focus,.mui-btn--primary:hover{color:#FFF;background-color:#39a1f4}.mui-btn--primary[disabled]:active,.mui-btn--primary[disabled]:focus,.mui-btn--primary[disabled]:hover{color:#FFF;background-color:#2196F3}.mui-btn--primary.mui-btn--flat{color:#2196F3;background-color:transparent}.mui-btn--primary.mui-btn--flat:active,.mui-btn--primary.mui-btn--flat:focus,.mui-btn--primary.mui-btn--flat:hover{color:#2196F3;background-color:#f2f2f2}.mui-btn--primary.mui-btn--flat[disabled]:active,.mui-btn--primary.mui-btn--flat[disabled]:focus,.mui-btn--primary.mui-btn--flat[disabled]:hover{color:#2196F3;background-color:transparent}.mui-btn--dark{color:#FFF;background-color:#424242}.mui-btn--dark:active,.mui-btn--dark:focus,.mui-btn--dark:hover{color:#FFF;background-color:#4f4f4f}.mui-btn--dark[disabled]:active,.mui-btn--dark[disabled]:focus,.mui-btn--dark[disabled]:hover{color:#FFF;background-color:#424242}.mui-btn--dark.mui-btn--flat{color:#424242;background-color:transparent}.mui-btn--dark.mui-btn--flat:active,.mui-btn--dark.mui-btn--flat:focus,.mui-btn--dark.mui-btn--flat:hover{color:#424242;background-color:#f2f2f2}.mui-btn--dark.mui-btn--flat[disabled]:active,.mui-btn--dark.mui-btn--flat[disabled]:focus,.mui-btn--dark.mui-btn--flat[disabled]:hover{color:#424242;background-color:transparent}.mui-btn--danger{color:#FFF;background-color:#F44336}.mui-btn--danger:active,.mui-btn--danger:focus,.mui-btn--danger:hover{color:#FFF;background-color:#f55a4e}.mui-btn--danger[disabled]:active,.mui-btn--danger[disabled]:focus,.mui-btn--danger[disabled]:hover{color:#FFF;background-color:#F44336}.mui-btn--danger.mui-btn--flat{color:#F44336;background-color:transparent}.mui-btn--danger.mui-btn--flat:active,.mui-btn--danger.mui-btn--flat:focus,.mui-btn--danger.mui-btn--flat:hover{color:#F44336;background-color:#f2f2f2}.mui-btn--danger.mui-btn--flat[disabled]:active,.mui-btn--danger.mui-btn--flat[disabled]:focus,.mui-btn--danger.mui-btn--flat[disabled]:hover{color:#F44336;background-color:transparent}.mui-btn--accent{color:#FFF;background-color:#FF4081}.mui-btn--accent:active,.mui-btn--accent:focus,.mui-btn--accent:hover{color:#FFF;background-color:#ff5a92}.mui-btn--accent[disabled]:active,.mui-btn--accent[disabled]:focus,.mui-btn--accent[disabled]:hover{color:#FFF;background-color:#FF4081}.mui-btn--accent.mui-btn--flat{color:#FF4081;background-color:transparent}.mui-btn--accent.mui-btn--flat:active,.mui-btn--accent.mui-btn--flat:focus,.mui-btn--accent.mui-btn--flat:hover{color:#FF4081;background-color:#f2f2f2}.mui-btn--accent.mui-btn--flat[disabled]:active,.mui-btn--accent.mui-btn--flat[disabled]:focus,.mui-btn--accent.mui-btn--flat[disabled]:hover{color:#FF4081;background-color:transparent}.mui-btn--small{height:30.6px;line-height:30.6px;padding:0 16px;font-size:13px}.mui-btn--large{height:54px;line-height:54px;padding:0 26px;font-size:14px}.mui-btn--fab.mui-btn--small{width:44px;height:44px;line-height:44px}.mui-btn--fab.mui-btn--large{width:75px;height:75px;line-height:75px}.mui-checkbox,.mui-radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.mui-checkbox>label,.mui-radio>label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio],.mui-radio>label>input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px}.mui-checkbox+.mui-checkbox,.mui-radio+.mui-radio{margin-top:-5px}.mui-checkbox--inline,.mui-radio--inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.mui-checkbox--inline>input[type=checkbox],.mui-checkbox--inline>input[type=radio],.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox--inline>label>input[type=radio],.mui-radio--inline>input[type=checkbox],.mui-radio--inline>input[type=radio],.mui-radio--inline>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio]{margin:4px 0 0;line-height:normal}.mui-checkbox--inline+.mui-checkbox--inline,.mui-radio--inline+.mui-radio--inline{margin-top:0;margin-left:10px}.mui-container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container:after,.mui-container:before{content:" ";display:table}.mui-container:after{clear:both}@media (min-width:544px){.mui-container{max-width:570px}}@media (min-width:768px){.mui-container{max-width:740px}}@media (min-width:992px){.mui-container{max-width:960px}}@media (min-width:1200px){.mui-container{max-width:1170px}}.mui-container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container-fluid:after,.mui-container-fluid:before{content:" ";display:table}.mui-container-fluid:after{clear:both}.mui-divider{display:block;height:1px;background-color:rgba(0,0,0,.12)}.mui--divider-top{border-top:1px solid rgba(0,0,0,.12)}.mui--divider-bottom{border-bottom:1px solid rgba(0,0,0,.12)}.mui--divider-left{border-left:1px solid rgba(0,0,0,.12)}.mui--divider-right{border-right:1px solid rgba(0,0,0,.12)}.mui-dropdown{display:inline-block;position:relative}[data-mui-toggle=dropdown]{animation-duration:.1ms;animation-name:mui-node-inserted;outline:0}.mui-dropdown__menu{position:absolute;top:100%;left:0;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#FFF;border-radius:2px;z-index:1;background-clip:padding-box}.mui-dropdown__menu.mui--is-open{display:block}.mui-dropdown__menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);white-space:nowrap}.mui-dropdown__menu>li>a:focus,.mui-dropdown__menu>li>a:hover{text-decoration:none;color:rgba(0,0,0,.87);background-color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a,.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;cursor:not-allowed}.mui-dropdown__menu--right{left:auto;right:0}@media (min-width:544px){.mui-form--inline>.mui-textfield{display:inline-block;margin-bottom:0}.mui-form--inline>.mui-checkbox,.mui-form--inline>.mui-radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.mui-form--inline>.mui-checkbox>label,.mui-form--inline>.mui-radio>label{padding-left:0}.mui-form--inline>.mui-checkbox>label>input[type=checkbox],.mui-form--inline>.mui-radio>label>input[type=radio]{position:relative;margin-left:0}.mui-form--inline>.mui-select{display:inline-block}.mui-form--inline>.mui-btn{margin-bottom:0;margin-top:0;vertical-align:bottom}}.mui-row{margin-left:-15px;margin-right:-15px}.mui-row:after,.mui-row:before{content:" ";display:table}.mui-row:after{clear:both}.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9,.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9,.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9,.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{min-height:1px;padding-left:15px;padding-right:15px}.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{float:left}.mui-col-xs-1{width:8.33333%}.mui-col-xs-2{width:16.66667%}.mui-col-xs-3{width:25%}.mui-col-xs-4{width:33.33333%}.mui-col-xs-5{width:41.66667%}.mui-col-xs-6{width:50%}.mui-col-xs-7{width:58.33333%}.mui-col-xs-8{width:66.66667%}.mui-col-xs-9{width:75%}.mui-col-xs-10{width:83.33333%}.mui-col-xs-11{width:91.66667%}.mui-col-xs-12{width:100%}.mui-col-xs-offset-0{margin-left:0}.mui-col-xs-offset-1{margin-left:8.33333%}.mui-col-xs-offset-2{margin-left:16.66667%}.mui-col-xs-offset-3{margin-left:25%}.mui-col-xs-offset-4{margin-left:33.33333%}.mui-col-xs-offset-5{margin-left:41.66667%}.mui-col-xs-offset-6{margin-left:50%}.mui-col-xs-offset-7{margin-left:58.33333%}.mui-col-xs-offset-8{margin-left:66.66667%}.mui-col-xs-offset-9{margin-left:75%}.mui-col-xs-offset-10{margin-left:83.33333%}.mui-col-xs-offset-11{margin-left:91.66667%}.mui-col-xs-offset-12{margin-left:100%}@media (min-width:544px){.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9{float:left}.mui-col-sm-1{width:8.33333%}.mui-col-sm-2{width:16.66667%}.mui-col-sm-3{width:25%}.mui-col-sm-4{width:33.33333%}.mui-col-sm-5{width:41.66667%}.mui-col-sm-6{width:50%}.mui-col-sm-7{width:58.33333%}.mui-col-sm-8{width:66.66667%}.mui-col-sm-9{width:75%}.mui-col-sm-10{width:83.33333%}.mui-col-sm-11{width:91.66667%}.mui-col-sm-12{width:100%}.mui-col-sm-offset-0{margin-left:0}.mui-col-sm-offset-1{margin-left:8.33333%}.mui-col-sm-offset-2{margin-left:16.66667%}.mui-col-sm-offset-3{margin-left:25%}.mui-col-sm-offset-4{margin-left:33.33333%}.mui-col-sm-offset-5{margin-left:41.66667%}.mui-col-sm-offset-6{margin-left:50%}.mui-col-sm-offset-7{margin-left:58.33333%}.mui-col-sm-offset-8{margin-left:66.66667%}.mui-col-sm-offset-9{margin-left:75%}.mui-col-sm-offset-10{margin-left:83.33333%}.mui-col-sm-offset-11{margin-left:91.66667%}.mui-col-sm-offset-12{margin-left:100%}}@media (min-width:768px){.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9{float:left}.mui-col-md-1{width:8.33333%}.mui-col-md-2{width:16.66667%}.mui-col-md-3{width:25%}.mui-col-md-4{width:33.33333%}.mui-col-md-5{width:41.66667%}.mui-col-md-6{width:50%}.mui-col-md-7{width:58.33333%}.mui-col-md-8{width:66.66667%}.mui-col-md-9{width:75%}.mui-col-md-10{width:83.33333%}.mui-col-md-11{width:91.66667%}.mui-col-md-12{width:100%}.mui-col-md-offset-0{margin-left:0}.mui-col-md-offset-1{margin-left:8.33333%}.mui-col-md-offset-2{margin-left:16.66667%}.mui-col-md-offset-3{margin-left:25%}.mui-col-md-offset-4{margin-left:33.33333%}.mui-col-md-offset-5{margin-left:41.66667%}.mui-col-md-offset-6{margin-left:50%}.mui-col-md-offset-7{margin-left:58.33333%}.mui-col-md-offset-8{margin-left:66.66667%}.mui-col-md-offset-9{margin-left:75%}.mui-col-md-offset-10{margin-left:83.33333%}.mui-col-md-offset-11{margin-left:91.66667%}.mui-col-md-offset-12{margin-left:100%}}@media (min-width:992px){.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9{float:left}.mui-col-lg-1{width:8.33333%}.mui-col-lg-2{width:16.66667%}.mui-col-lg-3{width:25%}.mui-col-lg-4{width:33.33333%}.mui-col-lg-5{width:41.66667%}.mui-col-lg-6{width:50%}.mui-col-lg-7{width:58.33333%}.mui-col-lg-8{width:66.66667%}.mui-col-lg-9{width:75%}.mui-col-lg-10{width:83.33333%}.mui-col-lg-11{width:91.66667%}.mui-col-lg-12{width:100%}.mui-col-lg-offset-0{margin-left:0}.mui-col-lg-offset-1{margin-left:8.33333%}.mui-col-lg-offset-2{margin-left:16.66667%}.mui-col-lg-offset-3{margin-left:25%}.mui-col-lg-offset-4{margin-left:33.33333%}.mui-col-lg-offset-5{margin-left:41.66667%}.mui-col-lg-offset-6{margin-left:50%}.mui-col-lg-offset-7{margin-left:58.33333%}.mui-col-lg-offset-8{margin-left:66.66667%}.mui-col-lg-offset-9{margin-left:75%}.mui-col-lg-offset-10{margin-left:83.33333%}.mui-col-lg-offset-11{margin-left:91.66667%}.mui-col-lg-offset-12{margin-left:100%}}@media (min-width:1200px){.mui-col-xl-1,.mui-col-xl-10,.mui-col-xl-11,.mui-col-xl-12,.mui-col-xl-2,.mui-col-xl-3,.mui-col-xl-4,.mui-col-xl-5,.mui-col-xl-6,.mui-col-xl-7,.mui-col-xl-8,.mui-col-xl-9{float:left}.mui-col-xl-1{width:8.33333%}.mui-col-xl-2{width:16.66667%}.mui-col-xl-3{width:25%}.mui-col-xl-4{width:33.33333%}.mui-col-xl-5{width:41.66667%}.mui-col-xl-6{width:50%}.mui-col-xl-7{width:58.33333%}.mui-col-xl-8{width:66.66667%}.mui-col-xl-9{width:75%}.mui-col-xl-10{width:83.33333%}.mui-col-xl-11{width:91.66667%}.mui-col-xl-12{width:100%}.mui-col-xl-offset-0{margin-left:0}.mui-col-xl-offset-1{margin-left:8.33333%}.mui-col-xl-offset-2{margin-left:16.66667%}.mui-col-xl-offset-3{margin-left:25%}.mui-col-xl-offset-4{margin-left:33.33333%}.mui-col-xl-offset-5{margin-left:41.66667%}.mui-col-xl-offset-6{margin-left:50%}.mui-col-xl-offset-7{margin-left:58.33333%}.mui-col-xl-offset-8{margin-left:66.66667%}.mui-col-xl-offset-9{margin-left:75%}.mui-col-xl-offset-10{margin-left:83.33333%}.mui-col-xl-offset-11{margin-left:91.66667%}.mui-col-xl-offset-12{margin-left:100%}}.mui-panel{padding:15px;margin-bottom:20px;border-radius:0;background-color:#FFF;box-shadow:0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}.mui-panel:after,.mui-panel:before{content:" ";display:table}.mui-panel:after{clear:both}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-panel{box-shadow:0 -1px 2px 0 rgba(0,0,0,.12),-1px 0 2px 0 rgba(0,0,0,.12),0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}}.mui-select{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-select:focus{outline:0}.mui-select:focus>select{height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;height:32px;width:100%;appearance:none;-webkit-appearance:none;-moz-appearance:none;outline:0;border:none;border-bottom:1px solid rgba(0,0,0,.26);border-radius:0;box-shadow:none;background-color:transparent;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iNiIgd2lkdGg9IjEwIj48cG9seWdvbiBwb2ludHM9IjAsMCAxMCwwIDUsNiIgc3R5bGU9ImZpbGw6cmdiYSgwLDAsMCwuMjQpOyIvPjwvc3ZnPg==);background-repeat:no-repeat;background-position:right center;cursor:pointer;color:rgba(0,0,0,.87);font-size:16px;padding:0 25px 0 0}.mui-select>select::-ms-expand{display:none}.mui-select>select:focus{outline:0;height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select:disabled{color:rgba(0,0,0,.38);cursor:not-allowed;background-color:transparent;opacity:1}.mui-select__menu{position:absolute;z-index:2;min-width:100%;overflow-y:auto;padding:8px 0;background-color:#FFF;font-size:16px}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-select__menu{border-left:1px solid rgba(0,0,0,.12);border-top:1px solid rgba(0,0,0,.12)}}.mui-select__menu>div{padding:0 22px;height:42px;line-height:42px;cursor:pointer;white-space:nowrap}.mui-select__menu>div:hover{background-color:#E0E0E0}.mui-select__menu>div.mui--is-selected{background-color:#EEE}th{text-align:left}.mui-table{width:100%;max-width:100%;margin-bottom:20px}.mui-table>tbody>tr>td,.mui-table>tbody>tr>th,.mui-table>tfoot>tr>td,.mui-table>tfoot>tr>th,.mui-table>thead>tr>td,.mui-table>thead>tr>th{padding:10px;line-height:1.429}.mui-table>thead>tr>th{border-bottom:2px solid rgba(0,0,0,.12);font-weight:700}.mui-table>tbody+tbody{border-top:2px solid rgba(0,0,0,.12)}.mui-table.mui-table--bordered>tbody>tr>td{border-bottom:1px solid rgba(0,0,0,.12)}.mui-tabs__bar{list-style:none;padding-left:0;margin-bottom:0;background-color:transparent;white-space:nowrap;overflow-x:auto}.mui-tabs__bar>li{display:inline-block}.mui-tabs__bar>li>a{display:block;white-space:nowrap;text-transform:uppercase;font-weight:500;font-size:14px;color:rgba(0,0,0,.87);cursor:default;height:48px;line-height:48px;padding-left:24px;padding-right:24px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-tabs__bar>li>a:hover{text-decoration:none}.mui-tabs__bar>li.mui--is-active{border-bottom:2px solid #2196F3}.mui-tabs__bar>li.mui--is-active>a{color:#2196F3}.mui-tabs__bar.mui-tabs__bar--justified{display:table;width:100%;table-layout:fixed}.mui-tabs__bar.mui-tabs__bar--justified>li{display:table-cell}.mui-tabs__bar.mui-tabs__bar--justified>li>a{text-align:center;padding-left:0;padding-right:0}.mui-tabs__pane{display:none}.mui-tabs__pane.mui--is-active{display:block}[data-mui-toggle=tab]{animation-duration:.1ms;animation-name:mui-node-inserted}.mui-textfield{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-textfield>label{position:absolute;top:0;display:block;width:100%;color:rgba(0,0,0,.54);font-size:12px;font-weight:400;line-height:15px;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.mui-textfield>textarea{padding-top:5px}.mui-textfield>input,.mui-textfield>textarea{display:block}.mui-textfield>input:focus~label,.mui-textfield>textarea:focus~label{color:#2196F3}.mui-textfield--float-label>label{position:absolute;transform:translate(0,15px);font-size:16px;line-height:32px;color:rgba(0,0,0,.26);text-overflow:clip;cursor:text;pointer-events:none}.mui-textfield--float-label>input:focus~label,.mui-textfield--float-label>textarea:focus~label{transform:translate(0,0);font-size:12px;line-height:15px;text-overflow:ellipsis}.mui-textfield--float-label>input:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>input:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>input:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>textarea:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:rgba(0,0,0,.54);font-size:12px;line-height:15px;transform:translate(0,0);text-overflow:ellipsis}.mui-textfield--wrap-label{display:table;width:100%;padding-top:0}.mui-textfield--wrap-label:not(.mui-textfield--float-label)>label{display:table-header-group;position:static;white-space:normal;overflow-x:visible}.mui-textfield>input,.mui-textfield>textarea{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;background-color:transparent;color:rgba(0,0,0,.87);border:none;border-bottom:1px solid rgba(0,0,0,.26);outline:0;width:100%;font-size:16px;padding:0;box-shadow:none;border-radius:0;background-image:none}.mui-textfield>input:focus,.mui-textfield>textarea:focus{border-color:#2196F3;border-width:2px}.mui-textfield>input:-moz-read-only,.mui-textfield>input:disabled,.mui-textfield>textarea:-moz-read-only,.mui-textfield>textarea:disabled{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input:disabled,.mui-textfield>input:read-only,.mui-textfield>textarea:disabled,.mui-textfield>textarea:read-only{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input::-webkit-input-placeholder,.mui-textfield>textarea::-webkit-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::-moz-placeholder,.mui-textfield>textarea::-moz-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input:-ms-input-placeholder,.mui-textfield>textarea:-ms-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::placeholder,.mui-textfield>textarea::placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input{height:32px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>textarea{min-height:64px}.mui-textfield>textarea[rows]:not([rows="2"]):focus{margin-bottom:-1px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):not(:required),.mui-textfield>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required),.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty){border-color:#F44336;border-width:2px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty){height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required)~label,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):not(:required)~label,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:#F44336}.mui-textfield:not(.mui-textfield--float-label)>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label{color:#F44336}@keyframes mui-node-inserted{from{opacity:.99}to{opacity:1}}.mui--no-transition{transition:none!important}.mui--no-user-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.mui--text-left{text-align:left!important}.mui--text-right{text-align:right!important}.mui--text-center{text-align:center!important}.mui--text-justify{text-align:justify!important}.mui--text-nowrap{white-space:nowrap!important}.mui--align-baseline{vertical-align:baseline!important}.mui--align-top{vertical-align:top!important}.mui--align-middle{vertical-align:middle!important}.mui--align-bottom{vertical-align:bottom!important}.mui--text-dark{color:rgba(0,0,0,.87)}.mui--text-dark-secondary{color:rgba(0,0,0,.54)}.mui--text-dark-hint{color:rgba(0,0,0,.38)}.mui--text-light{color:#FFF}.mui--text-light-secondary{color:rgba(255,255,255,.7)}.mui--text-light-hint{color:rgba(255,255,255,.3)}.mui--text-accent{color:rgba(255,64,129,.87)}.mui--text-accent-secondary{color:rgba(255,64,129,.54)}.mui--text-accent-hint{color:rgba(255,64,129,.38)}.mui--text-black{color:#000}.mui--text-white{color:#FFF}.mui--text-danger{color:#F44336}.mui-list--unstyled{padding-left:0;list-style:none}.mui-list--inline{padding-left:0;list-style:none;margin-left:-5px}.mui-list--inline>li{display:inline-block;padding-left:5px;padding-right:5px}.mui--z1,.mui-dropdown__menu,.mui-select__menu{box-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24)}.mui--z2{box-shadow:0 3px 6px rgba(0,0,0,.16),0 3px 6px rgba(0,0,0,.23)}.mui--z3{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}.mui--z4{box-shadow:0 14px 28px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.22)}.mui--z5{box-shadow:0 19px 38px rgba(0,0,0,.3),0 15px 12px rgba(0,0,0,.22)}.mui--clearfix:after,.mui--clearfix:before{content:" ";display:table}.mui--clearfix:after{clear:both}.mui--pull-right{float:right!important}.mui--pull-left{float:left!important}.mui--hide{display:none!important}.mui--show{display:block!important}.mui--invisible{visibility:hidden}.mui--overflow-hidden{overflow:hidden!important}.mui--overflow-hidden-x{overflow-x:hidden!important}.mui--overflow-hidden-y{overflow-y:hidden!important}.mui--visible-lg-block,.mui--visible-lg-inline,.mui--visible-lg-inline-block,.mui--visible-md-block,.mui--visible-md-inline,.mui--visible-md-inline-block,.mui--visible-sm-block,.mui--visible-sm-inline,.mui--visible-sm-inline-block,.mui--visible-xl-block,.mui--visible-xl-inline,.mui--visible-xl-inline-block,.mui--visible-xs-block,.mui--visible-xs-inline,.mui--visible-xs-inline-block{display:none!important}@media (max-width:543px){.mui-visible-xs{display:block!important}table.mui-visible-xs{display:table}tr.mui-visible-xs{display:table-row!important}td.mui-visible-xs,th.mui-visible-xs{display:table-cell!important}.mui--visible-xs-block{display:block!important}.mui--visible-xs-inline{display:inline!important}.mui--visible-xs-inline-block{display:inline-block!important}}@media (min-width:544px) and (max-width:767px){.mui-visible-sm{display:block!important}table.mui-visible-sm{display:table}tr.mui-visible-sm{display:table-row!important}td.mui-visible-sm,th.mui-visible-sm{display:table-cell!important}.mui--visible-sm-block{display:block!important}.mui--visible-sm-inline{display:inline!important}.mui--visible-sm-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.mui-visible-md{display:block!important}table.mui-visible-md{display:table}tr.mui-visible-md{display:table-row!important}td.mui-visible-md,th.mui-visible-md{display:table-cell!important}.mui--visible-md-block{display:block!important}.mui--visible-md-inline{display:inline!important}.mui--visible-md-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.mui-visible-lg{display:block!important}table.mui-visible-lg{display:table}tr.mui-visible-lg{display:table-row!important}td.mui-visible-lg,th.mui-visible-lg{display:table-cell!important}.mui--visible-lg-block{display:block!important}.mui--visible-lg-inline{display:inline!important}.mui--visible-lg-inline-block{display:inline-block!important}}@media (min-width:1200px){.mui-visible-xl{display:block!important}table.mui-visible-xl{display:table}tr.mui-visible-xl{display:table-row!important}td.mui-visible-xl,th.mui-visible-xl{display:table-cell!important}.mui--visible-xl-block{display:block!important}.mui--visible-xl-inline{display:inline!important}.mui--visible-xl-inline-block{display:inline-block!important}}@media (max-width:543px){.mui--hidden-xs{display:none!important}}@media (min-width:544px) and (max-width:767px){.mui--hidden-sm{display:none!important}}@media (min-width:768px) and (max-width:991px){.mui--hidden-md{display:none!important}}@media (min-width:992px) and (max-width:1199px){.mui--hidden-lg{display:none!important}}@media (min-width:1200px){.mui--hidden-xl{display:none!important}}body.mui-body--scroll-lock{overflow:hidden!important}#mui-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:99999999;background-color:rgba(0,0,0,.2);overflow:auto}.mui-ripple-effect{position:absolute;border-radius:50%;pointer-events:none;opacity:0;animation:mui-ripple-animation 2s}@keyframes mui-ripple-animation{from{transform:scale(1);opacity:.4}to{transform:scale(100);opacity:0}}.mui-btn>.mui-ripple-effect{background-color:#a6a6a6}.mui-btn--primary>.mui-ripple-effect{background-color:#FFF}.mui-btn--dark>.mui-ripple-effect{background-color:#FFF}.mui-btn--danger>.mui-ripple-effect{background-color:#FFF}.mui-btn--accent>.mui-ripple-effect{background-color:#FFF}.mui-btn--flat>.mui-ripple-effect{background-color:#a6a6a6}.mui--text-display4{font-weight:300;font-size:112px;line-height:112px}.mui--text-display3{font-weight:400;font-size:56px;line-height:56px}.mui--text-display2{font-weight:400;font-size:45px;line-height:48px}.mui--text-display1,h1{font-weight:400;font-size:34px;line-height:40px}.mui--text-headline,h2{font-weight:400;font-size:24px;line-height:32px}.mui--text-title,h3{font-weight:400;font-size:20px;line-height:28px}.mui--text-subhead,h4{font-weight:400;font-size:16px;line-height:24px}.mui--text-body2,h5{font-weight:500;font-size:14px;line-height:24px}.mui--text-body1{font-weight:400;font-size:14px;line-height:20px}.mui--text-caption{font-weight:400;font-size:12px;line-height:16px}.mui--text-menu{font-weight:500;font-size:13px;line-height:17px}.mui--text-button{font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase} \ No newline at end of file diff --git a/platforms/ios/www/libs/mui/packages/meteor/lib/js/mui.js b/platforms/ios/www/libs/mui/packages/meteor/lib/js/mui.js new file mode 100644 index 0000000..1d101ee --- /dev/null +++ b/platforms/ios/www/libs/mui/packages/meteor/lib/js/mui.js @@ -0,0 +1,1809 @@ +(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o viewHeight) { + scrollIdeal = (menuPadding + (currentIndex + 1) * optionHeight) - + (-1 * top + wrapperPadding + inputHeight); + scrollMax = numOptions * optionHeight + 2 * menuPadding - height; + scrollTop = Math.min(scrollIdeal, scrollMax); + } + + return { + 'height': height + 'px', + 'top': top + 'px', + 'scrollTop': scrollTop + }; +} + + +/** Define module API */ +module.exports = { + getMenuPositionalCSS: getMenuPositionalCSSFn +}; + +},{}],4:[function(require,module,exports){ +/** + * MUI CSS/JS jqLite module + * @module lib/jqLite + */ + +'use strict'; + + +/** + * Add a class to an element. + * @param {Element} element - The DOM element. + * @param {string} cssClasses - Space separated list of class names. + */ +function jqLiteAddClass(element, cssClasses) { + if (!cssClasses || !element.setAttribute) return; + + var existingClasses = _getExistingClasses(element), + splitClasses = cssClasses.split(' '), + cssClass; + + for (var i=0; i < splitClasses.length; i++) { + cssClass = splitClasses[i].trim(); + if (existingClasses.indexOf(' ' + cssClass + ' ') === -1) { + existingClasses += cssClass + ' '; + } + } + + element.setAttribute('class', existingClasses.trim()); +} + + +/** + * Get or set CSS properties. + * @param {Element} element - The DOM element. + * @param {string} [name] - The property name. + * @param {string} [value] - The property value. + */ +function jqLiteCss(element, name, value) { + // Return full style object + if (name === undefined) { + return getComputedStyle(element); + } + + var nameType = jqLiteType(name); + + // Set multiple values + if (nameType === 'object') { + for (var key in name) element.style[_camelCase(key)] = name[key]; + return; + } + + // Set a single value + if (nameType === 'string' && value !== undefined) { + element.style[_camelCase(name)] = value; + } + + var styleObj = getComputedStyle(element), + isArray = (jqLiteType(name) === 'array'); + + // Read single value + if (!isArray) return _getCurrCssProp(element, name, styleObj); + + // Read multiple values + var outObj = {}, + key; + + for (var i=0; i < name.length; i++) { + key = name[i]; + outObj[key] = _getCurrCssProp(element, key, styleObj); + } + + return outObj; +} + + +/** + * Check if element has class. + * @param {Element} element - The DOM element. + * @param {string} cls - The class name string. + */ +function jqLiteHasClass(element, cls) { + if (!cls || !element.getAttribute) return false; + return (_getExistingClasses(element).indexOf(' ' + cls + ' ') > -1); +} + + +/** + * Return the type of a variable. + * @param {} somevar - The JavaScript variable. + */ +function jqLiteType(somevar) { + // handle undefined + if (somevar === undefined) return 'undefined'; + + // handle others (of type [object ]) + var typeStr = Object.prototype.toString.call(somevar); + if (typeStr.indexOf('[object ') === 0) { + return typeStr.slice(8, -1).toLowerCase(); + } else { + throw new Error("MUI: Could not understand type: " + typeStr); + } +} + + +/** + * Attach an event handler to a DOM element + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOn(element, type, callback, useCapture) { + useCapture = (useCapture === undefined) ? false : useCapture; + + // add to DOM + element.addEventListener(type, callback, useCapture); + + // add to cache + var cache = element._muiEventCache = element._muiEventCache || {}; + cache[type] = cache[type] || []; + cache[type].push([callback, useCapture]); +} + + +/** + * Remove an event handler from a DOM element + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOff(element, type, callback, useCapture) { + useCapture = (useCapture === undefined) ? false : useCapture; + + // remove from cache + var cache = element._muiEventCache = element._muiEventCache || {}, + argsList = cache[type] || [], + args, + i; + + i = argsList.length; + while (i--) { + args = argsList[i]; + + // remove all events if callback is undefined + if (callback === undefined || + (args[0] === callback && args[1] === useCapture)) { + + // remove from cache + argsList.splice(i, 1); + + // remove from DOM + element.removeEventListener(type, args[0], args[1]); + } + } +} + + +/** + * Attach an event hander which will only execute once + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOne(element, type, callback, useCapture) { + jqLiteOn(element, type, function onFn(ev) { + // execute callback + if (callback) callback.apply(this, arguments); + + // remove wrapper + jqLiteOff(element, type, onFn); + }, useCapture); +} + + +/** + * Get or set horizontal scroll position + * @param {Element} element - The DOM element + * @param {number} [value] - The scroll position + */ +function jqLiteScrollLeft(element, value) { + var win = window; + + // get + if (value === undefined) { + if (element === win) { + var docEl = document.documentElement; + return (win.pageXOffset || docEl.scrollLeft) - (docEl.clientLeft || 0); + } else { + return element.scrollLeft; + } + } + + // set + if (element === win) win.scrollTo(value, jqLiteScrollTop(win)); + else element.scrollLeft = value; +} + + +/** + * Get or set vertical scroll position + * @param {Element} element - The DOM element + * @param {number} value - The scroll position + */ +function jqLiteScrollTop(element, value) { + var win = window; + + // get + if (value === undefined) { + if (element === win) { + var docEl = document.documentElement; + return (win.pageYOffset || docEl.scrollTop) - (docEl.clientTop || 0); + } else { + return element.scrollTop; + } + } + + // set + if (element === win) win.scrollTo(jqLiteScrollLeft(win), value); + else element.scrollTop = value; +} + + +/** + * Return object representing top/left offset and element height/width. + * @param {Element} element - The DOM element. + */ +function jqLiteOffset(element) { + var win = window, + rect = element.getBoundingClientRect(), + scrollTop = jqLiteScrollTop(win), + scrollLeft = jqLiteScrollLeft(win); + + return { + top: rect.top + scrollTop, + left: rect.left + scrollLeft, + height: rect.height, + width: rect.width + }; +} + + +/** + * Attach a callback to the DOM ready event listener + * @param {Function} fn - The callback function. + */ +function jqLiteReady(fn) { + var done = false, + top = true, + doc = document, + win = doc.defaultView, + root = doc.documentElement, + add = doc.addEventListener ? 'addEventListener' : 'attachEvent', + rem = doc.addEventListener ? 'removeEventListener' : 'detachEvent', + pre = doc.addEventListener ? '' : 'on'; + + var init = function(e) { + if (e.type == 'readystatechange' && doc.readyState != 'complete') { + return; + } + + (e.type == 'load' ? win : doc)[rem](pre + e.type, init, false); + if (!done && (done = true)) fn.call(win, e.type || e); + }; + + var poll = function() { + try { root.doScroll('left'); } catch(e) { setTimeout(poll, 50); return; } + init('poll'); + }; + + if (doc.readyState == 'complete') { + fn.call(win, 'lazy'); + } else { + if (doc.createEventObject && root.doScroll) { + try { top = !win.frameElement; } catch(e) { } + if (top) poll(); + } + doc[add](pre + 'DOMContentLoaded', init, false); + doc[add](pre + 'readystatechange', init, false); + win[add](pre + 'load', init, false); + } +} + + +/** + * Remove classes from a DOM element + * @param {Element} element - The DOM element. + * @param {string} cssClasses - Space separated list of class names. + */ +function jqLiteRemoveClass(element, cssClasses) { + if (!cssClasses || !element.setAttribute) return; + + var existingClasses = _getExistingClasses(element), + splitClasses = cssClasses.split(' '), + cssClass; + + for (var i=0; i < splitClasses.length; i++) { + cssClass = splitClasses[i].trim(); + while (existingClasses.indexOf(' ' + cssClass + ' ') >= 0) { + existingClasses = existingClasses.replace(' ' + cssClass + ' ', ' '); + } + } + + element.setAttribute('class', existingClasses.trim()); +} + + +// ------------------------------ +// Utilities +// ------------------------------ +var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g, + MOZ_HACK_REGEXP = /^moz([A-Z])/, + ESCAPE_REGEXP = /([.*+?^=!:${}()|\[\]\/\\])/g, + BOOLEAN_ATTRS; + + +BOOLEAN_ATTRS = { + multiple: true, + selected: true, + checked: true, + disabled: true, + readonly: true, + required: true, + open: true +} + + +function _getExistingClasses(element) { + var classes = (element.getAttribute('class') || '').replace(/[\n\t]/g, ''); + return ' ' + classes + ' '; +} + + +function _camelCase(name) { + return name. + replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) { + return offset ? letter.toUpperCase() : letter; + }). + replace(MOZ_HACK_REGEXP, 'Moz$1'); +} + + +function _escapeRegExp(string) { + return string.replace(ESCAPE_REGEXP, "\\$1"); +} + + +function _getCurrCssProp(elem, name, computed) { + var ret; + + // try computed style + ret = computed.getPropertyValue(name); + + // try style attribute (if element is not attached to document) + if (ret === '' && !elem.ownerDocument) ret = elem.style[_camelCase(name)]; + + return ret; +} + + +/** + * Module API + */ +module.exports = { + /** Add classes */ + addClass: jqLiteAddClass, + + /** Get or set CSS properties */ + css: jqLiteCss, + + /** Check for class */ + hasClass: jqLiteHasClass, + + /** Remove event handlers */ + off: jqLiteOff, + + /** Return offset values */ + offset: jqLiteOffset, + + /** Add event handlers */ + on: jqLiteOn, + + /** Add an execute-once event handler */ + one: jqLiteOne, + + /** DOM ready event handler */ + ready: jqLiteReady, + + /** Remove classes */ + removeClass: jqLiteRemoveClass, + + /** Check JavaScript variable instance type */ + type: jqLiteType, + + /** Get or set horizontal scroll position */ + scrollLeft: jqLiteScrollLeft, + + /** Get or set vertical scroll position */ + scrollTop: jqLiteScrollTop +}; + +},{}],5:[function(require,module,exports){ +/** + * MUI CSS/JS utilities module + * @module lib/util + */ + +'use strict'; + + +var config = require('../config'), + jqLite = require('./jqLite'), + nodeInsertedCallbacks = [], + scrollLock = 0, + scrollLockCls = 'mui-body--scroll-lock', + scrollLockPos, + _supportsPointerEvents; + + +/** + * Logging function + */ +function logFn() { + var win = window; + + if (config.debug && typeof win.console !== "undefined") { + try { + win.console.log.apply(win.console, arguments); + } catch (a) { + var e = Array.prototype.slice.call(arguments); + win.console.log(e.join("\n")); + } + } +} + + +/** + * Load CSS text in new stylesheet + * @param {string} cssText - The css text. + */ +function loadStyleFn(cssText) { + var doc = document, + head; + + // copied from jQuery + head = doc.head || + doc.getElementsByTagName('head')[0] || + doc.documentElement; + + var e = doc.createElement('style'); + e.type = 'text/css'; + + if (e.styleSheet) e.styleSheet.cssText = cssText; + else e.appendChild(doc.createTextNode(cssText)); + + // add to document + head.insertBefore(e, head.firstChild); + + return e; +} + + +/** + * Raise an error + * @param {string} msg - The error message. + */ +function raiseErrorFn(msg, useConsole) { + if (useConsole) { + if (typeof console !== 'undefined') console.error('MUI Warning: ' + msg); + } else { + throw new Error('MUI: ' + msg); + } +} + + +/** + * Register callbacks on muiNodeInserted event + * @param {function} callbackFn - The callback function. + */ +function onNodeInsertedFn(callbackFn) { + nodeInsertedCallbacks.push(callbackFn); + + // initalize listeners + if (nodeInsertedCallbacks._initialized === undefined) { + var doc = document; + + jqLite.on(doc, 'animationstart', animationHandlerFn); + jqLite.on(doc, 'mozAnimationStart', animationHandlerFn); + jqLite.on(doc, 'webkitAnimationStart', animationHandlerFn); + + nodeInsertedCallbacks._initialized = true; + } +} + + +/** + * Execute muiNodeInserted callbacks + * @param {Event} ev - The DOM event. + */ +function animationHandlerFn(ev) { + // check animation name + if (ev.animationName !== 'mui-node-inserted') return; + + var el = ev.target; + + // iterate through callbacks + for (var i=nodeInsertedCallbacks.length - 1; i >= 0; i--) { + nodeInsertedCallbacks[i](el); + } +} + + +/** + * Convert Classname object, with class as key and true/false as value, to an + * class string. + * @param {Object} classes The classes + * @return {String} class string + */ +function classNamesFn(classes) { + var cs = ''; + for (var i in classes) { + cs += (classes[i]) ? i + ' ' : ''; + } + return cs.trim(); +} + + +/** + * Check if client supports pointer events. + */ +function supportsPointerEventsFn() { + // check cache + if (_supportsPointerEvents !== undefined) return _supportsPointerEvents; + + var element = document.createElement('x'); + element.style.cssText = 'pointer-events:auto'; + _supportsPointerEvents = (element.style.pointerEvents === 'auto'); + return _supportsPointerEvents; +} + + +/** + * Create callback closure. + * @param {Object} instance - The object instance. + * @param {String} funcName - The name of the callback function. + */ +function callbackFn(instance, funcName) { + return function() {instance[funcName].apply(instance, arguments);}; +} + + +/** + * Dispatch event. + * @param {Element} element - The DOM element. + * @param {String} eventType - The event type. + * @param {Boolean} bubbles=true - If true, event bubbles. + * @param {Boolean} cancelable=true = If true, event is cancelable + * @param {Object} [data] - Data to add to event object + */ +function dispatchEventFn(element, eventType, bubbles, cancelable, data) { + var ev = document.createEvent('HTMLEvents'), + bubbles = (bubbles !== undefined) ? bubbles : true, + cancelable = (cancelable !== undefined) ? cancelable : true, + k; + + ev.initEvent(eventType, bubbles, cancelable); + + // add data to event object + if (data) for (k in data) ev[k] = data[k]; + + // dispatch + if (element) element.dispatchEvent(ev); + + return ev; +} + + +/** + * Turn on window scroll lock. + */ +function enableScrollLockFn() { + // increment counter + scrollLock += 1 + + // add lock + if (scrollLock === 1) { + var win = window, + doc = document; + + scrollLockPos = {left: jqLite.scrollLeft(win), top: jqLite.scrollTop(win)}; + jqLite.addClass(doc.body, scrollLockCls); + win.scrollTo(scrollLockPos.left, scrollLockPos.top); + } +} + + +/** + * Turn off window scroll lock. + */ +function disableScrollLockFn() { + // ignore + if (scrollLock === 0) return; + + // decrement counter + scrollLock -= 1 + + // remove lock + if (scrollLock === 0) { + var win = window, + doc = document; + + jqLite.removeClass(doc.body, scrollLockCls); + win.scrollTo(scrollLockPos.left, scrollLockPos.top); + } +} + + +/** + * Define the module API + */ +module.exports = { + /** Create callback closures */ + callback: callbackFn, + + /** Classnames object to string */ + classNames: classNamesFn, + + /** Disable scroll lock */ + disableScrollLock: disableScrollLockFn, + + /** Dispatch event */ + dispatchEvent: dispatchEventFn, + + /** Enable scroll lock */ + enableScrollLock: enableScrollLockFn, + + /** Log messages to the console when debug is turned on */ + log: logFn, + + /** Load CSS text as new stylesheet */ + loadStyle: loadStyleFn, + + /** Register muiNodeInserted handler */ + onNodeInserted: onNodeInsertedFn, + + /** Raise MUI error */ + raiseError: raiseErrorFn, + + /** Support Pointer Events check */ + supportsPointerEvents: supportsPointerEventsFn +}; + +},{"../config":2,"./jqLite":4}],6:[function(require,module,exports){ +/** + * MUI CSS/JS dropdown module + * @module dropdowns + */ + +'use strict'; + + +var jqLite = require('./lib/jqLite'), + util = require('./lib/util'), + attrKey = 'data-mui-toggle', + attrSelector = '[data-mui-toggle="dropdown"]', + openClass = 'mui--is-open', + menuClass = 'mui-dropdown__menu'; + + +/** + * Initialize toggle element. + * @param {Element} toggleEl - The toggle element. + */ +function initialize(toggleEl) { + // check flag + if (toggleEl._muiDropdown === true) return; + else toggleEl._muiDropdown = true; + + // use type "button" to prevent form submission by default + if (!toggleEl.hasAttribute('type')) toggleEl.type = 'button'; + + // attach click handler + jqLite.on(toggleEl, 'click', clickHandler); +} + + +/** + * Handle click events on dropdown toggle element. + * @param {Event} ev - The DOM event + */ +function clickHandler(ev) { + // only left clicks + if (ev.button !== 0) return; + + var toggleEl = this; + + // exit if toggle button is disabled + if (toggleEl.getAttribute('disabled') !== null) return; + + // toggle dropdown + toggleDropdown(toggleEl); +} + + +/** + * Toggle the dropdown. + * @param {Element} toggleEl - The dropdown toggle element. + */ +function toggleDropdown(toggleEl) { + var wrapperEl = toggleEl.parentNode, + menuEl = toggleEl.nextElementSibling, + doc = wrapperEl.ownerDocument; + + // exit if no menu element + if (!menuEl || !jqLite.hasClass(menuEl, menuClass)) { + return util.raiseError('Dropdown menu element not found'); + } + + // method to close dropdown + function closeDropdownFn() { + jqLite.removeClass(menuEl, openClass); + + // remove event handlers + jqLite.off(doc, 'click', closeDropdownFn); + } + + // method to open dropdown + function openDropdownFn() { + // position menu element below toggle button + var wrapperRect = wrapperEl.getBoundingClientRect(), + toggleRect = toggleEl.getBoundingClientRect(); + + var top = toggleRect.top - wrapperRect.top + toggleRect.height; + jqLite.css(menuEl, 'top', top + 'px'); + + // add open class to wrapper + jqLite.addClass(menuEl, openClass); + + // close dropdown when user clicks outside of menu + setTimeout(function() {jqLite.on(doc, 'click', closeDropdownFn);}, 0); + } + + // toggle dropdown + if (jqLite.hasClass(menuEl, openClass)) closeDropdownFn(); + else openDropdownFn(); +} + + +/** Define module API */ +module.exports = { + /** Initialize module listeners */ + initListeners: function() { + var doc = document; + + // markup elements available when method is called + var elList = doc.querySelectorAll(attrSelector); + for (var i=elList.length - 1; i >= 0; i--) initialize(elList[i]); + + // listen for new elements + util.onNodeInserted(function(el) { + if (el.getAttribute(attrKey) === 'dropdown') initialize(el); + }); + } +}; + +},{"./lib/jqLite":4,"./lib/util":5}],7:[function(require,module,exports){ +module.exports=require(4) +},{}],8:[function(require,module,exports){ +/** + * MUI CSS/JS overlay module + * @module overlay + */ + +'use strict'; + + +var util = require('./lib/util'), + jqLite = require('./lib/jqLite'), + overlayId = 'mui-overlay', + bodyClass = 'mui--overflow-hidden', + iosRegex = /(iPad|iPhone|iPod)/g; + + +/** + * Turn overlay on/off. + * @param {string} action - Turn overlay "on"/"off". + * @param {object} [options] + * @config {boolean} [keyboard] - If true, close when escape key is pressed. + * @config {boolean} [static] - If false, close when backdrop is clicked. + * @config {Function} [onclose] - Callback function to execute on close + * @param {Element} [childElement] - Child element to add to overlay. + */ +function overlayFn(action) { + var overlayEl; + + if (action === 'on') { + // extract arguments + var arg, options, childElement; + + // pull options and childElement from arguments + for (var i=arguments.length - 1; i > 0; i--) { + arg = arguments[i]; + + if (jqLite.type(arg) === 'object') options = arg; + if (arg instanceof Element && arg.nodeType === 1) childElement = arg; + } + + // option defaults + options = options || {}; + if (options.keyboard === undefined) options.keyboard = true; + if (options.static === undefined) options.static = false; + + // execute method + overlayEl = overlayOn(options, childElement); + + } else if (action === 'off') { + overlayEl = overlayOff(); + + } else { + // raise error + util.raiseError("Expecting 'on' or 'off'"); + } + + return overlayEl; +} + + +/** + * Turn on overlay. + * @param {object} options - Overlay options. + * @param {Element} childElement - The child element. + */ +function overlayOn(options, childElement) { + var bodyEl = document.body, + overlayEl = document.getElementById(overlayId); + + // add overlay + util.enableScrollLock(); + //jqLite.addClass(bodyEl, bodyClass); + + if (!overlayEl) { + // create overlayEl + overlayEl = document.createElement('div'); + overlayEl.setAttribute('id', overlayId); + + // add child element + if (childElement) overlayEl.appendChild(childElement); + + bodyEl.appendChild(overlayEl); + + } else { + // remove existing children + while (overlayEl.firstChild) overlayEl.removeChild(overlayEl.firstChild); + + // add child element + if (childElement) overlayEl.appendChild(childElement); + } + + // iOS bugfix + if (iosRegex.test(navigator.userAgent)) { + jqLite.css(overlayEl, 'cursor', 'pointer'); + } + + // handle options + if (options.keyboard) addKeyupHandler(); + else removeKeyupHandler(); + + if (options.static) removeClickHandler(overlayEl); + else addClickHandler(overlayEl); + + // attach options + overlayEl.muiOptions = options; + + return overlayEl; +} + + +/** + * Turn off overlay. + */ +function overlayOff() { + var overlayEl = document.getElementById(overlayId), + callbackFn; + + if (overlayEl) { + // remove children + while (overlayEl.firstChild) overlayEl.removeChild(overlayEl.firstChild); + + // remove overlay element + overlayEl.parentNode.removeChild(overlayEl); + + // callback reference + callbackFn = overlayEl.muiOptions.onclose; + + // remove click handler + removeClickHandler(overlayEl); + } + + util.disableScrollLock(); + + // remove keyup handler + removeKeyupHandler(); + + // execute callback + if (callbackFn) callbackFn(); + + return overlayEl; +} + + +/** + * Add keyup handler. + */ +function addKeyupHandler() { + jqLite.on(document, 'keyup', onKeyup); +} + + +/** + * Remove keyup handler. + */ +function removeKeyupHandler() { + jqLite.off(document, 'keyup', onKeyup); +} + + +/** + * Teardown overlay when escape key is pressed. + */ +function onKeyup(ev) { + if (ev.keyCode === 27) overlayOff(); +} + + +/** + * Add click handler. + */ +function addClickHandler(overlayEl) { + jqLite.on(overlayEl, 'click', onClick); +} + + +/** + * Remove click handler. + */ +function removeClickHandler(overlayEl) { + jqLite.off(overlayEl, 'click', onClick); +} + + +/** + * Teardown overlay when backdrop is clicked. + */ +function onClick(ev) { + if (ev.target.id === overlayId) overlayOff(); +} + + +/** Define module API */ +module.exports = overlayFn; + +},{"./lib/jqLite":4,"./lib/util":5}],9:[function(require,module,exports){ +/** + * MUI CSS/JS ripple module + * @module ripple + */ + +'use strict'; + + +var jqLite = require('./lib/jqLite'), + util = require('./lib/util'), + btnClass = 'mui-btn', + btnFABClass = 'mui-btn--fab', + rippleClass = 'mui-ripple-effect', + animationName = 'mui-btn-inserted'; + + +/** + * Add ripple effects to button element. + * @param {Element} buttonEl - The button element. + */ +function initialize(buttonEl) { + // check flag + if (buttonEl._muiRipple === true) return; + else buttonEl._muiRipple = true; + + // exit if element is INPUT (doesn't support absolute positioned children) + if (buttonEl.tagName === 'INPUT') return; + + // attach event handler + jqLite.on(buttonEl, 'touchstart', eventHandler); + jqLite.on(buttonEl, 'mousedown', eventHandler); +} + + +/** + * Event handler + * @param {Event} ev - The DOM event + */ +function eventHandler(ev) { + // only left clicks + if (ev.button !== 0) return; + + var buttonEl = this; + + // exit if button is disabled + if (buttonEl.disabled === true) return; + + // de-dupe touchstart and mousedown with 100msec flag + if (buttonEl.touchFlag === true) { + return; + } else { + buttonEl.touchFlag = true; + setTimeout(function() { + buttonEl.touchFlag = false; + }, 100); + } + + var rippleEl = document.createElement('div'); + rippleEl.className = rippleClass; + + var offset = jqLite.offset(buttonEl), + xPos = ev.pageX - offset.left, + yPos = ev.pageY - offset.top, + diameter, + radius; + + // get height + if (jqLite.hasClass(buttonEl, btnFABClass)) diameter = offset.height / 2; + else diameter = offset.height; + + radius = diameter / 2; + + jqLite.css(rippleEl, { + height: diameter + 'px', + width: diameter + 'px', + top: yPos - radius + 'px', + left: xPos - radius + 'px' + }); + + buttonEl.appendChild(rippleEl); + + window.setTimeout(function() { + var parentNode = rippleEl.parentNode; + if (parentNode) parentNode.removeChild(rippleEl); + }, 2000); +} + + +/** Define module API */ +module.exports = { + /** Initialize module listeners */ + initListeners: function() { + var doc = document; + + // markup elements available when method is called + var elList = doc.getElementsByClassName(btnClass); + for (var i=elList.length - 1; i >= 0; i--) initialize(elList[i]); + + // listen for new elements + util.onNodeInserted(function(el) { + if (jqLite.hasClass(el, btnClass)) initialize(el); + }); + } +}; + +},{"./lib/jqLite":4,"./lib/util":5}],10:[function(require,module,exports){ +/** + * MUI CSS/JS select module + * @module forms/select + */ + +'use strict'; + + +var jqLite = require('./lib/jqLite'), + util = require('./lib/util'), + formlib = require('./lib/forms'), + wrapperClass = 'mui-select', + cssSelector = '.mui-select > select', + menuClass = 'mui-select__menu', + selectedClass = 'mui--is-selected', + doc = document, + win = window; + + +/** + * Initialize select element. + * @param {Element} selectEl - The select element. + */ +function initialize(selectEl) { + // check flag + if (selectEl._muiSelect === true) return; + else selectEl._muiSelect = true; + + // use default behavior on touch devices + if ('ontouchstart' in doc.documentElement) return; + + // initialize element + new Select(selectEl); +} + + +/** + * Creates a new Select object + * @class + */ +function Select(selectEl) { + // instance variables + this.selectEl = selectEl; + this.wrapperEl = selectEl.parentNode; + this.useDefault = false; // currently unused but let's keep just in case + + // attach event handlers + jqLite.on(selectEl, 'mousedown', util.callback(this, 'mousedownHandler')); + jqLite.on(selectEl, 'focus', util.callback(this, 'focusHandler')); + jqLite.on(selectEl, 'click', util.callback(this, 'clickHandler')); + + // make wrapper focusable and fix firefox bug + this.wrapperEl.tabIndex = -1; + var callbackFn = util.callback(this, 'wrapperFocusHandler'); + jqLite.on(this.wrapperEl, 'focus', callbackFn); +} + + +/** + * Disable default dropdown on mousedown. + * @param {Event} ev - The DOM event + */ +Select.prototype.mousedownHandler = function(ev) { + if (ev.button !== 0 || this.useDefault === true) return; + ev.preventDefault(); +} + + +/** + * Handle focus event on select element. + * @param {Event} ev - The DOM event + */ +Select.prototype.focusHandler = function(ev) { + // check flag + if (this.useDefault === true) return; + + var selectEl = this.selectEl, + wrapperEl = this.wrapperEl, + origIndex = selectEl.tabIndex, + keydownFn = util.callback(this, 'keydownHandler'); + + // attach keydown handler + jqLite.on(doc, 'keydown', keydownFn); + + // disable tabfocus once + selectEl.tabIndex = -1; + jqLite.one(wrapperEl, 'blur', function() { + selectEl.tabIndex = origIndex; + jqLite.off(doc, 'keydown', keydownFn); + }); + + // defer focus to parent + wrapperEl.focus(); +} + + +/** + * Handle keydown events on doc + **/ +Select.prototype.keydownHandler = function(ev) { + var keyCode = ev.keyCode; + + // spacebar, down, up + if (keyCode === 32 || keyCode === 38 || keyCode === 40) { + // prevent win scroll + ev.preventDefault(); + + if (this.selectEl.disabled !== true) this.renderMenu(); + } +} + + +/** + * Handle focus event on wrapper element. + */ +Select.prototype.wrapperFocusHandler = function() { + // firefox bugfix + if (this.selectEl.disabled) return this.wrapperEl.blur(); +} + + +/** + * Handle click events on select element. + * @param {Event} ev - The DOM event + */ +Select.prototype.clickHandler = function(ev) { + // only left clicks + if (ev.button !== 0) return; + this.renderMenu(); +} + + +/** + * Render options dropdown. + */ +Select.prototype.renderMenu = function() { + // check and reset flag + if (this.useDefault === true) return this.useDefault = false; + + new Menu(this.wrapperEl, this.selectEl); +} + + +/** + * Creates a new Menu + * @class + */ +function Menu(wrapperEl, selectEl) { + // add scroll lock + util.enableScrollLock(); + + // instance variables + this.origIndex = null; + this.currentIndex = null; + this.selectEl = selectEl; + this.menuEl = this._createMenuEl(wrapperEl, selectEl); + this.clickCallbackFn = util.callback(this, 'clickHandler'); + this.keydownCallbackFn = util.callback(this, 'keydownHandler'); + this.destroyCallbackFn = util.callback(this, 'destroy'); + + // add to DOM + wrapperEl.appendChild(this.menuEl); + jqLite.scrollTop(this.menuEl, this.menuEl._muiScrollTop); + + // blur active element + setTimeout(function() { + // ie10 bugfix + if (doc.activeElement.nodeName.toLowerCase() !== "body") { + doc.activeElement.blur(); + } + }, 0); + + // attach event handlers + jqLite.on(this.menuEl, 'click', this.clickCallbackFn); + jqLite.on(doc, 'keydown', this.keydownCallbackFn); + jqLite.on(win, 'resize', this.destroyCallbackFn); + + // attach event handler after current event loop exits + var fn = this.destroyCallbackFn; + setTimeout(function() {jqLite.on(doc, 'click', fn);}, 0); +} + + +/** + * Create menu element + * @param {Element} selectEl - The select element + */ +Menu.prototype._createMenuEl = function(wrapperEl, selectEl) { + var menuEl = doc.createElement('div'), + optionEls = selectEl.children, + numOptions = optionEls.length, + selectedPos = 0, + optionEl, + itemEl, + i; + + menuEl.className = menuClass; + + // add options + for (i=0; i < numOptions; i++) { + optionEl = optionEls[i]; + + itemEl = doc.createElement('div'); + itemEl.textContent = optionEl.textContent; + itemEl._muiPos = i; + + if (optionEl.selected) { + itemEl.setAttribute('class', selectedClass); + selectedPos = i; + } + + menuEl.appendChild(itemEl); + } + + // save indices + this.origIndex = selectedPos; + this.currentIndex = selectedPos; + + // set position + var props = formlib.getMenuPositionalCSS( + wrapperEl, + numOptions, + selectedPos + ); + + jqLite.css(menuEl, props); + menuEl._muiScrollTop = props.scrollTop; + + return menuEl; +} + + +/** + * Handle keydown events on doc element. + * @param {Event} ev - The DOM event + */ +Menu.prototype.keydownHandler = function(ev) { + var keyCode = ev.keyCode; + + // tab + if (keyCode === 9) return this.destroy(); + + // escape | up | down | enter + if (keyCode === 27 || keyCode === 40 || keyCode === 38 || keyCode === 13) { + ev.preventDefault(); + } + + if (keyCode === 27) { + this.destroy(); + } else if (keyCode === 40) { + this.increment(); + } else if (keyCode === 38) { + this.decrement(); + } else if (keyCode === 13) { + this.selectCurrent(); + this.destroy(); + } +} + + +/** + * Handle click events on menu element. + * @param {Event} ev - The DOM event + */ +Menu.prototype.clickHandler = function(ev) { + // don't allow events to bubble + ev.stopPropagation(); + + var pos = ev.target._muiPos; + + // ignore clicks on non-items + if (pos === undefined) return; + + // select option + this.currentIndex = pos; + this.selectCurrent(); + + // destroy menu + this.destroy(); +} + + +/** + * Increment selected item + */ +Menu.prototype.increment = function() { + if (this.currentIndex === this.menuEl.children.length - 1) return; + + var optionEls = this.menuEl.children; + + jqLite.removeClass(optionEls[this.currentIndex], selectedClass); + this.currentIndex += 1; + jqLite.addClass(optionEls[this.currentIndex], selectedClass); +} + + +/** + * Decrement selected item + */ +Menu.prototype.decrement = function() { + if (this.currentIndex === 0) return; + + var optionEls = this.menuEl.children; + + jqLite.removeClass(optionEls[this.currentIndex], selectedClass); + this.currentIndex -= 1; + jqLite.addClass(optionEls[this.currentIndex], selectedClass); +} + + +/** + * Select current item + */ +Menu.prototype.selectCurrent = function() { + if (this.currentIndex !== this.origIndex) { + var optionEls = this.selectEl.children; + optionEls[this.origIndex].selected = false; + optionEls[this.currentIndex].selected = true; + + // trigger change event + util.dispatchEvent(this.selectEl, 'change'); + } +} + + +/** + * Destroy menu and detach event handlers + */ +Menu.prototype.destroy = function() { + // remove element and focus element + var parentNode = this.menuEl.parentNode; + if (parentNode) parentNode.removeChild(this.menuEl); + + this.selectEl.focus(); + + // remove scroll lock + util.disableScrollLock(); + + // remove event handlers + jqLite.off(this.menuEl, 'click', this.clickCallbackFn); + jqLite.off(doc, 'keydown', this.keydownCallbackFn); + jqLite.off(doc, 'click', this.destroyCallbackFn); + jqLite.off(win, 'resize', this.destroyCallbackFn); +} + + +/** Define module API */ +module.exports = { + /** Initialize module listeners */ + initListeners: function() { + // markup elements available when method is called + var elList = doc.querySelectorAll(cssSelector); + for (var i=elList.length - 1; i >= 0; i--) initialize(elList[i]); + + // listen for new elements + util.onNodeInserted(function(el) { + if (el.tagName === 'SELECT' && + jqLite.hasClass(el.parentNode, wrapperClass)) { + initialize(el); + } + }); + } +}; + +},{"./lib/forms":3,"./lib/jqLite":4,"./lib/util":5}],11:[function(require,module,exports){ +/** + * MUI CSS/JS tabs module + * @module tabs + */ + +'use strict'; + + +var jqLite = require('./lib/jqLite'), + util = require('./lib/util'), + attrKey = 'data-mui-toggle', + attrSelector = '[' + attrKey + '="tab"]', + controlsAttrKey = 'data-mui-controls', + activeClass = 'mui--is-active', + showstartKey = 'mui.tabs.showstart', + showendKey = 'mui.tabs.showend', + hidestartKey = 'mui.tabs.hidestart', + hideendKey = 'mui.tabs.hideend'; + + +/** + * Initialize the toggle element + * @param {Element} toggleEl - The toggle element. + */ +function initialize(toggleEl) { + // check flag + if (toggleEl._muiTabs === true) return; + else toggleEl._muiTabs = true; + + // attach click handler + jqLite.on(toggleEl, 'click', clickHandler); +} + + +/** + * Handle clicks on the toggle element. + * @param {Event} ev - The DOM event. + */ +function clickHandler(ev) { + // only left clicks + if (ev.button !== 0) return; + + var toggleEl = this; + + // exit if toggle element is disabled + if (toggleEl.getAttribute('disabled') !== null) return; + + activateTab(toggleEl); +} + + +/** + * Activate the tab controlled by the toggle element. + * @param {Element} toggleEl - The toggle element. + */ +function activateTab(currToggleEl) { + var currTabEl = currToggleEl.parentNode, + currPaneId = currToggleEl.getAttribute(controlsAttrKey), + currPaneEl = document.getElementById(currPaneId), + prevTabEl, + prevPaneEl, + prevPaneId, + prevToggleEl, + currData, + prevData, + ev1, + ev2, + cssSelector; + + // exit if already active + if (jqLite.hasClass(currTabEl, activeClass)) return; + + // raise error if pane doesn't exist + if (!currPaneEl) util.raiseError('Tab pane "' + currPaneId + '" not found'); + + // get previous pane + prevPaneEl = getActiveSibling(currPaneEl); + prevPaneId = prevPaneEl.id; + + // get previous toggle and tab elements + cssSelector = '[' + controlsAttrKey + '="' + prevPaneId + '"]'; + prevToggleEl = document.querySelectorAll(cssSelector)[0]; + prevTabEl = prevToggleEl.parentNode; + + // define event data + currData = {paneId: currPaneId, relatedPaneId: prevPaneId}; + prevData = {paneId: prevPaneId, relatedPaneId: currPaneId}; + + // dispatch 'hidestart', 'showstart' events + ev1 = util.dispatchEvent(prevToggleEl, hidestartKey, true, true, prevData); + ev2 = util.dispatchEvent(currToggleEl, showstartKey, true, true, currData); + + // let events bubble + setTimeout(function() { + // exit if either event was canceled + if (ev1.defaultPrevented || ev2.defaultPrevented) return; + + // de-activate previous + if (prevTabEl) jqLite.removeClass(prevTabEl, activeClass); + if (prevPaneEl) jqLite.removeClass(prevPaneEl, activeClass); + + // activate current + jqLite.addClass(currTabEl, activeClass); + jqLite.addClass(currPaneEl, activeClass); + + // dispatch 'hideend', 'showend' events + util.dispatchEvent(prevToggleEl, hideendKey, true, false, prevData); + util.dispatchEvent(currToggleEl, showendKey, true, false, currData); + }, 0); +} + + +/** + * Get previous active sibling. + * @param {Element} el - The anchor element. + */ +function getActiveSibling(el) { + var elList = el.parentNode.children, + q = elList.length, + activeEl = null, + tmpEl; + + while (q-- && !activeEl) { + tmpEl = elList[q]; + if (tmpEl !== el && jqLite.hasClass(tmpEl, activeClass)) activeEl = tmpEl + } + + return activeEl; +} + + +/** Define module API */ +module.exports = { + /** Initialize module listeners */ + initListeners: function() { + // markup elements available when method is called + var elList = document.querySelectorAll(attrSelector); + for (var i=elList.length - 1; i >= 0; i--) initialize(elList[i]); + + // TODO: listen for new elements + util.onNodeInserted(function(el) { + if (el.getAttribute(attrKey) === 'tab') initialize(el); + }); + }, + + /** External API */ + api: { + activate: function(paneId) { + var cssSelector = '[' + controlsAttrKey + '=' + paneId + ']', + toggleEl = document.querySelectorAll(cssSelector); + + if (!toggleEl.length) { + util.raiseError('Tab control for pane "' + paneId + '" not found'); + } + + activateTab(toggleEl[0]); + } + } +}; + +},{"./lib/jqLite":4,"./lib/util":5}],12:[function(require,module,exports){ +/** + * MUI CSS/JS form-control module + * @module forms/form-control + */ + +'use strict'; + + +var jqLite = require('./lib/jqLite'), + util = require('./lib/util'), + cssSelector = '.mui-textfield > input, .mui-textfield > textarea', + emptyClass = 'mui--is-empty', + notEmptyClass = 'mui--is-not-empty', + dirtyClass = 'mui--is-dirty', + floatingLabelClass = 'mui-textfield--float-label'; + + +/** + * Initialize input element. + * @param {Element} inputEl - The input element. + */ +function initialize(inputEl) { + // check flag + if (inputEl._muiTextfield === true) return; + else inputEl._muiTextfield = true; + + if (inputEl.value.length) jqLite.addClass(inputEl, notEmptyClass); + else jqLite.addClass(inputEl, emptyClass); + + jqLite.on(inputEl, 'input', inputHandler); + jqLite.on(inputEl, 'change', inputHandler); + + // add dirty class on focus + jqLite.on(inputEl, 'focus', function(){jqLite.addClass(this, dirtyClass);}); +} + + +/** + * Handle input events. + */ +function inputHandler() { + var inputEl = this; + + if (inputEl.value.length) { + jqLite.removeClass(inputEl, emptyClass); + jqLite.addClass(inputEl, notEmptyClass); + } else { + jqLite.removeClass(inputEl, notEmptyClass); + jqLite.addClass(inputEl, emptyClass) + } + + jqLite.addClass(inputEl, dirtyClass); +} + + +/** Define module API */ +module.exports = { + /** Initialize input elements */ + initialize: initialize, + + /** Initialize module listeners */ + initListeners: function() { + var doc = document; + + // markup elements available when method is called + var elList = doc.querySelectorAll(cssSelector); + for (var i=elList.length - 1; i >= 0; i--) initialize(elList[i]); + + // listen for new elements + util.onNodeInserted(function(el) { + if (el.tagName === 'INPUT' || el.tagName === 'TEXTAREA') initialize(el); + }); + + // add transition css for floating labels + setTimeout(function() { + var css = '.mui-textfield.mui-textfield--float-label > label {' + [ + '-webkit-transition', + '-moz-transition', + '-o-transition', + 'transition', + '' + ].join(':all .15s ease-out;') + '}'; + + util.loadStyle(css); + }, 150); + + // pointer-events shim for floating labels + if (util.supportsPointerEvents() === false) { + jqLite.on(document, 'click', function(ev) { + var targetEl = ev.target; + + if (targetEl.tagName === 'LABEL' && + jqLite.hasClass(targetEl.parentNode, floatingLabelClass)) { + var inputEl = targetEl.previousElementSibling; + if (inputEl) inputEl.focus(); + } + }); + } + } +}; + +},{"./lib/jqLite":4,"./lib/util":5}]},{},[1]) \ No newline at end of file diff --git a/platforms/ios/www/libs/mui/packages/meteor/lib/js/mui.min.js b/platforms/ios/www/libs/mui/packages/meteor/lib/js/mui.min.js new file mode 100644 index 0000000..833d99c --- /dev/null +++ b/platforms/ios/www/libs/mui/packages/meteor/lib/js/mui.min.js @@ -0,0 +1 @@ +!function e(t,n,i){function o(l,s){if(!n[l]){if(!t[l]){var a="function"==typeof require&&require;if(!s&&a)return a(l,!0);if(r)return r(l,!0);throw new Error("Cannot find module '"+l+"'")}var c=n[l]={exports:{}};t[l][0].call(c.exports,function(e){var n=t[l][1][e];return o(n?n:e)},c,c.exports,e,t,n,i)}return n[l].exports}for(var r="function"==typeof require&&require,l=0;ld&&(h=s+(n+1)*l-(-1*i+o+r),m=t*l+2*s-p,v=Math.min(h,m)),{height:p+"px",top:i+"px",scrollTop:v}}var o=15,r=32,l=42,s=8;t.exports={getMenuPositionalCSS:i}},{}],4:[function(e,t,n){"use strict";function i(e,t){if(t&&e.setAttribute){for(var n,i=m(e),o=t.split(" "),r=0;r-1:!1}function l(e){if(void 0===e)return"undefined";var t=Object.prototype.toString.call(e);if(0===t.indexOf("[object "))return t.slice(8,-1).toLowerCase();throw new Error("MUI: Could not understand type: "+t)}function s(e,t,n,i){i=void 0===i?!1:i,e.addEventListener(t,n,i);var o=e._muiEventCache=e._muiEventCache||{};o[t]=o[t]||[],o[t].push([n,i])}function a(e,t,n,i){i=void 0===i?!1:i;var o,r,l=e._muiEventCache=e._muiEventCache||{},s=l[t]||[];for(r=s.length;r--;)o=s[r],(void 0===n||o[0]===n&&o[1]===i)&&(s.splice(r,1),e.removeEventListener(t,o[0],o[1]))}function c(e,t,n,i){s(e,t,function o(i){n&&n.apply(this,arguments),a(e,t,o)},i)}function u(e,t){var n=window;if(void 0===t){if(e===n){var i=document.documentElement;return(n.pageXOffset||i.scrollLeft)-(i.clientLeft||0)}return e.scrollLeft}e===n?n.scrollTo(t,d(n)):e.scrollLeft=t}function d(e,t){var n=window;if(void 0===t){if(e===n){var i=document.documentElement;return(n.pageYOffset||i.scrollTop)-(i.clientTop||0)}return e.scrollTop}e===n?n.scrollTo(u(n),t):e.scrollTop=t}function f(e){var t=window,n=e.getBoundingClientRect(),i=d(t),o=u(t);return{top:n.top+i,left:n.left+o,height:n.height,width:n.width}}function p(e){var t=!1,n=!0,i=document,o=i.defaultView,r=i.documentElement,l=i.addEventListener?"addEventListener":"attachEvent",s=i.addEventListener?"removeEventListener":"detachEvent",a=i.addEventListener?"":"on",c=function(n){"readystatechange"==n.type&&"complete"!=i.readyState||(("load"==n.type?o:i)[s](a+n.type,c,!1),!t&&(t=!0)&&e.call(o,n.type||n))},u=function(){try{r.doScroll("left")}catch(e){return void setTimeout(u,50)}c("poll")};if("complete"==i.readyState)e.call(o,"lazy");else{if(i.createEventObject&&r.doScroll){try{n=!o.frameElement}catch(d){}n&&u()}i[l](a+"DOMContentLoaded",c,!1),i[l](a+"readystatechange",c,!1),o[l](a+"load",c,!1)}}function h(e,t){if(t&&e.setAttribute){for(var n,i=m(e),o=t.split(" "),r=0;r=0;)i=i.replace(" "+n+" "," ");e.setAttribute("class",i.trim())}}function m(e){var t=(e.getAttribute("class")||"").replace(/[\n\t]/g,"");return" "+t+" "}function v(e){return e.replace(g,function(e,t,n,i){return i?n.toUpperCase():n}).replace(E,"Moz$1")}function b(e,t,n){var i;return i=n.getPropertyValue(t),""!==i||e.ownerDocument||(i=e.style[v(t)]),i}var y,g=/([\:\-\_]+(.))/g,E=/^moz([A-Z])/;y={multiple:!0,selected:!0,checked:!0,disabled:!0,readonly:!0,required:!0,open:!0},t.exports={addClass:i,css:o,hasClass:r,off:a,offset:f,on:s,one:c,ready:p,removeClass:h,type:l,scrollLeft:u,scrollTop:d}},{}],5:[function(e,t,n){"use strict";function i(){var e=window;if(v.debug&&"undefined"!=typeof e.console)try{e.console.log.apply(e.console,arguments)}catch(t){var n=Array.prototype.slice.call(arguments);e.console.log(n.join("\n"))}}function o(e){var t,n=document;t=n.head||n.getElementsByTagName("head")[0]||n.documentElement;var i=n.createElement("style");return i.type="text/css",i.styleSheet?i.styleSheet.cssText=e:i.appendChild(n.createTextNode(e)),t.insertBefore(i,t.firstChild),i}function r(e,t){if(!t)throw new Error("MUI: "+e);"undefined"!=typeof console&&console.error("MUI Warning: "+e)}function l(e){if(y.push(e),void 0===y._initialized){var t=document;b.on(t,"animationstart",s),b.on(t,"mozAnimationStart",s),b.on(t,"webkitAnimationStart",s),y._initialized=!0}}function s(e){if("mui-node-inserted"===e.animationName)for(var t=e.target,n=y.length-1;n>=0;n--)y[n](t)}function a(e){var t="";for(var n in e)t+=e[n]?n+" ":"";return t.trim()}function c(){if(void 0!==m)return m;var e=document.createElement("x");return e.style.cssText="pointer-events:auto",m="auto"===e.style.pointerEvents}function u(e,t){return function(){e[t].apply(e,arguments)}}function d(e,t,n,i,o){var r,l=document.createEvent("HTMLEvents"),n=void 0!==n?n:!0,i=void 0!==i?i:!0;if(l.initEvent(t,n,i),o)for(r in o)l[r]=o[r];return e&&e.dispatchEvent(l),l}function f(){if(g+=1,1===g){var e=window,t=document;h={left:b.scrollLeft(e),top:b.scrollTop(e)},b.addClass(t.body,E),e.scrollTo(h.left,h.top)}}function p(){if(0!==g&&(g-=1,0===g)){var e=window,t=document;b.removeClass(t.body,E),e.scrollTo(h.left,h.top)}}var h,m,v=e("../config"),b=e("./jqLite"),y=[],g=0,E="mui-body--scroll-lock";t.exports={callback:u,classNames:a,disableScrollLock:p,dispatchEvent:d,enableScrollLock:f,log:i,loadStyle:o,onNodeInserted:l,raiseError:r,supportsPointerEvents:c}},{"../config":2,"./jqLite":4}],6:[function(e,t,n){"use strict";function i(e){e._muiDropdown!==!0&&(e._muiDropdown=!0,e.hasAttribute("type")||(e.type="button"),l.on(e,"click",o))}function o(e){if(0===e.button){var t=this;null===t.getAttribute("disabled")&&r(t)}}function r(e){function t(){l.removeClass(o,u),l.off(r,"click",t)}function n(){var n=i.getBoundingClientRect(),s=e.getBoundingClientRect(),a=s.top-n.top+s.height;l.css(o,"top",a+"px"),l.addClass(o,u),setTimeout(function(){l.on(r,"click",t)},0)}var i=e.parentNode,o=e.nextElementSibling,r=i.ownerDocument;return o&&l.hasClass(o,d)?void(l.hasClass(o,u)?t():n()):s.raiseError("Dropdown menu element not found")}var l=e("./lib/jqLite"),s=e("./lib/util"),a="data-mui-toggle",c='[data-mui-toggle="dropdown"]',u="mui--is-open",d="mui-dropdown__menu";t.exports={initListeners:function(){for(var e=document,t=e.querySelectorAll(c),n=t.length-1;n>=0;n--)i(t[n]);s.onNodeInserted(function(e){"dropdown"===e.getAttribute(a)&&i(e)})}}},{"./lib/jqLite":4,"./lib/util":5}],7:[function(e,t,n){t.exports=e(4)},{}],8:[function(e,t,n){"use strict";function i(e){var t;if("on"===e){for(var n,i,l,s=arguments.length-1;s>0;s--)n=arguments[s],"object"===p.type(n)&&(i=n),n instanceof Element&&1===n.nodeType&&(l=n);i=i||{},void 0===i.keyboard&&(i.keyboard=!0),void 0===i["static"]&&(i["static"]=!1),t=o(i,l)}else"off"===e?t=r():f.raiseError("Expecting 'on' or 'off'");return t}function o(e,t){var n=document.body,i=document.getElementById(h);if(f.enableScrollLock(),i){for(;i.firstChild;)i.removeChild(i.firstChild);t&&i.appendChild(t)}else i=document.createElement("div"),i.setAttribute("id",h),t&&i.appendChild(t),n.appendChild(i);return m.test(navigator.userAgent)&&p.css(i,"cursor","pointer"),e.keyboard?l():s(),e["static"]?u(i):c(i),i.muiOptions=e,i}function r(){var e,t=document.getElementById(h);if(t){for(;t.firstChild;)t.removeChild(t.firstChild);t.parentNode.removeChild(t),e=t.muiOptions.onclose,u(t)}return f.disableScrollLock(),s(),e&&e(),t}function l(){p.on(document,"keyup",a)}function s(){p.off(document,"keyup",a)}function a(e){27===e.keyCode&&r()}function c(e){p.on(e,"click",d)}function u(e){p.off(e,"click",d)}function d(e){e.target.id===h&&r()}var f=e("./lib/util"),p=e("./lib/jqLite"),h="mui-overlay",m=/(iPad|iPhone|iPod)/g;t.exports=i},{"./lib/jqLite":4,"./lib/util":5}],9:[function(e,t,n){"use strict";function i(e){e._muiRipple!==!0&&(e._muiRipple=!0,"INPUT"!==e.tagName&&(r.on(e,"touchstart",o),r.on(e,"mousedown",o)))}function o(e){if(0===e.button){var t=this;if(t.disabled!==!0&&t.touchFlag!==!0){t.touchFlag=!0,setTimeout(function(){t.touchFlag=!1},100);var n=document.createElement("div");n.className=c;var i,o,l=r.offset(t),s=e.pageX-l.left,u=e.pageY-l.top;i=r.hasClass(t,a)?l.height/2:l.height,o=i/2,r.css(n,{height:i+"px",width:i+"px",top:u-o+"px",left:s-o+"px"}),t.appendChild(n),window.setTimeout(function(){var e=n.parentNode;e&&e.removeChild(n)},2e3)}}}var r=e("./lib/jqLite"),l=e("./lib/util"),s="mui-btn",a="mui-btn--fab",c="mui-ripple-effect";t.exports={initListeners:function(){for(var e=document,t=e.getElementsByClassName(s),n=t.length-1;n>=0;n--)i(t[n]);l.onNodeInserted(function(e){r.hasClass(e,s)&&i(e)})}}},{"./lib/jqLite":4,"./lib/util":5}],10:[function(e,t,n){"use strict";function i(e){e._muiSelect!==!0&&(e._muiSelect=!0,"ontouchstart"in p.documentElement||new o(e))}function o(e){this.selectEl=e,this.wrapperEl=e.parentNode,this.useDefault=!1,l.on(e,"mousedown",s.callback(this,"mousedownHandler")),l.on(e,"focus",s.callback(this,"focusHandler")),l.on(e,"click",s.callback(this,"clickHandler")),this.wrapperEl.tabIndex=-1;var t=s.callback(this,"wrapperFocusHandler");l.on(this.wrapperEl,"focus",t)}function r(e,t){s.enableScrollLock(),this.origIndex=null,this.currentIndex=null,this.selectEl=t,this.menuEl=this._createMenuEl(e,t),this.clickCallbackFn=s.callback(this,"clickHandler"),this.keydownCallbackFn=s.callback(this,"keydownHandler"),this.destroyCallbackFn=s.callback(this,"destroy"),e.appendChild(this.menuEl),l.scrollTop(this.menuEl,this.menuEl._muiScrollTop),setTimeout(function(){"body"!==p.activeElement.nodeName.toLowerCase()&&p.activeElement.blur()},0),l.on(this.menuEl,"click",this.clickCallbackFn),l.on(p,"keydown",this.keydownCallbackFn),l.on(h,"resize",this.destroyCallbackFn);var n=this.destroyCallbackFn;setTimeout(function(){l.on(p,"click",n)},0)}var l=e("./lib/jqLite"),s=e("./lib/util"),a=e("./lib/forms"),c="mui-select",u=".mui-select > select",d="mui-select__menu",f="mui--is-selected",p=document,h=window;o.prototype.mousedownHandler=function(e){0===e.button&&this.useDefault!==!0&&e.preventDefault()},o.prototype.focusHandler=function(e){if(this.useDefault!==!0){var t=this.selectEl,n=this.wrapperEl,i=t.tabIndex,o=s.callback(this,"keydownHandler");l.on(p,"keydown",o),t.tabIndex=-1,l.one(n,"blur",function(){t.tabIndex=i,l.off(p,"keydown",o)}),n.focus()}},o.prototype.keydownHandler=function(e){var t=e.keyCode;32!==t&&38!==t&&40!==t||(e.preventDefault(),this.selectEl.disabled!==!0&&this.renderMenu())},o.prototype.wrapperFocusHandler=function(){return this.selectEl.disabled?this.wrapperEl.blur():void 0},o.prototype.clickHandler=function(e){0===e.button&&this.renderMenu()},o.prototype.renderMenu=function(){return this.useDefault===!0?this.useDefault=!1:void new r(this.wrapperEl,this.selectEl)},r.prototype._createMenuEl=function(e,t){var n,i,o,r=p.createElement("div"),s=t.children,c=s.length,u=0;for(r.className=d,o=0;c>o;o++)n=s[o],i=p.createElement("div"),i.textContent=n.textContent,i._muiPos=o,n.selected&&(i.setAttribute("class",f),u=o),r.appendChild(i);this.origIndex=u,this.currentIndex=u;var h=a.getMenuPositionalCSS(e,c,u);return l.css(r,h),r._muiScrollTop=h.scrollTop,r},r.prototype.keydownHandler=function(e){var t=e.keyCode;return 9===t?this.destroy():(27!==t&&40!==t&&38!==t&&13!==t||e.preventDefault(),void(27===t?this.destroy():40===t?this.increment():38===t?this.decrement():13===t&&(this.selectCurrent(),this.destroy())))},r.prototype.clickHandler=function(e){e.stopPropagation();var t=e.target._muiPos;void 0!==t&&(this.currentIndex=t,this.selectCurrent(),this.destroy())},r.prototype.increment=function(){if(this.currentIndex!==this.menuEl.children.length-1){var e=this.menuEl.children;l.removeClass(e[this.currentIndex],f),this.currentIndex+=1,l.addClass(e[this.currentIndex],f)}},r.prototype.decrement=function(){if(0!==this.currentIndex){var e=this.menuEl.children;l.removeClass(e[this.currentIndex],f),this.currentIndex-=1,l.addClass(e[this.currentIndex],f)}},r.prototype.selectCurrent=function(){if(this.currentIndex!==this.origIndex){var e=this.selectEl.children;e[this.origIndex].selected=!1,e[this.currentIndex].selected=!0,s.dispatchEvent(this.selectEl,"change")}},r.prototype.destroy=function(){var e=this.menuEl.parentNode;e&&e.removeChild(this.menuEl),this.selectEl.focus(),s.disableScrollLock(),l.off(this.menuEl,"click",this.clickCallbackFn),l.off(p,"keydown",this.keydownCallbackFn),l.off(p,"click",this.destroyCallbackFn),l.off(h,"resize",this.destroyCallbackFn)},t.exports={initListeners:function(){for(var e=p.querySelectorAll(u),t=e.length-1;t>=0;t--)i(e[t]);s.onNodeInserted(function(e){"SELECT"===e.tagName&&l.hasClass(e.parentNode,c)&&i(e)})}}},{"./lib/forms":3,"./lib/jqLite":4,"./lib/util":5}],11:[function(e,t,n){"use strict";function i(e){e._muiTabs!==!0&&(e._muiTabs=!0,s.on(e,"click",o))}function o(e){if(0===e.button){var t=this;null===t.getAttribute("disabled")&&r(t)}}function r(e){var t,n,i,o,r,c,u,b,y,g=e.parentNode,E=e.getAttribute(d),C=document.getElementById(E);s.hasClass(g,f)||(C||a.raiseError('Tab pane "'+E+'" not found'),n=l(C),i=n.id,y="["+d+'="'+i+'"]',o=document.querySelectorAll(y)[0],t=o.parentNode,r={paneId:E,relatedPaneId:i},c={paneId:i,relatedPaneId:E},u=a.dispatchEvent(o,m,!0,!0,c),b=a.dispatchEvent(e,p,!0,!0,r),setTimeout(function(){u.defaultPrevented||b.defaultPrevented||(t&&s.removeClass(t,f),n&&s.removeClass(n,f),s.addClass(g,f),s.addClass(C,f),a.dispatchEvent(o,v,!0,!1,c),a.dispatchEvent(e,h,!0,!1,r))},0))}function l(e){for(var t,n=e.parentNode.children,i=n.length,o=null;i--&&!o;)t=n[i],t!==e&&s.hasClass(t,f)&&(o=t);return o}var s=e("./lib/jqLite"),a=e("./lib/util"),c="data-mui-toggle",u="["+c+'="tab"]',d="data-mui-controls",f="mui--is-active",p="mui.tabs.showstart",h="mui.tabs.showend",m="mui.tabs.hidestart",v="mui.tabs.hideend";t.exports={initListeners:function(){for(var e=document.querySelectorAll(u),t=e.length-1;t>=0;t--)i(e[t]);a.onNodeInserted(function(e){"tab"===e.getAttribute(c)&&i(e)})},api:{activate:function(e){var t="["+d+"="+e+"]",n=document.querySelectorAll(t);n.length||a.raiseError('Tab control for pane "'+e+'" not found'),r(n[0])}}}},{"./lib/jqLite":4,"./lib/util":5}],12:[function(e,t,n){"use strict";function i(e){e._muiTextfield!==!0&&(e._muiTextfield=!0,e.value.length?r.addClass(e,c):r.addClass(e,a),r.on(e,"input",o),r.on(e,"change",o),r.on(e,"focus",function(){r.addClass(this,u)}))}function o(){var e=this;e.value.length?(r.removeClass(e,a),r.addClass(e,c)):(r.removeClass(e,c),r.addClass(e,a)),r.addClass(e,u)}var r=e("./lib/jqLite"),l=e("./lib/util"),s=".mui-textfield > input, .mui-textfield > textarea",a="mui--is-empty",c="mui--is-not-empty",u="mui--is-dirty",d="mui-textfield--float-label";t.exports={initialize:i,initListeners:function(){for(var e=document,t=e.querySelectorAll(s),n=t.length-1;n>=0;n--)i(t[n]);l.onNodeInserted(function(e){"INPUT"!==e.tagName&&"TEXTAREA"!==e.tagName||i(e)}),setTimeout(function(){var e=".mui-textfield.mui-textfield--float-label > label {"+["-webkit-transition","-moz-transition","-o-transition","transition",""].join(":all .15s ease-out;")+"}";l.loadStyle(e)},150),l.supportsPointerEvents()===!1&&r.on(document,"click",function(e){var t=e.target;if("LABEL"===t.tagName&&r.hasClass(t.parentNode,d)){var n=t.previousElementSibling;n&&n.focus()}})}}},{"./lib/jqLite":4,"./lib/util":5}]},{},[1]); \ No newline at end of file diff --git a/platforms/ios/www/libs/mui/packages/meteor/package.js b/platforms/ios/www/libs/mui/packages/meteor/package.js new file mode 100644 index 0000000..f71c18f --- /dev/null +++ b/platforms/ios/www/libs/mui/packages/meteor/package.js @@ -0,0 +1,22 @@ +Package.describe({ + name: 'muicss:mui', + version: '0.5.9', + // Brief, one-line summary of the package. + summary: 'MUI is a lightweight CSS framework based on Google\'s Material Design guidelines', + // URL to the Git repository containing the source code for this package. + git: 'https://github.com/muicss/mui', + // By default, Meteor will default to using README.md for documentation. + // To avoid submitting documentation, set this field to null. + documentation: 'README.md' +}); + +Package.onUse(function(api) { + api.versionsFrom('1.0'); + + api.addFiles([ + 'lib/css/mui.css', + 'lib/css/mui.min.css', + 'lib/js/mui.js', + 'lib/js/mui.min.js' + ], 'client'); +}); diff --git a/platforms/ios/www/libs/mui/packages/npm/LICENSE.txt b/platforms/ios/www/libs/mui/packages/npm/LICENSE.txt new file mode 100644 index 0000000..4b0aef4 --- /dev/null +++ b/platforms/ios/www/libs/mui/packages/npm/LICENSE.txt @@ -0,0 +1,31 @@ +Copyright (c) 2015 Andres Morey + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice 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. + +==== + +All files located in the node_modules and bower_components directories are +externally maintained libraries used by this software which have their +own licenses; we recommend you read them, as their terms may differ from +the terms above. diff --git a/platforms/ios/www/libs/mui/packages/npm/README.md b/platforms/ios/www/libs/mui/packages/npm/README.md new file mode 100644 index 0000000..0d180d1 --- /dev/null +++ b/platforms/ios/www/libs/mui/packages/npm/README.md @@ -0,0 +1,487 @@ +# Material Design CSS Framework + +[![MUI](https://www.muicss.com/static/favicons/icon-192x192.png)](https://www.muicss.com) + +MUI is a lightweight CSS framework that follows Google's Material Design guidelines. + +[![Join the chat at https://gitter.im/muicss/mui](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/muicss/mui?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +[![Build Status](https://travis-ci.org/muicss/mui.svg?branch=master)](https://travis-ci.org/muicss/mui) +[![Dependency Status](https://david-dm.org/muicss/mui.svg)](https://david-dm.org/muicss/mui) +[![devDependency Status](https://david-dm.org/muicss/mui/dev-status.svg)](https://david-dm.org/muicss/mui#info=devDependencies) + +## Introduction + +The MUI NPM package makes it easy to import MUI into a project and create a custom build that only includes the components you need. + +The simplest way to use MUI is via the top level imports `muicss` and `muicss/react`: + +```javascript +import { Appbar, Button, Panel } from 'muicss/react'; +``` + +You can also optimize your builds by importing modules one-by-one from the lower level API: + +```javascript +import Appbar from 'muicss/lib/react/appbar'; +import Button from 'muicss/lib/react/button'; +import Container from 'muicss/lib/react/container'; +``` + +Here's an example of how to use MUI in a React app: + +```javascript +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Appbar, Button, Panel } from 'muicss/react'; + +class Example extends React.Component { + onClick() { + console.log('clicked on button'); + } + + render() { + return ( +
              + + + + + + +
              + ); + } +} + +ReactDOM.render(, document.getElementById('example')); +``` + +## API Documentation + +### React Library + +All of the MUI React components can be accessed as top-level attributes of the `muicss/react` package. In addition, they can be accessed individually at `muicss/lib/react/{component}`. + +#### Appbar + +```jsx +import Appbar from 'muicss/lib/react/appbar'; + + +``` + +Read more: https://www.muicss.com/docs/v1/react/appbar + +#### Button + +```jsx +import Button from 'muicss/lib/react/button'; + +
              '; + + // directive function + return ['$timeout', function ($timeout) { + return { + restrict: 'AE', + require: ['ngModel'], + scope: scopeArgs, + replace: true, + template: template, + link: function link(scope, element, attrs, controllers) { + var inputEl = element.find('input') || element.find('textarea'), + labelEl = element.find('label'), + ngModelCtrl = controllers[0], + formCtrl = controllers[1], + isUndef = _angular2.default.isUndefined, + el = inputEl[0]; + + // disable MUI js + if (el) el._muiTextfield = true; + + // remove attributes from wrapper + element.removeAttr('ng-change'); + element.removeAttr('ng-model'); + + // scope defaults + if (!isTextArea) scope.type = scope.type || 'text';else scope.rows = scope.rows || 2; + + // autofocus + if (!isUndef(attrs.autofocus)) inputEl[0].focus(); + + // required + if (!isUndef(attrs.required)) inputEl.prop('required', true); + + // invalid + if (!isUndef(attrs.invalid)) inputEl.addClass('mui--is-invalid'); + + // set is-empty|is-no-empty + handleEmptyClasses(inputEl, scope.ngModel); + + // float-label + if (!isUndef(scope.floatLabel)) { + element.addClass('mui-textfield--float-label'); + + $timeout(function () { + labelEl.css({ + 'transition': '.15s ease-out', + '-webkit-transition': '.15s ease-out', + '-moz-transition': '.15s ease-out', + '-o-transition': '.15s ease-out', + '-ms-transition': '.15s ease-out' + }); + }, 150); + } + + // handle changes + scope.onChange = function () { + var val = scope.ngModel; + + // trigger ng-change + if (ngModelCtrl) ngModelCtrl.$setViewValue(val); + + // set is-empty|is-no-empty + handleEmptyClasses(inputEl, val); + + // add is-dirty + inputEl.addClass(dirtyClass); + }; + + // handle focus event + scope.onFocus = function () { + inputEl.addClass(dirtyClass); + }; + } + }; + }]; +} + +_angular2.default.module(moduleName, []).directive('muiInput', inputFactory(false)).directive('muiTextarea', inputFactory(true)); + +/** Define module API */ +exports.default = moduleName; +module.exports = exports['default']; \ No newline at end of file diff --git a/platforms/ios/www/libs/mui/packages/npm/lib/angular/panel.js b/platforms/ios/www/libs/mui/packages/npm/lib/angular/panel.js new file mode 100644 index 0000000..6b07daf --- /dev/null +++ b/platforms/ios/www/libs/mui/packages/npm/lib/angular/panel.js @@ -0,0 +1,34 @@ +var babelHelpers = require('./babel-helpers.js'); +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _angular = require('angular'); + +var _angular2 = babelHelpers.interopRequireDefault(_angular); + +var moduleName = 'mui.panel'; /** + * MUI Angular Panel Component + * @module angular/panel + */ + +_angular2.default.module(moduleName, []).directive('muiPanel', function () { + return { + restrict: 'AE', + replace: true, + scope: true, + template: '
              ', + transclude: true, + link: function link(scope, element, attr, controller, transcludeFn) { + transcludeFn(scope, function (clone) { + element.append(clone); + }); + } + }; +}); + +/** Define module API */ +exports.default = moduleName; +module.exports = exports['default']; \ No newline at end of file diff --git a/platforms/ios/www/libs/mui/packages/npm/lib/angular/radio.js b/platforms/ios/www/libs/mui/packages/npm/lib/angular/radio.js new file mode 100644 index 0000000..17dcc99 --- /dev/null +++ b/platforms/ios/www/libs/mui/packages/npm/lib/angular/radio.js @@ -0,0 +1,35 @@ +var babelHelpers = require('./babel-helpers.js'); +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _angular = require('angular'); + +var _angular2 = babelHelpers.interopRequireDefault(_angular); + +var moduleName = 'mui.radio'; /** + * MUI Angular Radio Component + * @module angular/radio + */ + +_angular2.default.module(moduleName, []).directive('muiRadio', function () { + return { + restrict: 'AE', + replace: true, + require: ['?ngModel'], + scope: { + label: '@', + name: '@', + value: '@', + ngModel: '=', + ngDisabled: '=' + }, + template: '
              ' + ' ' + '
              ' + }; +}); + +/** Define module API */ +exports.default = moduleName; +module.exports = exports['default']; \ No newline at end of file diff --git a/platforms/ios/www/libs/mui/packages/npm/lib/angular/row.js b/platforms/ios/www/libs/mui/packages/npm/lib/angular/row.js new file mode 100644 index 0000000..2e7735b --- /dev/null +++ b/platforms/ios/www/libs/mui/packages/npm/lib/angular/row.js @@ -0,0 +1,34 @@ +var babelHelpers = require('./babel-helpers.js'); +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _angular = require('angular'); + +var _angular2 = babelHelpers.interopRequireDefault(_angular); + +var moduleName = 'mui.row'; /** + * MUI Angular Grid/Row Module + * @module angular/row.js + */ + +_angular2.default.module('mui.row', []).directive('muiRow', function () { + return { + restrict: 'AE', + scope: true, + replace: true, + template: '
              ', + transclude: true, + link: function link(scope, element, attr, controller, transcludeFn) { + transcludeFn(scope, function (clone) { + element.append(clone); + }); + } + }; +}); + +/** Define module API */ +exports.default = moduleName; +module.exports = exports['default']; \ No newline at end of file diff --git a/platforms/ios/www/libs/mui/packages/npm/lib/angular/select.js b/platforms/ios/www/libs/mui/packages/npm/lib/angular/select.js new file mode 100644 index 0000000..2778c9f --- /dev/null +++ b/platforms/ios/www/libs/mui/packages/npm/lib/angular/select.js @@ -0,0 +1,256 @@ +var babelHelpers = require('./babel-helpers.js'); +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _angular = require('angular'); + +var _angular2 = babelHelpers.interopRequireDefault(_angular); + +var _forms = require('../js/lib/forms'); + +var formlib = babelHelpers.interopRequireWildcard(_forms); + +var _util = require('../js/lib/util'); + +var util = babelHelpers.interopRequireWildcard(_util); + +var _jqLite = require('../js/lib/jqLite'); + +var jqLite = babelHelpers.interopRequireWildcard(_jqLite); +/** + * MUI Angular Select Component + * @module angular/select + */ + +var moduleName = 'mui.select'; + +_angular2.default.module(moduleName, []).directive('muiSelect', ['$timeout', function ($timeout) { + return { + restrict: 'AE', + require: ['ngModel'], + scope: { + name: '@', + ngDisabled: '=', + ngModel: '=' + }, + replace: true, + transclude: true, + template: '
              ' + '' + '
              ' + '
              {{option.label}}
              ' + '
              ' + '
              ', + link: function link(scope, element, attrs, controller, transcludeFn) { + var wrapperEl = element, + menuEl = element.find('div'), + selectEl = element.find('select'), + isUndef = _angular2.default.isUndefined, + cacheIndex; + + // disable MUI js + selectEl[0]._muiSelect = true; + + // init scope + scope.options = []; + scope.isOpen = false; + scope.useDefault = false; + scope.origTabIndex = selectEl[0].tabIndex; + scope.menuIndex = 0; + + // handle `use-default` attribute + if (!isUndef(attrs.useDefault)) scope.useDefault = true; + + // make wrapper focusable + wrapperEl.prop('tabIndex', -1); + + // extract
              '; + + // directive function + return ['$timeout', function($timeout) { + return { + restrict: 'AE', + require: ['ngModel'], + scope: scopeArgs, + replace: true, + template: template, + link: function(scope, element, attrs, controllers) { + var inputEl = element.find('input') || element.find('textarea'), + labelEl = element.find('label'), + ngModelCtrl = controllers[0], + formCtrl = controllers[1], + isUndef = angular.isUndefined, + el = inputEl[0]; + + // disable MUI js + if (el) el._muiTextfield = true; + + // remove attributes from wrapper + element.removeAttr('ng-change'); + element.removeAttr('ng-model'); + + // scope defaults + if (!isTextArea) scope.type = scope.type || 'text'; + else scope.rows = scope.rows || 2; + + // autofocus + if (!isUndef(attrs.autofocus)) inputEl[0].focus(); + + // required + if (!isUndef(attrs.required)) inputEl.prop('required', true); + + // invalid + if (!isUndef(attrs.invalid)) inputEl.addClass('mui--is-invalid'); + + // set is-empty|is-no-empty + handleEmptyClasses(inputEl, scope.ngModel); + + // float-label + if (!isUndef(scope.floatLabel)) { + element.addClass('mui-textfield--float-label'); + + $timeout(function() { + labelEl.css({ + 'transition': '.15s ease-out', + '-webkit-transition': '.15s ease-out', + '-moz-transition': '.15s ease-out', + '-o-transition': '.15s ease-out', + '-ms-transition': '.15s ease-out', + }) + }, 150); + } + + // handle changes + scope.onChange = function() { + var val = scope.ngModel; + + // trigger ng-change + if (ngModelCtrl) ngModelCtrl.$setViewValue(val); + + // set is-empty|is-no-empty + handleEmptyClasses(inputEl, val); + + // add is-dirty + inputEl.addClass(dirtyClass); + } + + // handle focus event + scope.onFocus = function() { + inputEl.addClass(dirtyClass); + } + } + }; + }]; +} + + +angular.module(moduleName, []) + .directive('muiInput', inputFactory(false)) + .directive('muiTextarea', inputFactory(true)); + + +/** Define module API */ +export default moduleName; diff --git a/platforms/ios/www/libs/mui/src/angular/panel.js b/platforms/ios/www/libs/mui/src/angular/panel.js new file mode 100644 index 0000000..a9585f0 --- /dev/null +++ b/platforms/ios/www/libs/mui/src/angular/panel.js @@ -0,0 +1,30 @@ +/** + * MUI Angular Panel Component + * @module angular/panel + */ + +import angular from 'angular'; + + +const moduleName = 'mui.panel'; + + +angular.module(moduleName, []) + .directive('muiPanel', function() { + return { + restrict: 'AE', + replace: true, + scope : true, + template: '
              ', + transclude: true, + link: function(scope, element, attr, controller, transcludeFn) { + transcludeFn(scope, function(clone) { + element.append(clone); + }); + } + }; + }); + + +/** Define module API */ +export default moduleName; diff --git a/platforms/ios/www/libs/mui/src/angular/radio.js b/platforms/ios/www/libs/mui/src/angular/radio.js new file mode 100644 index 0000000..5a7351a --- /dev/null +++ b/platforms/ios/www/libs/mui/src/angular/radio.js @@ -0,0 +1,39 @@ +/** + * MUI Angular Radio Component + * @module angular/radio + */ + +import angular from 'angular'; + + +const moduleName = 'mui.radio'; + + +angular.module(moduleName, []) + .directive('muiRadio', function() { + return { + restrict: 'AE', + replace: true, + require: ['?ngModel'], + scope: { + label: '@', + name: '@', + value: '@', + ngModel: '=', + ngDisabled: '=' + }, + template: '
              ' + + ' ' + + '
              ' + } + }); + + +/** Define module API */ +export default moduleName; diff --git a/platforms/ios/www/libs/mui/src/angular/row.js b/platforms/ios/www/libs/mui/src/angular/row.js new file mode 100644 index 0000000..fd3bf31 --- /dev/null +++ b/platforms/ios/www/libs/mui/src/angular/row.js @@ -0,0 +1,30 @@ +/** + * MUI Angular Grid/Row Module + * @module angular/row.js + */ + +import angular from 'angular'; + + +const moduleName = 'mui.row'; + + +angular.module('mui.row', []) + .directive('muiRow', function() { + return { + restrict: 'AE', + scope: true, + replace: true, + template: '
              ', + transclude: true, + link: function(scope, element, attr, controller, transcludeFn) { + transcludeFn(scope, function(clone) { + element.append(clone); + }); + } + }; + }); + + +/** Define module API */ +export default moduleName; diff --git a/platforms/ios/www/libs/mui/src/angular/select.js b/platforms/ios/www/libs/mui/src/angular/select.js new file mode 100644 index 0000000..eb4c67b --- /dev/null +++ b/platforms/ios/www/libs/mui/src/angular/select.js @@ -0,0 +1,284 @@ +/** + * MUI Angular Select Component + * @module angular/select + */ + +import angular from 'angular'; + +import * as formlib from '../js/lib/forms'; +import * as util from '../js/lib/util'; +import * as jqLite from '../js/lib/jqLite'; + + +const moduleName = 'mui.select'; + + +angular.module(moduleName, []) + .directive('muiSelect', ['$timeout', function($timeout) { + return { + restrict: 'AE', + require: ['ngModel'], + scope: { + name: '@', + ngDisabled: '=', + ngModel: '=' + }, + replace: true, + transclude: true, + template: '
              ' + + '' + + '
              ' + + '
              {{option.label}}
              ' + + '
              ' + + '
              ', + link: function(scope, element, attrs, controller, transcludeFn) { + var wrapperEl = element, + menuEl = element.find('div'), + selectEl = element.find('select'), + isUndef = angular.isUndefined, + cacheIndex; + + // disable MUI js + selectEl[0]._muiSelect = true; + + // init scope + scope.options = []; + scope.isOpen = false; + scope.useDefault = false; + scope.origTabIndex = selectEl[0].tabIndex; + scope.menuIndex = 0; + + // handle `use-default` attribute + if (!isUndef(attrs.useDefault)) scope.useDefault = true; + + // make wrapper focusable + wrapperEl.prop('tabIndex', -1); + + // extract
              + ); + } +} + + +/** Define module API */ +export default Checkbox; diff --git a/platforms/ios/www/libs/mui/src/react/col.jsx b/platforms/ios/www/libs/mui/src/react/col.jsx new file mode 100644 index 0000000..d18cbe4 --- /dev/null +++ b/platforms/ios/www/libs/mui/src/react/col.jsx @@ -0,0 +1,72 @@ +/** + * MUI React Col Component + * @module react/col + */ + +'use strict'; + +import React from 'react'; + +import * as util from '../js/lib/util'; + + +const breakpoints = ['xs', 'sm', 'md', 'lg', 'xl']; + + +/** + * Col constructor + * @class + */ +class Col extends React.Component { + defaultProps() { + let props = {className: ''}, + i, + v; + + // add {breakpoint}, {breakpoint}-offset to props + for (i=breakpoints.length - 1; i > -1; i--) { + v = breakpoints[i]; + props[v] = null; + props[v + '-offset'] = null; + } + + return props; + } + + render() { + let cls = {}, + i, + bk, + val, + baseCls; + + // add mui-col classes + for (i=breakpoints.length - 1; i > -1; i--) { + bk = breakpoints[i]; + baseCls = 'mui-col-' + bk; + + // add mui-col-{bk}-{val} + val = this.props[bk]; + if (val) cls[baseCls + '-' + val] = true; + + // add mui-col-{bk}-offset-{val} + val = this.props[bk + '-offset']; + if (val) cls[baseCls + '-offset-' + val] = true; + } + + cls = util.classNames(cls); + + return ( +
              + {this.props.children} +
              + ); + } +} + + +/** Define module API */ +export default Col; diff --git a/platforms/ios/www/libs/mui/src/react/container.jsx b/platforms/ios/www/libs/mui/src/react/container.jsx new file mode 100644 index 0000000..7c665dc --- /dev/null +++ b/platforms/ios/www/libs/mui/src/react/container.jsx @@ -0,0 +1,44 @@ +/** + * MUI React container module + * @module react/container + */ + +'use strict'; + +import React from 'react'; + + +/** + * Container constructor + * @class + */ +class Container extends React.Component { + static propTypes = { + fluid: React.PropTypes.bool + }; + + static defaultProps = { + className: '', + fluid: false + }; + + render() { + let cls = 'mui-container'; + + // fluid containers + if (this.props.fluid) cls += '-fluid'; + + return ( +
              + {this.props.children} +
              + ); + } +} + + +/** Define module API */ +export default Container; diff --git a/platforms/ios/www/libs/mui/src/react/divider.jsx b/platforms/ios/www/libs/mui/src/react/divider.jsx new file mode 100644 index 0000000..c39816e --- /dev/null +++ b/platforms/ios/www/libs/mui/src/react/divider.jsx @@ -0,0 +1,35 @@ +/** + * MUI React divider module + * @module react/divider + */ + +'use strict'; + +import React from 'react'; + + +/** + * Divider constructor + * @class + */ +class Divider extends React.Component { + static defaultProps = { + className: '' + }; + + render() { + let { children, ...other } = this.props; + + return ( +
              +
              + ); + } +} + + +/** Define module API */ +export default Divider; diff --git a/platforms/ios/www/libs/mui/src/react/dropdown-item.jsx b/platforms/ios/www/libs/mui/src/react/dropdown-item.jsx new file mode 100644 index 0000000..17e7117 --- /dev/null +++ b/platforms/ios/www/libs/mui/src/react/dropdown-item.jsx @@ -0,0 +1,59 @@ +/** + * MUI React dropdowns module + * @module react/dropdowns + */ +/* jshint quotmark:false */ +// jscs:disable validateQuoteMarks + +'use strict'; + +import React from 'react'; + +import * as util from '../js/lib/util'; + + +const PropTypes = React.PropTypes; + + +/** + * DropdownItem constructor + * @class + */ +class DropdownItem extends React.Component { + constructor(props) { + super(props); + + this.onClickCB = util.callback(this, 'onClick'); + } + + static propTypes = { + link: PropTypes.string, + target: PropTypes.string, + onClick: PropTypes.func + }; + + onClick(ev) { + if (this.props.onClick) this.props.onClick(this, ev); + } + + render() { + let { children, onClick, ...other } = this.props; + + return ( +
            • + + {children} + +
            • + ); + } +} + + +/** Define module API */ +export default DropdownItem; diff --git a/platforms/ios/www/libs/mui/src/react/dropdown.jsx b/platforms/ios/www/libs/mui/src/react/dropdown.jsx new file mode 100644 index 0000000..af0dffb --- /dev/null +++ b/platforms/ios/www/libs/mui/src/react/dropdown.jsx @@ -0,0 +1,200 @@ +/** + * MUI React dropdowns module + * @module react/dropdowns + */ +/* jshint quotmark:false */ +// jscs:disable validateQuoteMarks + +'use strict'; + +import React from 'react'; + +import Button from './button'; +import Caret from './caret'; +import * as jqLite from '../js/lib/jqLite'; +import * as util from '../js/lib/util'; + + +const PropTypes = React.PropTypes, + dropdownClass = 'mui-dropdown', + menuClass = 'mui-dropdown__menu', + openClass = 'mui--is-open', + rightClass = 'mui-dropdown__menu--right'; + + +/** + * Dropdown constructor + * @class + */ +class Dropdown extends React.Component { + constructor(props) { + super(props); + + this.state = { + opened: false, + menuTop: 0 + } + + let cb = util.callback; + this.selectCB = cb(this, 'select'); + this.onClickCB = cb(this, 'onClick'); + this.onOutsideClickCB = cb(this, 'onOutsideClick'); + } + + static propTypes = { + color: PropTypes.oneOf(['default', 'primary', 'danger', 'dark', + 'accent']), + variant: PropTypes.oneOf(['default', 'flat', 'raised', 'fab']), + size: PropTypes.oneOf(['default', 'small', 'large']), + label: PropTypes.oneOfType([ + PropTypes.string, + PropTypes.element + ]), + alignMenu: PropTypes.oneOf(['left', 'right']), + onClick: PropTypes.func, + onSelect: PropTypes.func, + disabled: PropTypes.bool + }; + + static defaultProps = { + className: '', + color: 'default', + variant: 'default', + size: 'default', + label: '', + alignMenu: 'left', + onClick: null, + onSelect: null, + disabled: false + }; + + componentWillMount() { + document.addEventListener('click', this.onOutsideClickCB); + } + + componentWillUnmount() { + document.removeEventListener('click', this.onOutsideClickCB); + } + + onClick(ev) { + // only left clicks + if (ev.button !== 0) return; + + // exit if toggle button is disabled + if (this.props.disabled) return; + + if (!ev.defaultPrevented) { + this.toggle(); + + // execute onClick method + let onClickFn = this.props.onClick; + onClickFn && onClickFn(ev); + } + } + + toggle() { + // exit if no menu element + if (!this.props.children) { + return util.raiseError('Dropdown menu element not found'); + } + + if (this.state.opened) this.close(); + else this.open(); + } + + open() { + // position menu element below toggle button + let wrapperRect = this.refs.wrapperEl.getBoundingClientRect(), + toggleRect; + + toggleRect = this.refs.button.refs.buttonEl.getBoundingClientRect(); + + this.setState({ + opened: true, + menuTop: toggleRect.top - wrapperRect.top + toggleRect.height + }); + } + + close() { + this.setState({opened: false}); + } + + select(ev) { + // onSelect callback + if (this.props.onSelect && ev.target.tagName === 'A') { + this.props.onSelect(ev.target.getAttribute('data-mui-value')); + } + + // close menu + if (!ev.defaultPrevented) this.close(); + } + + onOutsideClick(ev) { + let isClickInside = this.refs.wrapperEl.contains(ev.target); + if (!isClickInside) this.close(); + } + + render() { + let buttonEl, + menuEl, + labelEl; + + // build label + if (jqLite.type(this.props.label) === 'string') { + labelEl = {this.props.label} ; + } else { + labelEl = this.props.label; + } + + buttonEl = ( + + ); + + if (this.state.opened) { + let cs = {}; + + cs[menuClass] = true; + cs[openClass] = this.state.opened; + cs[rightClass] = (this.props.alignMenu === 'right'); + cs = util.classNames(cs); + + menuEl = ( +
                + {this.props.children} +
              + ); + } + + let { className, children, onClick, ...other } = this.props; + + return ( +
              + {buttonEl} + {menuEl} +
              + ); + } +} + + +/** Define module API */ +export default Dropdown; diff --git a/platforms/ios/www/libs/mui/src/react/form.jsx b/platforms/ios/www/libs/mui/src/react/form.jsx new file mode 100644 index 0000000..127a0d3 --- /dev/null +++ b/platforms/ios/www/libs/mui/src/react/form.jsx @@ -0,0 +1,44 @@ +/** + * MUI React form module + * @module react/form + */ + +'use strict'; + +import React from 'react'; + + +/** + * Form constructor + * @class + */ +class Form extends React.Component { + static propTypes = { + inline: React.PropTypes.bool + }; + + static defaultProps = { + className: '', + inline: false + }; + + render() { + let cls = ''; + + // inline form + if (this.props.inline) cls = 'mui-form--inline'; + + return ( + + {this.props.children} + + ); + } +} + + +/** Define module API */ +export default Form; diff --git a/platforms/ios/www/libs/mui/src/react/input.jsx b/platforms/ios/www/libs/mui/src/react/input.jsx new file mode 100644 index 0000000..722db29 --- /dev/null +++ b/platforms/ios/www/libs/mui/src/react/input.jsx @@ -0,0 +1,35 @@ +/** + * MUI React Input Component + * @module react/input + */ + +'use strict'; + +import React from 'react'; + +import { TextField } from './text-field'; + + +const PropTypes = React.PropTypes; + + +/** + * Input constructor + * @class + */ +class Input extends React.Component { + static propTypes = { + type: PropTypes.oneOf(['text', 'email', 'url', 'tel', 'password']) + }; + + static defaultProps = { + type: 'text' + }; + + render() { + return ; + } +} + + +export default Input; diff --git a/platforms/ios/www/libs/mui/src/react/option.jsx b/platforms/ios/www/libs/mui/src/react/option.jsx new file mode 100644 index 0000000..ca5e461 --- /dev/null +++ b/platforms/ios/www/libs/mui/src/react/option.jsx @@ -0,0 +1,46 @@ +/** + * MUI React options module + * @module react/option + */ + +'use strict'; + +import React from 'react'; + +import * as formlib from '../js/lib/forms'; +import * as jqLite from '../js/lib/jqLite'; +import * as util from '../js/lib/util'; + + +const PropTypes = React.PropTypes; + + +/** + * Option constructor + * @class + */ +class Option extends React.Component { + static propTypes = { + value: PropTypes.string, + label: PropTypes.string + }; + + static defaultProps = { + value: null, + label: null + }; + + render() { + let { children, ...other } = this.props; + + return ( + + ); + } +} + + +/** Define module API */ +export default Option; diff --git a/platforms/ios/www/libs/mui/src/react/panel.jsx b/platforms/ios/www/libs/mui/src/react/panel.jsx new file mode 100644 index 0000000..038371c --- /dev/null +++ b/platforms/ios/www/libs/mui/src/react/panel.jsx @@ -0,0 +1,34 @@ +/** + * MUI React layout module + * @module react/layout + */ + +'use strict'; + +import React from 'react'; + + +/** + * Panel constructor + * @class + */ +class Panel extends React.Component { + static defaultProps = { + className: '' + }; + + render() { + return ( +
              + {this.props.children} +
              + ); + } +} + + +/** Define module API */ +export default Panel; diff --git a/platforms/ios/www/libs/mui/src/react/radio.jsx b/platforms/ios/www/libs/mui/src/react/radio.jsx new file mode 100644 index 0000000..5511429 --- /dev/null +++ b/platforms/ios/www/libs/mui/src/react/radio.jsx @@ -0,0 +1,65 @@ +/** + * MUI React radio module + * @module react/radio + */ + +'use strict'; + +import React from 'react'; + + +const PropTypes = React.PropTypes; + + +/** + * Radio constructor + * @class + */ +class Radio extends React.Component { + static propTypes = { + name: PropTypes.string, + label: PropTypes.string, + value: PropTypes.string, + checked: PropTypes.bool, + defaultChecked: PropTypes.bool, + disabled: PropTypes.bool, + onChange: PropTypes.func + }; + + static defaultProps = { + className: '', + name: null, + label: null, + disabled: false, + onChange: null + }; + + render() { + let { children, onChange, ...other } = this.props; + + return ( +
              + +
              + ); + } +} + + +/** Define module API */ +export default Radio; diff --git a/platforms/ios/www/libs/mui/src/react/row.jsx b/platforms/ios/www/libs/mui/src/react/row.jsx new file mode 100644 index 0000000..a67691e --- /dev/null +++ b/platforms/ios/www/libs/mui/src/react/row.jsx @@ -0,0 +1,39 @@ +/** + * MUI React Row Component + * @module react/row + */ + +'use strict'; + +import React from 'react'; + +import * as util from '../js/lib/util'; + + +const breakpoints = ['xs', 'sm', 'md', 'lg']; + + +/** + * Row constructor + * @class + */ +class Row extends React.Component { + static defaultProps = { + className: '' + }; + + render() { + return ( +
              + {this.props.children} +
              + ); + } +} + + +/** Define module API */ +export default Row; diff --git a/platforms/ios/www/libs/mui/src/react/select.jsx b/platforms/ios/www/libs/mui/src/react/select.jsx new file mode 100644 index 0000000..d467695 --- /dev/null +++ b/platforms/ios/www/libs/mui/src/react/select.jsx @@ -0,0 +1,389 @@ +/** + * MUI React select module + * @module react/select + */ + +'use strict'; + +import React from 'react'; + +import * as formlib from '../js/lib/forms'; +import * as jqLite from '../js/lib/jqLite'; +import * as util from '../js/lib/util'; +import { controlledMessage } from './_helpers'; + + +const PropTypes = React.PropTypes; + + +/** + * Select constructor + * @class + */ +class Select extends React.Component { + constructor(props) { + super(props); + + // warn if value defined but onChange is not + if (props.readOnly === false && + props.value !== undefined && + props.onChange === null) { + util.raiseError(controlledMessage, true); + } + + this.state.value = props.value; + + // bind callback function + let cb = util.callback; + this.hideMenuCB = cb(this, 'hideMenu'); + this.onInnerChangeCB = cb(this, 'onInnerChange'); + this.onInnerClickCB = cb(this, 'onInnerClick'); + this.onInnerFocusCB = cb(this, 'onInnerFocus'); + this.onInnerMouseDownCB = cb(this, 'onInnerMouseDown'); + this.onKeydownCB = cb(this, 'onKeydown'); + this.onMenuChangeCB = cb(this, 'onMenuChange'); + this.onOuterFocusCB = cb(this, 'onOuterFocus'); + this.onOuterBlurCB = cb(this, 'onOuterBlur'); + } + + state = { + showMenu: false + }; + + static propTypes = { + name: PropTypes.string, + value: PropTypes.string, + defaultValue: PropTypes.string, + autoFocus: PropTypes.bool, + disabled: PropTypes.bool, + multiple: PropTypes.bool, + readOnly: PropTypes.bool, + required: PropTypes.bool, + useDefault: PropTypes.bool, + onChange: PropTypes.func + }; + + static defaultProps = { + className: '', + name: null, + autoFocus: false, + disabled: false, + multiple: false, + readOnly: false, + required: false, + useDefault: false, + onChange: null + }; + + componentDidMount() { + // disable MUI js + this.refs.selectEl._muiSelect = true; + + // make wrapper element focusable (to enable Firefox bugfix) + this.refs.wrapperEl.tabIndex = -1; + + // handle autofocus + if (this.props.autoFocus) this.refs.wrapperEl.focus(); + } + + componentWillReceiveProps(nextProps) { + this.setState({value: nextProps.value}); + } + + onInnerMouseDown(ev) { + if (ev.button !== 0 || this.props.useDefault === true) return; + ev.preventDefault(); + } + + onInnerChange(ev) { + let value = ev.target.value; + this.setState({ value }); + + let fn = this.props.onChange; + if (fn) fn(value); + } + + onInnerClick(ev) { + if (ev.button !== 0) return; // only left clicks + this.showMenu(); + } + + onInnerFocus(ev) { + // check flag + if (this.props.useDefault === true) return; + + // defer focus to parent + setTimeout(() => {this.refs.wrapperEl.focus();}, 0); + } + + onOuterFocus(ev) { + // ignore focus on inner element (react artifact) + if (ev.target !== this.refs.wrapperEl) return; + + // disable tabfocus on inner element + var selectEl = this.refs.selectEl; + selectEl._muiOrigIndex = selectEl.tabIndex; + selectEl.tabIndex = -1; + + // firefox bugfix + if (selectEl.disabled) return this.refs.wrapperEl.blur(); + + // attach keydown handler + jqLite.on(document, 'keydown', this.onKeydownCB); + } + + onOuterBlur(ev) { + // ignore blur on inner element + if (ev.target !== this.refs.wrapperEl) return; + + // restore tab focus on inner element + let selectEl = this.refs.selectEl; + selectEl.tabIndex = selectEl._muiOrigIndex; + + // remove keydown handler + jqLite.off(document, 'keydown', this.onKeydownCB); + } + + onKeydown(ev) { + // spacebar, down, up + if (ev.keyCode === 32 || ev.keyCode === 38 || ev.keyCode === 40) { + // prevent win scroll + ev.preventDefault(); + + if (this.refs.selectEl.disabled !== true) this.showMenu(); + } + } + + showMenu() { + // check useDefault flag + if (this.props.useDefault === true) return; + + // add scroll lock + util.enableScrollLock(); + + // add event listeners + jqLite.on(window, 'resize', this.hideMenuCB); + jqLite.on(document, 'click', this.hideMenuCB); + + // re-draw + this.setState({showMenu: true}); + } + + hideMenu() { + // remove scroll lock + util.disableScrollLock(); + + // remove event listeners + jqLite.off(window, 'resize', this.hideMenuCB); + jqLite.off(document, 'click', this.hideMenuCB); + + // re-draw + this.setState({showMenu: false}); + + // refocus + this.refs.selectEl.focus(); + } + + onMenuChange(value) { + if (this.props.readOnly === true) return; + + this.setState({ value }); + + // execute onChange method + let fn = this.props.onChange; + if (fn) fn(value); + } + + render() { + let menuElem; + + if (this.state.showMenu) { + menuElem = ( + + ); + } + + let { children, onChange, ...other } = this.props; + + return ( +
              + + {menuElem} +
              + ); + } +} + + +/** + * Menu constructor + * @class + */ +class Menu extends React.Component { + constructor(props) { + super(props); + + this.onKeydownCB = util.callback(this, 'onKeydown'); + } + + state = { + origIndex: null, + currentIndex: null + }; + + static defaultProps = { + optionEls: [], + wrapperEl: null, + onChange: null, + onClose: null + }; + + componentWillMount() { + let optionEls = this.props.optionEls, + m = optionEls.length, + selectedPos = 0, + i; + + // get current selected position + for (i=m - 1; i > -1; i--) if (optionEls[i].selected) selectedPos = i; + this.setState({origIndex: selectedPos, currentIndex: selectedPos}); + } + + componentDidMount() { + // blur active element (IE10 bugfix) + this.blurTimer = setTimeout(function() { + let el = document.activeElement; + if (el.nodeName.toLowerCase() !== 'body') el.blur(); + }, 0); + + // set position + let props = formlib.getMenuPositionalCSS( + this.props.wrapperEl, + this.props.optionEls.length, + this.state.currentIndex + ); + + let el = this.refs.wrapperEl; + jqLite.css(el, props); + jqLite.scrollTop(el, props.scrollTop); + + // attach keydown handler + jqLite.on(document, 'keydown', this.onKeydownCB); + } + + componentWillUnmount() { + // clear timer + clearTimeout(this.blurTimer); + + // remove keydown handler + jqLite.off(document, 'keydown', this.onKeydownCB); + } + + onClick(pos, ev) { + // don't allow events to bubble + ev.stopPropagation(); + this.selectAndDestroy(pos); + } + + onKeydown(ev) { + let keyCode = ev.keyCode; + + // tab + if (keyCode === 9) return this.destroy(); + + // escape | up | down | enter + if (keyCode === 27 || keyCode === 40 || keyCode === 38 || keyCode === 13) { + ev.preventDefault(); + } + + if (keyCode === 27) this.destroy(); + else if (keyCode === 40) this.increment(); + else if (keyCode === 38) this.decrement(); + else if (keyCode === 13) this.selectAndDestroy(); + } + + increment() { + if (this.state.currentIndex === this.props.optionEls.length - 1) { + return; + } + + this.setState({currentIndex: this.state.currentIndex + 1}); + } + + decrement() { + if (this.state.currentIndex === 0) return; + this.setState({currentIndex: this.state.currentIndex - 1}); + } + + selectAndDestroy(pos) { + pos = (pos === undefined) ? this.state.currentIndex : pos; + + // handle onChange + if (pos !== this.state.origIndex) { + this.props.onChange(this.props.optionEls[pos].value); + } + + // close menu + this.destroy(); + } + + destroy() { + this.props.onClose(); + } + + render() { + let menuItems = [], + optionEls = this.props.optionEls, + m = optionEls.length, + optionEl, + cls, + i; + + // define menu items + for (i=0; i < m; i++) { + cls = (i === this.state.currentIndex) ? 'mui--is-selected' : ''; + + menuItems.push( +
              + {optionEls[i].textContent} +
              + ); + } + + return
              {menuItems}
              ; + } +} + + +/** Define module API */ +export default Select; diff --git a/platforms/ios/www/libs/mui/src/react/tab.jsx b/platforms/ios/www/libs/mui/src/react/tab.jsx new file mode 100644 index 0000000..73b7c4b --- /dev/null +++ b/platforms/ios/www/libs/mui/src/react/tab.jsx @@ -0,0 +1,40 @@ +/** + * MUI React tabs module + * @module react/tabs + */ +/* jshint quotmark:false */ +// jscs:disable validateQuoteMarks + +'use strict'; + +import React from 'react'; + + +const PropTypes = React.PropTypes; + + +/** + * Tab constructor + * @class + */ +class Tab extends React.Component { + static propTypes = { + value: PropTypes.any, + label: PropTypes.string, + onActive: PropTypes.func + }; + + static defaultProps = { + value: null, + label: '', + onActive: null + }; + + render() { + return null; + }; +} + + +/** Define module API */ +export default Tab; diff --git a/platforms/ios/www/libs/mui/src/react/tabs.jsx b/platforms/ios/www/libs/mui/src/react/tabs.jsx new file mode 100644 index 0000000..aa00ae5 --- /dev/null +++ b/platforms/ios/www/libs/mui/src/react/tabs.jsx @@ -0,0 +1,116 @@ +/** + * MUI React tabs module + * @module react/tabs + */ +/* jshint quotmark:false */ +// jscs:disable validateQuoteMarks + +'use strict'; + +import React from 'react'; + +import Tab from './tab'; +import * as util from '../js/lib/util'; + + +const PropTypes = React.PropTypes, + tabsBarClass = 'mui-tabs__bar', + tabsBarJustifiedClass = 'mui-tabs__bar--justified', + tabsPaneClass = 'mui-tabs__pane', + isActiveClass = 'mui--is-active'; + + +/** + * Tabs constructor + * @class + */ +class Tabs extends React.Component { + constructor(props) { + super(props); + this.state = {currentSelectedIndex: props.initialSelectedIndex}; + } + + static propTypes = { + initialSelectedIndex: PropTypes.number, + justified: PropTypes.bool, + onChange: PropTypes.func + }; + + static defaultProps = { + className: '', + initialSelectedIndex: 0, + justified: false, + onChange: null + }; + + onClick(i, tab, ev) { + if (i !== this.state.currentSelectedIndex) { + this.setState({currentSelectedIndex: i}); + + // onActive callback + if (tab.props.onActive) tab.props.onActive(tab); + + // onChange callback + if (this.props.onChange) { + this.props.onChange(i, tab.props.value, tab, ev); + } + } + } + + render() { + let { children, ...other } = this.props; + + let tabEls = [], + paneEls = [], + m = children.length, + selectedIndex = this.state.currentSelectedIndex % m, + isActive, + item, + cls, + i; + + for (i=0; i < m; i++) { + item = children[i]; + + // only accept MUITab elements + if (item.type !== Tab) util.raiseError('Expecting MUITab React Element'); + + isActive = (i === selectedIndex) ? true : false; + + // tab element + tabEls.push( +
            • + + {item.props.label} + +
            • + ); + + // pane element + cls = tabsPaneClass + ' '; + if (isActive) cls += isActiveClass; + + paneEls.push( +
              + {item.props.children} +
              + ); + } + + cls = tabsBarClass; + if (this.props.justified) cls += ' ' + tabsBarJustifiedClass; + + return ( +
              +
                + {tabEls} +
              + {paneEls} +
              + ); + } +} + + +/** Define module API */ +export default Tabs; diff --git a/platforms/ios/www/libs/mui/src/react/text-field.jsx b/platforms/ios/www/libs/mui/src/react/text-field.jsx new file mode 100644 index 0000000..c20b8ea --- /dev/null +++ b/platforms/ios/www/libs/mui/src/react/text-field.jsx @@ -0,0 +1,239 @@ +/** + * MUI React TextInput Component + * @module react/text-input + */ + +'use strict'; + +import React from 'react'; + +import * as util from '../js/lib/util'; +import { controlledMessage } from './_helpers'; + + +const PropTypes = React.PropTypes; + + +/** + * Input constructor + * @class + */ +class Input extends React.Component { + constructor(props) { + super(props); + + let value = props.value; + let innerValue = value || props.defaultValue; + + this.state = { + innerValue: innerValue, + isDirty: Boolean(innerValue) + }; + + // warn if value defined but onChange is not + if (value !== undefined && props.onChange === null) { + util.raiseError(controlledMessage, true); + } + + let cb = util.callback; + this.onChangeCB = cb(this, 'onChange'); + this.onFocusCB = cb(this, 'onFocus'); + } + + static propTypes = { + hint: PropTypes.string, + value: PropTypes.string, + type: PropTypes.string, + autoFocus: PropTypes.bool, + onChange: PropTypes.func + }; + + static defaultProps = { + hint: null, + type: null, + autoFocus: false, + onChange: null + }; + + componentDidMount() { + // disable MUI js + this.refs.inputEl._muiTextfield = true; + } + + onChange(ev) { + this.setState({innerValue: ev.target.value}); + + let fn = this.props.onChange; + if (fn) fn(ev); + } + + onFocus(ev) { + this.setState({isDirty: true}); + } + + triggerFocus() { + // hack to enable IE10 pointer-events shim + this.refs.inputEl.focus(); + } + + render() { + let cls = {}, + isNotEmpty = Boolean(this.state.innerValue), + inputEl; + + cls['mui--is-empty'] = !isNotEmpty; + cls['mui--is-not-empty'] = isNotEmpty; + cls['mui--is-dirty'] = this.state.isDirty; + cls['mui--is-invalid'] = this.props.invalid; + + cls = util.classNames(cls); + + let { children, ...other } = this.props; + + if (this.props.type === 'textarea') { + inputEl = ( + "; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; +} )(); + +return support; + +} ); diff --git a/www/libs/jquery/src/manipulation/var/nodeNames.js b/www/libs/jquery/src/manipulation/var/nodeNames.js new file mode 100644 index 0000000..05bb604 --- /dev/null +++ b/www/libs/jquery/src/manipulation/var/nodeNames.js @@ -0,0 +1,5 @@ +define( function() { + return "abbr|article|aside|audio|bdi|canvas|data|datalist|" + + "details|dialog|figcaption|figure|footer|header|hgroup|main|" + + "mark|meter|nav|output|picture|progress|section|summary|template|time|video"; +} ); diff --git a/www/libs/jquery/src/manipulation/var/rcheckableType.js b/www/libs/jquery/src/manipulation/var/rcheckableType.js new file mode 100644 index 0000000..4c95394 --- /dev/null +++ b/www/libs/jquery/src/manipulation/var/rcheckableType.js @@ -0,0 +1,3 @@ +define( function() { + return ( /^(?:checkbox|radio)$/i ); +} ); diff --git a/www/libs/jquery/src/manipulation/var/rleadingWhitespace.js b/www/libs/jquery/src/manipulation/var/rleadingWhitespace.js new file mode 100644 index 0000000..96ef95f --- /dev/null +++ b/www/libs/jquery/src/manipulation/var/rleadingWhitespace.js @@ -0,0 +1,3 @@ +define( function() { + return ( /^\s+/ ); +} ); diff --git a/www/libs/jquery/src/manipulation/var/rscriptType.js b/www/libs/jquery/src/manipulation/var/rscriptType.js new file mode 100644 index 0000000..0c77c8a --- /dev/null +++ b/www/libs/jquery/src/manipulation/var/rscriptType.js @@ -0,0 +1,3 @@ +define( function() { + return ( /^$|\/(?:java|ecma)script/i ); +} ); diff --git a/www/libs/jquery/src/manipulation/var/rtagName.js b/www/libs/jquery/src/manipulation/var/rtagName.js new file mode 100644 index 0000000..9e54269 --- /dev/null +++ b/www/libs/jquery/src/manipulation/var/rtagName.js @@ -0,0 +1,3 @@ +define( function() { + return ( /<([\w:-]+)/ ); +} ); diff --git a/www/libs/jquery/src/manipulation/wrapMap.js b/www/libs/jquery/src/manipulation/wrapMap.js new file mode 100644 index 0000000..fdb430a --- /dev/null +++ b/www/libs/jquery/src/manipulation/wrapMap.js @@ -0,0 +1,27 @@ +define( function() { + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // Support: IE9 + option: [ 1, "" ], + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
              " ], + col: [ 2, "", "
              " ], + tr: [ 2, "", "
              " ], + td: [ 3, "", "
              " ], + + _default: [ 0, "", "" ] +}; + +// Support: IE9 +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +return wrapMap; +} ); diff --git a/www/libs/jquery/src/offset.js b/www/libs/jquery/src/offset.js new file mode 100644 index 0000000..08a4543 --- /dev/null +++ b/www/libs/jquery/src/offset.js @@ -0,0 +1,218 @@ +define( [ + "./core", + "./core/access", + "./var/document", + "./var/documentElement", + "./css/var/rnumnonpx", + "./css/curCSS", + "./css/addGetHookIf", + "./css/support", + + "./core/init", + "./css", + "./selector" // contains +], function( jQuery, access, document, documentElement, rnumnonpx, curCSS, addGetHookIf, support ) { + +/** + * 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 ) ) { + + // Use jQuery.extend here to allow modification of coordinates argument (gh-1848) + options = options.call( elem, i, jQuery.extend( {}, 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; + } + + 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" ) { + + // Assume getBoundingClientRect is there 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 ) + }; + }, + + // This method will return documentElement in the following cases: + // 1) For the element inside the iframe without offsetParent, this method will return + // documentElement of the parent window + // 2) For the hidden or detached element + // 3) For body or html element, i.e. in case of the html node - it will return itself + // + // but those exceptions were never presented as a real life use-cases + // and might be considered as more preferable results. + // + // This logic, however, is not guaranteed and can change at any point in the future + offsetParent: function() { + return this.map( function() { + var offsetParent = this.offsetParent; + + while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) { + offsetParent = offsetParent.offsetParent; + } + + return offsetParent || documentElement; + } ); + } +} ); + +// 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 : win.pageXOffset, + top ? val : win.pageYOffset + ); + + } else { + elem[ method ] = val; + } + }, method, val, arguments.length ); + }; +} ); + +// Support: Safari<7-8+, Chrome<37-44+ +// Add the top/left cssHooks using jQuery.fn.position +// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 +// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280 +// getComputedStyle returns percent when specified for top/left/bottom/right; +// rather than make the css module depend on the offset module, 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/www/libs/jquery/src/outro.js b/www/libs/jquery/src/outro.js new file mode 100644 index 0000000..d792ffb --- /dev/null +++ b/www/libs/jquery/src/outro.js @@ -0,0 +1,2 @@ +return jQuery; +})); diff --git a/www/libs/jquery/src/queue.js b/www/libs/jquery/src/queue.js new file mode 100644 index 0000000..813c41c --- /dev/null +++ b/www/libs/jquery/src/queue.js @@ -0,0 +1,143 @@ +define( [ + "./core", + "./data/var/dataPriv", + "./deferred", + "./callbacks" +], function( jQuery, dataPriv ) { + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray( data ) ) { + queue = dataPriv.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 public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.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 = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); + +return jQuery; +} ); diff --git a/www/libs/jquery/src/queue/delay.js b/www/libs/jquery/src/queue/delay.js new file mode 100644 index 0000000..8d5844d --- /dev/null +++ b/www/libs/jquery/src/queue/delay.js @@ -0,0 +1,22 @@ +define( [ + "../core", + "../queue", + "../effects" // Delay is optional because of this dependency +], function( jQuery ) { + +// Based off of the plugin by Clint Helfers, with permission. +// http://web.archive.org/web/20100324014747/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 = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + +return jQuery.fn.delay; +} ); diff --git a/www/libs/jquery/src/selector-native.js b/www/libs/jquery/src/selector-native.js new file mode 100644 index 0000000..ee81483 --- /dev/null +++ b/www/libs/jquery/src/selector-native.js @@ -0,0 +1,211 @@ +define( [ + "./core", + "./var/document", + "./var/documentElement", + "./var/hasOwn", + "./var/indexOf" +], function( jQuery, document, documentElement, hasOwn, indexOf ) { + +/* + * 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 hasDuplicate, sortInput, + sortStable = jQuery.expando.split( "" ).sort( sortOrder ).join( "" ) === jQuery.expando, + matches = documentElement.matches || + documentElement.webkitMatchesSelector || + documentElement.mozMatchesSelector || + documentElement.oMatchesSelector || + documentElement.msMatchesSelector; + +function sortOrder( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 ) { + + // Choose the first element that is related to our preferred document + if ( a === document || a.ownerDocument === document && + jQuery.contains( document, a ) ) { + return -1; + } + if ( b === document || b.ownerDocument === document && + jQuery.contains( document, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; +} + +function uniqueSort( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + hasDuplicate = false; + sortInput = !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 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +} + +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; + }, + uniqueSort: uniqueSort, + unique: uniqueSort, + 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 ) { + + // 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; + }, + expr: { + attrHandle: {}, + match: { + bool: new RegExp( "^(?: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 ) { + var fn = jQuery.expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (jQuery #13807) + value = fn && hasOwn.call( jQuery.expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, jQuery.isXMLDoc( elem ) ) : + undefined; + return value !== undefined ? value : elem.getAttribute( name ); + } +} ); + +} ); diff --git a/www/libs/jquery/src/selector-sizzle.js b/www/libs/jquery/src/selector-sizzle.js new file mode 100644 index 0000000..9728a1f --- /dev/null +++ b/www/libs/jquery/src/selector-sizzle.js @@ -0,0 +1,14 @@ +define( [ + "./core", + "../external/sizzle/dist/sizzle" +], function( jQuery, Sizzle ) { + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + +} ); diff --git a/www/libs/jquery/src/selector.js b/www/libs/jquery/src/selector.js new file mode 100644 index 0000000..e13f585 --- /dev/null +++ b/www/libs/jquery/src/selector.js @@ -0,0 +1 @@ +define( [ "./selector-sizzle" ], function() {} ); diff --git a/www/libs/jquery/src/serialize.js b/www/libs/jquery/src/serialize.js new file mode 100644 index 0000000..94698fc --- /dev/null +++ b/www/libs/jquery/src/serialize.js @@ -0,0 +1,125 @@ +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" && v != null ? 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/www/libs/jquery/src/support.js b/www/libs/jquery/src/support.js new file mode 100644 index 0000000..71ac60f --- /dev/null +++ b/www/libs/jquery/src/support.js @@ -0,0 +1,63 @@ +define( [ + "./core", + "./var/support", + "./var/document", + "./core/init", // Needed for hasOwn support test + // This is listed as a dependency for build order, but it's still optional in builds + "./core/ready" +], function( jQuery, support, document ) { + +// Support: IE<9 +// Iteration over object's inherited properties before its own +var i; +for ( i in jQuery( support ) ) { + break; +} +support.ownFirst = i === "0"; + +// Note: most support tests are defined in their respective modules. +// false until the test is run +support.inlineBlockNeedsLayout = false; + +// Execute ASAP in case we need to set body.style.zoom +jQuery( function() { + + // Minified: var a,b,c,d + var val, div, body, container; + + body = document.getElementsByTagName( "body" )[ 0 ]; + if ( !body || !body.style ) { + + // Return for frameset docs that don't have a body + return; + } + + // Setup + div = document.createElement( "div" ); + container = document.createElement( "div" ); + container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px"; + body.appendChild( container ).appendChild( div ); + + if ( typeof div.style.zoom !== "undefined" ) { + + // 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.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1"; + + support.inlineBlockNeedsLayout = val = div.offsetWidth === 3; + if ( val ) { + + // 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 ); +} ); + +return support; +} ); diff --git a/www/libs/jquery/src/traversing.js b/www/libs/jquery/src/traversing.js new file mode 100644 index 0000000..0d4c1c4 --- /dev/null +++ b/www/libs/jquery/src/traversing.js @@ -0,0 +1,175 @@ +define( [ + "./core", + "./var/indexOf", + "./traversing/var/dir", + "./traversing/var/siblings", + "./traversing/var/rneedsContext", + "./core/init", + "./traversing/findFilter", + "./selector" +], function( jQuery, indexOf, dir, siblings, 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.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.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + 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.uniqueSort( + 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 dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( 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.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); + +return jQuery; +} ); diff --git a/www/libs/jquery/src/traversing/findFilter.js b/www/libs/jquery/src/traversing/findFilter.js new file mode 100644 index 0000000..7d4b2ca --- /dev/null +++ b/www/libs/jquery/src/traversing/findFilter.js @@ -0,0 +1,100 @@ +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 ) > -1 ) !== 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/www/libs/jquery/src/traversing/var/dir.js b/www/libs/jquery/src/traversing/var/dir.js new file mode 100644 index 0000000..b98fdca --- /dev/null +++ b/www/libs/jquery/src/traversing/var/dir.js @@ -0,0 +1,20 @@ +define( [ + "../../core" +], function( jQuery ) { + +return 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; +}; + +} ); diff --git a/www/libs/jquery/src/traversing/var/rneedsContext.js b/www/libs/jquery/src/traversing/var/rneedsContext.js new file mode 100644 index 0000000..f57fd9d --- /dev/null +++ b/www/libs/jquery/src/traversing/var/rneedsContext.js @@ -0,0 +1,6 @@ +define( [ + "../../core", + "../../selector" +], function( jQuery ) { + return jQuery.expr.match.needsContext; +} ); diff --git a/www/libs/jquery/src/traversing/var/siblings.js b/www/libs/jquery/src/traversing/var/siblings.js new file mode 100644 index 0000000..8a8880b --- /dev/null +++ b/www/libs/jquery/src/traversing/var/siblings.js @@ -0,0 +1,15 @@ +define( function() { + +return function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + +} ); diff --git a/www/libs/jquery/src/var/arr.js b/www/libs/jquery/src/var/arr.js new file mode 100644 index 0000000..3fd3640 --- /dev/null +++ b/www/libs/jquery/src/var/arr.js @@ -0,0 +1,3 @@ +define( function() { + return []; +} ); diff --git a/www/libs/jquery/src/var/class2type.js b/www/libs/jquery/src/var/class2type.js new file mode 100644 index 0000000..3a6932e --- /dev/null +++ b/www/libs/jquery/src/var/class2type.js @@ -0,0 +1,5 @@ +define( function() { + + // [[Class]] -> type pairs + return {}; +} ); diff --git a/www/libs/jquery/src/var/concat.js b/www/libs/jquery/src/var/concat.js new file mode 100644 index 0000000..9787bea --- /dev/null +++ b/www/libs/jquery/src/var/concat.js @@ -0,0 +1,5 @@ +define( [ + "./arr" +], function( arr ) { + return arr.concat; +} ); diff --git a/www/libs/jquery/src/var/deletedIds.js b/www/libs/jquery/src/var/deletedIds.js new file mode 100644 index 0000000..3fd3640 --- /dev/null +++ b/www/libs/jquery/src/var/deletedIds.js @@ -0,0 +1,3 @@ +define( function() { + return []; +} ); diff --git a/www/libs/jquery/src/var/document.js b/www/libs/jquery/src/var/document.js new file mode 100644 index 0000000..bb94284 --- /dev/null +++ b/www/libs/jquery/src/var/document.js @@ -0,0 +1,3 @@ +define( function() { + return window.document; +} ); diff --git a/www/libs/jquery/src/var/documentElement.js b/www/libs/jquery/src/var/documentElement.js new file mode 100644 index 0000000..e0c0aea --- /dev/null +++ b/www/libs/jquery/src/var/documentElement.js @@ -0,0 +1,5 @@ +define( [ + "./document" +], function( document ) { + return document.documentElement; +} ); diff --git a/www/libs/jquery/src/var/hasOwn.js b/www/libs/jquery/src/var/hasOwn.js new file mode 100644 index 0000000..92f323e --- /dev/null +++ b/www/libs/jquery/src/var/hasOwn.js @@ -0,0 +1,5 @@ +define( [ + "./class2type" +], function( class2type ) { + return class2type.hasOwnProperty; +} ); diff --git a/www/libs/jquery/src/var/indexOf.js b/www/libs/jquery/src/var/indexOf.js new file mode 100644 index 0000000..5283841 --- /dev/null +++ b/www/libs/jquery/src/var/indexOf.js @@ -0,0 +1,5 @@ +define( [ + "./arr" +], function( arr ) { + return arr.indexOf; +} ); diff --git a/www/libs/jquery/src/var/pnum.js b/www/libs/jquery/src/var/pnum.js new file mode 100644 index 0000000..7fd9f66 --- /dev/null +++ b/www/libs/jquery/src/var/pnum.js @@ -0,0 +1,3 @@ +define( function() { + return ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; +} ); diff --git a/www/libs/jquery/src/var/push.js b/www/libs/jquery/src/var/push.js new file mode 100644 index 0000000..bca1a58 --- /dev/null +++ b/www/libs/jquery/src/var/push.js @@ -0,0 +1,5 @@ +define( [ + "./arr" +], function( arr ) { + return arr.push; +} ); diff --git a/www/libs/jquery/src/var/rcssNum.js b/www/libs/jquery/src/var/rcssNum.js new file mode 100644 index 0000000..408f5e2 --- /dev/null +++ b/www/libs/jquery/src/var/rcssNum.js @@ -0,0 +1,7 @@ +define( [ + "../var/pnum" +], function( pnum ) { + +return new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + +} ); diff --git a/www/libs/jquery/src/var/rnotwhite.js b/www/libs/jquery/src/var/rnotwhite.js new file mode 100644 index 0000000..6067728 --- /dev/null +++ b/www/libs/jquery/src/var/rnotwhite.js @@ -0,0 +1,3 @@ +define( function() { + return ( /\S+/g ); +} ); diff --git a/www/libs/jquery/src/var/slice.js b/www/libs/jquery/src/var/slice.js new file mode 100644 index 0000000..d8206d3 --- /dev/null +++ b/www/libs/jquery/src/var/slice.js @@ -0,0 +1,5 @@ +define( [ + "./arr" +], function( arr ) { + return arr.slice; +} ); diff --git a/www/libs/jquery/src/var/support.js b/www/libs/jquery/src/var/support.js new file mode 100644 index 0000000..3db9b67 --- /dev/null +++ b/www/libs/jquery/src/var/support.js @@ -0,0 +1,5 @@ +define( function() { + + // All support tests are defined in their respective modules. + return {}; +} ); diff --git a/www/libs/jquery/src/var/toString.js b/www/libs/jquery/src/var/toString.js new file mode 100644 index 0000000..80ac7f1 --- /dev/null +++ b/www/libs/jquery/src/var/toString.js @@ -0,0 +1,5 @@ +define( [ + "./class2type" +], function( class2type ) { + return class2type.toString; +} ); diff --git a/www/libs/jquery/src/wrap.js b/www/libs/jquery/src/wrap.js new file mode 100644 index 0000000..4d2c3b2 --- /dev/null +++ b/www/libs/jquery/src/wrap.js @@ -0,0 +1,79 @@ +define( [ + "./core", + "./core/init", + "./manipulation", // clone + "./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/www/libs/mui/.bower.json b/www/libs/mui/.bower.json new file mode 100644 index 0000000..f041e78 --- /dev/null +++ b/www/libs/mui/.bower.json @@ -0,0 +1,50 @@ +{ + "name": "mui", + "version": "0.5.9", + "license": "MIT", + "authors": [ + "Andres Morey " + ], + "homepage": "https://www.muicss.com", + "description": "MUI is a lightweight HTML/CSS/JS framework that follows Google's Material Design guidelines.", + "main": [ + "src/sass/mui.scss", + "src/sass/mui/_colors.scss", + "src/email/mui-email-inline.scss", + "src/email/mui-email-styletag.scss", + "packages/cdn/css/mui.css", + "packages/cdn/css/mui.min.css", + "packages/cdn/js/mui.js", + "packages/cdn/js/mui.min.js" + ], + "repository": { + "type": "git", + "url": "git://github.com/muicss/mui.git" + }, + "keywords": [ + "material design", + "frontend framework", + "html, css, and js framework", + "email css template" + ], + "dependencies": {}, + "ignore": [ + "**/.*", + "build-targets", + "e2e-tests", + "examples", + "gulpfile.js", + "node_modules", + "package.json", + "test" + ], + "_release": "0.5.9", + "_resolution": { + "type": "version", + "tag": "0.5.9", + "commit": "12b7c78ed3243af477f16aafb553d977628df82f" + }, + "_source": "https://github.com/muicss/mui.git", + "_target": "^0.5.3", + "_originalSource": "mui" +} \ No newline at end of file diff --git a/www/libs/mui/AUTHORS.txt b/www/libs/mui/AUTHORS.txt new file mode 100644 index 0000000..32bc435 --- /dev/null +++ b/www/libs/mui/AUTHORS.txt @@ -0,0 +1,8 @@ +Authors ordered by first contribution. + +Andres Morey +Matt Bogado +Michiel Schriever +HjtHjtHjt +Aron Jones +Tushar Pokle \ No newline at end of file diff --git a/www/libs/mui/CHANGELOG.md b/www/libs/mui/CHANGELOG.md new file mode 100644 index 0000000..1eef2eb --- /dev/null +++ b/www/libs/mui/CHANGELOG.md @@ -0,0 +1,382 @@ +# MUI Changelog + +## 0.5.9 - May 17, 2016 + +* Set z-index of .mui-select__menu to 2 to fix overlap bug with floating action + buttons + +## 0.5.8 - May 6, 2016 + +* Added react@^15.0.0 as peerDependency in NPM package.json + +## 0.5.7 - May 5, 2016 + +* Fixed Angular injector minification bug in MUI Tabs + +## 0.5.6 - April 28, 2016 + +* Bugfix to Email SASS semantic markup +* Handling timeouts gracefully in React componentWillUnmount + +## 0.5.5 - April 26, 2016 + +* Using ES6 for Angular source code +* Added MUI Angular to NPM package + +## 0.5.4 - April 22, 2016 + +* Added support for `target` attribute to React DropdownItem + +## 0.5.3 - April 16, 2016 + +* Added support for Angular Tabs directive +* Fixed focus bug with Angular Select directive + +## 0.5.2 - April 14, 2016 + +* Added support for React 15.0.1 + +## 0.5.1 - April 12, 2016 + +* Fixed bug causing onChange to be called twice on React and + +## 0.5.0 - April 7, 2016 + +* Major upgrade to Angular library - fixed many bugs and added missing features + +## 0.4.9 - April 6, 2016 + +* Fixed bug in React Dropdown that prevented menu from closing when a + DropdownItem was selected +* Fixed bug in React Dropdown that fired onClick event on DropdownItem twice +* Added support for onSelect event to React Dropdown +* Added support for React elements to React Dropdown label + +## 0.4.8 - March 30, 2016 + +* Fixed bug that kept dropdowns open when other dropdowns were clicked on + +## 0.4.7 - March 1, 2016 + +* Added JS `change` eveent handler to mui-textfield input elements +* Improved organization of MUI sass files +* Improved organization of MUI js files + +## 0.4.6 - February 18, 2016 + +* Fixed component name errors in NPM react.js module + +## 0.4.5 - February 12, 2016 + +* Changed React SelectItem component name to Option +* Added controlled controller support to React Select, Checkbox, Radio +* Bugfixes to Angular library + +## 0.4.4 - February 8, 2016 + +* Changed React input component names to Input and Textarea + +## 0.4.3 - February 7, 2016 + +* Added Angular library + +## 0.4.2 - February 3, 2016 + +* Added support for other React attributes and events +* Set default font-family to "Arial, Verdana, Tahoma" for better cross-browser + support out of the box + +## 0.4.1 - February 2, 2016 + +* Added defaultValue and controlled component support to React TextInput and + TextareaInput + +## 0.4.0 - February 2, 2016 + +* Made CSS/JS ripple node removal more robust +* Added value, defaultValue, onChange support to React Select component +* Changed boolean properties to use React built-in names: + * isAutofocus -> autoFocus + * isChecked -> checked + * isDisabled -> disabled + * isRequired -> required +* Changed other boolean properties to use React-like names: + * isFluid -> fluid + * isInline -> inline + * isInvalid -> invalid + * isJustified -> justified + * isLabelFloating -> floatingLabel +* Added support for defaultChecked to React Checkbox and Radio components + +## 0.3.0 + +* Replaced .mui-textfield--invalid with .mui--is-invalid +* Replaced .mui--text-black-{XX}, .mui--text-white-{XX} color helpers with: + * .mui--text-dark + * .mui--text-dark-secondary + * .mui--text-dark-hint + * .mui--text-light + * .mui--text-light-secondary + * .mui--text-light-hint + * .mui--text-accent + * .mui--text-accent-secondary + * .mui--text-accent-hint +* Major non-backwards compatible modifications to React library +* Added .mui--text-black and .mui--text-white +* Added 'xl' screen size and changed default widths for 'sm', 'md' and 'lg' breakpoints + +## 0.2.10 - January 12, 2016 + +* Fixed bug causing mui.overlay('off') to throw error when called before + turning on overlay + +## 0.2.9 - December 7, 2015 + +* Fixed path to js file for `muicss` npm package + +## 0.2.8 - December 3, 2015 + +* Added .mui-textfield--invalid css helper + +## 0.2.7 - December 1, 2015 + +* Replaced .mui--text-black-26 with .mui--text-black-38 to bring CSS color + helpers in line with MD spec + +## 0.2.6 - November 27, 2015 + +* Improves floating label animation by using CSS transform + +## 0.2.5 - November 27, 2015 + +* Added .mui-body--scroll-lock specifically for scroll lock + +## 0.2.4 - November 26, 2015 + +* Uses body class for scroll lock + +## 0.2.3 - November 21, 2015 + +* Upgraded to React 0.14.3 + +## 0.2.2 - November 20, 2015 + +* Improved IE10+ CSS borders for buttons, panels and select menu +* Improved positioning of select menu +* Improved logic of select menu initial scroll position +* Improved window scroll lock + +## 0.2.1 - October 16, 2015 + +* Moved textfield floating label modifier to wrapper class +* Disabled use of .mui-textfield__input and .mui-textfield__label--floating + +## 0.2.0 - October 12, 2015 + +* Added html email example layout + +## 0.2.0-rc3 - October 10, 2015 + +* Changed .mui--notransition to .mui--no-transition +* Added .mui--no-user-select + +## 0.2.0-rc2 - October 8, 2015 + +* Removed color attribute from typography classes +* Added text color helpers +* Migrated colors.css to BEM syntax + +## 0.2.0-rc1 - October 7, 2015 + +* Migrated CSS/JS and Email Libraries to BEM syntax +* Removed internal bootstrap source code dependency +* Removed MUIRoundButton from React library + +## 0.1.23 - September 19, 2015 + +* Added support for data-attributes in Tabs CSS + +## 0.1.22 - September 18, 2015 + +* Added tab events + +## 0.1.22-rc1 - September 3, 2015 + +* Removed unnecessary styles from button CSS +* Using "mui-is-" syntax for stateful CSS (e.g. mui-is-active) +* Added data-attributes syntax for buttons, dropdowns, tables, container +* Added a dark button option +* Changed floating action button naming from "floating" to "fab" + +## 0.1.21 - August 5, 2015 + +* Removed default down arrow on select component on IE + +## 0.1.20 - August 5, 2015 + +* Raising Error objects +* Decreased $mui-container-sm width by 18px to account for vertical scrollbar +* Bugfix to _outsideClick handler in react library +* Using default <select> behavior on touch devices + +## 0.1.19 - July 26, 2015 + +* Bugfix to mui-react-combined.js build script +* Removed styles on bare
              '}}),n["default"]=a,t.exports=n["default"]},{angular:"aeQg5j"}],10:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i=window.angular,r=babelHelpers.interopRequireDefault(i),a="mui.col";r["default"].module(a,[]).directive("muiCol",function(){return{restrict:"AE",scope:!0,replace:!0,template:"
              ",transclude:!0,link:function(e,t,n,i,a){a(e,function(e){t.append(e)});var l={xs:"mui-col-xs-",sm:"mui-col-sm-",md:"mui-col-md-",lg:"mui-col-lg-","xs-offset":"mui-col-xs-offset-","sm-offset":"mui-col-sm-offset-","md-offset":"mui-col-md-offset-","lg-offset":"mui-col-lg-offset-"};r["default"].forEach(l,function(e,i){var r=n[n.$normalize(i)];r&&t.addClass(e+r)})}}}),n["default"]=a,t.exports=n["default"]},{angular:"aeQg5j"}],11:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i=window.angular,r=babelHelpers.interopRequireDefault(i),a="mui.container";r["default"].module(a,[]).directive("muiContainer",function(){return{restrict:"AE",template:'
              ',transclude:!0,scope:!0,replace:!0,link:function(e,t,n,i,a){a(e,function(e){t.append(e)}),r["default"].isUndefined(n.fluid)||t.removeClass("mui-container").addClass("mui-container-fluid")}}}),n["default"]=a,t.exports=n["default"]},{angular:"aeQg5j"}],12:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i=window.angular,r=babelHelpers.interopRequireDefault(i),a="mui.divider";r["default"].module(a,[]).directive("muiDivider",function(){return{restrict:"AE",replace:!0,compile:function(e,t){e.addClass("mui-divider")}}}),n["default"]=a,t.exports=n["default"]},{angular:"aeQg5j"}],13:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i=window.angular,r=babelHelpers.interopRequireDefault(i),a="mui.dropdown-item";r["default"].module(a,[]).directive("muiDropdownItem",function(){return{restrict:"AE",replace:!0,scope:{link:"@"},transclude:!0,template:'
            • '}}),n["default"]=a,t.exports=n["default"]},{angular:"aeQg5j"}],14:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i=window.angular,r=babelHelpers.interopRequireDefault(i),a="mui.dropdown";r["default"].module(a,[]).directive("muiDropdown",["$timeout","$compile",function(e,t){return{restrict:"AE",transclude:!0,replace:!0,scope:{variant:"@",color:"@",size:"@",open:"=?",ngDisabled:"="},template:'
                ',link:function(e,t,n){function i(){e.open=!1,e.$apply()}var a,l,o="mui-dropdown__menu",u="mui--is-open",s="mui-dropdown__menu--right",d=r["default"].isUndefined;a=r["default"].element(t[0].querySelector("."+o)),l=r["default"].element(t[0].querySelector(".mui-btn")),a.css("margin-top","-3px"),d(n.open)||(e.open=!0),d(n.disabled)||l.attr("disabled",!0),d(n.rightAlign)||a.addClass(s),d(n.noCaret)?l.html(n.label+" "):l.html(n.label),e.$watch("open",function(e){e===!0?(a.addClass(u),document.addEventListener("click",i)):e===!1&&(a.removeClass(u),document.removeEventListener("click",i))}),e.onClick=function(t){e.disabled||(t.preventDefault(),t.stopPropagation(),e.open?e.open=!1:e.open=!0)}}}}]),n["default"]=a,t.exports=n["default"]},{angular:"aeQg5j"}],15:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i=window.angular,r=babelHelpers.interopRequireDefault(i),a="mui.form";r["default"].module(a,[]).directive("muiFormInline",function(){return{restrict:"A",link:function(e,t,n){t.addClass("mui-form--inline")}}}),n["default"]=a,t.exports=n["default"]},{angular:"aeQg5j"}],16:[function(e,t,n){"use strict";function i(e,t){t?e.removeClass(u).addClass(s):e.removeClass(s).addClass(u)}function r(e){var t,n,r="mui--is-dirty";return t={floatLabel:"@",hint:"@",label:"@",ngDisabled:"=",ngModel:"="},n='
                ',e?(t.rows="@",n+=''):(t.type="@",n+=''),n+="
                ",["$timeout",function(a){return{restrict:"AE",require:["ngModel"],scope:t,replace:!0,template:n,link:function(t,n,o,u){var s=n.find("input")||n.find("textarea"),d=n.find("label"),c=u[0],f=(u[1],l["default"].isUndefined),p=s[0];p&&(p._muiTextfield=!0),n.removeAttr("ng-change"),n.removeAttr("ng-model"),e?t.rows=t.rows||2:t.type=t.type||"text",f(o.autofocus)||s[0].focus(),f(o.required)||s.prop("required",!0),f(o.invalid)||s.addClass("mui--is-invalid"),i(s,t.ngModel),f(t.floatLabel)||(n.addClass("mui-textfield--float-label"),a(function(){d.css({transition:".15s ease-out","-webkit-transition":".15s ease-out","-moz-transition":".15s ease-out","-o-transition":".15s ease-out","-ms-transition":".15s ease-out"})},150)),t.onChange=function(){var e=t.ngModel;c&&c.$setViewValue(e),i(s,e),s.addClass(r)},t.onFocus=function(){s.addClass(r)}}}}]}Object.defineProperty(n,"__esModule",{value:!0});var a=window.angular,l=babelHelpers.interopRequireDefault(a),o="mui.input",u="mui--is-empty",s="mui--is-not-empty";l["default"].module(o,[]).directive("muiInput",r(!1)).directive("muiTextarea",r(!0)),n["default"]=o,t.exports=n["default"]},{angular:"aeQg5j"}],17:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i=window.angular,r=babelHelpers.interopRequireDefault(i),a="mui.panel";r["default"].module(a,[]).directive("muiPanel",function(){return{restrict:"AE",replace:!0,scope:!0,template:'
                ',transclude:!0,link:function(e,t,n,i,r){r(e,function(e){t.append(e)})}}}),n["default"]=a,t.exports=n["default"]},{angular:"aeQg5j"}],18:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i=window.angular,r=babelHelpers.interopRequireDefault(i),a="mui.radio";r["default"].module(a,[]).directive("muiRadio",function(){return{restrict:"AE",replace:!0,require:["?ngModel"],scope:{label:"@",name:"@",value:"@",ngModel:"=",ngDisabled:"="},template:'
                '}}),n["default"]=a,t.exports=n["default"]},{angular:"aeQg5j"}],19:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i=window.angular,r=babelHelpers.interopRequireDefault(i),a="mui.row";r["default"].module("mui.row",[]).directive("muiRow",function(){return{restrict:"AE",scope:!0,replace:!0,template:'
                ',transclude:!0,link:function(e,t,n,i,r){r(e,function(e){t.append(e)})}}}),n["default"]=a,t.exports=n["default"]},{angular:"aeQg5j"}],20:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i=window.angular,r=babelHelpers.interopRequireDefault(i),a=e("../js/lib/forms"),l=babelHelpers.interopRequireWildcard(a),o=e("../js/lib/util"),u=babelHelpers.interopRequireWildcard(o),s=e("../js/lib/jqLite"),d=babelHelpers.interopRequireWildcard(s),c="mui.select";r["default"].module(c,[]).directive("muiSelect",["$timeout",function(e){return{restrict:"AE",require:["ngModel"],scope:{name:"@",ngDisabled:"=",ngModel:"="},replace:!0,transclude:!0,template:'
                {{option.label}}
                ',link:function(t,n,i,a,o){function s(){t.isOpen=!1,t.$digest()}var c=n,f=n.find("div"),p=n.find("select"),m=r["default"].isUndefined;p[0]._muiSelect=!0,t.options=[],t.isOpen=!1,t.useDefault=!1,t.origTabIndex=p[0].tabIndex,t.menuIndex=0,m(i.useDefault)||(t.useDefault=!0),c.prop("tabIndex",-1),o(function(e){var n,i;for(i in e)n=e[i],"MUI-OPTION"===n.tagName&&t.options.push({value:n.getAttribute("value"),label:n.getAttribute("label")})}),t.onClick=function(){t.useDefault!==!0&&(t.isOpen=!0,c[0].focus())},t.onFocus=function(){if(t.useDefault!==!0){var e=p[0];t.origTabIndex=e.tabIndex,e.tabIndex=-1,c[0].focus()}},t.onMousedown=function(e){t.useDefault!==!0&&e.preventDefault()},t.onWrapperBlur=function(){p[0].tabIndex=t.origTabIndex},t.onWrapperFocus=function(e){return p[0].disabled?c[0].blur():void 0},t.onWrapperKeydown=function(e){var n=e.keyCode;if(t.isOpen===!1)32!==n&&38!==n&&40!==n||(e.preventDefault(),t.isOpen=!0);else{if(9===n)return t.isOpen=!1;27!==n&&40!==n&&38!==n&&13!==n||e.preventDefault(),27===n?t.isOpen=!1:40===n?t.menuIndex0&&(t.menuIndex-=1):13===n&&(t.ngModel=t.options[t.menuIndex].value,t.isOpen=!1)}},t.chooseOption=function(e){t.ngModel=e.value,t.isOpen=!1},t.$watch("isOpen",function(i,r){if(i!==r&&t.useDefault!==!0)if(i===!0){u.enableScrollLock();var a,o=t.ngModel,c=t.options,m=c.length;for(a=0;m>a;a++)if(c[a].value===o){t.menuIndex=a;break}var v=l.getMenuPositionalCSS(n[0],t.options.length,t.menuIndex);f.css(v),d.scrollTop(f[0],v.scrollTop),e(function(){d.on(document,"click",s),d.on(window,"resize",s)})}else p[0].focus(),u.disableScrollLock(),d.off(document,"click",s),d.off(window,"resize",s)})}}}]),n["default"]=c,t.exports=n["default"]},{"../js/lib/forms":3,"../js/lib/jqLite":4,"../js/lib/util":5,angular:"aeQg5j"}],21:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i=window.angular,r=babelHelpers.interopRequireDefault(i),a=e("../js/lib/jqLite"),l=(babelHelpers.interopRequireWildcard(a),"mui.tabs");r["default"].module(l,[]).directive("muiTabs",function(){return{restrict:"EA",transclude:!0,scope:{selectedId:"=?selected",onChange:"&?"},template:'',controller:["$scope",function(e){var t=0;e.tabs=[],this.addTab=function(n){var i=t;return t+=1,e.tabs.push({label:n.label}),n.isActive&&(e.selectedId=i),i}}],link:function(e,t,n,i,a){var l=r["default"].isUndefined;l(e.selectedId)&&(e.selectedId=0),e.justified=!1,l(n.justified)||(e.justified=!0),e.onClick=function(t){t!==e.selectedId&&(e.selectedId=t,e.onChange&&e.$$postDigest(e.onChange))},a(e,function(e){t.append(e)})}}}).directive("muiTab",["$parse",function(e){return{require:"^?muiTabs",restrict:"AE",scope:{active:"&?",label:"@?"},transclude:!0,template:'
                ',link:function(t,n,i,r,a){var l=e(i.onSelect),o=e(i.onDeselect),u=t.$parent.$parent;t.tabId=null,r&&(t.tabId=r.addTab({label:t.label,isActive:Boolean(t.active)})),a(t,function(e){n.find("div").append(e)}),t.$parent.$watch("selectedId",function(e,n){e!==n&&(e===t.tabId&&l(u),n===t.tabId&&o(u))})}}}]),n["default"]=l,t.exports=n["default"]},{"../js/lib/jqLite":4,angular:"aeQg5j"}]},{},[1]); \ No newline at end of file diff --git a/www/libs/mui/packages/cdn/css/mui.css b/www/libs/mui/packages/cdn/css/mui.css new file mode 100644 index 0000000..2a65b9e --- /dev/null +++ b/www/libs/mui/packages/cdn/css/mui.css @@ -0,0 +1,2522 @@ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS and IE text size adjust after device 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, +menu, +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/10/11, Safari, and Firefox < 22. + */ +[hidden], +template { + display: none; +} + +/* Links + ========================================================================== */ +/** + * Remove the gray background color from active links in IE 10. + */ +a { + background-color: transparent; +} + +/** + * Improve readability of focused elements when they are also in an + * active/hover state. + */ +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 { + 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"], +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. + */ +input[type="search"] { + -webkit-appearance: textfield; + /* 1 */ + box-sizing: content-box; + /* 2 */ +} + +/** + * 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; +} + +/** + * MUI Colors module + */ +/** + * MUI Reboot + */ +* { + box-sizing: border-box; +} + +*:before, +*:after { + box-sizing: border-box; +} + +html { + font-size: 10px; + -webkit-tap-highlight-color: transparent; +} + +body { + font-family: Arial, Verdana, Tahoma; + font-size: 14px; + font-weight: 400; + line-height: 1.429; + color: rgba(0, 0, 0, 0.87); + background-color: #FFF; +} + +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +a { + color: #2196F3; + text-decoration: none; +} + +a:hover, a:focus { + color: #1976D2; + text-decoration: underline; +} + +a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +p { + margin: 0 0 10px; +} + +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} + +figure { + margin: 0; +} + +img { + vertical-align: middle; +} + +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + height: 1px; + background-color: rgba(0, 0, 0, 0.12); +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 10px; + font-size: 21px; + color: rgba(0, 0, 0, 0.87); + line-height: inherit; + border: 0; +} + +input[type="search"] { + box-sizing: border-box; + -webkit-appearance: none; +} + +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +input[type="radio"]:disabled, +input[type="checkbox"]:disabled { + cursor: not-allowed; +} + +strong { + font-weight: 700; +} + +abbr[title] { + cursor: help; + border-bottom: 1px dotted #2196F3; +} + +h1, h2, h3 { + margin-top: 20px; + margin-bottom: 10px; +} + +h4, h5, h6 { + margin-top: 10px; + margin-bottom: 10px; +} + +/** + * MUI Appbar + */ +.mui--appbar-height { + height: 56px; +} + +.mui--appbar-min-height, .mui-appbar { + min-height: 56px; +} + +.mui--appbar-line-height { + line-height: 56px; +} + +.mui--appbar-top { + top: 56px; +} + +@media (orientation: landscape) and (max-height: 480px) { + .mui--appbar-height { + height: 48px; + } + .mui--appbar-min-height, .mui-appbar { + min-height: 48px; + } + .mui--appbar-line-height { + line-height: 48px; + } + .mui--appbar-top { + top: 48px; + } +} + +@media (min-width: 480px) { + .mui--appbar-height { + height: 64px; + } + .mui--appbar-min-height, .mui-appbar { + min-height: 64px; + } + .mui--appbar-line-height { + line-height: 64px; + } + .mui--appbar-top { + top: 64px; + } +} + +.mui-appbar { + background-color: #2196F3; + color: #FFF; +} + +/** + * MUI Buttons + */ +.mui-btn { + animation-duration: 0.0001s; + animation-name: mui-node-inserted; + font-weight: 500; + font-size: 14px; + line-height: 18px; + text-transform: uppercase; + color: rgba(0, 0, 0, 0.87); + background-color: #FFF; + transition: all 0.2s ease-in-out; + display: inline-block; + height: 36px; + padding: 0 26px; + margin-top: 6px; + margin-bottom: 6px; + border: none; + border-radius: 2px; + cursor: pointer; + -ms-touch-action: manipulation; + touch-action: manipulation; + background-image: none; + text-align: center; + line-height: 36px; + vertical-align: middle; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + font-size: 14px; + letter-spacing: 0.03em; + position: relative; + overflow: hidden; +} + +.mui-btn:hover, .mui-btn:focus, .mui-btn:active { + color: rgba(0, 0, 0, 0.87); + background-color: white; +} + +.mui-btn[disabled]:hover, .mui-btn[disabled]:focus, .mui-btn[disabled]:active { + color: rgba(0, 0, 0, 0.87); + background-color: #FFF; +} + +.mui-btn.mui-btn--flat { + color: rgba(0, 0, 0, 0.87); + background-color: transparent; +} + +.mui-btn.mui-btn--flat:hover, .mui-btn.mui-btn--flat:focus, .mui-btn.mui-btn--flat:active { + color: rgba(0, 0, 0, 0.87); + background-color: #f2f2f2; +} + +.mui-btn.mui-btn--flat[disabled]:hover, .mui-btn.mui-btn--flat[disabled]:focus, .mui-btn.mui-btn--flat[disabled]:active { + color: rgba(0, 0, 0, 0.87); + background-color: transparent; +} + +.mui-btn:hover, .mui-btn:focus, .mui-btn:active { + outline: 0; + text-decoration: none; + color: rgba(0, 0, 0, 0.87); +} + +.mui-btn:hover, .mui-btn:focus { + box-shadow: 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); +} + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mui-btn:hover, .mui-btn:focus { + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.12), -1px 0px 2px rgba(0, 0, 0, 0.12), 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); + } +} + +.mui-btn:active { + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); +} + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mui-btn:active { + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.12), -1px 0px 2px rgba(0, 0, 0, 0.12), 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); + } +} + +.mui-btn:disabled, .mui-btn.mui--is-disabled { + cursor: not-allowed; + pointer-events: none; + opacity: 0.60; + box-shadow: none; +} + +.mui-btn + .mui-btn { + margin-left: 8px; +} + +.mui-btn--flat { + background-color: transparent; +} + +.mui-btn--flat:hover, .mui-btn--flat:focus, .mui-btn--flat:active { + box-shadow: none; + background-color: #f2f2f2; +} + +.mui-btn--raised, .mui-btn--fab { + box-shadow: 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); +} + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mui-btn--raised, .mui-btn--fab { + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.12), -1px 0px 2px rgba(0, 0, 0, 0.12), 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); + } +} + +.mui-btn--raised:active, .mui-btn--fab:active { + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); +} + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mui-btn--raised:active, .mui-btn--fab:active { + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.12), -1px 0px 2px rgba(0, 0, 0, 0.12), 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); + } +} + +.mui-btn--fab { + position: relative; + padding: 0; + width: 55px; + height: 55px; + line-height: 55px; + border-radius: 50%; + z-index: 1; +} + +.mui-btn--primary { + color: #FFF; + background-color: #2196F3; +} + +.mui-btn--primary:hover, .mui-btn--primary:focus, .mui-btn--primary:active { + color: #FFF; + background-color: #39a1f4; +} + +.mui-btn--primary[disabled]:hover, .mui-btn--primary[disabled]:focus, .mui-btn--primary[disabled]:active { + color: #FFF; + background-color: #2196F3; +} + +.mui-btn--primary.mui-btn--flat { + color: #2196F3; + background-color: transparent; +} + +.mui-btn--primary.mui-btn--flat:hover, .mui-btn--primary.mui-btn--flat:focus, .mui-btn--primary.mui-btn--flat:active { + color: #2196F3; + background-color: #f2f2f2; +} + +.mui-btn--primary.mui-btn--flat[disabled]:hover, .mui-btn--primary.mui-btn--flat[disabled]:focus, .mui-btn--primary.mui-btn--flat[disabled]:active { + color: #2196F3; + background-color: transparent; +} + +.mui-btn--dark { + color: #FFF; + background-color: #424242; +} + +.mui-btn--dark:hover, .mui-btn--dark:focus, .mui-btn--dark:active { + color: #FFF; + background-color: #4f4f4f; +} + +.mui-btn--dark[disabled]:hover, .mui-btn--dark[disabled]:focus, .mui-btn--dark[disabled]:active { + color: #FFF; + background-color: #424242; +} + +.mui-btn--dark.mui-btn--flat { + color: #424242; + background-color: transparent; +} + +.mui-btn--dark.mui-btn--flat:hover, .mui-btn--dark.mui-btn--flat:focus, .mui-btn--dark.mui-btn--flat:active { + color: #424242; + background-color: #f2f2f2; +} + +.mui-btn--dark.mui-btn--flat[disabled]:hover, .mui-btn--dark.mui-btn--flat[disabled]:focus, .mui-btn--dark.mui-btn--flat[disabled]:active { + color: #424242; + background-color: transparent; +} + +.mui-btn--danger { + color: #FFF; + background-color: #F44336; +} + +.mui-btn--danger:hover, .mui-btn--danger:focus, .mui-btn--danger:active { + color: #FFF; + background-color: #f55a4e; +} + +.mui-btn--danger[disabled]:hover, .mui-btn--danger[disabled]:focus, .mui-btn--danger[disabled]:active { + color: #FFF; + background-color: #F44336; +} + +.mui-btn--danger.mui-btn--flat { + color: #F44336; + background-color: transparent; +} + +.mui-btn--danger.mui-btn--flat:hover, .mui-btn--danger.mui-btn--flat:focus, .mui-btn--danger.mui-btn--flat:active { + color: #F44336; + background-color: #f2f2f2; +} + +.mui-btn--danger.mui-btn--flat[disabled]:hover, .mui-btn--danger.mui-btn--flat[disabled]:focus, .mui-btn--danger.mui-btn--flat[disabled]:active { + color: #F44336; + background-color: transparent; +} + +.mui-btn--accent { + color: #FFF; + background-color: #FF4081; +} + +.mui-btn--accent:hover, .mui-btn--accent:focus, .mui-btn--accent:active { + color: #FFF; + background-color: #ff5a92; +} + +.mui-btn--accent[disabled]:hover, .mui-btn--accent[disabled]:focus, .mui-btn--accent[disabled]:active { + color: #FFF; + background-color: #FF4081; +} + +.mui-btn--accent.mui-btn--flat { + color: #FF4081; + background-color: transparent; +} + +.mui-btn--accent.mui-btn--flat:hover, .mui-btn--accent.mui-btn--flat:focus, .mui-btn--accent.mui-btn--flat:active { + color: #FF4081; + background-color: #f2f2f2; +} + +.mui-btn--accent.mui-btn--flat[disabled]:hover, .mui-btn--accent.mui-btn--flat[disabled]:focus, .mui-btn--accent.mui-btn--flat[disabled]:active { + color: #FF4081; + background-color: transparent; +} + +.mui-btn--small { + height: 30.6px; + line-height: 30.6px; + padding: 0 16px; + font-size: 13px; +} + +.mui-btn--large { + height: 54px; + line-height: 54px; + padding: 0 26px; + font-size: 14px; +} + +.mui-btn--fab.mui-btn--small { + width: 44px; + height: 44px; + line-height: 44px; +} + +.mui-btn--fab.mui-btn--large { + width: 75px; + height: 75px; + line-height: 75px; +} + +/** + * MUI Checkboxe and Radio Components + */ +.mui-radio, +.mui-checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} + +.mui-radio > label, +.mui-checkbox > label { + min-height: 20px; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} + +.mui-radio > label > input[type="radio"], +.mui-radio--inline > label > input[type="radio"], +.mui-checkbox > label > input[type="checkbox"], +.mui-checkbox--inline > label > input[type="checkbox"] { + position: absolute; + margin-left: -20px; + margin-top: 4px; +} + +.mui-radio + .mui-radio, +.mui-checkbox + .mui-checkbox { + margin-top: -5px; +} + +.mui-radio--inline, +.mui-checkbox--inline { + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + vertical-align: middle; + font-weight: normal; + cursor: pointer; +} + +.mui-radio--inline > input[type="radio"], +.mui-radio--inline > input[type="checkbox"], +.mui-radio--inline > label > input[type="radio"], +.mui-radio--inline > label > input[type="checkbox"], +.mui-checkbox--inline > input[type="radio"], +.mui-checkbox--inline > input[type="checkbox"], +.mui-checkbox--inline > label > input[type="radio"], +.mui-checkbox--inline > label > input[type="checkbox"] { + margin: 4px 0 0; + line-height: normal; +} + +.mui-radio--inline + .mui-radio--inline, +.mui-checkbox--inline + .mui-checkbox--inline { + margin-top: 0; + margin-left: 10px; +} + +/** + * MUI Container module + */ +.mui-container { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} + +.mui-container:before, .mui-container:after { + content: " "; + display: table; +} + +.mui-container:after { + clear: both; +} + +@media (min-width: 544px) { + .mui-container { + max-width: 570px; + } +} + +@media (min-width: 768px) { + .mui-container { + max-width: 740px; + } +} + +@media (min-width: 992px) { + .mui-container { + max-width: 960px; + } +} + +@media (min-width: 1200px) { + .mui-container { + max-width: 1170px; + } +} + +.mui-container-fluid { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} + +.mui-container-fluid:before, .mui-container-fluid:after { + content: " "; + display: table; +} + +.mui-container-fluid:after { + clear: both; +} + +/** + * MUI Divider Component and CSS Helpers + */ +.mui-divider { + display: block; + height: 1px; + background-color: rgba(0, 0, 0, 0.12); +} + +.mui--divider-top { + border-top: 1px solid rgba(0, 0, 0, 0.12); +} + +.mui--divider-bottom { + border-bottom: 1px solid rgba(0, 0, 0, 0.12); +} + +.mui--divider-left { + border-left: 1px solid rgba(0, 0, 0, 0.12); +} + +.mui--divider-right { + border-right: 1px solid rgba(0, 0, 0, 0.12); +} + +/** + * MUI Dropdown module + */ +.mui-dropdown { + display: inline-block; + position: relative; +} + +[data-mui-toggle="dropdown"] { + animation-duration: 0.0001s; + animation-name: mui-node-inserted; + outline: 0; +} + +.mui-dropdown__menu { + position: absolute; + top: 100%; + left: 0; + display: none; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + list-style: none; + font-size: 14px; + text-align: left; + background-color: #FFF; + border-radius: 2px; + z-index: 1; + background-clip: padding-box; +} + +.mui-dropdown__menu.mui--is-open { + display: block; +} + +.mui-dropdown__menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.429; + color: rgba(0, 0, 0, 0.87); + white-space: nowrap; +} + +.mui-dropdown__menu > li > a:hover, .mui-dropdown__menu > li > a:focus { + text-decoration: none; + color: rgba(0, 0, 0, 0.87); + background-color: #EEEEEE; +} + +.mui-dropdown__menu > .mui--is-disabled > a, .mui-dropdown__menu > .mui--is-disabled > a:hover, .mui-dropdown__menu > .mui--is-disabled > a:focus { + color: #EEEEEE; +} + +.mui-dropdown__menu > .mui--is-disabled > a:hover, .mui-dropdown__menu > .mui--is-disabled > a:focus { + text-decoration: none; + background-color: transparent; + background-image: none; + cursor: not-allowed; +} + +.mui-dropdown__menu--right { + left: auto; + right: 0; +} + +/** + * MUI Form Component + */ +@media (min-width: 544px) { + .mui-form--inline > .mui-textfield { + display: inline-block; + margin-bottom: 0; + } + .mui-form--inline > .mui-radio, + .mui-form--inline > .mui-checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .mui-form--inline > .mui-radio > label, + .mui-form--inline > .mui-checkbox > label { + padding-left: 0; + } + .mui-form--inline > .mui-radio > label > input[type="radio"], + .mui-form--inline > .mui-checkbox > label > input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .mui-form--inline > .mui-select { + display: inline-block; + } + .mui-form--inline > .mui-btn { + margin-bottom: 0; + margin-top: 0; + vertical-align: bottom; + } +} + +/** + * MUI Grid module + */ +.mui-row { + margin-left: -15px; + margin-right: -15px; +} + +.mui-row:before, .mui-row:after { + content: " "; + display: table; +} + +.mui-row:after { + clear: both; +} + +.mui-col-xs-1, .mui-col-sm-1, .mui-col-md-1, .mui-col-lg-1, .mui-col-xs-2, .mui-col-sm-2, .mui-col-md-2, .mui-col-lg-2, .mui-col-xs-3, .mui-col-sm-3, .mui-col-md-3, .mui-col-lg-3, .mui-col-xs-4, .mui-col-sm-4, .mui-col-md-4, .mui-col-lg-4, .mui-col-xs-5, .mui-col-sm-5, .mui-col-md-5, .mui-col-lg-5, .mui-col-xs-6, .mui-col-sm-6, .mui-col-md-6, .mui-col-lg-6, .mui-col-xs-7, .mui-col-sm-7, .mui-col-md-7, .mui-col-lg-7, .mui-col-xs-8, .mui-col-sm-8, .mui-col-md-8, .mui-col-lg-8, .mui-col-xs-9, .mui-col-sm-9, .mui-col-md-9, .mui-col-lg-9, .mui-col-xs-10, .mui-col-sm-10, .mui-col-md-10, .mui-col-lg-10, .mui-col-xs-11, .mui-col-sm-11, .mui-col-md-11, .mui-col-lg-11, .mui-col-xs-12, .mui-col-sm-12, .mui-col-md-12, .mui-col-lg-12 { + min-height: 1px; + padding-left: 15px; + padding-right: 15px; +} + +.mui-col-xs-1, .mui-col-xs-2, .mui-col-xs-3, .mui-col-xs-4, .mui-col-xs-5, .mui-col-xs-6, .mui-col-xs-7, .mui-col-xs-8, .mui-col-xs-9, .mui-col-xs-10, .mui-col-xs-11, .mui-col-xs-12 { + float: left; +} + +.mui-col-xs-1 { + width: 8.33333%; +} + +.mui-col-xs-2 { + width: 16.66667%; +} + +.mui-col-xs-3 { + width: 25%; +} + +.mui-col-xs-4 { + width: 33.33333%; +} + +.mui-col-xs-5 { + width: 41.66667%; +} + +.mui-col-xs-6 { + width: 50%; +} + +.mui-col-xs-7 { + width: 58.33333%; +} + +.mui-col-xs-8 { + width: 66.66667%; +} + +.mui-col-xs-9 { + width: 75%; +} + +.mui-col-xs-10 { + width: 83.33333%; +} + +.mui-col-xs-11 { + width: 91.66667%; +} + +.mui-col-xs-12 { + width: 100%; +} + +.mui-col-xs-offset-0 { + margin-left: 0%; +} + +.mui-col-xs-offset-1 { + margin-left: 8.33333%; +} + +.mui-col-xs-offset-2 { + margin-left: 16.66667%; +} + +.mui-col-xs-offset-3 { + margin-left: 25%; +} + +.mui-col-xs-offset-4 { + margin-left: 33.33333%; +} + +.mui-col-xs-offset-5 { + margin-left: 41.66667%; +} + +.mui-col-xs-offset-6 { + margin-left: 50%; +} + +.mui-col-xs-offset-7 { + margin-left: 58.33333%; +} + +.mui-col-xs-offset-8 { + margin-left: 66.66667%; +} + +.mui-col-xs-offset-9 { + margin-left: 75%; +} + +.mui-col-xs-offset-10 { + margin-left: 83.33333%; +} + +.mui-col-xs-offset-11 { + margin-left: 91.66667%; +} + +.mui-col-xs-offset-12 { + margin-left: 100%; +} + +@media (min-width: 544px) { + .mui-col-sm-1, .mui-col-sm-2, .mui-col-sm-3, .mui-col-sm-4, .mui-col-sm-5, .mui-col-sm-6, .mui-col-sm-7, .mui-col-sm-8, .mui-col-sm-9, .mui-col-sm-10, .mui-col-sm-11, .mui-col-sm-12 { + float: left; + } + .mui-col-sm-1 { + width: 8.33333%; + } + .mui-col-sm-2 { + width: 16.66667%; + } + .mui-col-sm-3 { + width: 25%; + } + .mui-col-sm-4 { + width: 33.33333%; + } + .mui-col-sm-5 { + width: 41.66667%; + } + .mui-col-sm-6 { + width: 50%; + } + .mui-col-sm-7 { + width: 58.33333%; + } + .mui-col-sm-8 { + width: 66.66667%; + } + .mui-col-sm-9 { + width: 75%; + } + .mui-col-sm-10 { + width: 83.33333%; + } + .mui-col-sm-11 { + width: 91.66667%; + } + .mui-col-sm-12 { + width: 100%; + } + .mui-col-sm-offset-0 { + margin-left: 0%; + } + .mui-col-sm-offset-1 { + margin-left: 8.33333%; + } + .mui-col-sm-offset-2 { + margin-left: 16.66667%; + } + .mui-col-sm-offset-3 { + margin-left: 25%; + } + .mui-col-sm-offset-4 { + margin-left: 33.33333%; + } + .mui-col-sm-offset-5 { + margin-left: 41.66667%; + } + .mui-col-sm-offset-6 { + margin-left: 50%; + } + .mui-col-sm-offset-7 { + margin-left: 58.33333%; + } + .mui-col-sm-offset-8 { + margin-left: 66.66667%; + } + .mui-col-sm-offset-9 { + margin-left: 75%; + } + .mui-col-sm-offset-10 { + margin-left: 83.33333%; + } + .mui-col-sm-offset-11 { + margin-left: 91.66667%; + } + .mui-col-sm-offset-12 { + margin-left: 100%; + } +} + +@media (min-width: 768px) { + .mui-col-md-1, .mui-col-md-2, .mui-col-md-3, .mui-col-md-4, .mui-col-md-5, .mui-col-md-6, .mui-col-md-7, .mui-col-md-8, .mui-col-md-9, .mui-col-md-10, .mui-col-md-11, .mui-col-md-12 { + float: left; + } + .mui-col-md-1 { + width: 8.33333%; + } + .mui-col-md-2 { + width: 16.66667%; + } + .mui-col-md-3 { + width: 25%; + } + .mui-col-md-4 { + width: 33.33333%; + } + .mui-col-md-5 { + width: 41.66667%; + } + .mui-col-md-6 { + width: 50%; + } + .mui-col-md-7 { + width: 58.33333%; + } + .mui-col-md-8 { + width: 66.66667%; + } + .mui-col-md-9 { + width: 75%; + } + .mui-col-md-10 { + width: 83.33333%; + } + .mui-col-md-11 { + width: 91.66667%; + } + .mui-col-md-12 { + width: 100%; + } + .mui-col-md-offset-0 { + margin-left: 0%; + } + .mui-col-md-offset-1 { + margin-left: 8.33333%; + } + .mui-col-md-offset-2 { + margin-left: 16.66667%; + } + .mui-col-md-offset-3 { + margin-left: 25%; + } + .mui-col-md-offset-4 { + margin-left: 33.33333%; + } + .mui-col-md-offset-5 { + margin-left: 41.66667%; + } + .mui-col-md-offset-6 { + margin-left: 50%; + } + .mui-col-md-offset-7 { + margin-left: 58.33333%; + } + .mui-col-md-offset-8 { + margin-left: 66.66667%; + } + .mui-col-md-offset-9 { + margin-left: 75%; + } + .mui-col-md-offset-10 { + margin-left: 83.33333%; + } + .mui-col-md-offset-11 { + margin-left: 91.66667%; + } + .mui-col-md-offset-12 { + margin-left: 100%; + } +} + +@media (min-width: 992px) { + .mui-col-lg-1, .mui-col-lg-2, .mui-col-lg-3, .mui-col-lg-4, .mui-col-lg-5, .mui-col-lg-6, .mui-col-lg-7, .mui-col-lg-8, .mui-col-lg-9, .mui-col-lg-10, .mui-col-lg-11, .mui-col-lg-12 { + float: left; + } + .mui-col-lg-1 { + width: 8.33333%; + } + .mui-col-lg-2 { + width: 16.66667%; + } + .mui-col-lg-3 { + width: 25%; + } + .mui-col-lg-4 { + width: 33.33333%; + } + .mui-col-lg-5 { + width: 41.66667%; + } + .mui-col-lg-6 { + width: 50%; + } + .mui-col-lg-7 { + width: 58.33333%; + } + .mui-col-lg-8 { + width: 66.66667%; + } + .mui-col-lg-9 { + width: 75%; + } + .mui-col-lg-10 { + width: 83.33333%; + } + .mui-col-lg-11 { + width: 91.66667%; + } + .mui-col-lg-12 { + width: 100%; + } + .mui-col-lg-offset-0 { + margin-left: 0%; + } + .mui-col-lg-offset-1 { + margin-left: 8.33333%; + } + .mui-col-lg-offset-2 { + margin-left: 16.66667%; + } + .mui-col-lg-offset-3 { + margin-left: 25%; + } + .mui-col-lg-offset-4 { + margin-left: 33.33333%; + } + .mui-col-lg-offset-5 { + margin-left: 41.66667%; + } + .mui-col-lg-offset-6 { + margin-left: 50%; + } + .mui-col-lg-offset-7 { + margin-left: 58.33333%; + } + .mui-col-lg-offset-8 { + margin-left: 66.66667%; + } + .mui-col-lg-offset-9 { + margin-left: 75%; + } + .mui-col-lg-offset-10 { + margin-left: 83.33333%; + } + .mui-col-lg-offset-11 { + margin-left: 91.66667%; + } + .mui-col-lg-offset-12 { + margin-left: 100%; + } +} + +@media (min-width: 1200px) { + .mui-col-xl-1, .mui-col-xl-2, .mui-col-xl-3, .mui-col-xl-4, .mui-col-xl-5, .mui-col-xl-6, .mui-col-xl-7, .mui-col-xl-8, .mui-col-xl-9, .mui-col-xl-10, .mui-col-xl-11, .mui-col-xl-12 { + float: left; + } + .mui-col-xl-1 { + width: 8.33333%; + } + .mui-col-xl-2 { + width: 16.66667%; + } + .mui-col-xl-3 { + width: 25%; + } + .mui-col-xl-4 { + width: 33.33333%; + } + .mui-col-xl-5 { + width: 41.66667%; + } + .mui-col-xl-6 { + width: 50%; + } + .mui-col-xl-7 { + width: 58.33333%; + } + .mui-col-xl-8 { + width: 66.66667%; + } + .mui-col-xl-9 { + width: 75%; + } + .mui-col-xl-10 { + width: 83.33333%; + } + .mui-col-xl-11 { + width: 91.66667%; + } + .mui-col-xl-12 { + width: 100%; + } + .mui-col-xl-offset-0 { + margin-left: 0%; + } + .mui-col-xl-offset-1 { + margin-left: 8.33333%; + } + .mui-col-xl-offset-2 { + margin-left: 16.66667%; + } + .mui-col-xl-offset-3 { + margin-left: 25%; + } + .mui-col-xl-offset-4 { + margin-left: 33.33333%; + } + .mui-col-xl-offset-5 { + margin-left: 41.66667%; + } + .mui-col-xl-offset-6 { + margin-left: 50%; + } + .mui-col-xl-offset-7 { + margin-left: 58.33333%; + } + .mui-col-xl-offset-8 { + margin-left: 66.66667%; + } + .mui-col-xl-offset-9 { + margin-left: 75%; + } + .mui-col-xl-offset-10 { + margin-left: 83.33333%; + } + .mui-col-xl-offset-11 { + margin-left: 91.66667%; + } + .mui-col-xl-offset-12 { + margin-left: 100%; + } +} + +/** + * MUI Panel module + */ +.mui-panel { + padding: 15px; + margin-bottom: 20px; + border-radius: 0; + background-color: #FFF; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.16), 0 0px 2px 0 rgba(0, 0, 0, 0.12); +} + +.mui-panel:before, .mui-panel:after { + content: " "; + display: table; +} + +.mui-panel:after { + clear: both; +} + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mui-panel { + box-shadow: 0 -1px 2px 0 rgba(0, 0, 0, 0.12), -1px 0px 2px 0 rgba(0, 0, 0, 0.12), 0 2px 2px 0 rgba(0, 0, 0, 0.16), 0 0px 2px 0 rgba(0, 0, 0, 0.12); + } +} + +/** + * MUI Select Component + */ +.mui-select { + display: block; + padding-top: 15px; + margin-bottom: 20px; + position: relative; +} + +.mui-select:focus { + outline: 0; +} + +.mui-select:focus > select { + height: 33px; + margin-bottom: -1px; + border-color: #2196F3; + border-width: 2px; +} + +.mui-select > select { + animation-duration: 0.0001s; + animation-name: mui-node-inserted; + display: block; + height: 32px; + width: 100%; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + outline: none; + border: none; + border-bottom: 1px solid rgba(0, 0, 0, 0.26); + border-radius: 0px; + box-shadow: none; + background-color: transparent; + background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iNiIgd2lkdGg9IjEwIj48cG9seWdvbiBwb2ludHM9IjAsMCAxMCwwIDUsNiIgc3R5bGU9ImZpbGw6cmdiYSgwLDAsMCwuMjQpOyIvPjwvc3ZnPg=="); + background-repeat: no-repeat; + background-position: right center; + cursor: pointer; + color: rgba(0, 0, 0, 0.87); + font-size: 16px; + padding: 0 25px 0 0; +} + +.mui-select > select::-ms-expand { + display: none; +} + +.mui-select > select:focus { + outline: 0; + height: 33px; + margin-bottom: -1px; + border-color: #2196F3; + border-width: 2px; +} + +.mui-select > select:disabled { + color: rgba(0, 0, 0, 0.38); + cursor: not-allowed; + background-color: transparent; + opacity: 1; +} + +.mui-select__menu { + position: absolute; + z-index: 2; + min-width: 100%; + overflow-y: auto; + padding: 8px 0; + background-color: #FFF; + font-size: 16px; +} + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mui-select__menu { + border-left: 1px solid rgba(0, 0, 0, 0.12); + border-top: 1px solid rgba(0, 0, 0, 0.12); + } +} + +.mui-select__menu > div { + padding: 0 22px; + height: 42px; + line-height: 42px; + cursor: pointer; + white-space: nowrap; +} + +.mui-select__menu > div:hover { + background-color: #E0E0E0; +} + +.mui-select__menu > div.mui--is-selected { + background-color: #EEEEEE; +} + +/** + * MUI Table Component + */ +th { + text-align: left; +} + +.mui-table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} + +.mui-table > thead > tr > th, +.mui-table > thead > tr > td, +.mui-table > tbody > tr > th, +.mui-table > tbody > tr > td, +.mui-table > tfoot > tr > th, +.mui-table > tfoot > tr > td { + padding: 10px; + line-height: 1.429; +} + +.mui-table > thead > tr > th { + border-bottom: 2px solid rgba(0, 0, 0, 0.12); + font-weight: 700; +} + +.mui-table > tbody + tbody { + border-top: 2px solid rgba(0, 0, 0, 0.12); +} + +.mui-table.mui-table--bordered > tbody > tr > td { + border-bottom: 1px solid rgba(0, 0, 0, 0.12); +} + +/** + * MUI Tabs module + */ +.mui-tabs__bar { + list-style: none; + padding-left: 0; + margin-bottom: 0; + background-color: transparent; + white-space: nowrap; + overflow-x: auto; +} + +.mui-tabs__bar > li { + display: inline-block; +} + +.mui-tabs__bar > li > a { + display: block; + white-space: nowrap; + text-transform: uppercase; + font-weight: 500; + font-size: 14px; + color: rgba(0, 0, 0, 0.87); + cursor: default; + height: 48px; + line-height: 48px; + padding-left: 24px; + padding-right: 24px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.mui-tabs__bar > li > a:hover { + text-decoration: none; +} + +.mui-tabs__bar > li.mui--is-active { + border-bottom: 2px solid #2196F3; +} + +.mui-tabs__bar > li.mui--is-active > a { + color: #2196F3; +} + +.mui-tabs__bar.mui-tabs__bar--justified { + display: table; + width: 100%; + table-layout: fixed; +} + +.mui-tabs__bar.mui-tabs__bar--justified > li { + display: table-cell; +} + +.mui-tabs__bar.mui-tabs__bar--justified > li > a { + text-align: center; + padding-left: 0px; + padding-right: 0px; +} + +.mui-tabs__pane { + display: none; +} + +.mui-tabs__pane.mui--is-active { + display: block; +} + +[data-mui-toggle="tab"] { + animation-duration: 0.0001s; + animation-name: mui-node-inserted; +} + +/** + * MUI Textfield Component + */ +.mui-textfield { + display: block; + padding-top: 15px; + margin-bottom: 20px; + position: relative; +} + +.mui-textfield > label { + position: absolute; + top: 0; + display: block; + width: 100%; + color: rgba(0, 0, 0, 0.54); + font-size: 12px; + font-weight: 400; + line-height: 15px; + overflow-x: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.mui-textfield > textarea { + padding-top: 5px; +} + +.mui-textfield > input, +.mui-textfield > textarea { + display: block; +} + +.mui-textfield > input:focus ~ label, +.mui-textfield > textarea:focus ~ label { + color: #2196F3; +} + +.mui-textfield--float-label > label { + position: absolute; + transform: translate(0px, 15px); + font-size: 16px; + line-height: 32px; + color: rgba(0, 0, 0, 0.26); + text-overflow: clip; + cursor: text; + pointer-events: none; +} + +.mui-textfield--float-label > input:focus ~ label, +.mui-textfield--float-label > textarea:focus ~ label { + transform: translate(0px, 0px); + font-size: 12px; + line-height: 15px; + text-overflow: ellipsis; +} + +.mui-textfield--float-label > input:not(:focus).mui--is-not-empty ~ label, .mui-textfield--float-label > input:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, .mui-textfield--float-label > input:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield--float-label > textarea:not(:focus).mui--is-not-empty ~ label, +.mui-textfield--float-label > textarea:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield--float-label > textarea:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label { + color: rgba(0, 0, 0, 0.54); + font-size: 12px; + line-height: 15px; + transform: translate(0px, 0px); + text-overflow: ellipsis; +} + +.mui-textfield--wrap-label { + display: table; + width: 100%; + padding-top: 0px; +} + +.mui-textfield--wrap-label:not(.mui-textfield--float-label) > label { + display: table-header-group; + position: static; + white-space: normal; + overflow-x: visible; +} + +.mui-textfield > input, +.mui-textfield > textarea { + animation-duration: 0.0001s; + animation-name: mui-node-inserted; + display: block; + background-color: transparent; + color: rgba(0, 0, 0, 0.87); + border: none; + border-bottom: 1px solid rgba(0, 0, 0, 0.26); + outline: none; + width: 100%; + font-size: 16px; + padding: 0; + box-shadow: none; + border-radius: 0px; + background-image: none; +} + +.mui-textfield > input:focus, +.mui-textfield > textarea:focus { + border-color: #2196F3; + border-width: 2px; +} + +.mui-textfield > input:disabled, .mui-textfield > input:-moz-read-only, +.mui-textfield > textarea:disabled, +.mui-textfield > textarea:-moz-read-only { + cursor: not-allowed; + background-color: transparent; + opacity: 1; +} + +.mui-textfield > input:disabled, .mui-textfield > input:read-only, +.mui-textfield > textarea:disabled, +.mui-textfield > textarea:read-only { + cursor: not-allowed; + background-color: transparent; + opacity: 1; +} + +.mui-textfield > input::-webkit-input-placeholder, +.mui-textfield > textarea::-webkit-input-placeholder { + color: rgba(0, 0, 0, 0.26); + opacity: 1; +} + +.mui-textfield > input::-moz-placeholder, +.mui-textfield > textarea::-moz-placeholder { + color: rgba(0, 0, 0, 0.26); + opacity: 1; +} + +.mui-textfield > input:-ms-input-placeholder, +.mui-textfield > textarea:-ms-input-placeholder { + color: rgba(0, 0, 0, 0.26); + opacity: 1; +} + +.mui-textfield > input::placeholder, +.mui-textfield > textarea::placeholder { + color: rgba(0, 0, 0, 0.26); + opacity: 1; +} + +.mui-textfield > input { + height: 32px; +} + +.mui-textfield > input:focus { + height: 33px; + margin-bottom: -1px; +} + +.mui-textfield > textarea { + min-height: 64px; +} + +.mui-textfield > textarea[rows]:not([rows="2"]):focus { + margin-bottom: -1px; +} + +.mui-textfield > input:focus { + height: 33px; + margin-bottom: -1px; +} + +.mui-textfield > input:invalid:not(:focus):not(:required), .mui-textfield > input:invalid:not(:focus):required.mui--is-not-empty, .mui-textfield > input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty, .mui-textfield > input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty), .mui-textfield > input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > textarea:invalid:not(:focus):not(:required), +.mui-textfield > textarea:invalid:not(:focus):required.mui--is-not-empty, +.mui-textfield > textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty, +.mui-textfield > textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > input:not(:focus).mui--is-invalid:not(:required), +.mui-textfield > input:not(:focus).mui--is-invalid:required.mui--is-not-empty, +.mui-textfield > input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty, +.mui-textfield > input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > textarea:not(:focus).mui--is-invalid:not(:required), +.mui-textfield > textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty, +.mui-textfield > textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty, +.mui-textfield > textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) { + border-color: #F44336; + border-width: 2px; +} + +.mui-textfield > input:invalid:not(:focus):not(:required), .mui-textfield > input:invalid:not(:focus):required.mui--is-not-empty, .mui-textfield > input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty, .mui-textfield > input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty), .mui-textfield > input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > input:not(:focus).mui--is-invalid:not(:required), +.mui-textfield > input:not(:focus).mui--is-invalid:required.mui--is-not-empty, +.mui-textfield > input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty, +.mui-textfield > input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) { + height: 33px; + margin-bottom: -1px; +} + +.mui-textfield > input:invalid:not(:focus):not(:required) ~ label, .mui-textfield > input:invalid:not(:focus):required.mui--is-not-empty ~ label, .mui-textfield > input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, .mui-textfield > input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield > textarea:invalid:not(:focus):not(:required) ~ label, +.mui-textfield > textarea:invalid:not(:focus):required.mui--is-not-empty ~ label, +.mui-textfield > textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield > textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield > input:not(:focus).mui--is-invalid:not(:required) ~ label, +.mui-textfield > input:not(:focus).mui--is-invalid:required.mui--is-not-empty ~ label, +.mui-textfield > input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield > input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield > textarea:not(:focus).mui--is-invalid:not(:required) ~ label, +.mui-textfield > textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty ~ label, +.mui-textfield > textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield > textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label { + color: #F44336; +} + +.mui-textfield:not(.mui-textfield--float-label) > input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty ~ label, +.mui-textfield:not(.mui-textfield--float-label) > textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty ~ label, +.mui-textfield:not(.mui-textfield--float-label) > input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty ~ label, +.mui-textfield:not(.mui-textfield--float-label) > textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty ~ label { + color: #F44336; +} + +/** + * MUI Helpers module + */ +@keyframes mui-node-inserted { + from { + opacity: 0.99; + } + to { + opacity: 1; + } +} + +.mui--no-transition { + transition: none !important; +} + +.mui--no-user-select { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.mui-caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px solid; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} + +.mui--text-left { + text-align: left !important; +} + +.mui--text-right { + text-align: right !important; +} + +.mui--text-center { + text-align: center !important; +} + +.mui--text-justify { + text-align: justify !important; +} + +.mui--text-nowrap { + white-space: nowrap !important; +} + +.mui--align-baseline { + vertical-align: baseline !important; +} + +.mui--align-top { + vertical-align: top !important; +} + +.mui--align-middle { + vertical-align: middle !important; +} + +.mui--align-bottom { + vertical-align: bottom !important; +} + +.mui--text-dark { + color: rgba(0, 0, 0, 0.87); +} + +.mui--text-dark-secondary { + color: rgba(0, 0, 0, 0.54); +} + +.mui--text-dark-hint { + color: rgba(0, 0, 0, 0.38); +} + +.mui--text-light { + color: #FFF; +} + +.mui--text-light-secondary { + color: rgba(255, 255, 255, 0.7); +} + +.mui--text-light-hint { + color: rgba(255, 255, 255, 0.3); +} + +.mui--text-accent { + color: rgba(255, 64, 129, 0.87); +} + +.mui--text-accent-secondary { + color: rgba(255, 64, 129, 0.54); +} + +.mui--text-accent-hint { + color: rgba(255, 64, 129, 0.38); +} + +.mui--text-black { + color: #000; +} + +.mui--text-white { + color: #FFF; +} + +.mui--text-danger { + color: #F44336; +} + +.mui-list--unstyled { + padding-left: 0; + list-style: none; +} + +.mui-list--inline { + padding-left: 0; + list-style: none; + margin-left: -5px; +} + +.mui-list--inline > li { + display: inline-block; + padding-left: 5px; + padding-right: 5px; +} + +.mui--z1, .mui-dropdown__menu, .mui-select__menu { + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); +} + +.mui--z2 { + box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23); +} + +.mui--z3 { + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); +} + +.mui--z4 { + box-shadow: 0 14px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.22); +} + +.mui--z5 { + box-shadow: 0 19px 38px rgba(0, 0, 0, 0.3), 0 15px 12px rgba(0, 0, 0, 0.22); +} + +.mui--clearfix:before, .mui--clearfix:after { + content: " "; + display: table; +} + +.mui--clearfix:after { + clear: both; +} + +.mui--pull-right { + float: right !important; +} + +.mui--pull-left { + float: left !important; +} + +.mui--hide { + display: none !important; +} + +.mui--show { + display: block !important; +} + +.mui--invisible { + visibility: hidden; +} + +.mui--overflow-hidden { + overflow: hidden !important; +} + +.mui--overflow-hidden-x { + overflow-x: hidden !important; +} + +.mui--overflow-hidden-y { + overflow-y: hidden !important; +} + +.mui--visible-xs-block, +.mui--visible-xs-inline, +.mui--visible-xs-inline-block, +.mui--visible-sm-block, +.mui--visible-sm-inline, +.mui--visible-sm-inline-block, +.mui--visible-md-block, +.mui--visible-md-inline, +.mui--visible-md-inline-block, +.mui--visible-lg-block, +.mui--visible-lg-inline, +.mui--visible-lg-inline-block, +.mui--visible-xl-block, +.mui--visible-xl-inline, +.mui--visible-xl-inline-block { + display: none !important; +} + +@media (max-width: 543px) { + .mui-visible-xs { + display: block !important; + } + table.mui-visible-xs { + display: table; + } + tr.mui-visible-xs { + display: table-row !important; + } + th.mui-visible-xs, + td.mui-visible-xs { + display: table-cell !important; + } + .mui--visible-xs-block { + display: block !important; + } + .mui--visible-xs-inline { + display: inline !important; + } + .mui--visible-xs-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 544px) and (max-width: 767px) { + .mui-visible-sm { + display: block !important; + } + table.mui-visible-sm { + display: table; + } + tr.mui-visible-sm { + display: table-row !important; + } + th.mui-visible-sm, + td.mui-visible-sm { + display: table-cell !important; + } + .mui--visible-sm-block { + display: block !important; + } + .mui--visible-sm-inline { + display: inline !important; + } + .mui--visible-sm-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .mui-visible-md { + display: block !important; + } + table.mui-visible-md { + display: table; + } + tr.mui-visible-md { + display: table-row !important; + } + th.mui-visible-md, + td.mui-visible-md { + display: table-cell !important; + } + .mui--visible-md-block { + display: block !important; + } + .mui--visible-md-inline { + display: inline !important; + } + .mui--visible-md-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .mui-visible-lg { + display: block !important; + } + table.mui-visible-lg { + display: table; + } + tr.mui-visible-lg { + display: table-row !important; + } + th.mui-visible-lg, + td.mui-visible-lg { + display: table-cell !important; + } + .mui--visible-lg-block { + display: block !important; + } + .mui--visible-lg-inline { + display: inline !important; + } + .mui--visible-lg-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 1200px) { + .mui-visible-xl { + display: block !important; + } + table.mui-visible-xl { + display: table; + } + tr.mui-visible-xl { + display: table-row !important; + } + th.mui-visible-xl, + td.mui-visible-xl { + display: table-cell !important; + } + .mui--visible-xl-block { + display: block !important; + } + .mui--visible-xl-inline { + display: inline !important; + } + .mui--visible-xl-inline-block { + display: inline-block !important; + } +} + +@media (max-width: 543px) { + .mui--hidden-xs { + display: none !important; + } +} + +@media (min-width: 544px) and (max-width: 767px) { + .mui--hidden-sm { + display: none !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .mui--hidden-md { + display: none !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .mui--hidden-lg { + display: none !important; + } +} + +@media (min-width: 1200px) { + .mui--hidden-xl { + display: none !important; + } +} + +body.mui-body--scroll-lock { + overflow: hidden !important; +} + +/** + * MUI Overlay module + */ +#mui-overlay { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 99999999; + background-color: rgba(0, 0, 0, 0.2); + overflow: auto; +} + +/** + * MUI Ripple module + */ +.mui-ripple-effect { + position: absolute; + border-radius: 50%; + pointer-events: none; + opacity: 0; + animation: mui-ripple-animation 2s; +} + +@keyframes mui-ripple-animation { + from { + transform: scale(1); + opacity: 0.4; + } + to { + transform: scale(100); + opacity: 0; + } +} + +.mui-btn > .mui-ripple-effect { + background-color: #a6a6a6; +} + +.mui-btn--primary > .mui-ripple-effect { + background-color: #FFF; +} + +.mui-btn--dark > .mui-ripple-effect { + background-color: #FFF; +} + +.mui-btn--danger > .mui-ripple-effect { + background-color: #FFF; +} + +.mui-btn--accent > .mui-ripple-effect { + background-color: #FFF; +} + +.mui-btn--flat > .mui-ripple-effect { + background-color: #a6a6a6; +} + +/** + * MUI Typography module + */ +.mui--text-display4 { + font-weight: 300; + font-size: 112px; + line-height: 112px; +} + +.mui--text-display3 { + font-weight: 400; + font-size: 56px; + line-height: 56px; +} + +.mui--text-display2 { + font-weight: 400; + font-size: 45px; + line-height: 48px; +} + +.mui--text-display1, h1 { + font-weight: 400; + font-size: 34px; + line-height: 40px; +} + +.mui--text-headline, h2 { + font-weight: 400; + font-size: 24px; + line-height: 32px; +} + +.mui--text-title, h3 { + font-weight: 400; + font-size: 20px; + line-height: 28px; +} + +.mui--text-subhead, h4 { + font-weight: 400; + font-size: 16px; + line-height: 24px; +} + +.mui--text-body2, h5 { + font-weight: 500; + font-size: 14px; + line-height: 24px; +} + +.mui--text-body1 { + font-weight: 400; + font-size: 14px; + line-height: 20px; +} + +.mui--text-caption { + font-weight: 400; + font-size: 12px; + line-height: 16px; +} + +.mui--text-menu { + font-weight: 500; + font-size: 13px; + line-height: 17px; +} + +.mui--text-button { + font-weight: 500; + font-size: 14px; + line-height: 18px; + text-transform: uppercase; +} diff --git a/www/libs/mui/packages/cdn/css/mui.min.css b/www/libs/mui/packages/cdn/css/mui.min.css new file mode 100644 index 0000000..750f365 --- /dev/null +++ b/www/libs/mui/packages/cdn/css/mui.min.css @@ -0,0 +1 @@ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-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{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}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{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{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-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:border-box}:after,:before{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:Arial,Verdana,Tahoma;font-size:14px;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);background-color:#FFF}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#2196F3;text-decoration:none}a:focus,a:hover{color:#1976D2;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}p{margin:0 0 10px}ol,ul{margin-top:0;margin-bottom:10px}figure{margin:0}img{vertical-align:middle}hr{margin-top:20px;margin-bottom:20px;border:0;height:1px;background-color:rgba(0,0,0,.12)}legend{display:block;width:100%;padding:0;margin-bottom:10px;font-size:21px;color:rgba(0,0,0,.87);line-height:inherit;border:0}input[type=search]{box-sizing:border-box;-webkit-appearance:none}input[type=checkbox]:focus,input[type=radio]:focus,input[type=file]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type=checkbox]:disabled,input[type=radio]:disabled{cursor:not-allowed}strong{font-weight:700}abbr[title]{cursor:help;border-bottom:1px dotted #2196F3}h1,h2,h3{margin-top:20px;margin-bottom:10px}h4,h5,h6{margin-top:10px;margin-bottom:10px}.mui--appbar-height{height:56px}.mui--appbar-min-height,.mui-appbar{min-height:56px}.mui--appbar-line-height{line-height:56px}.mui--appbar-top{top:56px}@media (orientation:landscape) and (max-height:480px){.mui--appbar-height{height:48px}.mui--appbar-min-height,.mui-appbar{min-height:48px}.mui--appbar-line-height{line-height:48px}.mui--appbar-top{top:48px}}@media (min-width:480px){.mui--appbar-height{height:64px}.mui--appbar-min-height,.mui-appbar{min-height:64px}.mui--appbar-line-height{line-height:64px}.mui--appbar-top{top:64px}}.mui-appbar{background-color:#2196F3;color:#FFF}.mui-btn{animation-duration:.1ms;animation-name:mui-node-inserted;font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase;color:rgba(0,0,0,.87);background-color:#FFF;transition:all .2s ease-in-out;display:inline-block;height:36px;padding:0 26px;margin-top:6px;margin-bottom:6px;border:none;border-radius:2px;cursor:pointer;-ms-touch-action:manipulation;touch-action:manipulation;background-image:none;text-align:center;line-height:36px;vertical-align:middle;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:14px;letter-spacing:.03em;position:relative;overflow:hidden}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{color:rgba(0,0,0,.87);background-color:#fff}.mui-btn[disabled]:active,.mui-btn[disabled]:focus,.mui-btn[disabled]:hover{color:rgba(0,0,0,.87);background-color:#FFF}.mui-btn.mui-btn--flat{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn.mui-btn--flat:active,.mui-btn.mui-btn--flat:focus,.mui-btn.mui-btn--flat:hover{color:rgba(0,0,0,.87);background-color:#f2f2f2}.mui-btn.mui-btn--flat[disabled]:active,.mui-btn.mui-btn--flat[disabled]:focus,.mui-btn.mui-btn--flat[disabled]:hover{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{outline:0;text-decoration:none;color:rgba(0,0,0,.87)}.mui-btn:focus,.mui-btn:hover{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:focus,.mui-btn:hover{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn.mui--is-disabled,.mui-btn:disabled{cursor:not-allowed;pointer-events:none;opacity:.6;box-shadow:none}.mui-btn+.mui-btn{margin-left:8px}.mui-btn--flat{background-color:transparent}.mui-btn--flat:active,.mui-btn--flat:focus,.mui-btn--flat:hover{box-shadow:none;background-color:#f2f2f2}.mui-btn--fab,.mui-btn--raised{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab,.mui-btn--raised{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn--fab{position:relative;padding:0;width:55px;height:55px;line-height:55px;border-radius:50%;z-index:1}.mui-btn--primary{color:#FFF;background-color:#2196F3}.mui-btn--primary:active,.mui-btn--primary:focus,.mui-btn--primary:hover{color:#FFF;background-color:#39a1f4}.mui-btn--primary[disabled]:active,.mui-btn--primary[disabled]:focus,.mui-btn--primary[disabled]:hover{color:#FFF;background-color:#2196F3}.mui-btn--primary.mui-btn--flat{color:#2196F3;background-color:transparent}.mui-btn--primary.mui-btn--flat:active,.mui-btn--primary.mui-btn--flat:focus,.mui-btn--primary.mui-btn--flat:hover{color:#2196F3;background-color:#f2f2f2}.mui-btn--primary.mui-btn--flat[disabled]:active,.mui-btn--primary.mui-btn--flat[disabled]:focus,.mui-btn--primary.mui-btn--flat[disabled]:hover{color:#2196F3;background-color:transparent}.mui-btn--dark{color:#FFF;background-color:#424242}.mui-btn--dark:active,.mui-btn--dark:focus,.mui-btn--dark:hover{color:#FFF;background-color:#4f4f4f}.mui-btn--dark[disabled]:active,.mui-btn--dark[disabled]:focus,.mui-btn--dark[disabled]:hover{color:#FFF;background-color:#424242}.mui-btn--dark.mui-btn--flat{color:#424242;background-color:transparent}.mui-btn--dark.mui-btn--flat:active,.mui-btn--dark.mui-btn--flat:focus,.mui-btn--dark.mui-btn--flat:hover{color:#424242;background-color:#f2f2f2}.mui-btn--dark.mui-btn--flat[disabled]:active,.mui-btn--dark.mui-btn--flat[disabled]:focus,.mui-btn--dark.mui-btn--flat[disabled]:hover{color:#424242;background-color:transparent}.mui-btn--danger{color:#FFF;background-color:#F44336}.mui-btn--danger:active,.mui-btn--danger:focus,.mui-btn--danger:hover{color:#FFF;background-color:#f55a4e}.mui-btn--danger[disabled]:active,.mui-btn--danger[disabled]:focus,.mui-btn--danger[disabled]:hover{color:#FFF;background-color:#F44336}.mui-btn--danger.mui-btn--flat{color:#F44336;background-color:transparent}.mui-btn--danger.mui-btn--flat:active,.mui-btn--danger.mui-btn--flat:focus,.mui-btn--danger.mui-btn--flat:hover{color:#F44336;background-color:#f2f2f2}.mui-btn--danger.mui-btn--flat[disabled]:active,.mui-btn--danger.mui-btn--flat[disabled]:focus,.mui-btn--danger.mui-btn--flat[disabled]:hover{color:#F44336;background-color:transparent}.mui-btn--accent{color:#FFF;background-color:#FF4081}.mui-btn--accent:active,.mui-btn--accent:focus,.mui-btn--accent:hover{color:#FFF;background-color:#ff5a92}.mui-btn--accent[disabled]:active,.mui-btn--accent[disabled]:focus,.mui-btn--accent[disabled]:hover{color:#FFF;background-color:#FF4081}.mui-btn--accent.mui-btn--flat{color:#FF4081;background-color:transparent}.mui-btn--accent.mui-btn--flat:active,.mui-btn--accent.mui-btn--flat:focus,.mui-btn--accent.mui-btn--flat:hover{color:#FF4081;background-color:#f2f2f2}.mui-btn--accent.mui-btn--flat[disabled]:active,.mui-btn--accent.mui-btn--flat[disabled]:focus,.mui-btn--accent.mui-btn--flat[disabled]:hover{color:#FF4081;background-color:transparent}.mui-btn--small{height:30.6px;line-height:30.6px;padding:0 16px;font-size:13px}.mui-btn--large{height:54px;line-height:54px;padding:0 26px;font-size:14px}.mui-btn--fab.mui-btn--small{width:44px;height:44px;line-height:44px}.mui-btn--fab.mui-btn--large{width:75px;height:75px;line-height:75px}.mui-checkbox,.mui-radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.mui-checkbox>label,.mui-radio>label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio],.mui-radio>label>input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px}.mui-checkbox+.mui-checkbox,.mui-radio+.mui-radio{margin-top:-5px}.mui-checkbox--inline,.mui-radio--inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.mui-checkbox--inline>input[type=checkbox],.mui-checkbox--inline>input[type=radio],.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox--inline>label>input[type=radio],.mui-radio--inline>input[type=checkbox],.mui-radio--inline>input[type=radio],.mui-radio--inline>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio]{margin:4px 0 0;line-height:normal}.mui-checkbox--inline+.mui-checkbox--inline,.mui-radio--inline+.mui-radio--inline{margin-top:0;margin-left:10px}.mui-container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container:after,.mui-container:before{content:" ";display:table}.mui-container:after{clear:both}@media (min-width:544px){.mui-container{max-width:570px}}@media (min-width:768px){.mui-container{max-width:740px}}@media (min-width:992px){.mui-container{max-width:960px}}@media (min-width:1200px){.mui-container{max-width:1170px}}.mui-container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container-fluid:after,.mui-container-fluid:before{content:" ";display:table}.mui-container-fluid:after{clear:both}.mui-divider{display:block;height:1px;background-color:rgba(0,0,0,.12)}.mui--divider-top{border-top:1px solid rgba(0,0,0,.12)}.mui--divider-bottom{border-bottom:1px solid rgba(0,0,0,.12)}.mui--divider-left{border-left:1px solid rgba(0,0,0,.12)}.mui--divider-right{border-right:1px solid rgba(0,0,0,.12)}.mui-dropdown{display:inline-block;position:relative}[data-mui-toggle=dropdown]{animation-duration:.1ms;animation-name:mui-node-inserted;outline:0}.mui-dropdown__menu{position:absolute;top:100%;left:0;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#FFF;border-radius:2px;z-index:1;background-clip:padding-box}.mui-dropdown__menu.mui--is-open{display:block}.mui-dropdown__menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);white-space:nowrap}.mui-dropdown__menu>li>a:focus,.mui-dropdown__menu>li>a:hover{text-decoration:none;color:rgba(0,0,0,.87);background-color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a,.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;cursor:not-allowed}.mui-dropdown__menu--right{left:auto;right:0}@media (min-width:544px){.mui-form--inline>.mui-textfield{display:inline-block;margin-bottom:0}.mui-form--inline>.mui-checkbox,.mui-form--inline>.mui-radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.mui-form--inline>.mui-checkbox>label,.mui-form--inline>.mui-radio>label{padding-left:0}.mui-form--inline>.mui-checkbox>label>input[type=checkbox],.mui-form--inline>.mui-radio>label>input[type=radio]{position:relative;margin-left:0}.mui-form--inline>.mui-select{display:inline-block}.mui-form--inline>.mui-btn{margin-bottom:0;margin-top:0;vertical-align:bottom}}.mui-row{margin-left:-15px;margin-right:-15px}.mui-row:after,.mui-row:before{content:" ";display:table}.mui-row:after{clear:both}.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9,.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9,.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9,.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{min-height:1px;padding-left:15px;padding-right:15px}.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{float:left}.mui-col-xs-1{width:8.33333%}.mui-col-xs-2{width:16.66667%}.mui-col-xs-3{width:25%}.mui-col-xs-4{width:33.33333%}.mui-col-xs-5{width:41.66667%}.mui-col-xs-6{width:50%}.mui-col-xs-7{width:58.33333%}.mui-col-xs-8{width:66.66667%}.mui-col-xs-9{width:75%}.mui-col-xs-10{width:83.33333%}.mui-col-xs-11{width:91.66667%}.mui-col-xs-12{width:100%}.mui-col-xs-offset-0{margin-left:0}.mui-col-xs-offset-1{margin-left:8.33333%}.mui-col-xs-offset-2{margin-left:16.66667%}.mui-col-xs-offset-3{margin-left:25%}.mui-col-xs-offset-4{margin-left:33.33333%}.mui-col-xs-offset-5{margin-left:41.66667%}.mui-col-xs-offset-6{margin-left:50%}.mui-col-xs-offset-7{margin-left:58.33333%}.mui-col-xs-offset-8{margin-left:66.66667%}.mui-col-xs-offset-9{margin-left:75%}.mui-col-xs-offset-10{margin-left:83.33333%}.mui-col-xs-offset-11{margin-left:91.66667%}.mui-col-xs-offset-12{margin-left:100%}@media (min-width:544px){.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9{float:left}.mui-col-sm-1{width:8.33333%}.mui-col-sm-2{width:16.66667%}.mui-col-sm-3{width:25%}.mui-col-sm-4{width:33.33333%}.mui-col-sm-5{width:41.66667%}.mui-col-sm-6{width:50%}.mui-col-sm-7{width:58.33333%}.mui-col-sm-8{width:66.66667%}.mui-col-sm-9{width:75%}.mui-col-sm-10{width:83.33333%}.mui-col-sm-11{width:91.66667%}.mui-col-sm-12{width:100%}.mui-col-sm-offset-0{margin-left:0}.mui-col-sm-offset-1{margin-left:8.33333%}.mui-col-sm-offset-2{margin-left:16.66667%}.mui-col-sm-offset-3{margin-left:25%}.mui-col-sm-offset-4{margin-left:33.33333%}.mui-col-sm-offset-5{margin-left:41.66667%}.mui-col-sm-offset-6{margin-left:50%}.mui-col-sm-offset-7{margin-left:58.33333%}.mui-col-sm-offset-8{margin-left:66.66667%}.mui-col-sm-offset-9{margin-left:75%}.mui-col-sm-offset-10{margin-left:83.33333%}.mui-col-sm-offset-11{margin-left:91.66667%}.mui-col-sm-offset-12{margin-left:100%}}@media (min-width:768px){.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9{float:left}.mui-col-md-1{width:8.33333%}.mui-col-md-2{width:16.66667%}.mui-col-md-3{width:25%}.mui-col-md-4{width:33.33333%}.mui-col-md-5{width:41.66667%}.mui-col-md-6{width:50%}.mui-col-md-7{width:58.33333%}.mui-col-md-8{width:66.66667%}.mui-col-md-9{width:75%}.mui-col-md-10{width:83.33333%}.mui-col-md-11{width:91.66667%}.mui-col-md-12{width:100%}.mui-col-md-offset-0{margin-left:0}.mui-col-md-offset-1{margin-left:8.33333%}.mui-col-md-offset-2{margin-left:16.66667%}.mui-col-md-offset-3{margin-left:25%}.mui-col-md-offset-4{margin-left:33.33333%}.mui-col-md-offset-5{margin-left:41.66667%}.mui-col-md-offset-6{margin-left:50%}.mui-col-md-offset-7{margin-left:58.33333%}.mui-col-md-offset-8{margin-left:66.66667%}.mui-col-md-offset-9{margin-left:75%}.mui-col-md-offset-10{margin-left:83.33333%}.mui-col-md-offset-11{margin-left:91.66667%}.mui-col-md-offset-12{margin-left:100%}}@media (min-width:992px){.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9{float:left}.mui-col-lg-1{width:8.33333%}.mui-col-lg-2{width:16.66667%}.mui-col-lg-3{width:25%}.mui-col-lg-4{width:33.33333%}.mui-col-lg-5{width:41.66667%}.mui-col-lg-6{width:50%}.mui-col-lg-7{width:58.33333%}.mui-col-lg-8{width:66.66667%}.mui-col-lg-9{width:75%}.mui-col-lg-10{width:83.33333%}.mui-col-lg-11{width:91.66667%}.mui-col-lg-12{width:100%}.mui-col-lg-offset-0{margin-left:0}.mui-col-lg-offset-1{margin-left:8.33333%}.mui-col-lg-offset-2{margin-left:16.66667%}.mui-col-lg-offset-3{margin-left:25%}.mui-col-lg-offset-4{margin-left:33.33333%}.mui-col-lg-offset-5{margin-left:41.66667%}.mui-col-lg-offset-6{margin-left:50%}.mui-col-lg-offset-7{margin-left:58.33333%}.mui-col-lg-offset-8{margin-left:66.66667%}.mui-col-lg-offset-9{margin-left:75%}.mui-col-lg-offset-10{margin-left:83.33333%}.mui-col-lg-offset-11{margin-left:91.66667%}.mui-col-lg-offset-12{margin-left:100%}}@media (min-width:1200px){.mui-col-xl-1,.mui-col-xl-10,.mui-col-xl-11,.mui-col-xl-12,.mui-col-xl-2,.mui-col-xl-3,.mui-col-xl-4,.mui-col-xl-5,.mui-col-xl-6,.mui-col-xl-7,.mui-col-xl-8,.mui-col-xl-9{float:left}.mui-col-xl-1{width:8.33333%}.mui-col-xl-2{width:16.66667%}.mui-col-xl-3{width:25%}.mui-col-xl-4{width:33.33333%}.mui-col-xl-5{width:41.66667%}.mui-col-xl-6{width:50%}.mui-col-xl-7{width:58.33333%}.mui-col-xl-8{width:66.66667%}.mui-col-xl-9{width:75%}.mui-col-xl-10{width:83.33333%}.mui-col-xl-11{width:91.66667%}.mui-col-xl-12{width:100%}.mui-col-xl-offset-0{margin-left:0}.mui-col-xl-offset-1{margin-left:8.33333%}.mui-col-xl-offset-2{margin-left:16.66667%}.mui-col-xl-offset-3{margin-left:25%}.mui-col-xl-offset-4{margin-left:33.33333%}.mui-col-xl-offset-5{margin-left:41.66667%}.mui-col-xl-offset-6{margin-left:50%}.mui-col-xl-offset-7{margin-left:58.33333%}.mui-col-xl-offset-8{margin-left:66.66667%}.mui-col-xl-offset-9{margin-left:75%}.mui-col-xl-offset-10{margin-left:83.33333%}.mui-col-xl-offset-11{margin-left:91.66667%}.mui-col-xl-offset-12{margin-left:100%}}.mui-panel{padding:15px;margin-bottom:20px;border-radius:0;background-color:#FFF;box-shadow:0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}.mui-panel:after,.mui-panel:before{content:" ";display:table}.mui-panel:after{clear:both}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-panel{box-shadow:0 -1px 2px 0 rgba(0,0,0,.12),-1px 0 2px 0 rgba(0,0,0,.12),0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}}.mui-select{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-select:focus{outline:0}.mui-select:focus>select{height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;height:32px;width:100%;appearance:none;-webkit-appearance:none;-moz-appearance:none;outline:0;border:none;border-bottom:1px solid rgba(0,0,0,.26);border-radius:0;box-shadow:none;background-color:transparent;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iNiIgd2lkdGg9IjEwIj48cG9seWdvbiBwb2ludHM9IjAsMCAxMCwwIDUsNiIgc3R5bGU9ImZpbGw6cmdiYSgwLDAsMCwuMjQpOyIvPjwvc3ZnPg==);background-repeat:no-repeat;background-position:right center;cursor:pointer;color:rgba(0,0,0,.87);font-size:16px;padding:0 25px 0 0}.mui-select>select::-ms-expand{display:none}.mui-select>select:focus{outline:0;height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select:disabled{color:rgba(0,0,0,.38);cursor:not-allowed;background-color:transparent;opacity:1}.mui-select__menu{position:absolute;z-index:2;min-width:100%;overflow-y:auto;padding:8px 0;background-color:#FFF;font-size:16px}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-select__menu{border-left:1px solid rgba(0,0,0,.12);border-top:1px solid rgba(0,0,0,.12)}}.mui-select__menu>div{padding:0 22px;height:42px;line-height:42px;cursor:pointer;white-space:nowrap}.mui-select__menu>div:hover{background-color:#E0E0E0}.mui-select__menu>div.mui--is-selected{background-color:#EEE}th{text-align:left}.mui-table{width:100%;max-width:100%;margin-bottom:20px}.mui-table>tbody>tr>td,.mui-table>tbody>tr>th,.mui-table>tfoot>tr>td,.mui-table>tfoot>tr>th,.mui-table>thead>tr>td,.mui-table>thead>tr>th{padding:10px;line-height:1.429}.mui-table>thead>tr>th{border-bottom:2px solid rgba(0,0,0,.12);font-weight:700}.mui-table>tbody+tbody{border-top:2px solid rgba(0,0,0,.12)}.mui-table.mui-table--bordered>tbody>tr>td{border-bottom:1px solid rgba(0,0,0,.12)}.mui-tabs__bar{list-style:none;padding-left:0;margin-bottom:0;background-color:transparent;white-space:nowrap;overflow-x:auto}.mui-tabs__bar>li{display:inline-block}.mui-tabs__bar>li>a{display:block;white-space:nowrap;text-transform:uppercase;font-weight:500;font-size:14px;color:rgba(0,0,0,.87);cursor:default;height:48px;line-height:48px;padding-left:24px;padding-right:24px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-tabs__bar>li>a:hover{text-decoration:none}.mui-tabs__bar>li.mui--is-active{border-bottom:2px solid #2196F3}.mui-tabs__bar>li.mui--is-active>a{color:#2196F3}.mui-tabs__bar.mui-tabs__bar--justified{display:table;width:100%;table-layout:fixed}.mui-tabs__bar.mui-tabs__bar--justified>li{display:table-cell}.mui-tabs__bar.mui-tabs__bar--justified>li>a{text-align:center;padding-left:0;padding-right:0}.mui-tabs__pane{display:none}.mui-tabs__pane.mui--is-active{display:block}[data-mui-toggle=tab]{animation-duration:.1ms;animation-name:mui-node-inserted}.mui-textfield{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-textfield>label{position:absolute;top:0;display:block;width:100%;color:rgba(0,0,0,.54);font-size:12px;font-weight:400;line-height:15px;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.mui-textfield>textarea{padding-top:5px}.mui-textfield>input,.mui-textfield>textarea{display:block}.mui-textfield>input:focus~label,.mui-textfield>textarea:focus~label{color:#2196F3}.mui-textfield--float-label>label{position:absolute;transform:translate(0,15px);font-size:16px;line-height:32px;color:rgba(0,0,0,.26);text-overflow:clip;cursor:text;pointer-events:none}.mui-textfield--float-label>input:focus~label,.mui-textfield--float-label>textarea:focus~label{transform:translate(0,0);font-size:12px;line-height:15px;text-overflow:ellipsis}.mui-textfield--float-label>input:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>input:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>input:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>textarea:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:rgba(0,0,0,.54);font-size:12px;line-height:15px;transform:translate(0,0);text-overflow:ellipsis}.mui-textfield--wrap-label{display:table;width:100%;padding-top:0}.mui-textfield--wrap-label:not(.mui-textfield--float-label)>label{display:table-header-group;position:static;white-space:normal;overflow-x:visible}.mui-textfield>input,.mui-textfield>textarea{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;background-color:transparent;color:rgba(0,0,0,.87);border:none;border-bottom:1px solid rgba(0,0,0,.26);outline:0;width:100%;font-size:16px;padding:0;box-shadow:none;border-radius:0;background-image:none}.mui-textfield>input:focus,.mui-textfield>textarea:focus{border-color:#2196F3;border-width:2px}.mui-textfield>input:-moz-read-only,.mui-textfield>input:disabled,.mui-textfield>textarea:-moz-read-only,.mui-textfield>textarea:disabled{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input:disabled,.mui-textfield>input:read-only,.mui-textfield>textarea:disabled,.mui-textfield>textarea:read-only{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input::-webkit-input-placeholder,.mui-textfield>textarea::-webkit-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::-moz-placeholder,.mui-textfield>textarea::-moz-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input:-ms-input-placeholder,.mui-textfield>textarea:-ms-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::placeholder,.mui-textfield>textarea::placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input{height:32px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>textarea{min-height:64px}.mui-textfield>textarea[rows]:not([rows="2"]):focus{margin-bottom:-1px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):not(:required),.mui-textfield>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required),.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty){border-color:#F44336;border-width:2px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty){height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required)~label,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):not(:required)~label,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:#F44336}.mui-textfield:not(.mui-textfield--float-label)>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label{color:#F44336}@keyframes mui-node-inserted{from{opacity:.99}to{opacity:1}}.mui--no-transition{transition:none!important}.mui--no-user-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.mui--text-left{text-align:left!important}.mui--text-right{text-align:right!important}.mui--text-center{text-align:center!important}.mui--text-justify{text-align:justify!important}.mui--text-nowrap{white-space:nowrap!important}.mui--align-baseline{vertical-align:baseline!important}.mui--align-top{vertical-align:top!important}.mui--align-middle{vertical-align:middle!important}.mui--align-bottom{vertical-align:bottom!important}.mui--text-dark{color:rgba(0,0,0,.87)}.mui--text-dark-secondary{color:rgba(0,0,0,.54)}.mui--text-dark-hint{color:rgba(0,0,0,.38)}.mui--text-light{color:#FFF}.mui--text-light-secondary{color:rgba(255,255,255,.7)}.mui--text-light-hint{color:rgba(255,255,255,.3)}.mui--text-accent{color:rgba(255,64,129,.87)}.mui--text-accent-secondary{color:rgba(255,64,129,.54)}.mui--text-accent-hint{color:rgba(255,64,129,.38)}.mui--text-black{color:#000}.mui--text-white{color:#FFF}.mui--text-danger{color:#F44336}.mui-list--unstyled{padding-left:0;list-style:none}.mui-list--inline{padding-left:0;list-style:none;margin-left:-5px}.mui-list--inline>li{display:inline-block;padding-left:5px;padding-right:5px}.mui--z1,.mui-dropdown__menu,.mui-select__menu{box-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24)}.mui--z2{box-shadow:0 3px 6px rgba(0,0,0,.16),0 3px 6px rgba(0,0,0,.23)}.mui--z3{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}.mui--z4{box-shadow:0 14px 28px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.22)}.mui--z5{box-shadow:0 19px 38px rgba(0,0,0,.3),0 15px 12px rgba(0,0,0,.22)}.mui--clearfix:after,.mui--clearfix:before{content:" ";display:table}.mui--clearfix:after{clear:both}.mui--pull-right{float:right!important}.mui--pull-left{float:left!important}.mui--hide{display:none!important}.mui--show{display:block!important}.mui--invisible{visibility:hidden}.mui--overflow-hidden{overflow:hidden!important}.mui--overflow-hidden-x{overflow-x:hidden!important}.mui--overflow-hidden-y{overflow-y:hidden!important}.mui--visible-lg-block,.mui--visible-lg-inline,.mui--visible-lg-inline-block,.mui--visible-md-block,.mui--visible-md-inline,.mui--visible-md-inline-block,.mui--visible-sm-block,.mui--visible-sm-inline,.mui--visible-sm-inline-block,.mui--visible-xl-block,.mui--visible-xl-inline,.mui--visible-xl-inline-block,.mui--visible-xs-block,.mui--visible-xs-inline,.mui--visible-xs-inline-block{display:none!important}@media (max-width:543px){.mui-visible-xs{display:block!important}table.mui-visible-xs{display:table}tr.mui-visible-xs{display:table-row!important}td.mui-visible-xs,th.mui-visible-xs{display:table-cell!important}.mui--visible-xs-block{display:block!important}.mui--visible-xs-inline{display:inline!important}.mui--visible-xs-inline-block{display:inline-block!important}}@media (min-width:544px) and (max-width:767px){.mui-visible-sm{display:block!important}table.mui-visible-sm{display:table}tr.mui-visible-sm{display:table-row!important}td.mui-visible-sm,th.mui-visible-sm{display:table-cell!important}.mui--visible-sm-block{display:block!important}.mui--visible-sm-inline{display:inline!important}.mui--visible-sm-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.mui-visible-md{display:block!important}table.mui-visible-md{display:table}tr.mui-visible-md{display:table-row!important}td.mui-visible-md,th.mui-visible-md{display:table-cell!important}.mui--visible-md-block{display:block!important}.mui--visible-md-inline{display:inline!important}.mui--visible-md-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.mui-visible-lg{display:block!important}table.mui-visible-lg{display:table}tr.mui-visible-lg{display:table-row!important}td.mui-visible-lg,th.mui-visible-lg{display:table-cell!important}.mui--visible-lg-block{display:block!important}.mui--visible-lg-inline{display:inline!important}.mui--visible-lg-inline-block{display:inline-block!important}}@media (min-width:1200px){.mui-visible-xl{display:block!important}table.mui-visible-xl{display:table}tr.mui-visible-xl{display:table-row!important}td.mui-visible-xl,th.mui-visible-xl{display:table-cell!important}.mui--visible-xl-block{display:block!important}.mui--visible-xl-inline{display:inline!important}.mui--visible-xl-inline-block{display:inline-block!important}}@media (max-width:543px){.mui--hidden-xs{display:none!important}}@media (min-width:544px) and (max-width:767px){.mui--hidden-sm{display:none!important}}@media (min-width:768px) and (max-width:991px){.mui--hidden-md{display:none!important}}@media (min-width:992px) and (max-width:1199px){.mui--hidden-lg{display:none!important}}@media (min-width:1200px){.mui--hidden-xl{display:none!important}}body.mui-body--scroll-lock{overflow:hidden!important}#mui-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:99999999;background-color:rgba(0,0,0,.2);overflow:auto}.mui-ripple-effect{position:absolute;border-radius:50%;pointer-events:none;opacity:0;animation:mui-ripple-animation 2s}@keyframes mui-ripple-animation{from{transform:scale(1);opacity:.4}to{transform:scale(100);opacity:0}}.mui-btn>.mui-ripple-effect{background-color:#a6a6a6}.mui-btn--primary>.mui-ripple-effect{background-color:#FFF}.mui-btn--dark>.mui-ripple-effect{background-color:#FFF}.mui-btn--danger>.mui-ripple-effect{background-color:#FFF}.mui-btn--accent>.mui-ripple-effect{background-color:#FFF}.mui-btn--flat>.mui-ripple-effect{background-color:#a6a6a6}.mui--text-display4{font-weight:300;font-size:112px;line-height:112px}.mui--text-display3{font-weight:400;font-size:56px;line-height:56px}.mui--text-display2{font-weight:400;font-size:45px;line-height:48px}.mui--text-display1,h1{font-weight:400;font-size:34px;line-height:40px}.mui--text-headline,h2{font-weight:400;font-size:24px;line-height:32px}.mui--text-title,h3{font-weight:400;font-size:20px;line-height:28px}.mui--text-subhead,h4{font-weight:400;font-size:16px;line-height:24px}.mui--text-body2,h5{font-weight:500;font-size:14px;line-height:24px}.mui--text-body1{font-weight:400;font-size:14px;line-height:20px}.mui--text-caption{font-weight:400;font-size:12px;line-height:16px}.mui--text-menu{font-weight:500;font-size:13px;line-height:17px}.mui--text-button{font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase} \ No newline at end of file diff --git a/www/libs/mui/packages/cdn/email/mui-email-inline.css b/www/libs/mui/packages/cdn/email/mui-email-inline.css new file mode 100644 index 0000000..da4dcc2 --- /dev/null +++ b/www/libs/mui/packages/cdn/email/mui-email-inline.css @@ -0,0 +1,686 @@ +body { + width: 100% !important; + min-width: 100%; + margin: 0; + padding: 0; +} + +img { + border: 0 none; + height: auto; + line-height: 100%; + outline: none; + text-decoration: none; +} + +a img { + border: 0 none; +} + +table { + border-spacing: 0; + border-collapse: collapse; +} + +td { + padding: 0; + text-align: left; + word-break: break-word; + -webkit-hyphens: auto; + -moz-hyphens: auto; + hyphens: auto; + border-collapse: collapse !important; +} + +table, td { + mso-table-lspace: 0pt; + mso-table-rspace: 0pt; +} + +body, +table, +td, +p, +a, +li, +blockquote { + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +img { + -ms-interpolation-mode: bicubic; +} + +/** + * MUI Colors module + */ +/** + * MUI Email Reboot + */ +body { + color: #212121; + font-family: "Helvetica Neue", Helvetica, Arial, Verdana, "Trebuchet MS"; + font-weight: 400; + font-size: 14px; + line-height: 1.429; + letter-spacing: 0.001em; + background-color: #FFF; +} + +a { + color: #2196F3; + text-decoration: none; +} + +p { + margin: 0 0 10px; +} + +hr { + color: #e0e0e0; + background-color: #e0e0e0; + height: 1px; + border: none; +} + +strong { + font-weight: 700; +} + +h1, h2, h3 { + margin-top: 20px; + margin-bottom: 10px; +} + +h4, h5, h6 { + margin-top: 10px; + margin-bottom: 10px; +} + +/** + * MUI Email Body Component + */ +.mui-body { + margin: 0; + padding: 0; + height: 100%; + width: 100%; + color: #212121; + font-family: "Helvetica Neue", Helvetica, Arial, Verdana, "Trebuchet MS"; + font-weight: 400; + font-size: 14px; + line-height: 1.429; + letter-spacing: 0.001em; + background-color: #FFF; +} + +/** + * MUI Email Buttons + */ +.mui-btn { + cursor: pointer; + white-space: nowrap; +} + +a.mui-btn { + font-weight: 500; + font-size: 14px; + color: #212121; + line-height: 14px; + letter-spacing: 0.03em; + text-transform: uppercase; + border-top: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; + border-top: 1px solid #FFF; + border-left: 1px solid #FFF; + border-right: 1px solid #FFF; + border-bottom: 1px solid #FFF; + color: #212121; + background-color: #FFF; + display: inline-block; + text-decoration: none; + text-align: center; + border-radius: 3px; + padding: 10px 25px; + background-color: transparent; +} + +a.mui-btn.mui-btn--raised { + border-top: 1px solid #f2f2f2; + border-left: 1px solid #e6e6e6; + border-right: 1px solid #e6e6e6; + border-bottom: 2px solid #bababa; +} + +a.mui-btn.mui-btn--flat { + background-color: transparent; + color: #212121; + border-top: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; +} + +a.mui-btn.mui-btn--primary { + border-top: 1px solid #2196F3; + border-left: 1px solid #2196F3; + border-right: 1px solid #2196F3; + border-bottom: 1px solid #2196F3; + color: #FFF; + background-color: #2196F3; +} + +a.mui-btn.mui-btn--primary.mui-btn--raised { + border-top: 1px solid #51adf6; + border-left: 1px solid #2196F3; + border-right: 1px solid #2196F3; + border-bottom: 2px solid #0a6ebd; +} + +a.mui-btn.mui-btn--primary.mui-btn--flat { + background-color: transparent; + color: #2196F3; + border-top: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; +} + +a.mui-btn.mui-btn--danger { + border-top: 1px solid #F44336; + border-left: 1px solid #F44336; + border-right: 1px solid #F44336; + border-bottom: 1px solid #F44336; + color: #FFF; + background-color: #F44336; +} + +a.mui-btn.mui-btn--danger.mui-btn--raised { + border-top: 1px solid #f77066; + border-left: 1px solid #F44336; + border-right: 1px solid #F44336; + border-bottom: 2px solid #d2190b; +} + +a.mui-btn.mui-btn--danger.mui-btn--flat { + background-color: transparent; + color: #F44336; + border-top: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; +} + +a.mui-btn.mui-btn--dark { + border-top: 1px solid #424242; + border-left: 1px solid #424242; + border-right: 1px solid #424242; + border-bottom: 1px solid #424242; + color: #FFF; + background-color: #424242; +} + +a.mui-btn.mui-btn--dark.mui-btn--raised { + border-top: 1px solid #5c5c5c; + border-left: 1px solid #424242; + border-right: 1px solid #424242; + border-bottom: 2px solid #1c1c1c; +} + +a.mui-btn.mui-btn--dark.mui-btn--flat { + background-color: transparent; + color: #424242; + border-top: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; +} + +a.mui-btn.mui-btn--accent { + border-top: 1px solid #FF4081; + border-left: 1px solid #FF4081; + border-right: 1px solid #FF4081; + border-bottom: 1px solid #FF4081; + color: #FFF; + background-color: #FF4081; +} + +a.mui-btn.mui-btn--accent.mui-btn--raised { + border-top: 1px solid #ff73a3; + border-left: 1px solid #FF4081; + border-right: 1px solid #FF4081; + border-bottom: 2px solid #f30053; +} + +a.mui-btn.mui-btn--accent.mui-btn--flat { + background-color: transparent; + color: #FF4081; + border-top: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; +} + +table.mui-btn > tr > td, +table.mui-btn > tbody > tr > td { + background-color: #FFF; +} + +table.mui-btn > tr > td > a, +table.mui-btn > tbody > tr > td > a { + color: #212121; + border-top: 1px solid #FFF; + border-left: 1px solid #FFF; + border-right: 1px solid #FFF; + border-bottom: 1px solid #FFF; +} + +table.mui-btn.mui-btn--raised > tr > td > a, +table.mui-btn.mui-btn--raised > tbody > tr > td > a { + border-top: 1px solid #f2f2f2; + border-left: 1px solid #e6e6e6; + border-right: 1px solid #e6e6e6; + border-bottom: 2px solid #bababa; +} + +table.mui-btn.mui-btn--flat > tr > td, +table.mui-btn.mui-btn--flat > tbody > tr > td { + background-color: transparent; +} + +table.mui-btn.mui-btn--flat > tr > td > a, +table.mui-btn.mui-btn--flat > tbody > tr > td > a { + color: #212121; + border-top: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; +} + +table.mui-btn > tr > td, +table.mui-btn > tbody > tr > td { + border-radius: 3px; +} + +table.mui-btn > tr > td > a, +table.mui-btn > tbody > tr > td > a { + font-weight: 500; + font-size: 14px; + color: #212121; + line-height: 14px; + letter-spacing: 0.03em; + text-transform: uppercase; + border-top: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; + display: inline-block; + text-decoration: none; + text-align: center; + border-radius: 3px; + padding: 10px 25px; + background-color: transparent; +} + +table.mui-btn.mui-btn--primary > tr > td, +table.mui-btn.mui-btn--primary > tbody > tr > td { + background-color: #2196F3; +} + +table.mui-btn.mui-btn--primary > tr > td > a, +table.mui-btn.mui-btn--primary > tbody > tr > td > a { + color: #FFF; + border-top: 1px solid #2196F3; + border-left: 1px solid #2196F3; + border-right: 1px solid #2196F3; + border-bottom: 1px solid #2196F3; +} + +table.mui-btn.mui-btn--primary.mui-btn--raised > tr > td > a, +table.mui-btn.mui-btn--primary.mui-btn--raised > tbody > tr > td > a { + border-top: 1px solid #51adf6; + border-left: 1px solid #2196F3; + border-right: 1px solid #2196F3; + border-bottom: 2px solid #0a6ebd; +} + +table.mui-btn.mui-btn--primary.mui-btn--flat > tr > td, +table.mui-btn.mui-btn--primary.mui-btn--flat > tbody > tr > td { + background-color: transparent; +} + +table.mui-btn.mui-btn--primary.mui-btn--flat > tr > td > a, +table.mui-btn.mui-btn--primary.mui-btn--flat > tbody > tr > td > a { + color: #2196F3; + border-top: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; +} + +table.mui-btn.mui-btn--danger > tr > td, +table.mui-btn.mui-btn--danger > tbody > tr > td { + background-color: #F44336; +} + +table.mui-btn.mui-btn--danger > tr > td > a, +table.mui-btn.mui-btn--danger > tbody > tr > td > a { + color: #FFF; + border-top: 1px solid #F44336; + border-left: 1px solid #F44336; + border-right: 1px solid #F44336; + border-bottom: 1px solid #F44336; +} + +table.mui-btn.mui-btn--danger.mui-btn--raised > tr > td > a, +table.mui-btn.mui-btn--danger.mui-btn--raised > tbody > tr > td > a { + border-top: 1px solid #f77066; + border-left: 1px solid #F44336; + border-right: 1px solid #F44336; + border-bottom: 2px solid #d2190b; +} + +table.mui-btn.mui-btn--danger.mui-btn--flat > tr > td, +table.mui-btn.mui-btn--danger.mui-btn--flat > tbody > tr > td { + background-color: transparent; +} + +table.mui-btn.mui-btn--danger.mui-btn--flat > tr > td > a, +table.mui-btn.mui-btn--danger.mui-btn--flat > tbody > tr > td > a { + color: #F44336; + border-top: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; +} + +table.mui-btn.mui-btn--dark > tr > td, +table.mui-btn.mui-btn--dark > tbody > tr > td { + background-color: #424242; +} + +table.mui-btn.mui-btn--dark > tr > td > a, +table.mui-btn.mui-btn--dark > tbody > tr > td > a { + color: #FFF; + border-top: 1px solid #424242; + border-left: 1px solid #424242; + border-right: 1px solid #424242; + border-bottom: 1px solid #424242; +} + +table.mui-btn.mui-btn--dark.mui-btn--raised > tr > td > a, +table.mui-btn.mui-btn--dark.mui-btn--raised > tbody > tr > td > a { + border-top: 1px solid #5c5c5c; + border-left: 1px solid #424242; + border-right: 1px solid #424242; + border-bottom: 2px solid #1c1c1c; +} + +table.mui-btn.mui-btn--dark.mui-btn--flat > tr > td, +table.mui-btn.mui-btn--dark.mui-btn--flat > tbody > tr > td { + background-color: transparent; +} + +table.mui-btn.mui-btn--dark.mui-btn--flat > tr > td > a, +table.mui-btn.mui-btn--dark.mui-btn--flat > tbody > tr > td > a { + color: #424242; + border-top: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; +} + +table.mui-btn.mui-btn--accent > tr > td, +table.mui-btn.mui-btn--accent > tbody > tr > td { + background-color: #FF4081; +} + +table.mui-btn.mui-btn--accent > tr > td > a, +table.mui-btn.mui-btn--accent > tbody > tr > td > a { + color: #FFF; + border-top: 1px solid #FF4081; + border-left: 1px solid #FF4081; + border-right: 1px solid #FF4081; + border-bottom: 1px solid #FF4081; +} + +table.mui-btn.mui-btn--accent.mui-btn--raised > tr > td > a, +table.mui-btn.mui-btn--accent.mui-btn--raised > tbody > tr > td > a { + border-top: 1px solid #ff73a3; + border-left: 1px solid #FF4081; + border-right: 1px solid #FF4081; + border-bottom: 2px solid #f30053; +} + +table.mui-btn.mui-btn--accent.mui-btn--flat > tr > td, +table.mui-btn.mui-btn--accent.mui-btn--flat > tbody > tr > td { + background-color: transparent; +} + +table.mui-btn.mui-btn--accent.mui-btn--flat > tr > td > a, +table.mui-btn.mui-btn--accent.mui-btn--flat > tbody > tr > td > a { + color: #FF4081; + border-top: 1px solid transparent; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; +} + +a.mui-btn--small, +table.mui-btn--small > tr > td > a, +table.mui-btn--small > tbody > tr > td > a { + font-size: 13px; + padding: 7.8px 15px; +} + +a.mui-btn--large, +table.mui-btn--large > tr > td > a, +table.mui-btn--large > tbody > tr > td > a { + font-size: 14px; + padding: 19px 25px; +} + +/** + * MUI Email Containers + */ +.mui-container, .mui-container-fixed { + max-width: 600px; + display: block; + margin: 0 auto; + clear: both; + text-align: left; + padding-left: 15px; + padding-right: 15px; +} + +.mui-container-fixed { + width: 600px; +} + +/** + * MUI Email Dividers + */ +.mui-divider { + display: block; + height: 1px; + background-color: #e0e0e0; +} + +.mui--divider-top { + border-top: 1px solid #e0e0e0; +} + +.mui--divider-bottom { + border-bottom: 1px solid #e0e0e0; +} + +.mui--divider-left { + border-left: 1px solid #e0e0e0; +} + +.mui--divider-right { + border-right: 1px solid #e0e0e0; +} + +/** + * MUI Email Panel + */ +.mui-panel { + padding: 15px; + border-radius: 0; + background-color: #FFF; + border-top: 1px solid #ededed; + border-left: 1px solid #e6e6e6; + border-right: 1px solid #e6e6e6; + border-bottom: 2px solid #d4d4d4; +} + +/** + * MUI Email Helpers + */ +.mui--text-left { + text-align: left; +} + +.mui--text-right { + text-align: right; +} + +.mui--text-center { + text-align: center; +} + +.mui--text-justify { + text-align: justify; +} + +.mui-image--fix { + display: block; +} + +.mui--text-dark { + color: #212121; +} + +.mui--text-dark-secondary { + color: #757575; +} + +.mui--text-dark-hint { + color: #9e9e9e; +} + +.mui--text-light { + color: #FFF; +} + +.mui--text-light-secondary { + color: #b3b3b3; +} + +.mui--text-light-hint { + color: gray; +} + +.mui--text-accent { + color: #FF4081; +} + +.mui--text-accent-secondary { + color: #ff82ad; +} + +.mui--text-accent-hint { + color: #ffa6c4; +} + +.mui--text-black { + color: #000; +} + +.mui--text-white { + color: #FFF; +} + +.mui--text-danger { + color: #F44336; +} + +/** + * MUI Email Typography + */ +.mui--text-display4 { + font-weight: 300; + font-size: 112px; + line-height: 112px; +} + +.mui--text-display3 { + font-weight: 400; + font-size: 56px; + line-height: 56px; +} + +.mui--text-display2 { + font-weight: 400; + font-size: 45px; + line-height: 48px; +} + +.mui--text-display1, h1 { + font-weight: 400; + font-size: 34px; + line-height: 40px; +} + +.mui--text-headline, h2 { + font-weight: 400; + font-size: 24px; + line-height: 32px; +} + +.mui--text-title, h3 { + font-weight: 400; + font-size: 20px; + line-height: 28px; +} + +.mui--text-subhead, h4 { + font-weight: 400; + font-size: 16px; + line-height: 24px; +} + +.mui--text-body2, h5 { + font-weight: 500; + font-size: 14px; + line-height: 24px; +} + +.mui--text-body1 { + font-weight: 400; + font-size: 14px; + line-height: 20px; +} + +.mui--text-caption { + font-weight: 400; + font-size: 12px; + line-height: 16px; +} + +.mui--text-menu { + font-weight: 500; + font-size: 13px; + line-height: 17px; +} + +.mui--text-button { + font-weight: 500; + font-size: 14px; + line-height: 18px; + text-transform: uppercase; +} diff --git a/www/libs/mui/packages/cdn/email/mui-email-styletag.css b/www/libs/mui/packages/cdn/email/mui-email-styletag.css new file mode 100644 index 0000000..1471793 --- /dev/null +++ b/www/libs/mui/packages/cdn/email/mui-email-styletag.css @@ -0,0 +1,36 @@ +/** + * MUI Colors module + */ +/** + * MUI Email Styletag + */ +#outlook a { + padding: 0; +} + +.ReadMsgBody { + width: 100%; +} + +.ExternalClass { + width: 100%; +} + +.ExternalClass, +.ExternalClass p, +.ExternalClass span, +.ExternalClass font, +.ExternalClass td, +.ExternalClass div { + line-height: 100%; +} + +.mui-container-fixed { + width: 600px; + display: block; + margin: 0 auto; + clear: both; + text-align: left; + padding-left: 15px; + padding-right: 15px; +} diff --git a/www/libs/mui/packages/cdn/extra/mui-angular-combined.js b/www/libs/mui/packages/cdn/extra/mui-angular-combined.js new file mode 100644 index 0000000..ab809aa --- /dev/null +++ b/www/libs/mui/packages/cdn/extra/mui-angular-combined.js @@ -0,0 +1,2 @@ +!function(i){var e=i.babelHelpers={};e.interopRequireDefault=function(i){return i&&i.__esModule?i:{"default":i}},e.interopRequireWildcard=function(i){if(i&&i.__esModule)return i;var e={};if(null!=i)for(var t in i)Object.prototype.hasOwnProperty.call(i,t)&&(e[t]=i[t]);return e["default"]=i,e}}("undefined"==typeof global?self:global),function i(e,t,o){function n(a,r){if(!t[a]){if(!e[a]){var u="function"==typeof require&&require;if(!r&&u)return u(a,!0);if(l)return l(a,!0);throw new Error("Cannot find module '"+a+"'")}var m=t[a]={exports:{}};e[a][0].call(m.exports,function(i){var t=e[a][1][i];return n(t?t:i)},m,m.exports,i,e,t,o)}return t[a].exports}for(var l="function"==typeof require&&require,a=0;as&&(f=r+(t+1)*a-(-1*o+n+l),b=e*a+2*r-p,g=Math.min(f,b)),{height:p+"px",top:o+"px",scrollTop:g}}var n=15,l=32,a=42,r=8;e.exports={getMenuPositionalCSS:o}},{}],5:[function(i,e,t){"use strict";function o(i,e){if(e&&i.setAttribute){for(var t,o=b(i),n=e.split(" "),l=0;l-1:!1}function a(i){if(void 0===i)return"undefined";var e=Object.prototype.toString.call(i);if(0===e.indexOf("[object "))return e.slice(8,-1).toLowerCase();throw new Error("MUI: Could not understand type: "+e)}function r(i,e,t,o){o=void 0===o?!1:o,i.addEventListener(e,t,o);var n=i._muiEventCache=i._muiEventCache||{};n[e]=n[e]||[],n[e].push([t,o])}function u(i,e,t,o){o=void 0===o?!1:o;var n,l,a=i._muiEventCache=i._muiEventCache||{},r=a[e]||[];for(l=r.length;l--;)n=r[l],(void 0===t||n[0]===t&&n[1]===o)&&(r.splice(l,1),i.removeEventListener(e,n[0],n[1]))}function m(i,e,t,o){r(i,e,function n(o){t&&t.apply(this,arguments),u(i,e,n)},o)}function d(i,e){var t=window;if(void 0===e){if(i===t){var o=document.documentElement;return(t.pageXOffset||o.scrollLeft)-(o.clientLeft||0)}return i.scrollLeft}i===t?t.scrollTo(e,s(t)):i.scrollLeft=e}function s(i,e){var t=window;if(void 0===e){if(i===t){var o=document.documentElement;return(t.pageYOffset||o.scrollTop)-(o.clientTop||0)}return i.scrollTop}i===t?t.scrollTo(d(t),e):i.scrollTop=e}function c(i){var e=window,t=i.getBoundingClientRect(),o=s(e),n=d(e);return{top:t.top+o,left:t.left+n,height:t.height,width:t.width}}function p(i){var e=!1,t=!0,o=document,n=o.defaultView,l=o.documentElement,a=o.addEventListener?"addEventListener":"attachEvent",r=o.addEventListener?"removeEventListener":"detachEvent",u=o.addEventListener?"":"on",m=function c(t){"readystatechange"==t.type&&"complete"!=o.readyState||(("load"==t.type?n:o)[r](u+t.type,c,!1),!e&&(e=!0)&&i.call(n,t.type||t))},d=function p(){try{l.doScroll("left")}catch(i){return void setTimeout(p,50)}m("poll")};if("complete"==o.readyState)i.call(n,"lazy");else{if(o.createEventObject&&l.doScroll){try{t=!n.frameElement}catch(s){}t&&d()}o[a](u+"DOMContentLoaded",m,!1),o[a](u+"readystatechange",m,!1),n[a](u+"load",m,!1)}}function f(i,e){if(e&&i.setAttribute){for(var t,o=b(i),n=e.split(" "),l=0;l=0;)o=o.replace(" "+t+" "," ");i.setAttribute("class",o.trim())}}function b(i){var e=(i.getAttribute("class")||"").replace(/[\n\t]/g,"");return" "+e+" "}function g(i){return i.replace(v,function(i,e,t,o){return o?t.toUpperCase():t}).replace(y,"Moz$1")}function x(i,e,t){var o;return o=t.getPropertyValue(e),""!==o||i.ownerDocument||(o=i.style[g(e)]),o}var h,v=/([\:\-\_]+(.))/g,y=/^moz([A-Z])/;h={multiple:!0,selected:!0,checked:!0,disabled:!0,readonly:!0,required:!0,open:!0},e.exports={addClass:o,css:n,hasClass:l,off:u,offset:c,on:r,one:m,ready:p,removeClass:f,type:a,scrollLeft:d,scrollTop:s}},{}],6:[function(i,e,t){"use strict";function o(){var i=window;if(g.debug&&"undefined"!=typeof i.console)try{i.console.log.apply(i.console,arguments)}catch(e){var t=Array.prototype.slice.call(arguments);i.console.log(t.join("\n"))}}function n(i){var e,t=document;e=t.head||t.getElementsByTagName("head")[0]||t.documentElement;var o=t.createElement("style");return o.type="text/css",o.styleSheet?o.styleSheet.cssText=i:o.appendChild(t.createTextNode(i)),e.insertBefore(o,e.firstChild),o}function l(i,e){if(!e)throw new Error("MUI: "+i);"undefined"!=typeof console&&console.error("MUI Warning: "+i)}function a(i){if(h.push(i),void 0===h._initialized){var e=document;x.on(e,"animationstart",r),x.on(e,"mozAnimationStart",r),x.on(e,"webkitAnimationStart",r),h._initialized=!0}}function r(i){if("mui-node-inserted"===i.animationName)for(var e=i.target,t=h.length-1;t>=0;t--)h[t](e)}function u(i){var e="";for(var t in i)e+=i[t]?t+" ":"";return e.trim()}function m(){if(void 0!==b)return b;var i=document.createElement("x");return i.style.cssText="pointer-events:auto",b="auto"===i.style.pointerEvents}function d(i,e){return function(){i[e].apply(i,arguments)}}function s(i,e,t,o,n){var l,a=document.createEvent("HTMLEvents"),t=void 0!==t?t:!0,o=void 0!==o?o:!0;if(a.initEvent(e,t,o),n)for(l in n)a[l]=n[l];return i&&i.dispatchEvent(a),a}function c(){if(v+=1,1===v){var i=window,e=document;f={left:x.scrollLeft(i),top:x.scrollTop(i)},x.addClass(e.body,y),i.scrollTo(f.left,f.top)}}function p(){if(0!==v&&(v-=1,0===v)){var i=window,e=document;x.removeClass(e.body,y),i.scrollTo(f.left,f.top)}}var f,b,g=i("../config"),x=i("./jqLite"),h=[],v=0,y="mui-body--scroll-lock";e.exports={callback:d,classNames:u,disableScrollLock:p,dispatchEvent:s,enableScrollLock:c,log:o,loadStyle:n,onNodeInserted:a,raiseError:l,supportsPointerEvents:m}},{"../config":3,"./jqLite":5}],7:[function(i,e,t){e.exports='/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-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{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}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{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{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-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:border-box}:after,:before{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:Arial,Verdana,Tahoma;font-size:14px;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);background-color:#FFF}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#2196F3;text-decoration:none}a:focus,a:hover{color:#1976D2;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}p{margin:0 0 10px}ol,ul{margin-top:0;margin-bottom:10px}figure{margin:0}img{vertical-align:middle}hr{margin-top:20px;margin-bottom:20px;border:0;height:1px;background-color:rgba(0,0,0,.12)}legend{display:block;width:100%;padding:0;margin-bottom:10px;font-size:21px;color:rgba(0,0,0,.87);line-height:inherit;border:0}input[type=search]{box-sizing:border-box;-webkit-appearance:none}input[type=checkbox]:focus,input[type=radio]:focus,input[type=file]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type=checkbox]:disabled,input[type=radio]:disabled{cursor:not-allowed}strong{font-weight:700}abbr[title]{cursor:help;border-bottom:1px dotted #2196F3}h1,h2,h3{margin-top:20px;margin-bottom:10px}h4,h5,h6{margin-top:10px;margin-bottom:10px}.mui--appbar-height{height:56px}.mui--appbar-min-height,.mui-appbar{min-height:56px}.mui--appbar-line-height{line-height:56px}.mui--appbar-top{top:56px}@media (orientation:landscape) and (max-height:480px){.mui--appbar-height{height:48px}.mui--appbar-min-height,.mui-appbar{min-height:48px}.mui--appbar-line-height{line-height:48px}.mui--appbar-top{top:48px}}@media (min-width:480px){.mui--appbar-height{height:64px}.mui--appbar-min-height,.mui-appbar{min-height:64px}.mui--appbar-line-height{line-height:64px}.mui--appbar-top{top:64px}}.mui-appbar{background-color:#2196F3;color:#FFF}.mui-btn{animation-duration:.1ms;animation-name:mui-node-inserted;font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase;color:rgba(0,0,0,.87);background-color:#FFF;transition:all .2s ease-in-out;display:inline-block;height:36px;padding:0 26px;margin-top:6px;margin-bottom:6px;border:none;border-radius:2px;cursor:pointer;-ms-touch-action:manipulation;touch-action:manipulation;background-image:none;text-align:center;line-height:36px;vertical-align:middle;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:14px;letter-spacing:.03em;position:relative;overflow:hidden}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{color:rgba(0,0,0,.87);background-color:#fff}.mui-btn[disabled]:active,.mui-btn[disabled]:focus,.mui-btn[disabled]:hover{color:rgba(0,0,0,.87);background-color:#FFF}.mui-btn.mui-btn--flat{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn.mui-btn--flat:active,.mui-btn.mui-btn--flat:focus,.mui-btn.mui-btn--flat:hover{color:rgba(0,0,0,.87);background-color:#f2f2f2}.mui-btn.mui-btn--flat[disabled]:active,.mui-btn.mui-btn--flat[disabled]:focus,.mui-btn.mui-btn--flat[disabled]:hover{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{outline:0;text-decoration:none;color:rgba(0,0,0,.87)}.mui-btn:focus,.mui-btn:hover{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:focus,.mui-btn:hover{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn.mui--is-disabled,.mui-btn:disabled{cursor:not-allowed;pointer-events:none;opacity:.6;box-shadow:none}.mui-btn+.mui-btn{margin-left:8px}.mui-btn--flat{background-color:transparent}.mui-btn--flat:active,.mui-btn--flat:focus,.mui-btn--flat:hover{box-shadow:none;background-color:#f2f2f2}.mui-btn--fab,.mui-btn--raised{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab,.mui-btn--raised{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn--fab{position:relative;padding:0;width:55px;height:55px;line-height:55px;border-radius:50%;z-index:1}.mui-btn--primary{color:#FFF;background-color:#2196F3}.mui-btn--primary:active,.mui-btn--primary:focus,.mui-btn--primary:hover{color:#FFF;background-color:#39a1f4}.mui-btn--primary[disabled]:active,.mui-btn--primary[disabled]:focus,.mui-btn--primary[disabled]:hover{color:#FFF;background-color:#2196F3}.mui-btn--primary.mui-btn--flat{color:#2196F3;background-color:transparent}.mui-btn--primary.mui-btn--flat:active,.mui-btn--primary.mui-btn--flat:focus,.mui-btn--primary.mui-btn--flat:hover{color:#2196F3;background-color:#f2f2f2}.mui-btn--primary.mui-btn--flat[disabled]:active,.mui-btn--primary.mui-btn--flat[disabled]:focus,.mui-btn--primary.mui-btn--flat[disabled]:hover{color:#2196F3;background-color:transparent}.mui-btn--dark{color:#FFF;background-color:#424242}.mui-btn--dark:active,.mui-btn--dark:focus,.mui-btn--dark:hover{color:#FFF;background-color:#4f4f4f}.mui-btn--dark[disabled]:active,.mui-btn--dark[disabled]:focus,.mui-btn--dark[disabled]:hover{color:#FFF;background-color:#424242}.mui-btn--dark.mui-btn--flat{color:#424242;background-color:transparent}.mui-btn--dark.mui-btn--flat:active,.mui-btn--dark.mui-btn--flat:focus,.mui-btn--dark.mui-btn--flat:hover{color:#424242;background-color:#f2f2f2}.mui-btn--dark.mui-btn--flat[disabled]:active,.mui-btn--dark.mui-btn--flat[disabled]:focus,.mui-btn--dark.mui-btn--flat[disabled]:hover{color:#424242;background-color:transparent}.mui-btn--danger{color:#FFF;background-color:#F44336}.mui-btn--danger:active,.mui-btn--danger:focus,.mui-btn--danger:hover{color:#FFF;background-color:#f55a4e}.mui-btn--danger[disabled]:active,.mui-btn--danger[disabled]:focus,.mui-btn--danger[disabled]:hover{color:#FFF;background-color:#F44336}.mui-btn--danger.mui-btn--flat{color:#F44336;background-color:transparent}.mui-btn--danger.mui-btn--flat:active,.mui-btn--danger.mui-btn--flat:focus,.mui-btn--danger.mui-btn--flat:hover{color:#F44336;background-color:#f2f2f2}.mui-btn--danger.mui-btn--flat[disabled]:active,.mui-btn--danger.mui-btn--flat[disabled]:focus,.mui-btn--danger.mui-btn--flat[disabled]:hover{color:#F44336;background-color:transparent}.mui-btn--accent{color:#FFF;background-color:#FF4081}.mui-btn--accent:active,.mui-btn--accent:focus,.mui-btn--accent:hover{color:#FFF;background-color:#ff5a92}.mui-btn--accent[disabled]:active,.mui-btn--accent[disabled]:focus,.mui-btn--accent[disabled]:hover{color:#FFF;background-color:#FF4081}.mui-btn--accent.mui-btn--flat{color:#FF4081;background-color:transparent}.mui-btn--accent.mui-btn--flat:active,.mui-btn--accent.mui-btn--flat:focus,.mui-btn--accent.mui-btn--flat:hover{color:#FF4081;background-color:#f2f2f2}.mui-btn--accent.mui-btn--flat[disabled]:active,.mui-btn--accent.mui-btn--flat[disabled]:focus,.mui-btn--accent.mui-btn--flat[disabled]:hover{color:#FF4081;background-color:transparent}.mui-btn--small{height:30.6px;line-height:30.6px;padding:0 16px;font-size:13px}.mui-btn--large{height:54px;line-height:54px;padding:0 26px;font-size:14px}.mui-btn--fab.mui-btn--small{width:44px;height:44px;line-height:44px}.mui-btn--fab.mui-btn--large{width:75px;height:75px;line-height:75px}.mui-checkbox,.mui-radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.mui-checkbox>label,.mui-radio>label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio],.mui-radio>label>input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px}.mui-checkbox+.mui-checkbox,.mui-radio+.mui-radio{margin-top:-5px}.mui-checkbox--inline,.mui-radio--inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.mui-checkbox--inline>input[type=checkbox],.mui-checkbox--inline>input[type=radio],.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox--inline>label>input[type=radio],.mui-radio--inline>input[type=checkbox],.mui-radio--inline>input[type=radio],.mui-radio--inline>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio]{margin:4px 0 0;line-height:normal}.mui-checkbox--inline+.mui-checkbox--inline,.mui-radio--inline+.mui-radio--inline{margin-top:0;margin-left:10px}.mui-container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container:after,.mui-container:before{content:" ";display:table}.mui-container:after{clear:both}@media (min-width:544px){.mui-container{max-width:570px}}@media (min-width:768px){.mui-container{max-width:740px}}@media (min-width:992px){.mui-container{max-width:960px}}@media (min-width:1200px){.mui-container{max-width:1170px}}.mui-container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container-fluid:after,.mui-container-fluid:before{content:" ";display:table}.mui-container-fluid:after{clear:both}.mui-divider{display:block;height:1px;background-color:rgba(0,0,0,.12)}.mui--divider-top{border-top:1px solid rgba(0,0,0,.12)}.mui--divider-bottom{border-bottom:1px solid rgba(0,0,0,.12)}.mui--divider-left{border-left:1px solid rgba(0,0,0,.12)}.mui--divider-right{border-right:1px solid rgba(0,0,0,.12)}.mui-dropdown{display:inline-block;position:relative}[data-mui-toggle=dropdown]{animation-duration:.1ms;animation-name:mui-node-inserted;outline:0}.mui-dropdown__menu{position:absolute;top:100%;left:0;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#FFF;border-radius:2px;z-index:1;background-clip:padding-box}.mui-dropdown__menu.mui--is-open{display:block}.mui-dropdown__menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);white-space:nowrap}.mui-dropdown__menu>li>a:focus,.mui-dropdown__menu>li>a:hover{text-decoration:none;color:rgba(0,0,0,.87);background-color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a,.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;cursor:not-allowed}.mui-dropdown__menu--right{left:auto;right:0}@media (min-width:544px){.mui-form--inline>.mui-textfield{display:inline-block;margin-bottom:0}.mui-form--inline>.mui-checkbox,.mui-form--inline>.mui-radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.mui-form--inline>.mui-checkbox>label,.mui-form--inline>.mui-radio>label{padding-left:0}.mui-form--inline>.mui-checkbox>label>input[type=checkbox],.mui-form--inline>.mui-radio>label>input[type=radio]{position:relative;margin-left:0}.mui-form--inline>.mui-select{display:inline-block}.mui-form--inline>.mui-btn{margin-bottom:0;margin-top:0;vertical-align:bottom}}.mui-row{margin-left:-15px;margin-right:-15px}.mui-row:after,.mui-row:before{content:" ";display:table}.mui-row:after{clear:both}.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9,.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9,.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9,.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{min-height:1px;padding-left:15px;padding-right:15px}.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{float:left}.mui-col-xs-1{width:8.33333%}.mui-col-xs-2{width:16.66667%}.mui-col-xs-3{width:25%}.mui-col-xs-4{width:33.33333%}.mui-col-xs-5{width:41.66667%}.mui-col-xs-6{width:50%}.mui-col-xs-7{width:58.33333%}.mui-col-xs-8{width:66.66667%}.mui-col-xs-9{width:75%}.mui-col-xs-10{width:83.33333%}.mui-col-xs-11{width:91.66667%}.mui-col-xs-12{width:100%}.mui-col-xs-offset-0{margin-left:0}.mui-col-xs-offset-1{margin-left:8.33333%}.mui-col-xs-offset-2{margin-left:16.66667%}.mui-col-xs-offset-3{margin-left:25%}.mui-col-xs-offset-4{margin-left:33.33333%}.mui-col-xs-offset-5{margin-left:41.66667%}.mui-col-xs-offset-6{margin-left:50%}.mui-col-xs-offset-7{margin-left:58.33333%}.mui-col-xs-offset-8{margin-left:66.66667%}.mui-col-xs-offset-9{margin-left:75%}.mui-col-xs-offset-10{margin-left:83.33333%}.mui-col-xs-offset-11{margin-left:91.66667%}.mui-col-xs-offset-12{margin-left:100%}@media (min-width:544px){.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9{float:left}.mui-col-sm-1{width:8.33333%}.mui-col-sm-2{width:16.66667%}.mui-col-sm-3{width:25%}.mui-col-sm-4{width:33.33333%}.mui-col-sm-5{width:41.66667%}.mui-col-sm-6{width:50%}.mui-col-sm-7{width:58.33333%}.mui-col-sm-8{width:66.66667%}.mui-col-sm-9{width:75%}.mui-col-sm-10{width:83.33333%}.mui-col-sm-11{width:91.66667%}.mui-col-sm-12{width:100%}.mui-col-sm-offset-0{margin-left:0}.mui-col-sm-offset-1{margin-left:8.33333%}.mui-col-sm-offset-2{margin-left:16.66667%}.mui-col-sm-offset-3{margin-left:25%}.mui-col-sm-offset-4{margin-left:33.33333%}.mui-col-sm-offset-5{margin-left:41.66667%}.mui-col-sm-offset-6{margin-left:50%}.mui-col-sm-offset-7{margin-left:58.33333%}.mui-col-sm-offset-8{margin-left:66.66667%}.mui-col-sm-offset-9{margin-left:75%}.mui-col-sm-offset-10{margin-left:83.33333%}.mui-col-sm-offset-11{margin-left:91.66667%}.mui-col-sm-offset-12{margin-left:100%}}@media (min-width:768px){.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9{float:left}.mui-col-md-1{width:8.33333%}.mui-col-md-2{width:16.66667%}.mui-col-md-3{width:25%}.mui-col-md-4{width:33.33333%}.mui-col-md-5{width:41.66667%}.mui-col-md-6{width:50%}.mui-col-md-7{width:58.33333%}.mui-col-md-8{width:66.66667%}.mui-col-md-9{width:75%}.mui-col-md-10{width:83.33333%}.mui-col-md-11{width:91.66667%}.mui-col-md-12{width:100%}.mui-col-md-offset-0{margin-left:0}.mui-col-md-offset-1{margin-left:8.33333%}.mui-col-md-offset-2{margin-left:16.66667%}.mui-col-md-offset-3{margin-left:25%}.mui-col-md-offset-4{margin-left:33.33333%}.mui-col-md-offset-5{margin-left:41.66667%}.mui-col-md-offset-6{margin-left:50%}.mui-col-md-offset-7{margin-left:58.33333%}.mui-col-md-offset-8{margin-left:66.66667%}.mui-col-md-offset-9{margin-left:75%}.mui-col-md-offset-10{margin-left:83.33333%}.mui-col-md-offset-11{margin-left:91.66667%}.mui-col-md-offset-12{margin-left:100%}}@media (min-width:992px){.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9{float:left}.mui-col-lg-1{width:8.33333%}.mui-col-lg-2{width:16.66667%}.mui-col-lg-3{width:25%}.mui-col-lg-4{width:33.33333%}.mui-col-lg-5{width:41.66667%}.mui-col-lg-6{width:50%}.mui-col-lg-7{width:58.33333%}.mui-col-lg-8{width:66.66667%}.mui-col-lg-9{width:75%}.mui-col-lg-10{width:83.33333%}.mui-col-lg-11{width:91.66667%}.mui-col-lg-12{width:100%}.mui-col-lg-offset-0{margin-left:0}.mui-col-lg-offset-1{margin-left:8.33333%}.mui-col-lg-offset-2{margin-left:16.66667%}.mui-col-lg-offset-3{margin-left:25%}.mui-col-lg-offset-4{margin-left:33.33333%}.mui-col-lg-offset-5{margin-left:41.66667%}.mui-col-lg-offset-6{margin-left:50%}.mui-col-lg-offset-7{margin-left:58.33333%}.mui-col-lg-offset-8{margin-left:66.66667%}.mui-col-lg-offset-9{margin-left:75%}.mui-col-lg-offset-10{margin-left:83.33333%}.mui-col-lg-offset-11{margin-left:91.66667%}.mui-col-lg-offset-12{margin-left:100%}}@media (min-width:1200px){.mui-col-xl-1,.mui-col-xl-10,.mui-col-xl-11,.mui-col-xl-12,.mui-col-xl-2,.mui-col-xl-3,.mui-col-xl-4,.mui-col-xl-5,.mui-col-xl-6,.mui-col-xl-7,.mui-col-xl-8,.mui-col-xl-9{float:left}.mui-col-xl-1{width:8.33333%}.mui-col-xl-2{width:16.66667%}.mui-col-xl-3{width:25%}.mui-col-xl-4{width:33.33333%}.mui-col-xl-5{width:41.66667%}.mui-col-xl-6{width:50%}.mui-col-xl-7{width:58.33333%}.mui-col-xl-8{width:66.66667%}.mui-col-xl-9{width:75%}.mui-col-xl-10{width:83.33333%}.mui-col-xl-11{width:91.66667%}.mui-col-xl-12{width:100%}.mui-col-xl-offset-0{margin-left:0}.mui-col-xl-offset-1{margin-left:8.33333%}.mui-col-xl-offset-2{margin-left:16.66667%}.mui-col-xl-offset-3{margin-left:25%}.mui-col-xl-offset-4{margin-left:33.33333%}.mui-col-xl-offset-5{margin-left:41.66667%}.mui-col-xl-offset-6{margin-left:50%}.mui-col-xl-offset-7{margin-left:58.33333%}.mui-col-xl-offset-8{margin-left:66.66667%}.mui-col-xl-offset-9{margin-left:75%}.mui-col-xl-offset-10{margin-left:83.33333%}.mui-col-xl-offset-11{margin-left:91.66667%}.mui-col-xl-offset-12{margin-left:100%}}.mui-panel{padding:15px;margin-bottom:20px;border-radius:0;background-color:#FFF;box-shadow:0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}.mui-panel:after,.mui-panel:before{content:" ";display:table}.mui-panel:after{clear:both}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-panel{box-shadow:0 -1px 2px 0 rgba(0,0,0,.12),-1px 0 2px 0 rgba(0,0,0,.12),0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}}.mui-select{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-select:focus{outline:0}.mui-select:focus>select{height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;height:32px;width:100%;appearance:none;-webkit-appearance:none;-moz-appearance:none;outline:0;border:none;border-bottom:1px solid rgba(0,0,0,.26);border-radius:0;box-shadow:none;background-color:transparent;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iNiIgd2lkdGg9IjEwIj48cG9seWdvbiBwb2ludHM9IjAsMCAxMCwwIDUsNiIgc3R5bGU9ImZpbGw6cmdiYSgwLDAsMCwuMjQpOyIvPjwvc3ZnPg==);background-repeat:no-repeat;background-position:right center;cursor:pointer;color:rgba(0,0,0,.87);font-size:16px;padding:0 25px 0 0}.mui-select>select::-ms-expand{display:none}.mui-select>select:focus{outline:0;height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select:disabled{color:rgba(0,0,0,.38);cursor:not-allowed;background-color:transparent;opacity:1}.mui-select__menu{position:absolute;z-index:2;min-width:100%;overflow-y:auto;padding:8px 0;background-color:#FFF;font-size:16px}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-select__menu{border-left:1px solid rgba(0,0,0,.12);border-top:1px solid rgba(0,0,0,.12)}}.mui-select__menu>div{padding:0 22px;height:42px;line-height:42px;cursor:pointer;white-space:nowrap}.mui-select__menu>div:hover{background-color:#E0E0E0}.mui-select__menu>div.mui--is-selected{background-color:#EEE}th{text-align:left}.mui-table{width:100%;max-width:100%;margin-bottom:20px}.mui-table>tbody>tr>td,.mui-table>tbody>tr>th,.mui-table>tfoot>tr>td,.mui-table>tfoot>tr>th,.mui-table>thead>tr>td,.mui-table>thead>tr>th{padding:10px;line-height:1.429}.mui-table>thead>tr>th{border-bottom:2px solid rgba(0,0,0,.12);font-weight:700}.mui-table>tbody+tbody{border-top:2px solid rgba(0,0,0,.12)}.mui-table.mui-table--bordered>tbody>tr>td{border-bottom:1px solid rgba(0,0,0,.12)}.mui-tabs__bar{list-style:none;padding-left:0;margin-bottom:0;background-color:transparent;white-space:nowrap;overflow-x:auto}.mui-tabs__bar>li{display:inline-block}.mui-tabs__bar>li>a{display:block;white-space:nowrap;text-transform:uppercase;font-weight:500;font-size:14px;color:rgba(0,0,0,.87);cursor:default;height:48px;line-height:48px;padding-left:24px;padding-right:24px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-tabs__bar>li>a:hover{text-decoration:none}.mui-tabs__bar>li.mui--is-active{border-bottom:2px solid #2196F3}.mui-tabs__bar>li.mui--is-active>a{color:#2196F3}.mui-tabs__bar.mui-tabs__bar--justified{display:table;width:100%;table-layout:fixed}.mui-tabs__bar.mui-tabs__bar--justified>li{display:table-cell}.mui-tabs__bar.mui-tabs__bar--justified>li>a{text-align:center;padding-left:0;padding-right:0}.mui-tabs__pane{display:none}.mui-tabs__pane.mui--is-active{display:block}[data-mui-toggle=tab]{animation-duration:.1ms;animation-name:mui-node-inserted}.mui-textfield{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-textfield>label{position:absolute;top:0;display:block;width:100%;color:rgba(0,0,0,.54);font-size:12px;font-weight:400;line-height:15px;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.mui-textfield>textarea{padding-top:5px}.mui-textfield>input,.mui-textfield>textarea{display:block}.mui-textfield>input:focus~label,.mui-textfield>textarea:focus~label{color:#2196F3}.mui-textfield--float-label>label{position:absolute;transform:translate(0,15px);font-size:16px;line-height:32px;color:rgba(0,0,0,.26);text-overflow:clip;cursor:text;pointer-events:none}.mui-textfield--float-label>input:focus~label,.mui-textfield--float-label>textarea:focus~label{transform:translate(0,0);font-size:12px;line-height:15px;text-overflow:ellipsis}.mui-textfield--float-label>input:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>input:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>input:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>textarea:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:rgba(0,0,0,.54);font-size:12px;line-height:15px;transform:translate(0,0);text-overflow:ellipsis}.mui-textfield--wrap-label{display:table;width:100%;padding-top:0}.mui-textfield--wrap-label:not(.mui-textfield--float-label)>label{display:table-header-group;position:static;white-space:normal;overflow-x:visible}.mui-textfield>input,.mui-textfield>textarea{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;background-color:transparent;color:rgba(0,0,0,.87);border:none;border-bottom:1px solid rgba(0,0,0,.26);outline:0;width:100%;font-size:16px;padding:0;box-shadow:none;border-radius:0;background-image:none}.mui-textfield>input:focus,.mui-textfield>textarea:focus{border-color:#2196F3;border-width:2px}.mui-textfield>input:-moz-read-only,.mui-textfield>input:disabled,.mui-textfield>textarea:-moz-read-only,.mui-textfield>textarea:disabled{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input:disabled,.mui-textfield>input:read-only,.mui-textfield>textarea:disabled,.mui-textfield>textarea:read-only{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input::-webkit-input-placeholder,.mui-textfield>textarea::-webkit-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::-moz-placeholder,.mui-textfield>textarea::-moz-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input:-ms-input-placeholder,.mui-textfield>textarea:-ms-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::placeholder,.mui-textfield>textarea::placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input{height:32px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>textarea{min-height:64px}.mui-textfield>textarea[rows]:not([rows="2"]):focus{margin-bottom:-1px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):not(:required),.mui-textfield>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required),.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty){border-color:#F44336;border-width:2px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty){height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required)~label,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):not(:required)~label,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:#F44336}.mui-textfield:not(.mui-textfield--float-label)>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label{color:#F44336}@keyframes mui-node-inserted{from{opacity:.99}to{opacity:1}}.mui--no-transition{transition:none!important}.mui--no-user-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.mui--text-left{text-align:left!important}.mui--text-right{text-align:right!important}.mui--text-center{text-align:center!important}.mui--text-justify{text-align:justify!important}.mui--text-nowrap{white-space:nowrap!important}.mui--align-baseline{vertical-align:baseline!important}.mui--align-top{vertical-align:top!important}.mui--align-middle{vertical-align:middle!important}.mui--align-bottom{vertical-align:bottom!important}.mui--text-dark{color:rgba(0,0,0,.87)}.mui--text-dark-secondary{color:rgba(0,0,0,.54)}.mui--text-dark-hint{color:rgba(0,0,0,.38)}.mui--text-light{color:#FFF}.mui--text-light-secondary{color:rgba(255,255,255,.7)}.mui--text-light-hint{color:rgba(255,255,255,.3)}.mui--text-accent{color:rgba(255,64,129,.87)}.mui--text-accent-secondary{color:rgba(255,64,129,.54)}.mui--text-accent-hint{color:rgba(255,64,129,.38)}.mui--text-black{color:#000}.mui--text-white{color:#FFF}.mui--text-danger{color:#F44336}.mui-list--unstyled{padding-left:0;list-style:none}.mui-list--inline{padding-left:0;list-style:none;margin-left:-5px}.mui-list--inline>li{display:inline-block;padding-left:5px;padding-right:5px}.mui--z1,.mui-dropdown__menu,.mui-select__menu{box-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24)}.mui--z2{box-shadow:0 3px 6px rgba(0,0,0,.16),0 3px 6px rgba(0,0,0,.23)}.mui--z3{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}.mui--z4{box-shadow:0 14px 28px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.22)}.mui--z5{box-shadow:0 19px 38px rgba(0,0,0,.3),0 15px 12px rgba(0,0,0,.22)}.mui--clearfix:after,.mui--clearfix:before{content:" ";display:table}.mui--clearfix:after{clear:both}.mui--pull-right{float:right!important}.mui--pull-left{float:left!important}.mui--hide{display:none!important}.mui--show{display:block!important}.mui--invisible{visibility:hidden}.mui--overflow-hidden{overflow:hidden!important}.mui--overflow-hidden-x{overflow-x:hidden!important}.mui--overflow-hidden-y{overflow-y:hidden!important}.mui--visible-lg-block,.mui--visible-lg-inline,.mui--visible-lg-inline-block,.mui--visible-md-block,.mui--visible-md-inline,.mui--visible-md-inline-block,.mui--visible-sm-block,.mui--visible-sm-inline,.mui--visible-sm-inline-block,.mui--visible-xl-block,.mui--visible-xl-inline,.mui--visible-xl-inline-block,.mui--visible-xs-block,.mui--visible-xs-inline,.mui--visible-xs-inline-block{display:none!important}@media (max-width:543px){.mui-visible-xs{display:block!important}table.mui-visible-xs{display:table}tr.mui-visible-xs{display:table-row!important}td.mui-visible-xs,th.mui-visible-xs{display:table-cell!important}.mui--visible-xs-block{display:block!important}.mui--visible-xs-inline{display:inline!important}.mui--visible-xs-inline-block{display:inline-block!important}}@media (min-width:544px) and (max-width:767px){.mui-visible-sm{display:block!important}table.mui-visible-sm{display:table}tr.mui-visible-sm{display:table-row!important}td.mui-visible-sm,th.mui-visible-sm{display:table-cell!important}.mui--visible-sm-block{display:block!important}.mui--visible-sm-inline{display:inline!important}.mui--visible-sm-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.mui-visible-md{display:block!important}table.mui-visible-md{display:table}tr.mui-visible-md{display:table-row!important}td.mui-visible-md,th.mui-visible-md{display:table-cell!important}.mui--visible-md-block{display:block!important}.mui--visible-md-inline{display:inline!important}.mui--visible-md-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.mui-visible-lg{display:block!important}table.mui-visible-lg{display:table}tr.mui-visible-lg{display:table-row!important}td.mui-visible-lg,th.mui-visible-lg{display:table-cell!important}.mui--visible-lg-block{display:block!important}.mui--visible-lg-inline{display:inline!important}.mui--visible-lg-inline-block{display:inline-block!important}}@media (min-width:1200px){.mui-visible-xl{display:block!important}table.mui-visible-xl{display:table}tr.mui-visible-xl{display:table-row!important}td.mui-visible-xl,th.mui-visible-xl{display:table-cell!important}.mui--visible-xl-block{display:block!important}.mui--visible-xl-inline{display:inline!important}.mui--visible-xl-inline-block{display:inline-block!important}}@media (max-width:543px){.mui--hidden-xs{display:none!important}}@media (min-width:544px) and (max-width:767px){.mui--hidden-sm{display:none!important}}@media (min-width:768px) and (max-width:991px){.mui--hidden-md{display:none!important}}@media (min-width:992px) and (max-width:1199px){.mui--hidden-lg{display:none!important}}@media (min-width:1200px){.mui--hidden-xl{display:none!important}}body.mui-body--scroll-lock{overflow:hidden!important}#mui-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:99999999;background-color:rgba(0,0,0,.2);overflow:auto}.mui-ripple-effect{position:absolute;border-radius:50%;pointer-events:none;opacity:0;animation:mui-ripple-animation 2s}@keyframes mui-ripple-animation{from{transform:scale(1);opacity:.4}to{transform:scale(100);opacity:0}}.mui-btn>.mui-ripple-effect{background-color:#a6a6a6}.mui-btn--primary>.mui-ripple-effect{background-color:#FFF}.mui-btn--dark>.mui-ripple-effect{background-color:#FFF}.mui-btn--danger>.mui-ripple-effect{background-color:#FFF}.mui-btn--accent>.mui-ripple-effect{background-color:#FFF}.mui-btn--flat>.mui-ripple-effect{background-color:#a6a6a6}.mui--text-display4{font-weight:300;font-size:112px;line-height:112px}.mui--text-display3{font-weight:400;font-size:56px;line-height:56px}.mui--text-display2{font-weight:400;font-size:45px;line-height:48px}.mui--text-display1,h1{font-weight:400;font-size:34px;line-height:40px}.mui--text-headline,h2{font-weight:400;font-size:24px;line-height:32px}.mui--text-title,h3{font-weight:400;font-size:20px;line-height:28px}.mui--text-subhead,h4{font-weight:400;font-size:16px;line-height:24px}.mui--text-body2,h5{font-weight:500;font-size:14px;line-height:24px}.mui--text-body1{font-weight:400;font-size:14px;line-height:20px}.mui--text-caption{font-weight:400;font-size:12px;line-height:16px}.mui--text-menu{font-weight:500;font-size:13px;line-height:17px}.mui--text-button{font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase}'; +},{}],8:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l="mui.appbar";n["default"].module(l,[]).directive("muiAppbar",function(){return{restrict:"AE",transclude:!0,replace:!0,template:'
                ',link:function(i,e,t,o,n){n(i,function(i){e.append(i)})}}}),t["default"]=l,e.exports=t["default"]},{angular:"aeQg5j"}],9:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l=i("../js/lib/jqLite"),a=babelHelpers.interopRequireWildcard(l),r="mui.button";n["default"].module(r,[]).directive("muiButton",function(){return{restrict:"AE",scope:{type:"@?"},replace:!0,template:'',transclude:!0,link:function(i,e,t){var o=n["default"].isUndefined,l=e[0];l._muiDropdown=!0,l._muiRipple=!0,!o(t.disabled)&&o(t.ngDisabled)&&e.prop("disabled",!0),n["default"].forEach(["variant","color","size"],function(i){var o=t[i];o&&e.addClass("mui-btn--"+o)})}}}).directive("muiRipple",["$timeout",function(i){return{restrict:"A",link:function(e,t,o){var l="mui-ripple-effect";t.on("mousedown",function(e){if(!t.prop("disabled")){var o,r,u=a.offset(t[0]),m=e.pageX-u.left,d=e.pageY-u.top;o=u.height,t.hasClass("mui-btn--fab")&&(o=u.height/2),r=o/2;var s={height:o+"px",width:o+"px",top:d-r+"px",left:m-r+"px"},c=n["default"].element("
                ").addClass(l);for(var p in s)c.css(p,s[p]);t.append(c),i(function(){c.remove()},2e3)}})}}}]),t["default"]=r,e.exports=t["default"]},{"../js/lib/jqLite":5,angular:"aeQg5j"}],10:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l="mui.caret";n["default"].module(l,[]).directive("muiCaret",function(){return{restrict:"AE",replace:!0,template:''}}),t["default"]=l,e.exports=t["default"]},{angular:"aeQg5j"}],11:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l="mui.checkbox";n["default"].module(l,[]).directive("muiCheckbox",function(){return{restrict:"AE",replace:!0,require:["?ngModel"],scope:{label:"@",name:"@",value:"@",ngModel:"=",ngDisabled:"="},template:'
                '}}),t["default"]=l,e.exports=t["default"]},{angular:"aeQg5j"}],12:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l="mui.col";n["default"].module(l,[]).directive("muiCol",function(){return{restrict:"AE",scope:!0,replace:!0,template:"
                ",transclude:!0,link:function(i,e,t,o,l){l(i,function(i){e.append(i)});var a={xs:"mui-col-xs-",sm:"mui-col-sm-",md:"mui-col-md-",lg:"mui-col-lg-","xs-offset":"mui-col-xs-offset-","sm-offset":"mui-col-sm-offset-","md-offset":"mui-col-md-offset-","lg-offset":"mui-col-lg-offset-"};n["default"].forEach(a,function(i,o){var n=t[t.$normalize(o)];n&&e.addClass(i+n)})}}}),t["default"]=l,e.exports=t["default"]},{angular:"aeQg5j"}],13:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l="mui.container";n["default"].module(l,[]).directive("muiContainer",function(){return{restrict:"AE",template:'
                ',transclude:!0,scope:!0,replace:!0,link:function(i,e,t,o,l){l(i,function(i){e.append(i)}),n["default"].isUndefined(t.fluid)||e.removeClass("mui-container").addClass("mui-container-fluid")}}}),t["default"]=l,e.exports=t["default"]},{angular:"aeQg5j"}],14:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l="mui.divider";n["default"].module(l,[]).directive("muiDivider",function(){return{restrict:"AE",replace:!0,compile:function(i,e){i.addClass("mui-divider")}}}),t["default"]=l,e.exports=t["default"]},{angular:"aeQg5j"}],15:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l="mui.dropdown-item";n["default"].module(l,[]).directive("muiDropdownItem",function(){return{restrict:"AE",replace:!0,scope:{link:"@"},transclude:!0,template:'
              • '}}),t["default"]=l,e.exports=t["default"]},{angular:"aeQg5j"}],16:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l="mui.dropdown";n["default"].module(l,[]).directive("muiDropdown",["$timeout","$compile",function(i,e){return{restrict:"AE",transclude:!0,replace:!0,scope:{variant:"@",color:"@",size:"@",open:"=?",ngDisabled:"="},template:'
                  ',link:function(i,e,t){function o(){i.open=!1,i.$apply()}var l,a,r="mui-dropdown__menu",u="mui--is-open",m="mui-dropdown__menu--right",d=n["default"].isUndefined;l=n["default"].element(e[0].querySelector("."+r)),a=n["default"].element(e[0].querySelector(".mui-btn")),l.css("margin-top","-3px"),d(t.open)||(i.open=!0),d(t.disabled)||a.attr("disabled",!0),d(t.rightAlign)||l.addClass(m),d(t.noCaret)?a.html(t.label+" "):a.html(t.label),i.$watch("open",function(i){i===!0?(l.addClass(u),document.addEventListener("click",o)):i===!1&&(l.removeClass(u),document.removeEventListener("click",o))}),i.onClick=function(e){i.disabled||(e.preventDefault(),e.stopPropagation(),i.open?i.open=!1:i.open=!0)}}}}]),t["default"]=l,e.exports=t["default"]},{angular:"aeQg5j"}],17:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l="mui.form";n["default"].module(l,[]).directive("muiFormInline",function(){return{restrict:"A",link:function(i,e,t){e.addClass("mui-form--inline")}}}),t["default"]=l,e.exports=t["default"]},{angular:"aeQg5j"}],18:[function(i,e,t){"use strict";function o(i,e){e?i.removeClass(u).addClass(m):i.removeClass(m).addClass(u)}function n(i){var e,t,n="mui--is-dirty";return e={floatLabel:"@",hint:"@",label:"@",ngDisabled:"=",ngModel:"="},t='
                  ',i?(e.rows="@",t+=''):(e.type="@",t+=''),t+="
                  ",["$timeout",function(l){return{restrict:"AE",require:["ngModel"],scope:e,replace:!0,template:t,link:function(e,t,r,u){var m=t.find("input")||t.find("textarea"),d=t.find("label"),s=u[0],c=(u[1],a["default"].isUndefined),p=m[0];p&&(p._muiTextfield=!0),t.removeAttr("ng-change"),t.removeAttr("ng-model"),i?e.rows=e.rows||2:e.type=e.type||"text",c(r.autofocus)||m[0].focus(),c(r.required)||m.prop("required",!0),c(r.invalid)||m.addClass("mui--is-invalid"),o(m,e.ngModel),c(e.floatLabel)||(t.addClass("mui-textfield--float-label"),l(function(){d.css({transition:".15s ease-out","-webkit-transition":".15s ease-out","-moz-transition":".15s ease-out","-o-transition":".15s ease-out","-ms-transition":".15s ease-out"})},150)),e.onChange=function(){var i=e.ngModel;s&&s.$setViewValue(i),o(m,i),m.addClass(n)},e.onFocus=function(){m.addClass(n)}}}}]}Object.defineProperty(t,"__esModule",{value:!0});var l=window.angular,a=babelHelpers.interopRequireDefault(l),r="mui.input",u="mui--is-empty",m="mui--is-not-empty";a["default"].module(r,[]).directive("muiInput",n(!1)).directive("muiTextarea",n(!0)),t["default"]=r,e.exports=t["default"]},{angular:"aeQg5j"}],19:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l="mui.panel";n["default"].module(l,[]).directive("muiPanel",function(){return{restrict:"AE",replace:!0,scope:!0,template:'
                  ',transclude:!0,link:function(i,e,t,o,n){n(i,function(i){e.append(i)})}}}),t["default"]=l,e.exports=t["default"]},{angular:"aeQg5j"}],20:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l="mui.radio";n["default"].module(l,[]).directive("muiRadio",function(){return{restrict:"AE",replace:!0,require:["?ngModel"],scope:{label:"@",name:"@",value:"@",ngModel:"=",ngDisabled:"="},template:'
                  '}}),t["default"]=l,e.exports=t["default"]},{angular:"aeQg5j"}],21:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l="mui.row";n["default"].module("mui.row",[]).directive("muiRow",function(){return{restrict:"AE",scope:!0,replace:!0,template:'
                  ',transclude:!0,link:function(i,e,t,o,n){n(i,function(i){e.append(i)})}}}),t["default"]=l,e.exports=t["default"]},{angular:"aeQg5j"}],22:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l=i("../js/lib/forms"),a=babelHelpers.interopRequireWildcard(l),r=i("../js/lib/util"),u=babelHelpers.interopRequireWildcard(r),m=i("../js/lib/jqLite"),d=babelHelpers.interopRequireWildcard(m),s="mui.select";n["default"].module(s,[]).directive("muiSelect",["$timeout",function(i){return{restrict:"AE",require:["ngModel"],scope:{name:"@",ngDisabled:"=",ngModel:"="},replace:!0,transclude:!0,template:'
                  {{option.label}}
                  ',link:function(e,t,o,l,r){function m(){e.isOpen=!1,e.$digest()}var s=t,c=t.find("div"),p=t.find("select"),f=n["default"].isUndefined;p[0]._muiSelect=!0,e.options=[],e.isOpen=!1,e.useDefault=!1,e.origTabIndex=p[0].tabIndex,e.menuIndex=0,f(o.useDefault)||(e.useDefault=!0),s.prop("tabIndex",-1),r(function(i){var t,o;for(o in i)t=i[o],"MUI-OPTION"===t.tagName&&e.options.push({value:t.getAttribute("value"),label:t.getAttribute("label")})}),e.onClick=function(){e.useDefault!==!0&&(e.isOpen=!0,s[0].focus())},e.onFocus=function(){if(e.useDefault!==!0){var i=p[0];e.origTabIndex=i.tabIndex,i.tabIndex=-1,s[0].focus()}},e.onMousedown=function(i){e.useDefault!==!0&&i.preventDefault()},e.onWrapperBlur=function(){p[0].tabIndex=e.origTabIndex},e.onWrapperFocus=function(i){return p[0].disabled?s[0].blur():void 0},e.onWrapperKeydown=function(i){var t=i.keyCode;if(e.isOpen===!1)32!==t&&38!==t&&40!==t||(i.preventDefault(),e.isOpen=!0);else{if(9===t)return e.isOpen=!1;27!==t&&40!==t&&38!==t&&13!==t||i.preventDefault(),27===t?e.isOpen=!1:40===t?e.menuIndex0&&(e.menuIndex-=1):13===t&&(e.ngModel=e.options[e.menuIndex].value,e.isOpen=!1)}},e.chooseOption=function(i){e.ngModel=i.value,e.isOpen=!1},e.$watch("isOpen",function(o,n){if(o!==n&&e.useDefault!==!0)if(o===!0){u.enableScrollLock();var l,r=e.ngModel,s=e.options,f=s.length;for(l=0;f>l;l++)if(s[l].value===r){e.menuIndex=l;break}var b=a.getMenuPositionalCSS(t[0],e.options.length,e.menuIndex);c.css(b),d.scrollTop(c[0],b.scrollTop),i(function(){d.on(document,"click",m),d.on(window,"resize",m)})}else p[0].focus(),u.disableScrollLock(),d.off(document,"click",m),d.off(window,"resize",m)})}}}]),t["default"]=s,e.exports=t["default"]},{"../js/lib/forms":4,"../js/lib/jqLite":5,"../js/lib/util":6,angular:"aeQg5j"}],23:[function(i,e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.angular,n=babelHelpers.interopRequireDefault(o),l=i("../js/lib/jqLite"),a=(babelHelpers.interopRequireWildcard(l),"mui.tabs");n["default"].module(a,[]).directive("muiTabs",function(){return{restrict:"EA",transclude:!0,scope:{selectedId:"=?selected",onChange:"&?"},template:'',controller:["$scope",function(i){var e=0;i.tabs=[],this.addTab=function(t){var o=e;return e+=1,i.tabs.push({label:t.label}),t.isActive&&(i.selectedId=o),o}}],link:function(i,e,t,o,l){var a=n["default"].isUndefined;a(i.selectedId)&&(i.selectedId=0),i.justified=!1,a(t.justified)||(i.justified=!0),i.onClick=function(e){e!==i.selectedId&&(i.selectedId=e,i.onChange&&i.$$postDigest(i.onChange))},l(i,function(i){e.append(i)})}}}).directive("muiTab",["$parse",function(i){return{require:"^?muiTabs",restrict:"AE",scope:{active:"&?",label:"@?"},transclude:!0,template:'
                  ',link:function(e,t,o,n,l){var a=i(o.onSelect),r=i(o.onDeselect),u=e.$parent.$parent;e.tabId=null,n&&(e.tabId=n.addTab({label:e.label,isActive:Boolean(e.active)})),l(e,function(i){t.find("div").append(i)}),e.$parent.$watch("selectedId",function(i,t){i!==t&&(i===e.tabId&&a(u),t===e.tabId&&r(u))})}}}]),t["default"]=a,e.exports=t["default"]},{"../js/lib/jqLite":5,angular:"aeQg5j"}],24:[function(i,e,t){e.exports=i(6)},{"../config":3,"./jqLite":5}]},{},[2]); \ No newline at end of file diff --git a/www/libs/mui/packages/cdn/extra/mui-colors.css b/www/libs/mui/packages/cdn/extra/mui-colors.css new file mode 100644 index 0000000..db7e7ba --- /dev/null +++ b/www/libs/mui/packages/cdn/extra/mui-colors.css @@ -0,0 +1 @@ +.mui--color-red-50{color:#FFEBEE!important}.mui--bg-color-red-50{background-color:#FFEBEE!important}.mui--color-red-100{color:#FFCDD2!important}.mui--bg-color-red-100{background-color:#FFCDD2!important}.mui--color-red-200{color:#EF9A9A!important}.mui--bg-color-red-200{background-color:#EF9A9A!important}.mui--color-red-300{color:#E57373!important}.mui--bg-color-red-300{background-color:#E57373!important}.mui--color-red-400{color:#EF5350!important}.mui--color-red,.mui--color-red-500{color:#F44336!important}.mui--bg-color-red-400{background-color:#EF5350!important}.mui--bg-color-red,.mui--bg-color-red-500{background-color:#F44336!important}.mui--color-red-600{color:#E53935!important}.mui--bg-color-red-600{background-color:#E53935!important}.mui--color-red-700{color:#D32F2F!important}.mui--bg-color-red-700{background-color:#D32F2F!important}.mui--color-red-800{color:#C62828!important}.mui--bg-color-red-800{background-color:#C62828!important}.mui--color-red-900{color:#B71C1C!important}.mui--bg-color-red-900{background-color:#B71C1C!important}.mui--color-red-A100{color:#FF8A80!important}.mui--bg-color-red-A100{background-color:#FF8A80!important}.mui--color-red-A200{color:#FF5252!important}.mui--bg-color-red-A200{background-color:#FF5252!important}.mui--color-red-A400{color:#FF1744!important}.mui--bg-color-red-A400{background-color:#FF1744!important}.mui--color-red-A700{color:#D50000!important}.mui--bg-color-red-A700{background-color:#D50000!important}.mui--color-pink-50{color:#FCE4EC!important}.mui--bg-color-pink-50{background-color:#FCE4EC!important}.mui--color-pink-100{color:#F8BBD0!important}.mui--bg-color-pink-100{background-color:#F8BBD0!important}.mui--color-pink-200{color:#F48FB1!important}.mui--bg-color-pink-200{background-color:#F48FB1!important}.mui--color-pink-300{color:#F06292!important}.mui--bg-color-pink-300{background-color:#F06292!important}.mui--color-pink-400{color:#EC407A!important}.mui--color-pink,.mui--color-pink-500{color:#E91E63!important}.mui--bg-color-pink-400{background-color:#EC407A!important}.mui--bg-color-pink,.mui--bg-color-pink-500{background-color:#E91E63!important}.mui--color-pink-600{color:#D81B60!important}.mui--bg-color-pink-600{background-color:#D81B60!important}.mui--color-pink-700{color:#C2185B!important}.mui--bg-color-pink-700{background-color:#C2185B!important}.mui--color-pink-800{color:#AD1457!important}.mui--bg-color-pink-800{background-color:#AD1457!important}.mui--color-pink-900{color:#880E4F!important}.mui--bg-color-pink-900{background-color:#880E4F!important}.mui--color-pink-A100{color:#FF80AB!important}.mui--bg-color-pink-A100{background-color:#FF80AB!important}.mui--color-pink-A200{color:#FF4081!important}.mui--bg-color-pink-A200{background-color:#FF4081!important}.mui--color-pink-A400{color:#F50057!important}.mui--bg-color-pink-A400{background-color:#F50057!important}.mui--color-pink-A700{color:#C51162!important}.mui--bg-color-pink-A700{background-color:#C51162!important}.mui--color-purple-50{color:#F3E5F5!important}.mui--bg-color-purple-50{background-color:#F3E5F5!important}.mui--color-purple-100{color:#E1BEE7!important}.mui--bg-color-purple-100{background-color:#E1BEE7!important}.mui--color-purple-200{color:#CE93D8!important}.mui--bg-color-purple-200{background-color:#CE93D8!important}.mui--color-purple-300{color:#BA68C8!important}.mui--bg-color-purple-300{background-color:#BA68C8!important}.mui--color-purple-400{color:#AB47BC!important}.mui--color-purple,.mui--color-purple-500{color:#9C27B0!important}.mui--bg-color-purple-400{background-color:#AB47BC!important}.mui--bg-color-purple,.mui--bg-color-purple-500{background-color:#9C27B0!important}.mui--color-purple-600{color:#8E24AA!important}.mui--bg-color-purple-600{background-color:#8E24AA!important}.mui--color-purple-700{color:#7B1FA2!important}.mui--bg-color-purple-700{background-color:#7B1FA2!important}.mui--color-purple-800{color:#6A1B9A!important}.mui--bg-color-purple-800{background-color:#6A1B9A!important}.mui--color-purple-900{color:#4A148C!important}.mui--bg-color-purple-900{background-color:#4A148C!important}.mui--color-purple-A100{color:#EA80FC!important}.mui--bg-color-purple-A100{background-color:#EA80FC!important}.mui--color-purple-A200{color:#E040FB!important}.mui--bg-color-purple-A200{background-color:#E040FB!important}.mui--color-purple-A400{color:#D500F9!important}.mui--bg-color-purple-A400{background-color:#D500F9!important}.mui--color-purple-A700{color:#A0F!important}.mui--bg-color-purple-A700{background-color:#A0F!important}.mui--color-deep-purple-50{color:#EDE7F6!important}.mui--bg-color-deep-purple-50{background-color:#EDE7F6!important}.mui--color-deep-purple-100{color:#D1C4E9!important}.mui--bg-color-deep-purple-100{background-color:#D1C4E9!important}.mui--color-deep-purple-200{color:#B39DDB!important}.mui--bg-color-deep-purple-200{background-color:#B39DDB!important}.mui--color-deep-purple-300{color:#9575CD!important}.mui--bg-color-deep-purple-300{background-color:#9575CD!important}.mui--color-deep-purple-400{color:#7E57C2!important}.mui--color-deep-purple,.mui--color-deep-purple-500{color:#673AB7!important}.mui--bg-color-deep-purple-400{background-color:#7E57C2!important}.mui--bg-color-deep-purple,.mui--bg-color-deep-purple-500{background-color:#673AB7!important}.mui--color-deep-purple-600{color:#5E35B1!important}.mui--bg-color-deep-purple-600{background-color:#5E35B1!important}.mui--color-deep-purple-700{color:#512DA8!important}.mui--bg-color-deep-purple-700{background-color:#512DA8!important}.mui--color-deep-purple-800{color:#4527A0!important}.mui--bg-color-deep-purple-800{background-color:#4527A0!important}.mui--color-deep-purple-900{color:#311B92!important}.mui--bg-color-deep-purple-900{background-color:#311B92!important}.mui--color-deep-purple-A100{color:#B388FF!important}.mui--bg-color-deep-purple-A100{background-color:#B388FF!important}.mui--color-deep-purple-A200{color:#7C4DFF!important}.mui--bg-color-deep-purple-A200{background-color:#7C4DFF!important}.mui--color-deep-purple-A400{color:#651FFF!important}.mui--bg-color-deep-purple-A400{background-color:#651FFF!important}.mui--color-deep-purple-A700{color:#6200EA!important}.mui--bg-color-deep-purple-A700{background-color:#6200EA!important}.mui--color-indigo-50{color:#E8EAF6!important}.mui--bg-color-indigo-50{background-color:#E8EAF6!important}.mui--color-indigo-100{color:#C5CAE9!important}.mui--bg-color-indigo-100{background-color:#C5CAE9!important}.mui--color-indigo-200{color:#9FA8DA!important}.mui--bg-color-indigo-200{background-color:#9FA8DA!important}.mui--color-indigo-300{color:#7986CB!important}.mui--bg-color-indigo-300{background-color:#7986CB!important}.mui--color-indigo-400{color:#5C6BC0!important}.mui--color-indigo,.mui--color-indigo-500{color:#3F51B5!important}.mui--bg-color-indigo-400{background-color:#5C6BC0!important}.mui--bg-color-indigo,.mui--bg-color-indigo-500{background-color:#3F51B5!important}.mui--color-indigo-600{color:#3949AB!important}.mui--bg-color-indigo-600{background-color:#3949AB!important}.mui--color-indigo-700{color:#303F9F!important}.mui--bg-color-indigo-700{background-color:#303F9F!important}.mui--color-indigo-800{color:#283593!important}.mui--bg-color-indigo-800{background-color:#283593!important}.mui--color-indigo-900{color:#1A237E!important}.mui--bg-color-indigo-900{background-color:#1A237E!important}.mui--color-indigo-A100{color:#8C9EFF!important}.mui--bg-color-indigo-A100{background-color:#8C9EFF!important}.mui--color-indigo-A200{color:#536DFE!important}.mui--bg-color-indigo-A200{background-color:#536DFE!important}.mui--color-indigo-A400{color:#3D5AFE!important}.mui--bg-color-indigo-A400{background-color:#3D5AFE!important}.mui--color-indigo-A700{color:#304FFE!important}.mui--bg-color-indigo-A700{background-color:#304FFE!important}.mui--color-blue-50{color:#E3F2FD!important}.mui--bg-color-blue-50{background-color:#E3F2FD!important}.mui--color-blue-100{color:#BBDEFB!important}.mui--bg-color-blue-100{background-color:#BBDEFB!important}.mui--color-blue-200{color:#90CAF9!important}.mui--bg-color-blue-200{background-color:#90CAF9!important}.mui--color-blue-300{color:#64B5F6!important}.mui--bg-color-blue-300{background-color:#64B5F6!important}.mui--color-blue-400{color:#42A5F5!important}.mui--color-blue,.mui--color-blue-500{color:#2196F3!important}.mui--bg-color-blue-400{background-color:#42A5F5!important}.mui--bg-color-blue,.mui--bg-color-blue-500{background-color:#2196F3!important}.mui--color-blue-600{color:#1E88E5!important}.mui--bg-color-blue-600{background-color:#1E88E5!important}.mui--color-blue-700{color:#1976D2!important}.mui--bg-color-blue-700{background-color:#1976D2!important}.mui--color-blue-800{color:#1565C0!important}.mui--bg-color-blue-800{background-color:#1565C0!important}.mui--color-blue-900{color:#0D47A1!important}.mui--bg-color-blue-900{background-color:#0D47A1!important}.mui--color-blue-A100{color:#82B1FF!important}.mui--bg-color-blue-A100{background-color:#82B1FF!important}.mui--color-blue-A200{color:#448AFF!important}.mui--bg-color-blue-A200{background-color:#448AFF!important}.mui--color-blue-A400{color:#2979FF!important}.mui--bg-color-blue-A400{background-color:#2979FF!important}.mui--color-blue-A700{color:#2962FF!important}.mui--bg-color-blue-A700{background-color:#2962FF!important}.mui--color-light-blue-50{color:#E1F5FE!important}.mui--bg-color-light-blue-50{background-color:#E1F5FE!important}.mui--color-light-blue-100{color:#B3E5FC!important}.mui--bg-color-light-blue-100{background-color:#B3E5FC!important}.mui--color-light-blue-200{color:#81D4FA!important}.mui--bg-color-light-blue-200{background-color:#81D4FA!important}.mui--color-light-blue-300{color:#4FC3F7!important}.mui--bg-color-light-blue-300{background-color:#4FC3F7!important}.mui--color-light-blue-400{color:#29B6F6!important}.mui--color-light-blue,.mui--color-light-blue-500{color:#03A9F4!important}.mui--bg-color-light-blue-400{background-color:#29B6F6!important}.mui--bg-color-light-blue,.mui--bg-color-light-blue-500{background-color:#03A9F4!important}.mui--color-light-blue-600{color:#039BE5!important}.mui--bg-color-light-blue-600{background-color:#039BE5!important}.mui--color-light-blue-700{color:#0288D1!important}.mui--bg-color-light-blue-700{background-color:#0288D1!important}.mui--color-light-blue-800{color:#0277BD!important}.mui--bg-color-light-blue-800{background-color:#0277BD!important}.mui--color-light-blue-900{color:#01579B!important}.mui--bg-color-light-blue-900{background-color:#01579B!important}.mui--color-light-blue-A100{color:#80D8FF!important}.mui--bg-color-light-blue-A100{background-color:#80D8FF!important}.mui--color-light-blue-A200{color:#40C4FF!important}.mui--bg-color-light-blue-A200{background-color:#40C4FF!important}.mui--color-light-blue-A400{color:#00B0FF!important}.mui--bg-color-light-blue-A400{background-color:#00B0FF!important}.mui--color-light-blue-A700{color:#0091EA!important}.mui--bg-color-light-blue-A700{background-color:#0091EA!important}.mui--color-cyan-50{color:#E0F7FA!important}.mui--bg-color-cyan-50{background-color:#E0F7FA!important}.mui--color-cyan-100{color:#B2EBF2!important}.mui--bg-color-cyan-100{background-color:#B2EBF2!important}.mui--color-cyan-200{color:#80DEEA!important}.mui--bg-color-cyan-200{background-color:#80DEEA!important}.mui--color-cyan-300{color:#4DD0E1!important}.mui--bg-color-cyan-300{background-color:#4DD0E1!important}.mui--color-cyan-400{color:#26C6DA!important}.mui--color-cyan,.mui--color-cyan-500{color:#00BCD4!important}.mui--bg-color-cyan-400{background-color:#26C6DA!important}.mui--bg-color-cyan,.mui--bg-color-cyan-500{background-color:#00BCD4!important}.mui--color-cyan-600{color:#00ACC1!important}.mui--bg-color-cyan-600{background-color:#00ACC1!important}.mui--color-cyan-700{color:#0097A7!important}.mui--bg-color-cyan-700{background-color:#0097A7!important}.mui--color-cyan-800{color:#00838F!important}.mui--bg-color-cyan-800{background-color:#00838F!important}.mui--color-cyan-900{color:#006064!important}.mui--bg-color-cyan-900{background-color:#006064!important}.mui--color-cyan-A100{color:#84FFFF!important}.mui--bg-color-cyan-A100{background-color:#84FFFF!important}.mui--color-cyan-A200{color:#18FFFF!important}.mui--bg-color-cyan-A200{background-color:#18FFFF!important}.mui--color-cyan-A400{color:#00E5FF!important}.mui--bg-color-cyan-A400{background-color:#00E5FF!important}.mui--color-cyan-A700{color:#00B8D4!important}.mui--bg-color-cyan-A700{background-color:#00B8D4!important}.mui--color-teal-50{color:#E0F2F1!important}.mui--bg-color-teal-50{background-color:#E0F2F1!important}.mui--color-teal-100{color:#B2DFDB!important}.mui--bg-color-teal-100{background-color:#B2DFDB!important}.mui--color-teal-200{color:#80CBC4!important}.mui--bg-color-teal-200{background-color:#80CBC4!important}.mui--color-teal-300{color:#4DB6AC!important}.mui--bg-color-teal-300{background-color:#4DB6AC!important}.mui--color-teal-400{color:#26A69A!important}.mui--color-teal,.mui--color-teal-500{color:#009688!important}.mui--bg-color-teal-400{background-color:#26A69A!important}.mui--bg-color-teal,.mui--bg-color-teal-500{background-color:#009688!important}.mui--color-teal-600{color:#00897B!important}.mui--bg-color-teal-600{background-color:#00897B!important}.mui--color-teal-700{color:#00796B!important}.mui--bg-color-teal-700{background-color:#00796B!important}.mui--color-teal-800{color:#00695C!important}.mui--bg-color-teal-800{background-color:#00695C!important}.mui--color-teal-900{color:#004D40!important}.mui--bg-color-teal-900{background-color:#004D40!important}.mui--color-teal-A100{color:#A7FFEB!important}.mui--bg-color-teal-A100{background-color:#A7FFEB!important}.mui--color-teal-A200{color:#64FFDA!important}.mui--bg-color-teal-A200{background-color:#64FFDA!important}.mui--color-teal-A400{color:#1DE9B6!important}.mui--bg-color-teal-A400{background-color:#1DE9B6!important}.mui--color-teal-A700{color:#00BFA5!important}.mui--bg-color-teal-A700{background-color:#00BFA5!important}.mui--color-green-50{color:#E8F5E9!important}.mui--bg-color-green-50{background-color:#E8F5E9!important}.mui--color-green-100{color:#C8E6C9!important}.mui--bg-color-green-100{background-color:#C8E6C9!important}.mui--color-green-200{color:#A5D6A7!important}.mui--bg-color-green-200{background-color:#A5D6A7!important}.mui--color-green-300{color:#81C784!important}.mui--bg-color-green-300{background-color:#81C784!important}.mui--color-green-400{color:#66BB6A!important}.mui--color-green,.mui--color-green-500{color:#4CAF50!important}.mui--bg-color-green-400{background-color:#66BB6A!important}.mui--bg-color-green,.mui--bg-color-green-500{background-color:#4CAF50!important}.mui--color-green-600{color:#43A047!important}.mui--bg-color-green-600{background-color:#43A047!important}.mui--color-green-700{color:#388E3C!important}.mui--bg-color-green-700{background-color:#388E3C!important}.mui--color-green-800{color:#2E7D32!important}.mui--bg-color-green-800{background-color:#2E7D32!important}.mui--color-green-900{color:#1B5E20!important}.mui--bg-color-green-900{background-color:#1B5E20!important}.mui--color-green-A100{color:#B9F6CA!important}.mui--bg-color-green-A100{background-color:#B9F6CA!important}.mui--color-green-A200{color:#69F0AE!important}.mui--bg-color-green-A200{background-color:#69F0AE!important}.mui--color-green-A400{color:#00E676!important}.mui--bg-color-green-A400{background-color:#00E676!important}.mui--color-green-A700{color:#00C853!important}.mui--bg-color-green-A700{background-color:#00C853!important}.mui--color-light-green-50{color:#F1F8E9!important}.mui--bg-color-light-green-50{background-color:#F1F8E9!important}.mui--color-light-green-100{color:#DCEDC8!important}.mui--bg-color-light-green-100{background-color:#DCEDC8!important}.mui--color-light-green-200{color:#C5E1A5!important}.mui--bg-color-light-green-200{background-color:#C5E1A5!important}.mui--color-light-green-300{color:#AED581!important}.mui--bg-color-light-green-300{background-color:#AED581!important}.mui--color-light-green-400{color:#9CCC65!important}.mui--color-light-green,.mui--color-light-green-500{color:#8BC34A!important}.mui--bg-color-light-green-400{background-color:#9CCC65!important}.mui--bg-color-light-green,.mui--bg-color-light-green-500{background-color:#8BC34A!important}.mui--color-light-green-600{color:#7CB342!important}.mui--bg-color-light-green-600{background-color:#7CB342!important}.mui--color-light-green-700{color:#689F38!important}.mui--bg-color-light-green-700{background-color:#689F38!important}.mui--color-light-green-800{color:#558B2F!important}.mui--bg-color-light-green-800{background-color:#558B2F!important}.mui--color-light-green-900{color:#33691E!important}.mui--bg-color-light-green-900{background-color:#33691E!important}.mui--color-light-green-A100{color:#CCFF90!important}.mui--bg-color-light-green-A100{background-color:#CCFF90!important}.mui--color-light-green-A200{color:#B2FF59!important}.mui--bg-color-light-green-A200{background-color:#B2FF59!important}.mui--color-light-green-A400{color:#76FF03!important}.mui--bg-color-light-green-A400{background-color:#76FF03!important}.mui--color-light-green-A700{color:#64DD17!important}.mui--bg-color-light-green-A700{background-color:#64DD17!important}.mui--color-lime-50{color:#F9FBE7!important}.mui--bg-color-lime-50{background-color:#F9FBE7!important}.mui--color-lime-100{color:#F0F4C3!important}.mui--bg-color-lime-100{background-color:#F0F4C3!important}.mui--color-lime-200{color:#E6EE9C!important}.mui--bg-color-lime-200{background-color:#E6EE9C!important}.mui--color-lime-300{color:#DCE775!important}.mui--bg-color-lime-300{background-color:#DCE775!important}.mui--color-lime-400{color:#D4E157!important}.mui--color-lime,.mui--color-lime-500{color:#CDDC39!important}.mui--bg-color-lime-400{background-color:#D4E157!important}.mui--bg-color-lime,.mui--bg-color-lime-500{background-color:#CDDC39!important}.mui--color-lime-600{color:#C0CA33!important}.mui--bg-color-lime-600{background-color:#C0CA33!important}.mui--color-lime-700{color:#AFB42B!important}.mui--bg-color-lime-700{background-color:#AFB42B!important}.mui--color-lime-800{color:#9E9D24!important}.mui--bg-color-lime-800{background-color:#9E9D24!important}.mui--color-lime-900{color:#827717!important}.mui--bg-color-lime-900{background-color:#827717!important}.mui--color-lime-A100{color:#F4FF81!important}.mui--bg-color-lime-A100{background-color:#F4FF81!important}.mui--color-lime-A200{color:#EEFF41!important}.mui--bg-color-lime-A200{background-color:#EEFF41!important}.mui--color-lime-A400{color:#C6FF00!important}.mui--bg-color-lime-A400{background-color:#C6FF00!important}.mui--color-lime-A700{color:#AEEA00!important}.mui--bg-color-lime-A700{background-color:#AEEA00!important}.mui--color-yellow-50{color:#FFFDE7!important}.mui--bg-color-yellow-50{background-color:#FFFDE7!important}.mui--color-yellow-100{color:#FFF9C4!important}.mui--bg-color-yellow-100{background-color:#FFF9C4!important}.mui--color-yellow-200{color:#FFF59D!important}.mui--bg-color-yellow-200{background-color:#FFF59D!important}.mui--color-yellow-300{color:#FFF176!important}.mui--bg-color-yellow-300{background-color:#FFF176!important}.mui--color-yellow-400{color:#FFEE58!important}.mui--color-yellow,.mui--color-yellow-500{color:#FFEB3B!important}.mui--bg-color-yellow-400{background-color:#FFEE58!important}.mui--bg-color-yellow,.mui--bg-color-yellow-500{background-color:#FFEB3B!important}.mui--color-yellow-600{color:#FDD835!important}.mui--bg-color-yellow-600{background-color:#FDD835!important}.mui--color-yellow-700{color:#FBC02D!important}.mui--bg-color-yellow-700{background-color:#FBC02D!important}.mui--color-yellow-800{color:#F9A825!important}.mui--bg-color-yellow-800{background-color:#F9A825!important}.mui--color-yellow-900{color:#F57F17!important}.mui--bg-color-yellow-900{background-color:#F57F17!important}.mui--color-yellow-A100{color:#FFFF8D!important}.mui--bg-color-yellow-A100{background-color:#FFFF8D!important}.mui--color-yellow-A200{color:#FF0!important}.mui--bg-color-yellow-A200{background-color:#FF0!important}.mui--color-yellow-A400{color:#FFEA00!important}.mui--bg-color-yellow-A400{background-color:#FFEA00!important}.mui--color-yellow-A700{color:#FFD600!important}.mui--bg-color-yellow-A700{background-color:#FFD600!important}.mui--color-amber-50{color:#FFF8E1!important}.mui--bg-color-amber-50{background-color:#FFF8E1!important}.mui--color-amber-100{color:#FFECB3!important}.mui--bg-color-amber-100{background-color:#FFECB3!important}.mui--color-amber-200{color:#FFE082!important}.mui--bg-color-amber-200{background-color:#FFE082!important}.mui--color-amber-300{color:#FFD54F!important}.mui--bg-color-amber-300{background-color:#FFD54F!important}.mui--color-amber-400{color:#FFCA28!important}.mui--color-amber,.mui--color-amber-500{color:#FFC107!important}.mui--bg-color-amber-400{background-color:#FFCA28!important}.mui--bg-color-amber,.mui--bg-color-amber-500{background-color:#FFC107!important}.mui--color-amber-600{color:#FFB300!important}.mui--bg-color-amber-600{background-color:#FFB300!important}.mui--color-amber-700{color:#FFA000!important}.mui--bg-color-amber-700{background-color:#FFA000!important}.mui--color-amber-800{color:#FF8F00!important}.mui--bg-color-amber-800{background-color:#FF8F00!important}.mui--color-amber-900{color:#FF6F00!important}.mui--bg-color-amber-900{background-color:#FF6F00!important}.mui--color-amber-A100{color:#FFE57F!important}.mui--bg-color-amber-A100{background-color:#FFE57F!important}.mui--color-amber-A200{color:#FFD740!important}.mui--bg-color-amber-A200{background-color:#FFD740!important}.mui--color-amber-A400{color:#FFC400!important}.mui--bg-color-amber-A400{background-color:#FFC400!important}.mui--color-amber-A700{color:#FFAB00!important}.mui--bg-color-amber-A700{background-color:#FFAB00!important}.mui--color-orange-50{color:#FFF3E0!important}.mui--bg-color-orange-50{background-color:#FFF3E0!important}.mui--color-orange-100{color:#FFE0B2!important}.mui--bg-color-orange-100{background-color:#FFE0B2!important}.mui--color-orange-200{color:#FFCC80!important}.mui--bg-color-orange-200{background-color:#FFCC80!important}.mui--color-orange-300{color:#FFB74D!important}.mui--bg-color-orange-300{background-color:#FFB74D!important}.mui--color-orange-400{color:#FFA726!important}.mui--color-orange,.mui--color-orange-500{color:#FF9800!important}.mui--bg-color-orange-400{background-color:#FFA726!important}.mui--bg-color-orange,.mui--bg-color-orange-500{background-color:#FF9800!important}.mui--color-orange-600{color:#FB8C00!important}.mui--bg-color-orange-600{background-color:#FB8C00!important}.mui--color-orange-700{color:#F57C00!important}.mui--bg-color-orange-700{background-color:#F57C00!important}.mui--color-orange-800{color:#EF6C00!important}.mui--bg-color-orange-800{background-color:#EF6C00!important}.mui--color-orange-900{color:#E65100!important}.mui--bg-color-orange-900{background-color:#E65100!important}.mui--color-orange-A100{color:#FFD180!important}.mui--bg-color-orange-A100{background-color:#FFD180!important}.mui--color-orange-A200{color:#FFAB40!important}.mui--bg-color-orange-A200{background-color:#FFAB40!important}.mui--color-orange-A400{color:#FF9100!important}.mui--bg-color-orange-A400{background-color:#FF9100!important}.mui--color-orange-A700{color:#FF6D00!important}.mui--bg-color-orange-A700{background-color:#FF6D00!important}.mui--color-deep-orange-50{color:#FBE9E7!important}.mui--bg-color-deep-orange-50{background-color:#FBE9E7!important}.mui--color-deep-orange-100{color:#FFCCBC!important}.mui--bg-color-deep-orange-100{background-color:#FFCCBC!important}.mui--color-deep-orange-200{color:#FFAB91!important}.mui--bg-color-deep-orange-200{background-color:#FFAB91!important}.mui--color-deep-orange-300{color:#FF8A65!important}.mui--bg-color-deep-orange-300{background-color:#FF8A65!important}.mui--color-deep-orange-400{color:#FF7043!important}.mui--color-deep-orange,.mui--color-deep-orange-500{color:#FF5722!important}.mui--bg-color-deep-orange-400{background-color:#FF7043!important}.mui--bg-color-deep-orange,.mui--bg-color-deep-orange-500{background-color:#FF5722!important}.mui--color-deep-orange-600{color:#F4511E!important}.mui--bg-color-deep-orange-600{background-color:#F4511E!important}.mui--color-deep-orange-700{color:#E64A19!important}.mui--bg-color-deep-orange-700{background-color:#E64A19!important}.mui--color-deep-orange-800{color:#D84315!important}.mui--bg-color-deep-orange-800{background-color:#D84315!important}.mui--color-deep-orange-900{color:#BF360C!important}.mui--bg-color-deep-orange-900{background-color:#BF360C!important}.mui--color-deep-orange-A100{color:#FF9E80!important}.mui--bg-color-deep-orange-A100{background-color:#FF9E80!important}.mui--color-deep-orange-A200{color:#FF6E40!important}.mui--bg-color-deep-orange-A200{background-color:#FF6E40!important}.mui--color-deep-orange-A400{color:#FF3D00!important}.mui--bg-color-deep-orange-A400{background-color:#FF3D00!important}.mui--color-deep-orange-A700{color:#DD2C00!important}.mui--bg-color-deep-orange-A700{background-color:#DD2C00!important}.mui--color-brown-50{color:#EFEBE9!important}.mui--bg-color-brown-50{background-color:#EFEBE9!important}.mui--color-brown-100{color:#D7CCC8!important}.mui--bg-color-brown-100{background-color:#D7CCC8!important}.mui--color-brown-200{color:#BCAAA4!important}.mui--bg-color-brown-200{background-color:#BCAAA4!important}.mui--color-brown-300{color:#A1887F!important}.mui--bg-color-brown-300{background-color:#A1887F!important}.mui--color-brown-400{color:#8D6E63!important}.mui--color-brown,.mui--color-brown-500{color:#795548!important}.mui--bg-color-brown-400{background-color:#8D6E63!important}.mui--bg-color-brown,.mui--bg-color-brown-500{background-color:#795548!important}.mui--color-brown-600{color:#6D4C41!important}.mui--bg-color-brown-600{background-color:#6D4C41!important}.mui--color-brown-700{color:#5D4037!important}.mui--bg-color-brown-700{background-color:#5D4037!important}.mui--color-brown-800{color:#4E342E!important}.mui--bg-color-brown-800{background-color:#4E342E!important}.mui--color-brown-900{color:#3E2723!important}.mui--bg-color-brown-900{background-color:#3E2723!important}.mui--color-grey-50{color:#FAFAFA!important}.mui--bg-color-grey-50{background-color:#FAFAFA!important}.mui--color-grey-100{color:#F5F5F5!important}.mui--bg-color-grey-100{background-color:#F5F5F5!important}.mui--color-grey-200{color:#EEE!important}.mui--bg-color-grey-200{background-color:#EEE!important}.mui--color-grey-300{color:#E0E0E0!important}.mui--bg-color-grey-300{background-color:#E0E0E0!important}.mui--color-grey-400{color:#BDBDBD!important}.mui--color-grey,.mui--color-grey-500{color:#9E9E9E!important}.mui--bg-color-grey-400{background-color:#BDBDBD!important}.mui--bg-color-grey,.mui--bg-color-grey-500{background-color:#9E9E9E!important}.mui--color-grey-600{color:#757575!important}.mui--bg-color-grey-600{background-color:#757575!important}.mui--color-grey-700{color:#616161!important}.mui--bg-color-grey-700{background-color:#616161!important}.mui--color-grey-800{color:#424242!important}.mui--bg-color-grey-800{background-color:#424242!important}.mui--color-grey-900{color:#212121!important}.mui--bg-color-grey-900{background-color:#212121!important}.mui--color-blue-grey-50{color:#ECEFF1!important}.mui--bg-color-blue-grey-50{background-color:#ECEFF1!important}.mui--color-blue-grey-100{color:#CFD8DC!important}.mui--bg-color-blue-grey-100{background-color:#CFD8DC!important}.mui--color-blue-grey-200{color:#B0BEC5!important}.mui--bg-color-blue-grey-200{background-color:#B0BEC5!important}.mui--color-blue-grey-300{color:#90A4AE!important}.mui--bg-color-blue-grey-300{background-color:#90A4AE!important}.mui--color-blue-grey-400{color:#78909C!important}.mui--color-blue-grey,.mui--color-blue-grey-500{color:#607D8B!important}.mui--bg-color-blue-grey-400{background-color:#78909C!important}.mui--bg-color-blue-grey,.mui--bg-color-blue-grey-500{background-color:#607D8B!important}.mui--color-blue-grey-600{color:#546E7A!important}.mui--bg-color-blue-grey-600{background-color:#546E7A!important}.mui--color-blue-grey-700{color:#455A64!important}.mui--bg-color-blue-grey-700{background-color:#455A64!important}.mui--color-blue-grey-800{color:#37474F!important}.mui--bg-color-blue-grey-800{background-color:#37474F!important}.mui--color-blue-grey-900{color:#263238!important}.mui--bg-color-blue-grey-900{background-color:#263238!important}.mui--color-black{color:#000!important}.mui--bg-color-black{background-color:#000!important}.mui--color-white{color:#FFF!important}.mui--bg-color-white{background-color:#FFF!important}.mui--color-black-alpha-12{color:rgba(0,0,0,.12)!important}.mui--bg-color-black-alpha-12{background-color:rgba(0,0,0,.12)!important}.mui--color-black-alpha-38{color:rgba(0,0,0,.38)!important}.mui--bg-color-black-alpha-38{background-color:rgba(0,0,0,.38)!important}.mui--color-black-alpha-54{color:rgba(0,0,0,.54)!important}.mui--bg-color-black-alpha-54{background-color:rgba(0,0,0,.54)!important}.mui--color-black-alpha-87{color:rgba(0,0,0,.87)!important}.mui--bg-color-black-alpha-87{background-color:rgba(0,0,0,.87)!important}.mui--color-white-alpha-12{color:rgba(255,255,255,.12)!important}.mui--bg-color-white-alpha-12{background-color:rgba(255,255,255,.12)!important}.mui--color-white-alpha-30{color:rgba(255,255,255,.3)!important}.mui--bg-color-white-alpha-30{background-color:rgba(255,255,255,.3)!important}.mui--color-white-alpha-70{color:rgba(255,255,255,.7)!important}.mui--bg-color-white-alpha-70{background-color:rgba(255,255,255,.7)!important} \ No newline at end of file diff --git a/www/libs/mui/packages/cdn/extra/mui-combined.js b/www/libs/mui/packages/cdn/extra/mui-combined.js new file mode 100644 index 0000000..2294236 --- /dev/null +++ b/www/libs/mui/packages/cdn/extra/mui-combined.js @@ -0,0 +1,2 @@ +!function i(t,e,o){function n(a,r){if(!e[a]){if(!t[a]){var u="function"==typeof require&&require;if(!r&&u)return u(a,!0);if(l)return l(a,!0);throw new Error("Cannot find module '"+a+"'")}var m=e[a]={exports:{}};t[a][0].call(m.exports,function(i){var e=t[a][1][i];return n(e?e:i)},m,m.exports,i,t,e,o)}return e[a].exports}for(var l="function"==typeof require&&require,a=0;as&&(f=r+(e+1)*a-(-1*o+n+l),b=t*a+2*r-p,x=Math.min(f,b)),{height:p+"px",top:o+"px",scrollTop:x}}var n=15,l=32,a=42,r=8;t.exports={getMenuPositionalCSS:o}},{}],5:[function(i,t,e){"use strict";function o(i,t){if(t&&i.setAttribute){for(var e,o=b(i),n=t.split(" "),l=0;l-1:!1}function a(i){if(void 0===i)return"undefined";var t=Object.prototype.toString.call(i);if(0===t.indexOf("[object "))return t.slice(8,-1).toLowerCase();throw new Error("MUI: Could not understand type: "+t)}function r(i,t,e,o){o=void 0===o?!1:o,i.addEventListener(t,e,o);var n=i._muiEventCache=i._muiEventCache||{};n[t]=n[t]||[],n[t].push([e,o])}function u(i,t,e,o){o=void 0===o?!1:o;var n,l,a=i._muiEventCache=i._muiEventCache||{},r=a[t]||[];for(l=r.length;l--;)n=r[l],(void 0===e||n[0]===e&&n[1]===o)&&(r.splice(l,1),i.removeEventListener(t,n[0],n[1]))}function m(i,t,e,o){r(i,t,function n(o){e&&e.apply(this,arguments),u(i,t,n)},o)}function d(i,t){var e=window;if(void 0===t){if(i===e){var o=document.documentElement;return(e.pageXOffset||o.scrollLeft)-(o.clientLeft||0)}return i.scrollLeft}i===e?e.scrollTo(t,s(e)):i.scrollLeft=t}function s(i,t){var e=window;if(void 0===t){if(i===e){var o=document.documentElement;return(e.pageYOffset||o.scrollTop)-(o.clientTop||0)}return i.scrollTop}i===e?e.scrollTo(d(e),t):i.scrollTop=t}function c(i){var t=window,e=i.getBoundingClientRect(),o=s(t),n=d(t);return{top:e.top+o,left:e.left+n,height:e.height,width:e.width}}function p(i){var t=!1,e=!0,o=document,n=o.defaultView,l=o.documentElement,a=o.addEventListener?"addEventListener":"attachEvent",r=o.addEventListener?"removeEventListener":"detachEvent",u=o.addEventListener?"":"on",m=function(e){"readystatechange"==e.type&&"complete"!=o.readyState||(("load"==e.type?n:o)[r](u+e.type,m,!1),!t&&(t=!0)&&i.call(n,e.type||e))},d=function(){try{l.doScroll("left")}catch(i){return void setTimeout(d,50)}m("poll")};if("complete"==o.readyState)i.call(n,"lazy");else{if(o.createEventObject&&l.doScroll){try{e=!n.frameElement}catch(s){}e&&d()}o[a](u+"DOMContentLoaded",m,!1),o[a](u+"readystatechange",m,!1),n[a](u+"load",m,!1)}}function f(i,t){if(t&&i.setAttribute){for(var e,o=b(i),n=t.split(" "),l=0;l=0;)o=o.replace(" "+e+" "," ");i.setAttribute("class",o.trim())}}function b(i){var t=(i.getAttribute("class")||"").replace(/[\n\t]/g,"");return" "+t+" "}function x(i){return i.replace(v,function(i,t,e,o){return o?e.toUpperCase():e}).replace(y,"Moz$1")}function h(i,t,e){var o;return o=e.getPropertyValue(t),""!==o||i.ownerDocument||(o=i.style[x(t)]),o}var g,v=/([\:\-\_]+(.))/g,y=/^moz([A-Z])/;g={multiple:!0,selected:!0,checked:!0,disabled:!0,readonly:!0,required:!0,open:!0},t.exports={addClass:o,css:n,hasClass:l,off:u,offset:c,on:r,one:m,ready:p,removeClass:f,type:a,scrollLeft:d,scrollTop:s}},{}],6:[function(i,t,e){"use strict";function o(){var i=window;if(x.debug&&"undefined"!=typeof i.console)try{i.console.log.apply(i.console,arguments)}catch(t){var e=Array.prototype.slice.call(arguments);i.console.log(e.join("\n"))}}function n(i){var t,e=document;t=e.head||e.getElementsByTagName("head")[0]||e.documentElement;var o=e.createElement("style");return o.type="text/css",o.styleSheet?o.styleSheet.cssText=i:o.appendChild(e.createTextNode(i)),t.insertBefore(o,t.firstChild),o}function l(i,t){if(!t)throw new Error("MUI: "+i);"undefined"!=typeof console&&console.error("MUI Warning: "+i)}function a(i){if(g.push(i),void 0===g._initialized){var t=document;h.on(t,"animationstart",r),h.on(t,"mozAnimationStart",r),h.on(t,"webkitAnimationStart",r),g._initialized=!0}}function r(i){if("mui-node-inserted"===i.animationName)for(var t=i.target,e=g.length-1;e>=0;e--)g[e](t)}function u(i){var t="";for(var e in i)t+=i[e]?e+" ":"";return t.trim()}function m(){if(void 0!==b)return b;var i=document.createElement("x");return i.style.cssText="pointer-events:auto",b="auto"===i.style.pointerEvents}function d(i,t){return function(){i[t].apply(i,arguments)}}function s(i,t,e,o,n){var l,a=document.createEvent("HTMLEvents"),e=void 0!==e?e:!0,o=void 0!==o?o:!0;if(a.initEvent(t,e,o),n)for(l in n)a[l]=n[l];return i&&i.dispatchEvent(a),a}function c(){if(v+=1,1===v){var i=window,t=document;f={left:h.scrollLeft(i),top:h.scrollTop(i)},h.addClass(t.body,y),i.scrollTo(f.left,f.top)}}function p(){if(0!==v&&(v-=1,0===v)){var i=window,t=document;h.removeClass(t.body,y),i.scrollTo(f.left,f.top)}}var f,b,x=i("../config"),h=i("./jqLite"),g=[],v=0,y="mui-body--scroll-lock";t.exports={callback:d,classNames:u,disableScrollLock:p,dispatchEvent:s,enableScrollLock:c,log:o,loadStyle:n,onNodeInserted:a,raiseError:l,supportsPointerEvents:m}},{"../config":3,"./jqLite":5}],7:[function(i,t,e){t.exports='/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-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{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}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{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{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-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:border-box}:after,:before{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:Arial,Verdana,Tahoma;font-size:14px;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);background-color:#FFF}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#2196F3;text-decoration:none}a:focus,a:hover{color:#1976D2;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}p{margin:0 0 10px}ol,ul{margin-top:0;margin-bottom:10px}figure{margin:0}img{vertical-align:middle}hr{margin-top:20px;margin-bottom:20px;border:0;height:1px;background-color:rgba(0,0,0,.12)}legend{display:block;width:100%;padding:0;margin-bottom:10px;font-size:21px;color:rgba(0,0,0,.87);line-height:inherit;border:0}input[type=search]{box-sizing:border-box;-webkit-appearance:none}input[type=checkbox]:focus,input[type=radio]:focus,input[type=file]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type=checkbox]:disabled,input[type=radio]:disabled{cursor:not-allowed}strong{font-weight:700}abbr[title]{cursor:help;border-bottom:1px dotted #2196F3}h1,h2,h3{margin-top:20px;margin-bottom:10px}h4,h5,h6{margin-top:10px;margin-bottom:10px}.mui--appbar-height{height:56px}.mui--appbar-min-height,.mui-appbar{min-height:56px}.mui--appbar-line-height{line-height:56px}.mui--appbar-top{top:56px}@media (orientation:landscape) and (max-height:480px){.mui--appbar-height{height:48px}.mui--appbar-min-height,.mui-appbar{min-height:48px}.mui--appbar-line-height{line-height:48px}.mui--appbar-top{top:48px}}@media (min-width:480px){.mui--appbar-height{height:64px}.mui--appbar-min-height,.mui-appbar{min-height:64px}.mui--appbar-line-height{line-height:64px}.mui--appbar-top{top:64px}}.mui-appbar{background-color:#2196F3;color:#FFF}.mui-btn{animation-duration:.1ms;animation-name:mui-node-inserted;font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase;color:rgba(0,0,0,.87);background-color:#FFF;transition:all .2s ease-in-out;display:inline-block;height:36px;padding:0 26px;margin-top:6px;margin-bottom:6px;border:none;border-radius:2px;cursor:pointer;-ms-touch-action:manipulation;touch-action:manipulation;background-image:none;text-align:center;line-height:36px;vertical-align:middle;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:14px;letter-spacing:.03em;position:relative;overflow:hidden}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{color:rgba(0,0,0,.87);background-color:#fff}.mui-btn[disabled]:active,.mui-btn[disabled]:focus,.mui-btn[disabled]:hover{color:rgba(0,0,0,.87);background-color:#FFF}.mui-btn.mui-btn--flat{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn.mui-btn--flat:active,.mui-btn.mui-btn--flat:focus,.mui-btn.mui-btn--flat:hover{color:rgba(0,0,0,.87);background-color:#f2f2f2}.mui-btn.mui-btn--flat[disabled]:active,.mui-btn.mui-btn--flat[disabled]:focus,.mui-btn.mui-btn--flat[disabled]:hover{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{outline:0;text-decoration:none;color:rgba(0,0,0,.87)}.mui-btn:focus,.mui-btn:hover{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:focus,.mui-btn:hover{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn.mui--is-disabled,.mui-btn:disabled{cursor:not-allowed;pointer-events:none;opacity:.6;box-shadow:none}.mui-btn+.mui-btn{margin-left:8px}.mui-btn--flat{background-color:transparent}.mui-btn--flat:active,.mui-btn--flat:focus,.mui-btn--flat:hover{box-shadow:none;background-color:#f2f2f2}.mui-btn--fab,.mui-btn--raised{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab,.mui-btn--raised{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn--fab{position:relative;padding:0;width:55px;height:55px;line-height:55px;border-radius:50%;z-index:1}.mui-btn--primary{color:#FFF;background-color:#2196F3}.mui-btn--primary:active,.mui-btn--primary:focus,.mui-btn--primary:hover{color:#FFF;background-color:#39a1f4}.mui-btn--primary[disabled]:active,.mui-btn--primary[disabled]:focus,.mui-btn--primary[disabled]:hover{color:#FFF;background-color:#2196F3}.mui-btn--primary.mui-btn--flat{color:#2196F3;background-color:transparent}.mui-btn--primary.mui-btn--flat:active,.mui-btn--primary.mui-btn--flat:focus,.mui-btn--primary.mui-btn--flat:hover{color:#2196F3;background-color:#f2f2f2}.mui-btn--primary.mui-btn--flat[disabled]:active,.mui-btn--primary.mui-btn--flat[disabled]:focus,.mui-btn--primary.mui-btn--flat[disabled]:hover{color:#2196F3;background-color:transparent}.mui-btn--dark{color:#FFF;background-color:#424242}.mui-btn--dark:active,.mui-btn--dark:focus,.mui-btn--dark:hover{color:#FFF;background-color:#4f4f4f}.mui-btn--dark[disabled]:active,.mui-btn--dark[disabled]:focus,.mui-btn--dark[disabled]:hover{color:#FFF;background-color:#424242}.mui-btn--dark.mui-btn--flat{color:#424242;background-color:transparent}.mui-btn--dark.mui-btn--flat:active,.mui-btn--dark.mui-btn--flat:focus,.mui-btn--dark.mui-btn--flat:hover{color:#424242;background-color:#f2f2f2}.mui-btn--dark.mui-btn--flat[disabled]:active,.mui-btn--dark.mui-btn--flat[disabled]:focus,.mui-btn--dark.mui-btn--flat[disabled]:hover{color:#424242;background-color:transparent}.mui-btn--danger{color:#FFF;background-color:#F44336}.mui-btn--danger:active,.mui-btn--danger:focus,.mui-btn--danger:hover{color:#FFF;background-color:#f55a4e}.mui-btn--danger[disabled]:active,.mui-btn--danger[disabled]:focus,.mui-btn--danger[disabled]:hover{color:#FFF;background-color:#F44336}.mui-btn--danger.mui-btn--flat{color:#F44336;background-color:transparent}.mui-btn--danger.mui-btn--flat:active,.mui-btn--danger.mui-btn--flat:focus,.mui-btn--danger.mui-btn--flat:hover{color:#F44336;background-color:#f2f2f2}.mui-btn--danger.mui-btn--flat[disabled]:active,.mui-btn--danger.mui-btn--flat[disabled]:focus,.mui-btn--danger.mui-btn--flat[disabled]:hover{color:#F44336;background-color:transparent}.mui-btn--accent{color:#FFF;background-color:#FF4081}.mui-btn--accent:active,.mui-btn--accent:focus,.mui-btn--accent:hover{color:#FFF;background-color:#ff5a92}.mui-btn--accent[disabled]:active,.mui-btn--accent[disabled]:focus,.mui-btn--accent[disabled]:hover{color:#FFF;background-color:#FF4081}.mui-btn--accent.mui-btn--flat{color:#FF4081;background-color:transparent}.mui-btn--accent.mui-btn--flat:active,.mui-btn--accent.mui-btn--flat:focus,.mui-btn--accent.mui-btn--flat:hover{color:#FF4081;background-color:#f2f2f2}.mui-btn--accent.mui-btn--flat[disabled]:active,.mui-btn--accent.mui-btn--flat[disabled]:focus,.mui-btn--accent.mui-btn--flat[disabled]:hover{color:#FF4081;background-color:transparent}.mui-btn--small{height:30.6px;line-height:30.6px;padding:0 16px;font-size:13px}.mui-btn--large{height:54px;line-height:54px;padding:0 26px;font-size:14px}.mui-btn--fab.mui-btn--small{width:44px;height:44px;line-height:44px}.mui-btn--fab.mui-btn--large{width:75px;height:75px;line-height:75px}.mui-checkbox,.mui-radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.mui-checkbox>label,.mui-radio>label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio],.mui-radio>label>input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px}.mui-checkbox+.mui-checkbox,.mui-radio+.mui-radio{margin-top:-5px}.mui-checkbox--inline,.mui-radio--inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.mui-checkbox--inline>input[type=checkbox],.mui-checkbox--inline>input[type=radio],.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox--inline>label>input[type=radio],.mui-radio--inline>input[type=checkbox],.mui-radio--inline>input[type=radio],.mui-radio--inline>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio]{margin:4px 0 0;line-height:normal}.mui-checkbox--inline+.mui-checkbox--inline,.mui-radio--inline+.mui-radio--inline{margin-top:0;margin-left:10px}.mui-container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container:after,.mui-container:before{content:" ";display:table}.mui-container:after{clear:both}@media (min-width:544px){.mui-container{max-width:570px}}@media (min-width:768px){.mui-container{max-width:740px}}@media (min-width:992px){.mui-container{max-width:960px}}@media (min-width:1200px){.mui-container{max-width:1170px}}.mui-container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container-fluid:after,.mui-container-fluid:before{content:" ";display:table}.mui-container-fluid:after{clear:both}.mui-divider{display:block;height:1px;background-color:rgba(0,0,0,.12)}.mui--divider-top{border-top:1px solid rgba(0,0,0,.12)}.mui--divider-bottom{border-bottom:1px solid rgba(0,0,0,.12)}.mui--divider-left{border-left:1px solid rgba(0,0,0,.12)}.mui--divider-right{border-right:1px solid rgba(0,0,0,.12)}.mui-dropdown{display:inline-block;position:relative}[data-mui-toggle=dropdown]{animation-duration:.1ms;animation-name:mui-node-inserted;outline:0}.mui-dropdown__menu{position:absolute;top:100%;left:0;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#FFF;border-radius:2px;z-index:1;background-clip:padding-box}.mui-dropdown__menu.mui--is-open{display:block}.mui-dropdown__menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);white-space:nowrap}.mui-dropdown__menu>li>a:focus,.mui-dropdown__menu>li>a:hover{text-decoration:none;color:rgba(0,0,0,.87);background-color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a,.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;cursor:not-allowed}.mui-dropdown__menu--right{left:auto;right:0}@media (min-width:544px){.mui-form--inline>.mui-textfield{display:inline-block;margin-bottom:0}.mui-form--inline>.mui-checkbox,.mui-form--inline>.mui-radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.mui-form--inline>.mui-checkbox>label,.mui-form--inline>.mui-radio>label{padding-left:0}.mui-form--inline>.mui-checkbox>label>input[type=checkbox],.mui-form--inline>.mui-radio>label>input[type=radio]{position:relative;margin-left:0}.mui-form--inline>.mui-select{display:inline-block}.mui-form--inline>.mui-btn{margin-bottom:0;margin-top:0;vertical-align:bottom}}.mui-row{margin-left:-15px;margin-right:-15px}.mui-row:after,.mui-row:before{content:" ";display:table}.mui-row:after{clear:both}.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9,.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9,.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9,.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{min-height:1px;padding-left:15px;padding-right:15px}.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{float:left}.mui-col-xs-1{width:8.33333%}.mui-col-xs-2{width:16.66667%}.mui-col-xs-3{width:25%}.mui-col-xs-4{width:33.33333%}.mui-col-xs-5{width:41.66667%}.mui-col-xs-6{width:50%}.mui-col-xs-7{width:58.33333%}.mui-col-xs-8{width:66.66667%}.mui-col-xs-9{width:75%}.mui-col-xs-10{width:83.33333%}.mui-col-xs-11{width:91.66667%}.mui-col-xs-12{width:100%}.mui-col-xs-offset-0{margin-left:0}.mui-col-xs-offset-1{margin-left:8.33333%}.mui-col-xs-offset-2{margin-left:16.66667%}.mui-col-xs-offset-3{margin-left:25%}.mui-col-xs-offset-4{margin-left:33.33333%}.mui-col-xs-offset-5{margin-left:41.66667%}.mui-col-xs-offset-6{margin-left:50%}.mui-col-xs-offset-7{margin-left:58.33333%}.mui-col-xs-offset-8{margin-left:66.66667%}.mui-col-xs-offset-9{margin-left:75%}.mui-col-xs-offset-10{margin-left:83.33333%}.mui-col-xs-offset-11{margin-left:91.66667%}.mui-col-xs-offset-12{margin-left:100%}@media (min-width:544px){.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9{float:left}.mui-col-sm-1{width:8.33333%}.mui-col-sm-2{width:16.66667%}.mui-col-sm-3{width:25%}.mui-col-sm-4{width:33.33333%}.mui-col-sm-5{width:41.66667%}.mui-col-sm-6{width:50%}.mui-col-sm-7{width:58.33333%}.mui-col-sm-8{width:66.66667%}.mui-col-sm-9{width:75%}.mui-col-sm-10{width:83.33333%}.mui-col-sm-11{width:91.66667%}.mui-col-sm-12{width:100%}.mui-col-sm-offset-0{margin-left:0}.mui-col-sm-offset-1{margin-left:8.33333%}.mui-col-sm-offset-2{margin-left:16.66667%}.mui-col-sm-offset-3{margin-left:25%}.mui-col-sm-offset-4{margin-left:33.33333%}.mui-col-sm-offset-5{margin-left:41.66667%}.mui-col-sm-offset-6{margin-left:50%}.mui-col-sm-offset-7{margin-left:58.33333%}.mui-col-sm-offset-8{margin-left:66.66667%}.mui-col-sm-offset-9{margin-left:75%}.mui-col-sm-offset-10{margin-left:83.33333%}.mui-col-sm-offset-11{margin-left:91.66667%}.mui-col-sm-offset-12{margin-left:100%}}@media (min-width:768px){.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9{float:left}.mui-col-md-1{width:8.33333%}.mui-col-md-2{width:16.66667%}.mui-col-md-3{width:25%}.mui-col-md-4{width:33.33333%}.mui-col-md-5{width:41.66667%}.mui-col-md-6{width:50%}.mui-col-md-7{width:58.33333%}.mui-col-md-8{width:66.66667%}.mui-col-md-9{width:75%}.mui-col-md-10{width:83.33333%}.mui-col-md-11{width:91.66667%}.mui-col-md-12{width:100%}.mui-col-md-offset-0{margin-left:0}.mui-col-md-offset-1{margin-left:8.33333%}.mui-col-md-offset-2{margin-left:16.66667%}.mui-col-md-offset-3{margin-left:25%}.mui-col-md-offset-4{margin-left:33.33333%}.mui-col-md-offset-5{margin-left:41.66667%}.mui-col-md-offset-6{margin-left:50%}.mui-col-md-offset-7{margin-left:58.33333%}.mui-col-md-offset-8{margin-left:66.66667%}.mui-col-md-offset-9{margin-left:75%}.mui-col-md-offset-10{margin-left:83.33333%}.mui-col-md-offset-11{margin-left:91.66667%}.mui-col-md-offset-12{margin-left:100%}}@media (min-width:992px){.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9{float:left}.mui-col-lg-1{width:8.33333%}.mui-col-lg-2{width:16.66667%}.mui-col-lg-3{width:25%}.mui-col-lg-4{width:33.33333%}.mui-col-lg-5{width:41.66667%}.mui-col-lg-6{width:50%}.mui-col-lg-7{width:58.33333%}.mui-col-lg-8{width:66.66667%}.mui-col-lg-9{width:75%}.mui-col-lg-10{width:83.33333%}.mui-col-lg-11{width:91.66667%}.mui-col-lg-12{width:100%}.mui-col-lg-offset-0{margin-left:0}.mui-col-lg-offset-1{margin-left:8.33333%}.mui-col-lg-offset-2{margin-left:16.66667%}.mui-col-lg-offset-3{margin-left:25%}.mui-col-lg-offset-4{margin-left:33.33333%}.mui-col-lg-offset-5{margin-left:41.66667%}.mui-col-lg-offset-6{margin-left:50%}.mui-col-lg-offset-7{margin-left:58.33333%}.mui-col-lg-offset-8{margin-left:66.66667%}.mui-col-lg-offset-9{margin-left:75%}.mui-col-lg-offset-10{margin-left:83.33333%}.mui-col-lg-offset-11{margin-left:91.66667%}.mui-col-lg-offset-12{margin-left:100%}}@media (min-width:1200px){.mui-col-xl-1,.mui-col-xl-10,.mui-col-xl-11,.mui-col-xl-12,.mui-col-xl-2,.mui-col-xl-3,.mui-col-xl-4,.mui-col-xl-5,.mui-col-xl-6,.mui-col-xl-7,.mui-col-xl-8,.mui-col-xl-9{float:left}.mui-col-xl-1{width:8.33333%}.mui-col-xl-2{width:16.66667%}.mui-col-xl-3{width:25%}.mui-col-xl-4{width:33.33333%}.mui-col-xl-5{width:41.66667%}.mui-col-xl-6{width:50%}.mui-col-xl-7{width:58.33333%}.mui-col-xl-8{width:66.66667%}.mui-col-xl-9{width:75%}.mui-col-xl-10{width:83.33333%}.mui-col-xl-11{width:91.66667%}.mui-col-xl-12{width:100%}.mui-col-xl-offset-0{margin-left:0}.mui-col-xl-offset-1{margin-left:8.33333%}.mui-col-xl-offset-2{margin-left:16.66667%}.mui-col-xl-offset-3{margin-left:25%}.mui-col-xl-offset-4{margin-left:33.33333%}.mui-col-xl-offset-5{margin-left:41.66667%}.mui-col-xl-offset-6{margin-left:50%}.mui-col-xl-offset-7{margin-left:58.33333%}.mui-col-xl-offset-8{margin-left:66.66667%}.mui-col-xl-offset-9{margin-left:75%}.mui-col-xl-offset-10{margin-left:83.33333%}.mui-col-xl-offset-11{margin-left:91.66667%}.mui-col-xl-offset-12{margin-left:100%}}.mui-panel{padding:15px;margin-bottom:20px;border-radius:0;background-color:#FFF;box-shadow:0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}.mui-panel:after,.mui-panel:before{content:" ";display:table}.mui-panel:after{clear:both}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-panel{box-shadow:0 -1px 2px 0 rgba(0,0,0,.12),-1px 0 2px 0 rgba(0,0,0,.12),0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}}.mui-select{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-select:focus{outline:0}.mui-select:focus>select{height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;height:32px;width:100%;appearance:none;-webkit-appearance:none;-moz-appearance:none;outline:0;border:none;border-bottom:1px solid rgba(0,0,0,.26);border-radius:0;box-shadow:none;background-color:transparent;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iNiIgd2lkdGg9IjEwIj48cG9seWdvbiBwb2ludHM9IjAsMCAxMCwwIDUsNiIgc3R5bGU9ImZpbGw6cmdiYSgwLDAsMCwuMjQpOyIvPjwvc3ZnPg==);background-repeat:no-repeat;background-position:right center;cursor:pointer;color:rgba(0,0,0,.87);font-size:16px;padding:0 25px 0 0}.mui-select>select::-ms-expand{display:none}.mui-select>select:focus{outline:0;height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select:disabled{color:rgba(0,0,0,.38);cursor:not-allowed;background-color:transparent;opacity:1}.mui-select__menu{position:absolute;z-index:2;min-width:100%;overflow-y:auto;padding:8px 0;background-color:#FFF;font-size:16px}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-select__menu{border-left:1px solid rgba(0,0,0,.12);border-top:1px solid rgba(0,0,0,.12)}}.mui-select__menu>div{padding:0 22px;height:42px;line-height:42px;cursor:pointer;white-space:nowrap}.mui-select__menu>div:hover{background-color:#E0E0E0}.mui-select__menu>div.mui--is-selected{background-color:#EEE}th{text-align:left}.mui-table{width:100%;max-width:100%;margin-bottom:20px}.mui-table>tbody>tr>td,.mui-table>tbody>tr>th,.mui-table>tfoot>tr>td,.mui-table>tfoot>tr>th,.mui-table>thead>tr>td,.mui-table>thead>tr>th{padding:10px;line-height:1.429}.mui-table>thead>tr>th{border-bottom:2px solid rgba(0,0,0,.12);font-weight:700}.mui-table>tbody+tbody{border-top:2px solid rgba(0,0,0,.12)}.mui-table.mui-table--bordered>tbody>tr>td{border-bottom:1px solid rgba(0,0,0,.12)}.mui-tabs__bar{list-style:none;padding-left:0;margin-bottom:0;background-color:transparent;white-space:nowrap;overflow-x:auto}.mui-tabs__bar>li{display:inline-block}.mui-tabs__bar>li>a{display:block;white-space:nowrap;text-transform:uppercase;font-weight:500;font-size:14px;color:rgba(0,0,0,.87);cursor:default;height:48px;line-height:48px;padding-left:24px;padding-right:24px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-tabs__bar>li>a:hover{text-decoration:none}.mui-tabs__bar>li.mui--is-active{border-bottom:2px solid #2196F3}.mui-tabs__bar>li.mui--is-active>a{color:#2196F3}.mui-tabs__bar.mui-tabs__bar--justified{display:table;width:100%;table-layout:fixed}.mui-tabs__bar.mui-tabs__bar--justified>li{display:table-cell}.mui-tabs__bar.mui-tabs__bar--justified>li>a{text-align:center;padding-left:0;padding-right:0}.mui-tabs__pane{display:none}.mui-tabs__pane.mui--is-active{display:block}[data-mui-toggle=tab]{animation-duration:.1ms;animation-name:mui-node-inserted}.mui-textfield{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-textfield>label{position:absolute;top:0;display:block;width:100%;color:rgba(0,0,0,.54);font-size:12px;font-weight:400;line-height:15px;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.mui-textfield>textarea{padding-top:5px}.mui-textfield>input,.mui-textfield>textarea{display:block}.mui-textfield>input:focus~label,.mui-textfield>textarea:focus~label{color:#2196F3}.mui-textfield--float-label>label{position:absolute;transform:translate(0,15px);font-size:16px;line-height:32px;color:rgba(0,0,0,.26);text-overflow:clip;cursor:text;pointer-events:none}.mui-textfield--float-label>input:focus~label,.mui-textfield--float-label>textarea:focus~label{transform:translate(0,0);font-size:12px;line-height:15px;text-overflow:ellipsis}.mui-textfield--float-label>input:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>input:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>input:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>textarea:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:rgba(0,0,0,.54);font-size:12px;line-height:15px;transform:translate(0,0);text-overflow:ellipsis}.mui-textfield--wrap-label{display:table;width:100%;padding-top:0}.mui-textfield--wrap-label:not(.mui-textfield--float-label)>label{display:table-header-group;position:static;white-space:normal;overflow-x:visible}.mui-textfield>input,.mui-textfield>textarea{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;background-color:transparent;color:rgba(0,0,0,.87);border:none;border-bottom:1px solid rgba(0,0,0,.26);outline:0;width:100%;font-size:16px;padding:0;box-shadow:none;border-radius:0;background-image:none}.mui-textfield>input:focus,.mui-textfield>textarea:focus{border-color:#2196F3;border-width:2px}.mui-textfield>input:-moz-read-only,.mui-textfield>input:disabled,.mui-textfield>textarea:-moz-read-only,.mui-textfield>textarea:disabled{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input:disabled,.mui-textfield>input:read-only,.mui-textfield>textarea:disabled,.mui-textfield>textarea:read-only{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input::-webkit-input-placeholder,.mui-textfield>textarea::-webkit-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::-moz-placeholder,.mui-textfield>textarea::-moz-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input:-ms-input-placeholder,.mui-textfield>textarea:-ms-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::placeholder,.mui-textfield>textarea::placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input{height:32px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>textarea{min-height:64px}.mui-textfield>textarea[rows]:not([rows="2"]):focus{margin-bottom:-1px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):not(:required),.mui-textfield>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required),.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty){border-color:#F44336;border-width:2px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty){height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required)~label,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):not(:required)~label,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:#F44336}.mui-textfield:not(.mui-textfield--float-label)>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label{color:#F44336}@keyframes mui-node-inserted{from{opacity:.99}to{opacity:1}}.mui--no-transition{transition:none!important}.mui--no-user-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.mui--text-left{text-align:left!important}.mui--text-right{text-align:right!important}.mui--text-center{text-align:center!important}.mui--text-justify{text-align:justify!important}.mui--text-nowrap{white-space:nowrap!important}.mui--align-baseline{vertical-align:baseline!important}.mui--align-top{vertical-align:top!important}.mui--align-middle{vertical-align:middle!important}.mui--align-bottom{vertical-align:bottom!important}.mui--text-dark{color:rgba(0,0,0,.87)}.mui--text-dark-secondary{color:rgba(0,0,0,.54)}.mui--text-dark-hint{color:rgba(0,0,0,.38)}.mui--text-light{color:#FFF}.mui--text-light-secondary{color:rgba(255,255,255,.7)}.mui--text-light-hint{color:rgba(255,255,255,.3)}.mui--text-accent{color:rgba(255,64,129,.87)}.mui--text-accent-secondary{color:rgba(255,64,129,.54)}.mui--text-accent-hint{color:rgba(255,64,129,.38)}.mui--text-black{color:#000}.mui--text-white{color:#FFF}.mui--text-danger{color:#F44336}.mui-list--unstyled{padding-left:0;list-style:none}.mui-list--inline{padding-left:0;list-style:none;margin-left:-5px}.mui-list--inline>li{display:inline-block;padding-left:5px;padding-right:5px}.mui--z1,.mui-dropdown__menu,.mui-select__menu{box-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24)}.mui--z2{box-shadow:0 3px 6px rgba(0,0,0,.16),0 3px 6px rgba(0,0,0,.23)}.mui--z3{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}.mui--z4{box-shadow:0 14px 28px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.22)}.mui--z5{box-shadow:0 19px 38px rgba(0,0,0,.3),0 15px 12px rgba(0,0,0,.22)}.mui--clearfix:after,.mui--clearfix:before{content:" ";display:table}.mui--clearfix:after{clear:both}.mui--pull-right{float:right!important}.mui--pull-left{float:left!important}.mui--hide{display:none!important}.mui--show{display:block!important}.mui--invisible{visibility:hidden}.mui--overflow-hidden{overflow:hidden!important}.mui--overflow-hidden-x{overflow-x:hidden!important}.mui--overflow-hidden-y{overflow-y:hidden!important}.mui--visible-lg-block,.mui--visible-lg-inline,.mui--visible-lg-inline-block,.mui--visible-md-block,.mui--visible-md-inline,.mui--visible-md-inline-block,.mui--visible-sm-block,.mui--visible-sm-inline,.mui--visible-sm-inline-block,.mui--visible-xl-block,.mui--visible-xl-inline,.mui--visible-xl-inline-block,.mui--visible-xs-block,.mui--visible-xs-inline,.mui--visible-xs-inline-block{display:none!important}@media (max-width:543px){.mui-visible-xs{display:block!important}table.mui-visible-xs{display:table}tr.mui-visible-xs{display:table-row!important}td.mui-visible-xs,th.mui-visible-xs{display:table-cell!important}.mui--visible-xs-block{display:block!important}.mui--visible-xs-inline{display:inline!important}.mui--visible-xs-inline-block{display:inline-block!important}}@media (min-width:544px) and (max-width:767px){.mui-visible-sm{display:block!important}table.mui-visible-sm{display:table}tr.mui-visible-sm{display:table-row!important}td.mui-visible-sm,th.mui-visible-sm{display:table-cell!important}.mui--visible-sm-block{display:block!important}.mui--visible-sm-inline{display:inline!important}.mui--visible-sm-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.mui-visible-md{display:block!important}table.mui-visible-md{display:table}tr.mui-visible-md{display:table-row!important}td.mui-visible-md,th.mui-visible-md{display:table-cell!important}.mui--visible-md-block{display:block!important}.mui--visible-md-inline{display:inline!important}.mui--visible-md-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.mui-visible-lg{display:block!important}table.mui-visible-lg{display:table}tr.mui-visible-lg{display:table-row!important}td.mui-visible-lg,th.mui-visible-lg{display:table-cell!important}.mui--visible-lg-block{display:block!important}.mui--visible-lg-inline{display:inline!important}.mui--visible-lg-inline-block{display:inline-block!important}}@media (min-width:1200px){.mui-visible-xl{display:block!important}table.mui-visible-xl{display:table}tr.mui-visible-xl{display:table-row!important}td.mui-visible-xl,th.mui-visible-xl{display:table-cell!important}.mui--visible-xl-block{display:block!important}.mui--visible-xl-inline{display:inline!important}.mui--visible-xl-inline-block{display:inline-block!important}}@media (max-width:543px){.mui--hidden-xs{display:none!important}}@media (min-width:544px) and (max-width:767px){.mui--hidden-sm{display:none!important}}@media (min-width:768px) and (max-width:991px){.mui--hidden-md{display:none!important}}@media (min-width:992px) and (max-width:1199px){.mui--hidden-lg{display:none!important}}@media (min-width:1200px){.mui--hidden-xl{display:none!important}}body.mui-body--scroll-lock{overflow:hidden!important}#mui-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:99999999;background-color:rgba(0,0,0,.2);overflow:auto}.mui-ripple-effect{position:absolute;border-radius:50%;pointer-events:none;opacity:0;animation:mui-ripple-animation 2s}@keyframes mui-ripple-animation{from{transform:scale(1);opacity:.4}to{transform:scale(100);opacity:0}}.mui-btn>.mui-ripple-effect{background-color:#a6a6a6}.mui-btn--primary>.mui-ripple-effect{background-color:#FFF}.mui-btn--dark>.mui-ripple-effect{background-color:#FFF}.mui-btn--danger>.mui-ripple-effect{background-color:#FFF}.mui-btn--accent>.mui-ripple-effect{background-color:#FFF}.mui-btn--flat>.mui-ripple-effect{background-color:#a6a6a6}.mui--text-display4{font-weight:300;font-size:112px;line-height:112px}.mui--text-display3{font-weight:400;font-size:56px;line-height:56px}.mui--text-display2{font-weight:400;font-size:45px;line-height:48px}.mui--text-display1,h1{font-weight:400;font-size:34px;line-height:40px}.mui--text-headline,h2{font-weight:400;font-size:24px;line-height:32px}.mui--text-title,h3{font-weight:400;font-size:20px;line-height:28px}.mui--text-subhead,h4{font-weight:400;font-size:16px;line-height:24px}.mui--text-body2,h5{font-weight:500;font-size:14px;line-height:24px}.mui--text-body1{font-weight:400;font-size:14px;line-height:20px}.mui--text-caption{font-weight:400;font-size:12px;line-height:16px}.mui--text-menu{font-weight:500;font-size:13px;line-height:17px}.mui--text-button{font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase}'; +},{}],8:[function(i,t,e){"use strict";function o(i){i._muiDropdown!==!0&&(i._muiDropdown=!0,i.hasAttribute("type")||(i.type="button"),a.on(i,"click",n))}function n(i){if(0===i.button){var t=this;null===t.getAttribute("disabled")&&l(t)}}function l(i){function t(){a.removeClass(n,d),a.off(l,"click",t)}function e(){var e=o.getBoundingClientRect(),r=i.getBoundingClientRect(),u=r.top-e.top+r.height;a.css(n,"top",u+"px"),a.addClass(n,d),setTimeout(function(){a.on(l,"click",t)},0)}var o=i.parentNode,n=i.nextElementSibling,l=o.ownerDocument;return n&&a.hasClass(n,s)?void(a.hasClass(n,d)?t():e()):r.raiseError("Dropdown menu element not found")}var a=i("./lib/jqLite"),r=i("./lib/util"),u="data-mui-toggle",m='[data-mui-toggle="dropdown"]',d="mui--is-open",s="mui-dropdown__menu";t.exports={initListeners:function(){for(var i=document,t=i.querySelectorAll(m),e=t.length-1;e>=0;e--)o(t[e]);r.onNodeInserted(function(i){"dropdown"===i.getAttribute(u)&&o(i)})}}},{"./lib/jqLite":5,"./lib/util":6}],9:[function(i,t,e){t.exports=i(5)},{}],10:[function(i,t,e){t.exports=i(6)},{"../config":3,"./jqLite":5}],11:[function(i,t,e){"use strict";function o(i){var t;if("on"===i){for(var e,o,a,r=arguments.length-1;r>0;r--)e=arguments[r],"object"===p.type(e)&&(o=e),e instanceof Element&&1===e.nodeType&&(a=e);o=o||{},void 0===o.keyboard&&(o.keyboard=!0),void 0===o["static"]&&(o["static"]=!1),t=n(o,a)}else"off"===i?t=l():c.raiseError("Expecting 'on' or 'off'");return t}function n(i,t){var e=document.body,o=document.getElementById(f);if(c.enableScrollLock(),o){for(;o.firstChild;)o.removeChild(o.firstChild);t&&o.appendChild(t)}else o=document.createElement("div"),o.setAttribute("id",f),t&&o.appendChild(t),e.appendChild(o);return b.test(navigator.userAgent)&&p.css(o,"cursor","pointer"),i.keyboard?a():r(),i["static"]?d(o):m(o),o.muiOptions=i,o}function l(){var i,t=document.getElementById(f);if(t){for(;t.firstChild;)t.removeChild(t.firstChild);t.parentNode.removeChild(t),i=t.muiOptions.onclose,d(t)}return c.disableScrollLock(),r(),i&&i(),t}function a(){p.on(document,"keyup",u)}function r(){p.off(document,"keyup",u)}function u(i){27===i.keyCode&&l()}function m(i){p.on(i,"click",s)}function d(i){p.off(i,"click",s)}function s(i){i.target.id===f&&l()}var c=i("./lib/util"),p=i("./lib/jqLite"),f="mui-overlay",b=/(iPad|iPhone|iPod)/g;t.exports=o},{"./lib/jqLite":5,"./lib/util":6}],12:[function(i,t,e){"use strict";function o(i){i._muiRipple!==!0&&(i._muiRipple=!0,"INPUT"!==i.tagName&&(l.on(i,"touchstart",n),l.on(i,"mousedown",n)))}function n(i){if(0===i.button){var t=this;if(t.disabled!==!0&&t.touchFlag!==!0){t.touchFlag=!0,setTimeout(function(){t.touchFlag=!1},100);var e=document.createElement("div");e.className=m;var o,n,a=l.offset(t),r=i.pageX-a.left,d=i.pageY-a.top;o=l.hasClass(t,u)?a.height/2:a.height,n=o/2,l.css(e,{height:o+"px",width:o+"px",top:d-n+"px",left:r-n+"px"}),t.appendChild(e),window.setTimeout(function(){var i=e.parentNode;i&&i.removeChild(e)},2e3)}}}var l=i("./lib/jqLite"),a=i("./lib/util"),r="mui-btn",u="mui-btn--fab",m="mui-ripple-effect";t.exports={initListeners:function(){for(var i=document,t=i.getElementsByClassName(r),e=t.length-1;e>=0;e--)o(t[e]);a.onNodeInserted(function(i){l.hasClass(i,r)&&o(i)})}}},{"./lib/jqLite":5,"./lib/util":6}],13:[function(i,t,e){"use strict";function o(i){i._muiSelect!==!0&&(i._muiSelect=!0,"ontouchstart"in p.documentElement||new n(i))}function n(i){this.selectEl=i,this.wrapperEl=i.parentNode,this.useDefault=!1,a.on(i,"mousedown",r.callback(this,"mousedownHandler")),a.on(i,"focus",r.callback(this,"focusHandler")),a.on(i,"click",r.callback(this,"clickHandler")),this.wrapperEl.tabIndex=-1;var t=r.callback(this,"wrapperFocusHandler");a.on(this.wrapperEl,"focus",t)}function l(i,t){r.enableScrollLock(),this.origIndex=null,this.currentIndex=null,this.selectEl=t,this.menuEl=this._createMenuEl(i,t),this.clickCallbackFn=r.callback(this,"clickHandler"),this.keydownCallbackFn=r.callback(this,"keydownHandler"),this.destroyCallbackFn=r.callback(this,"destroy"),i.appendChild(this.menuEl),a.scrollTop(this.menuEl,this.menuEl._muiScrollTop),setTimeout(function(){"body"!==p.activeElement.nodeName.toLowerCase()&&p.activeElement.blur()},0),a.on(this.menuEl,"click",this.clickCallbackFn),a.on(p,"keydown",this.keydownCallbackFn),a.on(f,"resize",this.destroyCallbackFn);var e=this.destroyCallbackFn;setTimeout(function(){a.on(p,"click",e)},0)}var a=i("./lib/jqLite"),r=i("./lib/util"),u=i("./lib/forms"),m="mui-select",d=".mui-select > select",s="mui-select__menu",c="mui--is-selected",p=document,f=window;n.prototype.mousedownHandler=function(i){0===i.button&&this.useDefault!==!0&&i.preventDefault()},n.prototype.focusHandler=function(i){if(this.useDefault!==!0){var t=this.selectEl,e=this.wrapperEl,o=t.tabIndex,n=r.callback(this,"keydownHandler");a.on(p,"keydown",n),t.tabIndex=-1,a.one(e,"blur",function(){t.tabIndex=o,a.off(p,"keydown",n)}),e.focus()}},n.prototype.keydownHandler=function(i){var t=i.keyCode;32!==t&&38!==t&&40!==t||(i.preventDefault(),this.selectEl.disabled!==!0&&this.renderMenu())},n.prototype.wrapperFocusHandler=function(){return this.selectEl.disabled?this.wrapperEl.blur():void 0},n.prototype.clickHandler=function(i){0===i.button&&this.renderMenu()},n.prototype.renderMenu=function(){return this.useDefault===!0?this.useDefault=!1:void new l(this.wrapperEl,this.selectEl)},l.prototype._createMenuEl=function(i,t){var e,o,n,l=p.createElement("div"),r=t.children,m=r.length,d=0;for(l.className=s,n=0;m>n;n++)e=r[n],o=p.createElement("div"),o.textContent=e.textContent,o._muiPos=n,e.selected&&(o.setAttribute("class",c),d=n),l.appendChild(o);this.origIndex=d,this.currentIndex=d;var f=u.getMenuPositionalCSS(i,m,d);return a.css(l,f),l._muiScrollTop=f.scrollTop,l},l.prototype.keydownHandler=function(i){var t=i.keyCode;return 9===t?this.destroy():(27!==t&&40!==t&&38!==t&&13!==t||i.preventDefault(),void(27===t?this.destroy():40===t?this.increment():38===t?this.decrement():13===t&&(this.selectCurrent(),this.destroy())))},l.prototype.clickHandler=function(i){i.stopPropagation();var t=i.target._muiPos;void 0!==t&&(this.currentIndex=t,this.selectCurrent(),this.destroy())},l.prototype.increment=function(){if(this.currentIndex!==this.menuEl.children.length-1){var i=this.menuEl.children;a.removeClass(i[this.currentIndex],c),this.currentIndex+=1,a.addClass(i[this.currentIndex],c)}},l.prototype.decrement=function(){if(0!==this.currentIndex){var i=this.menuEl.children;a.removeClass(i[this.currentIndex],c),this.currentIndex-=1,a.addClass(i[this.currentIndex],c)}},l.prototype.selectCurrent=function(){if(this.currentIndex!==this.origIndex){var i=this.selectEl.children;i[this.origIndex].selected=!1,i[this.currentIndex].selected=!0,r.dispatchEvent(this.selectEl,"change")}},l.prototype.destroy=function(){var i=this.menuEl.parentNode;i&&i.removeChild(this.menuEl),this.selectEl.focus(),r.disableScrollLock(),a.off(this.menuEl,"click",this.clickCallbackFn),a.off(p,"keydown",this.keydownCallbackFn),a.off(p,"click",this.destroyCallbackFn),a.off(f,"resize",this.destroyCallbackFn)},t.exports={initListeners:function(){for(var i=p.querySelectorAll(d),t=i.length-1;t>=0;t--)o(i[t]);r.onNodeInserted(function(i){"SELECT"===i.tagName&&a.hasClass(i.parentNode,m)&&o(i)})}}},{"./lib/forms":4,"./lib/jqLite":5,"./lib/util":6}],14:[function(i,t,e){"use strict";function o(i){i._muiTabs!==!0&&(i._muiTabs=!0,r.on(i,"click",n))}function n(i){if(0===i.button){var t=this;null===t.getAttribute("disabled")&&l(t)}}function l(i){var t,e,o,n,l,m,d,h,g,v=i.parentNode,y=i.getAttribute(s),w=document.getElementById(y);r.hasClass(v,c)||(w||u.raiseError('Tab pane "'+y+'" not found'),e=a(w),o=e.id,g="["+s+'="'+o+'"]',n=document.querySelectorAll(g)[0],t=n.parentNode,l={paneId:y,relatedPaneId:o},m={paneId:o,relatedPaneId:y},d=u.dispatchEvent(n,b,!0,!0,m),h=u.dispatchEvent(i,p,!0,!0,l),setTimeout(function(){d.defaultPrevented||h.defaultPrevented||(t&&r.removeClass(t,c),e&&r.removeClass(e,c),r.addClass(v,c),r.addClass(w,c),u.dispatchEvent(n,x,!0,!1,m),u.dispatchEvent(i,f,!0,!1,l))},0))}function a(i){for(var t,e=i.parentNode.children,o=e.length,n=null;o--&&!n;)t=e[o],t!==i&&r.hasClass(t,c)&&(n=t);return n}var r=i("./lib/jqLite"),u=i("./lib/util"),m="data-mui-toggle",d="["+m+'="tab"]',s="data-mui-controls",c="mui--is-active",p="mui.tabs.showstart",f="mui.tabs.showend",b="mui.tabs.hidestart",x="mui.tabs.hideend";t.exports={initListeners:function(){for(var i=document.querySelectorAll(d),t=i.length-1;t>=0;t--)o(i[t]);u.onNodeInserted(function(i){"tab"===i.getAttribute(m)&&o(i)})},api:{activate:function(i){var t="["+s+"="+i+"]",e=document.querySelectorAll(t);e.length||u.raiseError('Tab control for pane "'+i+'" not found'),l(e[0])}}}},{"./lib/jqLite":5,"./lib/util":6}],15:[function(i,t,e){"use strict";function o(i){i._muiTextfield!==!0&&(i._muiTextfield=!0,i.value.length?l.addClass(i,m):l.addClass(i,u),l.on(i,"input",n),l.on(i,"change",n),l.on(i,"focus",function(){l.addClass(this,d)}))}function n(){var i=this;i.value.length?(l.removeClass(i,u),l.addClass(i,m)):(l.removeClass(i,m),l.addClass(i,u)),l.addClass(i,d)}var l=i("./lib/jqLite"),a=i("./lib/util"),r=".mui-textfield > input, .mui-textfield > textarea",u="mui--is-empty",m="mui--is-not-empty",d="mui--is-dirty",s="mui-textfield--float-label";t.exports={initialize:o,initListeners:function(){for(var i=document,t=i.querySelectorAll(r),e=t.length-1;e>=0;e--)o(t[e]);a.onNodeInserted(function(i){"INPUT"!==i.tagName&&"TEXTAREA"!==i.tagName||o(i)}),setTimeout(function(){var i=".mui-textfield.mui-textfield--float-label > label {"+["-webkit-transition","-moz-transition","-o-transition","transition",""].join(":all .15s ease-out;")+"}";a.loadStyle(i)},150),a.supportsPointerEvents()===!1&&l.on(document,"click",function(i){var t=i.target;if("LABEL"===t.tagName&&l.hasClass(t.parentNode,s)){var e=t.previousElementSibling;e&&e.focus()}})}}},{"./lib/jqLite":5,"./lib/util":6}]},{},[2]); \ No newline at end of file diff --git a/www/libs/mui/packages/cdn/extra/mui-react-combined.js b/www/libs/mui/packages/cdn/extra/mui-react-combined.js new file mode 100644 index 0000000..ba3dbcc --- /dev/null +++ b/www/libs/mui/packages/cdn/extra/mui-react-combined.js @@ -0,0 +1,2 @@ +!function(e){var t=e.babelHelpers={};t.classCallCheck=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},t.createClass=function(){function e(e,t){for(var i=0;i=0||Object.prototype.hasOwnProperty.call(e,o)&&(i[o]=e[o]);return i},t.possibleConstructorReturn=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}}("undefined"==typeof global?self:global),function e(t,i,o){function l(r,a){if(!i[r]){if(!t[r]){var s="function"==typeof require&&require;if(!a&&s)return s(r,!0);if(n)return n(r,!0);throw new Error("Cannot find module '"+r+"'")}var u=i[r]={exports:{}};t[r][0].call(u.exports,function(e){var i=t[r][1][e];return l(i?i:e)},u,u.exports,e,t,i,o)}return i[r].exports}for(var n="function"==typeof require&&require,r=0;rp&&(b=a+(i+1)*r-(-1*o+l+n),f=t*r+2*a-m,h=Math.min(b,f)),{height:m+"px",top:o+"px",scrollTop:h}}var l=15,n=32,r=42,a=8;t.exports={getMenuPositionalCSS:o}},{}],5:[function(e,t,i){"use strict";function o(e,t){if(t&&e.setAttribute){for(var i,o=f(e),l=t.split(" "),n=0;n-1:!1}function r(e){if(void 0===e)return"undefined";var t=Object.prototype.toString.call(e);if(0===t.indexOf("[object "))return t.slice(8,-1).toLowerCase();throw new Error("MUI: Could not understand type: "+t)}function a(e,t,i,o){o=void 0===o?!1:o,e.addEventListener(t,i,o);var l=e._muiEventCache=e._muiEventCache||{};l[t]=l[t]||[],l[t].push([i,o])}function s(e,t,i,o){o=void 0===o?!1:o;var l,n,r=e._muiEventCache=e._muiEventCache||{},a=r[t]||[];for(n=a.length;n--;)l=a[n],(void 0===i||l[0]===i&&l[1]===o)&&(a.splice(n,1),e.removeEventListener(t,l[0],l[1]))}function u(e,t,i,o){a(e,t,function l(o){i&&i.apply(this,arguments),s(e,t,l)},o)}function c(e,t){var i=window;if(void 0===t){if(e===i){var o=document.documentElement;return(i.pageXOffset||o.scrollLeft)-(o.clientLeft||0)}return e.scrollLeft}e===i?i.scrollTo(t,p(i)):e.scrollLeft=t}function p(e,t){var i=window;if(void 0===t){if(e===i){var o=document.documentElement;return(i.pageYOffset||o.scrollTop)-(o.clientTop||0)}return e.scrollTop}e===i?i.scrollTo(c(i),t):e.scrollTop=t}function d(e){var t=window,i=e.getBoundingClientRect(),o=p(t),l=c(t);return{top:i.top+o,left:i.left+l,height:i.height,width:i.width}}function m(e){var t=!1,i=!0,o=document,l=o.defaultView,n=o.documentElement,r=o.addEventListener?"addEventListener":"attachEvent",a=o.addEventListener?"removeEventListener":"detachEvent",s=o.addEventListener?"":"on",u=function d(i){"readystatechange"==i.type&&"complete"!=o.readyState||(("load"==i.type?l:o)[a](s+i.type,d,!1),!t&&(t=!0)&&e.call(l,i.type||i))},c=function m(){try{n.doScroll("left")}catch(e){return void setTimeout(m,50)}u("poll")};if("complete"==o.readyState)e.call(l,"lazy");else{if(o.createEventObject&&n.doScroll){try{i=!l.frameElement}catch(p){}i&&c()}o[r](s+"DOMContentLoaded",u,!1),o[r](s+"readystatechange",u,!1),l[r](s+"load",u,!1)}}function b(e,t){if(t&&e.setAttribute){for(var i,o=f(e),l=t.split(" "),n=0;n=0;)o=o.replace(" "+i+" "," ");e.setAttribute("class",o.trim())}}function f(e){var t=(e.getAttribute("class")||"").replace(/[\n\t]/g,"");return" "+t+" "}function h(e){return e.replace(v,function(e,t,i,o){return o?i.toUpperCase():i}).replace(y,"Moz$1")}function g(e,t,i){var o;return o=i.getPropertyValue(t),""!==o||e.ownerDocument||(o=e.style[h(t)]),o}var x,v=/([\:\-\_]+(.))/g,y=/^moz([A-Z])/;x={multiple:!0,selected:!0,checked:!0,disabled:!0,readonly:!0,required:!0,open:!0},t.exports={addClass:o,css:l,hasClass:n,off:s,offset:d,on:a,one:u,ready:m,removeClass:b,type:r,scrollLeft:c,scrollTop:p}},{}],6:[function(e,t,i){"use strict";function o(){var e=window;if(h.debug&&"undefined"!=typeof e.console)try{e.console.log.apply(e.console,arguments)}catch(t){var i=Array.prototype.slice.call(arguments);e.console.log(i.join("\n"))}}function l(e){var t,i=document;t=i.head||i.getElementsByTagName("head")[0]||i.documentElement;var o=i.createElement("style");return o.type="text/css",o.styleSheet?o.styleSheet.cssText=e:o.appendChild(i.createTextNode(e)),t.insertBefore(o,t.firstChild),o}function n(e,t){if(!t)throw new Error("MUI: "+e);"undefined"!=typeof console&&console.error("MUI Warning: "+e)}function r(e){if(x.push(e),void 0===x._initialized){var t=document;g.on(t,"animationstart",a),g.on(t,"mozAnimationStart",a),g.on(t,"webkitAnimationStart",a),x._initialized=!0}}function a(e){if("mui-node-inserted"===e.animationName)for(var t=e.target,i=x.length-1;i>=0;i--)x[i](t)}function s(e){var t="";for(var i in e)t+=e[i]?i+" ":"";return t.trim()}function u(){if(void 0!==f)return f;var e=document.createElement("x");return e.style.cssText="pointer-events:auto",f="auto"===e.style.pointerEvents}function c(e,t){return function(){e[t].apply(e,arguments)}}function p(e,t,i,o,l){var n,r=document.createEvent("HTMLEvents"),i=void 0!==i?i:!0,o=void 0!==o?o:!0;if(r.initEvent(t,i,o),l)for(n in l)r[n]=l[n];return e&&e.dispatchEvent(r),r}function d(){if(v+=1,1===v){var e=window,t=document;b={left:g.scrollLeft(e),top:g.scrollTop(e)},g.addClass(t.body,y),e.scrollTo(b.left,b.top)}}function m(){if(0!==v&&(v-=1,0===v)){var e=window,t=document;g.removeClass(t.body,y),e.scrollTo(b.left,b.top)}}var b,f,h=e("../config"),g=e("./jqLite"),x=[],v=0,y="mui-body--scroll-lock";t.exports={callback:c,classNames:s,disableScrollLock:m,dispatchEvent:p,enableScrollLock:d,log:o,loadStyle:l,onNodeInserted:r,raiseError:n,supportsPointerEvents:u}},{"../config":3,"./jqLite":5}],7:[function(e,t,i){"use strict";var o="You provided a `value` prop to a form field without an `OnChange` handler. Please see React documentation on controlled components";t.exports={controlledMessage:o}},{}],8:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=e("../js/lib/jqLite"),r=babelHelpers.interopRequireWildcard(n),a=e("../js/lib/util"),s=(babelHelpers.interopRequireWildcard(a),l["default"].PropTypes),u="mui-btn",c="mui-ripple-effect",p={color:1,variant:1,size:1},d=function(e){function t(){var e,i,o,l;babelHelpers.classCallCheck(this,t);for(var n=arguments.length,r=Array(n),a=0;n>a;a++)r[a]=arguments[a];return i=o=babelHelpers.possibleConstructorReturn(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(r))),o.state={ripples:{}},l=i,babelHelpers.possibleConstructorReturn(o,l)}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentDidMount",value:function(){var e=this.refs.buttonEl;e._muiDropdown=!0,e._muiRipple=!0}},{key:"onClick",value:function(e){var t=this.props.onClick;t&&t(e)}},{key:"onMouseDown",value:function(e){var t=r.offset(this.refs.buttonEl),i=t.height;"fab"===this.props.variant&&(i/=2);var o=this.state.ripples,l=Date.now();o[l]={xPos:e.pageX-t.left,yPos:e.pageY-t.top,diameter:i,teardownFn:this.teardownRipple.bind(this,l)},this.setState({ripples:o})}},{key:"onTouchStart",value:function(e){}},{key:"teardownRipple",value:function(e){var t=this.state.ripples;delete t[e],this.setState({ripples:t})}},{key:"render",value:function(){var e=u,t=void 0,i=void 0,o=this.state.ripples;for(t in p)i=this.props[t],"default"!==i&&(e+=" "+u+"--"+i);return l["default"].createElement("button",babelHelpers["extends"]({},this.props,{ref:"buttonEl",className:e+" "+this.props.className,onClick:this.onClick.bind(this),onMouseDown:this.onMouseDown.bind(this)}),this.props.children,Object.keys(o).map(function(e,t){var i=o[e];return l["default"].createElement(m,{key:e,xPos:i.xPos,yPos:i.yPos,diameter:i.diameter,onTeardown:i.teardownFn})}))}}]),t}(l["default"].Component);d.propTypes={color:s.oneOf(["default","primary","danger","dark","accent"]),disabled:s.bool,size:s.oneOf(["default","small","large"]),type:s.oneOf(["submit","button"]),variant:s.oneOf(["default","flat","raised","fab"]),onClick:s.func},d.defaultProps={className:"",color:"default",disabled:!1,size:"default",type:null,variant:"default",onClick:null};var m=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentDidMount",value:function(){var e=this;this.teardownTimer=setTimeout(function(){var t=e.props.onTeardown;t&&t()},2e3)}},{key:"componentWillUnmount",value:function(){clearTimeout(this.teardownTimer)}},{key:"render",value:function(){var e=this.props.diameter,t=e/2,i={height:e,width:e,top:this.props.yPos-t||0,left:this.props.xPos-t||0};return l["default"].createElement("div",{className:c,style:i})}}]),t}(l["default"].Component);m.propTypes={xPos:s.number,yPos:s.number,diameter:s.number,onTeardown:s.func},m.defaultProps={xPos:0,yPos:0,diameter:0,onTeardown:null},i["default"]=d,t.exports=i["default"]},{"../js/lib/jqLite":5,"../js/lib/util":6,react:"CwoHg3"}],9:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e=this.props,t=(e.children,babelHelpers.objectWithoutProperties(e,["children"]));return l["default"].createElement("span",babelHelpers["extends"]({},t,{className:"mui-caret "+this.props.className}))}}]),t}(l["default"].Component);n.defaultProps={className:""},i["default"]=n,t.exports=i["default"]},{react:"CwoHg3"}],10:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=l["default"].PropTypes,r=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){return null}}]),t}(l["default"].Component);r.propTypes={value:n.any,label:n.string,onActive:n.func},r.defaultProps={value:null,label:"",onActive:null},i["default"]=r,t.exports=i["default"]},{react:"CwoHg3"}],11:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.TextField=void 0;var o=window.React,l=babelHelpers.interopRequireDefault(o),n=e("../js/lib/util"),r=babelHelpers.interopRequireWildcard(n),a=e("./_helpers"),s=l["default"].PropTypes,u=function(e){function t(e){babelHelpers.classCallCheck(this,t);var i=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e)),o=e.value,l=o||e.defaultValue;i.state={innerValue:l,isDirty:Boolean(l)},void 0!==o&&null===e.onChange&&r.raiseError(a.controlledMessage,!0);var n=r.callback;return i.onChangeCB=n(i,"onChange"),i.onFocusCB=n(i,"onFocus"),i}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentDidMount",value:function(){this.refs.inputEl._muiTextfield=!0}},{key:"onChange",value:function(e){this.setState({innerValue:e.target.value});var t=this.props.onChange;t&&t(e)}},{key:"onFocus",value:function(e){this.setState({isDirty:!0})}},{key:"triggerFocus",value:function(){this.refs.inputEl.focus()}},{key:"render",value:function(){var e={},t=Boolean(this.state.innerValue),i=void 0;e["mui--is-empty"]=!t,e["mui--is-not-empty"]=t,e["mui--is-dirty"]=this.state.isDirty,e["mui--is-invalid"]=this.props.invalid,e=r.classNames(e);var o=this.props,n=(o.children,babelHelpers.objectWithoutProperties(o,["children"]));return i="textarea"===this.props.type?l["default"].createElement("textarea",babelHelpers["extends"]({},n,{ref:"inputEl",className:e,rows:this.props.rows,placeholder:this.props.hint,value:this.props.value,defaultValue:this.props.defaultValue,autoFocus:this.props.autoFocus,onChange:this.onChangeCB,onFocus:this.onFocusCB,required:this.props.required})):l["default"].createElement("input",babelHelpers["extends"]({},n,{ref:"inputEl",className:e,type:this.props.type,value:this.props.value,defaultValue:this.props.defaultValue,placeholder:this.props.hint,autoFocus:this.props.autofocus,onChange:this.onChangeCB,onFocus:this.onFocusCB,required:this.props.required}))}}]),t}(l["default"].Component);u.propTypes={hint:s.string,value:s.string,type:s.string,autoFocus:s.bool,onChange:s.func},u.defaultProps={hint:null,type:null,autoFocus:!1,onChange:null};var c=function(e){function t(){var e,i,o,l;babelHelpers.classCallCheck(this,t);for(var n=arguments.length,r=Array(n),a=0;n>a;a++)r[a]=arguments[a];return i=o=babelHelpers.possibleConstructorReturn(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(r))),o.state={style:{}},l=i,babelHelpers.possibleConstructorReturn(o,l)}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentDidMount",value:function(){var e=this;this.styleTimer=setTimeout(function(){var t=".15s ease-out",i=void 0;i={transition:t,WebkitTransition:t,MozTransition:t,OTransition:t,msTransform:t},e.setState({style:i})},150)}},{key:"componentWillUnmount",value:function(){clearTimeout(this.styleTimer)}},{key:"render",value:function(){return l["default"].createElement("label",{style:this.state.style,onClick:this.props.onClick},this.props.text)}}]),t}(l["default"].Component);c.defaultProps={text:"",onClick:null};var p=function(e){function t(e){babelHelpers.classCallCheck(this,t);var i=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e));return i.onClickCB=r.callback(i,"onClick"),i}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"onClick",value:function(e){r.supportsPointerEvents()===!1&&(e.target.style.cursor="text",this.refs.inputEl.triggerFocus())}},{key:"render",value:function(){var e={},t=void 0;return this.props.label.length&&(t=l["default"].createElement(c,{text:this.props.label,onClick:this.onClickCB})),e["mui-textfield"]=!0,e["mui-textfield--float-label"]=this.props.floatingLabel,e=r.classNames(e),l["default"].createElement("div",{className:e},l["default"].createElement(u,babelHelpers["extends"]({ref:"inputEl"},this.props)),t)}}]),t}(l["default"].Component);p.propTypes={label:s.string,floatingLabel:s.bool},p.defaultProps={label:"",floatingLabel:!1},i.TextField=p},{"../js/lib/util":6,"./_helpers":7,react:"CwoHg3"}],12:[function(e,t,i){t.exports='/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-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{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}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{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{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-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:border-box}:after,:before{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:Arial,Verdana,Tahoma;font-size:14px;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);background-color:#FFF}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#2196F3;text-decoration:none}a:focus,a:hover{color:#1976D2;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}p{margin:0 0 10px}ol,ul{margin-top:0;margin-bottom:10px}figure{margin:0}img{vertical-align:middle}hr{margin-top:20px;margin-bottom:20px;border:0;height:1px;background-color:rgba(0,0,0,.12)}legend{display:block;width:100%;padding:0;margin-bottom:10px;font-size:21px;color:rgba(0,0,0,.87);line-height:inherit;border:0}input[type=search]{box-sizing:border-box;-webkit-appearance:none}input[type=checkbox]:focus,input[type=radio]:focus,input[type=file]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type=checkbox]:disabled,input[type=radio]:disabled{cursor:not-allowed}strong{font-weight:700}abbr[title]{cursor:help;border-bottom:1px dotted #2196F3}h1,h2,h3{margin-top:20px;margin-bottom:10px}h4,h5,h6{margin-top:10px;margin-bottom:10px}.mui--appbar-height{height:56px}.mui--appbar-min-height,.mui-appbar{min-height:56px}.mui--appbar-line-height{line-height:56px}.mui--appbar-top{top:56px}@media (orientation:landscape) and (max-height:480px){.mui--appbar-height{height:48px}.mui--appbar-min-height,.mui-appbar{min-height:48px}.mui--appbar-line-height{line-height:48px}.mui--appbar-top{top:48px}}@media (min-width:480px){.mui--appbar-height{height:64px}.mui--appbar-min-height,.mui-appbar{min-height:64px}.mui--appbar-line-height{line-height:64px}.mui--appbar-top{top:64px}}.mui-appbar{background-color:#2196F3;color:#FFF}.mui-btn{animation-duration:.1ms;animation-name:mui-node-inserted;font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase;color:rgba(0,0,0,.87);background-color:#FFF;transition:all .2s ease-in-out;display:inline-block;height:36px;padding:0 26px;margin-top:6px;margin-bottom:6px;border:none;border-radius:2px;cursor:pointer;-ms-touch-action:manipulation;touch-action:manipulation;background-image:none;text-align:center;line-height:36px;vertical-align:middle;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:14px;letter-spacing:.03em;position:relative;overflow:hidden}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{color:rgba(0,0,0,.87);background-color:#fff}.mui-btn[disabled]:active,.mui-btn[disabled]:focus,.mui-btn[disabled]:hover{color:rgba(0,0,0,.87);background-color:#FFF}.mui-btn.mui-btn--flat{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn.mui-btn--flat:active,.mui-btn.mui-btn--flat:focus,.mui-btn.mui-btn--flat:hover{color:rgba(0,0,0,.87);background-color:#f2f2f2}.mui-btn.mui-btn--flat[disabled]:active,.mui-btn.mui-btn--flat[disabled]:focus,.mui-btn.mui-btn--flat[disabled]:hover{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{outline:0;text-decoration:none;color:rgba(0,0,0,.87)}.mui-btn:focus,.mui-btn:hover{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:focus,.mui-btn:hover{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn.mui--is-disabled,.mui-btn:disabled{cursor:not-allowed;pointer-events:none;opacity:.6;box-shadow:none}.mui-btn+.mui-btn{margin-left:8px}.mui-btn--flat{background-color:transparent}.mui-btn--flat:active,.mui-btn--flat:focus,.mui-btn--flat:hover{box-shadow:none;background-color:#f2f2f2}.mui-btn--fab,.mui-btn--raised{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab,.mui-btn--raised{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn--fab{position:relative;padding:0;width:55px;height:55px;line-height:55px;border-radius:50%;z-index:1}.mui-btn--primary{color:#FFF;background-color:#2196F3}.mui-btn--primary:active,.mui-btn--primary:focus,.mui-btn--primary:hover{color:#FFF;background-color:#39a1f4}.mui-btn--primary[disabled]:active,.mui-btn--primary[disabled]:focus,.mui-btn--primary[disabled]:hover{color:#FFF;background-color:#2196F3}.mui-btn--primary.mui-btn--flat{color:#2196F3;background-color:transparent}.mui-btn--primary.mui-btn--flat:active,.mui-btn--primary.mui-btn--flat:focus,.mui-btn--primary.mui-btn--flat:hover{color:#2196F3;background-color:#f2f2f2}.mui-btn--primary.mui-btn--flat[disabled]:active,.mui-btn--primary.mui-btn--flat[disabled]:focus,.mui-btn--primary.mui-btn--flat[disabled]:hover{color:#2196F3;background-color:transparent}.mui-btn--dark{color:#FFF;background-color:#424242}.mui-btn--dark:active,.mui-btn--dark:focus,.mui-btn--dark:hover{color:#FFF;background-color:#4f4f4f}.mui-btn--dark[disabled]:active,.mui-btn--dark[disabled]:focus,.mui-btn--dark[disabled]:hover{color:#FFF;background-color:#424242}.mui-btn--dark.mui-btn--flat{color:#424242;background-color:transparent}.mui-btn--dark.mui-btn--flat:active,.mui-btn--dark.mui-btn--flat:focus,.mui-btn--dark.mui-btn--flat:hover{color:#424242;background-color:#f2f2f2}.mui-btn--dark.mui-btn--flat[disabled]:active,.mui-btn--dark.mui-btn--flat[disabled]:focus,.mui-btn--dark.mui-btn--flat[disabled]:hover{color:#424242;background-color:transparent}.mui-btn--danger{color:#FFF;background-color:#F44336}.mui-btn--danger:active,.mui-btn--danger:focus,.mui-btn--danger:hover{color:#FFF;background-color:#f55a4e}.mui-btn--danger[disabled]:active,.mui-btn--danger[disabled]:focus,.mui-btn--danger[disabled]:hover{color:#FFF;background-color:#F44336}.mui-btn--danger.mui-btn--flat{color:#F44336;background-color:transparent}.mui-btn--danger.mui-btn--flat:active,.mui-btn--danger.mui-btn--flat:focus,.mui-btn--danger.mui-btn--flat:hover{color:#F44336;background-color:#f2f2f2}.mui-btn--danger.mui-btn--flat[disabled]:active,.mui-btn--danger.mui-btn--flat[disabled]:focus,.mui-btn--danger.mui-btn--flat[disabled]:hover{color:#F44336;background-color:transparent}.mui-btn--accent{color:#FFF;background-color:#FF4081}.mui-btn--accent:active,.mui-btn--accent:focus,.mui-btn--accent:hover{color:#FFF;background-color:#ff5a92}.mui-btn--accent[disabled]:active,.mui-btn--accent[disabled]:focus,.mui-btn--accent[disabled]:hover{color:#FFF;background-color:#FF4081}.mui-btn--accent.mui-btn--flat{color:#FF4081;background-color:transparent}.mui-btn--accent.mui-btn--flat:active,.mui-btn--accent.mui-btn--flat:focus,.mui-btn--accent.mui-btn--flat:hover{color:#FF4081;background-color:#f2f2f2}.mui-btn--accent.mui-btn--flat[disabled]:active,.mui-btn--accent.mui-btn--flat[disabled]:focus,.mui-btn--accent.mui-btn--flat[disabled]:hover{color:#FF4081;background-color:transparent}.mui-btn--small{height:30.6px;line-height:30.6px;padding:0 16px;font-size:13px}.mui-btn--large{height:54px;line-height:54px;padding:0 26px;font-size:14px}.mui-btn--fab.mui-btn--small{width:44px;height:44px;line-height:44px}.mui-btn--fab.mui-btn--large{width:75px;height:75px;line-height:75px}.mui-checkbox,.mui-radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.mui-checkbox>label,.mui-radio>label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio],.mui-radio>label>input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px}.mui-checkbox+.mui-checkbox,.mui-radio+.mui-radio{margin-top:-5px}.mui-checkbox--inline,.mui-radio--inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.mui-checkbox--inline>input[type=checkbox],.mui-checkbox--inline>input[type=radio],.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox--inline>label>input[type=radio],.mui-radio--inline>input[type=checkbox],.mui-radio--inline>input[type=radio],.mui-radio--inline>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio]{margin:4px 0 0;line-height:normal}.mui-checkbox--inline+.mui-checkbox--inline,.mui-radio--inline+.mui-radio--inline{margin-top:0;margin-left:10px}.mui-container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container:after,.mui-container:before{content:" ";display:table}.mui-container:after{clear:both}@media (min-width:544px){.mui-container{max-width:570px}}@media (min-width:768px){.mui-container{max-width:740px}}@media (min-width:992px){.mui-container{max-width:960px}}@media (min-width:1200px){.mui-container{max-width:1170px}}.mui-container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container-fluid:after,.mui-container-fluid:before{content:" ";display:table}.mui-container-fluid:after{clear:both}.mui-divider{display:block;height:1px;background-color:rgba(0,0,0,.12)}.mui--divider-top{border-top:1px solid rgba(0,0,0,.12)}.mui--divider-bottom{border-bottom:1px solid rgba(0,0,0,.12)}.mui--divider-left{border-left:1px solid rgba(0,0,0,.12)}.mui--divider-right{border-right:1px solid rgba(0,0,0,.12)}.mui-dropdown{display:inline-block;position:relative}[data-mui-toggle=dropdown]{animation-duration:.1ms;animation-name:mui-node-inserted;outline:0}.mui-dropdown__menu{position:absolute;top:100%;left:0;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#FFF;border-radius:2px;z-index:1;background-clip:padding-box}.mui-dropdown__menu.mui--is-open{display:block}.mui-dropdown__menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);white-space:nowrap}.mui-dropdown__menu>li>a:focus,.mui-dropdown__menu>li>a:hover{text-decoration:none;color:rgba(0,0,0,.87);background-color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a,.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;cursor:not-allowed}.mui-dropdown__menu--right{left:auto;right:0}@media (min-width:544px){.mui-form--inline>.mui-textfield{display:inline-block;margin-bottom:0}.mui-form--inline>.mui-checkbox,.mui-form--inline>.mui-radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.mui-form--inline>.mui-checkbox>label,.mui-form--inline>.mui-radio>label{padding-left:0}.mui-form--inline>.mui-checkbox>label>input[type=checkbox],.mui-form--inline>.mui-radio>label>input[type=radio]{position:relative;margin-left:0}.mui-form--inline>.mui-select{display:inline-block}.mui-form--inline>.mui-btn{margin-bottom:0;margin-top:0;vertical-align:bottom}}.mui-row{margin-left:-15px;margin-right:-15px}.mui-row:after,.mui-row:before{content:" ";display:table}.mui-row:after{clear:both}.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9,.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9,.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9,.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{min-height:1px;padding-left:15px;padding-right:15px}.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{float:left}.mui-col-xs-1{width:8.33333%}.mui-col-xs-2{width:16.66667%}.mui-col-xs-3{width:25%}.mui-col-xs-4{width:33.33333%}.mui-col-xs-5{width:41.66667%}.mui-col-xs-6{width:50%}.mui-col-xs-7{width:58.33333%}.mui-col-xs-8{width:66.66667%}.mui-col-xs-9{width:75%}.mui-col-xs-10{width:83.33333%}.mui-col-xs-11{width:91.66667%}.mui-col-xs-12{width:100%}.mui-col-xs-offset-0{margin-left:0}.mui-col-xs-offset-1{margin-left:8.33333%}.mui-col-xs-offset-2{margin-left:16.66667%}.mui-col-xs-offset-3{margin-left:25%}.mui-col-xs-offset-4{margin-left:33.33333%}.mui-col-xs-offset-5{margin-left:41.66667%}.mui-col-xs-offset-6{margin-left:50%}.mui-col-xs-offset-7{margin-left:58.33333%}.mui-col-xs-offset-8{margin-left:66.66667%}.mui-col-xs-offset-9{margin-left:75%}.mui-col-xs-offset-10{margin-left:83.33333%}.mui-col-xs-offset-11{margin-left:91.66667%}.mui-col-xs-offset-12{margin-left:100%}@media (min-width:544px){.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9{float:left}.mui-col-sm-1{width:8.33333%}.mui-col-sm-2{width:16.66667%}.mui-col-sm-3{width:25%}.mui-col-sm-4{width:33.33333%}.mui-col-sm-5{width:41.66667%}.mui-col-sm-6{width:50%}.mui-col-sm-7{width:58.33333%}.mui-col-sm-8{width:66.66667%}.mui-col-sm-9{width:75%}.mui-col-sm-10{width:83.33333%}.mui-col-sm-11{width:91.66667%}.mui-col-sm-12{width:100%}.mui-col-sm-offset-0{margin-left:0}.mui-col-sm-offset-1{margin-left:8.33333%}.mui-col-sm-offset-2{margin-left:16.66667%}.mui-col-sm-offset-3{margin-left:25%}.mui-col-sm-offset-4{margin-left:33.33333%}.mui-col-sm-offset-5{margin-left:41.66667%}.mui-col-sm-offset-6{margin-left:50%}.mui-col-sm-offset-7{margin-left:58.33333%}.mui-col-sm-offset-8{margin-left:66.66667%}.mui-col-sm-offset-9{margin-left:75%}.mui-col-sm-offset-10{margin-left:83.33333%}.mui-col-sm-offset-11{margin-left:91.66667%}.mui-col-sm-offset-12{margin-left:100%}}@media (min-width:768px){.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9{float:left}.mui-col-md-1{width:8.33333%}.mui-col-md-2{width:16.66667%}.mui-col-md-3{width:25%}.mui-col-md-4{width:33.33333%}.mui-col-md-5{width:41.66667%}.mui-col-md-6{width:50%}.mui-col-md-7{width:58.33333%}.mui-col-md-8{width:66.66667%}.mui-col-md-9{width:75%}.mui-col-md-10{width:83.33333%}.mui-col-md-11{width:91.66667%}.mui-col-md-12{width:100%}.mui-col-md-offset-0{margin-left:0}.mui-col-md-offset-1{margin-left:8.33333%}.mui-col-md-offset-2{margin-left:16.66667%}.mui-col-md-offset-3{margin-left:25%}.mui-col-md-offset-4{margin-left:33.33333%}.mui-col-md-offset-5{margin-left:41.66667%}.mui-col-md-offset-6{margin-left:50%}.mui-col-md-offset-7{margin-left:58.33333%}.mui-col-md-offset-8{margin-left:66.66667%}.mui-col-md-offset-9{margin-left:75%}.mui-col-md-offset-10{margin-left:83.33333%}.mui-col-md-offset-11{margin-left:91.66667%}.mui-col-md-offset-12{margin-left:100%}}@media (min-width:992px){.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9{float:left}.mui-col-lg-1{width:8.33333%}.mui-col-lg-2{width:16.66667%}.mui-col-lg-3{width:25%}.mui-col-lg-4{width:33.33333%}.mui-col-lg-5{width:41.66667%}.mui-col-lg-6{width:50%}.mui-col-lg-7{width:58.33333%}.mui-col-lg-8{width:66.66667%}.mui-col-lg-9{width:75%}.mui-col-lg-10{width:83.33333%}.mui-col-lg-11{width:91.66667%}.mui-col-lg-12{width:100%}.mui-col-lg-offset-0{margin-left:0}.mui-col-lg-offset-1{margin-left:8.33333%}.mui-col-lg-offset-2{margin-left:16.66667%}.mui-col-lg-offset-3{margin-left:25%}.mui-col-lg-offset-4{margin-left:33.33333%}.mui-col-lg-offset-5{margin-left:41.66667%}.mui-col-lg-offset-6{margin-left:50%}.mui-col-lg-offset-7{margin-left:58.33333%}.mui-col-lg-offset-8{margin-left:66.66667%}.mui-col-lg-offset-9{margin-left:75%}.mui-col-lg-offset-10{margin-left:83.33333%}.mui-col-lg-offset-11{margin-left:91.66667%}.mui-col-lg-offset-12{margin-left:100%}}@media (min-width:1200px){.mui-col-xl-1,.mui-col-xl-10,.mui-col-xl-11,.mui-col-xl-12,.mui-col-xl-2,.mui-col-xl-3,.mui-col-xl-4,.mui-col-xl-5,.mui-col-xl-6,.mui-col-xl-7,.mui-col-xl-8,.mui-col-xl-9{float:left}.mui-col-xl-1{width:8.33333%}.mui-col-xl-2{width:16.66667%}.mui-col-xl-3{width:25%}.mui-col-xl-4{width:33.33333%}.mui-col-xl-5{width:41.66667%}.mui-col-xl-6{width:50%}.mui-col-xl-7{width:58.33333%}.mui-col-xl-8{width:66.66667%}.mui-col-xl-9{width:75%}.mui-col-xl-10{width:83.33333%}.mui-col-xl-11{width:91.66667%}.mui-col-xl-12{width:100%}.mui-col-xl-offset-0{margin-left:0}.mui-col-xl-offset-1{margin-left:8.33333%}.mui-col-xl-offset-2{margin-left:16.66667%}.mui-col-xl-offset-3{margin-left:25%}.mui-col-xl-offset-4{margin-left:33.33333%}.mui-col-xl-offset-5{margin-left:41.66667%}.mui-col-xl-offset-6{margin-left:50%}.mui-col-xl-offset-7{margin-left:58.33333%}.mui-col-xl-offset-8{margin-left:66.66667%}.mui-col-xl-offset-9{margin-left:75%}.mui-col-xl-offset-10{margin-left:83.33333%}.mui-col-xl-offset-11{margin-left:91.66667%}.mui-col-xl-offset-12{margin-left:100%}}.mui-panel{padding:15px;margin-bottom:20px;border-radius:0;background-color:#FFF;box-shadow:0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}.mui-panel:after,.mui-panel:before{content:" ";display:table}.mui-panel:after{clear:both}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-panel{box-shadow:0 -1px 2px 0 rgba(0,0,0,.12),-1px 0 2px 0 rgba(0,0,0,.12),0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}}.mui-select{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-select:focus{outline:0}.mui-select:focus>select{height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;height:32px;width:100%;appearance:none;-webkit-appearance:none;-moz-appearance:none;outline:0;border:none;border-bottom:1px solid rgba(0,0,0,.26);border-radius:0;box-shadow:none;background-color:transparent;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iNiIgd2lkdGg9IjEwIj48cG9seWdvbiBwb2ludHM9IjAsMCAxMCwwIDUsNiIgc3R5bGU9ImZpbGw6cmdiYSgwLDAsMCwuMjQpOyIvPjwvc3ZnPg==);background-repeat:no-repeat;background-position:right center;cursor:pointer;color:rgba(0,0,0,.87);font-size:16px;padding:0 25px 0 0}.mui-select>select::-ms-expand{display:none}.mui-select>select:focus{outline:0;height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select:disabled{color:rgba(0,0,0,.38);cursor:not-allowed;background-color:transparent;opacity:1}.mui-select__menu{position:absolute;z-index:2;min-width:100%;overflow-y:auto;padding:8px 0;background-color:#FFF;font-size:16px}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-select__menu{border-left:1px solid rgba(0,0,0,.12);border-top:1px solid rgba(0,0,0,.12)}}.mui-select__menu>div{padding:0 22px;height:42px;line-height:42px;cursor:pointer;white-space:nowrap}.mui-select__menu>div:hover{background-color:#E0E0E0}.mui-select__menu>div.mui--is-selected{background-color:#EEE}th{text-align:left}.mui-table{width:100%;max-width:100%;margin-bottom:20px}.mui-table>tbody>tr>td,.mui-table>tbody>tr>th,.mui-table>tfoot>tr>td,.mui-table>tfoot>tr>th,.mui-table>thead>tr>td,.mui-table>thead>tr>th{padding:10px;line-height:1.429}.mui-table>thead>tr>th{border-bottom:2px solid rgba(0,0,0,.12);font-weight:700}.mui-table>tbody+tbody{border-top:2px solid rgba(0,0,0,.12)}.mui-table.mui-table--bordered>tbody>tr>td{border-bottom:1px solid rgba(0,0,0,.12)}.mui-tabs__bar{list-style:none;padding-left:0;margin-bottom:0;background-color:transparent;white-space:nowrap;overflow-x:auto}.mui-tabs__bar>li{display:inline-block}.mui-tabs__bar>li>a{display:block;white-space:nowrap;text-transform:uppercase;font-weight:500;font-size:14px;color:rgba(0,0,0,.87);cursor:default;height:48px;line-height:48px;padding-left:24px;padding-right:24px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-tabs__bar>li>a:hover{text-decoration:none}.mui-tabs__bar>li.mui--is-active{border-bottom:2px solid #2196F3}.mui-tabs__bar>li.mui--is-active>a{color:#2196F3}.mui-tabs__bar.mui-tabs__bar--justified{display:table;width:100%;table-layout:fixed}.mui-tabs__bar.mui-tabs__bar--justified>li{display:table-cell}.mui-tabs__bar.mui-tabs__bar--justified>li>a{text-align:center;padding-left:0;padding-right:0}.mui-tabs__pane{display:none}.mui-tabs__pane.mui--is-active{display:block}[data-mui-toggle=tab]{animation-duration:.1ms;animation-name:mui-node-inserted}.mui-textfield{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-textfield>label{position:absolute;top:0;display:block;width:100%;color:rgba(0,0,0,.54);font-size:12px;font-weight:400;line-height:15px;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.mui-textfield>textarea{padding-top:5px}.mui-textfield>input,.mui-textfield>textarea{display:block}.mui-textfield>input:focus~label,.mui-textfield>textarea:focus~label{color:#2196F3}.mui-textfield--float-label>label{position:absolute;transform:translate(0,15px);font-size:16px;line-height:32px;color:rgba(0,0,0,.26);text-overflow:clip;cursor:text;pointer-events:none}.mui-textfield--float-label>input:focus~label,.mui-textfield--float-label>textarea:focus~label{transform:translate(0,0);font-size:12px;line-height:15px;text-overflow:ellipsis}.mui-textfield--float-label>input:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>input:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>input:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>textarea:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:rgba(0,0,0,.54);font-size:12px;line-height:15px;transform:translate(0,0);text-overflow:ellipsis}.mui-textfield--wrap-label{display:table;width:100%;padding-top:0}.mui-textfield--wrap-label:not(.mui-textfield--float-label)>label{display:table-header-group;position:static;white-space:normal;overflow-x:visible}.mui-textfield>input,.mui-textfield>textarea{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;background-color:transparent;color:rgba(0,0,0,.87);border:none;border-bottom:1px solid rgba(0,0,0,.26);outline:0;width:100%;font-size:16px;padding:0;box-shadow:none;border-radius:0;background-image:none}.mui-textfield>input:focus,.mui-textfield>textarea:focus{border-color:#2196F3;border-width:2px}.mui-textfield>input:-moz-read-only,.mui-textfield>input:disabled,.mui-textfield>textarea:-moz-read-only,.mui-textfield>textarea:disabled{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input:disabled,.mui-textfield>input:read-only,.mui-textfield>textarea:disabled,.mui-textfield>textarea:read-only{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input::-webkit-input-placeholder,.mui-textfield>textarea::-webkit-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::-moz-placeholder,.mui-textfield>textarea::-moz-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input:-ms-input-placeholder,.mui-textfield>textarea:-ms-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::placeholder,.mui-textfield>textarea::placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input{height:32px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>textarea{min-height:64px}.mui-textfield>textarea[rows]:not([rows="2"]):focus{margin-bottom:-1px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):not(:required),.mui-textfield>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required),.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty){border-color:#F44336;border-width:2px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty){height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required)~label,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):not(:required)~label,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:#F44336}.mui-textfield:not(.mui-textfield--float-label)>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label{color:#F44336}@keyframes mui-node-inserted{from{opacity:.99}to{opacity:1}}.mui--no-transition{transition:none!important}.mui--no-user-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.mui--text-left{text-align:left!important}.mui--text-right{text-align:right!important}.mui--text-center{text-align:center!important}.mui--text-justify{text-align:justify!important}.mui--text-nowrap{white-space:nowrap!important}.mui--align-baseline{vertical-align:baseline!important}.mui--align-top{vertical-align:top!important}.mui--align-middle{vertical-align:middle!important}.mui--align-bottom{vertical-align:bottom!important}.mui--text-dark{color:rgba(0,0,0,.87)}.mui--text-dark-secondary{color:rgba(0,0,0,.54)}.mui--text-dark-hint{color:rgba(0,0,0,.38)}.mui--text-light{color:#FFF}.mui--text-light-secondary{color:rgba(255,255,255,.7)}.mui--text-light-hint{color:rgba(255,255,255,.3)}.mui--text-accent{color:rgba(255,64,129,.87)}.mui--text-accent-secondary{color:rgba(255,64,129,.54)}.mui--text-accent-hint{color:rgba(255,64,129,.38)}.mui--text-black{color:#000}.mui--text-white{color:#FFF}.mui--text-danger{color:#F44336}.mui-list--unstyled{padding-left:0;list-style:none}.mui-list--inline{padding-left:0;list-style:none;margin-left:-5px}.mui-list--inline>li{display:inline-block;padding-left:5px;padding-right:5px}.mui--z1,.mui-dropdown__menu,.mui-select__menu{box-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24)}.mui--z2{box-shadow:0 3px 6px rgba(0,0,0,.16),0 3px 6px rgba(0,0,0,.23)}.mui--z3{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}.mui--z4{box-shadow:0 14px 28px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.22)}.mui--z5{box-shadow:0 19px 38px rgba(0,0,0,.3),0 15px 12px rgba(0,0,0,.22)}.mui--clearfix:after,.mui--clearfix:before{content:" ";display:table}.mui--clearfix:after{clear:both}.mui--pull-right{float:right!important}.mui--pull-left{float:left!important}.mui--hide{display:none!important}.mui--show{display:block!important}.mui--invisible{visibility:hidden}.mui--overflow-hidden{overflow:hidden!important}.mui--overflow-hidden-x{overflow-x:hidden!important}.mui--overflow-hidden-y{overflow-y:hidden!important}.mui--visible-lg-block,.mui--visible-lg-inline,.mui--visible-lg-inline-block,.mui--visible-md-block,.mui--visible-md-inline,.mui--visible-md-inline-block,.mui--visible-sm-block,.mui--visible-sm-inline,.mui--visible-sm-inline-block,.mui--visible-xl-block,.mui--visible-xl-inline,.mui--visible-xl-inline-block,.mui--visible-xs-block,.mui--visible-xs-inline,.mui--visible-xs-inline-block{display:none!important}@media (max-width:543px){.mui-visible-xs{display:block!important}table.mui-visible-xs{display:table}tr.mui-visible-xs{display:table-row!important}td.mui-visible-xs,th.mui-visible-xs{display:table-cell!important}.mui--visible-xs-block{display:block!important}.mui--visible-xs-inline{display:inline!important}.mui--visible-xs-inline-block{display:inline-block!important}}@media (min-width:544px) and (max-width:767px){.mui-visible-sm{display:block!important}table.mui-visible-sm{display:table}tr.mui-visible-sm{display:table-row!important}td.mui-visible-sm,th.mui-visible-sm{display:table-cell!important}.mui--visible-sm-block{display:block!important}.mui--visible-sm-inline{display:inline!important}.mui--visible-sm-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.mui-visible-md{display:block!important}table.mui-visible-md{display:table}tr.mui-visible-md{display:table-row!important}td.mui-visible-md,th.mui-visible-md{display:table-cell!important}.mui--visible-md-block{display:block!important}.mui--visible-md-inline{display:inline!important}.mui--visible-md-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.mui-visible-lg{display:block!important}table.mui-visible-lg{display:table}tr.mui-visible-lg{display:table-row!important}td.mui-visible-lg,th.mui-visible-lg{display:table-cell!important}.mui--visible-lg-block{display:block!important}.mui--visible-lg-inline{display:inline!important}.mui--visible-lg-inline-block{display:inline-block!important}}@media (min-width:1200px){.mui-visible-xl{display:block!important}table.mui-visible-xl{display:table}tr.mui-visible-xl{display:table-row!important}td.mui-visible-xl,th.mui-visible-xl{display:table-cell!important}.mui--visible-xl-block{display:block!important}.mui--visible-xl-inline{display:inline!important}.mui--visible-xl-inline-block{display:inline-block!important}}@media (max-width:543px){.mui--hidden-xs{display:none!important}}@media (min-width:544px) and (max-width:767px){.mui--hidden-sm{display:none!important}}@media (min-width:768px) and (max-width:991px){.mui--hidden-md{display:none!important}}@media (min-width:992px) and (max-width:1199px){.mui--hidden-lg{display:none!important}}@media (min-width:1200px){.mui--hidden-xl{display:none!important}}body.mui-body--scroll-lock{overflow:hidden!important}#mui-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:99999999;background-color:rgba(0,0,0,.2);overflow:auto}.mui-ripple-effect{position:absolute;border-radius:50%;pointer-events:none;opacity:0;animation:mui-ripple-animation 2s}@keyframes mui-ripple-animation{from{transform:scale(1);opacity:.4}to{transform:scale(100);opacity:0}}.mui-btn>.mui-ripple-effect{background-color:#a6a6a6}.mui-btn--primary>.mui-ripple-effect{background-color:#FFF}.mui-btn--dark>.mui-ripple-effect{background-color:#FFF}.mui-btn--danger>.mui-ripple-effect{background-color:#FFF}.mui-btn--accent>.mui-ripple-effect{background-color:#FFF}.mui-btn--flat>.mui-ripple-effect{background-color:#a6a6a6}.mui--text-display4{font-weight:300;font-size:112px;line-height:112px}.mui--text-display3{font-weight:400;font-size:56px;line-height:56px}.mui--text-display2{font-weight:400;font-size:45px;line-height:48px}.mui--text-display1,h1{font-weight:400;font-size:34px;line-height:40px}.mui--text-headline,h2{font-weight:400;font-size:24px;line-height:32px}.mui--text-title,h3{font-weight:400;font-size:20px;line-height:28px}.mui--text-subhead,h4{font-weight:400;font-size:16px;line-height:24px}.mui--text-body2,h5{font-weight:500;font-size:14px;line-height:24px}.mui--text-body1{font-weight:400;font-size:14px;line-height:20px}.mui--text-caption{font-weight:400;font-size:12px;line-height:16px}.mui--text-menu{font-weight:500;font-size:13px;line-height:17px}.mui--text-button{font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase}'; +},{}],13:[function(e,t,i){t.exports=e(6)},{"../config":3,"./jqLite":5}],14:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){return l["default"].createElement("div",babelHelpers["extends"]({},this.props,{className:"mui-appbar "+this.props.className}),this.props.children)}}]),t}(l["default"].Component);n.defaultProps={className:""},i["default"]=n,t.exports=i["default"]},{react:"CwoHg3"}],15:[function(e,t,i){t.exports=e(8)},{"../js/lib/jqLite":5,"../js/lib/util":6,react:"CwoHg3"}],16:[function(e,t,i){t.exports=e(9)},{react:"CwoHg3"}],17:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=e("../js/lib/util"),r=(babelHelpers.interopRequireWildcard(n),e("./_helpers"),l["default"].PropTypes),a=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e=this.props,t=(e.children,e.onChange,babelHelpers.objectWithoutProperties(e,["children","onChange"]));return l["default"].createElement("div",babelHelpers["extends"]({},t,{className:"mui-checkbox "+this.props.className}),l["default"].createElement("label",null,l["default"].createElement("input",{ref:"inputEl",type:"checkbox",name:this.props.name,value:this.props.value,checked:this.props.checked,defaultChecked:this.props.defaultChecked,disabled:this.props.disabled,onChange:this.props.onChange}),this.props.label))}}]),t}(l["default"].Component);a.propTypes={name:r.string,label:r.string,value:r.string,checked:r.bool,defaultChecked:r.bool,disabled:r.bool,onChange:r.func},a.defaultProps={className:"",name:null,label:null,disabled:!1,onChange:null},i["default"]=a,t.exports=i["default"]},{"../js/lib/util":6,"./_helpers":7,react:"CwoHg3"}],18:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=e("../js/lib/util"),r=babelHelpers.interopRequireWildcard(n),a=["xs","sm","md","lg","xl"],s=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"defaultProps",value:function(){var e={className:""},t=void 0,i=void 0;for(t=a.length-1;t>-1;t--)i=a[t],e[i]=null,e[i+"-offset"]=null;return e}},{key:"render",value:function(){var e={},t=void 0,i=void 0,o=void 0,n=void 0;for(t=a.length-1;t>-1;t--)i=a[t],n="mui-col-"+i,o=this.props[i],o&&(e[n+"-"+o]=!0),o=this.props[i+"-offset"],o&&(e[n+"-offset-"+o]=!0);return e=r.classNames(e),l["default"].createElement("div",babelHelpers["extends"]({},this.props,{className:e+" "+this.props.className}),this.props.children)}}]),t}(l["default"].Component);i["default"]=s,t.exports=i["default"]},{"../js/lib/util":6,react:"CwoHg3"}],19:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e="mui-container";return this.props.fluid&&(e+="-fluid"),l["default"].createElement("div",babelHelpers["extends"]({},this.props,{className:e+" "+this.props.className}),this.props.children)}}]),t}(l["default"].Component);n.propTypes={fluid:l["default"].PropTypes.bool},n.defaultProps={className:"",fluid:!1},i["default"]=n,t.exports=i["default"]},{react:"CwoHg3"}],20:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e=this.props,t=(e.children,babelHelpers.objectWithoutProperties(e,["children"]));return l["default"].createElement("div",babelHelpers["extends"]({},t,{className:"mui-divider "+this.props.className}))}}]),t}(l["default"].Component);n.defaultProps={className:""},i["default"]=n,t.exports=i["default"]},{react:"CwoHg3"}],21:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=e("../js/lib/util"),r=babelHelpers.interopRequireWildcard(n),a=l["default"].PropTypes,s=function(e){function t(e){babelHelpers.classCallCheck(this,t);var i=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e));return i.onClickCB=r.callback(i,"onClick"),i}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"onClick",value:function(e){this.props.onClick&&this.props.onClick(this,e)}},{key:"render",value:function(){var e=this.props,t=e.children,i=(e.onClick,babelHelpers.objectWithoutProperties(e,["children","onClick"]));return l["default"].createElement("li",i,l["default"].createElement("a",{href:this.props.link,target:this.props.target,"data-mui-value":this.props.value,onClick:this.onClickCB},t))}}]),t}(l["default"].Component);s.propTypes={link:a.string,target:a.string,onClick:a.func},i["default"]=s,t.exports=i["default"]},{"../js/lib/util":6,react:"CwoHg3"}],22:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=e("./button"),r=babelHelpers.interopRequireDefault(n),a=e("./caret"),s=babelHelpers.interopRequireDefault(a),u=e("../js/lib/jqLite"),c=babelHelpers.interopRequireWildcard(u),p=e("../js/lib/util"),d=babelHelpers.interopRequireWildcard(p),m=l["default"].PropTypes,b="mui-dropdown",f="mui-dropdown__menu",h="mui--is-open",g="mui-dropdown__menu--right",x=function(e){function t(e){babelHelpers.classCallCheck(this,t);var i=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e));i.state={opened:!1,menuTop:0};var o=d.callback;return i.selectCB=o(i,"select"),i.onClickCB=o(i,"onClick"),i.onOutsideClickCB=o(i,"onOutsideClick"),i}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentWillMount",value:function(){document.addEventListener("click",this.onOutsideClickCB)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("click",this.onOutsideClickCB)}},{key:"onClick",value:function(e){if(0===e.button&&!this.props.disabled&&!e.defaultPrevented){this.toggle();var t=this.props.onClick;t&&t(e)}}},{key:"toggle",value:function(){return this.props.children?void(this.state.opened?this.close():this.open()):d.raiseError("Dropdown menu element not found")}},{key:"open",value:function(){var e=this.refs.wrapperEl.getBoundingClientRect(),t=void 0;t=this.refs.button.refs.buttonEl.getBoundingClientRect(),this.setState({opened:!0,menuTop:t.top-e.top+t.height})}},{key:"close",value:function(){this.setState({opened:!1})}},{key:"select",value:function(e){this.props.onSelect&&"A"===e.target.tagName&&this.props.onSelect(e.target.getAttribute("data-mui-value")),e.defaultPrevented||this.close()}},{key:"onOutsideClick",value:function(e){var t=this.refs.wrapperEl.contains(e.target);t||this.close()}},{key:"render",value:function(){var e=void 0,t=void 0,i=void 0;if(i="string"===c.type(this.props.label)?l["default"].createElement("span",null,this.props.label," ",l["default"].createElement(s["default"],null)):this.props.label,e=l["default"].createElement(r["default"],{ref:"button",type:"button",onClick:this.onClickCB,color:this.props.color,variant:this.props.variant,size:this.props.size,disabled:this.props.disabled},i),this.state.opened){var o={};o[f]=!0,o[h]=this.state.opened,o[g]="right"===this.props.alignMenu,o=d.classNames(o),t=l["default"].createElement("ul",{ref:"menuEl",className:o,style:{top:this.state.menuTop},onClick:this.selectCB},this.props.children)}var n=this.props,a=n.className,u=(n.children,n.onClick,babelHelpers.objectWithoutProperties(n,["className","children","onClick"]));return l["default"].createElement("div",babelHelpers["extends"]({},u,{ref:"wrapperEl",className:b+" "+a}),e,t)}}]),t}(l["default"].Component);x.propTypes={color:m.oneOf(["default","primary","danger","dark","accent"]),variant:m.oneOf(["default","flat","raised","fab"]),size:m.oneOf(["default","small","large"]),label:m.oneOfType([m.string,m.element]),alignMenu:m.oneOf(["left","right"]),onClick:m.func,onSelect:m.func,disabled:m.bool},x.defaultProps={className:"",color:"default",variant:"default",size:"default",label:"",alignMenu:"left",onClick:null,onSelect:null,disabled:!1},i["default"]=x,t.exports=i["default"]},{"../js/lib/jqLite":5,"../js/lib/util":6,"./button":8,"./caret":9,react:"CwoHg3"}],23:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e="";return this.props.inline&&(e="mui-form--inline"),l["default"].createElement("form",babelHelpers["extends"]({},this.props,{className:e+" "+this.props.className}),this.props.children)}}]),t}(l["default"].Component);n.propTypes={inline:l["default"].PropTypes.bool},n.defaultProps={className:"",inline:!1},i["default"]=n,t.exports=i["default"]},{react:"CwoHg3"}],24:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=e("./text-field"),r=l["default"].PropTypes,a=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){return l["default"].createElement(n.TextField,this.props)}}]),t}(l["default"].Component);a.propTypes={type:r.oneOf(["text","email","url","tel","password"])},a.defaultProps={type:"text"},i["default"]=a,t.exports=i["default"]},{"./text-field":11,react:"CwoHg3"}],25:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=e("../js/lib/forms"),r=(babelHelpers.interopRequireWildcard(n),e("../js/lib/jqLite")),a=(babelHelpers.interopRequireWildcard(r),e("../js/lib/util")),s=(babelHelpers.interopRequireWildcard(a),l["default"].PropTypes),u=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e=this.props,t=(e.children,babelHelpers.objectWithoutProperties(e,["children"]));return l["default"].createElement("option",babelHelpers["extends"]({},t,{value:this.props.value}),this.props.label)}}]),t}(l["default"].Component);u.propTypes={value:s.string,label:s.string},u.defaultProps={value:null,label:null},i["default"]=u,t.exports=i["default"]},{"../js/lib/forms":4,"../js/lib/jqLite":5,"../js/lib/util":6,react:"CwoHg3"}],26:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){return l["default"].createElement("div",babelHelpers["extends"]({},this.props,{className:"mui-panel "+this.props.className}),this.props.children)}}]),t}(l["default"].Component);n.defaultProps={className:""},i["default"]=n,t.exports=i["default"]},{react:"CwoHg3"}],27:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=l["default"].PropTypes,r=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e=this.props,t=(e.children,e.onChange,babelHelpers.objectWithoutProperties(e,["children","onChange"]));return l["default"].createElement("div",babelHelpers["extends"]({},t,{className:"mui-radio "+this.props.className}),l["default"].createElement("label",null,l["default"].createElement("input",{ref:"inputEl",type:"radio",name:this.props.name,value:this.props.value,checked:this.props.checked,defaultChecked:this.props.defaultChecked,disabled:this.props.disabled,onChange:this.props.onChange}),this.props.label))}}]),t}(l["default"].Component);r.propTypes={name:n.string,label:n.string,value:n.string,checked:n.bool,defaultChecked:n.bool,disabled:n.bool,onChange:n.func},r.defaultProps={className:"",name:null,label:null,disabled:!1,onChange:null},i["default"]=r,t.exports=i["default"]},{react:"CwoHg3"}],28:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=e("../js/lib/util"),r=(babelHelpers.interopRequireWildcard(n),function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){return l["default"].createElement("div",babelHelpers["extends"]({},this.props,{className:"mui-row "+this.props.className}),this.props.children)}}]),t}(l["default"].Component));r.defaultProps={className:""},i["default"]=r,t.exports=i["default"]},{"../js/lib/util":6,react:"CwoHg3"}],29:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=e("../js/lib/forms"),r=babelHelpers.interopRequireWildcard(n),a=e("../js/lib/jqLite"),s=babelHelpers.interopRequireWildcard(a),u=e("../js/lib/util"),c=babelHelpers.interopRequireWildcard(u),p=e("./_helpers"),d=l["default"].PropTypes,m=function(e){function t(e){babelHelpers.classCallCheck(this,t);var i=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e));i.state={showMenu:!1},e.readOnly===!1&&void 0!==e.value&&null===e.onChange&&c.raiseError(p.controlledMessage,!0),i.state.value=e.value;var o=c.callback;return i.hideMenuCB=o(i,"hideMenu"),i.onInnerChangeCB=o(i,"onInnerChange"),i.onInnerClickCB=o(i,"onInnerClick"),i.onInnerFocusCB=o(i,"onInnerFocus"),i.onInnerMouseDownCB=o(i,"onInnerMouseDown"),i.onKeydownCB=o(i,"onKeydown"),i.onMenuChangeCB=o(i,"onMenuChange"),i.onOuterFocusCB=o(i,"onOuterFocus"),i.onOuterBlurCB=o(i,"onOuterBlur"),i}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentDidMount",value:function(){this.refs.selectEl._muiSelect=!0,this.refs.wrapperEl.tabIndex=-1,this.props.autoFocus&&this.refs.wrapperEl.focus()}},{key:"componentWillReceiveProps",value:function(e){this.setState({value:e.value})}},{key:"onInnerMouseDown",value:function(e){0===e.button&&this.props.useDefault!==!0&&e.preventDefault()}},{key:"onInnerChange",value:function(e){var t=e.target.value;this.setState({value:t});var i=this.props.onChange;i&&i(t)}},{key:"onInnerClick",value:function(e){0===e.button&&this.showMenu()}},{key:"onInnerFocus",value:function(e){var t=this;this.props.useDefault!==!0&&setTimeout(function(){t.refs.wrapperEl.focus()},0)}},{key:"onOuterFocus",value:function(e){if(e.target===this.refs.wrapperEl){var t=this.refs.selectEl;return t._muiOrigIndex=t.tabIndex,t.tabIndex=-1,t.disabled?this.refs.wrapperEl.blur():void s.on(document,"keydown",this.onKeydownCB)}}},{key:"onOuterBlur",value:function(e){if(e.target===this.refs.wrapperEl){var t=this.refs.selectEl;t.tabIndex=t._muiOrigIndex,s.off(document,"keydown",this.onKeydownCB)}}},{key:"onKeydown",value:function(e){32!==e.keyCode&&38!==e.keyCode&&40!==e.keyCode||(e.preventDefault(),this.refs.selectEl.disabled!==!0&&this.showMenu())}},{key:"showMenu",value:function(){this.props.useDefault!==!0&&(c.enableScrollLock(),s.on(window,"resize",this.hideMenuCB),s.on(document,"click",this.hideMenuCB),this.setState({showMenu:!0}))}},{key:"hideMenu",value:function(){c.disableScrollLock(),s.off(window,"resize",this.hideMenuCB),s.off(document,"click",this.hideMenuCB),this.setState({showMenu:!1}),this.refs.selectEl.focus()}},{key:"onMenuChange",value:function(e){if(this.props.readOnly!==!0){this.setState({value:e});var t=this.props.onChange;t&&t(e)}}},{key:"render",value:function(){var e=void 0;this.state.showMenu&&(e=l["default"].createElement(b,{optionEls:this.refs.selectEl.children,wrapperEl:this.refs.wrapperEl,onChange:this.onMenuChangeCB,onClose:this.hideMenuCB}));var t=this.props,i=(t.children,t.onChange,babelHelpers.objectWithoutProperties(t,["children","onChange"]));return l["default"].createElement("div",babelHelpers["extends"]({},i,{ref:"wrapperEl",className:"mui-select "+this.props.className,onFocus:this.onOuterFocusCB,onBlur:this.onOuterBlurCB}),l["default"].createElement("select",{ref:"selectEl",name:this.props.name,value:this.state.value,defaultValue:this.props.defaultValue,disabled:this.props.disabled,multiple:this.props.multiple,readOnly:this.props.readOnly,required:this.props.required,onChange:this.onInnerChangeCB,onMouseDown:this.onInnerMouseDownCB,onClick:this.onInnerClickCB,onFocus:this.onInnerFocusCB},this.props.children),e)}}]),t}(l["default"].Component);m.propTypes={name:d.string,value:d.string,defaultValue:d.string,autoFocus:d.bool,disabled:d.bool,multiple:d.bool,readOnly:d.bool,required:d.bool,useDefault:d.bool,onChange:d.func},m.defaultProps={className:"",name:null,autoFocus:!1,disabled:!1,multiple:!1,readOnly:!1,required:!1,useDefault:!1,onChange:null};var b=function(e){function t(e){babelHelpers.classCallCheck(this,t);var i=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e));return i.state={origIndex:null,currentIndex:null},i.onKeydownCB=c.callback(i,"onKeydown"),i}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentWillMount",value:function(){var e=this.props.optionEls,t=e.length,i=0,o=void 0;for(o=t-1;o>-1;o--)e[o].selected&&(i=o);this.setState({origIndex:i,currentIndex:i})}},{key:"componentDidMount",value:function(){this.blurTimer=setTimeout(function(){var e=document.activeElement;"body"!==e.nodeName.toLowerCase()&&e.blur()},0);var e=r.getMenuPositionalCSS(this.props.wrapperEl,this.props.optionEls.length,this.state.currentIndex),t=this.refs.wrapperEl;s.css(t,e),s.scrollTop(t,e.scrollTop),s.on(document,"keydown",this.onKeydownCB)}},{key:"componentWillUnmount",value:function(){clearTimeout(this.blurTimer),s.off(document,"keydown",this.onKeydownCB)}},{key:"onClick",value:function(e,t){t.stopPropagation(),this.selectAndDestroy(e)}},{key:"onKeydown",value:function(e){var t=e.keyCode;return 9===t?this.destroy():(27!==t&&40!==t&&38!==t&&13!==t||e.preventDefault(),void(27===t?this.destroy():40===t?this.increment():38===t?this.decrement():13===t&&this.selectAndDestroy()))}},{key:"increment",value:function(){this.state.currentIndex!==this.props.optionEls.length-1&&this.setState({currentIndex:this.state.currentIndex+1})}},{key:"decrement",value:function(){0!==this.state.currentIndex&&this.setState({currentIndex:this.state.currentIndex-1})}},{key:"selectAndDestroy",value:function(e){e=void 0===e?this.state.currentIndex:e,e!==this.state.origIndex&&this.props.onChange(this.props.optionEls[e].value),this.destroy()}},{key:"destroy",value:function(){this.props.onClose()}},{key:"render",value:function(){var e=[],t=this.props.optionEls,i=t.length,o=void 0,n=void 0;for(n=0;i>n;n++)o=n===this.state.currentIndex?"mui--is-selected":"",e.push(l["default"].createElement("div",{key:n,className:o,onClick:this.onClick.bind(this,n)},t[n].textContent));return l["default"].createElement("div",{ref:"wrapperEl",className:"mui-select__menu"},e)}}]),t}(l["default"].Component);b.defaultProps={optionEls:[],wrapperEl:null,onChange:null,onClose:null},i["default"]=m,t.exports=i["default"]},{"../js/lib/forms":4,"../js/lib/jqLite":5,"../js/lib/util":6,"./_helpers":7,react:"CwoHg3"}],30:[function(e,t,i){t.exports=e(10)},{react:"CwoHg3"}],31:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=e("./tab"),r=babelHelpers.interopRequireDefault(n),a=e("../js/lib/util"),s=babelHelpers.interopRequireWildcard(a),u=l["default"].PropTypes,c="mui-tabs__bar",p="mui-tabs__bar--justified",d="mui-tabs__pane",m="mui--is-active",b=function(e){function t(e){babelHelpers.classCallCheck(this,t);var i=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e));return i.state={currentSelectedIndex:e.initialSelectedIndex},i}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"onClick",value:function(e,t,i){e!==this.state.currentSelectedIndex&&(this.setState({currentSelectedIndex:e}),t.props.onActive&&t.props.onActive(t),this.props.onChange&&this.props.onChange(e,t.props.value,t,i))}},{key:"render",value:function(){var e=this.props,t=e.children,i=babelHelpers.objectWithoutProperties(e,["children"]),o=[],n=[],a=t.length,u=this.state.currentSelectedIndex%a,b=void 0,f=void 0,h=void 0,g=void 0;for(g=0;a>g;g++)f=t[g],f.type!==r["default"]&&s.raiseError("Expecting MUITab React Element"),b=g===u,o.push(l["default"].createElement("li",{key:g,className:b?m:""},l["default"].createElement("a",{onClick:this.onClick.bind(this,g,f)},f.props.label))),h=d+" ",b&&(h+=m),n.push(l["default"].createElement("div",{key:g,className:h},f.props.children));return h=c,this.props.justified&&(h+=" "+p),l["default"].createElement("div",i,l["default"].createElement("ul",{className:h},o),n)}}]),t}(l["default"].Component);b.propTypes={initialSelectedIndex:u.number,justified:u.bool,onChange:u.func},b.defaultProps={className:"",initialSelectedIndex:0,justified:!1,onChange:null},i["default"]=b,t.exports=i["default"]},{"../js/lib/util":6,"./tab":10,react:"CwoHg3"}],32:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=window.React,l=babelHelpers.interopRequireDefault(o),n=e("./text-field"),r=l["default"].PropTypes,a=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){return l["default"].createElement(n.TextField,this.props)}}]),t}(l["default"].Component);a.propTypes={rows:r.number},a.defaultProps={type:"textarea",rows:2},i["default"]=a,t.exports=i["default"]},{"./text-field":11,react:"CwoHg3"}]},{},[2]); \ No newline at end of file diff --git a/www/libs/mui/packages/cdn/js/mui.js b/www/libs/mui/packages/cdn/js/mui.js new file mode 100644 index 0000000..1d101ee --- /dev/null +++ b/www/libs/mui/packages/cdn/js/mui.js @@ -0,0 +1,1809 @@ +(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o viewHeight) { + scrollIdeal = (menuPadding + (currentIndex + 1) * optionHeight) - + (-1 * top + wrapperPadding + inputHeight); + scrollMax = numOptions * optionHeight + 2 * menuPadding - height; + scrollTop = Math.min(scrollIdeal, scrollMax); + } + + return { + 'height': height + 'px', + 'top': top + 'px', + 'scrollTop': scrollTop + }; +} + + +/** Define module API */ +module.exports = { + getMenuPositionalCSS: getMenuPositionalCSSFn +}; + +},{}],4:[function(require,module,exports){ +/** + * MUI CSS/JS jqLite module + * @module lib/jqLite + */ + +'use strict'; + + +/** + * Add a class to an element. + * @param {Element} element - The DOM element. + * @param {string} cssClasses - Space separated list of class names. + */ +function jqLiteAddClass(element, cssClasses) { + if (!cssClasses || !element.setAttribute) return; + + var existingClasses = _getExistingClasses(element), + splitClasses = cssClasses.split(' '), + cssClass; + + for (var i=0; i < splitClasses.length; i++) { + cssClass = splitClasses[i].trim(); + if (existingClasses.indexOf(' ' + cssClass + ' ') === -1) { + existingClasses += cssClass + ' '; + } + } + + element.setAttribute('class', existingClasses.trim()); +} + + +/** + * Get or set CSS properties. + * @param {Element} element - The DOM element. + * @param {string} [name] - The property name. + * @param {string} [value] - The property value. + */ +function jqLiteCss(element, name, value) { + // Return full style object + if (name === undefined) { + return getComputedStyle(element); + } + + var nameType = jqLiteType(name); + + // Set multiple values + if (nameType === 'object') { + for (var key in name) element.style[_camelCase(key)] = name[key]; + return; + } + + // Set a single value + if (nameType === 'string' && value !== undefined) { + element.style[_camelCase(name)] = value; + } + + var styleObj = getComputedStyle(element), + isArray = (jqLiteType(name) === 'array'); + + // Read single value + if (!isArray) return _getCurrCssProp(element, name, styleObj); + + // Read multiple values + var outObj = {}, + key; + + for (var i=0; i < name.length; i++) { + key = name[i]; + outObj[key] = _getCurrCssProp(element, key, styleObj); + } + + return outObj; +} + + +/** + * Check if element has class. + * @param {Element} element - The DOM element. + * @param {string} cls - The class name string. + */ +function jqLiteHasClass(element, cls) { + if (!cls || !element.getAttribute) return false; + return (_getExistingClasses(element).indexOf(' ' + cls + ' ') > -1); +} + + +/** + * Return the type of a variable. + * @param {} somevar - The JavaScript variable. + */ +function jqLiteType(somevar) { + // handle undefined + if (somevar === undefined) return 'undefined'; + + // handle others (of type [object ]) + var typeStr = Object.prototype.toString.call(somevar); + if (typeStr.indexOf('[object ') === 0) { + return typeStr.slice(8, -1).toLowerCase(); + } else { + throw new Error("MUI: Could not understand type: " + typeStr); + } +} + + +/** + * Attach an event handler to a DOM element + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOn(element, type, callback, useCapture) { + useCapture = (useCapture === undefined) ? false : useCapture; + + // add to DOM + element.addEventListener(type, callback, useCapture); + + // add to cache + var cache = element._muiEventCache = element._muiEventCache || {}; + cache[type] = cache[type] || []; + cache[type].push([callback, useCapture]); +} + + +/** + * Remove an event handler from a DOM element + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOff(element, type, callback, useCapture) { + useCapture = (useCapture === undefined) ? false : useCapture; + + // remove from cache + var cache = element._muiEventCache = element._muiEventCache || {}, + argsList = cache[type] || [], + args, + i; + + i = argsList.length; + while (i--) { + args = argsList[i]; + + // remove all events if callback is undefined + if (callback === undefined || + (args[0] === callback && args[1] === useCapture)) { + + // remove from cache + argsList.splice(i, 1); + + // remove from DOM + element.removeEventListener(type, args[0], args[1]); + } + } +} + + +/** + * Attach an event hander which will only execute once + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOne(element, type, callback, useCapture) { + jqLiteOn(element, type, function onFn(ev) { + // execute callback + if (callback) callback.apply(this, arguments); + + // remove wrapper + jqLiteOff(element, type, onFn); + }, useCapture); +} + + +/** + * Get or set horizontal scroll position + * @param {Element} element - The DOM element + * @param {number} [value] - The scroll position + */ +function jqLiteScrollLeft(element, value) { + var win = window; + + // get + if (value === undefined) { + if (element === win) { + var docEl = document.documentElement; + return (win.pageXOffset || docEl.scrollLeft) - (docEl.clientLeft || 0); + } else { + return element.scrollLeft; + } + } + + // set + if (element === win) win.scrollTo(value, jqLiteScrollTop(win)); + else element.scrollLeft = value; +} + + +/** + * Get or set vertical scroll position + * @param {Element} element - The DOM element + * @param {number} value - The scroll position + */ +function jqLiteScrollTop(element, value) { + var win = window; + + // get + if (value === undefined) { + if (element === win) { + var docEl = document.documentElement; + return (win.pageYOffset || docEl.scrollTop) - (docEl.clientTop || 0); + } else { + return element.scrollTop; + } + } + + // set + if (element === win) win.scrollTo(jqLiteScrollLeft(win), value); + else element.scrollTop = value; +} + + +/** + * Return object representing top/left offset and element height/width. + * @param {Element} element - The DOM element. + */ +function jqLiteOffset(element) { + var win = window, + rect = element.getBoundingClientRect(), + scrollTop = jqLiteScrollTop(win), + scrollLeft = jqLiteScrollLeft(win); + + return { + top: rect.top + scrollTop, + left: rect.left + scrollLeft, + height: rect.height, + width: rect.width + }; +} + + +/** + * Attach a callback to the DOM ready event listener + * @param {Function} fn - The callback function. + */ +function jqLiteReady(fn) { + var done = false, + top = true, + doc = document, + win = doc.defaultView, + root = doc.documentElement, + add = doc.addEventListener ? 'addEventListener' : 'attachEvent', + rem = doc.addEventListener ? 'removeEventListener' : 'detachEvent', + pre = doc.addEventListener ? '' : 'on'; + + var init = function(e) { + if (e.type == 'readystatechange' && doc.readyState != 'complete') { + return; + } + + (e.type == 'load' ? win : doc)[rem](pre + e.type, init, false); + if (!done && (done = true)) fn.call(win, e.type || e); + }; + + var poll = function() { + try { root.doScroll('left'); } catch(e) { setTimeout(poll, 50); return; } + init('poll'); + }; + + if (doc.readyState == 'complete') { + fn.call(win, 'lazy'); + } else { + if (doc.createEventObject && root.doScroll) { + try { top = !win.frameElement; } catch(e) { } + if (top) poll(); + } + doc[add](pre + 'DOMContentLoaded', init, false); + doc[add](pre + 'readystatechange', init, false); + win[add](pre + 'load', init, false); + } +} + + +/** + * Remove classes from a DOM element + * @param {Element} element - The DOM element. + * @param {string} cssClasses - Space separated list of class names. + */ +function jqLiteRemoveClass(element, cssClasses) { + if (!cssClasses || !element.setAttribute) return; + + var existingClasses = _getExistingClasses(element), + splitClasses = cssClasses.split(' '), + cssClass; + + for (var i=0; i < splitClasses.length; i++) { + cssClass = splitClasses[i].trim(); + while (existingClasses.indexOf(' ' + cssClass + ' ') >= 0) { + existingClasses = existingClasses.replace(' ' + cssClass + ' ', ' '); + } + } + + element.setAttribute('class', existingClasses.trim()); +} + + +// ------------------------------ +// Utilities +// ------------------------------ +var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g, + MOZ_HACK_REGEXP = /^moz([A-Z])/, + ESCAPE_REGEXP = /([.*+?^=!:${}()|\[\]\/\\])/g, + BOOLEAN_ATTRS; + + +BOOLEAN_ATTRS = { + multiple: true, + selected: true, + checked: true, + disabled: true, + readonly: true, + required: true, + open: true +} + + +function _getExistingClasses(element) { + var classes = (element.getAttribute('class') || '').replace(/[\n\t]/g, ''); + return ' ' + classes + ' '; +} + + +function _camelCase(name) { + return name. + replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) { + return offset ? letter.toUpperCase() : letter; + }). + replace(MOZ_HACK_REGEXP, 'Moz$1'); +} + + +function _escapeRegExp(string) { + return string.replace(ESCAPE_REGEXP, "\\$1"); +} + + +function _getCurrCssProp(elem, name, computed) { + var ret; + + // try computed style + ret = computed.getPropertyValue(name); + + // try style attribute (if element is not attached to document) + if (ret === '' && !elem.ownerDocument) ret = elem.style[_camelCase(name)]; + + return ret; +} + + +/** + * Module API + */ +module.exports = { + /** Add classes */ + addClass: jqLiteAddClass, + + /** Get or set CSS properties */ + css: jqLiteCss, + + /** Check for class */ + hasClass: jqLiteHasClass, + + /** Remove event handlers */ + off: jqLiteOff, + + /** Return offset values */ + offset: jqLiteOffset, + + /** Add event handlers */ + on: jqLiteOn, + + /** Add an execute-once event handler */ + one: jqLiteOne, + + /** DOM ready event handler */ + ready: jqLiteReady, + + /** Remove classes */ + removeClass: jqLiteRemoveClass, + + /** Check JavaScript variable instance type */ + type: jqLiteType, + + /** Get or set horizontal scroll position */ + scrollLeft: jqLiteScrollLeft, + + /** Get or set vertical scroll position */ + scrollTop: jqLiteScrollTop +}; + +},{}],5:[function(require,module,exports){ +/** + * MUI CSS/JS utilities module + * @module lib/util + */ + +'use strict'; + + +var config = require('../config'), + jqLite = require('./jqLite'), + nodeInsertedCallbacks = [], + scrollLock = 0, + scrollLockCls = 'mui-body--scroll-lock', + scrollLockPos, + _supportsPointerEvents; + + +/** + * Logging function + */ +function logFn() { + var win = window; + + if (config.debug && typeof win.console !== "undefined") { + try { + win.console.log.apply(win.console, arguments); + } catch (a) { + var e = Array.prototype.slice.call(arguments); + win.console.log(e.join("\n")); + } + } +} + + +/** + * Load CSS text in new stylesheet + * @param {string} cssText - The css text. + */ +function loadStyleFn(cssText) { + var doc = document, + head; + + // copied from jQuery + head = doc.head || + doc.getElementsByTagName('head')[0] || + doc.documentElement; + + var e = doc.createElement('style'); + e.type = 'text/css'; + + if (e.styleSheet) e.styleSheet.cssText = cssText; + else e.appendChild(doc.createTextNode(cssText)); + + // add to document + head.insertBefore(e, head.firstChild); + + return e; +} + + +/** + * Raise an error + * @param {string} msg - The error message. + */ +function raiseErrorFn(msg, useConsole) { + if (useConsole) { + if (typeof console !== 'undefined') console.error('MUI Warning: ' + msg); + } else { + throw new Error('MUI: ' + msg); + } +} + + +/** + * Register callbacks on muiNodeInserted event + * @param {function} callbackFn - The callback function. + */ +function onNodeInsertedFn(callbackFn) { + nodeInsertedCallbacks.push(callbackFn); + + // initalize listeners + if (nodeInsertedCallbacks._initialized === undefined) { + var doc = document; + + jqLite.on(doc, 'animationstart', animationHandlerFn); + jqLite.on(doc, 'mozAnimationStart', animationHandlerFn); + jqLite.on(doc, 'webkitAnimationStart', animationHandlerFn); + + nodeInsertedCallbacks._initialized = true; + } +} + + +/** + * Execute muiNodeInserted callbacks + * @param {Event} ev - The DOM event. + */ +function animationHandlerFn(ev) { + // check animation name + if (ev.animationName !== 'mui-node-inserted') return; + + var el = ev.target; + + // iterate through callbacks + for (var i=nodeInsertedCallbacks.length - 1; i >= 0; i--) { + nodeInsertedCallbacks[i](el); + } +} + + +/** + * Convert Classname object, with class as key and true/false as value, to an + * class string. + * @param {Object} classes The classes + * @return {String} class string + */ +function classNamesFn(classes) { + var cs = ''; + for (var i in classes) { + cs += (classes[i]) ? i + ' ' : ''; + } + return cs.trim(); +} + + +/** + * Check if client supports pointer events. + */ +function supportsPointerEventsFn() { + // check cache + if (_supportsPointerEvents !== undefined) return _supportsPointerEvents; + + var element = document.createElement('x'); + element.style.cssText = 'pointer-events:auto'; + _supportsPointerEvents = (element.style.pointerEvents === 'auto'); + return _supportsPointerEvents; +} + + +/** + * Create callback closure. + * @param {Object} instance - The object instance. + * @param {String} funcName - The name of the callback function. + */ +function callbackFn(instance, funcName) { + return function() {instance[funcName].apply(instance, arguments);}; +} + + +/** + * Dispatch event. + * @param {Element} element - The DOM element. + * @param {String} eventType - The event type. + * @param {Boolean} bubbles=true - If true, event bubbles. + * @param {Boolean} cancelable=true = If true, event is cancelable + * @param {Object} [data] - Data to add to event object + */ +function dispatchEventFn(element, eventType, bubbles, cancelable, data) { + var ev = document.createEvent('HTMLEvents'), + bubbles = (bubbles !== undefined) ? bubbles : true, + cancelable = (cancelable !== undefined) ? cancelable : true, + k; + + ev.initEvent(eventType, bubbles, cancelable); + + // add data to event object + if (data) for (k in data) ev[k] = data[k]; + + // dispatch + if (element) element.dispatchEvent(ev); + + return ev; +} + + +/** + * Turn on window scroll lock. + */ +function enableScrollLockFn() { + // increment counter + scrollLock += 1 + + // add lock + if (scrollLock === 1) { + var win = window, + doc = document; + + scrollLockPos = {left: jqLite.scrollLeft(win), top: jqLite.scrollTop(win)}; + jqLite.addClass(doc.body, scrollLockCls); + win.scrollTo(scrollLockPos.left, scrollLockPos.top); + } +} + + +/** + * Turn off window scroll lock. + */ +function disableScrollLockFn() { + // ignore + if (scrollLock === 0) return; + + // decrement counter + scrollLock -= 1 + + // remove lock + if (scrollLock === 0) { + var win = window, + doc = document; + + jqLite.removeClass(doc.body, scrollLockCls); + win.scrollTo(scrollLockPos.left, scrollLockPos.top); + } +} + + +/** + * Define the module API + */ +module.exports = { + /** Create callback closures */ + callback: callbackFn, + + /** Classnames object to string */ + classNames: classNamesFn, + + /** Disable scroll lock */ + disableScrollLock: disableScrollLockFn, + + /** Dispatch event */ + dispatchEvent: dispatchEventFn, + + /** Enable scroll lock */ + enableScrollLock: enableScrollLockFn, + + /** Log messages to the console when debug is turned on */ + log: logFn, + + /** Load CSS text as new stylesheet */ + loadStyle: loadStyleFn, + + /** Register muiNodeInserted handler */ + onNodeInserted: onNodeInsertedFn, + + /** Raise MUI error */ + raiseError: raiseErrorFn, + + /** Support Pointer Events check */ + supportsPointerEvents: supportsPointerEventsFn +}; + +},{"../config":2,"./jqLite":4}],6:[function(require,module,exports){ +/** + * MUI CSS/JS dropdown module + * @module dropdowns + */ + +'use strict'; + + +var jqLite = require('./lib/jqLite'), + util = require('./lib/util'), + attrKey = 'data-mui-toggle', + attrSelector = '[data-mui-toggle="dropdown"]', + openClass = 'mui--is-open', + menuClass = 'mui-dropdown__menu'; + + +/** + * Initialize toggle element. + * @param {Element} toggleEl - The toggle element. + */ +function initialize(toggleEl) { + // check flag + if (toggleEl._muiDropdown === true) return; + else toggleEl._muiDropdown = true; + + // use type "button" to prevent form submission by default + if (!toggleEl.hasAttribute('type')) toggleEl.type = 'button'; + + // attach click handler + jqLite.on(toggleEl, 'click', clickHandler); +} + + +/** + * Handle click events on dropdown toggle element. + * @param {Event} ev - The DOM event + */ +function clickHandler(ev) { + // only left clicks + if (ev.button !== 0) return; + + var toggleEl = this; + + // exit if toggle button is disabled + if (toggleEl.getAttribute('disabled') !== null) return; + + // toggle dropdown + toggleDropdown(toggleEl); +} + + +/** + * Toggle the dropdown. + * @param {Element} toggleEl - The dropdown toggle element. + */ +function toggleDropdown(toggleEl) { + var wrapperEl = toggleEl.parentNode, + menuEl = toggleEl.nextElementSibling, + doc = wrapperEl.ownerDocument; + + // exit if no menu element + if (!menuEl || !jqLite.hasClass(menuEl, menuClass)) { + return util.raiseError('Dropdown menu element not found'); + } + + // method to close dropdown + function closeDropdownFn() { + jqLite.removeClass(menuEl, openClass); + + // remove event handlers + jqLite.off(doc, 'click', closeDropdownFn); + } + + // method to open dropdown + function openDropdownFn() { + // position menu element below toggle button + var wrapperRect = wrapperEl.getBoundingClientRect(), + toggleRect = toggleEl.getBoundingClientRect(); + + var top = toggleRect.top - wrapperRect.top + toggleRect.height; + jqLite.css(menuEl, 'top', top + 'px'); + + // add open class to wrapper + jqLite.addClass(menuEl, openClass); + + // close dropdown when user clicks outside of menu + setTimeout(function() {jqLite.on(doc, 'click', closeDropdownFn);}, 0); + } + + // toggle dropdown + if (jqLite.hasClass(menuEl, openClass)) closeDropdownFn(); + else openDropdownFn(); +} + + +/** Define module API */ +module.exports = { + /** Initialize module listeners */ + initListeners: function() { + var doc = document; + + // markup elements available when method is called + var elList = doc.querySelectorAll(attrSelector); + for (var i=elList.length - 1; i >= 0; i--) initialize(elList[i]); + + // listen for new elements + util.onNodeInserted(function(el) { + if (el.getAttribute(attrKey) === 'dropdown') initialize(el); + }); + } +}; + +},{"./lib/jqLite":4,"./lib/util":5}],7:[function(require,module,exports){ +module.exports=require(4) +},{}],8:[function(require,module,exports){ +/** + * MUI CSS/JS overlay module + * @module overlay + */ + +'use strict'; + + +var util = require('./lib/util'), + jqLite = require('./lib/jqLite'), + overlayId = 'mui-overlay', + bodyClass = 'mui--overflow-hidden', + iosRegex = /(iPad|iPhone|iPod)/g; + + +/** + * Turn overlay on/off. + * @param {string} action - Turn overlay "on"/"off". + * @param {object} [options] + * @config {boolean} [keyboard] - If true, close when escape key is pressed. + * @config {boolean} [static] - If false, close when backdrop is clicked. + * @config {Function} [onclose] - Callback function to execute on close + * @param {Element} [childElement] - Child element to add to overlay. + */ +function overlayFn(action) { + var overlayEl; + + if (action === 'on') { + // extract arguments + var arg, options, childElement; + + // pull options and childElement from arguments + for (var i=arguments.length - 1; i > 0; i--) { + arg = arguments[i]; + + if (jqLite.type(arg) === 'object') options = arg; + if (arg instanceof Element && arg.nodeType === 1) childElement = arg; + } + + // option defaults + options = options || {}; + if (options.keyboard === undefined) options.keyboard = true; + if (options.static === undefined) options.static = false; + + // execute method + overlayEl = overlayOn(options, childElement); + + } else if (action === 'off') { + overlayEl = overlayOff(); + + } else { + // raise error + util.raiseError("Expecting 'on' or 'off'"); + } + + return overlayEl; +} + + +/** + * Turn on overlay. + * @param {object} options - Overlay options. + * @param {Element} childElement - The child element. + */ +function overlayOn(options, childElement) { + var bodyEl = document.body, + overlayEl = document.getElementById(overlayId); + + // add overlay + util.enableScrollLock(); + //jqLite.addClass(bodyEl, bodyClass); + + if (!overlayEl) { + // create overlayEl + overlayEl = document.createElement('div'); + overlayEl.setAttribute('id', overlayId); + + // add child element + if (childElement) overlayEl.appendChild(childElement); + + bodyEl.appendChild(overlayEl); + + } else { + // remove existing children + while (overlayEl.firstChild) overlayEl.removeChild(overlayEl.firstChild); + + // add child element + if (childElement) overlayEl.appendChild(childElement); + } + + // iOS bugfix + if (iosRegex.test(navigator.userAgent)) { + jqLite.css(overlayEl, 'cursor', 'pointer'); + } + + // handle options + if (options.keyboard) addKeyupHandler(); + else removeKeyupHandler(); + + if (options.static) removeClickHandler(overlayEl); + else addClickHandler(overlayEl); + + // attach options + overlayEl.muiOptions = options; + + return overlayEl; +} + + +/** + * Turn off overlay. + */ +function overlayOff() { + var overlayEl = document.getElementById(overlayId), + callbackFn; + + if (overlayEl) { + // remove children + while (overlayEl.firstChild) overlayEl.removeChild(overlayEl.firstChild); + + // remove overlay element + overlayEl.parentNode.removeChild(overlayEl); + + // callback reference + callbackFn = overlayEl.muiOptions.onclose; + + // remove click handler + removeClickHandler(overlayEl); + } + + util.disableScrollLock(); + + // remove keyup handler + removeKeyupHandler(); + + // execute callback + if (callbackFn) callbackFn(); + + return overlayEl; +} + + +/** + * Add keyup handler. + */ +function addKeyupHandler() { + jqLite.on(document, 'keyup', onKeyup); +} + + +/** + * Remove keyup handler. + */ +function removeKeyupHandler() { + jqLite.off(document, 'keyup', onKeyup); +} + + +/** + * Teardown overlay when escape key is pressed. + */ +function onKeyup(ev) { + if (ev.keyCode === 27) overlayOff(); +} + + +/** + * Add click handler. + */ +function addClickHandler(overlayEl) { + jqLite.on(overlayEl, 'click', onClick); +} + + +/** + * Remove click handler. + */ +function removeClickHandler(overlayEl) { + jqLite.off(overlayEl, 'click', onClick); +} + + +/** + * Teardown overlay when backdrop is clicked. + */ +function onClick(ev) { + if (ev.target.id === overlayId) overlayOff(); +} + + +/** Define module API */ +module.exports = overlayFn; + +},{"./lib/jqLite":4,"./lib/util":5}],9:[function(require,module,exports){ +/** + * MUI CSS/JS ripple module + * @module ripple + */ + +'use strict'; + + +var jqLite = require('./lib/jqLite'), + util = require('./lib/util'), + btnClass = 'mui-btn', + btnFABClass = 'mui-btn--fab', + rippleClass = 'mui-ripple-effect', + animationName = 'mui-btn-inserted'; + + +/** + * Add ripple effects to button element. + * @param {Element} buttonEl - The button element. + */ +function initialize(buttonEl) { + // check flag + if (buttonEl._muiRipple === true) return; + else buttonEl._muiRipple = true; + + // exit if element is INPUT (doesn't support absolute positioned children) + if (buttonEl.tagName === 'INPUT') return; + + // attach event handler + jqLite.on(buttonEl, 'touchstart', eventHandler); + jqLite.on(buttonEl, 'mousedown', eventHandler); +} + + +/** + * Event handler + * @param {Event} ev - The DOM event + */ +function eventHandler(ev) { + // only left clicks + if (ev.button !== 0) return; + + var buttonEl = this; + + // exit if button is disabled + if (buttonEl.disabled === true) return; + + // de-dupe touchstart and mousedown with 100msec flag + if (buttonEl.touchFlag === true) { + return; + } else { + buttonEl.touchFlag = true; + setTimeout(function() { + buttonEl.touchFlag = false; + }, 100); + } + + var rippleEl = document.createElement('div'); + rippleEl.className = rippleClass; + + var offset = jqLite.offset(buttonEl), + xPos = ev.pageX - offset.left, + yPos = ev.pageY - offset.top, + diameter, + radius; + + // get height + if (jqLite.hasClass(buttonEl, btnFABClass)) diameter = offset.height / 2; + else diameter = offset.height; + + radius = diameter / 2; + + jqLite.css(rippleEl, { + height: diameter + 'px', + width: diameter + 'px', + top: yPos - radius + 'px', + left: xPos - radius + 'px' + }); + + buttonEl.appendChild(rippleEl); + + window.setTimeout(function() { + var parentNode = rippleEl.parentNode; + if (parentNode) parentNode.removeChild(rippleEl); + }, 2000); +} + + +/** Define module API */ +module.exports = { + /** Initialize module listeners */ + initListeners: function() { + var doc = document; + + // markup elements available when method is called + var elList = doc.getElementsByClassName(btnClass); + for (var i=elList.length - 1; i >= 0; i--) initialize(elList[i]); + + // listen for new elements + util.onNodeInserted(function(el) { + if (jqLite.hasClass(el, btnClass)) initialize(el); + }); + } +}; + +},{"./lib/jqLite":4,"./lib/util":5}],10:[function(require,module,exports){ +/** + * MUI CSS/JS select module + * @module forms/select + */ + +'use strict'; + + +var jqLite = require('./lib/jqLite'), + util = require('./lib/util'), + formlib = require('./lib/forms'), + wrapperClass = 'mui-select', + cssSelector = '.mui-select > select', + menuClass = 'mui-select__menu', + selectedClass = 'mui--is-selected', + doc = document, + win = window; + + +/** + * Initialize select element. + * @param {Element} selectEl - The select element. + */ +function initialize(selectEl) { + // check flag + if (selectEl._muiSelect === true) return; + else selectEl._muiSelect = true; + + // use default behavior on touch devices + if ('ontouchstart' in doc.documentElement) return; + + // initialize element + new Select(selectEl); +} + + +/** + * Creates a new Select object + * @class + */ +function Select(selectEl) { + // instance variables + this.selectEl = selectEl; + this.wrapperEl = selectEl.parentNode; + this.useDefault = false; // currently unused but let's keep just in case + + // attach event handlers + jqLite.on(selectEl, 'mousedown', util.callback(this, 'mousedownHandler')); + jqLite.on(selectEl, 'focus', util.callback(this, 'focusHandler')); + jqLite.on(selectEl, 'click', util.callback(this, 'clickHandler')); + + // make wrapper focusable and fix firefox bug + this.wrapperEl.tabIndex = -1; + var callbackFn = util.callback(this, 'wrapperFocusHandler'); + jqLite.on(this.wrapperEl, 'focus', callbackFn); +} + + +/** + * Disable default dropdown on mousedown. + * @param {Event} ev - The DOM event + */ +Select.prototype.mousedownHandler = function(ev) { + if (ev.button !== 0 || this.useDefault === true) return; + ev.preventDefault(); +} + + +/** + * Handle focus event on select element. + * @param {Event} ev - The DOM event + */ +Select.prototype.focusHandler = function(ev) { + // check flag + if (this.useDefault === true) return; + + var selectEl = this.selectEl, + wrapperEl = this.wrapperEl, + origIndex = selectEl.tabIndex, + keydownFn = util.callback(this, 'keydownHandler'); + + // attach keydown handler + jqLite.on(doc, 'keydown', keydownFn); + + // disable tabfocus once + selectEl.tabIndex = -1; + jqLite.one(wrapperEl, 'blur', function() { + selectEl.tabIndex = origIndex; + jqLite.off(doc, 'keydown', keydownFn); + }); + + // defer focus to parent + wrapperEl.focus(); +} + + +/** + * Handle keydown events on doc + **/ +Select.prototype.keydownHandler = function(ev) { + var keyCode = ev.keyCode; + + // spacebar, down, up + if (keyCode === 32 || keyCode === 38 || keyCode === 40) { + // prevent win scroll + ev.preventDefault(); + + if (this.selectEl.disabled !== true) this.renderMenu(); + } +} + + +/** + * Handle focus event on wrapper element. + */ +Select.prototype.wrapperFocusHandler = function() { + // firefox bugfix + if (this.selectEl.disabled) return this.wrapperEl.blur(); +} + + +/** + * Handle click events on select element. + * @param {Event} ev - The DOM event + */ +Select.prototype.clickHandler = function(ev) { + // only left clicks + if (ev.button !== 0) return; + this.renderMenu(); +} + + +/** + * Render options dropdown. + */ +Select.prototype.renderMenu = function() { + // check and reset flag + if (this.useDefault === true) return this.useDefault = false; + + new Menu(this.wrapperEl, this.selectEl); +} + + +/** + * Creates a new Menu + * @class + */ +function Menu(wrapperEl, selectEl) { + // add scroll lock + util.enableScrollLock(); + + // instance variables + this.origIndex = null; + this.currentIndex = null; + this.selectEl = selectEl; + this.menuEl = this._createMenuEl(wrapperEl, selectEl); + this.clickCallbackFn = util.callback(this, 'clickHandler'); + this.keydownCallbackFn = util.callback(this, 'keydownHandler'); + this.destroyCallbackFn = util.callback(this, 'destroy'); + + // add to DOM + wrapperEl.appendChild(this.menuEl); + jqLite.scrollTop(this.menuEl, this.menuEl._muiScrollTop); + + // blur active element + setTimeout(function() { + // ie10 bugfix + if (doc.activeElement.nodeName.toLowerCase() !== "body") { + doc.activeElement.blur(); + } + }, 0); + + // attach event handlers + jqLite.on(this.menuEl, 'click', this.clickCallbackFn); + jqLite.on(doc, 'keydown', this.keydownCallbackFn); + jqLite.on(win, 'resize', this.destroyCallbackFn); + + // attach event handler after current event loop exits + var fn = this.destroyCallbackFn; + setTimeout(function() {jqLite.on(doc, 'click', fn);}, 0); +} + + +/** + * Create menu element + * @param {Element} selectEl - The select element + */ +Menu.prototype._createMenuEl = function(wrapperEl, selectEl) { + var menuEl = doc.createElement('div'), + optionEls = selectEl.children, + numOptions = optionEls.length, + selectedPos = 0, + optionEl, + itemEl, + i; + + menuEl.className = menuClass; + + // add options + for (i=0; i < numOptions; i++) { + optionEl = optionEls[i]; + + itemEl = doc.createElement('div'); + itemEl.textContent = optionEl.textContent; + itemEl._muiPos = i; + + if (optionEl.selected) { + itemEl.setAttribute('class', selectedClass); + selectedPos = i; + } + + menuEl.appendChild(itemEl); + } + + // save indices + this.origIndex = selectedPos; + this.currentIndex = selectedPos; + + // set position + var props = formlib.getMenuPositionalCSS( + wrapperEl, + numOptions, + selectedPos + ); + + jqLite.css(menuEl, props); + menuEl._muiScrollTop = props.scrollTop; + + return menuEl; +} + + +/** + * Handle keydown events on doc element. + * @param {Event} ev - The DOM event + */ +Menu.prototype.keydownHandler = function(ev) { + var keyCode = ev.keyCode; + + // tab + if (keyCode === 9) return this.destroy(); + + // escape | up | down | enter + if (keyCode === 27 || keyCode === 40 || keyCode === 38 || keyCode === 13) { + ev.preventDefault(); + } + + if (keyCode === 27) { + this.destroy(); + } else if (keyCode === 40) { + this.increment(); + } else if (keyCode === 38) { + this.decrement(); + } else if (keyCode === 13) { + this.selectCurrent(); + this.destroy(); + } +} + + +/** + * Handle click events on menu element. + * @param {Event} ev - The DOM event + */ +Menu.prototype.clickHandler = function(ev) { + // don't allow events to bubble + ev.stopPropagation(); + + var pos = ev.target._muiPos; + + // ignore clicks on non-items + if (pos === undefined) return; + + // select option + this.currentIndex = pos; + this.selectCurrent(); + + // destroy menu + this.destroy(); +} + + +/** + * Increment selected item + */ +Menu.prototype.increment = function() { + if (this.currentIndex === this.menuEl.children.length - 1) return; + + var optionEls = this.menuEl.children; + + jqLite.removeClass(optionEls[this.currentIndex], selectedClass); + this.currentIndex += 1; + jqLite.addClass(optionEls[this.currentIndex], selectedClass); +} + + +/** + * Decrement selected item + */ +Menu.prototype.decrement = function() { + if (this.currentIndex === 0) return; + + var optionEls = this.menuEl.children; + + jqLite.removeClass(optionEls[this.currentIndex], selectedClass); + this.currentIndex -= 1; + jqLite.addClass(optionEls[this.currentIndex], selectedClass); +} + + +/** + * Select current item + */ +Menu.prototype.selectCurrent = function() { + if (this.currentIndex !== this.origIndex) { + var optionEls = this.selectEl.children; + optionEls[this.origIndex].selected = false; + optionEls[this.currentIndex].selected = true; + + // trigger change event + util.dispatchEvent(this.selectEl, 'change'); + } +} + + +/** + * Destroy menu and detach event handlers + */ +Menu.prototype.destroy = function() { + // remove element and focus element + var parentNode = this.menuEl.parentNode; + if (parentNode) parentNode.removeChild(this.menuEl); + + this.selectEl.focus(); + + // remove scroll lock + util.disableScrollLock(); + + // remove event handlers + jqLite.off(this.menuEl, 'click', this.clickCallbackFn); + jqLite.off(doc, 'keydown', this.keydownCallbackFn); + jqLite.off(doc, 'click', this.destroyCallbackFn); + jqLite.off(win, 'resize', this.destroyCallbackFn); +} + + +/** Define module API */ +module.exports = { + /** Initialize module listeners */ + initListeners: function() { + // markup elements available when method is called + var elList = doc.querySelectorAll(cssSelector); + for (var i=elList.length - 1; i >= 0; i--) initialize(elList[i]); + + // listen for new elements + util.onNodeInserted(function(el) { + if (el.tagName === 'SELECT' && + jqLite.hasClass(el.parentNode, wrapperClass)) { + initialize(el); + } + }); + } +}; + +},{"./lib/forms":3,"./lib/jqLite":4,"./lib/util":5}],11:[function(require,module,exports){ +/** + * MUI CSS/JS tabs module + * @module tabs + */ + +'use strict'; + + +var jqLite = require('./lib/jqLite'), + util = require('./lib/util'), + attrKey = 'data-mui-toggle', + attrSelector = '[' + attrKey + '="tab"]', + controlsAttrKey = 'data-mui-controls', + activeClass = 'mui--is-active', + showstartKey = 'mui.tabs.showstart', + showendKey = 'mui.tabs.showend', + hidestartKey = 'mui.tabs.hidestart', + hideendKey = 'mui.tabs.hideend'; + + +/** + * Initialize the toggle element + * @param {Element} toggleEl - The toggle element. + */ +function initialize(toggleEl) { + // check flag + if (toggleEl._muiTabs === true) return; + else toggleEl._muiTabs = true; + + // attach click handler + jqLite.on(toggleEl, 'click', clickHandler); +} + + +/** + * Handle clicks on the toggle element. + * @param {Event} ev - The DOM event. + */ +function clickHandler(ev) { + // only left clicks + if (ev.button !== 0) return; + + var toggleEl = this; + + // exit if toggle element is disabled + if (toggleEl.getAttribute('disabled') !== null) return; + + activateTab(toggleEl); +} + + +/** + * Activate the tab controlled by the toggle element. + * @param {Element} toggleEl - The toggle element. + */ +function activateTab(currToggleEl) { + var currTabEl = currToggleEl.parentNode, + currPaneId = currToggleEl.getAttribute(controlsAttrKey), + currPaneEl = document.getElementById(currPaneId), + prevTabEl, + prevPaneEl, + prevPaneId, + prevToggleEl, + currData, + prevData, + ev1, + ev2, + cssSelector; + + // exit if already active + if (jqLite.hasClass(currTabEl, activeClass)) return; + + // raise error if pane doesn't exist + if (!currPaneEl) util.raiseError('Tab pane "' + currPaneId + '" not found'); + + // get previous pane + prevPaneEl = getActiveSibling(currPaneEl); + prevPaneId = prevPaneEl.id; + + // get previous toggle and tab elements + cssSelector = '[' + controlsAttrKey + '="' + prevPaneId + '"]'; + prevToggleEl = document.querySelectorAll(cssSelector)[0]; + prevTabEl = prevToggleEl.parentNode; + + // define event data + currData = {paneId: currPaneId, relatedPaneId: prevPaneId}; + prevData = {paneId: prevPaneId, relatedPaneId: currPaneId}; + + // dispatch 'hidestart', 'showstart' events + ev1 = util.dispatchEvent(prevToggleEl, hidestartKey, true, true, prevData); + ev2 = util.dispatchEvent(currToggleEl, showstartKey, true, true, currData); + + // let events bubble + setTimeout(function() { + // exit if either event was canceled + if (ev1.defaultPrevented || ev2.defaultPrevented) return; + + // de-activate previous + if (prevTabEl) jqLite.removeClass(prevTabEl, activeClass); + if (prevPaneEl) jqLite.removeClass(prevPaneEl, activeClass); + + // activate current + jqLite.addClass(currTabEl, activeClass); + jqLite.addClass(currPaneEl, activeClass); + + // dispatch 'hideend', 'showend' events + util.dispatchEvent(prevToggleEl, hideendKey, true, false, prevData); + util.dispatchEvent(currToggleEl, showendKey, true, false, currData); + }, 0); +} + + +/** + * Get previous active sibling. + * @param {Element} el - The anchor element. + */ +function getActiveSibling(el) { + var elList = el.parentNode.children, + q = elList.length, + activeEl = null, + tmpEl; + + while (q-- && !activeEl) { + tmpEl = elList[q]; + if (tmpEl !== el && jqLite.hasClass(tmpEl, activeClass)) activeEl = tmpEl + } + + return activeEl; +} + + +/** Define module API */ +module.exports = { + /** Initialize module listeners */ + initListeners: function() { + // markup elements available when method is called + var elList = document.querySelectorAll(attrSelector); + for (var i=elList.length - 1; i >= 0; i--) initialize(elList[i]); + + // TODO: listen for new elements + util.onNodeInserted(function(el) { + if (el.getAttribute(attrKey) === 'tab') initialize(el); + }); + }, + + /** External API */ + api: { + activate: function(paneId) { + var cssSelector = '[' + controlsAttrKey + '=' + paneId + ']', + toggleEl = document.querySelectorAll(cssSelector); + + if (!toggleEl.length) { + util.raiseError('Tab control for pane "' + paneId + '" not found'); + } + + activateTab(toggleEl[0]); + } + } +}; + +},{"./lib/jqLite":4,"./lib/util":5}],12:[function(require,module,exports){ +/** + * MUI CSS/JS form-control module + * @module forms/form-control + */ + +'use strict'; + + +var jqLite = require('./lib/jqLite'), + util = require('./lib/util'), + cssSelector = '.mui-textfield > input, .mui-textfield > textarea', + emptyClass = 'mui--is-empty', + notEmptyClass = 'mui--is-not-empty', + dirtyClass = 'mui--is-dirty', + floatingLabelClass = 'mui-textfield--float-label'; + + +/** + * Initialize input element. + * @param {Element} inputEl - The input element. + */ +function initialize(inputEl) { + // check flag + if (inputEl._muiTextfield === true) return; + else inputEl._muiTextfield = true; + + if (inputEl.value.length) jqLite.addClass(inputEl, notEmptyClass); + else jqLite.addClass(inputEl, emptyClass); + + jqLite.on(inputEl, 'input', inputHandler); + jqLite.on(inputEl, 'change', inputHandler); + + // add dirty class on focus + jqLite.on(inputEl, 'focus', function(){jqLite.addClass(this, dirtyClass);}); +} + + +/** + * Handle input events. + */ +function inputHandler() { + var inputEl = this; + + if (inputEl.value.length) { + jqLite.removeClass(inputEl, emptyClass); + jqLite.addClass(inputEl, notEmptyClass); + } else { + jqLite.removeClass(inputEl, notEmptyClass); + jqLite.addClass(inputEl, emptyClass) + } + + jqLite.addClass(inputEl, dirtyClass); +} + + +/** Define module API */ +module.exports = { + /** Initialize input elements */ + initialize: initialize, + + /** Initialize module listeners */ + initListeners: function() { + var doc = document; + + // markup elements available when method is called + var elList = doc.querySelectorAll(cssSelector); + for (var i=elList.length - 1; i >= 0; i--) initialize(elList[i]); + + // listen for new elements + util.onNodeInserted(function(el) { + if (el.tagName === 'INPUT' || el.tagName === 'TEXTAREA') initialize(el); + }); + + // add transition css for floating labels + setTimeout(function() { + var css = '.mui-textfield.mui-textfield--float-label > label {' + [ + '-webkit-transition', + '-moz-transition', + '-o-transition', + 'transition', + '' + ].join(':all .15s ease-out;') + '}'; + + util.loadStyle(css); + }, 150); + + // pointer-events shim for floating labels + if (util.supportsPointerEvents() === false) { + jqLite.on(document, 'click', function(ev) { + var targetEl = ev.target; + + if (targetEl.tagName === 'LABEL' && + jqLite.hasClass(targetEl.parentNode, floatingLabelClass)) { + var inputEl = targetEl.previousElementSibling; + if (inputEl) inputEl.focus(); + } + }); + } + } +}; + +},{"./lib/jqLite":4,"./lib/util":5}]},{},[1]) \ No newline at end of file diff --git a/www/libs/mui/packages/cdn/js/mui.min.js b/www/libs/mui/packages/cdn/js/mui.min.js new file mode 100644 index 0000000..833d99c --- /dev/null +++ b/www/libs/mui/packages/cdn/js/mui.min.js @@ -0,0 +1 @@ +!function e(t,n,i){function o(l,s){if(!n[l]){if(!t[l]){var a="function"==typeof require&&require;if(!s&&a)return a(l,!0);if(r)return r(l,!0);throw new Error("Cannot find module '"+l+"'")}var c=n[l]={exports:{}};t[l][0].call(c.exports,function(e){var n=t[l][1][e];return o(n?n:e)},c,c.exports,e,t,n,i)}return n[l].exports}for(var r="function"==typeof require&&require,l=0;ld&&(h=s+(n+1)*l-(-1*i+o+r),m=t*l+2*s-p,v=Math.min(h,m)),{height:p+"px",top:i+"px",scrollTop:v}}var o=15,r=32,l=42,s=8;t.exports={getMenuPositionalCSS:i}},{}],4:[function(e,t,n){"use strict";function i(e,t){if(t&&e.setAttribute){for(var n,i=m(e),o=t.split(" "),r=0;r-1:!1}function l(e){if(void 0===e)return"undefined";var t=Object.prototype.toString.call(e);if(0===t.indexOf("[object "))return t.slice(8,-1).toLowerCase();throw new Error("MUI: Could not understand type: "+t)}function s(e,t,n,i){i=void 0===i?!1:i,e.addEventListener(t,n,i);var o=e._muiEventCache=e._muiEventCache||{};o[t]=o[t]||[],o[t].push([n,i])}function a(e,t,n,i){i=void 0===i?!1:i;var o,r,l=e._muiEventCache=e._muiEventCache||{},s=l[t]||[];for(r=s.length;r--;)o=s[r],(void 0===n||o[0]===n&&o[1]===i)&&(s.splice(r,1),e.removeEventListener(t,o[0],o[1]))}function c(e,t,n,i){s(e,t,function o(i){n&&n.apply(this,arguments),a(e,t,o)},i)}function u(e,t){var n=window;if(void 0===t){if(e===n){var i=document.documentElement;return(n.pageXOffset||i.scrollLeft)-(i.clientLeft||0)}return e.scrollLeft}e===n?n.scrollTo(t,d(n)):e.scrollLeft=t}function d(e,t){var n=window;if(void 0===t){if(e===n){var i=document.documentElement;return(n.pageYOffset||i.scrollTop)-(i.clientTop||0)}return e.scrollTop}e===n?n.scrollTo(u(n),t):e.scrollTop=t}function f(e){var t=window,n=e.getBoundingClientRect(),i=d(t),o=u(t);return{top:n.top+i,left:n.left+o,height:n.height,width:n.width}}function p(e){var t=!1,n=!0,i=document,o=i.defaultView,r=i.documentElement,l=i.addEventListener?"addEventListener":"attachEvent",s=i.addEventListener?"removeEventListener":"detachEvent",a=i.addEventListener?"":"on",c=function(n){"readystatechange"==n.type&&"complete"!=i.readyState||(("load"==n.type?o:i)[s](a+n.type,c,!1),!t&&(t=!0)&&e.call(o,n.type||n))},u=function(){try{r.doScroll("left")}catch(e){return void setTimeout(u,50)}c("poll")};if("complete"==i.readyState)e.call(o,"lazy");else{if(i.createEventObject&&r.doScroll){try{n=!o.frameElement}catch(d){}n&&u()}i[l](a+"DOMContentLoaded",c,!1),i[l](a+"readystatechange",c,!1),o[l](a+"load",c,!1)}}function h(e,t){if(t&&e.setAttribute){for(var n,i=m(e),o=t.split(" "),r=0;r=0;)i=i.replace(" "+n+" "," ");e.setAttribute("class",i.trim())}}function m(e){var t=(e.getAttribute("class")||"").replace(/[\n\t]/g,"");return" "+t+" "}function v(e){return e.replace(g,function(e,t,n,i){return i?n.toUpperCase():n}).replace(E,"Moz$1")}function b(e,t,n){var i;return i=n.getPropertyValue(t),""!==i||e.ownerDocument||(i=e.style[v(t)]),i}var y,g=/([\:\-\_]+(.))/g,E=/^moz([A-Z])/;y={multiple:!0,selected:!0,checked:!0,disabled:!0,readonly:!0,required:!0,open:!0},t.exports={addClass:i,css:o,hasClass:r,off:a,offset:f,on:s,one:c,ready:p,removeClass:h,type:l,scrollLeft:u,scrollTop:d}},{}],5:[function(e,t,n){"use strict";function i(){var e=window;if(v.debug&&"undefined"!=typeof e.console)try{e.console.log.apply(e.console,arguments)}catch(t){var n=Array.prototype.slice.call(arguments);e.console.log(n.join("\n"))}}function o(e){var t,n=document;t=n.head||n.getElementsByTagName("head")[0]||n.documentElement;var i=n.createElement("style");return i.type="text/css",i.styleSheet?i.styleSheet.cssText=e:i.appendChild(n.createTextNode(e)),t.insertBefore(i,t.firstChild),i}function r(e,t){if(!t)throw new Error("MUI: "+e);"undefined"!=typeof console&&console.error("MUI Warning: "+e)}function l(e){if(y.push(e),void 0===y._initialized){var t=document;b.on(t,"animationstart",s),b.on(t,"mozAnimationStart",s),b.on(t,"webkitAnimationStart",s),y._initialized=!0}}function s(e){if("mui-node-inserted"===e.animationName)for(var t=e.target,n=y.length-1;n>=0;n--)y[n](t)}function a(e){var t="";for(var n in e)t+=e[n]?n+" ":"";return t.trim()}function c(){if(void 0!==m)return m;var e=document.createElement("x");return e.style.cssText="pointer-events:auto",m="auto"===e.style.pointerEvents}function u(e,t){return function(){e[t].apply(e,arguments)}}function d(e,t,n,i,o){var r,l=document.createEvent("HTMLEvents"),n=void 0!==n?n:!0,i=void 0!==i?i:!0;if(l.initEvent(t,n,i),o)for(r in o)l[r]=o[r];return e&&e.dispatchEvent(l),l}function f(){if(g+=1,1===g){var e=window,t=document;h={left:b.scrollLeft(e),top:b.scrollTop(e)},b.addClass(t.body,E),e.scrollTo(h.left,h.top)}}function p(){if(0!==g&&(g-=1,0===g)){var e=window,t=document;b.removeClass(t.body,E),e.scrollTo(h.left,h.top)}}var h,m,v=e("../config"),b=e("./jqLite"),y=[],g=0,E="mui-body--scroll-lock";t.exports={callback:u,classNames:a,disableScrollLock:p,dispatchEvent:d,enableScrollLock:f,log:i,loadStyle:o,onNodeInserted:l,raiseError:r,supportsPointerEvents:c}},{"../config":2,"./jqLite":4}],6:[function(e,t,n){"use strict";function i(e){e._muiDropdown!==!0&&(e._muiDropdown=!0,e.hasAttribute("type")||(e.type="button"),l.on(e,"click",o))}function o(e){if(0===e.button){var t=this;null===t.getAttribute("disabled")&&r(t)}}function r(e){function t(){l.removeClass(o,u),l.off(r,"click",t)}function n(){var n=i.getBoundingClientRect(),s=e.getBoundingClientRect(),a=s.top-n.top+s.height;l.css(o,"top",a+"px"),l.addClass(o,u),setTimeout(function(){l.on(r,"click",t)},0)}var i=e.parentNode,o=e.nextElementSibling,r=i.ownerDocument;return o&&l.hasClass(o,d)?void(l.hasClass(o,u)?t():n()):s.raiseError("Dropdown menu element not found")}var l=e("./lib/jqLite"),s=e("./lib/util"),a="data-mui-toggle",c='[data-mui-toggle="dropdown"]',u="mui--is-open",d="mui-dropdown__menu";t.exports={initListeners:function(){for(var e=document,t=e.querySelectorAll(c),n=t.length-1;n>=0;n--)i(t[n]);s.onNodeInserted(function(e){"dropdown"===e.getAttribute(a)&&i(e)})}}},{"./lib/jqLite":4,"./lib/util":5}],7:[function(e,t,n){t.exports=e(4)},{}],8:[function(e,t,n){"use strict";function i(e){var t;if("on"===e){for(var n,i,l,s=arguments.length-1;s>0;s--)n=arguments[s],"object"===p.type(n)&&(i=n),n instanceof Element&&1===n.nodeType&&(l=n);i=i||{},void 0===i.keyboard&&(i.keyboard=!0),void 0===i["static"]&&(i["static"]=!1),t=o(i,l)}else"off"===e?t=r():f.raiseError("Expecting 'on' or 'off'");return t}function o(e,t){var n=document.body,i=document.getElementById(h);if(f.enableScrollLock(),i){for(;i.firstChild;)i.removeChild(i.firstChild);t&&i.appendChild(t)}else i=document.createElement("div"),i.setAttribute("id",h),t&&i.appendChild(t),n.appendChild(i);return m.test(navigator.userAgent)&&p.css(i,"cursor","pointer"),e.keyboard?l():s(),e["static"]?u(i):c(i),i.muiOptions=e,i}function r(){var e,t=document.getElementById(h);if(t){for(;t.firstChild;)t.removeChild(t.firstChild);t.parentNode.removeChild(t),e=t.muiOptions.onclose,u(t)}return f.disableScrollLock(),s(),e&&e(),t}function l(){p.on(document,"keyup",a)}function s(){p.off(document,"keyup",a)}function a(e){27===e.keyCode&&r()}function c(e){p.on(e,"click",d)}function u(e){p.off(e,"click",d)}function d(e){e.target.id===h&&r()}var f=e("./lib/util"),p=e("./lib/jqLite"),h="mui-overlay",m=/(iPad|iPhone|iPod)/g;t.exports=i},{"./lib/jqLite":4,"./lib/util":5}],9:[function(e,t,n){"use strict";function i(e){e._muiRipple!==!0&&(e._muiRipple=!0,"INPUT"!==e.tagName&&(r.on(e,"touchstart",o),r.on(e,"mousedown",o)))}function o(e){if(0===e.button){var t=this;if(t.disabled!==!0&&t.touchFlag!==!0){t.touchFlag=!0,setTimeout(function(){t.touchFlag=!1},100);var n=document.createElement("div");n.className=c;var i,o,l=r.offset(t),s=e.pageX-l.left,u=e.pageY-l.top;i=r.hasClass(t,a)?l.height/2:l.height,o=i/2,r.css(n,{height:i+"px",width:i+"px",top:u-o+"px",left:s-o+"px"}),t.appendChild(n),window.setTimeout(function(){var e=n.parentNode;e&&e.removeChild(n)},2e3)}}}var r=e("./lib/jqLite"),l=e("./lib/util"),s="mui-btn",a="mui-btn--fab",c="mui-ripple-effect";t.exports={initListeners:function(){for(var e=document,t=e.getElementsByClassName(s),n=t.length-1;n>=0;n--)i(t[n]);l.onNodeInserted(function(e){r.hasClass(e,s)&&i(e)})}}},{"./lib/jqLite":4,"./lib/util":5}],10:[function(e,t,n){"use strict";function i(e){e._muiSelect!==!0&&(e._muiSelect=!0,"ontouchstart"in p.documentElement||new o(e))}function o(e){this.selectEl=e,this.wrapperEl=e.parentNode,this.useDefault=!1,l.on(e,"mousedown",s.callback(this,"mousedownHandler")),l.on(e,"focus",s.callback(this,"focusHandler")),l.on(e,"click",s.callback(this,"clickHandler")),this.wrapperEl.tabIndex=-1;var t=s.callback(this,"wrapperFocusHandler");l.on(this.wrapperEl,"focus",t)}function r(e,t){s.enableScrollLock(),this.origIndex=null,this.currentIndex=null,this.selectEl=t,this.menuEl=this._createMenuEl(e,t),this.clickCallbackFn=s.callback(this,"clickHandler"),this.keydownCallbackFn=s.callback(this,"keydownHandler"),this.destroyCallbackFn=s.callback(this,"destroy"),e.appendChild(this.menuEl),l.scrollTop(this.menuEl,this.menuEl._muiScrollTop),setTimeout(function(){"body"!==p.activeElement.nodeName.toLowerCase()&&p.activeElement.blur()},0),l.on(this.menuEl,"click",this.clickCallbackFn),l.on(p,"keydown",this.keydownCallbackFn),l.on(h,"resize",this.destroyCallbackFn);var n=this.destroyCallbackFn;setTimeout(function(){l.on(p,"click",n)},0)}var l=e("./lib/jqLite"),s=e("./lib/util"),a=e("./lib/forms"),c="mui-select",u=".mui-select > select",d="mui-select__menu",f="mui--is-selected",p=document,h=window;o.prototype.mousedownHandler=function(e){0===e.button&&this.useDefault!==!0&&e.preventDefault()},o.prototype.focusHandler=function(e){if(this.useDefault!==!0){var t=this.selectEl,n=this.wrapperEl,i=t.tabIndex,o=s.callback(this,"keydownHandler");l.on(p,"keydown",o),t.tabIndex=-1,l.one(n,"blur",function(){t.tabIndex=i,l.off(p,"keydown",o)}),n.focus()}},o.prototype.keydownHandler=function(e){var t=e.keyCode;32!==t&&38!==t&&40!==t||(e.preventDefault(),this.selectEl.disabled!==!0&&this.renderMenu())},o.prototype.wrapperFocusHandler=function(){return this.selectEl.disabled?this.wrapperEl.blur():void 0},o.prototype.clickHandler=function(e){0===e.button&&this.renderMenu()},o.prototype.renderMenu=function(){return this.useDefault===!0?this.useDefault=!1:void new r(this.wrapperEl,this.selectEl)},r.prototype._createMenuEl=function(e,t){var n,i,o,r=p.createElement("div"),s=t.children,c=s.length,u=0;for(r.className=d,o=0;c>o;o++)n=s[o],i=p.createElement("div"),i.textContent=n.textContent,i._muiPos=o,n.selected&&(i.setAttribute("class",f),u=o),r.appendChild(i);this.origIndex=u,this.currentIndex=u;var h=a.getMenuPositionalCSS(e,c,u);return l.css(r,h),r._muiScrollTop=h.scrollTop,r},r.prototype.keydownHandler=function(e){var t=e.keyCode;return 9===t?this.destroy():(27!==t&&40!==t&&38!==t&&13!==t||e.preventDefault(),void(27===t?this.destroy():40===t?this.increment():38===t?this.decrement():13===t&&(this.selectCurrent(),this.destroy())))},r.prototype.clickHandler=function(e){e.stopPropagation();var t=e.target._muiPos;void 0!==t&&(this.currentIndex=t,this.selectCurrent(),this.destroy())},r.prototype.increment=function(){if(this.currentIndex!==this.menuEl.children.length-1){var e=this.menuEl.children;l.removeClass(e[this.currentIndex],f),this.currentIndex+=1,l.addClass(e[this.currentIndex],f)}},r.prototype.decrement=function(){if(0!==this.currentIndex){var e=this.menuEl.children;l.removeClass(e[this.currentIndex],f),this.currentIndex-=1,l.addClass(e[this.currentIndex],f)}},r.prototype.selectCurrent=function(){if(this.currentIndex!==this.origIndex){var e=this.selectEl.children;e[this.origIndex].selected=!1,e[this.currentIndex].selected=!0,s.dispatchEvent(this.selectEl,"change")}},r.prototype.destroy=function(){var e=this.menuEl.parentNode;e&&e.removeChild(this.menuEl),this.selectEl.focus(),s.disableScrollLock(),l.off(this.menuEl,"click",this.clickCallbackFn),l.off(p,"keydown",this.keydownCallbackFn),l.off(p,"click",this.destroyCallbackFn),l.off(h,"resize",this.destroyCallbackFn)},t.exports={initListeners:function(){for(var e=p.querySelectorAll(u),t=e.length-1;t>=0;t--)i(e[t]);s.onNodeInserted(function(e){"SELECT"===e.tagName&&l.hasClass(e.parentNode,c)&&i(e)})}}},{"./lib/forms":3,"./lib/jqLite":4,"./lib/util":5}],11:[function(e,t,n){"use strict";function i(e){e._muiTabs!==!0&&(e._muiTabs=!0,s.on(e,"click",o))}function o(e){if(0===e.button){var t=this;null===t.getAttribute("disabled")&&r(t)}}function r(e){var t,n,i,o,r,c,u,b,y,g=e.parentNode,E=e.getAttribute(d),C=document.getElementById(E);s.hasClass(g,f)||(C||a.raiseError('Tab pane "'+E+'" not found'),n=l(C),i=n.id,y="["+d+'="'+i+'"]',o=document.querySelectorAll(y)[0],t=o.parentNode,r={paneId:E,relatedPaneId:i},c={paneId:i,relatedPaneId:E},u=a.dispatchEvent(o,m,!0,!0,c),b=a.dispatchEvent(e,p,!0,!0,r),setTimeout(function(){u.defaultPrevented||b.defaultPrevented||(t&&s.removeClass(t,f),n&&s.removeClass(n,f),s.addClass(g,f),s.addClass(C,f),a.dispatchEvent(o,v,!0,!1,c),a.dispatchEvent(e,h,!0,!1,r))},0))}function l(e){for(var t,n=e.parentNode.children,i=n.length,o=null;i--&&!o;)t=n[i],t!==e&&s.hasClass(t,f)&&(o=t);return o}var s=e("./lib/jqLite"),a=e("./lib/util"),c="data-mui-toggle",u="["+c+'="tab"]',d="data-mui-controls",f="mui--is-active",p="mui.tabs.showstart",h="mui.tabs.showend",m="mui.tabs.hidestart",v="mui.tabs.hideend";t.exports={initListeners:function(){for(var e=document.querySelectorAll(u),t=e.length-1;t>=0;t--)i(e[t]);a.onNodeInserted(function(e){"tab"===e.getAttribute(c)&&i(e)})},api:{activate:function(e){var t="["+d+"="+e+"]",n=document.querySelectorAll(t);n.length||a.raiseError('Tab control for pane "'+e+'" not found'),r(n[0])}}}},{"./lib/jqLite":4,"./lib/util":5}],12:[function(e,t,n){"use strict";function i(e){e._muiTextfield!==!0&&(e._muiTextfield=!0,e.value.length?r.addClass(e,c):r.addClass(e,a),r.on(e,"input",o),r.on(e,"change",o),r.on(e,"focus",function(){r.addClass(this,u)}))}function o(){var e=this;e.value.length?(r.removeClass(e,a),r.addClass(e,c)):(r.removeClass(e,c),r.addClass(e,a)),r.addClass(e,u)}var r=e("./lib/jqLite"),l=e("./lib/util"),s=".mui-textfield > input, .mui-textfield > textarea",a="mui--is-empty",c="mui--is-not-empty",u="mui--is-dirty",d="mui-textfield--float-label";t.exports={initialize:i,initListeners:function(){for(var e=document,t=e.querySelectorAll(s),n=t.length-1;n>=0;n--)i(t[n]);l.onNodeInserted(function(e){"INPUT"!==e.tagName&&"TEXTAREA"!==e.tagName||i(e)}),setTimeout(function(){var e=".mui-textfield.mui-textfield--float-label > label {"+["-webkit-transition","-moz-transition","-o-transition","transition",""].join(":all .15s ease-out;")+"}";l.loadStyle(e)},150),l.supportsPointerEvents()===!1&&r.on(document,"click",function(e){var t=e.target;if("LABEL"===t.tagName&&r.hasClass(t.parentNode,d)){var n=t.previousElementSibling;n&&n.focus()}})}}},{"./lib/jqLite":4,"./lib/util":5}]},{},[1]); \ No newline at end of file diff --git a/www/libs/mui/packages/cdn/react/mui-react.js b/www/libs/mui/packages/cdn/react/mui-react.js new file mode 100644 index 0000000..aefaa3b --- /dev/null +++ b/www/libs/mui/packages/cdn/react/mui-react.js @@ -0,0 +1,3208 @@ +(function (global) { + var babelHelpers = global.babelHelpers = {}; + + babelHelpers.classCallCheck = function (instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + }; + + babelHelpers.createClass = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; + }(); + + babelHelpers.extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; + }; + + babelHelpers.inherits = function (subClass, superClass) { + if (typeof superClass !== "function" && superClass !== null) { + throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); + } + + subClass.prototype = Object.create(superClass && superClass.prototype, { + constructor: { + value: subClass, + enumerable: false, + writable: true, + configurable: true + } + }); + if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; + }; + + babelHelpers.interopRequireDefault = function (obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + }; + + babelHelpers.interopRequireWildcard = function (obj) { + if (obj && obj.__esModule) { + return obj; + } else { + var newObj = {}; + + if (obj != null) { + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; + } + } + + newObj.default = obj; + return newObj; + } + }; + + babelHelpers.objectWithoutProperties = function (obj, keys) { + var target = {}; + + for (var i in obj) { + if (keys.indexOf(i) >= 0) continue; + if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; + target[i] = obj[i]; + } + + return target; + }; + + babelHelpers.possibleConstructorReturn = function (self, call) { + if (!self) { + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + } + + return call && (typeof call === "object" || typeof call === "function") ? call : self; + }; +})(typeof global === "undefined" ? self : global);(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o viewHeight) { + scrollIdeal = menuPadding + (currentIndex + 1) * optionHeight - (-1 * top + wrapperPadding + inputHeight); + scrollMax = numOptions * optionHeight + 2 * menuPadding - height; + scrollTop = Math.min(scrollIdeal, scrollMax); + } + + return { + 'height': height + 'px', + 'top': top + 'px', + 'scrollTop': scrollTop + }; +} + +/** Define module API */ +module.exports = { + getMenuPositionalCSS: getMenuPositionalCSSFn +}; + +},{}],4:[function(require,module,exports){ +/** + * MUI CSS/JS jqLite module + * @module lib/jqLite + */ + +'use strict'; + +/** + * Add a class to an element. + * @param {Element} element - The DOM element. + * @param {string} cssClasses - Space separated list of class names. + */ + +function jqLiteAddClass(element, cssClasses) { + if (!cssClasses || !element.setAttribute) return; + + var existingClasses = _getExistingClasses(element), + splitClasses = cssClasses.split(' '), + cssClass; + + for (var i = 0; i < splitClasses.length; i++) { + cssClass = splitClasses[i].trim(); + if (existingClasses.indexOf(' ' + cssClass + ' ') === -1) { + existingClasses += cssClass + ' '; + } + } + + element.setAttribute('class', existingClasses.trim()); +} + +/** + * Get or set CSS properties. + * @param {Element} element - The DOM element. + * @param {string} [name] - The property name. + * @param {string} [value] - The property value. + */ +function jqLiteCss(element, name, value) { + // Return full style object + if (name === undefined) { + return getComputedStyle(element); + } + + var nameType = jqLiteType(name); + + // Set multiple values + if (nameType === 'object') { + for (var key in name) { + element.style[_camelCase(key)] = name[key]; + }return; + } + + // Set a single value + if (nameType === 'string' && value !== undefined) { + element.style[_camelCase(name)] = value; + } + + var styleObj = getComputedStyle(element), + isArray = jqLiteType(name) === 'array'; + + // Read single value + if (!isArray) return _getCurrCssProp(element, name, styleObj); + + // Read multiple values + var outObj = {}, + key; + + for (var i = 0; i < name.length; i++) { + key = name[i]; + outObj[key] = _getCurrCssProp(element, key, styleObj); + } + + return outObj; +} + +/** + * Check if element has class. + * @param {Element} element - The DOM element. + * @param {string} cls - The class name string. + */ +function jqLiteHasClass(element, cls) { + if (!cls || !element.getAttribute) return false; + return _getExistingClasses(element).indexOf(' ' + cls + ' ') > -1; +} + +/** + * Return the type of a variable. + * @param {} somevar - The JavaScript variable. + */ +function jqLiteType(somevar) { + // handle undefined + if (somevar === undefined) return 'undefined'; + + // handle others (of type [object ]) + var typeStr = Object.prototype.toString.call(somevar); + if (typeStr.indexOf('[object ') === 0) { + return typeStr.slice(8, -1).toLowerCase(); + } else { + throw new Error("MUI: Could not understand type: " + typeStr); + } +} + +/** + * Attach an event handler to a DOM element + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOn(element, type, callback, useCapture) { + useCapture = useCapture === undefined ? false : useCapture; + + // add to DOM + element.addEventListener(type, callback, useCapture); + + // add to cache + var cache = element._muiEventCache = element._muiEventCache || {}; + cache[type] = cache[type] || []; + cache[type].push([callback, useCapture]); +} + +/** + * Remove an event handler from a DOM element + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOff(element, type, callback, useCapture) { + useCapture = useCapture === undefined ? false : useCapture; + + // remove from cache + var cache = element._muiEventCache = element._muiEventCache || {}, + argsList = cache[type] || [], + args, + i; + + i = argsList.length; + while (i--) { + args = argsList[i]; + + // remove all events if callback is undefined + if (callback === undefined || args[0] === callback && args[1] === useCapture) { + + // remove from cache + argsList.splice(i, 1); + + // remove from DOM + element.removeEventListener(type, args[0], args[1]); + } + } +} + +/** + * Attach an event hander which will only execute once + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOne(element, type, callback, useCapture) { + jqLiteOn(element, type, function onFn(ev) { + // execute callback + if (callback) callback.apply(this, arguments); + + // remove wrapper + jqLiteOff(element, type, onFn); + }, useCapture); +} + +/** + * Get or set horizontal scroll position + * @param {Element} element - The DOM element + * @param {number} [value] - The scroll position + */ +function jqLiteScrollLeft(element, value) { + var win = window; + + // get + if (value === undefined) { + if (element === win) { + var docEl = document.documentElement; + return (win.pageXOffset || docEl.scrollLeft) - (docEl.clientLeft || 0); + } else { + return element.scrollLeft; + } + } + + // set + if (element === win) win.scrollTo(value, jqLiteScrollTop(win));else element.scrollLeft = value; +} + +/** + * Get or set vertical scroll position + * @param {Element} element - The DOM element + * @param {number} value - The scroll position + */ +function jqLiteScrollTop(element, value) { + var win = window; + + // get + if (value === undefined) { + if (element === win) { + var docEl = document.documentElement; + return (win.pageYOffset || docEl.scrollTop) - (docEl.clientTop || 0); + } else { + return element.scrollTop; + } + } + + // set + if (element === win) win.scrollTo(jqLiteScrollLeft(win), value);else element.scrollTop = value; +} + +/** + * Return object representing top/left offset and element height/width. + * @param {Element} element - The DOM element. + */ +function jqLiteOffset(element) { + var win = window, + rect = element.getBoundingClientRect(), + scrollTop = jqLiteScrollTop(win), + scrollLeft = jqLiteScrollLeft(win); + + return { + top: rect.top + scrollTop, + left: rect.left + scrollLeft, + height: rect.height, + width: rect.width + }; +} + +/** + * Attach a callback to the DOM ready event listener + * @param {Function} fn - The callback function. + */ +function jqLiteReady(fn) { + var done = false, + top = true, + doc = document, + win = doc.defaultView, + root = doc.documentElement, + add = doc.addEventListener ? 'addEventListener' : 'attachEvent', + rem = doc.addEventListener ? 'removeEventListener' : 'detachEvent', + pre = doc.addEventListener ? '' : 'on'; + + var init = function init(e) { + if (e.type == 'readystatechange' && doc.readyState != 'complete') { + return; + } + + (e.type == 'load' ? win : doc)[rem](pre + e.type, init, false); + if (!done && (done = true)) fn.call(win, e.type || e); + }; + + var poll = function poll() { + try { + root.doScroll('left'); + } catch (e) { + setTimeout(poll, 50);return; + } + init('poll'); + }; + + if (doc.readyState == 'complete') { + fn.call(win, 'lazy'); + } else { + if (doc.createEventObject && root.doScroll) { + try { + top = !win.frameElement; + } catch (e) {} + if (top) poll(); + } + doc[add](pre + 'DOMContentLoaded', init, false); + doc[add](pre + 'readystatechange', init, false); + win[add](pre + 'load', init, false); + } +} + +/** + * Remove classes from a DOM element + * @param {Element} element - The DOM element. + * @param {string} cssClasses - Space separated list of class names. + */ +function jqLiteRemoveClass(element, cssClasses) { + if (!cssClasses || !element.setAttribute) return; + + var existingClasses = _getExistingClasses(element), + splitClasses = cssClasses.split(' '), + cssClass; + + for (var i = 0; i < splitClasses.length; i++) { + cssClass = splitClasses[i].trim(); + while (existingClasses.indexOf(' ' + cssClass + ' ') >= 0) { + existingClasses = existingClasses.replace(' ' + cssClass + ' ', ' '); + } + } + + element.setAttribute('class', existingClasses.trim()); +} + +// ------------------------------ +// Utilities +// ------------------------------ +var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g, + MOZ_HACK_REGEXP = /^moz([A-Z])/, + ESCAPE_REGEXP = /([.*+?^=!:${}()|\[\]\/\\])/g, + BOOLEAN_ATTRS; + +BOOLEAN_ATTRS = { + multiple: true, + selected: true, + checked: true, + disabled: true, + readonly: true, + required: true, + open: true +}; + +function _getExistingClasses(element) { + var classes = (element.getAttribute('class') || '').replace(/[\n\t]/g, ''); + return ' ' + classes + ' '; +} + +function _camelCase(name) { + return name.replace(SPECIAL_CHARS_REGEXP, function (_, separator, letter, offset) { + return offset ? letter.toUpperCase() : letter; + }).replace(MOZ_HACK_REGEXP, 'Moz$1'); +} + +function _escapeRegExp(string) { + return string.replace(ESCAPE_REGEXP, "\\$1"); +} + +function _getCurrCssProp(elem, name, computed) { + var ret; + + // try computed style + ret = computed.getPropertyValue(name); + + // try style attribute (if element is not attached to document) + if (ret === '' && !elem.ownerDocument) ret = elem.style[_camelCase(name)]; + + return ret; +} + +/** + * Module API + */ +module.exports = { + /** Add classes */ + addClass: jqLiteAddClass, + + /** Get or set CSS properties */ + css: jqLiteCss, + + /** Check for class */ + hasClass: jqLiteHasClass, + + /** Remove event handlers */ + off: jqLiteOff, + + /** Return offset values */ + offset: jqLiteOffset, + + /** Add event handlers */ + on: jqLiteOn, + + /** Add an execute-once event handler */ + one: jqLiteOne, + + /** DOM ready event handler */ + ready: jqLiteReady, + + /** Remove classes */ + removeClass: jqLiteRemoveClass, + + /** Check JavaScript variable instance type */ + type: jqLiteType, + + /** Get or set horizontal scroll position */ + scrollLeft: jqLiteScrollLeft, + + /** Get or set vertical scroll position */ + scrollTop: jqLiteScrollTop +}; + +},{}],5:[function(require,module,exports){ +/** + * MUI CSS/JS utilities module + * @module lib/util + */ + +'use strict'; + +var config = require('../config'), + jqLite = require('./jqLite'), + nodeInsertedCallbacks = [], + scrollLock = 0, + scrollLockCls = 'mui-body--scroll-lock', + scrollLockPos, + _supportsPointerEvents; + +/** + * Logging function + */ +function logFn() { + var win = window; + + if (config.debug && typeof win.console !== "undefined") { + try { + win.console.log.apply(win.console, arguments); + } catch (a) { + var e = Array.prototype.slice.call(arguments); + win.console.log(e.join("\n")); + } + } +} + +/** + * Load CSS text in new stylesheet + * @param {string} cssText - The css text. + */ +function loadStyleFn(cssText) { + var doc = document, + head; + + // copied from jQuery + head = doc.head || doc.getElementsByTagName('head')[0] || doc.documentElement; + + var e = doc.createElement('style'); + e.type = 'text/css'; + + if (e.styleSheet) e.styleSheet.cssText = cssText;else e.appendChild(doc.createTextNode(cssText)); + + // add to document + head.insertBefore(e, head.firstChild); + + return e; +} + +/** + * Raise an error + * @param {string} msg - The error message. + */ +function raiseErrorFn(msg, useConsole) { + if (useConsole) { + if (typeof console !== 'undefined') console.error('MUI Warning: ' + msg); + } else { + throw new Error('MUI: ' + msg); + } +} + +/** + * Register callbacks on muiNodeInserted event + * @param {function} callbackFn - The callback function. + */ +function onNodeInsertedFn(callbackFn) { + nodeInsertedCallbacks.push(callbackFn); + + // initalize listeners + if (nodeInsertedCallbacks._initialized === undefined) { + var doc = document; + + jqLite.on(doc, 'animationstart', animationHandlerFn); + jqLite.on(doc, 'mozAnimationStart', animationHandlerFn); + jqLite.on(doc, 'webkitAnimationStart', animationHandlerFn); + + nodeInsertedCallbacks._initialized = true; + } +} + +/** + * Execute muiNodeInserted callbacks + * @param {Event} ev - The DOM event. + */ +function animationHandlerFn(ev) { + // check animation name + if (ev.animationName !== 'mui-node-inserted') return; + + var el = ev.target; + + // iterate through callbacks + for (var i = nodeInsertedCallbacks.length - 1; i >= 0; i--) { + nodeInsertedCallbacks[i](el); + } +} + +/** + * Convert Classname object, with class as key and true/false as value, to an + * class string. + * @param {Object} classes The classes + * @return {String} class string + */ +function classNamesFn(classes) { + var cs = ''; + for (var i in classes) { + cs += classes[i] ? i + ' ' : ''; + } + return cs.trim(); +} + +/** + * Check if client supports pointer events. + */ +function supportsPointerEventsFn() { + // check cache + if (_supportsPointerEvents !== undefined) return _supportsPointerEvents; + + var element = document.createElement('x'); + element.style.cssText = 'pointer-events:auto'; + _supportsPointerEvents = element.style.pointerEvents === 'auto'; + return _supportsPointerEvents; +} + +/** + * Create callback closure. + * @param {Object} instance - The object instance. + * @param {String} funcName - The name of the callback function. + */ +function callbackFn(instance, funcName) { + return function () { + instance[funcName].apply(instance, arguments); + }; +} + +/** + * Dispatch event. + * @param {Element} element - The DOM element. + * @param {String} eventType - The event type. + * @param {Boolean} bubbles=true - If true, event bubbles. + * @param {Boolean} cancelable=true = If true, event is cancelable + * @param {Object} [data] - Data to add to event object + */ +function dispatchEventFn(element, eventType, bubbles, cancelable, data) { + var ev = document.createEvent('HTMLEvents'), + bubbles = bubbles !== undefined ? bubbles : true, + cancelable = cancelable !== undefined ? cancelable : true, + k; + + ev.initEvent(eventType, bubbles, cancelable); + + // add data to event object + if (data) for (k in data) { + ev[k] = data[k]; + } // dispatch + if (element) element.dispatchEvent(ev); + + return ev; +} + +/** + * Turn on window scroll lock. + */ +function enableScrollLockFn() { + // increment counter + scrollLock += 1; + + // add lock + if (scrollLock === 1) { + var win = window, + doc = document; + + scrollLockPos = { left: jqLite.scrollLeft(win), top: jqLite.scrollTop(win) }; + jqLite.addClass(doc.body, scrollLockCls); + win.scrollTo(scrollLockPos.left, scrollLockPos.top); + } +} + +/** + * Turn off window scroll lock. + */ +function disableScrollLockFn() { + // ignore + if (scrollLock === 0) return; + + // decrement counter + scrollLock -= 1; + + // remove lock + if (scrollLock === 0) { + var win = window, + doc = document; + + jqLite.removeClass(doc.body, scrollLockCls); + win.scrollTo(scrollLockPos.left, scrollLockPos.top); + } +} + +/** + * Define the module API + */ +module.exports = { + /** Create callback closures */ + callback: callbackFn, + + /** Classnames object to string */ + classNames: classNamesFn, + + /** Disable scroll lock */ + disableScrollLock: disableScrollLockFn, + + /** Dispatch event */ + dispatchEvent: dispatchEventFn, + + /** Enable scroll lock */ + enableScrollLock: enableScrollLockFn, + + /** Log messages to the console when debug is turned on */ + log: logFn, + + /** Load CSS text as new stylesheet */ + loadStyle: loadStyleFn, + + /** Register muiNodeInserted handler */ + onNodeInserted: onNodeInsertedFn, + + /** Raise MUI error */ + raiseError: raiseErrorFn, + + /** Support Pointer Events check */ + supportsPointerEvents: supportsPointerEventsFn +}; + +},{"../config":2,"./jqLite":4}],6:[function(require,module,exports){ +/** + * MUI React helpers + * @module react/_helpers + */ + +'use strict'; + +var controlledMessage = 'You provided a `value` prop to a form field ' + 'without an `OnChange` handler. Please see React documentation on ' + 'controlled components'; + +module.exports = { controlledMessage: controlledMessage }; + +},{}],7:[function(require,module,exports){ +/** + * MUI React button module + * @module react/button + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var _jqLite = require('../js/lib/jqLite'); + +var jqLite = babelHelpers.interopRequireWildcard(_jqLite); + +var _util = require('../js/lib/util'); + +var util = babelHelpers.interopRequireWildcard(_util); + + +var rippleIter = 0; + +var PropTypes = _react2.default.PropTypes, + btnClass = 'mui-btn', + rippleClass = 'mui-ripple-effect', + btnAttrs = { color: 1, variant: 1, size: 1 }; + +/** + * Button element + * @class + */ + +var Button = function (_React$Component) { + babelHelpers.inherits(Button, _React$Component); + + function Button() { + var _Object$getPrototypeO; + + var _temp, _this, _ret; + + babelHelpers.classCallCheck(this, Button); + + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + return _ret = (_temp = (_this = babelHelpers.possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(Button)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.state = { + ripples: {} + }, _temp), babelHelpers.possibleConstructorReturn(_this, _ret); + } + + babelHelpers.createClass(Button, [{ + key: 'componentDidMount', + value: function componentDidMount() { + // disable MUI js + var el = this.refs.buttonEl; + el._muiDropdown = true; + el._muiRipple = true; + } + }, { + key: 'onClick', + value: function onClick(ev) { + var onClickFn = this.props.onClick; + onClickFn && onClickFn(ev); + } + }, { + key: 'onMouseDown', + value: function onMouseDown(ev) { + // get (x, y) position of click + var offset = jqLite.offset(this.refs.buttonEl); + + // choose diameter + var diameter = offset.height; + if (this.props.variant === 'fab') diameter = diameter / 2; + + // add ripple to state + var ripples = this.state.ripples; + var key = Date.now(); + + ripples[key] = { + xPos: ev.pageX - offset.left, + yPos: ev.pageY - offset.top, + diameter: diameter, + teardownFn: this.teardownRipple.bind(this, key) + }; + + this.setState({ ripples: ripples }); + } + }, { + key: 'onTouchStart', + value: function onTouchStart(ev) {} + }, { + key: 'teardownRipple', + value: function teardownRipple(key) { + // delete ripple + var ripples = this.state.ripples; + delete ripples[key]; + this.setState({ ripples: ripples }); + } + }, { + key: 'render', + value: function render() { + var cls = btnClass, + k = void 0, + v = void 0; + + var ripples = this.state.ripples; + + // button attributes + for (k in btnAttrs) { + v = this.props[k]; + if (v !== 'default') cls += ' ' + btnClass + '--' + v; + } + + return _react2.default.createElement( + 'button', + babelHelpers.extends({}, this.props, { + ref: 'buttonEl', + className: cls + ' ' + this.props.className, + onClick: this.onClick.bind(this), + onMouseDown: this.onMouseDown.bind(this) + }), + this.props.children, + Object.keys(ripples).map(function (k, i) { + var v = ripples[k]; + + return _react2.default.createElement(Ripple, { + key: k, + xPos: v.xPos, + yPos: v.yPos, + diameter: v.diameter, + onTeardown: v.teardownFn + }); + }) + ); + } + }]); + return Button; +}(_react2.default.Component); + +/** + * Ripple component + * @class + */ + + +Button.propTypes = { + color: PropTypes.oneOf(['default', 'primary', 'danger', 'dark', 'accent']), + disabled: PropTypes.bool, + size: PropTypes.oneOf(['default', 'small', 'large']), + type: PropTypes.oneOf(['submit', 'button']), + variant: PropTypes.oneOf(['default', 'flat', 'raised', 'fab']), + onClick: PropTypes.func +}; +Button.defaultProps = { + className: '', + color: 'default', + disabled: false, + size: 'default', + type: null, + variant: 'default', + onClick: null +}; + +var Ripple = function (_React$Component2) { + babelHelpers.inherits(Ripple, _React$Component2); + + function Ripple() { + babelHelpers.classCallCheck(this, Ripple); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Ripple).apply(this, arguments)); + } + + babelHelpers.createClass(Ripple, [{ + key: 'componentDidMount', + value: function componentDidMount() { + var _this3 = this; + + // trigger teardown in 2 sec + this.teardownTimer = setTimeout(function () { + var fn = _this3.props.onTeardown; + fn && fn(); + }, 2000); + } + }, { + key: 'componentWillUnmount', + value: function componentWillUnmount() { + // clear timeout + clearTimeout(this.teardownTimer); + } + }, { + key: 'render', + value: function render() { + var diameter = this.props.diameter, + radius = diameter / 2; + + var style = { + height: diameter, + width: diameter, + top: this.props.yPos - radius || 0, + left: this.props.xPos - radius || 0 + }; + + return _react2.default.createElement('div', { className: rippleClass, style: style }); + } + }]); + return Ripple; +}(_react2.default.Component); + +/** Define module API */ + + +Ripple.propTypes = { + xPos: PropTypes.number, + yPos: PropTypes.number, + diameter: PropTypes.number, + onTeardown: PropTypes.func +}; +Ripple.defaultProps = { + xPos: 0, + yPos: 0, + diameter: 0, + onTeardown: null +}; +exports.default = Button; +module.exports = exports['default']; + +},{"../js/lib/jqLite":4,"../js/lib/util":5,"react":"CwoHg3"}],8:[function(require,module,exports){ +/** + * MUI React Caret Module + * @module react/caret + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +/** + * Caret constructor + * @class + */ + +var Caret = function (_React$Component) { + babelHelpers.inherits(Caret, _React$Component); + + function Caret() { + babelHelpers.classCallCheck(this, Caret); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Caret).apply(this, arguments)); + } + + babelHelpers.createClass(Caret, [{ + key: 'render', + value: function render() { + var _props = this.props; + var children = _props.children; + var other = babelHelpers.objectWithoutProperties(_props, ['children']); + + + return _react2.default.createElement('span', babelHelpers.extends({}, other, { + className: 'mui-caret ' + this.props.className + })); + } + }]); + return Caret; +}(_react2.default.Component); + +/** Define module API */ + + +Caret.defaultProps = { + className: '' +}; +exports.default = Caret; +module.exports = exports['default']; + +},{"react":"CwoHg3"}],9:[function(require,module,exports){ +/** + * MUI React tabs module + * @module react/tabs + */ +/* jshint quotmark:false */ +// jscs:disable validateQuoteMarks + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var PropTypes = _react2.default.PropTypes; + +/** + * Tab constructor + * @class + */ + +var Tab = function (_React$Component) { + babelHelpers.inherits(Tab, _React$Component); + + function Tab() { + babelHelpers.classCallCheck(this, Tab); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Tab).apply(this, arguments)); + } + + babelHelpers.createClass(Tab, [{ + key: 'render', + value: function render() { + return null; + } + }]); + return Tab; +}(_react2.default.Component); + +/** Define module API */ + + +Tab.propTypes = { + value: PropTypes.any, + label: PropTypes.string, + onActive: PropTypes.func +}; +Tab.defaultProps = { + value: null, + label: '', + onActive: null +}; +exports.default = Tab; +module.exports = exports['default']; + +},{"react":"CwoHg3"}],10:[function(require,module,exports){ +/** + * MUI React TextInput Component + * @module react/text-input + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.TextField = undefined; + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var _util = require('../js/lib/util'); + +var util = babelHelpers.interopRequireWildcard(_util); + +var _helpers = require('./_helpers'); + +var PropTypes = _react2.default.PropTypes; + +/** + * Input constructor + * @class + */ + +var Input = function (_React$Component) { + babelHelpers.inherits(Input, _React$Component); + + function Input(props) { + babelHelpers.classCallCheck(this, Input); + + var _this = babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Input).call(this, props)); + + var value = props.value; + var innerValue = value || props.defaultValue; + + _this.state = { + innerValue: innerValue, + isDirty: Boolean(innerValue) + }; + + // warn if value defined but onChange is not + if (value !== undefined && props.onChange === null) { + util.raiseError(_helpers.controlledMessage, true); + } + + var cb = util.callback; + _this.onChangeCB = cb(_this, 'onChange'); + _this.onFocusCB = cb(_this, 'onFocus'); + return _this; + } + + babelHelpers.createClass(Input, [{ + key: 'componentDidMount', + value: function componentDidMount() { + // disable MUI js + this.refs.inputEl._muiTextfield = true; + } + }, { + key: 'onChange', + value: function onChange(ev) { + this.setState({ innerValue: ev.target.value }); + + var fn = this.props.onChange; + if (fn) fn(ev); + } + }, { + key: 'onFocus', + value: function onFocus(ev) { + this.setState({ isDirty: true }); + } + }, { + key: 'triggerFocus', + value: function triggerFocus() { + // hack to enable IE10 pointer-events shim + this.refs.inputEl.focus(); + } + }, { + key: 'render', + value: function render() { + var cls = {}, + isNotEmpty = Boolean(this.state.innerValue), + inputEl = void 0; + + cls['mui--is-empty'] = !isNotEmpty; + cls['mui--is-not-empty'] = isNotEmpty; + cls['mui--is-dirty'] = this.state.isDirty; + cls['mui--is-invalid'] = this.props.invalid; + + cls = util.classNames(cls); + + var _props = this.props; + var children = _props.children; + var other = babelHelpers.objectWithoutProperties(_props, ['children']); + + + if (this.props.type === 'textarea') { + inputEl = _react2.default.createElement('textarea', babelHelpers.extends({}, other, { + ref: 'inputEl', + className: cls, + rows: this.props.rows, + placeholder: this.props.hint, + value: this.props.value, + defaultValue: this.props.defaultValue, + autoFocus: this.props.autoFocus, + onChange: this.onChangeCB, + onFocus: this.onFocusCB, + required: this.props.required + })); + } else { + inputEl = _react2.default.createElement('input', babelHelpers.extends({}, other, { + ref: 'inputEl', + className: cls, + type: this.props.type, + value: this.props.value, + defaultValue: this.props.defaultValue, + placeholder: this.props.hint, + autoFocus: this.props.autofocus, + onChange: this.onChangeCB, + onFocus: this.onFocusCB, + required: this.props.required + })); + } + + return inputEl; + } + }]); + return Input; +}(_react2.default.Component); + +/** + * Label constructor + * @class + */ + + +Input.propTypes = { + hint: PropTypes.string, + value: PropTypes.string, + type: PropTypes.string, + autoFocus: PropTypes.bool, + onChange: PropTypes.func +}; +Input.defaultProps = { + hint: null, + type: null, + autoFocus: false, + onChange: null +}; + +var Label = function (_React$Component2) { + babelHelpers.inherits(Label, _React$Component2); + + function Label() { + var _Object$getPrototypeO; + + var _temp, _this2, _ret; + + babelHelpers.classCallCheck(this, Label); + + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + return _ret = (_temp = (_this2 = babelHelpers.possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(Label)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this2), _this2.state = { + style: {} + }, _temp), babelHelpers.possibleConstructorReturn(_this2, _ret); + } + + babelHelpers.createClass(Label, [{ + key: 'componentDidMount', + value: function componentDidMount() { + var _this3 = this; + + this.styleTimer = setTimeout(function () { + var s = '.15s ease-out'; + var style = void 0; + + style = { + transition: s, + WebkitTransition: s, + MozTransition: s, + OTransition: s, + msTransform: s + }; + + _this3.setState({ style: style }); + }, 150); + } + }, { + key: 'componentWillUnmount', + value: function componentWillUnmount() { + // clear timer + clearTimeout(this.styleTimer); + } + }, { + key: 'render', + value: function render() { + return _react2.default.createElement( + 'label', + { + style: this.state.style, + onClick: this.props.onClick + }, + this.props.text + ); + } + }]); + return Label; +}(_react2.default.Component); + +/** + * TextField constructor + * @class + */ + + +Label.defaultProps = { + text: '', + onClick: null +}; + +var TextField = function (_React$Component3) { + babelHelpers.inherits(TextField, _React$Component3); + + function TextField(props) { + babelHelpers.classCallCheck(this, TextField); + + var _this4 = babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(TextField).call(this, props)); + + _this4.onClickCB = util.callback(_this4, 'onClick'); + return _this4; + } + + babelHelpers.createClass(TextField, [{ + key: 'onClick', + value: function onClick(ev) { + // pointer-events shim + if (util.supportsPointerEvents() === false) { + ev.target.style.cursor = 'text'; + this.refs.inputEl.triggerFocus(); + } + } + }, { + key: 'render', + value: function render() { + var cls = {}, + labelEl = void 0; + + if (this.props.label.length) { + labelEl = _react2.default.createElement(Label, { + text: this.props.label, + onClick: this.onClickCB + }); + } + + cls['mui-textfield'] = true; + cls['mui-textfield--float-label'] = this.props.floatingLabel; + cls = util.classNames(cls); + + return _react2.default.createElement( + 'div', + { className: cls }, + _react2.default.createElement(Input, babelHelpers.extends({ ref: 'inputEl' }, this.props)), + labelEl + ); + } + }]); + return TextField; +}(_react2.default.Component); + +/** Define module API */ + + +TextField.propTypes = { + label: PropTypes.string, + floatingLabel: PropTypes.bool +}; +TextField.defaultProps = { + label: '', + floatingLabel: false +}; +exports.TextField = TextField; + +},{"../js/lib/util":5,"./_helpers":6,"react":"CwoHg3"}],11:[function(require,module,exports){ +/** + * MUI React Appbar Module + * @module react/appbar + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +/** + * Appbar constructor + * @class + */ + +var Appbar = function (_React$Component) { + babelHelpers.inherits(Appbar, _React$Component); + + function Appbar() { + babelHelpers.classCallCheck(this, Appbar); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Appbar).apply(this, arguments)); + } + + babelHelpers.createClass(Appbar, [{ + key: 'render', + value: function render() { + return _react2.default.createElement( + 'div', + babelHelpers.extends({}, this.props, { + className: 'mui-appbar ' + this.props.className + }), + this.props.children + ); + } + }]); + return Appbar; +}(_react2.default.Component); + +/** Define module API */ + + +Appbar.defaultProps = { + className: '' +}; +exports.default = Appbar; +module.exports = exports['default']; + +},{"react":"CwoHg3"}],12:[function(require,module,exports){ +module.exports=require(7) +},{"../js/lib/jqLite":4,"../js/lib/util":5,"react":"CwoHg3"}],13:[function(require,module,exports){ +module.exports=require(8) +},{"react":"CwoHg3"}],14:[function(require,module,exports){ +/** + * MUI React checkbox module + * @module react/checkbox + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var _util = require('../js/lib/util'); + +var util = babelHelpers.interopRequireWildcard(_util); + +var _helpers = require('./_helpers'); + +var PropTypes = _react2.default.PropTypes; + +/** + * Checkbox constructor + * @class + */ + +var Checkbox = function (_React$Component) { + babelHelpers.inherits(Checkbox, _React$Component); + + function Checkbox() { + babelHelpers.classCallCheck(this, Checkbox); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Checkbox).apply(this, arguments)); + } + + babelHelpers.createClass(Checkbox, [{ + key: 'render', + value: function render() { + var _props = this.props; + var children = _props.children; + var onChange = _props.onChange; + var other = babelHelpers.objectWithoutProperties(_props, ['children', 'onChange']); + + + return _react2.default.createElement( + 'div', + babelHelpers.extends({}, other, { + className: 'mui-checkbox ' + this.props.className + }), + _react2.default.createElement( + 'label', + null, + _react2.default.createElement('input', { + ref: 'inputEl', + type: 'checkbox', + name: this.props.name, + value: this.props.value, + checked: this.props.checked, + defaultChecked: this.props.defaultChecked, + disabled: this.props.disabled, + onChange: this.props.onChange + }), + this.props.label + ) + ); + } + }]); + return Checkbox; +}(_react2.default.Component); + +/** Define module API */ + + +Checkbox.propTypes = { + name: PropTypes.string, + label: PropTypes.string, + value: PropTypes.string, + checked: PropTypes.bool, + defaultChecked: PropTypes.bool, + disabled: PropTypes.bool, + onChange: PropTypes.func +}; +Checkbox.defaultProps = { + className: '', + name: null, + label: null, + disabled: false, + onChange: null +}; +exports.default = Checkbox; +module.exports = exports['default']; + +},{"../js/lib/util":5,"./_helpers":6,"react":"CwoHg3"}],15:[function(require,module,exports){ +/** + * MUI React Col Component + * @module react/col + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var _util = require('../js/lib/util'); + +var util = babelHelpers.interopRequireWildcard(_util); + + +var breakpoints = ['xs', 'sm', 'md', 'lg', 'xl']; + +/** + * Col constructor + * @class + */ + +var Col = function (_React$Component) { + babelHelpers.inherits(Col, _React$Component); + + function Col() { + babelHelpers.classCallCheck(this, Col); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Col).apply(this, arguments)); + } + + babelHelpers.createClass(Col, [{ + key: 'defaultProps', + value: function defaultProps() { + var props = { className: '' }, + i = void 0, + v = void 0; + + // add {breakpoint}, {breakpoint}-offset to props + for (i = breakpoints.length - 1; i > -1; i--) { + v = breakpoints[i]; + props[v] = null; + props[v + '-offset'] = null; + } + + return props; + } + }, { + key: 'render', + value: function render() { + var cls = {}, + i = void 0, + bk = void 0, + val = void 0, + baseCls = void 0; + + // add mui-col classes + for (i = breakpoints.length - 1; i > -1; i--) { + bk = breakpoints[i]; + baseCls = 'mui-col-' + bk; + + // add mui-col-{bk}-{val} + val = this.props[bk]; + if (val) cls[baseCls + '-' + val] = true; + + // add mui-col-{bk}-offset-{val} + val = this.props[bk + '-offset']; + if (val) cls[baseCls + '-offset-' + val] = true; + } + + cls = util.classNames(cls); + + return _react2.default.createElement( + 'div', + babelHelpers.extends({}, this.props, { + className: cls + ' ' + this.props.className + }), + this.props.children + ); + } + }]); + return Col; +}(_react2.default.Component); + +/** Define module API */ + + +exports.default = Col; +module.exports = exports['default']; + +},{"../js/lib/util":5,"react":"CwoHg3"}],16:[function(require,module,exports){ +/** + * MUI React container module + * @module react/container + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +/** + * Container constructor + * @class + */ + +var Container = function (_React$Component) { + babelHelpers.inherits(Container, _React$Component); + + function Container() { + babelHelpers.classCallCheck(this, Container); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Container).apply(this, arguments)); + } + + babelHelpers.createClass(Container, [{ + key: 'render', + value: function render() { + var cls = 'mui-container'; + + // fluid containers + if (this.props.fluid) cls += '-fluid'; + + return _react2.default.createElement( + 'div', + babelHelpers.extends({}, this.props, { + className: cls + ' ' + this.props.className + }), + this.props.children + ); + } + }]); + return Container; +}(_react2.default.Component); + +/** Define module API */ + + +Container.propTypes = { + fluid: _react2.default.PropTypes.bool +}; +Container.defaultProps = { + className: '', + fluid: false +}; +exports.default = Container; +module.exports = exports['default']; + +},{"react":"CwoHg3"}],17:[function(require,module,exports){ +/** + * MUI React divider module + * @module react/divider + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +/** + * Divider constructor + * @class + */ + +var Divider = function (_React$Component) { + babelHelpers.inherits(Divider, _React$Component); + + function Divider() { + babelHelpers.classCallCheck(this, Divider); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Divider).apply(this, arguments)); + } + + babelHelpers.createClass(Divider, [{ + key: 'render', + value: function render() { + var _props = this.props; + var children = _props.children; + var other = babelHelpers.objectWithoutProperties(_props, ['children']); + + + return _react2.default.createElement('div', babelHelpers.extends({}, other, { + className: 'mui-divider ' + this.props.className + })); + } + }]); + return Divider; +}(_react2.default.Component); + +/** Define module API */ + + +Divider.defaultProps = { + className: '' +}; +exports.default = Divider; +module.exports = exports['default']; + +},{"react":"CwoHg3"}],18:[function(require,module,exports){ +/** + * MUI React dropdowns module + * @module react/dropdowns + */ +/* jshint quotmark:false */ +// jscs:disable validateQuoteMarks + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var _util = require('../js/lib/util'); + +var util = babelHelpers.interopRequireWildcard(_util); + + +var PropTypes = _react2.default.PropTypes; + +/** + * DropdownItem constructor + * @class + */ + +var DropdownItem = function (_React$Component) { + babelHelpers.inherits(DropdownItem, _React$Component); + + function DropdownItem(props) { + babelHelpers.classCallCheck(this, DropdownItem); + + var _this = babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(DropdownItem).call(this, props)); + + _this.onClickCB = util.callback(_this, 'onClick'); + return _this; + } + + babelHelpers.createClass(DropdownItem, [{ + key: 'onClick', + value: function onClick(ev) { + if (this.props.onClick) this.props.onClick(this, ev); + } + }, { + key: 'render', + value: function render() { + var _props = this.props; + var children = _props.children; + var onClick = _props.onClick; + var other = babelHelpers.objectWithoutProperties(_props, ['children', 'onClick']); + + + return _react2.default.createElement( + 'li', + other, + _react2.default.createElement( + 'a', + { + href: this.props.link, + target: this.props.target, + 'data-mui-value': this.props.value, + onClick: this.onClickCB + }, + children + ) + ); + } + }]); + return DropdownItem; +}(_react2.default.Component); + +/** Define module API */ + + +DropdownItem.propTypes = { + link: PropTypes.string, + target: PropTypes.string, + onClick: PropTypes.func +}; +exports.default = DropdownItem; +module.exports = exports['default']; + +},{"../js/lib/util":5,"react":"CwoHg3"}],19:[function(require,module,exports){ +/** + * MUI React dropdowns module + * @module react/dropdowns + */ +/* jshint quotmark:false */ +// jscs:disable validateQuoteMarks + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var _button = require('./button'); + +var _button2 = babelHelpers.interopRequireDefault(_button); + +var _caret = require('./caret'); + +var _caret2 = babelHelpers.interopRequireDefault(_caret); + +var _jqLite = require('../js/lib/jqLite'); + +var jqLite = babelHelpers.interopRequireWildcard(_jqLite); + +var _util = require('../js/lib/util'); + +var util = babelHelpers.interopRequireWildcard(_util); + + +var PropTypes = _react2.default.PropTypes, + dropdownClass = 'mui-dropdown', + menuClass = 'mui-dropdown__menu', + openClass = 'mui--is-open', + rightClass = 'mui-dropdown__menu--right'; + +/** + * Dropdown constructor + * @class + */ + +var Dropdown = function (_React$Component) { + babelHelpers.inherits(Dropdown, _React$Component); + + function Dropdown(props) { + babelHelpers.classCallCheck(this, Dropdown); + + var _this = babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Dropdown).call(this, props)); + + _this.state = { + opened: false, + menuTop: 0 + }; + + var cb = util.callback; + _this.selectCB = cb(_this, 'select'); + _this.onClickCB = cb(_this, 'onClick'); + _this.onOutsideClickCB = cb(_this, 'onOutsideClick'); + return _this; + } + + babelHelpers.createClass(Dropdown, [{ + key: 'componentWillMount', + value: function componentWillMount() { + document.addEventListener('click', this.onOutsideClickCB); + } + }, { + key: 'componentWillUnmount', + value: function componentWillUnmount() { + document.removeEventListener('click', this.onOutsideClickCB); + } + }, { + key: 'onClick', + value: function onClick(ev) { + // only left clicks + if (ev.button !== 0) return; + + // exit if toggle button is disabled + if (this.props.disabled) return; + + if (!ev.defaultPrevented) { + this.toggle(); + + // execute onClick method + var onClickFn = this.props.onClick; + onClickFn && onClickFn(ev); + } + } + }, { + key: 'toggle', + value: function toggle() { + // exit if no menu element + if (!this.props.children) { + return util.raiseError('Dropdown menu element not found'); + } + + if (this.state.opened) this.close();else this.open(); + } + }, { + key: 'open', + value: function open() { + // position menu element below toggle button + var wrapperRect = this.refs.wrapperEl.getBoundingClientRect(), + toggleRect = void 0; + + toggleRect = this.refs.button.refs.buttonEl.getBoundingClientRect(); + + this.setState({ + opened: true, + menuTop: toggleRect.top - wrapperRect.top + toggleRect.height + }); + } + }, { + key: 'close', + value: function close() { + this.setState({ opened: false }); + } + }, { + key: 'select', + value: function select(ev) { + // onSelect callback + if (this.props.onSelect && ev.target.tagName === 'A') { + this.props.onSelect(ev.target.getAttribute('data-mui-value')); + } + + // close menu + if (!ev.defaultPrevented) this.close(); + } + }, { + key: 'onOutsideClick', + value: function onOutsideClick(ev) { + var isClickInside = this.refs.wrapperEl.contains(ev.target); + if (!isClickInside) this.close(); + } + }, { + key: 'render', + value: function render() { + var buttonEl = void 0, + menuEl = void 0, + labelEl = void 0; + + // build label + if (jqLite.type(this.props.label) === 'string') { + labelEl = _react2.default.createElement( + 'span', + null, + this.props.label, + ' ', + _react2.default.createElement(_caret2.default, null) + ); + } else { + labelEl = this.props.label; + } + + buttonEl = _react2.default.createElement( + _button2.default, + { + ref: 'button', + type: 'button', + onClick: this.onClickCB, + color: this.props.color, + variant: this.props.variant, + size: this.props.size, + disabled: this.props.disabled + }, + labelEl + ); + + if (this.state.opened) { + var cs = {}; + + cs[menuClass] = true; + cs[openClass] = this.state.opened; + cs[rightClass] = this.props.alignMenu === 'right'; + cs = util.classNames(cs); + + menuEl = _react2.default.createElement( + 'ul', + { + ref: 'menuEl', + className: cs, + style: { top: this.state.menuTop }, + onClick: this.selectCB + }, + this.props.children + ); + } + + var _props = this.props; + var className = _props.className; + var children = _props.children; + var onClick = _props.onClick; + var other = babelHelpers.objectWithoutProperties(_props, ['className', 'children', 'onClick']); + + + return _react2.default.createElement( + 'div', + babelHelpers.extends({}, other, { + ref: 'wrapperEl', + className: dropdownClass + ' ' + className + }), + buttonEl, + menuEl + ); + } + }]); + return Dropdown; +}(_react2.default.Component); + +/** Define module API */ + + +Dropdown.propTypes = { + color: PropTypes.oneOf(['default', 'primary', 'danger', 'dark', 'accent']), + variant: PropTypes.oneOf(['default', 'flat', 'raised', 'fab']), + size: PropTypes.oneOf(['default', 'small', 'large']), + label: PropTypes.oneOfType([PropTypes.string, PropTypes.element]), + alignMenu: PropTypes.oneOf(['left', 'right']), + onClick: PropTypes.func, + onSelect: PropTypes.func, + disabled: PropTypes.bool +}; +Dropdown.defaultProps = { + className: '', + color: 'default', + variant: 'default', + size: 'default', + label: '', + alignMenu: 'left', + onClick: null, + onSelect: null, + disabled: false +}; +exports.default = Dropdown; +module.exports = exports['default']; + +},{"../js/lib/jqLite":4,"../js/lib/util":5,"./button":7,"./caret":8,"react":"CwoHg3"}],20:[function(require,module,exports){ +/** + * MUI React form module + * @module react/form + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +/** + * Form constructor + * @class + */ + +var Form = function (_React$Component) { + babelHelpers.inherits(Form, _React$Component); + + function Form() { + babelHelpers.classCallCheck(this, Form); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Form).apply(this, arguments)); + } + + babelHelpers.createClass(Form, [{ + key: 'render', + value: function render() { + var cls = ''; + + // inline form + if (this.props.inline) cls = 'mui-form--inline'; + + return _react2.default.createElement( + 'form', + babelHelpers.extends({}, this.props, { + className: cls + ' ' + this.props.className + }), + this.props.children + ); + } + }]); + return Form; +}(_react2.default.Component); + +/** Define module API */ + + +Form.propTypes = { + inline: _react2.default.PropTypes.bool +}; +Form.defaultProps = { + className: '', + inline: false +}; +exports.default = Form; +module.exports = exports['default']; + +},{"react":"CwoHg3"}],21:[function(require,module,exports){ +/** + * MUI React Input Component + * @module react/input + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var _textField = require('./text-field'); + +var PropTypes = _react2.default.PropTypes; + +/** + * Input constructor + * @class + */ + +var Input = function (_React$Component) { + babelHelpers.inherits(Input, _React$Component); + + function Input() { + babelHelpers.classCallCheck(this, Input); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Input).apply(this, arguments)); + } + + babelHelpers.createClass(Input, [{ + key: 'render', + value: function render() { + return _react2.default.createElement(_textField.TextField, this.props); + } + }]); + return Input; +}(_react2.default.Component); + +Input.propTypes = { + type: PropTypes.oneOf(['text', 'email', 'url', 'tel', 'password']) +}; +Input.defaultProps = { + type: 'text' +}; +exports.default = Input; +module.exports = exports['default']; + +},{"./text-field":10,"react":"CwoHg3"}],22:[function(require,module,exports){ +/** + * MUI React options module + * @module react/option + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var _forms = require('../js/lib/forms'); + +var formlib = babelHelpers.interopRequireWildcard(_forms); + +var _jqLite = require('../js/lib/jqLite'); + +var jqLite = babelHelpers.interopRequireWildcard(_jqLite); + +var _util = require('../js/lib/util'); + +var util = babelHelpers.interopRequireWildcard(_util); + + +var PropTypes = _react2.default.PropTypes; + +/** + * Option constructor + * @class + */ + +var Option = function (_React$Component) { + babelHelpers.inherits(Option, _React$Component); + + function Option() { + babelHelpers.classCallCheck(this, Option); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Option).apply(this, arguments)); + } + + babelHelpers.createClass(Option, [{ + key: 'render', + value: function render() { + var _props = this.props; + var children = _props.children; + var other = babelHelpers.objectWithoutProperties(_props, ['children']); + + + return _react2.default.createElement( + 'option', + babelHelpers.extends({}, other, { value: this.props.value }), + this.props.label + ); + } + }]); + return Option; +}(_react2.default.Component); + +/** Define module API */ + + +Option.propTypes = { + value: PropTypes.string, + label: PropTypes.string +}; +Option.defaultProps = { + value: null, + label: null +}; +exports.default = Option; +module.exports = exports['default']; + +},{"../js/lib/forms":3,"../js/lib/jqLite":4,"../js/lib/util":5,"react":"CwoHg3"}],23:[function(require,module,exports){ +/** + * MUI React layout module + * @module react/layout + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +/** + * Panel constructor + * @class + */ + +var Panel = function (_React$Component) { + babelHelpers.inherits(Panel, _React$Component); + + function Panel() { + babelHelpers.classCallCheck(this, Panel); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Panel).apply(this, arguments)); + } + + babelHelpers.createClass(Panel, [{ + key: 'render', + value: function render() { + return _react2.default.createElement( + 'div', + babelHelpers.extends({}, this.props, { + className: 'mui-panel ' + this.props.className + }), + this.props.children + ); + } + }]); + return Panel; +}(_react2.default.Component); + +/** Define module API */ + + +Panel.defaultProps = { + className: '' +}; +exports.default = Panel; +module.exports = exports['default']; + +},{"react":"CwoHg3"}],24:[function(require,module,exports){ +/** + * MUI React radio module + * @module react/radio + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var PropTypes = _react2.default.PropTypes; + +/** + * Radio constructor + * @class + */ + +var Radio = function (_React$Component) { + babelHelpers.inherits(Radio, _React$Component); + + function Radio() { + babelHelpers.classCallCheck(this, Radio); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Radio).apply(this, arguments)); + } + + babelHelpers.createClass(Radio, [{ + key: 'render', + value: function render() { + var _props = this.props; + var children = _props.children; + var onChange = _props.onChange; + var other = babelHelpers.objectWithoutProperties(_props, ['children', 'onChange']); + + + return _react2.default.createElement( + 'div', + babelHelpers.extends({}, other, { + className: 'mui-radio ' + this.props.className + }), + _react2.default.createElement( + 'label', + null, + _react2.default.createElement('input', { + ref: 'inputEl', + type: 'radio', + name: this.props.name, + value: this.props.value, + checked: this.props.checked, + defaultChecked: this.props.defaultChecked, + disabled: this.props.disabled, + onChange: this.props.onChange + }), + this.props.label + ) + ); + } + }]); + return Radio; +}(_react2.default.Component); + +/** Define module API */ + + +Radio.propTypes = { + name: PropTypes.string, + label: PropTypes.string, + value: PropTypes.string, + checked: PropTypes.bool, + defaultChecked: PropTypes.bool, + disabled: PropTypes.bool, + onChange: PropTypes.func +}; +Radio.defaultProps = { + className: '', + name: null, + label: null, + disabled: false, + onChange: null +}; +exports.default = Radio; +module.exports = exports['default']; + +},{"react":"CwoHg3"}],25:[function(require,module,exports){ +/** + * MUI React Row Component + * @module react/row + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var _util = require('../js/lib/util'); + +var util = babelHelpers.interopRequireWildcard(_util); + + +var breakpoints = ['xs', 'sm', 'md', 'lg']; + +/** + * Row constructor + * @class + */ + +var Row = function (_React$Component) { + babelHelpers.inherits(Row, _React$Component); + + function Row() { + babelHelpers.classCallCheck(this, Row); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Row).apply(this, arguments)); + } + + babelHelpers.createClass(Row, [{ + key: 'render', + value: function render() { + return _react2.default.createElement( + 'div', + babelHelpers.extends({}, this.props, { + className: 'mui-row ' + this.props.className + }), + this.props.children + ); + } + }]); + return Row; +}(_react2.default.Component); + +/** Define module API */ + + +Row.defaultProps = { + className: '' +}; +exports.default = Row; +module.exports = exports['default']; + +},{"../js/lib/util":5,"react":"CwoHg3"}],26:[function(require,module,exports){ +/** + * MUI React select module + * @module react/select + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var _forms = require('../js/lib/forms'); + +var formlib = babelHelpers.interopRequireWildcard(_forms); + +var _jqLite = require('../js/lib/jqLite'); + +var jqLite = babelHelpers.interopRequireWildcard(_jqLite); + +var _util = require('../js/lib/util'); + +var util = babelHelpers.interopRequireWildcard(_util); + +var _helpers = require('./_helpers'); + +var PropTypes = _react2.default.PropTypes; + +/** + * Select constructor + * @class + */ + +var Select = function (_React$Component) { + babelHelpers.inherits(Select, _React$Component); + + function Select(props) { + babelHelpers.classCallCheck(this, Select); + + + // warn if value defined but onChange is not + + var _this = babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Select).call(this, props)); + + _this.state = { + showMenu: false + }; + if (props.readOnly === false && props.value !== undefined && props.onChange === null) { + util.raiseError(_helpers.controlledMessage, true); + } + + _this.state.value = props.value; + + // bind callback function + var cb = util.callback; + _this.hideMenuCB = cb(_this, 'hideMenu'); + _this.onInnerChangeCB = cb(_this, 'onInnerChange'); + _this.onInnerClickCB = cb(_this, 'onInnerClick'); + _this.onInnerFocusCB = cb(_this, 'onInnerFocus'); + _this.onInnerMouseDownCB = cb(_this, 'onInnerMouseDown'); + _this.onKeydownCB = cb(_this, 'onKeydown'); + _this.onMenuChangeCB = cb(_this, 'onMenuChange'); + _this.onOuterFocusCB = cb(_this, 'onOuterFocus'); + _this.onOuterBlurCB = cb(_this, 'onOuterBlur'); + return _this; + } + + babelHelpers.createClass(Select, [{ + key: 'componentDidMount', + value: function componentDidMount() { + // disable MUI js + this.refs.selectEl._muiSelect = true; + + // make wrapper element focusable (to enable Firefox bugfix) + this.refs.wrapperEl.tabIndex = -1; + + // handle autofocus + if (this.props.autoFocus) this.refs.wrapperEl.focus(); + } + }, { + key: 'componentWillReceiveProps', + value: function componentWillReceiveProps(nextProps) { + this.setState({ value: nextProps.value }); + } + }, { + key: 'onInnerMouseDown', + value: function onInnerMouseDown(ev) { + if (ev.button !== 0 || this.props.useDefault === true) return; + ev.preventDefault(); + } + }, { + key: 'onInnerChange', + value: function onInnerChange(ev) { + var value = ev.target.value; + this.setState({ value: value }); + + var fn = this.props.onChange; + if (fn) fn(value); + } + }, { + key: 'onInnerClick', + value: function onInnerClick(ev) { + if (ev.button !== 0) return; // only left clicks + this.showMenu(); + } + }, { + key: 'onInnerFocus', + value: function onInnerFocus(ev) { + var _this2 = this; + + // check flag + if (this.props.useDefault === true) return; + + // defer focus to parent + setTimeout(function () { + _this2.refs.wrapperEl.focus(); + }, 0); + } + }, { + key: 'onOuterFocus', + value: function onOuterFocus(ev) { + // ignore focus on inner element (react artifact) + if (ev.target !== this.refs.wrapperEl) return; + + // disable tabfocus on inner element + var selectEl = this.refs.selectEl; + selectEl._muiOrigIndex = selectEl.tabIndex; + selectEl.tabIndex = -1; + + // firefox bugfix + if (selectEl.disabled) return this.refs.wrapperEl.blur(); + + // attach keydown handler + jqLite.on(document, 'keydown', this.onKeydownCB); + } + }, { + key: 'onOuterBlur', + value: function onOuterBlur(ev) { + // ignore blur on inner element + if (ev.target !== this.refs.wrapperEl) return; + + // restore tab focus on inner element + var selectEl = this.refs.selectEl; + selectEl.tabIndex = selectEl._muiOrigIndex; + + // remove keydown handler + jqLite.off(document, 'keydown', this.onKeydownCB); + } + }, { + key: 'onKeydown', + value: function onKeydown(ev) { + // spacebar, down, up + if (ev.keyCode === 32 || ev.keyCode === 38 || ev.keyCode === 40) { + // prevent win scroll + ev.preventDefault(); + + if (this.refs.selectEl.disabled !== true) this.showMenu(); + } + } + }, { + key: 'showMenu', + value: function showMenu() { + // check useDefault flag + if (this.props.useDefault === true) return; + + // add scroll lock + util.enableScrollLock(); + + // add event listeners + jqLite.on(window, 'resize', this.hideMenuCB); + jqLite.on(document, 'click', this.hideMenuCB); + + // re-draw + this.setState({ showMenu: true }); + } + }, { + key: 'hideMenu', + value: function hideMenu() { + // remove scroll lock + util.disableScrollLock(); + + // remove event listeners + jqLite.off(window, 'resize', this.hideMenuCB); + jqLite.off(document, 'click', this.hideMenuCB); + + // re-draw + this.setState({ showMenu: false }); + + // refocus + this.refs.selectEl.focus(); + } + }, { + key: 'onMenuChange', + value: function onMenuChange(value) { + if (this.props.readOnly === true) return; + + this.setState({ value: value }); + + // execute onChange method + var fn = this.props.onChange; + if (fn) fn(value); + } + }, { + key: 'render', + value: function render() { + var menuElem = void 0; + + if (this.state.showMenu) { + menuElem = _react2.default.createElement(Menu, { + optionEls: this.refs.selectEl.children, + wrapperEl: this.refs.wrapperEl, + onChange: this.onMenuChangeCB, + onClose: this.hideMenuCB + }); + } + + var _props = this.props; + var children = _props.children; + var onChange = _props.onChange; + var other = babelHelpers.objectWithoutProperties(_props, ['children', 'onChange']); + + + return _react2.default.createElement( + 'div', + babelHelpers.extends({}, other, { + ref: 'wrapperEl', + className: 'mui-select ' + this.props.className, + onFocus: this.onOuterFocusCB, + onBlur: this.onOuterBlurCB + }), + _react2.default.createElement( + 'select', + { + ref: 'selectEl', + name: this.props.name, + value: this.state.value, + defaultValue: this.props.defaultValue, + disabled: this.props.disabled, + multiple: this.props.multiple, + readOnly: this.props.readOnly, + required: this.props.required, + onChange: this.onInnerChangeCB, + onMouseDown: this.onInnerMouseDownCB, + onClick: this.onInnerClickCB, + onFocus: this.onInnerFocusCB + }, + this.props.children + ), + menuElem + ); + } + }]); + return Select; +}(_react2.default.Component); + +/** + * Menu constructor + * @class + */ + + +Select.propTypes = { + name: PropTypes.string, + value: PropTypes.string, + defaultValue: PropTypes.string, + autoFocus: PropTypes.bool, + disabled: PropTypes.bool, + multiple: PropTypes.bool, + readOnly: PropTypes.bool, + required: PropTypes.bool, + useDefault: PropTypes.bool, + onChange: PropTypes.func +}; +Select.defaultProps = { + className: '', + name: null, + autoFocus: false, + disabled: false, + multiple: false, + readOnly: false, + required: false, + useDefault: false, + onChange: null +}; + +var Menu = function (_React$Component2) { + babelHelpers.inherits(Menu, _React$Component2); + + function Menu(props) { + babelHelpers.classCallCheck(this, Menu); + + var _this3 = babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Menu).call(this, props)); + + _this3.state = { + origIndex: null, + currentIndex: null + }; + + + _this3.onKeydownCB = util.callback(_this3, 'onKeydown'); + return _this3; + } + + babelHelpers.createClass(Menu, [{ + key: 'componentWillMount', + value: function componentWillMount() { + var optionEls = this.props.optionEls, + m = optionEls.length, + selectedPos = 0, + i = void 0; + + // get current selected position + for (i = m - 1; i > -1; i--) { + if (optionEls[i].selected) selectedPos = i; + }this.setState({ origIndex: selectedPos, currentIndex: selectedPos }); + } + }, { + key: 'componentDidMount', + value: function componentDidMount() { + // blur active element (IE10 bugfix) + this.blurTimer = setTimeout(function () { + var el = document.activeElement; + if (el.nodeName.toLowerCase() !== 'body') el.blur(); + }, 0); + + // set position + var props = formlib.getMenuPositionalCSS(this.props.wrapperEl, this.props.optionEls.length, this.state.currentIndex); + + var el = this.refs.wrapperEl; + jqLite.css(el, props); + jqLite.scrollTop(el, props.scrollTop); + + // attach keydown handler + jqLite.on(document, 'keydown', this.onKeydownCB); + } + }, { + key: 'componentWillUnmount', + value: function componentWillUnmount() { + // clear timer + clearTimeout(this.blurTimer); + + // remove keydown handler + jqLite.off(document, 'keydown', this.onKeydownCB); + } + }, { + key: 'onClick', + value: function onClick(pos, ev) { + // don't allow events to bubble + ev.stopPropagation(); + this.selectAndDestroy(pos); + } + }, { + key: 'onKeydown', + value: function onKeydown(ev) { + var keyCode = ev.keyCode; + + // tab + if (keyCode === 9) return this.destroy(); + + // escape | up | down | enter + if (keyCode === 27 || keyCode === 40 || keyCode === 38 || keyCode === 13) { + ev.preventDefault(); + } + + if (keyCode === 27) this.destroy();else if (keyCode === 40) this.increment();else if (keyCode === 38) this.decrement();else if (keyCode === 13) this.selectAndDestroy(); + } + }, { + key: 'increment', + value: function increment() { + if (this.state.currentIndex === this.props.optionEls.length - 1) { + return; + } + + this.setState({ currentIndex: this.state.currentIndex + 1 }); + } + }, { + key: 'decrement', + value: function decrement() { + if (this.state.currentIndex === 0) return; + this.setState({ currentIndex: this.state.currentIndex - 1 }); + } + }, { + key: 'selectAndDestroy', + value: function selectAndDestroy(pos) { + pos = pos === undefined ? this.state.currentIndex : pos; + + // handle onChange + if (pos !== this.state.origIndex) { + this.props.onChange(this.props.optionEls[pos].value); + } + + // close menu + this.destroy(); + } + }, { + key: 'destroy', + value: function destroy() { + this.props.onClose(); + } + }, { + key: 'render', + value: function render() { + var menuItems = [], + optionEls = this.props.optionEls, + m = optionEls.length, + optionEl = void 0, + cls = void 0, + i = void 0; + + // define menu items + for (i = 0; i < m; i++) { + cls = i === this.state.currentIndex ? 'mui--is-selected' : ''; + + menuItems.push(_react2.default.createElement( + 'div', + { + key: i, + className: cls, + onClick: this.onClick.bind(this, i) + }, + optionEls[i].textContent + )); + } + + return _react2.default.createElement( + 'div', + { ref: 'wrapperEl', className: 'mui-select__menu' }, + menuItems + ); + } + }]); + return Menu; +}(_react2.default.Component); + +/** Define module API */ + + +Menu.defaultProps = { + optionEls: [], + wrapperEl: null, + onChange: null, + onClose: null +}; +exports.default = Select; +module.exports = exports['default']; + +},{"../js/lib/forms":3,"../js/lib/jqLite":4,"../js/lib/util":5,"./_helpers":6,"react":"CwoHg3"}],27:[function(require,module,exports){ +module.exports=require(9) +},{"react":"CwoHg3"}],28:[function(require,module,exports){ +/** + * MUI React tabs module + * @module react/tabs + */ +/* jshint quotmark:false */ +// jscs:disable validateQuoteMarks + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var _tab = require('./tab'); + +var _tab2 = babelHelpers.interopRequireDefault(_tab); + +var _util = require('../js/lib/util'); + +var util = babelHelpers.interopRequireWildcard(_util); + + +var PropTypes = _react2.default.PropTypes, + tabsBarClass = 'mui-tabs__bar', + tabsBarJustifiedClass = 'mui-tabs__bar--justified', + tabsPaneClass = 'mui-tabs__pane', + isActiveClass = 'mui--is-active'; + +/** + * Tabs constructor + * @class + */ + +var Tabs = function (_React$Component) { + babelHelpers.inherits(Tabs, _React$Component); + + function Tabs(props) { + babelHelpers.classCallCheck(this, Tabs); + + var _this = babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Tabs).call(this, props)); + + _this.state = { currentSelectedIndex: props.initialSelectedIndex }; + return _this; + } + + babelHelpers.createClass(Tabs, [{ + key: 'onClick', + value: function onClick(i, tab, ev) { + if (i !== this.state.currentSelectedIndex) { + this.setState({ currentSelectedIndex: i }); + + // onActive callback + if (tab.props.onActive) tab.props.onActive(tab); + + // onChange callback + if (this.props.onChange) { + this.props.onChange(i, tab.props.value, tab, ev); + } + } + } + }, { + key: 'render', + value: function render() { + var _props = this.props; + var children = _props.children; + var other = babelHelpers.objectWithoutProperties(_props, ['children']); + + + var tabEls = [], + paneEls = [], + m = children.length, + selectedIndex = this.state.currentSelectedIndex % m, + isActive = void 0, + item = void 0, + cls = void 0, + i = void 0; + + for (i = 0; i < m; i++) { + item = children[i]; + + // only accept MUITab elements + if (item.type !== _tab2.default) util.raiseError('Expecting MUITab React Element'); + + isActive = i === selectedIndex ? true : false; + + // tab element + tabEls.push(_react2.default.createElement( + 'li', + { key: i, className: isActive ? isActiveClass : '' }, + _react2.default.createElement( + 'a', + { onClick: this.onClick.bind(this, i, item) }, + item.props.label + ) + )); + + // pane element + cls = tabsPaneClass + ' '; + if (isActive) cls += isActiveClass; + + paneEls.push(_react2.default.createElement( + 'div', + { key: i, className: cls }, + item.props.children + )); + } + + cls = tabsBarClass; + if (this.props.justified) cls += ' ' + tabsBarJustifiedClass; + + return _react2.default.createElement( + 'div', + other, + _react2.default.createElement( + 'ul', + { className: cls }, + tabEls + ), + paneEls + ); + } + }]); + return Tabs; +}(_react2.default.Component); + +/** Define module API */ + + +Tabs.propTypes = { + initialSelectedIndex: PropTypes.number, + justified: PropTypes.bool, + onChange: PropTypes.func +}; +Tabs.defaultProps = { + className: '', + initialSelectedIndex: 0, + justified: false, + onChange: null +}; +exports.default = Tabs; +module.exports = exports['default']; + +},{"../js/lib/util":5,"./tab":9,"react":"CwoHg3"}],29:[function(require,module,exports){ +/** + * MUI React Textarea Component + * @module react/textarea + */ + +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = window.React; + +var _react2 = babelHelpers.interopRequireDefault(_react); + +var _textField = require('./text-field'); + +var PropTypes = _react2.default.PropTypes; + +/** + * Textarea constructor + * @class + */ + +var Textarea = function (_React$Component) { + babelHelpers.inherits(Textarea, _React$Component); + + function Textarea() { + babelHelpers.classCallCheck(this, Textarea); + return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(Textarea).apply(this, arguments)); + } + + babelHelpers.createClass(Textarea, [{ + key: 'render', + value: function render() { + return _react2.default.createElement(_textField.TextField, this.props); + } + }]); + return Textarea; +}(_react2.default.Component); + +Textarea.propTypes = { + rows: PropTypes.number +}; +Textarea.defaultProps = { + type: 'textarea', + rows: 2 +}; +exports.default = Textarea; +module.exports = exports['default']; + +},{"./text-field":10,"react":"CwoHg3"}]},{},[1]) \ No newline at end of file diff --git a/www/libs/mui/packages/cdn/react/mui-react.min.js b/www/libs/mui/packages/cdn/react/mui-react.min.js new file mode 100644 index 0000000..0eb3f23 --- /dev/null +++ b/www/libs/mui/packages/cdn/react/mui-react.min.js @@ -0,0 +1,2 @@ +!function(e){var t=e.babelHelpers={};t.classCallCheck=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},t.createClass=function(){function e(e,t){for(var r=0;r=0||Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=e[n]);return r},t.possibleConstructorReturn=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}}("undefined"==typeof global?self:global),function e(t,r,n){function l(o,a){if(!r[o]){if(!t[o]){var i="function"==typeof require&&require;if(!a&&i)return i(o,!0);if(s)return s(o,!0);throw new Error("Cannot find module '"+o+"'")}var u=r[o]={exports:{}};t[o][0].call(u.exports,function(e){var r=t[o][1][e];return l(r?r:e)},u,u.exports,e,t,r,n)}return r[o].exports}for(var s="function"==typeof require&&require,o=0;op&&(b=a+(r+1)*o-(-1*n+l+s),h=t*o+2*a-f,v=Math.min(b,h)),{height:f+"px",top:n+"px",scrollTop:v}}var l=15,s=32,o=42,a=8;t.exports={getMenuPositionalCSS:n}},{}],4:[function(e,t,r){"use strict";function n(e,t){if(t&&e.setAttribute){for(var r,n=h(e),l=t.split(" "),s=0;s-1:!1}function o(e){if(void 0===e)return"undefined";var t=Object.prototype.toString.call(e);if(0===t.indexOf("[object "))return t.slice(8,-1).toLowerCase();throw new Error("MUI: Could not understand type: "+t)}function a(e,t,r,n){n=void 0===n?!1:n,e.addEventListener(t,r,n);var l=e._muiEventCache=e._muiEventCache||{};l[t]=l[t]||[],l[t].push([r,n])}function i(e,t,r,n){n=void 0===n?!1:n;var l,s,o=e._muiEventCache=e._muiEventCache||{},a=o[t]||[];for(s=a.length;s--;)l=a[s],(void 0===r||l[0]===r&&l[1]===n)&&(a.splice(s,1),e.removeEventListener(t,l[0],l[1]))}function u(e,t,r,n){a(e,t,function l(n){r&&r.apply(this,arguments),i(e,t,l)},n)}function c(e,t){var r=window;if(void 0===t){if(e===r){var n=document.documentElement;return(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}return e.scrollLeft}e===r?r.scrollTo(t,p(r)):e.scrollLeft=t}function p(e,t){var r=window;if(void 0===t){if(e===r){var n=document.documentElement;return(r.pageYOffset||n.scrollTop)-(n.clientTop||0)}return e.scrollTop}e===r?r.scrollTo(c(r),t):e.scrollTop=t}function d(e){var t=window,r=e.getBoundingClientRect(),n=p(t),l=c(t);return{top:r.top+n,left:r.left+l,height:r.height,width:r.width}}function f(e){var t=!1,r=!0,n=document,l=n.defaultView,s=n.documentElement,o=n.addEventListener?"addEventListener":"attachEvent",a=n.addEventListener?"removeEventListener":"detachEvent",i=n.addEventListener?"":"on",u=function d(r){"readystatechange"==r.type&&"complete"!=n.readyState||(("load"==r.type?l:n)[a](i+r.type,d,!1),!t&&(t=!0)&&e.call(l,r.type||r))},c=function f(){try{s.doScroll("left")}catch(e){return void setTimeout(f,50)}u("poll")};if("complete"==n.readyState)e.call(l,"lazy");else{if(n.createEventObject&&s.doScroll){try{r=!l.frameElement}catch(p){}r&&c()}n[o](i+"DOMContentLoaded",u,!1),n[o](i+"readystatechange",u,!1),l[o](i+"load",u,!1)}}function b(e,t){if(t&&e.setAttribute){for(var r,n=h(e),l=t.split(" "),s=0;s=0;)n=n.replace(" "+r+" "," ");e.setAttribute("class",n.trim())}}function h(e){var t=(e.getAttribute("class")||"").replace(/[\n\t]/g,"");return" "+t+" "}function v(e){return e.replace(y,function(e,t,r,n){return n?r.toUpperCase():r}).replace(g,"Moz$1")}function m(e,t,r){var n;return n=r.getPropertyValue(t),""!==n||e.ownerDocument||(n=e.style[v(t)]),n}var C,y=/([\:\-\_]+(.))/g,g=/^moz([A-Z])/;C={multiple:!0,selected:!0,checked:!0,disabled:!0,readonly:!0,required:!0,open:!0},t.exports={addClass:n,css:l,hasClass:s,off:i,offset:d,on:a,one:u,ready:f,removeClass:b,type:o,scrollLeft:c,scrollTop:p}},{}],5:[function(e,t,r){"use strict";function n(){var e=window;if(v.debug&&"undefined"!=typeof e.console)try{e.console.log.apply(e.console,arguments)}catch(t){var r=Array.prototype.slice.call(arguments);e.console.log(r.join("\n"))}}function l(e){var t,r=document;t=r.head||r.getElementsByTagName("head")[0]||r.documentElement;var n=r.createElement("style");return n.type="text/css",n.styleSheet?n.styleSheet.cssText=e:n.appendChild(r.createTextNode(e)),t.insertBefore(n,t.firstChild),n}function s(e,t){if(!t)throw new Error("MUI: "+e);"undefined"!=typeof console&&console.error("MUI Warning: "+e)}function o(e){if(C.push(e),void 0===C._initialized){var t=document;m.on(t,"animationstart",a),m.on(t,"mozAnimationStart",a),m.on(t,"webkitAnimationStart",a),C._initialized=!0}}function a(e){if("mui-node-inserted"===e.animationName)for(var t=e.target,r=C.length-1;r>=0;r--)C[r](t)}function i(e){var t="";for(var r in e)t+=e[r]?r+" ":"";return t.trim()}function u(){if(void 0!==h)return h;var e=document.createElement("x");return e.style.cssText="pointer-events:auto",h="auto"===e.style.pointerEvents}function c(e,t){return function(){e[t].apply(e,arguments)}}function p(e,t,r,n,l){var s,o=document.createEvent("HTMLEvents"),r=void 0!==r?r:!0,n=void 0!==n?n:!0;if(o.initEvent(t,r,n),l)for(s in l)o[s]=l[s];return e&&e.dispatchEvent(o),o}function d(){if(y+=1,1===y){var e=window,t=document;b={left:m.scrollLeft(e),top:m.scrollTop(e)},m.addClass(t.body,g),e.scrollTo(b.left,b.top)}}function f(){if(0!==y&&(y-=1,0===y)){var e=window,t=document;m.removeClass(t.body,g),e.scrollTo(b.left,b.top)}}var b,h,v=e("../config"),m=e("./jqLite"),C=[],y=0,g="mui-body--scroll-lock";t.exports={callback:c,classNames:i,disableScrollLock:f,dispatchEvent:p,enableScrollLock:d,log:n,loadStyle:l,onNodeInserted:o,raiseError:s,supportsPointerEvents:u}},{"../config":2,"./jqLite":4}],6:[function(e,t,r){"use strict";var n="You provided a `value` prop to a form field without an `OnChange` handler. Please see React documentation on controlled components";t.exports={controlledMessage:n}},{}],7:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=e("../js/lib/jqLite"),o=babelHelpers.interopRequireWildcard(s),a=e("../js/lib/util"),i=(babelHelpers.interopRequireWildcard(a),l["default"].PropTypes),u="mui-btn",c="mui-ripple-effect",p={color:1,variant:1,size:1},d=function(e){function t(){var e,r,n,l;babelHelpers.classCallCheck(this,t);for(var s=arguments.length,o=Array(s),a=0;s>a;a++)o[a]=arguments[a];return r=n=babelHelpers.possibleConstructorReturn(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(o))),n.state={ripples:{}},l=r,babelHelpers.possibleConstructorReturn(n,l)}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentDidMount",value:function(){var e=this.refs.buttonEl;e._muiDropdown=!0,e._muiRipple=!0}},{key:"onClick",value:function(e){var t=this.props.onClick;t&&t(e)}},{key:"onMouseDown",value:function(e){var t=o.offset(this.refs.buttonEl),r=t.height;"fab"===this.props.variant&&(r/=2);var n=this.state.ripples,l=Date.now();n[l]={xPos:e.pageX-t.left,yPos:e.pageY-t.top,diameter:r,teardownFn:this.teardownRipple.bind(this,l)},this.setState({ripples:n})}},{key:"onTouchStart",value:function(e){}},{key:"teardownRipple",value:function(e){var t=this.state.ripples;delete t[e],this.setState({ripples:t})}},{key:"render",value:function(){var e=u,t=void 0,r=void 0,n=this.state.ripples;for(t in p)r=this.props[t],"default"!==r&&(e+=" "+u+"--"+r);return l["default"].createElement("button",babelHelpers["extends"]({},this.props,{ref:"buttonEl",className:e+" "+this.props.className,onClick:this.onClick.bind(this),onMouseDown:this.onMouseDown.bind(this)}),this.props.children,Object.keys(n).map(function(e,t){var r=n[e];return l["default"].createElement(f,{key:e,xPos:r.xPos,yPos:r.yPos,diameter:r.diameter,onTeardown:r.teardownFn})}))}}]),t}(l["default"].Component);d.propTypes={color:i.oneOf(["default","primary","danger","dark","accent"]),disabled:i.bool,size:i.oneOf(["default","small","large"]),type:i.oneOf(["submit","button"]),variant:i.oneOf(["default","flat","raised","fab"]),onClick:i.func},d.defaultProps={className:"",color:"default",disabled:!1,size:"default",type:null,variant:"default",onClick:null};var f=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentDidMount",value:function(){var e=this;this.teardownTimer=setTimeout(function(){var t=e.props.onTeardown;t&&t()},2e3)}},{key:"componentWillUnmount",value:function(){clearTimeout(this.teardownTimer)}},{key:"render",value:function(){var e=this.props.diameter,t=e/2,r={height:e,width:e,top:this.props.yPos-t||0,left:this.props.xPos-t||0};return l["default"].createElement("div",{className:c,style:r})}}]),t}(l["default"].Component);f.propTypes={xPos:i.number,yPos:i.number,diameter:i.number,onTeardown:i.func},f.defaultProps={xPos:0,yPos:0,diameter:0,onTeardown:null},r["default"]=d,t.exports=r["default"]},{"../js/lib/jqLite":4,"../js/lib/util":5,react:"CwoHg3"}],8:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e=this.props,t=(e.children,babelHelpers.objectWithoutProperties(e,["children"]));return l["default"].createElement("span",babelHelpers["extends"]({},t,{className:"mui-caret "+this.props.className}))}}]),t}(l["default"].Component);s.defaultProps={className:""},r["default"]=s,t.exports=r["default"]},{react:"CwoHg3"}],9:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=l["default"].PropTypes,o=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){return null}}]),t}(l["default"].Component);o.propTypes={value:s.any,label:s.string,onActive:s.func},o.defaultProps={value:null,label:"",onActive:null},r["default"]=o,t.exports=r["default"]},{react:"CwoHg3"}],10:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.TextField=void 0;var n=window.React,l=babelHelpers.interopRequireDefault(n),s=e("../js/lib/util"),o=babelHelpers.interopRequireWildcard(s),a=e("./_helpers"),i=l["default"].PropTypes,u=function(e){function t(e){babelHelpers.classCallCheck(this,t);var r=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e)),n=e.value,l=n||e.defaultValue;r.state={innerValue:l,isDirty:Boolean(l)},void 0!==n&&null===e.onChange&&o.raiseError(a.controlledMessage,!0);var s=o.callback;return r.onChangeCB=s(r,"onChange"),r.onFocusCB=s(r,"onFocus"),r}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentDidMount",value:function(){this.refs.inputEl._muiTextfield=!0}},{key:"onChange",value:function(e){this.setState({innerValue:e.target.value});var t=this.props.onChange;t&&t(e)}},{key:"onFocus",value:function(e){this.setState({isDirty:!0})}},{key:"triggerFocus",value:function(){this.refs.inputEl.focus()}},{key:"render",value:function(){var e={},t=Boolean(this.state.innerValue),r=void 0;e["mui--is-empty"]=!t,e["mui--is-not-empty"]=t,e["mui--is-dirty"]=this.state.isDirty,e["mui--is-invalid"]=this.props.invalid,e=o.classNames(e);var n=this.props,s=(n.children,babelHelpers.objectWithoutProperties(n,["children"]));return r="textarea"===this.props.type?l["default"].createElement("textarea",babelHelpers["extends"]({},s,{ref:"inputEl",className:e,rows:this.props.rows,placeholder:this.props.hint,value:this.props.value,defaultValue:this.props.defaultValue,autoFocus:this.props.autoFocus,onChange:this.onChangeCB,onFocus:this.onFocusCB,required:this.props.required})):l["default"].createElement("input",babelHelpers["extends"]({},s,{ref:"inputEl",className:e,type:this.props.type,value:this.props.value,defaultValue:this.props.defaultValue,placeholder:this.props.hint,autoFocus:this.props.autofocus,onChange:this.onChangeCB,onFocus:this.onFocusCB,required:this.props.required}))}}]),t}(l["default"].Component);u.propTypes={hint:i.string,value:i.string,type:i.string,autoFocus:i.bool,onChange:i.func},u.defaultProps={hint:null,type:null,autoFocus:!1,onChange:null};var c=function(e){function t(){var e,r,n,l;babelHelpers.classCallCheck(this,t);for(var s=arguments.length,o=Array(s),a=0;s>a;a++)o[a]=arguments[a];return r=n=babelHelpers.possibleConstructorReturn(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(o))),n.state={style:{}},l=r,babelHelpers.possibleConstructorReturn(n,l)}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentDidMount",value:function(){var e=this;this.styleTimer=setTimeout(function(){var t=".15s ease-out",r=void 0;r={transition:t,WebkitTransition:t,MozTransition:t,OTransition:t,msTransform:t},e.setState({style:r})},150)}},{key:"componentWillUnmount",value:function(){clearTimeout(this.styleTimer)}},{key:"render",value:function(){return l["default"].createElement("label",{style:this.state.style,onClick:this.props.onClick},this.props.text)}}]),t}(l["default"].Component);c.defaultProps={text:"",onClick:null};var p=function(e){function t(e){babelHelpers.classCallCheck(this,t);var r=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e));return r.onClickCB=o.callback(r,"onClick"),r}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"onClick",value:function(e){o.supportsPointerEvents()===!1&&(e.target.style.cursor="text",this.refs.inputEl.triggerFocus())}},{key:"render",value:function(){var e={},t=void 0;return this.props.label.length&&(t=l["default"].createElement(c,{text:this.props.label,onClick:this.onClickCB})),e["mui-textfield"]=!0,e["mui-textfield--float-label"]=this.props.floatingLabel,e=o.classNames(e),l["default"].createElement("div",{className:e},l["default"].createElement(u,babelHelpers["extends"]({ref:"inputEl"},this.props)),t)}}]),t}(l["default"].Component);p.propTypes={label:i.string,floatingLabel:i.bool},p.defaultProps={label:"",floatingLabel:!1},r.TextField=p},{"../js/lib/util":5,"./_helpers":6,react:"CwoHg3"}],11:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){return l["default"].createElement("div",babelHelpers["extends"]({},this.props,{className:"mui-appbar "+this.props.className}),this.props.children)}}]),t}(l["default"].Component);s.defaultProps={className:""},r["default"]=s,t.exports=r["default"]},{react:"CwoHg3"}],12:[function(e,t,r){t.exports=e(7)},{"../js/lib/jqLite":4,"../js/lib/util":5,react:"CwoHg3"}],13:[function(e,t,r){t.exports=e(8)},{react:"CwoHg3"}],14:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=e("../js/lib/util"),o=(babelHelpers.interopRequireWildcard(s),e("./_helpers"),l["default"].PropTypes),a=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e=this.props,t=(e.children,e.onChange,babelHelpers.objectWithoutProperties(e,["children","onChange"]));return l["default"].createElement("div",babelHelpers["extends"]({},t,{className:"mui-checkbox "+this.props.className}),l["default"].createElement("label",null,l["default"].createElement("input",{ref:"inputEl",type:"checkbox",name:this.props.name,value:this.props.value,checked:this.props.checked,defaultChecked:this.props.defaultChecked,disabled:this.props.disabled,onChange:this.props.onChange}),this.props.label))}}]),t}(l["default"].Component);a.propTypes={name:o.string,label:o.string,value:o.string,checked:o.bool,defaultChecked:o.bool,disabled:o.bool,onChange:o.func},a.defaultProps={className:"",name:null,label:null,disabled:!1,onChange:null},r["default"]=a,t.exports=r["default"]},{"../js/lib/util":5,"./_helpers":6,react:"CwoHg3"}],15:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=e("../js/lib/util"),o=babelHelpers.interopRequireWildcard(s),a=["xs","sm","md","lg","xl"],i=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"defaultProps",value:function(){var e={className:""},t=void 0,r=void 0;for(t=a.length-1;t>-1;t--)r=a[t],e[r]=null,e[r+"-offset"]=null;return e}},{key:"render",value:function(){var e={},t=void 0,r=void 0,n=void 0,s=void 0;for(t=a.length-1;t>-1;t--)r=a[t],s="mui-col-"+r,n=this.props[r],n&&(e[s+"-"+n]=!0),n=this.props[r+"-offset"],n&&(e[s+"-offset-"+n]=!0);return e=o.classNames(e),l["default"].createElement("div",babelHelpers["extends"]({},this.props,{className:e+" "+this.props.className}),this.props.children)}}]),t}(l["default"].Component);r["default"]=i,t.exports=r["default"]},{"../js/lib/util":5,react:"CwoHg3"}],16:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e="mui-container";return this.props.fluid&&(e+="-fluid"),l["default"].createElement("div",babelHelpers["extends"]({},this.props,{className:e+" "+this.props.className}),this.props.children)}}]),t}(l["default"].Component);s.propTypes={fluid:l["default"].PropTypes.bool},s.defaultProps={className:"",fluid:!1},r["default"]=s,t.exports=r["default"]},{react:"CwoHg3"}],17:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e=this.props,t=(e.children,babelHelpers.objectWithoutProperties(e,["children"]));return l["default"].createElement("div",babelHelpers["extends"]({},t,{className:"mui-divider "+this.props.className}))}}]),t}(l["default"].Component);s.defaultProps={className:""},r["default"]=s,t.exports=r["default"]},{react:"CwoHg3"}],18:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=e("../js/lib/util"),o=babelHelpers.interopRequireWildcard(s),a=l["default"].PropTypes,i=function(e){function t(e){babelHelpers.classCallCheck(this,t);var r=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e));return r.onClickCB=o.callback(r,"onClick"),r}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"onClick",value:function(e){this.props.onClick&&this.props.onClick(this,e)}},{key:"render",value:function(){var e=this.props,t=e.children,r=(e.onClick,babelHelpers.objectWithoutProperties(e,["children","onClick"]));return l["default"].createElement("li",r,l["default"].createElement("a",{href:this.props.link,target:this.props.target,"data-mui-value":this.props.value,onClick:this.onClickCB},t))}}]),t}(l["default"].Component);i.propTypes={link:a.string,target:a.string,onClick:a.func},r["default"]=i,t.exports=r["default"]},{"../js/lib/util":5,react:"CwoHg3"}],19:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=e("./button"),o=babelHelpers.interopRequireDefault(s),a=e("./caret"),i=babelHelpers.interopRequireDefault(a),u=e("../js/lib/jqLite"),c=babelHelpers.interopRequireWildcard(u),p=e("../js/lib/util"),d=babelHelpers.interopRequireWildcard(p),f=l["default"].PropTypes,b="mui-dropdown",h="mui-dropdown__menu",v="mui--is-open",m="mui-dropdown__menu--right",C=function(e){function t(e){babelHelpers.classCallCheck(this,t);var r=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e));r.state={opened:!1,menuTop:0};var n=d.callback;return r.selectCB=n(r,"select"),r.onClickCB=n(r,"onClick"),r.onOutsideClickCB=n(r,"onOutsideClick"),r}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentWillMount",value:function(){document.addEventListener("click",this.onOutsideClickCB)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("click",this.onOutsideClickCB)}},{key:"onClick",value:function(e){if(0===e.button&&!this.props.disabled&&!e.defaultPrevented){this.toggle();var t=this.props.onClick;t&&t(e)}}},{key:"toggle",value:function(){return this.props.children?void(this.state.opened?this.close():this.open()):d.raiseError("Dropdown menu element not found")}},{key:"open",value:function(){var e=this.refs.wrapperEl.getBoundingClientRect(),t=void 0;t=this.refs.button.refs.buttonEl.getBoundingClientRect(),this.setState({opened:!0,menuTop:t.top-e.top+t.height})}},{key:"close",value:function(){this.setState({opened:!1})}},{key:"select",value:function(e){this.props.onSelect&&"A"===e.target.tagName&&this.props.onSelect(e.target.getAttribute("data-mui-value")),e.defaultPrevented||this.close()}},{key:"onOutsideClick",value:function(e){var t=this.refs.wrapperEl.contains(e.target);t||this.close()}},{key:"render",value:function(){var e=void 0,t=void 0,r=void 0;if(r="string"===c.type(this.props.label)?l["default"].createElement("span",null,this.props.label," ",l["default"].createElement(i["default"],null)):this.props.label,e=l["default"].createElement(o["default"],{ref:"button",type:"button",onClick:this.onClickCB,color:this.props.color,variant:this.props.variant,size:this.props.size,disabled:this.props.disabled},r),this.state.opened){var n={};n[h]=!0,n[v]=this.state.opened,n[m]="right"===this.props.alignMenu,n=d.classNames(n),t=l["default"].createElement("ul",{ref:"menuEl",className:n,style:{top:this.state.menuTop},onClick:this.selectCB},this.props.children)}var s=this.props,a=s.className,u=(s.children,s.onClick,babelHelpers.objectWithoutProperties(s,["className","children","onClick"]));return l["default"].createElement("div",babelHelpers["extends"]({},u,{ref:"wrapperEl",className:b+" "+a}),e,t)}}]),t}(l["default"].Component);C.propTypes={color:f.oneOf(["default","primary","danger","dark","accent"]),variant:f.oneOf(["default","flat","raised","fab"]),size:f.oneOf(["default","small","large"]),label:f.oneOfType([f.string,f.element]),alignMenu:f.oneOf(["left","right"]),onClick:f.func,onSelect:f.func,disabled:f.bool},C.defaultProps={className:"",color:"default",variant:"default",size:"default",label:"",alignMenu:"left",onClick:null,onSelect:null,disabled:!1},r["default"]=C,t.exports=r["default"]},{"../js/lib/jqLite":4,"../js/lib/util":5,"./button":7,"./caret":8,react:"CwoHg3"}],20:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e="";return this.props.inline&&(e="mui-form--inline"),l["default"].createElement("form",babelHelpers["extends"]({},this.props,{className:e+" "+this.props.className}),this.props.children)}}]),t}(l["default"].Component);s.propTypes={inline:l["default"].PropTypes.bool},s.defaultProps={className:"",inline:!1},r["default"]=s,t.exports=r["default"]},{react:"CwoHg3"}],21:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=e("./text-field"),o=l["default"].PropTypes,a=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){return l["default"].createElement(s.TextField,this.props)}}]),t}(l["default"].Component);a.propTypes={type:o.oneOf(["text","email","url","tel","password"])},a.defaultProps={type:"text"},r["default"]=a,t.exports=r["default"]},{"./text-field":10,react:"CwoHg3"}],22:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=e("../js/lib/forms"),o=(babelHelpers.interopRequireWildcard(s),e("../js/lib/jqLite")),a=(babelHelpers.interopRequireWildcard(o),e("../js/lib/util")),i=(babelHelpers.interopRequireWildcard(a),l["default"].PropTypes),u=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e=this.props,t=(e.children,babelHelpers.objectWithoutProperties(e,["children"]));return l["default"].createElement("option",babelHelpers["extends"]({},t,{value:this.props.value}),this.props.label)}}]),t}(l["default"].Component);u.propTypes={value:i.string,label:i.string},u.defaultProps={value:null,label:null},r["default"]=u,t.exports=r["default"]},{"../js/lib/forms":3,"../js/lib/jqLite":4,"../js/lib/util":5,react:"CwoHg3"}],23:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){return l["default"].createElement("div",babelHelpers["extends"]({},this.props,{className:"mui-panel "+this.props.className}),this.props.children)}}]),t}(l["default"].Component);s.defaultProps={className:""},r["default"]=s,t.exports=r["default"]},{react:"CwoHg3"}],24:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=l["default"].PropTypes,o=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){var e=this.props,t=(e.children,e.onChange,babelHelpers.objectWithoutProperties(e,["children","onChange"]));return l["default"].createElement("div",babelHelpers["extends"]({},t,{className:"mui-radio "+this.props.className}),l["default"].createElement("label",null,l["default"].createElement("input",{ref:"inputEl",type:"radio",name:this.props.name,value:this.props.value,checked:this.props.checked,defaultChecked:this.props.defaultChecked,disabled:this.props.disabled,onChange:this.props.onChange}),this.props.label))}}]),t}(l["default"].Component);o.propTypes={name:s.string,label:s.string,value:s.string,checked:s.bool,defaultChecked:s.bool,disabled:s.bool,onChange:s.func},o.defaultProps={className:"",name:null,label:null,disabled:!1,onChange:null},r["default"]=o,t.exports=r["default"]},{react:"CwoHg3"}],25:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=e("../js/lib/util"),o=(babelHelpers.interopRequireWildcard(s),function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){return l["default"].createElement("div",babelHelpers["extends"]({},this.props,{className:"mui-row "+this.props.className}),this.props.children)}}]),t}(l["default"].Component));o.defaultProps={className:""},r["default"]=o,t.exports=r["default"]},{"../js/lib/util":5,react:"CwoHg3"}],26:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=e("../js/lib/forms"),o=babelHelpers.interopRequireWildcard(s),a=e("../js/lib/jqLite"),i=babelHelpers.interopRequireWildcard(a),u=e("../js/lib/util"),c=babelHelpers.interopRequireWildcard(u),p=e("./_helpers"),d=l["default"].PropTypes,f=function(e){ +function t(e){babelHelpers.classCallCheck(this,t);var r=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e));r.state={showMenu:!1},e.readOnly===!1&&void 0!==e.value&&null===e.onChange&&c.raiseError(p.controlledMessage,!0),r.state.value=e.value;var n=c.callback;return r.hideMenuCB=n(r,"hideMenu"),r.onInnerChangeCB=n(r,"onInnerChange"),r.onInnerClickCB=n(r,"onInnerClick"),r.onInnerFocusCB=n(r,"onInnerFocus"),r.onInnerMouseDownCB=n(r,"onInnerMouseDown"),r.onKeydownCB=n(r,"onKeydown"),r.onMenuChangeCB=n(r,"onMenuChange"),r.onOuterFocusCB=n(r,"onOuterFocus"),r.onOuterBlurCB=n(r,"onOuterBlur"),r}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentDidMount",value:function(){this.refs.selectEl._muiSelect=!0,this.refs.wrapperEl.tabIndex=-1,this.props.autoFocus&&this.refs.wrapperEl.focus()}},{key:"componentWillReceiveProps",value:function(e){this.setState({value:e.value})}},{key:"onInnerMouseDown",value:function(e){0===e.button&&this.props.useDefault!==!0&&e.preventDefault()}},{key:"onInnerChange",value:function(e){var t=e.target.value;this.setState({value:t});var r=this.props.onChange;r&&r(t)}},{key:"onInnerClick",value:function(e){0===e.button&&this.showMenu()}},{key:"onInnerFocus",value:function(e){var t=this;this.props.useDefault!==!0&&setTimeout(function(){t.refs.wrapperEl.focus()},0)}},{key:"onOuterFocus",value:function(e){if(e.target===this.refs.wrapperEl){var t=this.refs.selectEl;return t._muiOrigIndex=t.tabIndex,t.tabIndex=-1,t.disabled?this.refs.wrapperEl.blur():void i.on(document,"keydown",this.onKeydownCB)}}},{key:"onOuterBlur",value:function(e){if(e.target===this.refs.wrapperEl){var t=this.refs.selectEl;t.tabIndex=t._muiOrigIndex,i.off(document,"keydown",this.onKeydownCB)}}},{key:"onKeydown",value:function(e){32!==e.keyCode&&38!==e.keyCode&&40!==e.keyCode||(e.preventDefault(),this.refs.selectEl.disabled!==!0&&this.showMenu())}},{key:"showMenu",value:function(){this.props.useDefault!==!0&&(c.enableScrollLock(),i.on(window,"resize",this.hideMenuCB),i.on(document,"click",this.hideMenuCB),this.setState({showMenu:!0}))}},{key:"hideMenu",value:function(){c.disableScrollLock(),i.off(window,"resize",this.hideMenuCB),i.off(document,"click",this.hideMenuCB),this.setState({showMenu:!1}),this.refs.selectEl.focus()}},{key:"onMenuChange",value:function(e){if(this.props.readOnly!==!0){this.setState({value:e});var t=this.props.onChange;t&&t(e)}}},{key:"render",value:function(){var e=void 0;this.state.showMenu&&(e=l["default"].createElement(b,{optionEls:this.refs.selectEl.children,wrapperEl:this.refs.wrapperEl,onChange:this.onMenuChangeCB,onClose:this.hideMenuCB}));var t=this.props,r=(t.children,t.onChange,babelHelpers.objectWithoutProperties(t,["children","onChange"]));return l["default"].createElement("div",babelHelpers["extends"]({},r,{ref:"wrapperEl",className:"mui-select "+this.props.className,onFocus:this.onOuterFocusCB,onBlur:this.onOuterBlurCB}),l["default"].createElement("select",{ref:"selectEl",name:this.props.name,value:this.state.value,defaultValue:this.props.defaultValue,disabled:this.props.disabled,multiple:this.props.multiple,readOnly:this.props.readOnly,required:this.props.required,onChange:this.onInnerChangeCB,onMouseDown:this.onInnerMouseDownCB,onClick:this.onInnerClickCB,onFocus:this.onInnerFocusCB},this.props.children),e)}}]),t}(l["default"].Component);f.propTypes={name:d.string,value:d.string,defaultValue:d.string,autoFocus:d.bool,disabled:d.bool,multiple:d.bool,readOnly:d.bool,required:d.bool,useDefault:d.bool,onChange:d.func},f.defaultProps={className:"",name:null,autoFocus:!1,disabled:!1,multiple:!1,readOnly:!1,required:!1,useDefault:!1,onChange:null};var b=function(e){function t(e){babelHelpers.classCallCheck(this,t);var r=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e));return r.state={origIndex:null,currentIndex:null},r.onKeydownCB=c.callback(r,"onKeydown"),r}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"componentWillMount",value:function(){var e=this.props.optionEls,t=e.length,r=0,n=void 0;for(n=t-1;n>-1;n--)e[n].selected&&(r=n);this.setState({origIndex:r,currentIndex:r})}},{key:"componentDidMount",value:function(){this.blurTimer=setTimeout(function(){var e=document.activeElement;"body"!==e.nodeName.toLowerCase()&&e.blur()},0);var e=o.getMenuPositionalCSS(this.props.wrapperEl,this.props.optionEls.length,this.state.currentIndex),t=this.refs.wrapperEl;i.css(t,e),i.scrollTop(t,e.scrollTop),i.on(document,"keydown",this.onKeydownCB)}},{key:"componentWillUnmount",value:function(){clearTimeout(this.blurTimer),i.off(document,"keydown",this.onKeydownCB)}},{key:"onClick",value:function(e,t){t.stopPropagation(),this.selectAndDestroy(e)}},{key:"onKeydown",value:function(e){var t=e.keyCode;return 9===t?this.destroy():(27!==t&&40!==t&&38!==t&&13!==t||e.preventDefault(),void(27===t?this.destroy():40===t?this.increment():38===t?this.decrement():13===t&&this.selectAndDestroy()))}},{key:"increment",value:function(){this.state.currentIndex!==this.props.optionEls.length-1&&this.setState({currentIndex:this.state.currentIndex+1})}},{key:"decrement",value:function(){0!==this.state.currentIndex&&this.setState({currentIndex:this.state.currentIndex-1})}},{key:"selectAndDestroy",value:function(e){e=void 0===e?this.state.currentIndex:e,e!==this.state.origIndex&&this.props.onChange(this.props.optionEls[e].value),this.destroy()}},{key:"destroy",value:function(){this.props.onClose()}},{key:"render",value:function(){var e=[],t=this.props.optionEls,r=t.length,n=void 0,s=void 0;for(s=0;r>s;s++)n=s===this.state.currentIndex?"mui--is-selected":"",e.push(l["default"].createElement("div",{key:s,className:n,onClick:this.onClick.bind(this,s)},t[s].textContent));return l["default"].createElement("div",{ref:"wrapperEl",className:"mui-select__menu"},e)}}]),t}(l["default"].Component);b.defaultProps={optionEls:[],wrapperEl:null,onChange:null,onClose:null},r["default"]=f,t.exports=r["default"]},{"../js/lib/forms":3,"../js/lib/jqLite":4,"../js/lib/util":5,"./_helpers":6,react:"CwoHg3"}],27:[function(e,t,r){t.exports=e(9)},{react:"CwoHg3"}],28:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=e("./tab"),o=babelHelpers.interopRequireDefault(s),a=e("../js/lib/util"),i=babelHelpers.interopRequireWildcard(a),u=l["default"].PropTypes,c="mui-tabs__bar",p="mui-tabs__bar--justified",d="mui-tabs__pane",f="mui--is-active",b=function(e){function t(e){babelHelpers.classCallCheck(this,t);var r=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).call(this,e));return r.state={currentSelectedIndex:e.initialSelectedIndex},r}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"onClick",value:function(e,t,r){e!==this.state.currentSelectedIndex&&(this.setState({currentSelectedIndex:e}),t.props.onActive&&t.props.onActive(t),this.props.onChange&&this.props.onChange(e,t.props.value,t,r))}},{key:"render",value:function(){var e=this.props,t=e.children,r=babelHelpers.objectWithoutProperties(e,["children"]),n=[],s=[],a=t.length,u=this.state.currentSelectedIndex%a,b=void 0,h=void 0,v=void 0,m=void 0;for(m=0;a>m;m++)h=t[m],h.type!==o["default"]&&i.raiseError("Expecting MUITab React Element"),b=m===u,n.push(l["default"].createElement("li",{key:m,className:b?f:""},l["default"].createElement("a",{onClick:this.onClick.bind(this,m,h)},h.props.label))),v=d+" ",b&&(v+=f),s.push(l["default"].createElement("div",{key:m,className:v},h.props.children));return v=c,this.props.justified&&(v+=" "+p),l["default"].createElement("div",r,l["default"].createElement("ul",{className:v},n),s)}}]),t}(l["default"].Component);b.propTypes={initialSelectedIndex:u.number,justified:u.bool,onChange:u.func},b.defaultProps={className:"",initialSelectedIndex:0,justified:!1,onChange:null},r["default"]=b,t.exports=r["default"]},{"../js/lib/util":5,"./tab":9,react:"CwoHg3"}],29:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=window.React,l=babelHelpers.interopRequireDefault(n),s=e("./text-field"),o=l["default"].PropTypes,a=function(e){function t(){return babelHelpers.classCallCheck(this,t),babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(t).apply(this,arguments))}return babelHelpers.inherits(t,e),babelHelpers.createClass(t,[{key:"render",value:function(){return l["default"].createElement(s.TextField,this.props)}}]),t}(l["default"].Component);a.propTypes={rows:o.number},a.defaultProps={type:"textarea",rows:2},r["default"]=a,t.exports=r["default"]},{"./text-field":10,react:"CwoHg3"}]},{},[1]); \ No newline at end of file diff --git a/www/libs/mui/packages/cdn/webcomponents/mui-webcomponents.js b/www/libs/mui/packages/cdn/webcomponents/mui-webcomponents.js new file mode 100644 index 0000000..6fe112a --- /dev/null +++ b/www/libs/mui/packages/cdn/webcomponents/mui-webcomponents.js @@ -0,0 +1,1023 @@ +(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o -1); +} + + +/** + * Return the type of a variable. + * @param {} somevar - The JavaScript variable. + */ +function jqLiteType(somevar) { + // handle undefined + if (somevar === undefined) return 'undefined'; + + // handle others (of type [object ]) + var typeStr = Object.prototype.toString.call(somevar); + if (typeStr.indexOf('[object ') === 0) { + return typeStr.slice(8, -1).toLowerCase(); + } else { + throw new Error("MUI: Could not understand type: " + typeStr); + } +} + + +/** + * Attach an event handler to a DOM element + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOn(element, type, callback, useCapture) { + useCapture = (useCapture === undefined) ? false : useCapture; + + // add to DOM + element.addEventListener(type, callback, useCapture); + + // add to cache + var cache = element._muiEventCache = element._muiEventCache || {}; + cache[type] = cache[type] || []; + cache[type].push([callback, useCapture]); +} + + +/** + * Remove an event handler from a DOM element + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOff(element, type, callback, useCapture) { + useCapture = (useCapture === undefined) ? false : useCapture; + + // remove from cache + var cache = element._muiEventCache = element._muiEventCache || {}, + argsList = cache[type] || [], + args, + i; + + i = argsList.length; + while (i--) { + args = argsList[i]; + + // remove all events if callback is undefined + if (callback === undefined || + (args[0] === callback && args[1] === useCapture)) { + + // remove from cache + argsList.splice(i, 1); + + // remove from DOM + element.removeEventListener(type, args[0], args[1]); + } + } +} + + +/** + * Attach an event hander which will only execute once + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOne(element, type, callback, useCapture) { + jqLiteOn(element, type, function onFn(ev) { + // execute callback + if (callback) callback.apply(this, arguments); + + // remove wrapper + jqLiteOff(element, type, onFn); + }, useCapture); +} + + +/** + * Get or set horizontal scroll position + * @param {Element} element - The DOM element + * @param {number} [value] - The scroll position + */ +function jqLiteScrollLeft(element, value) { + var win = window; + + // get + if (value === undefined) { + if (element === win) { + var docEl = document.documentElement; + return (win.pageXOffset || docEl.scrollLeft) - (docEl.clientLeft || 0); + } else { + return element.scrollLeft; + } + } + + // set + if (element === win) win.scrollTo(value, jqLiteScrollTop(win)); + else element.scrollLeft = value; +} + + +/** + * Get or set vertical scroll position + * @param {Element} element - The DOM element + * @param {number} value - The scroll position + */ +function jqLiteScrollTop(element, value) { + var win = window; + + // get + if (value === undefined) { + if (element === win) { + var docEl = document.documentElement; + return (win.pageYOffset || docEl.scrollTop) - (docEl.clientTop || 0); + } else { + return element.scrollTop; + } + } + + // set + if (element === win) win.scrollTo(jqLiteScrollLeft(win), value); + else element.scrollTop = value; +} + + +/** + * Return object representing top/left offset and element height/width. + * @param {Element} element - The DOM element. + */ +function jqLiteOffset(element) { + var win = window, + rect = element.getBoundingClientRect(), + scrollTop = jqLiteScrollTop(win), + scrollLeft = jqLiteScrollLeft(win); + + return { + top: rect.top + scrollTop, + left: rect.left + scrollLeft, + height: rect.height, + width: rect.width + }; +} + + +/** + * Attach a callback to the DOM ready event listener + * @param {Function} fn - The callback function. + */ +function jqLiteReady(fn) { + var done = false, + top = true, + doc = document, + win = doc.defaultView, + root = doc.documentElement, + add = doc.addEventListener ? 'addEventListener' : 'attachEvent', + rem = doc.addEventListener ? 'removeEventListener' : 'detachEvent', + pre = doc.addEventListener ? '' : 'on'; + + var init = function(e) { + if (e.type == 'readystatechange' && doc.readyState != 'complete') { + return; + } + + (e.type == 'load' ? win : doc)[rem](pre + e.type, init, false); + if (!done && (done = true)) fn.call(win, e.type || e); + }; + + var poll = function() { + try { root.doScroll('left'); } catch(e) { setTimeout(poll, 50); return; } + init('poll'); + }; + + if (doc.readyState == 'complete') { + fn.call(win, 'lazy'); + } else { + if (doc.createEventObject && root.doScroll) { + try { top = !win.frameElement; } catch(e) { } + if (top) poll(); + } + doc[add](pre + 'DOMContentLoaded', init, false); + doc[add](pre + 'readystatechange', init, false); + win[add](pre + 'load', init, false); + } +} + + +/** + * Remove classes from a DOM element + * @param {Element} element - The DOM element. + * @param {string} cssClasses - Space separated list of class names. + */ +function jqLiteRemoveClass(element, cssClasses) { + if (!cssClasses || !element.setAttribute) return; + + var existingClasses = _getExistingClasses(element), + splitClasses = cssClasses.split(' '), + cssClass; + + for (var i=0; i < splitClasses.length; i++) { + cssClass = splitClasses[i].trim(); + while (existingClasses.indexOf(' ' + cssClass + ' ') >= 0) { + existingClasses = existingClasses.replace(' ' + cssClass + ' ', ' '); + } + } + + element.setAttribute('class', existingClasses.trim()); +} + + +// ------------------------------ +// Utilities +// ------------------------------ +var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g, + MOZ_HACK_REGEXP = /^moz([A-Z])/, + ESCAPE_REGEXP = /([.*+?^=!:${}()|\[\]\/\\])/g, + BOOLEAN_ATTRS; + + +BOOLEAN_ATTRS = { + multiple: true, + selected: true, + checked: true, + disabled: true, + readonly: true, + required: true, + open: true +} + + +function _getExistingClasses(element) { + var classes = (element.getAttribute('class') || '').replace(/[\n\t]/g, ''); + return ' ' + classes + ' '; +} + + +function _camelCase(name) { + return name. + replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) { + return offset ? letter.toUpperCase() : letter; + }). + replace(MOZ_HACK_REGEXP, 'Moz$1'); +} + + +function _escapeRegExp(string) { + return string.replace(ESCAPE_REGEXP, "\\$1"); +} + + +function _getCurrCssProp(elem, name, computed) { + var ret; + + // try computed style + ret = computed.getPropertyValue(name); + + // try style attribute (if element is not attached to document) + if (ret === '' && !elem.ownerDocument) ret = elem.style[_camelCase(name)]; + + return ret; +} + + +/** + * Module API + */ +module.exports = { + /** Add classes */ + addClass: jqLiteAddClass, + + /** Get or set CSS properties */ + css: jqLiteCss, + + /** Check for class */ + hasClass: jqLiteHasClass, + + /** Remove event handlers */ + off: jqLiteOff, + + /** Return offset values */ + offset: jqLiteOffset, + + /** Add event handlers */ + on: jqLiteOn, + + /** Add an execute-once event handler */ + one: jqLiteOne, + + /** DOM ready event handler */ + ready: jqLiteReady, + + /** Remove classes */ + removeClass: jqLiteRemoveClass, + + /** Check JavaScript variable instance type */ + type: jqLiteType, + + /** Get or set horizontal scroll position */ + scrollLeft: jqLiteScrollLeft, + + /** Get or set vertical scroll position */ + scrollTop: jqLiteScrollTop +}; + +},{}],4:[function(require,module,exports){ +/** + * MUI CSS/JS utilities module + * @module lib/util + */ + +'use strict'; + + +var config = require('../config'), + jqLite = require('./jqLite'), + nodeInsertedCallbacks = [], + scrollLock = 0, + scrollLockCls = 'mui-body--scroll-lock', + scrollLockPos, + _supportsPointerEvents; + + +/** + * Logging function + */ +function logFn() { + var win = window; + + if (config.debug && typeof win.console !== "undefined") { + try { + win.console.log.apply(win.console, arguments); + } catch (a) { + var e = Array.prototype.slice.call(arguments); + win.console.log(e.join("\n")); + } + } +} + + +/** + * Load CSS text in new stylesheet + * @param {string} cssText - The css text. + */ +function loadStyleFn(cssText) { + var doc = document, + head; + + // copied from jQuery + head = doc.head || + doc.getElementsByTagName('head')[0] || + doc.documentElement; + + var e = doc.createElement('style'); + e.type = 'text/css'; + + if (e.styleSheet) e.styleSheet.cssText = cssText; + else e.appendChild(doc.createTextNode(cssText)); + + // add to document + head.insertBefore(e, head.firstChild); + + return e; +} + + +/** + * Raise an error + * @param {string} msg - The error message. + */ +function raiseErrorFn(msg, useConsole) { + if (useConsole) { + if (typeof console !== 'undefined') console.error('MUI Warning: ' + msg); + } else { + throw new Error('MUI: ' + msg); + } +} + + +/** + * Register callbacks on muiNodeInserted event + * @param {function} callbackFn - The callback function. + */ +function onNodeInsertedFn(callbackFn) { + nodeInsertedCallbacks.push(callbackFn); + + // initalize listeners + if (nodeInsertedCallbacks._initialized === undefined) { + var doc = document; + + jqLite.on(doc, 'animationstart', animationHandlerFn); + jqLite.on(doc, 'mozAnimationStart', animationHandlerFn); + jqLite.on(doc, 'webkitAnimationStart', animationHandlerFn); + + nodeInsertedCallbacks._initialized = true; + } +} + + +/** + * Execute muiNodeInserted callbacks + * @param {Event} ev - The DOM event. + */ +function animationHandlerFn(ev) { + // check animation name + if (ev.animationName !== 'mui-node-inserted') return; + + var el = ev.target; + + // iterate through callbacks + for (var i=nodeInsertedCallbacks.length - 1; i >= 0; i--) { + nodeInsertedCallbacks[i](el); + } +} + + +/** + * Convert Classname object, with class as key and true/false as value, to an + * class string. + * @param {Object} classes The classes + * @return {String} class string + */ +function classNamesFn(classes) { + var cs = ''; + for (var i in classes) { + cs += (classes[i]) ? i + ' ' : ''; + } + return cs.trim(); +} + + +/** + * Check if client supports pointer events. + */ +function supportsPointerEventsFn() { + // check cache + if (_supportsPointerEvents !== undefined) return _supportsPointerEvents; + + var element = document.createElement('x'); + element.style.cssText = 'pointer-events:auto'; + _supportsPointerEvents = (element.style.pointerEvents === 'auto'); + return _supportsPointerEvents; +} + + +/** + * Create callback closure. + * @param {Object} instance - The object instance. + * @param {String} funcName - The name of the callback function. + */ +function callbackFn(instance, funcName) { + return function() {instance[funcName].apply(instance, arguments);}; +} + + +/** + * Dispatch event. + * @param {Element} element - The DOM element. + * @param {String} eventType - The event type. + * @param {Boolean} bubbles=true - If true, event bubbles. + * @param {Boolean} cancelable=true = If true, event is cancelable + * @param {Object} [data] - Data to add to event object + */ +function dispatchEventFn(element, eventType, bubbles, cancelable, data) { + var ev = document.createEvent('HTMLEvents'), + bubbles = (bubbles !== undefined) ? bubbles : true, + cancelable = (cancelable !== undefined) ? cancelable : true, + k; + + ev.initEvent(eventType, bubbles, cancelable); + + // add data to event object + if (data) for (k in data) ev[k] = data[k]; + + // dispatch + if (element) element.dispatchEvent(ev); + + return ev; +} + + +/** + * Turn on window scroll lock. + */ +function enableScrollLockFn() { + // increment counter + scrollLock += 1 + + // add lock + if (scrollLock === 1) { + var win = window, + doc = document; + + scrollLockPos = {left: jqLite.scrollLeft(win), top: jqLite.scrollTop(win)}; + jqLite.addClass(doc.body, scrollLockCls); + win.scrollTo(scrollLockPos.left, scrollLockPos.top); + } +} + + +/** + * Turn off window scroll lock. + */ +function disableScrollLockFn() { + // ignore + if (scrollLock === 0) return; + + // decrement counter + scrollLock -= 1 + + // remove lock + if (scrollLock === 0) { + var win = window, + doc = document; + + jqLite.removeClass(doc.body, scrollLockCls); + win.scrollTo(scrollLockPos.left, scrollLockPos.top); + } +} + + +/** + * Define the module API + */ +module.exports = { + /** Create callback closures */ + callback: callbackFn, + + /** Classnames object to string */ + classNames: classNamesFn, + + /** Disable scroll lock */ + disableScrollLock: disableScrollLockFn, + + /** Dispatch event */ + dispatchEvent: dispatchEventFn, + + /** Enable scroll lock */ + enableScrollLock: enableScrollLockFn, + + /** Log messages to the console when debug is turned on */ + log: logFn, + + /** Load CSS text as new stylesheet */ + loadStyle: loadStyleFn, + + /** Register muiNodeInserted handler */ + onNodeInserted: onNodeInsertedFn, + + /** Raise MUI error */ + raiseError: raiseErrorFn, + + /** Support Pointer Events check */ + supportsPointerEvents: supportsPointerEventsFn +}; + +},{"../config":2,"./jqLite":3}],5:[function(require,module,exports){ +/** + * MUI CSS/JS form-control module + * @module forms/form-control + */ + +'use strict'; + + +var jqLite = require('./lib/jqLite'), + util = require('./lib/util'), + cssSelector = '.mui-textfield > input, .mui-textfield > textarea', + emptyClass = 'mui--is-empty', + notEmptyClass = 'mui--is-not-empty', + dirtyClass = 'mui--is-dirty', + floatingLabelClass = 'mui-textfield--float-label'; + + +/** + * Initialize input element. + * @param {Element} inputEl - The input element. + */ +function initialize(inputEl) { + // check flag + if (inputEl._muiTextfield === true) return; + else inputEl._muiTextfield = true; + + if (inputEl.value.length) jqLite.addClass(inputEl, notEmptyClass); + else jqLite.addClass(inputEl, emptyClass); + + jqLite.on(inputEl, 'input', inputHandler); + jqLite.on(inputEl, 'change', inputHandler); + + // add dirty class on focus + jqLite.on(inputEl, 'focus', function(){jqLite.addClass(this, dirtyClass);}); +} + + +/** + * Handle input events. + */ +function inputHandler() { + var inputEl = this; + + if (inputEl.value.length) { + jqLite.removeClass(inputEl, emptyClass); + jqLite.addClass(inputEl, notEmptyClass); + } else { + jqLite.removeClass(inputEl, notEmptyClass); + jqLite.addClass(inputEl, emptyClass) + } + + jqLite.addClass(inputEl, dirtyClass); +} + + +/** Define module API */ +module.exports = { + /** Initialize input elements */ + initialize: initialize, + + /** Initialize module listeners */ + initListeners: function() { + var doc = document; + + // markup elements available when method is called + var elList = doc.querySelectorAll(cssSelector); + for (var i=elList.length - 1; i >= 0; i--) initialize(elList[i]); + + // listen for new elements + util.onNodeInserted(function(el) { + if (el.tagName === 'INPUT' || el.tagName === 'TEXTAREA') initialize(el); + }); + + // add transition css for floating labels + setTimeout(function() { + var css = '.mui-textfield.mui-textfield--float-label > label {' + [ + '-webkit-transition', + '-moz-transition', + '-o-transition', + 'transition', + '' + ].join(':all .15s ease-out;') + '}'; + + util.loadStyle(css); + }, 150); + + // pointer-events shim for floating labels + if (util.supportsPointerEvents() === false) { + jqLite.on(document, 'click', function(ev) { + var targetEl = ev.target; + + if (targetEl.tagName === 'LABEL' && + jqLite.hasClass(targetEl.parentNode, floatingLabelClass)) { + var inputEl = targetEl.previousElementSibling; + if (inputEl) inputEl.focus(); + } + }); + } + } +}; + +},{"./lib/jqLite":3,"./lib/util":4}],6:[function(require,module,exports){ +module.exports = "/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-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{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}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{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{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-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:border-box}:after,:before{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:Arial,Verdana,Tahoma;font-size:14px;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);background-color:#FFF}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#2196F3;text-decoration:none}a:focus,a:hover{color:#1976D2;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}p{margin:0 0 10px}ol,ul{margin-top:0;margin-bottom:10px}figure{margin:0}img{vertical-align:middle}hr{margin-top:20px;margin-bottom:20px;border:0;height:1px;background-color:rgba(0,0,0,.12)}legend{display:block;width:100%;padding:0;margin-bottom:10px;font-size:21px;color:rgba(0,0,0,.87);line-height:inherit;border:0}input[type=search]{box-sizing:border-box;-webkit-appearance:none}input[type=checkbox]:focus,input[type=radio]:focus,input[type=file]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type=checkbox]:disabled,input[type=radio]:disabled{cursor:not-allowed}strong{font-weight:700}abbr[title]{cursor:help;border-bottom:1px dotted #2196F3}h1,h2,h3{margin-top:20px;margin-bottom:10px}h4,h5,h6{margin-top:10px;margin-bottom:10px}.mui--appbar-height{height:56px}.mui--appbar-min-height,.mui-appbar{min-height:56px}.mui--appbar-line-height{line-height:56px}.mui--appbar-top{top:56px}@media (orientation:landscape) and (max-height:480px){.mui--appbar-height{height:48px}.mui--appbar-min-height,.mui-appbar{min-height:48px}.mui--appbar-line-height{line-height:48px}.mui--appbar-top{top:48px}}@media (min-width:480px){.mui--appbar-height{height:64px}.mui--appbar-min-height,.mui-appbar{min-height:64px}.mui--appbar-line-height{line-height:64px}.mui--appbar-top{top:64px}}.mui-appbar{background-color:#2196F3;color:#FFF}.mui-btn{animation-duration:.1ms;animation-name:mui-node-inserted;font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase;color:rgba(0,0,0,.87);background-color:#FFF;transition:all .2s ease-in-out;display:inline-block;height:36px;padding:0 26px;margin-top:6px;margin-bottom:6px;border:none;border-radius:2px;cursor:pointer;-ms-touch-action:manipulation;touch-action:manipulation;background-image:none;text-align:center;line-height:36px;vertical-align:middle;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:14px;letter-spacing:.03em;position:relative;overflow:hidden}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{color:rgba(0,0,0,.87);background-color:#fff}.mui-btn[disabled]:active,.mui-btn[disabled]:focus,.mui-btn[disabled]:hover{color:rgba(0,0,0,.87);background-color:#FFF}.mui-btn.mui-btn--flat{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn.mui-btn--flat:active,.mui-btn.mui-btn--flat:focus,.mui-btn.mui-btn--flat:hover{color:rgba(0,0,0,.87);background-color:#f2f2f2}.mui-btn.mui-btn--flat[disabled]:active,.mui-btn.mui-btn--flat[disabled]:focus,.mui-btn.mui-btn--flat[disabled]:hover{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{outline:0;text-decoration:none;color:rgba(0,0,0,.87)}.mui-btn:focus,.mui-btn:hover{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:focus,.mui-btn:hover{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn.mui--is-disabled,.mui-btn:disabled{cursor:not-allowed;pointer-events:none;opacity:.6;box-shadow:none}.mui-btn+.mui-btn{margin-left:8px}.mui-btn--flat{background-color:transparent}.mui-btn--flat:active,.mui-btn--flat:focus,.mui-btn--flat:hover{box-shadow:none;background-color:#f2f2f2}.mui-btn--fab,.mui-btn--raised{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab,.mui-btn--raised{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn--fab{position:relative;padding:0;width:55px;height:55px;line-height:55px;border-radius:50%;z-index:1}.mui-btn--primary{color:#FFF;background-color:#2196F3}.mui-btn--primary:active,.mui-btn--primary:focus,.mui-btn--primary:hover{color:#FFF;background-color:#39a1f4}.mui-btn--primary[disabled]:active,.mui-btn--primary[disabled]:focus,.mui-btn--primary[disabled]:hover{color:#FFF;background-color:#2196F3}.mui-btn--primary.mui-btn--flat{color:#2196F3;background-color:transparent}.mui-btn--primary.mui-btn--flat:active,.mui-btn--primary.mui-btn--flat:focus,.mui-btn--primary.mui-btn--flat:hover{color:#2196F3;background-color:#f2f2f2}.mui-btn--primary.mui-btn--flat[disabled]:active,.mui-btn--primary.mui-btn--flat[disabled]:focus,.mui-btn--primary.mui-btn--flat[disabled]:hover{color:#2196F3;background-color:transparent}.mui-btn--dark{color:#FFF;background-color:#424242}.mui-btn--dark:active,.mui-btn--dark:focus,.mui-btn--dark:hover{color:#FFF;background-color:#4f4f4f}.mui-btn--dark[disabled]:active,.mui-btn--dark[disabled]:focus,.mui-btn--dark[disabled]:hover{color:#FFF;background-color:#424242}.mui-btn--dark.mui-btn--flat{color:#424242;background-color:transparent}.mui-btn--dark.mui-btn--flat:active,.mui-btn--dark.mui-btn--flat:focus,.mui-btn--dark.mui-btn--flat:hover{color:#424242;background-color:#f2f2f2}.mui-btn--dark.mui-btn--flat[disabled]:active,.mui-btn--dark.mui-btn--flat[disabled]:focus,.mui-btn--dark.mui-btn--flat[disabled]:hover{color:#424242;background-color:transparent}.mui-btn--danger{color:#FFF;background-color:#F44336}.mui-btn--danger:active,.mui-btn--danger:focus,.mui-btn--danger:hover{color:#FFF;background-color:#f55a4e}.mui-btn--danger[disabled]:active,.mui-btn--danger[disabled]:focus,.mui-btn--danger[disabled]:hover{color:#FFF;background-color:#F44336}.mui-btn--danger.mui-btn--flat{color:#F44336;background-color:transparent}.mui-btn--danger.mui-btn--flat:active,.mui-btn--danger.mui-btn--flat:focus,.mui-btn--danger.mui-btn--flat:hover{color:#F44336;background-color:#f2f2f2}.mui-btn--danger.mui-btn--flat[disabled]:active,.mui-btn--danger.mui-btn--flat[disabled]:focus,.mui-btn--danger.mui-btn--flat[disabled]:hover{color:#F44336;background-color:transparent}.mui-btn--accent{color:#FFF;background-color:#FF4081}.mui-btn--accent:active,.mui-btn--accent:focus,.mui-btn--accent:hover{color:#FFF;background-color:#ff5a92}.mui-btn--accent[disabled]:active,.mui-btn--accent[disabled]:focus,.mui-btn--accent[disabled]:hover{color:#FFF;background-color:#FF4081}.mui-btn--accent.mui-btn--flat{color:#FF4081;background-color:transparent}.mui-btn--accent.mui-btn--flat:active,.mui-btn--accent.mui-btn--flat:focus,.mui-btn--accent.mui-btn--flat:hover{color:#FF4081;background-color:#f2f2f2}.mui-btn--accent.mui-btn--flat[disabled]:active,.mui-btn--accent.mui-btn--flat[disabled]:focus,.mui-btn--accent.mui-btn--flat[disabled]:hover{color:#FF4081;background-color:transparent}.mui-btn--small{height:30.6px;line-height:30.6px;padding:0 16px;font-size:13px}.mui-btn--large{height:54px;line-height:54px;padding:0 26px;font-size:14px}.mui-btn--fab.mui-btn--small{width:44px;height:44px;line-height:44px}.mui-btn--fab.mui-btn--large{width:75px;height:75px;line-height:75px}.mui-checkbox,.mui-radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.mui-checkbox>label,.mui-radio>label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio],.mui-radio>label>input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px}.mui-checkbox+.mui-checkbox,.mui-radio+.mui-radio{margin-top:-5px}.mui-checkbox--inline,.mui-radio--inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.mui-checkbox--inline>input[type=checkbox],.mui-checkbox--inline>input[type=radio],.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox--inline>label>input[type=radio],.mui-radio--inline>input[type=checkbox],.mui-radio--inline>input[type=radio],.mui-radio--inline>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio]{margin:4px 0 0;line-height:normal}.mui-checkbox--inline+.mui-checkbox--inline,.mui-radio--inline+.mui-radio--inline{margin-top:0;margin-left:10px}.mui-container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container:after,.mui-container:before{content:\" \";display:table}.mui-container:after{clear:both}@media (min-width:544px){.mui-container{max-width:570px}}@media (min-width:768px){.mui-container{max-width:740px}}@media (min-width:992px){.mui-container{max-width:960px}}@media (min-width:1200px){.mui-container{max-width:1170px}}.mui-container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container-fluid:after,.mui-container-fluid:before{content:\" \";display:table}.mui-container-fluid:after{clear:both}.mui-divider{display:block;height:1px;background-color:rgba(0,0,0,.12)}.mui--divider-top{border-top:1px solid rgba(0,0,0,.12)}.mui--divider-bottom{border-bottom:1px solid rgba(0,0,0,.12)}.mui--divider-left{border-left:1px solid rgba(0,0,0,.12)}.mui--divider-right{border-right:1px solid rgba(0,0,0,.12)}.mui-dropdown{display:inline-block;position:relative}[data-mui-toggle=dropdown]{animation-duration:.1ms;animation-name:mui-node-inserted;outline:0}.mui-dropdown__menu{position:absolute;top:100%;left:0;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#FFF;border-radius:2px;z-index:1;background-clip:padding-box}.mui-dropdown__menu.mui--is-open{display:block}.mui-dropdown__menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);white-space:nowrap}.mui-dropdown__menu>li>a:focus,.mui-dropdown__menu>li>a:hover{text-decoration:none;color:rgba(0,0,0,.87);background-color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a,.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;cursor:not-allowed}.mui-dropdown__menu--right{left:auto;right:0}@media (min-width:544px){.mui-form--inline>.mui-textfield{display:inline-block;margin-bottom:0}.mui-form--inline>.mui-checkbox,.mui-form--inline>.mui-radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.mui-form--inline>.mui-checkbox>label,.mui-form--inline>.mui-radio>label{padding-left:0}.mui-form--inline>.mui-checkbox>label>input[type=checkbox],.mui-form--inline>.mui-radio>label>input[type=radio]{position:relative;margin-left:0}.mui-form--inline>.mui-select{display:inline-block}.mui-form--inline>.mui-btn{margin-bottom:0;margin-top:0;vertical-align:bottom}}.mui-row{margin-left:-15px;margin-right:-15px}.mui-row:after,.mui-row:before{content:\" \";display:table}.mui-row:after{clear:both}.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9,.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9,.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9,.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{min-height:1px;padding-left:15px;padding-right:15px}.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{float:left}.mui-col-xs-1{width:8.33333%}.mui-col-xs-2{width:16.66667%}.mui-col-xs-3{width:25%}.mui-col-xs-4{width:33.33333%}.mui-col-xs-5{width:41.66667%}.mui-col-xs-6{width:50%}.mui-col-xs-7{width:58.33333%}.mui-col-xs-8{width:66.66667%}.mui-col-xs-9{width:75%}.mui-col-xs-10{width:83.33333%}.mui-col-xs-11{width:91.66667%}.mui-col-xs-12{width:100%}.mui-col-xs-offset-0{margin-left:0}.mui-col-xs-offset-1{margin-left:8.33333%}.mui-col-xs-offset-2{margin-left:16.66667%}.mui-col-xs-offset-3{margin-left:25%}.mui-col-xs-offset-4{margin-left:33.33333%}.mui-col-xs-offset-5{margin-left:41.66667%}.mui-col-xs-offset-6{margin-left:50%}.mui-col-xs-offset-7{margin-left:58.33333%}.mui-col-xs-offset-8{margin-left:66.66667%}.mui-col-xs-offset-9{margin-left:75%}.mui-col-xs-offset-10{margin-left:83.33333%}.mui-col-xs-offset-11{margin-left:91.66667%}.mui-col-xs-offset-12{margin-left:100%}@media (min-width:544px){.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9{float:left}.mui-col-sm-1{width:8.33333%}.mui-col-sm-2{width:16.66667%}.mui-col-sm-3{width:25%}.mui-col-sm-4{width:33.33333%}.mui-col-sm-5{width:41.66667%}.mui-col-sm-6{width:50%}.mui-col-sm-7{width:58.33333%}.mui-col-sm-8{width:66.66667%}.mui-col-sm-9{width:75%}.mui-col-sm-10{width:83.33333%}.mui-col-sm-11{width:91.66667%}.mui-col-sm-12{width:100%}.mui-col-sm-offset-0{margin-left:0}.mui-col-sm-offset-1{margin-left:8.33333%}.mui-col-sm-offset-2{margin-left:16.66667%}.mui-col-sm-offset-3{margin-left:25%}.mui-col-sm-offset-4{margin-left:33.33333%}.mui-col-sm-offset-5{margin-left:41.66667%}.mui-col-sm-offset-6{margin-left:50%}.mui-col-sm-offset-7{margin-left:58.33333%}.mui-col-sm-offset-8{margin-left:66.66667%}.mui-col-sm-offset-9{margin-left:75%}.mui-col-sm-offset-10{margin-left:83.33333%}.mui-col-sm-offset-11{margin-left:91.66667%}.mui-col-sm-offset-12{margin-left:100%}}@media (min-width:768px){.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9{float:left}.mui-col-md-1{width:8.33333%}.mui-col-md-2{width:16.66667%}.mui-col-md-3{width:25%}.mui-col-md-4{width:33.33333%}.mui-col-md-5{width:41.66667%}.mui-col-md-6{width:50%}.mui-col-md-7{width:58.33333%}.mui-col-md-8{width:66.66667%}.mui-col-md-9{width:75%}.mui-col-md-10{width:83.33333%}.mui-col-md-11{width:91.66667%}.mui-col-md-12{width:100%}.mui-col-md-offset-0{margin-left:0}.mui-col-md-offset-1{margin-left:8.33333%}.mui-col-md-offset-2{margin-left:16.66667%}.mui-col-md-offset-3{margin-left:25%}.mui-col-md-offset-4{margin-left:33.33333%}.mui-col-md-offset-5{margin-left:41.66667%}.mui-col-md-offset-6{margin-left:50%}.mui-col-md-offset-7{margin-left:58.33333%}.mui-col-md-offset-8{margin-left:66.66667%}.mui-col-md-offset-9{margin-left:75%}.mui-col-md-offset-10{margin-left:83.33333%}.mui-col-md-offset-11{margin-left:91.66667%}.mui-col-md-offset-12{margin-left:100%}}@media (min-width:992px){.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9{float:left}.mui-col-lg-1{width:8.33333%}.mui-col-lg-2{width:16.66667%}.mui-col-lg-3{width:25%}.mui-col-lg-4{width:33.33333%}.mui-col-lg-5{width:41.66667%}.mui-col-lg-6{width:50%}.mui-col-lg-7{width:58.33333%}.mui-col-lg-8{width:66.66667%}.mui-col-lg-9{width:75%}.mui-col-lg-10{width:83.33333%}.mui-col-lg-11{width:91.66667%}.mui-col-lg-12{width:100%}.mui-col-lg-offset-0{margin-left:0}.mui-col-lg-offset-1{margin-left:8.33333%}.mui-col-lg-offset-2{margin-left:16.66667%}.mui-col-lg-offset-3{margin-left:25%}.mui-col-lg-offset-4{margin-left:33.33333%}.mui-col-lg-offset-5{margin-left:41.66667%}.mui-col-lg-offset-6{margin-left:50%}.mui-col-lg-offset-7{margin-left:58.33333%}.mui-col-lg-offset-8{margin-left:66.66667%}.mui-col-lg-offset-9{margin-left:75%}.mui-col-lg-offset-10{margin-left:83.33333%}.mui-col-lg-offset-11{margin-left:91.66667%}.mui-col-lg-offset-12{margin-left:100%}}@media (min-width:1200px){.mui-col-xl-1,.mui-col-xl-10,.mui-col-xl-11,.mui-col-xl-12,.mui-col-xl-2,.mui-col-xl-3,.mui-col-xl-4,.mui-col-xl-5,.mui-col-xl-6,.mui-col-xl-7,.mui-col-xl-8,.mui-col-xl-9{float:left}.mui-col-xl-1{width:8.33333%}.mui-col-xl-2{width:16.66667%}.mui-col-xl-3{width:25%}.mui-col-xl-4{width:33.33333%}.mui-col-xl-5{width:41.66667%}.mui-col-xl-6{width:50%}.mui-col-xl-7{width:58.33333%}.mui-col-xl-8{width:66.66667%}.mui-col-xl-9{width:75%}.mui-col-xl-10{width:83.33333%}.mui-col-xl-11{width:91.66667%}.mui-col-xl-12{width:100%}.mui-col-xl-offset-0{margin-left:0}.mui-col-xl-offset-1{margin-left:8.33333%}.mui-col-xl-offset-2{margin-left:16.66667%}.mui-col-xl-offset-3{margin-left:25%}.mui-col-xl-offset-4{margin-left:33.33333%}.mui-col-xl-offset-5{margin-left:41.66667%}.mui-col-xl-offset-6{margin-left:50%}.mui-col-xl-offset-7{margin-left:58.33333%}.mui-col-xl-offset-8{margin-left:66.66667%}.mui-col-xl-offset-9{margin-left:75%}.mui-col-xl-offset-10{margin-left:83.33333%}.mui-col-xl-offset-11{margin-left:91.66667%}.mui-col-xl-offset-12{margin-left:100%}}.mui-panel{padding:15px;margin-bottom:20px;border-radius:0;background-color:#FFF;box-shadow:0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}.mui-panel:after,.mui-panel:before{content:\" \";display:table}.mui-panel:after{clear:both}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-panel{box-shadow:0 -1px 2px 0 rgba(0,0,0,.12),-1px 0 2px 0 rgba(0,0,0,.12),0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}}.mui-select{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-select:focus{outline:0}.mui-select:focus>select{height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;height:32px;width:100%;appearance:none;-webkit-appearance:none;-moz-appearance:none;outline:0;border:none;border-bottom:1px solid rgba(0,0,0,.26);border-radius:0;box-shadow:none;background-color:transparent;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iNiIgd2lkdGg9IjEwIj48cG9seWdvbiBwb2ludHM9IjAsMCAxMCwwIDUsNiIgc3R5bGU9ImZpbGw6cmdiYSgwLDAsMCwuMjQpOyIvPjwvc3ZnPg==);background-repeat:no-repeat;background-position:right center;cursor:pointer;color:rgba(0,0,0,.87);font-size:16px;padding:0 25px 0 0}.mui-select>select::-ms-expand{display:none}.mui-select>select:focus{outline:0;height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select:disabled{color:rgba(0,0,0,.38);cursor:not-allowed;background-color:transparent;opacity:1}.mui-select__menu{position:absolute;z-index:2;min-width:100%;overflow-y:auto;padding:8px 0;background-color:#FFF;font-size:16px}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-select__menu{border-left:1px solid rgba(0,0,0,.12);border-top:1px solid rgba(0,0,0,.12)}}.mui-select__menu>div{padding:0 22px;height:42px;line-height:42px;cursor:pointer;white-space:nowrap}.mui-select__menu>div:hover{background-color:#E0E0E0}.mui-select__menu>div.mui--is-selected{background-color:#EEE}th{text-align:left}.mui-table{width:100%;max-width:100%;margin-bottom:20px}.mui-table>tbody>tr>td,.mui-table>tbody>tr>th,.mui-table>tfoot>tr>td,.mui-table>tfoot>tr>th,.mui-table>thead>tr>td,.mui-table>thead>tr>th{padding:10px;line-height:1.429}.mui-table>thead>tr>th{border-bottom:2px solid rgba(0,0,0,.12);font-weight:700}.mui-table>tbody+tbody{border-top:2px solid rgba(0,0,0,.12)}.mui-table.mui-table--bordered>tbody>tr>td{border-bottom:1px solid rgba(0,0,0,.12)}.mui-tabs__bar{list-style:none;padding-left:0;margin-bottom:0;background-color:transparent;white-space:nowrap;overflow-x:auto}.mui-tabs__bar>li{display:inline-block}.mui-tabs__bar>li>a{display:block;white-space:nowrap;text-transform:uppercase;font-weight:500;font-size:14px;color:rgba(0,0,0,.87);cursor:default;height:48px;line-height:48px;padding-left:24px;padding-right:24px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-tabs__bar>li>a:hover{text-decoration:none}.mui-tabs__bar>li.mui--is-active{border-bottom:2px solid #2196F3}.mui-tabs__bar>li.mui--is-active>a{color:#2196F3}.mui-tabs__bar.mui-tabs__bar--justified{display:table;width:100%;table-layout:fixed}.mui-tabs__bar.mui-tabs__bar--justified>li{display:table-cell}.mui-tabs__bar.mui-tabs__bar--justified>li>a{text-align:center;padding-left:0;padding-right:0}.mui-tabs__pane{display:none}.mui-tabs__pane.mui--is-active{display:block}[data-mui-toggle=tab]{animation-duration:.1ms;animation-name:mui-node-inserted}.mui-textfield{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-textfield>label{position:absolute;top:0;display:block;width:100%;color:rgba(0,0,0,.54);font-size:12px;font-weight:400;line-height:15px;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.mui-textfield>textarea{padding-top:5px}.mui-textfield>input,.mui-textfield>textarea{display:block}.mui-textfield>input:focus~label,.mui-textfield>textarea:focus~label{color:#2196F3}.mui-textfield--float-label>label{position:absolute;transform:translate(0,15px);font-size:16px;line-height:32px;color:rgba(0,0,0,.26);text-overflow:clip;cursor:text;pointer-events:none}.mui-textfield--float-label>input:focus~label,.mui-textfield--float-label>textarea:focus~label{transform:translate(0,0);font-size:12px;line-height:15px;text-overflow:ellipsis}.mui-textfield--float-label>input:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>input:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>input:not(:focus)[value]:not([value=\"\"]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>textarea:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus)[value]:not([value=\"\"]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:rgba(0,0,0,.54);font-size:12px;line-height:15px;transform:translate(0,0);text-overflow:ellipsis}.mui-textfield--wrap-label{display:table;width:100%;padding-top:0}.mui-textfield--wrap-label:not(.mui-textfield--float-label)>label{display:table-header-group;position:static;white-space:normal;overflow-x:visible}.mui-textfield>input,.mui-textfield>textarea{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;background-color:transparent;color:rgba(0,0,0,.87);border:none;border-bottom:1px solid rgba(0,0,0,.26);outline:0;width:100%;font-size:16px;padding:0;box-shadow:none;border-radius:0;background-image:none}.mui-textfield>input:focus,.mui-textfield>textarea:focus{border-color:#2196F3;border-width:2px}.mui-textfield>input:-moz-read-only,.mui-textfield>input:disabled,.mui-textfield>textarea:-moz-read-only,.mui-textfield>textarea:disabled{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input:disabled,.mui-textfield>input:read-only,.mui-textfield>textarea:disabled,.mui-textfield>textarea:read-only{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input::-webkit-input-placeholder,.mui-textfield>textarea::-webkit-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::-moz-placeholder,.mui-textfield>textarea::-moz-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input:-ms-input-placeholder,.mui-textfield>textarea:-ms-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::placeholder,.mui-textfield>textarea::placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input{height:32px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>textarea{min-height:64px}.mui-textfield>textarea[rows]:not([rows=\"2\"]):focus{margin-bottom:-1px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=\"\"]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=\"\"]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):not(:required),.mui-textfield>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=\"\"]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required),.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=\"\"]):not(.mui--is-empty):not(.mui--is-not-empty){border-color:#F44336;border-width:2px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=\"\"]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=\"\"]):not(.mui--is-empty):not(.mui--is-not-empty){height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required)~label,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:invalid:not(:focus):required[value]:not([value=\"\"]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=\"\"]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):not(:required)~label,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=\"\"]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=\"\"]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:#F44336}.mui-textfield:not(.mui-textfield--float-label)>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label{color:#F44336}@keyframes mui-node-inserted{from{opacity:.99}to{opacity:1}}.mui--no-transition{transition:none!important}.mui--no-user-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.mui--text-left{text-align:left!important}.mui--text-right{text-align:right!important}.mui--text-center{text-align:center!important}.mui--text-justify{text-align:justify!important}.mui--text-nowrap{white-space:nowrap!important}.mui--align-baseline{vertical-align:baseline!important}.mui--align-top{vertical-align:top!important}.mui--align-middle{vertical-align:middle!important}.mui--align-bottom{vertical-align:bottom!important}.mui--text-dark{color:rgba(0,0,0,.87)}.mui--text-dark-secondary{color:rgba(0,0,0,.54)}.mui--text-dark-hint{color:rgba(0,0,0,.38)}.mui--text-light{color:#FFF}.mui--text-light-secondary{color:rgba(255,255,255,.7)}.mui--text-light-hint{color:rgba(255,255,255,.3)}.mui--text-accent{color:rgba(255,64,129,.87)}.mui--text-accent-secondary{color:rgba(255,64,129,.54)}.mui--text-accent-hint{color:rgba(255,64,129,.38)}.mui--text-black{color:#000}.mui--text-white{color:#FFF}.mui--text-danger{color:#F44336}.mui-list--unstyled{padding-left:0;list-style:none}.mui-list--inline{padding-left:0;list-style:none;margin-left:-5px}.mui-list--inline>li{display:inline-block;padding-left:5px;padding-right:5px}.mui--z1,.mui-dropdown__menu,.mui-select__menu{box-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24)}.mui--z2{box-shadow:0 3px 6px rgba(0,0,0,.16),0 3px 6px rgba(0,0,0,.23)}.mui--z3{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}.mui--z4{box-shadow:0 14px 28px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.22)}.mui--z5{box-shadow:0 19px 38px rgba(0,0,0,.3),0 15px 12px rgba(0,0,0,.22)}.mui--clearfix:after,.mui--clearfix:before{content:\" \";display:table}.mui--clearfix:after{clear:both}.mui--pull-right{float:right!important}.mui--pull-left{float:left!important}.mui--hide{display:none!important}.mui--show{display:block!important}.mui--invisible{visibility:hidden}.mui--overflow-hidden{overflow:hidden!important}.mui--overflow-hidden-x{overflow-x:hidden!important}.mui--overflow-hidden-y{overflow-y:hidden!important}.mui--visible-lg-block,.mui--visible-lg-inline,.mui--visible-lg-inline-block,.mui--visible-md-block,.mui--visible-md-inline,.mui--visible-md-inline-block,.mui--visible-sm-block,.mui--visible-sm-inline,.mui--visible-sm-inline-block,.mui--visible-xl-block,.mui--visible-xl-inline,.mui--visible-xl-inline-block,.mui--visible-xs-block,.mui--visible-xs-inline,.mui--visible-xs-inline-block{display:none!important}@media (max-width:543px){.mui-visible-xs{display:block!important}table.mui-visible-xs{display:table}tr.mui-visible-xs{display:table-row!important}td.mui-visible-xs,th.mui-visible-xs{display:table-cell!important}.mui--visible-xs-block{display:block!important}.mui--visible-xs-inline{display:inline!important}.mui--visible-xs-inline-block{display:inline-block!important}}@media (min-width:544px) and (max-width:767px){.mui-visible-sm{display:block!important}table.mui-visible-sm{display:table}tr.mui-visible-sm{display:table-row!important}td.mui-visible-sm,th.mui-visible-sm{display:table-cell!important}.mui--visible-sm-block{display:block!important}.mui--visible-sm-inline{display:inline!important}.mui--visible-sm-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.mui-visible-md{display:block!important}table.mui-visible-md{display:table}tr.mui-visible-md{display:table-row!important}td.mui-visible-md,th.mui-visible-md{display:table-cell!important}.mui--visible-md-block{display:block!important}.mui--visible-md-inline{display:inline!important}.mui--visible-md-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.mui-visible-lg{display:block!important}table.mui-visible-lg{display:table}tr.mui-visible-lg{display:table-row!important}td.mui-visible-lg,th.mui-visible-lg{display:table-cell!important}.mui--visible-lg-block{display:block!important}.mui--visible-lg-inline{display:inline!important}.mui--visible-lg-inline-block{display:inline-block!important}}@media (min-width:1200px){.mui-visible-xl{display:block!important}table.mui-visible-xl{display:table}tr.mui-visible-xl{display:table-row!important}td.mui-visible-xl,th.mui-visible-xl{display:table-cell!important}.mui--visible-xl-block{display:block!important}.mui--visible-xl-inline{display:inline!important}.mui--visible-xl-inline-block{display:inline-block!important}}@media (max-width:543px){.mui--hidden-xs{display:none!important}}@media (min-width:544px) and (max-width:767px){.mui--hidden-sm{display:none!important}}@media (min-width:768px) and (max-width:991px){.mui--hidden-md{display:none!important}}@media (min-width:992px) and (max-width:1199px){.mui--hidden-lg{display:none!important}}@media (min-width:1200px){.mui--hidden-xl{display:none!important}}body.mui-body--scroll-lock{overflow:hidden!important}#mui-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:99999999;background-color:rgba(0,0,0,.2);overflow:auto}.mui-ripple-effect{position:absolute;border-radius:50%;pointer-events:none;opacity:0;animation:mui-ripple-animation 2s}@keyframes mui-ripple-animation{from{transform:scale(1);opacity:.4}to{transform:scale(100);opacity:0}}.mui-btn>.mui-ripple-effect{background-color:#a6a6a6}.mui-btn--primary>.mui-ripple-effect{background-color:#FFF}.mui-btn--dark>.mui-ripple-effect{background-color:#FFF}.mui-btn--danger>.mui-ripple-effect{background-color:#FFF}.mui-btn--accent>.mui-ripple-effect{background-color:#FFF}.mui-btn--flat>.mui-ripple-effect{background-color:#a6a6a6}.mui--text-display4{font-weight:300;font-size:112px;line-height:112px}.mui--text-display3{font-weight:400;font-size:56px;line-height:56px}.mui--text-display2{font-weight:400;font-size:45px;line-height:48px}.mui--text-display1,h1{font-weight:400;font-size:34px;line-height:40px}.mui--text-headline,h2{font-weight:400;font-size:24px;line-height:32px}.mui--text-title,h3{font-weight:400;font-size:20px;line-height:28px}.mui--text-subhead,h4{font-weight:400;font-size:16px;line-height:24px}.mui--text-body2,h5{font-weight:500;font-size:14px;line-height:24px}.mui--text-body1{font-weight:400;font-size:14px;line-height:20px}.mui--text-caption{font-weight:400;font-size:12px;line-height:16px}.mui--text-menu{font-weight:500;font-size:13px;line-height:17px}.mui--text-button{font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase}"; + +},{}],7:[function(require,module,exports){ +/** + * MUI WebComponents buttons module + * @module webcomponents/buttons + */ + +'use strict'; + + +var config = require('../js/config'), + jqLite = require('../js/lib/jqLite'), + btnClass = 'mui-btn', + btnTagName = btnClass, + btnAttrs = {style: 1, color: 1, size: 1}; + + +/** + * Class representing a button. + * @class + */ +var BtnProto = Object.create(HTMLElement.prototype); + + +/** Button createdCallback */ +BtnProto.createdCallback = function() { + var root = this.createShadowRoot(), + innerEl = document.createElement('button'), + cls = btnClass, + k, + v; + + // populate innerEl + for (var i=0; i < this.childNodes.length; i++) { + innerEl.appendChild(this.childNodes[i]); + } + + // style|color|size + for (k in btnAttrs) { + v = this.getAttribute(k); + if (v !== 'default') cls += ' ' + btnClass + '--' + v; + } + + jqLite.addClass(innerEl, cls); + + // disabled + if (this.getAttribute('disabled') !== null) { + innerEl.setAttribute('disabled', 'disabled'); + } + + root.appendChild(_getStyleEl().cloneNode(true)); + root.appendChild(innerEl); +}; + + + + +// ============================================================================ +// UTILITIES +// ============================================================================ + +var styleEl; + + +/** + * Get or create a style element. + * @function + */ +function _getStyleEl() { + if (styleEl === undefined) { + styleEl = document.createElement('style'); + styleEl.innerHTML = require('mui.min.css'); + } + + return styleEl; +} + + +/** Define module API */ +module.exports = { + /** Register module elements */ + registerElements: function() { + var BtnElement = document.registerElement(btnTagName, { + prototype: BtnProto + }); + + return { + BtnElement: BtnElement + } + } +}; + +},{"../js/config":2,"../js/lib/jqLite":3,"mui.min.css":6}],8:[function(require,module,exports){ +/** + * MUI WebComponents forms module + * @module webcomponents/forms + */ + +'use strict'; + + +var jqLite = require('../js/lib/jqLite'), + muiTextfield = require('../js/textfield'), + textfieldClass = 'mui-textfield', + floatingMod = '--float-label', + textfieldTagName = textfieldClass; + + +/** + * Class representing a Textfield element. + * @class + */ +var TextfieldProto = Object.create(HTMLElement.prototype); + + +/** Textfield createdCallback */ +TextfieldProto.createdCallback = function() { + var root = this.createShadowRoot(), + innerEl = document.createElement('div'), + cls; + + var attrs = { + type: this.getAttribute('type') || 'text', + value: this.getAttribute('value'), + placeholder: this.getAttribute('placeholder'), + label: this.getAttribute('label'), + floating: this.getAttribute('floating') + }; + + // set class + cls = textfieldClass; + if (attrs.floating !== null) cls += ' ' + textfieldClass + floatingMod; + + innerEl.setAttribute('class', cls); + + // add input element + innerEl.appendChild(_createInputEl(attrs)); + + // label element + if (attrs.label) { + var labelEl = _createLabelEl(attrs); + innerEl.appendChild(labelEl); + } + + // add to root + root.appendChild(_getStyleEl().cloneNode(true)); + root.appendChild(innerEl); +} + + + + +// ============================================================================ +// UTILITIES +// ============================================================================ + +var styleEl; + + +/** + * Get or create style + * @function + */ +function _getStyleEl() { + if (styleEl === undefined) { + styleEl = document.createElement('style'); + styleEl.innerHTML = require('mui.min.css'); + } + + return styleEl; +} + + +/** + * Create input element. + * @function + */ +function _createInputEl(attrs) { + var inputEl; + + // input element + if (attrs.type === 'textarea') { + inputEl = document.createElement('textarea'); + if (attrs.value) inputEl.appendChild(document.createTextNode(attrs.value)); + } else { + inputEl = document.createElement('input'); + inputEl.setAttribute('type', attrs.type); + if (attrs.value) inputEl.setAttribute('value', attrs.value); + } + + if (attrs.placeholder) { + inputEl.setAttribute('placeholder', attrs.placeholder); + } + + // add event listeners + muiTextfield.initialize(inputEl); + + return inputEl; +} + + +/** + * Create label element. + * @function + */ +function _createLabelEl(attrs) { + var labelEl = document.createElement('label'); + labelEl.appendChild(document.createTextNode(attrs.label)); + + return labelEl; +} + + +/** Define module API */ +module.exports = { + /** Register module elements */ + registerElements: function() { + var TextfieldElement = document.registerElement(textfieldTagName, { + prototype: TextfieldProto + }); + + return { + TextfieldElement: TextfieldElement + }; + } +}; + +},{"../js/lib/jqLite":3,"../js/textfield":5,"mui.min.css":6}]},{},[1]) \ No newline at end of file diff --git a/www/libs/mui/packages/cdn/webcomponents/mui-webcomponents.min.js b/www/libs/mui/packages/cdn/webcomponents/mui-webcomponents.min.js new file mode 100644 index 0000000..3b339e1 --- /dev/null +++ b/www/libs/mui/packages/cdn/webcomponents/mui-webcomponents.min.js @@ -0,0 +1,2 @@ +!function i(t,e,o){function n(a,m){if(!e[a]){if(!t[a]){var r="function"==typeof require&&require;if(!m&&r)return r(a,!0);if(l)return l(a,!0);throw new Error("Cannot find module '"+a+"'")}var u=e[a]={exports:{}};t[a][0].call(u.exports,function(i){var e=t[a][1][i];return n(e?e:i)},u,u.exports,i,t,e,o)}return e[a].exports}for(var l="function"==typeof require&&require,a=0;a-1:!1}function a(i){if(void 0===i)return"undefined";var t=Object.prototype.toString.call(i);if(0===t.indexOf("[object "))return t.slice(8,-1).toLowerCase();throw new Error("MUI: Could not understand type: "+t)}function m(i,t,e,o){o=void 0===o?!1:o,i.addEventListener(t,e,o);var n=i._muiEventCache=i._muiEventCache||{};n[t]=n[t]||[],n[t].push([e,o])}function r(i,t,e,o){o=void 0===o?!1:o;var n,l,a=i._muiEventCache=i._muiEventCache||{},m=a[t]||[];for(l=m.length;l--;)n=m[l],(void 0===e||n[0]===e&&n[1]===o)&&(m.splice(l,1),i.removeEventListener(t,n[0],n[1]))}function u(i,t,e,o){m(i,t,function n(o){e&&e.apply(this,arguments),r(i,t,n)},o)}function d(i,t){var e=window;if(void 0===t){if(i===e){var o=document.documentElement;return(e.pageXOffset||o.scrollLeft)-(o.clientLeft||0)}return i.scrollLeft}i===e?e.scrollTo(t,s(e)):i.scrollLeft=t}function s(i,t){var e=window;if(void 0===t){if(i===e){var o=document.documentElement;return(e.pageYOffset||o.scrollTop)-(o.clientTop||0)}return i.scrollTop}i===e?e.scrollTo(d(e),t):i.scrollTop=t}function c(i){var t=window,e=i.getBoundingClientRect(),o=s(t),n=d(t);return{top:e.top+o,left:e.left+n,height:e.height,width:e.width}}function p(i){var t=!1,e=!0,o=document,n=o.defaultView,l=o.documentElement,a=o.addEventListener?"addEventListener":"attachEvent",m=o.addEventListener?"removeEventListener":"detachEvent",r=o.addEventListener?"":"on",u=function(e){"readystatechange"==e.type&&"complete"!=o.readyState||(("load"==e.type?n:o)[m](r+e.type,u,!1),!t&&(t=!0)&&i.call(n,e.type||e))},d=function(){try{l.doScroll("left")}catch(i){return void setTimeout(d,50)}u("poll")};if("complete"==o.readyState)i.call(n,"lazy");else{if(o.createEventObject&&l.doScroll){try{e=!n.frameElement}catch(s){}e&&d()}o[a](r+"DOMContentLoaded",u,!1),o[a](r+"readystatechange",u,!1),n[a](r+"load",u,!1)}}function b(i,t){if(t&&i.setAttribute){for(var e,o=f(i),n=t.split(" "),l=0;l=0;)o=o.replace(" "+e+" "," ");i.setAttribute("class",o.trim())}}function f(i){var t=(i.getAttribute("class")||"").replace(/[\n\t]/g,"");return" "+t+" "}function x(i){return i.replace(v,function(i,t,e,o){return o?e.toUpperCase():e}).replace(y,"Moz$1")}function g(i,t,e){var o;return o=e.getPropertyValue(t),""!==o||i.ownerDocument||(o=i.style[x(t)]),o}var h,v=/([\:\-\_]+(.))/g,y=/^moz([A-Z])/;h={multiple:!0,selected:!0,checked:!0,disabled:!0,readonly:!0,required:!0,open:!0},t.exports={addClass:o,css:n,hasClass:l,off:r,offset:c,on:m,one:u,ready:p,removeClass:b,type:a,scrollLeft:d,scrollTop:s}},{}],4:[function(i,t,e){"use strict";function o(){var i=window;if(x.debug&&"undefined"!=typeof i.console)try{i.console.log.apply(i.console,arguments)}catch(t){var e=Array.prototype.slice.call(arguments);i.console.log(e.join("\n"))}}function n(i){var t,e=document;t=e.head||e.getElementsByTagName("head")[0]||e.documentElement;var o=e.createElement("style");return o.type="text/css",o.styleSheet?o.styleSheet.cssText=i:o.appendChild(e.createTextNode(i)),t.insertBefore(o,t.firstChild),o}function l(i,t){if(!t)throw new Error("MUI: "+i);"undefined"!=typeof console&&console.error("MUI Warning: "+i)}function a(i){if(h.push(i),void 0===h._initialized){var t=document;g.on(t,"animationstart",m),g.on(t,"mozAnimationStart",m),g.on(t,"webkitAnimationStart",m),h._initialized=!0}}function m(i){if("mui-node-inserted"===i.animationName)for(var t=i.target,e=h.length-1;e>=0;e--)h[e](t)}function r(i){var t="";for(var e in i)t+=i[e]?e+" ":"";return t.trim()}function u(){if(void 0!==f)return f;var i=document.createElement("x");return i.style.cssText="pointer-events:auto",f="auto"===i.style.pointerEvents}function d(i,t){return function(){i[t].apply(i,arguments)}}function s(i,t,e,o,n){var l,a=document.createEvent("HTMLEvents"),e=void 0!==e?e:!0,o=void 0!==o?o:!0;if(a.initEvent(t,e,o),n)for(l in n)a[l]=n[l];return i&&i.dispatchEvent(a),a}function c(){if(v+=1,1===v){var i=window,t=document;b={left:g.scrollLeft(i),top:g.scrollTop(i)},g.addClass(t.body,y),i.scrollTo(b.left,b.top)}}function p(){if(0!==v&&(v-=1,0===v)){var i=window,t=document;g.removeClass(t.body,y),i.scrollTo(b.left,b.top)}}var b,f,x=i("../config"),g=i("./jqLite"),h=[],v=0,y="mui-body--scroll-lock";t.exports={callback:d,classNames:r,disableScrollLock:p,dispatchEvent:s,enableScrollLock:c,log:o,loadStyle:n,onNodeInserted:a,raiseError:l,supportsPointerEvents:u}},{"../config":2,"./jqLite":3}],5:[function(i,t,e){"use strict";function o(i){i._muiTextfield!==!0&&(i._muiTextfield=!0,i.value.length?l.addClass(i,u):l.addClass(i,r),l.on(i,"input",n),l.on(i,"change",n),l.on(i,"focus",function(){l.addClass(this,d)}))}function n(){var i=this;i.value.length?(l.removeClass(i,r),l.addClass(i,u)):(l.removeClass(i,u),l.addClass(i,r)),l.addClass(i,d)}var l=i("./lib/jqLite"),a=i("./lib/util"),m=".mui-textfield > input, .mui-textfield > textarea",r="mui--is-empty",u="mui--is-not-empty",d="mui--is-dirty",s="mui-textfield--float-label";t.exports={initialize:o,initListeners:function(){for(var i=document,t=i.querySelectorAll(m),e=t.length-1;e>=0;e--)o(t[e]);a.onNodeInserted(function(i){"INPUT"!==i.tagName&&"TEXTAREA"!==i.tagName||o(i)}),setTimeout(function(){var i=".mui-textfield.mui-textfield--float-label > label {"+["-webkit-transition","-moz-transition","-o-transition","transition",""].join(":all .15s ease-out;")+"}";a.loadStyle(i)},150),a.supportsPointerEvents()===!1&&l.on(document,"click",function(i){var t=i.target;if("LABEL"===t.tagName&&l.hasClass(t.parentNode,s)){var e=t.previousElementSibling;e&&e.focus()}})}}},{"./lib/jqLite":3,"./lib/util":4}],6:[function(i,t,e){t.exports='/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-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{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}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{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{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-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:border-box}:after,:before{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:Arial,Verdana,Tahoma;font-size:14px;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);background-color:#FFF}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#2196F3;text-decoration:none}a:focus,a:hover{color:#1976D2;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}p{margin:0 0 10px}ol,ul{margin-top:0;margin-bottom:10px}figure{margin:0}img{vertical-align:middle}hr{margin-top:20px;margin-bottom:20px;border:0;height:1px;background-color:rgba(0,0,0,.12)}legend{display:block;width:100%;padding:0;margin-bottom:10px;font-size:21px;color:rgba(0,0,0,.87);line-height:inherit;border:0}input[type=search]{box-sizing:border-box;-webkit-appearance:none}input[type=checkbox]:focus,input[type=radio]:focus,input[type=file]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type=checkbox]:disabled,input[type=radio]:disabled{cursor:not-allowed}strong{font-weight:700}abbr[title]{cursor:help;border-bottom:1px dotted #2196F3}h1,h2,h3{margin-top:20px;margin-bottom:10px}h4,h5,h6{margin-top:10px;margin-bottom:10px}.mui--appbar-height{height:56px}.mui--appbar-min-height,.mui-appbar{min-height:56px}.mui--appbar-line-height{line-height:56px}.mui--appbar-top{top:56px}@media (orientation:landscape) and (max-height:480px){.mui--appbar-height{height:48px}.mui--appbar-min-height,.mui-appbar{min-height:48px}.mui--appbar-line-height{line-height:48px}.mui--appbar-top{top:48px}}@media (min-width:480px){.mui--appbar-height{height:64px}.mui--appbar-min-height,.mui-appbar{min-height:64px}.mui--appbar-line-height{line-height:64px}.mui--appbar-top{top:64px}}.mui-appbar{background-color:#2196F3;color:#FFF}.mui-btn{animation-duration:.1ms;animation-name:mui-node-inserted;font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase;color:rgba(0,0,0,.87);background-color:#FFF;transition:all .2s ease-in-out;display:inline-block;height:36px;padding:0 26px;margin-top:6px;margin-bottom:6px;border:none;border-radius:2px;cursor:pointer;-ms-touch-action:manipulation;touch-action:manipulation;background-image:none;text-align:center;line-height:36px;vertical-align:middle;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:14px;letter-spacing:.03em;position:relative;overflow:hidden}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{color:rgba(0,0,0,.87);background-color:#fff}.mui-btn[disabled]:active,.mui-btn[disabled]:focus,.mui-btn[disabled]:hover{color:rgba(0,0,0,.87);background-color:#FFF}.mui-btn.mui-btn--flat{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn.mui-btn--flat:active,.mui-btn.mui-btn--flat:focus,.mui-btn.mui-btn--flat:hover{color:rgba(0,0,0,.87);background-color:#f2f2f2}.mui-btn.mui-btn--flat[disabled]:active,.mui-btn.mui-btn--flat[disabled]:focus,.mui-btn.mui-btn--flat[disabled]:hover{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{outline:0;text-decoration:none;color:rgba(0,0,0,.87)}.mui-btn:focus,.mui-btn:hover{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:focus,.mui-btn:hover{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn.mui--is-disabled,.mui-btn:disabled{cursor:not-allowed;pointer-events:none;opacity:.6;box-shadow:none}.mui-btn+.mui-btn{margin-left:8px}.mui-btn--flat{background-color:transparent}.mui-btn--flat:active,.mui-btn--flat:focus,.mui-btn--flat:hover{box-shadow:none;background-color:#f2f2f2}.mui-btn--fab,.mui-btn--raised{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab,.mui-btn--raised{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn--fab{position:relative;padding:0;width:55px;height:55px;line-height:55px;border-radius:50%;z-index:1}.mui-btn--primary{color:#FFF;background-color:#2196F3}.mui-btn--primary:active,.mui-btn--primary:focus,.mui-btn--primary:hover{color:#FFF;background-color:#39a1f4}.mui-btn--primary[disabled]:active,.mui-btn--primary[disabled]:focus,.mui-btn--primary[disabled]:hover{color:#FFF;background-color:#2196F3}.mui-btn--primary.mui-btn--flat{color:#2196F3;background-color:transparent}.mui-btn--primary.mui-btn--flat:active,.mui-btn--primary.mui-btn--flat:focus,.mui-btn--primary.mui-btn--flat:hover{color:#2196F3;background-color:#f2f2f2}.mui-btn--primary.mui-btn--flat[disabled]:active,.mui-btn--primary.mui-btn--flat[disabled]:focus,.mui-btn--primary.mui-btn--flat[disabled]:hover{color:#2196F3;background-color:transparent}.mui-btn--dark{color:#FFF;background-color:#424242}.mui-btn--dark:active,.mui-btn--dark:focus,.mui-btn--dark:hover{color:#FFF;background-color:#4f4f4f}.mui-btn--dark[disabled]:active,.mui-btn--dark[disabled]:focus,.mui-btn--dark[disabled]:hover{color:#FFF;background-color:#424242}.mui-btn--dark.mui-btn--flat{color:#424242;background-color:transparent}.mui-btn--dark.mui-btn--flat:active,.mui-btn--dark.mui-btn--flat:focus,.mui-btn--dark.mui-btn--flat:hover{color:#424242;background-color:#f2f2f2}.mui-btn--dark.mui-btn--flat[disabled]:active,.mui-btn--dark.mui-btn--flat[disabled]:focus,.mui-btn--dark.mui-btn--flat[disabled]:hover{color:#424242;background-color:transparent}.mui-btn--danger{color:#FFF;background-color:#F44336}.mui-btn--danger:active,.mui-btn--danger:focus,.mui-btn--danger:hover{color:#FFF;background-color:#f55a4e}.mui-btn--danger[disabled]:active,.mui-btn--danger[disabled]:focus,.mui-btn--danger[disabled]:hover{color:#FFF;background-color:#F44336}.mui-btn--danger.mui-btn--flat{color:#F44336;background-color:transparent}.mui-btn--danger.mui-btn--flat:active,.mui-btn--danger.mui-btn--flat:focus,.mui-btn--danger.mui-btn--flat:hover{color:#F44336;background-color:#f2f2f2}.mui-btn--danger.mui-btn--flat[disabled]:active,.mui-btn--danger.mui-btn--flat[disabled]:focus,.mui-btn--danger.mui-btn--flat[disabled]:hover{color:#F44336;background-color:transparent}.mui-btn--accent{color:#FFF;background-color:#FF4081}.mui-btn--accent:active,.mui-btn--accent:focus,.mui-btn--accent:hover{color:#FFF;background-color:#ff5a92}.mui-btn--accent[disabled]:active,.mui-btn--accent[disabled]:focus,.mui-btn--accent[disabled]:hover{color:#FFF;background-color:#FF4081}.mui-btn--accent.mui-btn--flat{color:#FF4081;background-color:transparent}.mui-btn--accent.mui-btn--flat:active,.mui-btn--accent.mui-btn--flat:focus,.mui-btn--accent.mui-btn--flat:hover{color:#FF4081;background-color:#f2f2f2}.mui-btn--accent.mui-btn--flat[disabled]:active,.mui-btn--accent.mui-btn--flat[disabled]:focus,.mui-btn--accent.mui-btn--flat[disabled]:hover{color:#FF4081;background-color:transparent}.mui-btn--small{height:30.6px;line-height:30.6px;padding:0 16px;font-size:13px}.mui-btn--large{height:54px;line-height:54px;padding:0 26px;font-size:14px}.mui-btn--fab.mui-btn--small{width:44px;height:44px;line-height:44px}.mui-btn--fab.mui-btn--large{width:75px;height:75px;line-height:75px}.mui-checkbox,.mui-radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.mui-checkbox>label,.mui-radio>label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio],.mui-radio>label>input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px}.mui-checkbox+.mui-checkbox,.mui-radio+.mui-radio{margin-top:-5px}.mui-checkbox--inline,.mui-radio--inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.mui-checkbox--inline>input[type=checkbox],.mui-checkbox--inline>input[type=radio],.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox--inline>label>input[type=radio],.mui-radio--inline>input[type=checkbox],.mui-radio--inline>input[type=radio],.mui-radio--inline>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio]{margin:4px 0 0;line-height:normal}.mui-checkbox--inline+.mui-checkbox--inline,.mui-radio--inline+.mui-radio--inline{margin-top:0;margin-left:10px}.mui-container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container:after,.mui-container:before{content:" ";display:table}.mui-container:after{clear:both}@media (min-width:544px){.mui-container{max-width:570px}}@media (min-width:768px){.mui-container{max-width:740px}}@media (min-width:992px){.mui-container{max-width:960px}}@media (min-width:1200px){.mui-container{max-width:1170px}}.mui-container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container-fluid:after,.mui-container-fluid:before{content:" ";display:table}.mui-container-fluid:after{clear:both}.mui-divider{display:block;height:1px;background-color:rgba(0,0,0,.12)}.mui--divider-top{border-top:1px solid rgba(0,0,0,.12)}.mui--divider-bottom{border-bottom:1px solid rgba(0,0,0,.12)}.mui--divider-left{border-left:1px solid rgba(0,0,0,.12)}.mui--divider-right{border-right:1px solid rgba(0,0,0,.12)}.mui-dropdown{display:inline-block;position:relative}[data-mui-toggle=dropdown]{animation-duration:.1ms;animation-name:mui-node-inserted;outline:0}.mui-dropdown__menu{position:absolute;top:100%;left:0;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#FFF;border-radius:2px;z-index:1;background-clip:padding-box}.mui-dropdown__menu.mui--is-open{display:block}.mui-dropdown__menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);white-space:nowrap}.mui-dropdown__menu>li>a:focus,.mui-dropdown__menu>li>a:hover{text-decoration:none;color:rgba(0,0,0,.87);background-color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a,.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;cursor:not-allowed}.mui-dropdown__menu--right{left:auto;right:0}@media (min-width:544px){.mui-form--inline>.mui-textfield{display:inline-block;margin-bottom:0}.mui-form--inline>.mui-checkbox,.mui-form--inline>.mui-radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.mui-form--inline>.mui-checkbox>label,.mui-form--inline>.mui-radio>label{padding-left:0}.mui-form--inline>.mui-checkbox>label>input[type=checkbox],.mui-form--inline>.mui-radio>label>input[type=radio]{position:relative;margin-left:0}.mui-form--inline>.mui-select{display:inline-block}.mui-form--inline>.mui-btn{margin-bottom:0;margin-top:0;vertical-align:bottom}}.mui-row{margin-left:-15px;margin-right:-15px}.mui-row:after,.mui-row:before{content:" ";display:table}.mui-row:after{clear:both}.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9,.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9,.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9,.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{min-height:1px;padding-left:15px;padding-right:15px}.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{float:left}.mui-col-xs-1{width:8.33333%}.mui-col-xs-2{width:16.66667%}.mui-col-xs-3{width:25%}.mui-col-xs-4{width:33.33333%}.mui-col-xs-5{width:41.66667%}.mui-col-xs-6{width:50%}.mui-col-xs-7{width:58.33333%}.mui-col-xs-8{width:66.66667%}.mui-col-xs-9{width:75%}.mui-col-xs-10{width:83.33333%}.mui-col-xs-11{width:91.66667%}.mui-col-xs-12{width:100%}.mui-col-xs-offset-0{margin-left:0}.mui-col-xs-offset-1{margin-left:8.33333%}.mui-col-xs-offset-2{margin-left:16.66667%}.mui-col-xs-offset-3{margin-left:25%}.mui-col-xs-offset-4{margin-left:33.33333%}.mui-col-xs-offset-5{margin-left:41.66667%}.mui-col-xs-offset-6{margin-left:50%}.mui-col-xs-offset-7{margin-left:58.33333%}.mui-col-xs-offset-8{margin-left:66.66667%}.mui-col-xs-offset-9{margin-left:75%}.mui-col-xs-offset-10{margin-left:83.33333%}.mui-col-xs-offset-11{margin-left:91.66667%}.mui-col-xs-offset-12{margin-left:100%}@media (min-width:544px){.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9{float:left}.mui-col-sm-1{width:8.33333%}.mui-col-sm-2{width:16.66667%}.mui-col-sm-3{width:25%}.mui-col-sm-4{width:33.33333%}.mui-col-sm-5{width:41.66667%}.mui-col-sm-6{width:50%}.mui-col-sm-7{width:58.33333%}.mui-col-sm-8{width:66.66667%}.mui-col-sm-9{width:75%}.mui-col-sm-10{width:83.33333%}.mui-col-sm-11{width:91.66667%}.mui-col-sm-12{width:100%}.mui-col-sm-offset-0{margin-left:0}.mui-col-sm-offset-1{margin-left:8.33333%}.mui-col-sm-offset-2{margin-left:16.66667%}.mui-col-sm-offset-3{margin-left:25%}.mui-col-sm-offset-4{margin-left:33.33333%}.mui-col-sm-offset-5{margin-left:41.66667%}.mui-col-sm-offset-6{margin-left:50%}.mui-col-sm-offset-7{margin-left:58.33333%}.mui-col-sm-offset-8{margin-left:66.66667%}.mui-col-sm-offset-9{margin-left:75%}.mui-col-sm-offset-10{margin-left:83.33333%}.mui-col-sm-offset-11{margin-left:91.66667%}.mui-col-sm-offset-12{margin-left:100%}}@media (min-width:768px){.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9{float:left}.mui-col-md-1{width:8.33333%}.mui-col-md-2{width:16.66667%}.mui-col-md-3{width:25%}.mui-col-md-4{width:33.33333%}.mui-col-md-5{width:41.66667%}.mui-col-md-6{width:50%}.mui-col-md-7{width:58.33333%}.mui-col-md-8{width:66.66667%}.mui-col-md-9{width:75%}.mui-col-md-10{width:83.33333%}.mui-col-md-11{width:91.66667%}.mui-col-md-12{width:100%}.mui-col-md-offset-0{margin-left:0}.mui-col-md-offset-1{margin-left:8.33333%}.mui-col-md-offset-2{margin-left:16.66667%}.mui-col-md-offset-3{margin-left:25%}.mui-col-md-offset-4{margin-left:33.33333%}.mui-col-md-offset-5{margin-left:41.66667%}.mui-col-md-offset-6{margin-left:50%}.mui-col-md-offset-7{margin-left:58.33333%}.mui-col-md-offset-8{margin-left:66.66667%}.mui-col-md-offset-9{margin-left:75%}.mui-col-md-offset-10{margin-left:83.33333%}.mui-col-md-offset-11{margin-left:91.66667%}.mui-col-md-offset-12{margin-left:100%}}@media (min-width:992px){.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9{float:left}.mui-col-lg-1{width:8.33333%}.mui-col-lg-2{width:16.66667%}.mui-col-lg-3{width:25%}.mui-col-lg-4{width:33.33333%}.mui-col-lg-5{width:41.66667%}.mui-col-lg-6{width:50%}.mui-col-lg-7{width:58.33333%}.mui-col-lg-8{width:66.66667%}.mui-col-lg-9{width:75%}.mui-col-lg-10{width:83.33333%}.mui-col-lg-11{width:91.66667%}.mui-col-lg-12{width:100%}.mui-col-lg-offset-0{margin-left:0}.mui-col-lg-offset-1{margin-left:8.33333%}.mui-col-lg-offset-2{margin-left:16.66667%}.mui-col-lg-offset-3{margin-left:25%}.mui-col-lg-offset-4{margin-left:33.33333%}.mui-col-lg-offset-5{margin-left:41.66667%}.mui-col-lg-offset-6{margin-left:50%}.mui-col-lg-offset-7{margin-left:58.33333%}.mui-col-lg-offset-8{margin-left:66.66667%}.mui-col-lg-offset-9{margin-left:75%}.mui-col-lg-offset-10{margin-left:83.33333%}.mui-col-lg-offset-11{margin-left:91.66667%}.mui-col-lg-offset-12{margin-left:100%}}@media (min-width:1200px){.mui-col-xl-1,.mui-col-xl-10,.mui-col-xl-11,.mui-col-xl-12,.mui-col-xl-2,.mui-col-xl-3,.mui-col-xl-4,.mui-col-xl-5,.mui-col-xl-6,.mui-col-xl-7,.mui-col-xl-8,.mui-col-xl-9{float:left}.mui-col-xl-1{width:8.33333%}.mui-col-xl-2{width:16.66667%}.mui-col-xl-3{width:25%}.mui-col-xl-4{width:33.33333%}.mui-col-xl-5{width:41.66667%}.mui-col-xl-6{width:50%}.mui-col-xl-7{width:58.33333%}.mui-col-xl-8{width:66.66667%}.mui-col-xl-9{width:75%}.mui-col-xl-10{width:83.33333%}.mui-col-xl-11{width:91.66667%}.mui-col-xl-12{width:100%}.mui-col-xl-offset-0{margin-left:0}.mui-col-xl-offset-1{margin-left:8.33333%}.mui-col-xl-offset-2{margin-left:16.66667%}.mui-col-xl-offset-3{margin-left:25%}.mui-col-xl-offset-4{margin-left:33.33333%}.mui-col-xl-offset-5{margin-left:41.66667%}.mui-col-xl-offset-6{margin-left:50%}.mui-col-xl-offset-7{margin-left:58.33333%}.mui-col-xl-offset-8{margin-left:66.66667%}.mui-col-xl-offset-9{margin-left:75%}.mui-col-xl-offset-10{margin-left:83.33333%}.mui-col-xl-offset-11{margin-left:91.66667%}.mui-col-xl-offset-12{margin-left:100%}}.mui-panel{padding:15px;margin-bottom:20px;border-radius:0;background-color:#FFF;box-shadow:0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}.mui-panel:after,.mui-panel:before{content:" ";display:table}.mui-panel:after{clear:both}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-panel{box-shadow:0 -1px 2px 0 rgba(0,0,0,.12),-1px 0 2px 0 rgba(0,0,0,.12),0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}}.mui-select{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-select:focus{outline:0}.mui-select:focus>select{height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;height:32px;width:100%;appearance:none;-webkit-appearance:none;-moz-appearance:none;outline:0;border:none;border-bottom:1px solid rgba(0,0,0,.26);border-radius:0;box-shadow:none;background-color:transparent;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iNiIgd2lkdGg9IjEwIj48cG9seWdvbiBwb2ludHM9IjAsMCAxMCwwIDUsNiIgc3R5bGU9ImZpbGw6cmdiYSgwLDAsMCwuMjQpOyIvPjwvc3ZnPg==);background-repeat:no-repeat;background-position:right center;cursor:pointer;color:rgba(0,0,0,.87);font-size:16px;padding:0 25px 0 0}.mui-select>select::-ms-expand{display:none}.mui-select>select:focus{outline:0;height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select:disabled{color:rgba(0,0,0,.38);cursor:not-allowed;background-color:transparent;opacity:1}.mui-select__menu{position:absolute;z-index:2;min-width:100%;overflow-y:auto;padding:8px 0;background-color:#FFF;font-size:16px}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-select__menu{border-left:1px solid rgba(0,0,0,.12);border-top:1px solid rgba(0,0,0,.12)}}.mui-select__menu>div{padding:0 22px;height:42px;line-height:42px;cursor:pointer;white-space:nowrap}.mui-select__menu>div:hover{background-color:#E0E0E0}.mui-select__menu>div.mui--is-selected{background-color:#EEE}th{text-align:left}.mui-table{width:100%;max-width:100%;margin-bottom:20px}.mui-table>tbody>tr>td,.mui-table>tbody>tr>th,.mui-table>tfoot>tr>td,.mui-table>tfoot>tr>th,.mui-table>thead>tr>td,.mui-table>thead>tr>th{padding:10px;line-height:1.429}.mui-table>thead>tr>th{border-bottom:2px solid rgba(0,0,0,.12);font-weight:700}.mui-table>tbody+tbody{border-top:2px solid rgba(0,0,0,.12)}.mui-table.mui-table--bordered>tbody>tr>td{border-bottom:1px solid rgba(0,0,0,.12)}.mui-tabs__bar{list-style:none;padding-left:0;margin-bottom:0;background-color:transparent;white-space:nowrap;overflow-x:auto}.mui-tabs__bar>li{display:inline-block}.mui-tabs__bar>li>a{display:block;white-space:nowrap;text-transform:uppercase;font-weight:500;font-size:14px;color:rgba(0,0,0,.87);cursor:default;height:48px;line-height:48px;padding-left:24px;padding-right:24px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-tabs__bar>li>a:hover{text-decoration:none}.mui-tabs__bar>li.mui--is-active{border-bottom:2px solid #2196F3}.mui-tabs__bar>li.mui--is-active>a{color:#2196F3}.mui-tabs__bar.mui-tabs__bar--justified{display:table;width:100%;table-layout:fixed}.mui-tabs__bar.mui-tabs__bar--justified>li{display:table-cell}.mui-tabs__bar.mui-tabs__bar--justified>li>a{text-align:center;padding-left:0;padding-right:0}.mui-tabs__pane{display:none}.mui-tabs__pane.mui--is-active{display:block}[data-mui-toggle=tab]{animation-duration:.1ms;animation-name:mui-node-inserted}.mui-textfield{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-textfield>label{position:absolute;top:0;display:block;width:100%;color:rgba(0,0,0,.54);font-size:12px;font-weight:400;line-height:15px;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.mui-textfield>textarea{padding-top:5px}.mui-textfield>input,.mui-textfield>textarea{display:block}.mui-textfield>input:focus~label,.mui-textfield>textarea:focus~label{color:#2196F3}.mui-textfield--float-label>label{position:absolute;transform:translate(0,15px);font-size:16px;line-height:32px;color:rgba(0,0,0,.26);text-overflow:clip;cursor:text;pointer-events:none}.mui-textfield--float-label>input:focus~label,.mui-textfield--float-label>textarea:focus~label{transform:translate(0,0);font-size:12px;line-height:15px;text-overflow:ellipsis}.mui-textfield--float-label>input:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>input:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>input:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>textarea:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:rgba(0,0,0,.54);font-size:12px;line-height:15px;transform:translate(0,0);text-overflow:ellipsis}.mui-textfield--wrap-label{display:table;width:100%;padding-top:0}.mui-textfield--wrap-label:not(.mui-textfield--float-label)>label{display:table-header-group;position:static;white-space:normal;overflow-x:visible}.mui-textfield>input,.mui-textfield>textarea{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;background-color:transparent;color:rgba(0,0,0,.87);border:none;border-bottom:1px solid rgba(0,0,0,.26);outline:0;width:100%;font-size:16px;padding:0;box-shadow:none;border-radius:0;background-image:none}.mui-textfield>input:focus,.mui-textfield>textarea:focus{border-color:#2196F3;border-width:2px}.mui-textfield>input:-moz-read-only,.mui-textfield>input:disabled,.mui-textfield>textarea:-moz-read-only,.mui-textfield>textarea:disabled{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input:disabled,.mui-textfield>input:read-only,.mui-textfield>textarea:disabled,.mui-textfield>textarea:read-only{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input::-webkit-input-placeholder,.mui-textfield>textarea::-webkit-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::-moz-placeholder,.mui-textfield>textarea::-moz-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input:-ms-input-placeholder,.mui-textfield>textarea:-ms-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::placeholder,.mui-textfield>textarea::placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input{height:32px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>textarea{min-height:64px}.mui-textfield>textarea[rows]:not([rows="2"]):focus{margin-bottom:-1px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):not(:required),.mui-textfield>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required),.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty){border-color:#F44336;border-width:2px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty){height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required)~label,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):not(:required)~label,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:#F44336}.mui-textfield:not(.mui-textfield--float-label)>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label{color:#F44336}@keyframes mui-node-inserted{from{opacity:.99}to{opacity:1}}.mui--no-transition{transition:none!important}.mui--no-user-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.mui--text-left{text-align:left!important}.mui--text-right{text-align:right!important}.mui--text-center{text-align:center!important}.mui--text-justify{text-align:justify!important}.mui--text-nowrap{white-space:nowrap!important}.mui--align-baseline{vertical-align:baseline!important}.mui--align-top{vertical-align:top!important}.mui--align-middle{vertical-align:middle!important}.mui--align-bottom{vertical-align:bottom!important}.mui--text-dark{color:rgba(0,0,0,.87)}.mui--text-dark-secondary{color:rgba(0,0,0,.54)}.mui--text-dark-hint{color:rgba(0,0,0,.38)}.mui--text-light{color:#FFF}.mui--text-light-secondary{color:rgba(255,255,255,.7)}.mui--text-light-hint{color:rgba(255,255,255,.3)}.mui--text-accent{color:rgba(255,64,129,.87)}.mui--text-accent-secondary{color:rgba(255,64,129,.54)}.mui--text-accent-hint{color:rgba(255,64,129,.38)}.mui--text-black{color:#000}.mui--text-white{color:#FFF}.mui--text-danger{color:#F44336}.mui-list--unstyled{padding-left:0;list-style:none}.mui-list--inline{padding-left:0;list-style:none;margin-left:-5px}.mui-list--inline>li{display:inline-block;padding-left:5px;padding-right:5px}.mui--z1,.mui-dropdown__menu,.mui-select__menu{box-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24)}.mui--z2{box-shadow:0 3px 6px rgba(0,0,0,.16),0 3px 6px rgba(0,0,0,.23)}.mui--z3{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}.mui--z4{box-shadow:0 14px 28px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.22)}.mui--z5{box-shadow:0 19px 38px rgba(0,0,0,.3),0 15px 12px rgba(0,0,0,.22)}.mui--clearfix:after,.mui--clearfix:before{content:" ";display:table}.mui--clearfix:after{clear:both}.mui--pull-right{float:right!important}.mui--pull-left{float:left!important}.mui--hide{display:none!important}.mui--show{display:block!important}.mui--invisible{visibility:hidden}.mui--overflow-hidden{overflow:hidden!important}.mui--overflow-hidden-x{overflow-x:hidden!important}.mui--overflow-hidden-y{overflow-y:hidden!important}.mui--visible-lg-block,.mui--visible-lg-inline,.mui--visible-lg-inline-block,.mui--visible-md-block,.mui--visible-md-inline,.mui--visible-md-inline-block,.mui--visible-sm-block,.mui--visible-sm-inline,.mui--visible-sm-inline-block,.mui--visible-xl-block,.mui--visible-xl-inline,.mui--visible-xl-inline-block,.mui--visible-xs-block,.mui--visible-xs-inline,.mui--visible-xs-inline-block{display:none!important}@media (max-width:543px){.mui-visible-xs{display:block!important}table.mui-visible-xs{display:table}tr.mui-visible-xs{display:table-row!important}td.mui-visible-xs,th.mui-visible-xs{display:table-cell!important}.mui--visible-xs-block{display:block!important}.mui--visible-xs-inline{display:inline!important}.mui--visible-xs-inline-block{display:inline-block!important}}@media (min-width:544px) and (max-width:767px){.mui-visible-sm{display:block!important}table.mui-visible-sm{display:table}tr.mui-visible-sm{display:table-row!important}td.mui-visible-sm,th.mui-visible-sm{display:table-cell!important}.mui--visible-sm-block{display:block!important}.mui--visible-sm-inline{display:inline!important}.mui--visible-sm-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.mui-visible-md{display:block!important}table.mui-visible-md{display:table}tr.mui-visible-md{display:table-row!important}td.mui-visible-md,th.mui-visible-md{display:table-cell!important}.mui--visible-md-block{display:block!important}.mui--visible-md-inline{display:inline!important}.mui--visible-md-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.mui-visible-lg{display:block!important}table.mui-visible-lg{display:table}tr.mui-visible-lg{display:table-row!important}td.mui-visible-lg,th.mui-visible-lg{display:table-cell!important}.mui--visible-lg-block{display:block!important}.mui--visible-lg-inline{display:inline!important}.mui--visible-lg-inline-block{display:inline-block!important}}@media (min-width:1200px){.mui-visible-xl{display:block!important}table.mui-visible-xl{display:table}tr.mui-visible-xl{display:table-row!important}td.mui-visible-xl,th.mui-visible-xl{display:table-cell!important}.mui--visible-xl-block{display:block!important}.mui--visible-xl-inline{display:inline!important}.mui--visible-xl-inline-block{display:inline-block!important}}@media (max-width:543px){.mui--hidden-xs{display:none!important}}@media (min-width:544px) and (max-width:767px){.mui--hidden-sm{display:none!important}}@media (min-width:768px) and (max-width:991px){.mui--hidden-md{display:none!important}}@media (min-width:992px) and (max-width:1199px){.mui--hidden-lg{display:none!important}}@media (min-width:1200px){.mui--hidden-xl{display:none!important}}body.mui-body--scroll-lock{overflow:hidden!important}#mui-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:99999999;background-color:rgba(0,0,0,.2);overflow:auto}.mui-ripple-effect{position:absolute;border-radius:50%;pointer-events:none;opacity:0;animation:mui-ripple-animation 2s}@keyframes mui-ripple-animation{from{transform:scale(1);opacity:.4}to{transform:scale(100);opacity:0}}.mui-btn>.mui-ripple-effect{background-color:#a6a6a6}.mui-btn--primary>.mui-ripple-effect{background-color:#FFF}.mui-btn--dark>.mui-ripple-effect{background-color:#FFF}.mui-btn--danger>.mui-ripple-effect{background-color:#FFF}.mui-btn--accent>.mui-ripple-effect{background-color:#FFF}.mui-btn--flat>.mui-ripple-effect{background-color:#a6a6a6}.mui--text-display4{font-weight:300;font-size:112px;line-height:112px}.mui--text-display3{font-weight:400;font-size:56px;line-height:56px}.mui--text-display2{font-weight:400;font-size:45px;line-height:48px}.mui--text-display1,h1{font-weight:400;font-size:34px;line-height:40px}.mui--text-headline,h2{font-weight:400;font-size:24px;line-height:32px}.mui--text-title,h3{font-weight:400;font-size:20px;line-height:28px}.mui--text-subhead,h4{font-weight:400;font-size:16px;line-height:24px}.mui--text-body2,h5{font-weight:500;font-size:14px;line-height:24px}.mui--text-body1{font-weight:400;font-size:14px;line-height:20px}.mui--text-caption{font-weight:400;font-size:12px;line-height:16px}.mui--text-menu{font-weight:500;font-size:13px;line-height:17px}.mui--text-button{font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase}'; +},{}],7:[function(i,t,e){"use strict";function o(){return void 0===u&&(u=document.createElement("style"),u.innerHTML=i("mui.min.css")),u}var n=(i("../js/config"),i("../js/lib/jqLite")),l="mui-btn",a=l,m={style:1,color:1,size:1},r=Object.create(HTMLElement.prototype);r.createdCallback=function(){for(var i,t,e=this.createShadowRoot(),a=document.createElement("button"),r=l,u=0;u +muicss:mui/ +├── lib +│ ├── css +│ │ └── mui.css +│ └── js +│ └── mui.js +├── LICENSE.txt +├── package.js +└── README.md + diff --git a/www/libs/mui/packages/meteor/lib/css/mui.css b/www/libs/mui/packages/meteor/lib/css/mui.css new file mode 100644 index 0000000..2a65b9e --- /dev/null +++ b/www/libs/mui/packages/meteor/lib/css/mui.css @@ -0,0 +1,2522 @@ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS and IE text size adjust after device 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, +menu, +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/10/11, Safari, and Firefox < 22. + */ +[hidden], +template { + display: none; +} + +/* Links + ========================================================================== */ +/** + * Remove the gray background color from active links in IE 10. + */ +a { + background-color: transparent; +} + +/** + * Improve readability of focused elements when they are also in an + * active/hover state. + */ +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 { + 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"], +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. + */ +input[type="search"] { + -webkit-appearance: textfield; + /* 1 */ + box-sizing: content-box; + /* 2 */ +} + +/** + * 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; +} + +/** + * MUI Colors module + */ +/** + * MUI Reboot + */ +* { + box-sizing: border-box; +} + +*:before, +*:after { + box-sizing: border-box; +} + +html { + font-size: 10px; + -webkit-tap-highlight-color: transparent; +} + +body { + font-family: Arial, Verdana, Tahoma; + font-size: 14px; + font-weight: 400; + line-height: 1.429; + color: rgba(0, 0, 0, 0.87); + background-color: #FFF; +} + +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +a { + color: #2196F3; + text-decoration: none; +} + +a:hover, a:focus { + color: #1976D2; + text-decoration: underline; +} + +a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +p { + margin: 0 0 10px; +} + +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} + +figure { + margin: 0; +} + +img { + vertical-align: middle; +} + +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + height: 1px; + background-color: rgba(0, 0, 0, 0.12); +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 10px; + font-size: 21px; + color: rgba(0, 0, 0, 0.87); + line-height: inherit; + border: 0; +} + +input[type="search"] { + box-sizing: border-box; + -webkit-appearance: none; +} + +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +input[type="radio"]:disabled, +input[type="checkbox"]:disabled { + cursor: not-allowed; +} + +strong { + font-weight: 700; +} + +abbr[title] { + cursor: help; + border-bottom: 1px dotted #2196F3; +} + +h1, h2, h3 { + margin-top: 20px; + margin-bottom: 10px; +} + +h4, h5, h6 { + margin-top: 10px; + margin-bottom: 10px; +} + +/** + * MUI Appbar + */ +.mui--appbar-height { + height: 56px; +} + +.mui--appbar-min-height, .mui-appbar { + min-height: 56px; +} + +.mui--appbar-line-height { + line-height: 56px; +} + +.mui--appbar-top { + top: 56px; +} + +@media (orientation: landscape) and (max-height: 480px) { + .mui--appbar-height { + height: 48px; + } + .mui--appbar-min-height, .mui-appbar { + min-height: 48px; + } + .mui--appbar-line-height { + line-height: 48px; + } + .mui--appbar-top { + top: 48px; + } +} + +@media (min-width: 480px) { + .mui--appbar-height { + height: 64px; + } + .mui--appbar-min-height, .mui-appbar { + min-height: 64px; + } + .mui--appbar-line-height { + line-height: 64px; + } + .mui--appbar-top { + top: 64px; + } +} + +.mui-appbar { + background-color: #2196F3; + color: #FFF; +} + +/** + * MUI Buttons + */ +.mui-btn { + animation-duration: 0.0001s; + animation-name: mui-node-inserted; + font-weight: 500; + font-size: 14px; + line-height: 18px; + text-transform: uppercase; + color: rgba(0, 0, 0, 0.87); + background-color: #FFF; + transition: all 0.2s ease-in-out; + display: inline-block; + height: 36px; + padding: 0 26px; + margin-top: 6px; + margin-bottom: 6px; + border: none; + border-radius: 2px; + cursor: pointer; + -ms-touch-action: manipulation; + touch-action: manipulation; + background-image: none; + text-align: center; + line-height: 36px; + vertical-align: middle; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + font-size: 14px; + letter-spacing: 0.03em; + position: relative; + overflow: hidden; +} + +.mui-btn:hover, .mui-btn:focus, .mui-btn:active { + color: rgba(0, 0, 0, 0.87); + background-color: white; +} + +.mui-btn[disabled]:hover, .mui-btn[disabled]:focus, .mui-btn[disabled]:active { + color: rgba(0, 0, 0, 0.87); + background-color: #FFF; +} + +.mui-btn.mui-btn--flat { + color: rgba(0, 0, 0, 0.87); + background-color: transparent; +} + +.mui-btn.mui-btn--flat:hover, .mui-btn.mui-btn--flat:focus, .mui-btn.mui-btn--flat:active { + color: rgba(0, 0, 0, 0.87); + background-color: #f2f2f2; +} + +.mui-btn.mui-btn--flat[disabled]:hover, .mui-btn.mui-btn--flat[disabled]:focus, .mui-btn.mui-btn--flat[disabled]:active { + color: rgba(0, 0, 0, 0.87); + background-color: transparent; +} + +.mui-btn:hover, .mui-btn:focus, .mui-btn:active { + outline: 0; + text-decoration: none; + color: rgba(0, 0, 0, 0.87); +} + +.mui-btn:hover, .mui-btn:focus { + box-shadow: 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); +} + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mui-btn:hover, .mui-btn:focus { + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.12), -1px 0px 2px rgba(0, 0, 0, 0.12), 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); + } +} + +.mui-btn:active { + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); +} + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mui-btn:active { + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.12), -1px 0px 2px rgba(0, 0, 0, 0.12), 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); + } +} + +.mui-btn:disabled, .mui-btn.mui--is-disabled { + cursor: not-allowed; + pointer-events: none; + opacity: 0.60; + box-shadow: none; +} + +.mui-btn + .mui-btn { + margin-left: 8px; +} + +.mui-btn--flat { + background-color: transparent; +} + +.mui-btn--flat:hover, .mui-btn--flat:focus, .mui-btn--flat:active { + box-shadow: none; + background-color: #f2f2f2; +} + +.mui-btn--raised, .mui-btn--fab { + box-shadow: 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); +} + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mui-btn--raised, .mui-btn--fab { + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.12), -1px 0px 2px rgba(0, 0, 0, 0.12), 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); + } +} + +.mui-btn--raised:active, .mui-btn--fab:active { + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); +} + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mui-btn--raised:active, .mui-btn--fab:active { + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.12), -1px 0px 2px rgba(0, 0, 0, 0.12), 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); + } +} + +.mui-btn--fab { + position: relative; + padding: 0; + width: 55px; + height: 55px; + line-height: 55px; + border-radius: 50%; + z-index: 1; +} + +.mui-btn--primary { + color: #FFF; + background-color: #2196F3; +} + +.mui-btn--primary:hover, .mui-btn--primary:focus, .mui-btn--primary:active { + color: #FFF; + background-color: #39a1f4; +} + +.mui-btn--primary[disabled]:hover, .mui-btn--primary[disabled]:focus, .mui-btn--primary[disabled]:active { + color: #FFF; + background-color: #2196F3; +} + +.mui-btn--primary.mui-btn--flat { + color: #2196F3; + background-color: transparent; +} + +.mui-btn--primary.mui-btn--flat:hover, .mui-btn--primary.mui-btn--flat:focus, .mui-btn--primary.mui-btn--flat:active { + color: #2196F3; + background-color: #f2f2f2; +} + +.mui-btn--primary.mui-btn--flat[disabled]:hover, .mui-btn--primary.mui-btn--flat[disabled]:focus, .mui-btn--primary.mui-btn--flat[disabled]:active { + color: #2196F3; + background-color: transparent; +} + +.mui-btn--dark { + color: #FFF; + background-color: #424242; +} + +.mui-btn--dark:hover, .mui-btn--dark:focus, .mui-btn--dark:active { + color: #FFF; + background-color: #4f4f4f; +} + +.mui-btn--dark[disabled]:hover, .mui-btn--dark[disabled]:focus, .mui-btn--dark[disabled]:active { + color: #FFF; + background-color: #424242; +} + +.mui-btn--dark.mui-btn--flat { + color: #424242; + background-color: transparent; +} + +.mui-btn--dark.mui-btn--flat:hover, .mui-btn--dark.mui-btn--flat:focus, .mui-btn--dark.mui-btn--flat:active { + color: #424242; + background-color: #f2f2f2; +} + +.mui-btn--dark.mui-btn--flat[disabled]:hover, .mui-btn--dark.mui-btn--flat[disabled]:focus, .mui-btn--dark.mui-btn--flat[disabled]:active { + color: #424242; + background-color: transparent; +} + +.mui-btn--danger { + color: #FFF; + background-color: #F44336; +} + +.mui-btn--danger:hover, .mui-btn--danger:focus, .mui-btn--danger:active { + color: #FFF; + background-color: #f55a4e; +} + +.mui-btn--danger[disabled]:hover, .mui-btn--danger[disabled]:focus, .mui-btn--danger[disabled]:active { + color: #FFF; + background-color: #F44336; +} + +.mui-btn--danger.mui-btn--flat { + color: #F44336; + background-color: transparent; +} + +.mui-btn--danger.mui-btn--flat:hover, .mui-btn--danger.mui-btn--flat:focus, .mui-btn--danger.mui-btn--flat:active { + color: #F44336; + background-color: #f2f2f2; +} + +.mui-btn--danger.mui-btn--flat[disabled]:hover, .mui-btn--danger.mui-btn--flat[disabled]:focus, .mui-btn--danger.mui-btn--flat[disabled]:active { + color: #F44336; + background-color: transparent; +} + +.mui-btn--accent { + color: #FFF; + background-color: #FF4081; +} + +.mui-btn--accent:hover, .mui-btn--accent:focus, .mui-btn--accent:active { + color: #FFF; + background-color: #ff5a92; +} + +.mui-btn--accent[disabled]:hover, .mui-btn--accent[disabled]:focus, .mui-btn--accent[disabled]:active { + color: #FFF; + background-color: #FF4081; +} + +.mui-btn--accent.mui-btn--flat { + color: #FF4081; + background-color: transparent; +} + +.mui-btn--accent.mui-btn--flat:hover, .mui-btn--accent.mui-btn--flat:focus, .mui-btn--accent.mui-btn--flat:active { + color: #FF4081; + background-color: #f2f2f2; +} + +.mui-btn--accent.mui-btn--flat[disabled]:hover, .mui-btn--accent.mui-btn--flat[disabled]:focus, .mui-btn--accent.mui-btn--flat[disabled]:active { + color: #FF4081; + background-color: transparent; +} + +.mui-btn--small { + height: 30.6px; + line-height: 30.6px; + padding: 0 16px; + font-size: 13px; +} + +.mui-btn--large { + height: 54px; + line-height: 54px; + padding: 0 26px; + font-size: 14px; +} + +.mui-btn--fab.mui-btn--small { + width: 44px; + height: 44px; + line-height: 44px; +} + +.mui-btn--fab.mui-btn--large { + width: 75px; + height: 75px; + line-height: 75px; +} + +/** + * MUI Checkboxe and Radio Components + */ +.mui-radio, +.mui-checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} + +.mui-radio > label, +.mui-checkbox > label { + min-height: 20px; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} + +.mui-radio > label > input[type="radio"], +.mui-radio--inline > label > input[type="radio"], +.mui-checkbox > label > input[type="checkbox"], +.mui-checkbox--inline > label > input[type="checkbox"] { + position: absolute; + margin-left: -20px; + margin-top: 4px; +} + +.mui-radio + .mui-radio, +.mui-checkbox + .mui-checkbox { + margin-top: -5px; +} + +.mui-radio--inline, +.mui-checkbox--inline { + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + vertical-align: middle; + font-weight: normal; + cursor: pointer; +} + +.mui-radio--inline > input[type="radio"], +.mui-radio--inline > input[type="checkbox"], +.mui-radio--inline > label > input[type="radio"], +.mui-radio--inline > label > input[type="checkbox"], +.mui-checkbox--inline > input[type="radio"], +.mui-checkbox--inline > input[type="checkbox"], +.mui-checkbox--inline > label > input[type="radio"], +.mui-checkbox--inline > label > input[type="checkbox"] { + margin: 4px 0 0; + line-height: normal; +} + +.mui-radio--inline + .mui-radio--inline, +.mui-checkbox--inline + .mui-checkbox--inline { + margin-top: 0; + margin-left: 10px; +} + +/** + * MUI Container module + */ +.mui-container { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} + +.mui-container:before, .mui-container:after { + content: " "; + display: table; +} + +.mui-container:after { + clear: both; +} + +@media (min-width: 544px) { + .mui-container { + max-width: 570px; + } +} + +@media (min-width: 768px) { + .mui-container { + max-width: 740px; + } +} + +@media (min-width: 992px) { + .mui-container { + max-width: 960px; + } +} + +@media (min-width: 1200px) { + .mui-container { + max-width: 1170px; + } +} + +.mui-container-fluid { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} + +.mui-container-fluid:before, .mui-container-fluid:after { + content: " "; + display: table; +} + +.mui-container-fluid:after { + clear: both; +} + +/** + * MUI Divider Component and CSS Helpers + */ +.mui-divider { + display: block; + height: 1px; + background-color: rgba(0, 0, 0, 0.12); +} + +.mui--divider-top { + border-top: 1px solid rgba(0, 0, 0, 0.12); +} + +.mui--divider-bottom { + border-bottom: 1px solid rgba(0, 0, 0, 0.12); +} + +.mui--divider-left { + border-left: 1px solid rgba(0, 0, 0, 0.12); +} + +.mui--divider-right { + border-right: 1px solid rgba(0, 0, 0, 0.12); +} + +/** + * MUI Dropdown module + */ +.mui-dropdown { + display: inline-block; + position: relative; +} + +[data-mui-toggle="dropdown"] { + animation-duration: 0.0001s; + animation-name: mui-node-inserted; + outline: 0; +} + +.mui-dropdown__menu { + position: absolute; + top: 100%; + left: 0; + display: none; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + list-style: none; + font-size: 14px; + text-align: left; + background-color: #FFF; + border-radius: 2px; + z-index: 1; + background-clip: padding-box; +} + +.mui-dropdown__menu.mui--is-open { + display: block; +} + +.mui-dropdown__menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.429; + color: rgba(0, 0, 0, 0.87); + white-space: nowrap; +} + +.mui-dropdown__menu > li > a:hover, .mui-dropdown__menu > li > a:focus { + text-decoration: none; + color: rgba(0, 0, 0, 0.87); + background-color: #EEEEEE; +} + +.mui-dropdown__menu > .mui--is-disabled > a, .mui-dropdown__menu > .mui--is-disabled > a:hover, .mui-dropdown__menu > .mui--is-disabled > a:focus { + color: #EEEEEE; +} + +.mui-dropdown__menu > .mui--is-disabled > a:hover, .mui-dropdown__menu > .mui--is-disabled > a:focus { + text-decoration: none; + background-color: transparent; + background-image: none; + cursor: not-allowed; +} + +.mui-dropdown__menu--right { + left: auto; + right: 0; +} + +/** + * MUI Form Component + */ +@media (min-width: 544px) { + .mui-form--inline > .mui-textfield { + display: inline-block; + margin-bottom: 0; + } + .mui-form--inline > .mui-radio, + .mui-form--inline > .mui-checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .mui-form--inline > .mui-radio > label, + .mui-form--inline > .mui-checkbox > label { + padding-left: 0; + } + .mui-form--inline > .mui-radio > label > input[type="radio"], + .mui-form--inline > .mui-checkbox > label > input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .mui-form--inline > .mui-select { + display: inline-block; + } + .mui-form--inline > .mui-btn { + margin-bottom: 0; + margin-top: 0; + vertical-align: bottom; + } +} + +/** + * MUI Grid module + */ +.mui-row { + margin-left: -15px; + margin-right: -15px; +} + +.mui-row:before, .mui-row:after { + content: " "; + display: table; +} + +.mui-row:after { + clear: both; +} + +.mui-col-xs-1, .mui-col-sm-1, .mui-col-md-1, .mui-col-lg-1, .mui-col-xs-2, .mui-col-sm-2, .mui-col-md-2, .mui-col-lg-2, .mui-col-xs-3, .mui-col-sm-3, .mui-col-md-3, .mui-col-lg-3, .mui-col-xs-4, .mui-col-sm-4, .mui-col-md-4, .mui-col-lg-4, .mui-col-xs-5, .mui-col-sm-5, .mui-col-md-5, .mui-col-lg-5, .mui-col-xs-6, .mui-col-sm-6, .mui-col-md-6, .mui-col-lg-6, .mui-col-xs-7, .mui-col-sm-7, .mui-col-md-7, .mui-col-lg-7, .mui-col-xs-8, .mui-col-sm-8, .mui-col-md-8, .mui-col-lg-8, .mui-col-xs-9, .mui-col-sm-9, .mui-col-md-9, .mui-col-lg-9, .mui-col-xs-10, .mui-col-sm-10, .mui-col-md-10, .mui-col-lg-10, .mui-col-xs-11, .mui-col-sm-11, .mui-col-md-11, .mui-col-lg-11, .mui-col-xs-12, .mui-col-sm-12, .mui-col-md-12, .mui-col-lg-12 { + min-height: 1px; + padding-left: 15px; + padding-right: 15px; +} + +.mui-col-xs-1, .mui-col-xs-2, .mui-col-xs-3, .mui-col-xs-4, .mui-col-xs-5, .mui-col-xs-6, .mui-col-xs-7, .mui-col-xs-8, .mui-col-xs-9, .mui-col-xs-10, .mui-col-xs-11, .mui-col-xs-12 { + float: left; +} + +.mui-col-xs-1 { + width: 8.33333%; +} + +.mui-col-xs-2 { + width: 16.66667%; +} + +.mui-col-xs-3 { + width: 25%; +} + +.mui-col-xs-4 { + width: 33.33333%; +} + +.mui-col-xs-5 { + width: 41.66667%; +} + +.mui-col-xs-6 { + width: 50%; +} + +.mui-col-xs-7 { + width: 58.33333%; +} + +.mui-col-xs-8 { + width: 66.66667%; +} + +.mui-col-xs-9 { + width: 75%; +} + +.mui-col-xs-10 { + width: 83.33333%; +} + +.mui-col-xs-11 { + width: 91.66667%; +} + +.mui-col-xs-12 { + width: 100%; +} + +.mui-col-xs-offset-0 { + margin-left: 0%; +} + +.mui-col-xs-offset-1 { + margin-left: 8.33333%; +} + +.mui-col-xs-offset-2 { + margin-left: 16.66667%; +} + +.mui-col-xs-offset-3 { + margin-left: 25%; +} + +.mui-col-xs-offset-4 { + margin-left: 33.33333%; +} + +.mui-col-xs-offset-5 { + margin-left: 41.66667%; +} + +.mui-col-xs-offset-6 { + margin-left: 50%; +} + +.mui-col-xs-offset-7 { + margin-left: 58.33333%; +} + +.mui-col-xs-offset-8 { + margin-left: 66.66667%; +} + +.mui-col-xs-offset-9 { + margin-left: 75%; +} + +.mui-col-xs-offset-10 { + margin-left: 83.33333%; +} + +.mui-col-xs-offset-11 { + margin-left: 91.66667%; +} + +.mui-col-xs-offset-12 { + margin-left: 100%; +} + +@media (min-width: 544px) { + .mui-col-sm-1, .mui-col-sm-2, .mui-col-sm-3, .mui-col-sm-4, .mui-col-sm-5, .mui-col-sm-6, .mui-col-sm-7, .mui-col-sm-8, .mui-col-sm-9, .mui-col-sm-10, .mui-col-sm-11, .mui-col-sm-12 { + float: left; + } + .mui-col-sm-1 { + width: 8.33333%; + } + .mui-col-sm-2 { + width: 16.66667%; + } + .mui-col-sm-3 { + width: 25%; + } + .mui-col-sm-4 { + width: 33.33333%; + } + .mui-col-sm-5 { + width: 41.66667%; + } + .mui-col-sm-6 { + width: 50%; + } + .mui-col-sm-7 { + width: 58.33333%; + } + .mui-col-sm-8 { + width: 66.66667%; + } + .mui-col-sm-9 { + width: 75%; + } + .mui-col-sm-10 { + width: 83.33333%; + } + .mui-col-sm-11 { + width: 91.66667%; + } + .mui-col-sm-12 { + width: 100%; + } + .mui-col-sm-offset-0 { + margin-left: 0%; + } + .mui-col-sm-offset-1 { + margin-left: 8.33333%; + } + .mui-col-sm-offset-2 { + margin-left: 16.66667%; + } + .mui-col-sm-offset-3 { + margin-left: 25%; + } + .mui-col-sm-offset-4 { + margin-left: 33.33333%; + } + .mui-col-sm-offset-5 { + margin-left: 41.66667%; + } + .mui-col-sm-offset-6 { + margin-left: 50%; + } + .mui-col-sm-offset-7 { + margin-left: 58.33333%; + } + .mui-col-sm-offset-8 { + margin-left: 66.66667%; + } + .mui-col-sm-offset-9 { + margin-left: 75%; + } + .mui-col-sm-offset-10 { + margin-left: 83.33333%; + } + .mui-col-sm-offset-11 { + margin-left: 91.66667%; + } + .mui-col-sm-offset-12 { + margin-left: 100%; + } +} + +@media (min-width: 768px) { + .mui-col-md-1, .mui-col-md-2, .mui-col-md-3, .mui-col-md-4, .mui-col-md-5, .mui-col-md-6, .mui-col-md-7, .mui-col-md-8, .mui-col-md-9, .mui-col-md-10, .mui-col-md-11, .mui-col-md-12 { + float: left; + } + .mui-col-md-1 { + width: 8.33333%; + } + .mui-col-md-2 { + width: 16.66667%; + } + .mui-col-md-3 { + width: 25%; + } + .mui-col-md-4 { + width: 33.33333%; + } + .mui-col-md-5 { + width: 41.66667%; + } + .mui-col-md-6 { + width: 50%; + } + .mui-col-md-7 { + width: 58.33333%; + } + .mui-col-md-8 { + width: 66.66667%; + } + .mui-col-md-9 { + width: 75%; + } + .mui-col-md-10 { + width: 83.33333%; + } + .mui-col-md-11 { + width: 91.66667%; + } + .mui-col-md-12 { + width: 100%; + } + .mui-col-md-offset-0 { + margin-left: 0%; + } + .mui-col-md-offset-1 { + margin-left: 8.33333%; + } + .mui-col-md-offset-2 { + margin-left: 16.66667%; + } + .mui-col-md-offset-3 { + margin-left: 25%; + } + .mui-col-md-offset-4 { + margin-left: 33.33333%; + } + .mui-col-md-offset-5 { + margin-left: 41.66667%; + } + .mui-col-md-offset-6 { + margin-left: 50%; + } + .mui-col-md-offset-7 { + margin-left: 58.33333%; + } + .mui-col-md-offset-8 { + margin-left: 66.66667%; + } + .mui-col-md-offset-9 { + margin-left: 75%; + } + .mui-col-md-offset-10 { + margin-left: 83.33333%; + } + .mui-col-md-offset-11 { + margin-left: 91.66667%; + } + .mui-col-md-offset-12 { + margin-left: 100%; + } +} + +@media (min-width: 992px) { + .mui-col-lg-1, .mui-col-lg-2, .mui-col-lg-3, .mui-col-lg-4, .mui-col-lg-5, .mui-col-lg-6, .mui-col-lg-7, .mui-col-lg-8, .mui-col-lg-9, .mui-col-lg-10, .mui-col-lg-11, .mui-col-lg-12 { + float: left; + } + .mui-col-lg-1 { + width: 8.33333%; + } + .mui-col-lg-2 { + width: 16.66667%; + } + .mui-col-lg-3 { + width: 25%; + } + .mui-col-lg-4 { + width: 33.33333%; + } + .mui-col-lg-5 { + width: 41.66667%; + } + .mui-col-lg-6 { + width: 50%; + } + .mui-col-lg-7 { + width: 58.33333%; + } + .mui-col-lg-8 { + width: 66.66667%; + } + .mui-col-lg-9 { + width: 75%; + } + .mui-col-lg-10 { + width: 83.33333%; + } + .mui-col-lg-11 { + width: 91.66667%; + } + .mui-col-lg-12 { + width: 100%; + } + .mui-col-lg-offset-0 { + margin-left: 0%; + } + .mui-col-lg-offset-1 { + margin-left: 8.33333%; + } + .mui-col-lg-offset-2 { + margin-left: 16.66667%; + } + .mui-col-lg-offset-3 { + margin-left: 25%; + } + .mui-col-lg-offset-4 { + margin-left: 33.33333%; + } + .mui-col-lg-offset-5 { + margin-left: 41.66667%; + } + .mui-col-lg-offset-6 { + margin-left: 50%; + } + .mui-col-lg-offset-7 { + margin-left: 58.33333%; + } + .mui-col-lg-offset-8 { + margin-left: 66.66667%; + } + .mui-col-lg-offset-9 { + margin-left: 75%; + } + .mui-col-lg-offset-10 { + margin-left: 83.33333%; + } + .mui-col-lg-offset-11 { + margin-left: 91.66667%; + } + .mui-col-lg-offset-12 { + margin-left: 100%; + } +} + +@media (min-width: 1200px) { + .mui-col-xl-1, .mui-col-xl-2, .mui-col-xl-3, .mui-col-xl-4, .mui-col-xl-5, .mui-col-xl-6, .mui-col-xl-7, .mui-col-xl-8, .mui-col-xl-9, .mui-col-xl-10, .mui-col-xl-11, .mui-col-xl-12 { + float: left; + } + .mui-col-xl-1 { + width: 8.33333%; + } + .mui-col-xl-2 { + width: 16.66667%; + } + .mui-col-xl-3 { + width: 25%; + } + .mui-col-xl-4 { + width: 33.33333%; + } + .mui-col-xl-5 { + width: 41.66667%; + } + .mui-col-xl-6 { + width: 50%; + } + .mui-col-xl-7 { + width: 58.33333%; + } + .mui-col-xl-8 { + width: 66.66667%; + } + .mui-col-xl-9 { + width: 75%; + } + .mui-col-xl-10 { + width: 83.33333%; + } + .mui-col-xl-11 { + width: 91.66667%; + } + .mui-col-xl-12 { + width: 100%; + } + .mui-col-xl-offset-0 { + margin-left: 0%; + } + .mui-col-xl-offset-1 { + margin-left: 8.33333%; + } + .mui-col-xl-offset-2 { + margin-left: 16.66667%; + } + .mui-col-xl-offset-3 { + margin-left: 25%; + } + .mui-col-xl-offset-4 { + margin-left: 33.33333%; + } + .mui-col-xl-offset-5 { + margin-left: 41.66667%; + } + .mui-col-xl-offset-6 { + margin-left: 50%; + } + .mui-col-xl-offset-7 { + margin-left: 58.33333%; + } + .mui-col-xl-offset-8 { + margin-left: 66.66667%; + } + .mui-col-xl-offset-9 { + margin-left: 75%; + } + .mui-col-xl-offset-10 { + margin-left: 83.33333%; + } + .mui-col-xl-offset-11 { + margin-left: 91.66667%; + } + .mui-col-xl-offset-12 { + margin-left: 100%; + } +} + +/** + * MUI Panel module + */ +.mui-panel { + padding: 15px; + margin-bottom: 20px; + border-radius: 0; + background-color: #FFF; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.16), 0 0px 2px 0 rgba(0, 0, 0, 0.12); +} + +.mui-panel:before, .mui-panel:after { + content: " "; + display: table; +} + +.mui-panel:after { + clear: both; +} + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mui-panel { + box-shadow: 0 -1px 2px 0 rgba(0, 0, 0, 0.12), -1px 0px 2px 0 rgba(0, 0, 0, 0.12), 0 2px 2px 0 rgba(0, 0, 0, 0.16), 0 0px 2px 0 rgba(0, 0, 0, 0.12); + } +} + +/** + * MUI Select Component + */ +.mui-select { + display: block; + padding-top: 15px; + margin-bottom: 20px; + position: relative; +} + +.mui-select:focus { + outline: 0; +} + +.mui-select:focus > select { + height: 33px; + margin-bottom: -1px; + border-color: #2196F3; + border-width: 2px; +} + +.mui-select > select { + animation-duration: 0.0001s; + animation-name: mui-node-inserted; + display: block; + height: 32px; + width: 100%; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + outline: none; + border: none; + border-bottom: 1px solid rgba(0, 0, 0, 0.26); + border-radius: 0px; + box-shadow: none; + background-color: transparent; + background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iNiIgd2lkdGg9IjEwIj48cG9seWdvbiBwb2ludHM9IjAsMCAxMCwwIDUsNiIgc3R5bGU9ImZpbGw6cmdiYSgwLDAsMCwuMjQpOyIvPjwvc3ZnPg=="); + background-repeat: no-repeat; + background-position: right center; + cursor: pointer; + color: rgba(0, 0, 0, 0.87); + font-size: 16px; + padding: 0 25px 0 0; +} + +.mui-select > select::-ms-expand { + display: none; +} + +.mui-select > select:focus { + outline: 0; + height: 33px; + margin-bottom: -1px; + border-color: #2196F3; + border-width: 2px; +} + +.mui-select > select:disabled { + color: rgba(0, 0, 0, 0.38); + cursor: not-allowed; + background-color: transparent; + opacity: 1; +} + +.mui-select__menu { + position: absolute; + z-index: 2; + min-width: 100%; + overflow-y: auto; + padding: 8px 0; + background-color: #FFF; + font-size: 16px; +} + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mui-select__menu { + border-left: 1px solid rgba(0, 0, 0, 0.12); + border-top: 1px solid rgba(0, 0, 0, 0.12); + } +} + +.mui-select__menu > div { + padding: 0 22px; + height: 42px; + line-height: 42px; + cursor: pointer; + white-space: nowrap; +} + +.mui-select__menu > div:hover { + background-color: #E0E0E0; +} + +.mui-select__menu > div.mui--is-selected { + background-color: #EEEEEE; +} + +/** + * MUI Table Component + */ +th { + text-align: left; +} + +.mui-table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} + +.mui-table > thead > tr > th, +.mui-table > thead > tr > td, +.mui-table > tbody > tr > th, +.mui-table > tbody > tr > td, +.mui-table > tfoot > tr > th, +.mui-table > tfoot > tr > td { + padding: 10px; + line-height: 1.429; +} + +.mui-table > thead > tr > th { + border-bottom: 2px solid rgba(0, 0, 0, 0.12); + font-weight: 700; +} + +.mui-table > tbody + tbody { + border-top: 2px solid rgba(0, 0, 0, 0.12); +} + +.mui-table.mui-table--bordered > tbody > tr > td { + border-bottom: 1px solid rgba(0, 0, 0, 0.12); +} + +/** + * MUI Tabs module + */ +.mui-tabs__bar { + list-style: none; + padding-left: 0; + margin-bottom: 0; + background-color: transparent; + white-space: nowrap; + overflow-x: auto; +} + +.mui-tabs__bar > li { + display: inline-block; +} + +.mui-tabs__bar > li > a { + display: block; + white-space: nowrap; + text-transform: uppercase; + font-weight: 500; + font-size: 14px; + color: rgba(0, 0, 0, 0.87); + cursor: default; + height: 48px; + line-height: 48px; + padding-left: 24px; + padding-right: 24px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.mui-tabs__bar > li > a:hover { + text-decoration: none; +} + +.mui-tabs__bar > li.mui--is-active { + border-bottom: 2px solid #2196F3; +} + +.mui-tabs__bar > li.mui--is-active > a { + color: #2196F3; +} + +.mui-tabs__bar.mui-tabs__bar--justified { + display: table; + width: 100%; + table-layout: fixed; +} + +.mui-tabs__bar.mui-tabs__bar--justified > li { + display: table-cell; +} + +.mui-tabs__bar.mui-tabs__bar--justified > li > a { + text-align: center; + padding-left: 0px; + padding-right: 0px; +} + +.mui-tabs__pane { + display: none; +} + +.mui-tabs__pane.mui--is-active { + display: block; +} + +[data-mui-toggle="tab"] { + animation-duration: 0.0001s; + animation-name: mui-node-inserted; +} + +/** + * MUI Textfield Component + */ +.mui-textfield { + display: block; + padding-top: 15px; + margin-bottom: 20px; + position: relative; +} + +.mui-textfield > label { + position: absolute; + top: 0; + display: block; + width: 100%; + color: rgba(0, 0, 0, 0.54); + font-size: 12px; + font-weight: 400; + line-height: 15px; + overflow-x: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.mui-textfield > textarea { + padding-top: 5px; +} + +.mui-textfield > input, +.mui-textfield > textarea { + display: block; +} + +.mui-textfield > input:focus ~ label, +.mui-textfield > textarea:focus ~ label { + color: #2196F3; +} + +.mui-textfield--float-label > label { + position: absolute; + transform: translate(0px, 15px); + font-size: 16px; + line-height: 32px; + color: rgba(0, 0, 0, 0.26); + text-overflow: clip; + cursor: text; + pointer-events: none; +} + +.mui-textfield--float-label > input:focus ~ label, +.mui-textfield--float-label > textarea:focus ~ label { + transform: translate(0px, 0px); + font-size: 12px; + line-height: 15px; + text-overflow: ellipsis; +} + +.mui-textfield--float-label > input:not(:focus).mui--is-not-empty ~ label, .mui-textfield--float-label > input:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, .mui-textfield--float-label > input:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield--float-label > textarea:not(:focus).mui--is-not-empty ~ label, +.mui-textfield--float-label > textarea:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield--float-label > textarea:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label { + color: rgba(0, 0, 0, 0.54); + font-size: 12px; + line-height: 15px; + transform: translate(0px, 0px); + text-overflow: ellipsis; +} + +.mui-textfield--wrap-label { + display: table; + width: 100%; + padding-top: 0px; +} + +.mui-textfield--wrap-label:not(.mui-textfield--float-label) > label { + display: table-header-group; + position: static; + white-space: normal; + overflow-x: visible; +} + +.mui-textfield > input, +.mui-textfield > textarea { + animation-duration: 0.0001s; + animation-name: mui-node-inserted; + display: block; + background-color: transparent; + color: rgba(0, 0, 0, 0.87); + border: none; + border-bottom: 1px solid rgba(0, 0, 0, 0.26); + outline: none; + width: 100%; + font-size: 16px; + padding: 0; + box-shadow: none; + border-radius: 0px; + background-image: none; +} + +.mui-textfield > input:focus, +.mui-textfield > textarea:focus { + border-color: #2196F3; + border-width: 2px; +} + +.mui-textfield > input:disabled, .mui-textfield > input:-moz-read-only, +.mui-textfield > textarea:disabled, +.mui-textfield > textarea:-moz-read-only { + cursor: not-allowed; + background-color: transparent; + opacity: 1; +} + +.mui-textfield > input:disabled, .mui-textfield > input:read-only, +.mui-textfield > textarea:disabled, +.mui-textfield > textarea:read-only { + cursor: not-allowed; + background-color: transparent; + opacity: 1; +} + +.mui-textfield > input::-webkit-input-placeholder, +.mui-textfield > textarea::-webkit-input-placeholder { + color: rgba(0, 0, 0, 0.26); + opacity: 1; +} + +.mui-textfield > input::-moz-placeholder, +.mui-textfield > textarea::-moz-placeholder { + color: rgba(0, 0, 0, 0.26); + opacity: 1; +} + +.mui-textfield > input:-ms-input-placeholder, +.mui-textfield > textarea:-ms-input-placeholder { + color: rgba(0, 0, 0, 0.26); + opacity: 1; +} + +.mui-textfield > input::placeholder, +.mui-textfield > textarea::placeholder { + color: rgba(0, 0, 0, 0.26); + opacity: 1; +} + +.mui-textfield > input { + height: 32px; +} + +.mui-textfield > input:focus { + height: 33px; + margin-bottom: -1px; +} + +.mui-textfield > textarea { + min-height: 64px; +} + +.mui-textfield > textarea[rows]:not([rows="2"]):focus { + margin-bottom: -1px; +} + +.mui-textfield > input:focus { + height: 33px; + margin-bottom: -1px; +} + +.mui-textfield > input:invalid:not(:focus):not(:required), .mui-textfield > input:invalid:not(:focus):required.mui--is-not-empty, .mui-textfield > input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty, .mui-textfield > input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty), .mui-textfield > input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > textarea:invalid:not(:focus):not(:required), +.mui-textfield > textarea:invalid:not(:focus):required.mui--is-not-empty, +.mui-textfield > textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty, +.mui-textfield > textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > input:not(:focus).mui--is-invalid:not(:required), +.mui-textfield > input:not(:focus).mui--is-invalid:required.mui--is-not-empty, +.mui-textfield > input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty, +.mui-textfield > input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > textarea:not(:focus).mui--is-invalid:not(:required), +.mui-textfield > textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty, +.mui-textfield > textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty, +.mui-textfield > textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) { + border-color: #F44336; + border-width: 2px; +} + +.mui-textfield > input:invalid:not(:focus):not(:required), .mui-textfield > input:invalid:not(:focus):required.mui--is-not-empty, .mui-textfield > input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty, .mui-textfield > input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty), .mui-textfield > input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > input:not(:focus).mui--is-invalid:not(:required), +.mui-textfield > input:not(:focus).mui--is-invalid:required.mui--is-not-empty, +.mui-textfield > input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty, +.mui-textfield > input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty), +.mui-textfield > input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) { + height: 33px; + margin-bottom: -1px; +} + +.mui-textfield > input:invalid:not(:focus):not(:required) ~ label, .mui-textfield > input:invalid:not(:focus):required.mui--is-not-empty ~ label, .mui-textfield > input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, .mui-textfield > input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield > textarea:invalid:not(:focus):not(:required) ~ label, +.mui-textfield > textarea:invalid:not(:focus):required.mui--is-not-empty ~ label, +.mui-textfield > textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield > textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield > input:not(:focus).mui--is-invalid:not(:required) ~ label, +.mui-textfield > input:not(:focus).mui--is-invalid:required.mui--is-not-empty ~ label, +.mui-textfield > input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield > input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield > textarea:not(:focus).mui--is-invalid:not(:required) ~ label, +.mui-textfield > textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty ~ label, +.mui-textfield > textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty) ~ label, +.mui-textfield > textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty) ~ label { + color: #F44336; +} + +.mui-textfield:not(.mui-textfield--float-label) > input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty ~ label, +.mui-textfield:not(.mui-textfield--float-label) > textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty ~ label, +.mui-textfield:not(.mui-textfield--float-label) > input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty ~ label, +.mui-textfield:not(.mui-textfield--float-label) > textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty ~ label { + color: #F44336; +} + +/** + * MUI Helpers module + */ +@keyframes mui-node-inserted { + from { + opacity: 0.99; + } + to { + opacity: 1; + } +} + +.mui--no-transition { + transition: none !important; +} + +.mui--no-user-select { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.mui-caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px solid; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} + +.mui--text-left { + text-align: left !important; +} + +.mui--text-right { + text-align: right !important; +} + +.mui--text-center { + text-align: center !important; +} + +.mui--text-justify { + text-align: justify !important; +} + +.mui--text-nowrap { + white-space: nowrap !important; +} + +.mui--align-baseline { + vertical-align: baseline !important; +} + +.mui--align-top { + vertical-align: top !important; +} + +.mui--align-middle { + vertical-align: middle !important; +} + +.mui--align-bottom { + vertical-align: bottom !important; +} + +.mui--text-dark { + color: rgba(0, 0, 0, 0.87); +} + +.mui--text-dark-secondary { + color: rgba(0, 0, 0, 0.54); +} + +.mui--text-dark-hint { + color: rgba(0, 0, 0, 0.38); +} + +.mui--text-light { + color: #FFF; +} + +.mui--text-light-secondary { + color: rgba(255, 255, 255, 0.7); +} + +.mui--text-light-hint { + color: rgba(255, 255, 255, 0.3); +} + +.mui--text-accent { + color: rgba(255, 64, 129, 0.87); +} + +.mui--text-accent-secondary { + color: rgba(255, 64, 129, 0.54); +} + +.mui--text-accent-hint { + color: rgba(255, 64, 129, 0.38); +} + +.mui--text-black { + color: #000; +} + +.mui--text-white { + color: #FFF; +} + +.mui--text-danger { + color: #F44336; +} + +.mui-list--unstyled { + padding-left: 0; + list-style: none; +} + +.mui-list--inline { + padding-left: 0; + list-style: none; + margin-left: -5px; +} + +.mui-list--inline > li { + display: inline-block; + padding-left: 5px; + padding-right: 5px; +} + +.mui--z1, .mui-dropdown__menu, .mui-select__menu { + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); +} + +.mui--z2 { + box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23); +} + +.mui--z3 { + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); +} + +.mui--z4 { + box-shadow: 0 14px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.22); +} + +.mui--z5 { + box-shadow: 0 19px 38px rgba(0, 0, 0, 0.3), 0 15px 12px rgba(0, 0, 0, 0.22); +} + +.mui--clearfix:before, .mui--clearfix:after { + content: " "; + display: table; +} + +.mui--clearfix:after { + clear: both; +} + +.mui--pull-right { + float: right !important; +} + +.mui--pull-left { + float: left !important; +} + +.mui--hide { + display: none !important; +} + +.mui--show { + display: block !important; +} + +.mui--invisible { + visibility: hidden; +} + +.mui--overflow-hidden { + overflow: hidden !important; +} + +.mui--overflow-hidden-x { + overflow-x: hidden !important; +} + +.mui--overflow-hidden-y { + overflow-y: hidden !important; +} + +.mui--visible-xs-block, +.mui--visible-xs-inline, +.mui--visible-xs-inline-block, +.mui--visible-sm-block, +.mui--visible-sm-inline, +.mui--visible-sm-inline-block, +.mui--visible-md-block, +.mui--visible-md-inline, +.mui--visible-md-inline-block, +.mui--visible-lg-block, +.mui--visible-lg-inline, +.mui--visible-lg-inline-block, +.mui--visible-xl-block, +.mui--visible-xl-inline, +.mui--visible-xl-inline-block { + display: none !important; +} + +@media (max-width: 543px) { + .mui-visible-xs { + display: block !important; + } + table.mui-visible-xs { + display: table; + } + tr.mui-visible-xs { + display: table-row !important; + } + th.mui-visible-xs, + td.mui-visible-xs { + display: table-cell !important; + } + .mui--visible-xs-block { + display: block !important; + } + .mui--visible-xs-inline { + display: inline !important; + } + .mui--visible-xs-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 544px) and (max-width: 767px) { + .mui-visible-sm { + display: block !important; + } + table.mui-visible-sm { + display: table; + } + tr.mui-visible-sm { + display: table-row !important; + } + th.mui-visible-sm, + td.mui-visible-sm { + display: table-cell !important; + } + .mui--visible-sm-block { + display: block !important; + } + .mui--visible-sm-inline { + display: inline !important; + } + .mui--visible-sm-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .mui-visible-md { + display: block !important; + } + table.mui-visible-md { + display: table; + } + tr.mui-visible-md { + display: table-row !important; + } + th.mui-visible-md, + td.mui-visible-md { + display: table-cell !important; + } + .mui--visible-md-block { + display: block !important; + } + .mui--visible-md-inline { + display: inline !important; + } + .mui--visible-md-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .mui-visible-lg { + display: block !important; + } + table.mui-visible-lg { + display: table; + } + tr.mui-visible-lg { + display: table-row !important; + } + th.mui-visible-lg, + td.mui-visible-lg { + display: table-cell !important; + } + .mui--visible-lg-block { + display: block !important; + } + .mui--visible-lg-inline { + display: inline !important; + } + .mui--visible-lg-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 1200px) { + .mui-visible-xl { + display: block !important; + } + table.mui-visible-xl { + display: table; + } + tr.mui-visible-xl { + display: table-row !important; + } + th.mui-visible-xl, + td.mui-visible-xl { + display: table-cell !important; + } + .mui--visible-xl-block { + display: block !important; + } + .mui--visible-xl-inline { + display: inline !important; + } + .mui--visible-xl-inline-block { + display: inline-block !important; + } +} + +@media (max-width: 543px) { + .mui--hidden-xs { + display: none !important; + } +} + +@media (min-width: 544px) and (max-width: 767px) { + .mui--hidden-sm { + display: none !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .mui--hidden-md { + display: none !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .mui--hidden-lg { + display: none !important; + } +} + +@media (min-width: 1200px) { + .mui--hidden-xl { + display: none !important; + } +} + +body.mui-body--scroll-lock { + overflow: hidden !important; +} + +/** + * MUI Overlay module + */ +#mui-overlay { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 99999999; + background-color: rgba(0, 0, 0, 0.2); + overflow: auto; +} + +/** + * MUI Ripple module + */ +.mui-ripple-effect { + position: absolute; + border-radius: 50%; + pointer-events: none; + opacity: 0; + animation: mui-ripple-animation 2s; +} + +@keyframes mui-ripple-animation { + from { + transform: scale(1); + opacity: 0.4; + } + to { + transform: scale(100); + opacity: 0; + } +} + +.mui-btn > .mui-ripple-effect { + background-color: #a6a6a6; +} + +.mui-btn--primary > .mui-ripple-effect { + background-color: #FFF; +} + +.mui-btn--dark > .mui-ripple-effect { + background-color: #FFF; +} + +.mui-btn--danger > .mui-ripple-effect { + background-color: #FFF; +} + +.mui-btn--accent > .mui-ripple-effect { + background-color: #FFF; +} + +.mui-btn--flat > .mui-ripple-effect { + background-color: #a6a6a6; +} + +/** + * MUI Typography module + */ +.mui--text-display4 { + font-weight: 300; + font-size: 112px; + line-height: 112px; +} + +.mui--text-display3 { + font-weight: 400; + font-size: 56px; + line-height: 56px; +} + +.mui--text-display2 { + font-weight: 400; + font-size: 45px; + line-height: 48px; +} + +.mui--text-display1, h1 { + font-weight: 400; + font-size: 34px; + line-height: 40px; +} + +.mui--text-headline, h2 { + font-weight: 400; + font-size: 24px; + line-height: 32px; +} + +.mui--text-title, h3 { + font-weight: 400; + font-size: 20px; + line-height: 28px; +} + +.mui--text-subhead, h4 { + font-weight: 400; + font-size: 16px; + line-height: 24px; +} + +.mui--text-body2, h5 { + font-weight: 500; + font-size: 14px; + line-height: 24px; +} + +.mui--text-body1 { + font-weight: 400; + font-size: 14px; + line-height: 20px; +} + +.mui--text-caption { + font-weight: 400; + font-size: 12px; + line-height: 16px; +} + +.mui--text-menu { + font-weight: 500; + font-size: 13px; + line-height: 17px; +} + +.mui--text-button { + font-weight: 500; + font-size: 14px; + line-height: 18px; + text-transform: uppercase; +} diff --git a/www/libs/mui/packages/meteor/lib/css/mui.min.css b/www/libs/mui/packages/meteor/lib/css/mui.min.css new file mode 100644 index 0000000..750f365 --- /dev/null +++ b/www/libs/mui/packages/meteor/lib/css/mui.min.css @@ -0,0 +1 @@ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-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{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}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{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{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-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:border-box}:after,:before{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:Arial,Verdana,Tahoma;font-size:14px;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);background-color:#FFF}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#2196F3;text-decoration:none}a:focus,a:hover{color:#1976D2;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}p{margin:0 0 10px}ol,ul{margin-top:0;margin-bottom:10px}figure{margin:0}img{vertical-align:middle}hr{margin-top:20px;margin-bottom:20px;border:0;height:1px;background-color:rgba(0,0,0,.12)}legend{display:block;width:100%;padding:0;margin-bottom:10px;font-size:21px;color:rgba(0,0,0,.87);line-height:inherit;border:0}input[type=search]{box-sizing:border-box;-webkit-appearance:none}input[type=checkbox]:focus,input[type=radio]:focus,input[type=file]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type=checkbox]:disabled,input[type=radio]:disabled{cursor:not-allowed}strong{font-weight:700}abbr[title]{cursor:help;border-bottom:1px dotted #2196F3}h1,h2,h3{margin-top:20px;margin-bottom:10px}h4,h5,h6{margin-top:10px;margin-bottom:10px}.mui--appbar-height{height:56px}.mui--appbar-min-height,.mui-appbar{min-height:56px}.mui--appbar-line-height{line-height:56px}.mui--appbar-top{top:56px}@media (orientation:landscape) and (max-height:480px){.mui--appbar-height{height:48px}.mui--appbar-min-height,.mui-appbar{min-height:48px}.mui--appbar-line-height{line-height:48px}.mui--appbar-top{top:48px}}@media (min-width:480px){.mui--appbar-height{height:64px}.mui--appbar-min-height,.mui-appbar{min-height:64px}.mui--appbar-line-height{line-height:64px}.mui--appbar-top{top:64px}}.mui-appbar{background-color:#2196F3;color:#FFF}.mui-btn{animation-duration:.1ms;animation-name:mui-node-inserted;font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase;color:rgba(0,0,0,.87);background-color:#FFF;transition:all .2s ease-in-out;display:inline-block;height:36px;padding:0 26px;margin-top:6px;margin-bottom:6px;border:none;border-radius:2px;cursor:pointer;-ms-touch-action:manipulation;touch-action:manipulation;background-image:none;text-align:center;line-height:36px;vertical-align:middle;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:14px;letter-spacing:.03em;position:relative;overflow:hidden}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{color:rgba(0,0,0,.87);background-color:#fff}.mui-btn[disabled]:active,.mui-btn[disabled]:focus,.mui-btn[disabled]:hover{color:rgba(0,0,0,.87);background-color:#FFF}.mui-btn.mui-btn--flat{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn.mui-btn--flat:active,.mui-btn.mui-btn--flat:focus,.mui-btn.mui-btn--flat:hover{color:rgba(0,0,0,.87);background-color:#f2f2f2}.mui-btn.mui-btn--flat[disabled]:active,.mui-btn.mui-btn--flat[disabled]:focus,.mui-btn.mui-btn--flat[disabled]:hover{color:rgba(0,0,0,.87);background-color:transparent}.mui-btn:active,.mui-btn:focus,.mui-btn:hover{outline:0;text-decoration:none;color:rgba(0,0,0,.87)}.mui-btn:focus,.mui-btn:hover{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:focus,.mui-btn:hover{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn.mui--is-disabled,.mui-btn:disabled{cursor:not-allowed;pointer-events:none;opacity:.6;box-shadow:none}.mui-btn+.mui-btn{margin-left:8px}.mui-btn--flat{background-color:transparent}.mui-btn--flat:active,.mui-btn--flat:focus,.mui-btn--flat:hover{box-shadow:none;background-color:#f2f2f2}.mui-btn--fab,.mui-btn--raised{box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab,.mui-btn--raised{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}}.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-btn--fab:active,.mui-btn--raised:active{box-shadow:0 -1px 2px rgba(0,0,0,.12),-1px 0 2px rgba(0,0,0,.12),0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}}.mui-btn--fab{position:relative;padding:0;width:55px;height:55px;line-height:55px;border-radius:50%;z-index:1}.mui-btn--primary{color:#FFF;background-color:#2196F3}.mui-btn--primary:active,.mui-btn--primary:focus,.mui-btn--primary:hover{color:#FFF;background-color:#39a1f4}.mui-btn--primary[disabled]:active,.mui-btn--primary[disabled]:focus,.mui-btn--primary[disabled]:hover{color:#FFF;background-color:#2196F3}.mui-btn--primary.mui-btn--flat{color:#2196F3;background-color:transparent}.mui-btn--primary.mui-btn--flat:active,.mui-btn--primary.mui-btn--flat:focus,.mui-btn--primary.mui-btn--flat:hover{color:#2196F3;background-color:#f2f2f2}.mui-btn--primary.mui-btn--flat[disabled]:active,.mui-btn--primary.mui-btn--flat[disabled]:focus,.mui-btn--primary.mui-btn--flat[disabled]:hover{color:#2196F3;background-color:transparent}.mui-btn--dark{color:#FFF;background-color:#424242}.mui-btn--dark:active,.mui-btn--dark:focus,.mui-btn--dark:hover{color:#FFF;background-color:#4f4f4f}.mui-btn--dark[disabled]:active,.mui-btn--dark[disabled]:focus,.mui-btn--dark[disabled]:hover{color:#FFF;background-color:#424242}.mui-btn--dark.mui-btn--flat{color:#424242;background-color:transparent}.mui-btn--dark.mui-btn--flat:active,.mui-btn--dark.mui-btn--flat:focus,.mui-btn--dark.mui-btn--flat:hover{color:#424242;background-color:#f2f2f2}.mui-btn--dark.mui-btn--flat[disabled]:active,.mui-btn--dark.mui-btn--flat[disabled]:focus,.mui-btn--dark.mui-btn--flat[disabled]:hover{color:#424242;background-color:transparent}.mui-btn--danger{color:#FFF;background-color:#F44336}.mui-btn--danger:active,.mui-btn--danger:focus,.mui-btn--danger:hover{color:#FFF;background-color:#f55a4e}.mui-btn--danger[disabled]:active,.mui-btn--danger[disabled]:focus,.mui-btn--danger[disabled]:hover{color:#FFF;background-color:#F44336}.mui-btn--danger.mui-btn--flat{color:#F44336;background-color:transparent}.mui-btn--danger.mui-btn--flat:active,.mui-btn--danger.mui-btn--flat:focus,.mui-btn--danger.mui-btn--flat:hover{color:#F44336;background-color:#f2f2f2}.mui-btn--danger.mui-btn--flat[disabled]:active,.mui-btn--danger.mui-btn--flat[disabled]:focus,.mui-btn--danger.mui-btn--flat[disabled]:hover{color:#F44336;background-color:transparent}.mui-btn--accent{color:#FFF;background-color:#FF4081}.mui-btn--accent:active,.mui-btn--accent:focus,.mui-btn--accent:hover{color:#FFF;background-color:#ff5a92}.mui-btn--accent[disabled]:active,.mui-btn--accent[disabled]:focus,.mui-btn--accent[disabled]:hover{color:#FFF;background-color:#FF4081}.mui-btn--accent.mui-btn--flat{color:#FF4081;background-color:transparent}.mui-btn--accent.mui-btn--flat:active,.mui-btn--accent.mui-btn--flat:focus,.mui-btn--accent.mui-btn--flat:hover{color:#FF4081;background-color:#f2f2f2}.mui-btn--accent.mui-btn--flat[disabled]:active,.mui-btn--accent.mui-btn--flat[disabled]:focus,.mui-btn--accent.mui-btn--flat[disabled]:hover{color:#FF4081;background-color:transparent}.mui-btn--small{height:30.6px;line-height:30.6px;padding:0 16px;font-size:13px}.mui-btn--large{height:54px;line-height:54px;padding:0 26px;font-size:14px}.mui-btn--fab.mui-btn--small{width:44px;height:44px;line-height:44px}.mui-btn--fab.mui-btn--large{width:75px;height:75px;line-height:75px}.mui-checkbox,.mui-radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.mui-checkbox>label,.mui-radio>label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio],.mui-radio>label>input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px}.mui-checkbox+.mui-checkbox,.mui-radio+.mui-radio{margin-top:-5px}.mui-checkbox--inline,.mui-radio--inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.mui-checkbox--inline>input[type=checkbox],.mui-checkbox--inline>input[type=radio],.mui-checkbox--inline>label>input[type=checkbox],.mui-checkbox--inline>label>input[type=radio],.mui-radio--inline>input[type=checkbox],.mui-radio--inline>input[type=radio],.mui-radio--inline>label>input[type=checkbox],.mui-radio--inline>label>input[type=radio]{margin:4px 0 0;line-height:normal}.mui-checkbox--inline+.mui-checkbox--inline,.mui-radio--inline+.mui-radio--inline{margin-top:0;margin-left:10px}.mui-container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container:after,.mui-container:before{content:" ";display:table}.mui-container:after{clear:both}@media (min-width:544px){.mui-container{max-width:570px}}@media (min-width:768px){.mui-container{max-width:740px}}@media (min-width:992px){.mui-container{max-width:960px}}@media (min-width:1200px){.mui-container{max-width:1170px}}.mui-container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.mui-container-fluid:after,.mui-container-fluid:before{content:" ";display:table}.mui-container-fluid:after{clear:both}.mui-divider{display:block;height:1px;background-color:rgba(0,0,0,.12)}.mui--divider-top{border-top:1px solid rgba(0,0,0,.12)}.mui--divider-bottom{border-bottom:1px solid rgba(0,0,0,.12)}.mui--divider-left{border-left:1px solid rgba(0,0,0,.12)}.mui--divider-right{border-right:1px solid rgba(0,0,0,.12)}.mui-dropdown{display:inline-block;position:relative}[data-mui-toggle=dropdown]{animation-duration:.1ms;animation-name:mui-node-inserted;outline:0}.mui-dropdown__menu{position:absolute;top:100%;left:0;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#FFF;border-radius:2px;z-index:1;background-clip:padding-box}.mui-dropdown__menu.mui--is-open{display:block}.mui-dropdown__menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.429;color:rgba(0,0,0,.87);white-space:nowrap}.mui-dropdown__menu>li>a:focus,.mui-dropdown__menu>li>a:hover{text-decoration:none;color:rgba(0,0,0,.87);background-color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a,.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{color:#EEE}.mui-dropdown__menu>.mui--is-disabled>a:focus,.mui-dropdown__menu>.mui--is-disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;cursor:not-allowed}.mui-dropdown__menu--right{left:auto;right:0}@media (min-width:544px){.mui-form--inline>.mui-textfield{display:inline-block;margin-bottom:0}.mui-form--inline>.mui-checkbox,.mui-form--inline>.mui-radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.mui-form--inline>.mui-checkbox>label,.mui-form--inline>.mui-radio>label{padding-left:0}.mui-form--inline>.mui-checkbox>label>input[type=checkbox],.mui-form--inline>.mui-radio>label>input[type=radio]{position:relative;margin-left:0}.mui-form--inline>.mui-select{display:inline-block}.mui-form--inline>.mui-btn{margin-bottom:0;margin-top:0;vertical-align:bottom}}.mui-row{margin-left:-15px;margin-right:-15px}.mui-row:after,.mui-row:before{content:" ";display:table}.mui-row:after{clear:both}.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9,.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9,.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9,.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{min-height:1px;padding-left:15px;padding-right:15px}.mui-col-xs-1,.mui-col-xs-10,.mui-col-xs-11,.mui-col-xs-12,.mui-col-xs-2,.mui-col-xs-3,.mui-col-xs-4,.mui-col-xs-5,.mui-col-xs-6,.mui-col-xs-7,.mui-col-xs-8,.mui-col-xs-9{float:left}.mui-col-xs-1{width:8.33333%}.mui-col-xs-2{width:16.66667%}.mui-col-xs-3{width:25%}.mui-col-xs-4{width:33.33333%}.mui-col-xs-5{width:41.66667%}.mui-col-xs-6{width:50%}.mui-col-xs-7{width:58.33333%}.mui-col-xs-8{width:66.66667%}.mui-col-xs-9{width:75%}.mui-col-xs-10{width:83.33333%}.mui-col-xs-11{width:91.66667%}.mui-col-xs-12{width:100%}.mui-col-xs-offset-0{margin-left:0}.mui-col-xs-offset-1{margin-left:8.33333%}.mui-col-xs-offset-2{margin-left:16.66667%}.mui-col-xs-offset-3{margin-left:25%}.mui-col-xs-offset-4{margin-left:33.33333%}.mui-col-xs-offset-5{margin-left:41.66667%}.mui-col-xs-offset-6{margin-left:50%}.mui-col-xs-offset-7{margin-left:58.33333%}.mui-col-xs-offset-8{margin-left:66.66667%}.mui-col-xs-offset-9{margin-left:75%}.mui-col-xs-offset-10{margin-left:83.33333%}.mui-col-xs-offset-11{margin-left:91.66667%}.mui-col-xs-offset-12{margin-left:100%}@media (min-width:544px){.mui-col-sm-1,.mui-col-sm-10,.mui-col-sm-11,.mui-col-sm-12,.mui-col-sm-2,.mui-col-sm-3,.mui-col-sm-4,.mui-col-sm-5,.mui-col-sm-6,.mui-col-sm-7,.mui-col-sm-8,.mui-col-sm-9{float:left}.mui-col-sm-1{width:8.33333%}.mui-col-sm-2{width:16.66667%}.mui-col-sm-3{width:25%}.mui-col-sm-4{width:33.33333%}.mui-col-sm-5{width:41.66667%}.mui-col-sm-6{width:50%}.mui-col-sm-7{width:58.33333%}.mui-col-sm-8{width:66.66667%}.mui-col-sm-9{width:75%}.mui-col-sm-10{width:83.33333%}.mui-col-sm-11{width:91.66667%}.mui-col-sm-12{width:100%}.mui-col-sm-offset-0{margin-left:0}.mui-col-sm-offset-1{margin-left:8.33333%}.mui-col-sm-offset-2{margin-left:16.66667%}.mui-col-sm-offset-3{margin-left:25%}.mui-col-sm-offset-4{margin-left:33.33333%}.mui-col-sm-offset-5{margin-left:41.66667%}.mui-col-sm-offset-6{margin-left:50%}.mui-col-sm-offset-7{margin-left:58.33333%}.mui-col-sm-offset-8{margin-left:66.66667%}.mui-col-sm-offset-9{margin-left:75%}.mui-col-sm-offset-10{margin-left:83.33333%}.mui-col-sm-offset-11{margin-left:91.66667%}.mui-col-sm-offset-12{margin-left:100%}}@media (min-width:768px){.mui-col-md-1,.mui-col-md-10,.mui-col-md-11,.mui-col-md-12,.mui-col-md-2,.mui-col-md-3,.mui-col-md-4,.mui-col-md-5,.mui-col-md-6,.mui-col-md-7,.mui-col-md-8,.mui-col-md-9{float:left}.mui-col-md-1{width:8.33333%}.mui-col-md-2{width:16.66667%}.mui-col-md-3{width:25%}.mui-col-md-4{width:33.33333%}.mui-col-md-5{width:41.66667%}.mui-col-md-6{width:50%}.mui-col-md-7{width:58.33333%}.mui-col-md-8{width:66.66667%}.mui-col-md-9{width:75%}.mui-col-md-10{width:83.33333%}.mui-col-md-11{width:91.66667%}.mui-col-md-12{width:100%}.mui-col-md-offset-0{margin-left:0}.mui-col-md-offset-1{margin-left:8.33333%}.mui-col-md-offset-2{margin-left:16.66667%}.mui-col-md-offset-3{margin-left:25%}.mui-col-md-offset-4{margin-left:33.33333%}.mui-col-md-offset-5{margin-left:41.66667%}.mui-col-md-offset-6{margin-left:50%}.mui-col-md-offset-7{margin-left:58.33333%}.mui-col-md-offset-8{margin-left:66.66667%}.mui-col-md-offset-9{margin-left:75%}.mui-col-md-offset-10{margin-left:83.33333%}.mui-col-md-offset-11{margin-left:91.66667%}.mui-col-md-offset-12{margin-left:100%}}@media (min-width:992px){.mui-col-lg-1,.mui-col-lg-10,.mui-col-lg-11,.mui-col-lg-12,.mui-col-lg-2,.mui-col-lg-3,.mui-col-lg-4,.mui-col-lg-5,.mui-col-lg-6,.mui-col-lg-7,.mui-col-lg-8,.mui-col-lg-9{float:left}.mui-col-lg-1{width:8.33333%}.mui-col-lg-2{width:16.66667%}.mui-col-lg-3{width:25%}.mui-col-lg-4{width:33.33333%}.mui-col-lg-5{width:41.66667%}.mui-col-lg-6{width:50%}.mui-col-lg-7{width:58.33333%}.mui-col-lg-8{width:66.66667%}.mui-col-lg-9{width:75%}.mui-col-lg-10{width:83.33333%}.mui-col-lg-11{width:91.66667%}.mui-col-lg-12{width:100%}.mui-col-lg-offset-0{margin-left:0}.mui-col-lg-offset-1{margin-left:8.33333%}.mui-col-lg-offset-2{margin-left:16.66667%}.mui-col-lg-offset-3{margin-left:25%}.mui-col-lg-offset-4{margin-left:33.33333%}.mui-col-lg-offset-5{margin-left:41.66667%}.mui-col-lg-offset-6{margin-left:50%}.mui-col-lg-offset-7{margin-left:58.33333%}.mui-col-lg-offset-8{margin-left:66.66667%}.mui-col-lg-offset-9{margin-left:75%}.mui-col-lg-offset-10{margin-left:83.33333%}.mui-col-lg-offset-11{margin-left:91.66667%}.mui-col-lg-offset-12{margin-left:100%}}@media (min-width:1200px){.mui-col-xl-1,.mui-col-xl-10,.mui-col-xl-11,.mui-col-xl-12,.mui-col-xl-2,.mui-col-xl-3,.mui-col-xl-4,.mui-col-xl-5,.mui-col-xl-6,.mui-col-xl-7,.mui-col-xl-8,.mui-col-xl-9{float:left}.mui-col-xl-1{width:8.33333%}.mui-col-xl-2{width:16.66667%}.mui-col-xl-3{width:25%}.mui-col-xl-4{width:33.33333%}.mui-col-xl-5{width:41.66667%}.mui-col-xl-6{width:50%}.mui-col-xl-7{width:58.33333%}.mui-col-xl-8{width:66.66667%}.mui-col-xl-9{width:75%}.mui-col-xl-10{width:83.33333%}.mui-col-xl-11{width:91.66667%}.mui-col-xl-12{width:100%}.mui-col-xl-offset-0{margin-left:0}.mui-col-xl-offset-1{margin-left:8.33333%}.mui-col-xl-offset-2{margin-left:16.66667%}.mui-col-xl-offset-3{margin-left:25%}.mui-col-xl-offset-4{margin-left:33.33333%}.mui-col-xl-offset-5{margin-left:41.66667%}.mui-col-xl-offset-6{margin-left:50%}.mui-col-xl-offset-7{margin-left:58.33333%}.mui-col-xl-offset-8{margin-left:66.66667%}.mui-col-xl-offset-9{margin-left:75%}.mui-col-xl-offset-10{margin-left:83.33333%}.mui-col-xl-offset-11{margin-left:91.66667%}.mui-col-xl-offset-12{margin-left:100%}}.mui-panel{padding:15px;margin-bottom:20px;border-radius:0;background-color:#FFF;box-shadow:0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}.mui-panel:after,.mui-panel:before{content:" ";display:table}.mui-panel:after{clear:both}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-panel{box-shadow:0 -1px 2px 0 rgba(0,0,0,.12),-1px 0 2px 0 rgba(0,0,0,.12),0 2px 2px 0 rgba(0,0,0,.16),0 0 2px 0 rgba(0,0,0,.12)}}.mui-select{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-select:focus{outline:0}.mui-select:focus>select{height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;height:32px;width:100%;appearance:none;-webkit-appearance:none;-moz-appearance:none;outline:0;border:none;border-bottom:1px solid rgba(0,0,0,.26);border-radius:0;box-shadow:none;background-color:transparent;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iNiIgd2lkdGg9IjEwIj48cG9seWdvbiBwb2ludHM9IjAsMCAxMCwwIDUsNiIgc3R5bGU9ImZpbGw6cmdiYSgwLDAsMCwuMjQpOyIvPjwvc3ZnPg==);background-repeat:no-repeat;background-position:right center;cursor:pointer;color:rgba(0,0,0,.87);font-size:16px;padding:0 25px 0 0}.mui-select>select::-ms-expand{display:none}.mui-select>select:focus{outline:0;height:33px;margin-bottom:-1px;border-color:#2196F3;border-width:2px}.mui-select>select:disabled{color:rgba(0,0,0,.38);cursor:not-allowed;background-color:transparent;opacity:1}.mui-select__menu{position:absolute;z-index:2;min-width:100%;overflow-y:auto;padding:8px 0;background-color:#FFF;font-size:16px}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.mui-select__menu{border-left:1px solid rgba(0,0,0,.12);border-top:1px solid rgba(0,0,0,.12)}}.mui-select__menu>div{padding:0 22px;height:42px;line-height:42px;cursor:pointer;white-space:nowrap}.mui-select__menu>div:hover{background-color:#E0E0E0}.mui-select__menu>div.mui--is-selected{background-color:#EEE}th{text-align:left}.mui-table{width:100%;max-width:100%;margin-bottom:20px}.mui-table>tbody>tr>td,.mui-table>tbody>tr>th,.mui-table>tfoot>tr>td,.mui-table>tfoot>tr>th,.mui-table>thead>tr>td,.mui-table>thead>tr>th{padding:10px;line-height:1.429}.mui-table>thead>tr>th{border-bottom:2px solid rgba(0,0,0,.12);font-weight:700}.mui-table>tbody+tbody{border-top:2px solid rgba(0,0,0,.12)}.mui-table.mui-table--bordered>tbody>tr>td{border-bottom:1px solid rgba(0,0,0,.12)}.mui-tabs__bar{list-style:none;padding-left:0;margin-bottom:0;background-color:transparent;white-space:nowrap;overflow-x:auto}.mui-tabs__bar>li{display:inline-block}.mui-tabs__bar>li>a{display:block;white-space:nowrap;text-transform:uppercase;font-weight:500;font-size:14px;color:rgba(0,0,0,.87);cursor:default;height:48px;line-height:48px;padding-left:24px;padding-right:24px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-tabs__bar>li>a:hover{text-decoration:none}.mui-tabs__bar>li.mui--is-active{border-bottom:2px solid #2196F3}.mui-tabs__bar>li.mui--is-active>a{color:#2196F3}.mui-tabs__bar.mui-tabs__bar--justified{display:table;width:100%;table-layout:fixed}.mui-tabs__bar.mui-tabs__bar--justified>li{display:table-cell}.mui-tabs__bar.mui-tabs__bar--justified>li>a{text-align:center;padding-left:0;padding-right:0}.mui-tabs__pane{display:none}.mui-tabs__pane.mui--is-active{display:block}[data-mui-toggle=tab]{animation-duration:.1ms;animation-name:mui-node-inserted}.mui-textfield{display:block;padding-top:15px;margin-bottom:20px;position:relative}.mui-textfield>label{position:absolute;top:0;display:block;width:100%;color:rgba(0,0,0,.54);font-size:12px;font-weight:400;line-height:15px;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.mui-textfield>textarea{padding-top:5px}.mui-textfield>input,.mui-textfield>textarea{display:block}.mui-textfield>input:focus~label,.mui-textfield>textarea:focus~label{color:#2196F3}.mui-textfield--float-label>label{position:absolute;transform:translate(0,15px);font-size:16px;line-height:32px;color:rgba(0,0,0,.26);text-overflow:clip;cursor:text;pointer-events:none}.mui-textfield--float-label>input:focus~label,.mui-textfield--float-label>textarea:focus~label{transform:translate(0,0);font-size:12px;line-height:15px;text-overflow:ellipsis}.mui-textfield--float-label>input:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>input:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>input:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus).mui--is-not-empty~label,.mui-textfield--float-label>textarea:not(:focus):not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield--float-label>textarea:not(:focus)[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:rgba(0,0,0,.54);font-size:12px;line-height:15px;transform:translate(0,0);text-overflow:ellipsis}.mui-textfield--wrap-label{display:table;width:100%;padding-top:0}.mui-textfield--wrap-label:not(.mui-textfield--float-label)>label{display:table-header-group;position:static;white-space:normal;overflow-x:visible}.mui-textfield>input,.mui-textfield>textarea{animation-duration:.1ms;animation-name:mui-node-inserted;display:block;background-color:transparent;color:rgba(0,0,0,.87);border:none;border-bottom:1px solid rgba(0,0,0,.26);outline:0;width:100%;font-size:16px;padding:0;box-shadow:none;border-radius:0;background-image:none}.mui-textfield>input:focus,.mui-textfield>textarea:focus{border-color:#2196F3;border-width:2px}.mui-textfield>input:-moz-read-only,.mui-textfield>input:disabled,.mui-textfield>textarea:-moz-read-only,.mui-textfield>textarea:disabled{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input:disabled,.mui-textfield>input:read-only,.mui-textfield>textarea:disabled,.mui-textfield>textarea:read-only{cursor:not-allowed;background-color:transparent;opacity:1}.mui-textfield>input::-webkit-input-placeholder,.mui-textfield>textarea::-webkit-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::-moz-placeholder,.mui-textfield>textarea::-moz-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input:-ms-input-placeholder,.mui-textfield>textarea:-ms-input-placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input::placeholder,.mui-textfield>textarea::placeholder{color:rgba(0,0,0,.26);opacity:1}.mui-textfield>input{height:32px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>textarea{min-height:64px}.mui-textfield>textarea[rows]:not([rows="2"]):focus{margin-bottom:-1px}.mui-textfield>input:focus{height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):not(:required),.mui-textfield>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required),.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty){border-color:#F44336;border-width:2px}.mui-textfield>input:invalid:not(:focus):not(:required),.mui-textfield>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:not(:required),.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty),.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty){height:33px;margin-bottom:-1px}.mui-textfield>input:invalid:not(:focus):not(:required)~label,.mui-textfield>input:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>input:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>input:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>input:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):not(:required)~label,.mui-textfield>textarea:invalid:not(:focus):required.mui--is-not-empty~label,.mui-textfield>textarea:invalid:not(:focus):required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:invalid:not(:focus):required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:not(:required)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required.mui--is-not-empty~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required:not(:empty):not(.mui--is-empty):not(.mui--is-not-empty)~label,.mui-textfield>textarea:not(:focus).mui--is-invalid:required[value]:not([value=""]):not(.mui--is-empty):not(.mui--is-not-empty)~label{color:#F44336}.mui-textfield:not(.mui-textfield--float-label)>input:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>input:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:invalid:not(:focus):required.mui--is-empty.mui--is-dirty~label,.mui-textfield:not(.mui-textfield--float-label)>textarea:not(:focus).mui--is-invalid:required.mui--is-empty.mui--is-dirty~label{color:#F44336}@keyframes mui-node-inserted{from{opacity:.99}to{opacity:1}}.mui--no-transition{transition:none!important}.mui--no-user-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mui-caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.mui--text-left{text-align:left!important}.mui--text-right{text-align:right!important}.mui--text-center{text-align:center!important}.mui--text-justify{text-align:justify!important}.mui--text-nowrap{white-space:nowrap!important}.mui--align-baseline{vertical-align:baseline!important}.mui--align-top{vertical-align:top!important}.mui--align-middle{vertical-align:middle!important}.mui--align-bottom{vertical-align:bottom!important}.mui--text-dark{color:rgba(0,0,0,.87)}.mui--text-dark-secondary{color:rgba(0,0,0,.54)}.mui--text-dark-hint{color:rgba(0,0,0,.38)}.mui--text-light{color:#FFF}.mui--text-light-secondary{color:rgba(255,255,255,.7)}.mui--text-light-hint{color:rgba(255,255,255,.3)}.mui--text-accent{color:rgba(255,64,129,.87)}.mui--text-accent-secondary{color:rgba(255,64,129,.54)}.mui--text-accent-hint{color:rgba(255,64,129,.38)}.mui--text-black{color:#000}.mui--text-white{color:#FFF}.mui--text-danger{color:#F44336}.mui-list--unstyled{padding-left:0;list-style:none}.mui-list--inline{padding-left:0;list-style:none;margin-left:-5px}.mui-list--inline>li{display:inline-block;padding-left:5px;padding-right:5px}.mui--z1,.mui-dropdown__menu,.mui-select__menu{box-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24)}.mui--z2{box-shadow:0 3px 6px rgba(0,0,0,.16),0 3px 6px rgba(0,0,0,.23)}.mui--z3{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}.mui--z4{box-shadow:0 14px 28px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.22)}.mui--z5{box-shadow:0 19px 38px rgba(0,0,0,.3),0 15px 12px rgba(0,0,0,.22)}.mui--clearfix:after,.mui--clearfix:before{content:" ";display:table}.mui--clearfix:after{clear:both}.mui--pull-right{float:right!important}.mui--pull-left{float:left!important}.mui--hide{display:none!important}.mui--show{display:block!important}.mui--invisible{visibility:hidden}.mui--overflow-hidden{overflow:hidden!important}.mui--overflow-hidden-x{overflow-x:hidden!important}.mui--overflow-hidden-y{overflow-y:hidden!important}.mui--visible-lg-block,.mui--visible-lg-inline,.mui--visible-lg-inline-block,.mui--visible-md-block,.mui--visible-md-inline,.mui--visible-md-inline-block,.mui--visible-sm-block,.mui--visible-sm-inline,.mui--visible-sm-inline-block,.mui--visible-xl-block,.mui--visible-xl-inline,.mui--visible-xl-inline-block,.mui--visible-xs-block,.mui--visible-xs-inline,.mui--visible-xs-inline-block{display:none!important}@media (max-width:543px){.mui-visible-xs{display:block!important}table.mui-visible-xs{display:table}tr.mui-visible-xs{display:table-row!important}td.mui-visible-xs,th.mui-visible-xs{display:table-cell!important}.mui--visible-xs-block{display:block!important}.mui--visible-xs-inline{display:inline!important}.mui--visible-xs-inline-block{display:inline-block!important}}@media (min-width:544px) and (max-width:767px){.mui-visible-sm{display:block!important}table.mui-visible-sm{display:table}tr.mui-visible-sm{display:table-row!important}td.mui-visible-sm,th.mui-visible-sm{display:table-cell!important}.mui--visible-sm-block{display:block!important}.mui--visible-sm-inline{display:inline!important}.mui--visible-sm-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.mui-visible-md{display:block!important}table.mui-visible-md{display:table}tr.mui-visible-md{display:table-row!important}td.mui-visible-md,th.mui-visible-md{display:table-cell!important}.mui--visible-md-block{display:block!important}.mui--visible-md-inline{display:inline!important}.mui--visible-md-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.mui-visible-lg{display:block!important}table.mui-visible-lg{display:table}tr.mui-visible-lg{display:table-row!important}td.mui-visible-lg,th.mui-visible-lg{display:table-cell!important}.mui--visible-lg-block{display:block!important}.mui--visible-lg-inline{display:inline!important}.mui--visible-lg-inline-block{display:inline-block!important}}@media (min-width:1200px){.mui-visible-xl{display:block!important}table.mui-visible-xl{display:table}tr.mui-visible-xl{display:table-row!important}td.mui-visible-xl,th.mui-visible-xl{display:table-cell!important}.mui--visible-xl-block{display:block!important}.mui--visible-xl-inline{display:inline!important}.mui--visible-xl-inline-block{display:inline-block!important}}@media (max-width:543px){.mui--hidden-xs{display:none!important}}@media (min-width:544px) and (max-width:767px){.mui--hidden-sm{display:none!important}}@media (min-width:768px) and (max-width:991px){.mui--hidden-md{display:none!important}}@media (min-width:992px) and (max-width:1199px){.mui--hidden-lg{display:none!important}}@media (min-width:1200px){.mui--hidden-xl{display:none!important}}body.mui-body--scroll-lock{overflow:hidden!important}#mui-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:99999999;background-color:rgba(0,0,0,.2);overflow:auto}.mui-ripple-effect{position:absolute;border-radius:50%;pointer-events:none;opacity:0;animation:mui-ripple-animation 2s}@keyframes mui-ripple-animation{from{transform:scale(1);opacity:.4}to{transform:scale(100);opacity:0}}.mui-btn>.mui-ripple-effect{background-color:#a6a6a6}.mui-btn--primary>.mui-ripple-effect{background-color:#FFF}.mui-btn--dark>.mui-ripple-effect{background-color:#FFF}.mui-btn--danger>.mui-ripple-effect{background-color:#FFF}.mui-btn--accent>.mui-ripple-effect{background-color:#FFF}.mui-btn--flat>.mui-ripple-effect{background-color:#a6a6a6}.mui--text-display4{font-weight:300;font-size:112px;line-height:112px}.mui--text-display3{font-weight:400;font-size:56px;line-height:56px}.mui--text-display2{font-weight:400;font-size:45px;line-height:48px}.mui--text-display1,h1{font-weight:400;font-size:34px;line-height:40px}.mui--text-headline,h2{font-weight:400;font-size:24px;line-height:32px}.mui--text-title,h3{font-weight:400;font-size:20px;line-height:28px}.mui--text-subhead,h4{font-weight:400;font-size:16px;line-height:24px}.mui--text-body2,h5{font-weight:500;font-size:14px;line-height:24px}.mui--text-body1{font-weight:400;font-size:14px;line-height:20px}.mui--text-caption{font-weight:400;font-size:12px;line-height:16px}.mui--text-menu{font-weight:500;font-size:13px;line-height:17px}.mui--text-button{font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase} \ No newline at end of file diff --git a/www/libs/mui/packages/meteor/lib/js/mui.js b/www/libs/mui/packages/meteor/lib/js/mui.js new file mode 100644 index 0000000..1d101ee --- /dev/null +++ b/www/libs/mui/packages/meteor/lib/js/mui.js @@ -0,0 +1,1809 @@ +(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o viewHeight) { + scrollIdeal = (menuPadding + (currentIndex + 1) * optionHeight) - + (-1 * top + wrapperPadding + inputHeight); + scrollMax = numOptions * optionHeight + 2 * menuPadding - height; + scrollTop = Math.min(scrollIdeal, scrollMax); + } + + return { + 'height': height + 'px', + 'top': top + 'px', + 'scrollTop': scrollTop + }; +} + + +/** Define module API */ +module.exports = { + getMenuPositionalCSS: getMenuPositionalCSSFn +}; + +},{}],4:[function(require,module,exports){ +/** + * MUI CSS/JS jqLite module + * @module lib/jqLite + */ + +'use strict'; + + +/** + * Add a class to an element. + * @param {Element} element - The DOM element. + * @param {string} cssClasses - Space separated list of class names. + */ +function jqLiteAddClass(element, cssClasses) { + if (!cssClasses || !element.setAttribute) return; + + var existingClasses = _getExistingClasses(element), + splitClasses = cssClasses.split(' '), + cssClass; + + for (var i=0; i < splitClasses.length; i++) { + cssClass = splitClasses[i].trim(); + if (existingClasses.indexOf(' ' + cssClass + ' ') === -1) { + existingClasses += cssClass + ' '; + } + } + + element.setAttribute('class', existingClasses.trim()); +} + + +/** + * Get or set CSS properties. + * @param {Element} element - The DOM element. + * @param {string} [name] - The property name. + * @param {string} [value] - The property value. + */ +function jqLiteCss(element, name, value) { + // Return full style object + if (name === undefined) { + return getComputedStyle(element); + } + + var nameType = jqLiteType(name); + + // Set multiple values + if (nameType === 'object') { + for (var key in name) element.style[_camelCase(key)] = name[key]; + return; + } + + // Set a single value + if (nameType === 'string' && value !== undefined) { + element.style[_camelCase(name)] = value; + } + + var styleObj = getComputedStyle(element), + isArray = (jqLiteType(name) === 'array'); + + // Read single value + if (!isArray) return _getCurrCssProp(element, name, styleObj); + + // Read multiple values + var outObj = {}, + key; + + for (var i=0; i < name.length; i++) { + key = name[i]; + outObj[key] = _getCurrCssProp(element, key, styleObj); + } + + return outObj; +} + + +/** + * Check if element has class. + * @param {Element} element - The DOM element. + * @param {string} cls - The class name string. + */ +function jqLiteHasClass(element, cls) { + if (!cls || !element.getAttribute) return false; + return (_getExistingClasses(element).indexOf(' ' + cls + ' ') > -1); +} + + +/** + * Return the type of a variable. + * @param {} somevar - The JavaScript variable. + */ +function jqLiteType(somevar) { + // handle undefined + if (somevar === undefined) return 'undefined'; + + // handle others (of type [object ]) + var typeStr = Object.prototype.toString.call(somevar); + if (typeStr.indexOf('[object ') === 0) { + return typeStr.slice(8, -1).toLowerCase(); + } else { + throw new Error("MUI: Could not understand type: " + typeStr); + } +} + + +/** + * Attach an event handler to a DOM element + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOn(element, type, callback, useCapture) { + useCapture = (useCapture === undefined) ? false : useCapture; + + // add to DOM + element.addEventListener(type, callback, useCapture); + + // add to cache + var cache = element._muiEventCache = element._muiEventCache || {}; + cache[type] = cache[type] || []; + cache[type].push([callback, useCapture]); +} + + +/** + * Remove an event handler from a DOM element + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOff(element, type, callback, useCapture) { + useCapture = (useCapture === undefined) ? false : useCapture; + + // remove from cache + var cache = element._muiEventCache = element._muiEventCache || {}, + argsList = cache[type] || [], + args, + i; + + i = argsList.length; + while (i--) { + args = argsList[i]; + + // remove all events if callback is undefined + if (callback === undefined || + (args[0] === callback && args[1] === useCapture)) { + + // remove from cache + argsList.splice(i, 1); + + // remove from DOM + element.removeEventListener(type, args[0], args[1]); + } + } +} + + +/** + * Attach an event hander which will only execute once + * @param {Element} element - The DOM element. + * @param {string} type - The event type name. + * @param {Function} callback - The callback function. + * @param {Boolean} useCapture - Use capture flag. + */ +function jqLiteOne(element, type, callback, useCapture) { + jqLiteOn(element, type, function onFn(ev) { + // execute callback + if (callback) callback.apply(this, arguments); + + // remove wrapper + jqLiteOff(element, type, onFn); + }, useCapture); +} + + +/** + * Get or set horizontal scroll position + * @param {Element} element - The DOM element + * @param {number} [value] - The scroll position + */ +function jqLiteScrollLeft(element, value) { + var win = window; + + // get + if (value === undefined) { + if (element === win) { + var docEl = document.documentElement; + return (win.pageXOffset || docEl.scrollLeft) - (docEl.clientLeft || 0); + } else { + return element.scrollLeft; + } + } + + // set + if (element === win) win.scrollTo(value, jqLiteScrollTop(win)); + else element.scrollLeft = value; +} + + +/** + * Get or set vertical scroll position + * @param {Element} element - The DOM element + * @param {number} value - The scroll position + */ +function jqLiteScrollTop(element, value) { + var win = window; + + // get + if (value === undefined) { + if (element === win) { + var docEl = document.documentElement; + return (win.pageYOffset || docEl.scrollTop) - (docEl.clientTop || 0); + } else { + return element.scrollTop; + } + } + + // set + if (element === win) win.scrollTo(jqLiteScrollLeft(win), value); + else element.scrollTop = value; +} + + +/** + * Return object representing top/left offset and element height/width. + * @param {Element} element - The DOM element. + */ +function jqLiteOffset(element) { + var win = window, + rect = element.getBoundingClientRect(), + scrollTop = jqLiteScrollTop(win), + scrollLeft = jqLiteScrollLeft(win); + + return { + top: rect.top + scrollTop, + left: rect.left + scrollLeft, + height: rect.height, + width: rect.width + }; +} + + +/** + * Attach a callback to the DOM ready event listener + * @param {Function} fn - The callback function. + */ +function jqLiteReady(fn) { + var done = false, + top = true, + doc = document, + win = doc.defaultView, + root = doc.documentElement, + add = doc.addEventListener ? 'addEventListener' : 'attachEvent', + rem = doc.addEventListener ? 'removeEventListener' : 'detachEvent', + pre = doc.addEventListener ? '' : 'on'; + + var init = function(e) { + if (e.type == 'readystatechange' && doc.readyState != 'complete') { + return; + } + + (e.type == 'load' ? win : doc)[rem](pre + e.type, init, false); + if (!done && (done = true)) fn.call(win, e.type || e); + }; + + var poll = function() { + try { root.doScroll('left'); } catch(e) { setTimeout(poll, 50); return; } + init('poll'); + }; + + if (doc.readyState == 'complete') { + fn.call(win, 'lazy'); + } else { + if (doc.createEventObject && root.doScroll) { + try { top = !win.frameElement; } catch(e) { } + if (top) poll(); + } + doc[add](pre + 'DOMContentLoaded', init, false); + doc[add](pre + 'readystatechange', init, false); + win[add](pre + 'load', init, false); + } +} + + +/** + * Remove classes from a DOM element + * @param {Element} element - The DOM element. + * @param {string} cssClasses - Space separated list of class names. + */ +function jqLiteRemoveClass(element, cssClasses) { + if (!cssClasses || !element.setAttribute) return; + + var existingClasses = _getExistingClasses(element), + splitClasses = cssClasses.split(' '), + cssClass; + + for (var i=0; i < splitClasses.length; i++) { + cssClass = splitClasses[i].trim(); + while (existingClasses.indexOf(' ' + cssClass + ' ') >= 0) { + existingClasses = existingClasses.replace(' ' + cssClass + ' ', ' '); + } + } + + element.setAttribute('class', existingClasses.trim()); +} + + +// ------------------------------ +// Utilities +// ------------------------------ +var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g, + MOZ_HACK_REGEXP = /^moz([A-Z])/, + ESCAPE_REGEXP = /([.*+?^=!:${}()|\[\]\/\\])/g, + BOOLEAN_ATTRS; + + +BOOLEAN_ATTRS = { + multiple: true, + selected: true, + checked: true, + disabled: true, + readonly: true, + required: true, + open: true +} + + +function _getExistingClasses(element) { + var classes = (element.getAttribute('class') || '').replace(/[\n\t]/g, ''); + return ' ' + classes + ' '; +} + + +function _camelCase(name) { + return name. + replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) { + return offset ? letter.toUpperCase() : letter; + }). + replace(MOZ_HACK_REGEXP, 'Moz$1'); +} + + +function _escapeRegExp(string) { + return string.replace(ESCAPE_REGEXP, "\\$1"); +} + + +function _getCurrCssProp(elem, name, computed) { + var ret; + + // try computed style + ret = computed.getPropertyValue(name); + + // try style attribute (if element is not attached to document) + if (ret === '' && !elem.ownerDocument) ret = elem.style[_camelCase(name)]; + + return ret; +} + + +/** + * Module API + */ +module.exports = { + /** Add classes */ + addClass: jqLiteAddClass, + + /** Get or set CSS properties */ + css: jqLiteCss, + + /** Check for class */ + hasClass: jqLiteHasClass, + + /** Remove event handlers */ + off: jqLiteOff, + + /** Return offset values */ + offset: jqLiteOffset, + + /** Add event handlers */ + on: jqLiteOn, + + /** Add an execute-once event handler */ + one: jqLiteOne, + + /** DOM ready event handler */ + ready: jqLiteReady, + + /** Remove classes */ + removeClass: jqLiteRemoveClass, + + /** Check JavaScript variable instance type */ + type: jqLiteType, + + /** Get or set horizontal scroll position */ + scrollLeft: jqLiteScrollLeft, + + /** Get or set vertical scroll position */ + scrollTop: jqLiteScrollTop +}; + +},{}],5:[function(require,module,exports){ +/** + * MUI CSS/JS utilities module + * @module lib/util + */ + +'use strict'; + + +var config = require('../config'), + jqLite = require('./jqLite'), + nodeInsertedCallbacks = [], + scrollLock = 0, + scrollLockCls = 'mui-body--scroll-lock', + scrollLockPos, + _supportsPointerEvents; + + +/** + * Logging function + */ +function logFn() { + var win = window; + + if (config.debug && typeof win.console !== "undefined") { + try { + win.console.log.apply(win.console, arguments); + } catch (a) { + var e = Array.prototype.slice.call(arguments); + win.console.log(e.join("\n")); + } + } +} + + +/** + * Load CSS text in new stylesheet + * @param {string} cssText - The css text. + */ +function loadStyleFn(cssText) { + var doc = document, + head; + + // copied from jQuery + head = doc.head || + doc.getElementsByTagName('head')[0] || + doc.documentElement; + + var e = doc.createElement('style'); + e.type = 'text/css'; + + if (e.styleSheet) e.styleSheet.cssText = cssText; + else e.appendChild(doc.createTextNode(cssText)); + + // add to document + head.insertBefore(e, head.firstChild); + + return e; +} + + +/** + * Raise an error + * @param {string} msg - The error message. + */ +function raiseErrorFn(msg, useConsole) { + if (useConsole) { + if (typeof console !== 'undefined') console.error('MUI Warning: ' + msg); + } else { + throw new Error('MUI: ' + msg); + } +} + + +/** + * Register callbacks on muiNodeInserted event + * @param {function} callbackFn - The callback function. + */ +function onNodeInsertedFn(callbackFn) { + nodeInsertedCallbacks.push(callbackFn); + + // initalize listeners + if (nodeInsertedCallbacks._initialized === undefined) { + var doc = document; + + jqLite.on(doc, 'animationstart', animationHandlerFn); + jqLite.on(doc, 'mozAnimationStart', animationHandlerFn); + jqLite.on(doc, 'webkitAnimationStart', animationHandlerFn); + + nodeInsertedCallbacks._initialized = true; + } +} + + +/** + * Execute muiNodeInserted callbacks + * @param {Event} ev - The DOM event. + */ +function animationHandlerFn(ev) { + // check animation name + if (ev.animationName !== 'mui-node-inserted') return; + + var el = ev.target; + + // iterate through callbacks + for (var i=nodeInsertedCallbacks.length - 1; i >= 0; i--) { + nodeInsertedCallbacks[i](el); + } +} + + +/** + * Convert Classname object, with class as key and true/false as value, to an + * class string. + * @param {Object} classes The classes + * @return {String} class string + */ +function classNamesFn(classes) { + var cs = ''; + for (var i in classes) { + cs += (classes[i]) ? i + ' ' : ''; + } + return cs.trim(); +} + + +/** + * Check if client supports pointer events. + */ +function supportsPointerEventsFn() { + // check cache + if (_supportsPointerEvents !== undefined) return _supportsPointerEvents; + + var element = document.createElement('x'); + element.style.cssText = 'pointer-events:auto'; + _supportsPointerEvents = (element.style.pointerEvents === 'auto'); + return _supportsPointerEvents; +} + + +/** + * Create callback closure. + * @param {Object} instance - The object instance. + * @param {String} funcName - The name of the callback function. + */ +function callbackFn(instance, funcName) { + return function() {instance[funcName].apply(instance, arguments);}; +} + + +/** + * Dispatch event. + * @param {Element} element - The DOM element. + * @param {String} eventType - The event type. + * @param {Boolean} bubbles=true - If true, event bubbles. + * @param {Boolean} cancelable=true = If true, event is cancelable + * @param {Object} [data] - Data to add to event object + */ +function dispatchEventFn(element, eventType, bubbles, cancelable, data) { + var ev = document.createEvent('HTMLEvents'), + bubbles = (bubbles !== undefined) ? bubbles : true, + cancelable = (cancelable !== undefined) ? cancelable : true, + k; + + ev.initEvent(eventType, bubbles, cancelable); + + // add data to event object + if (data) for (k in data) ev[k] = data[k]; + + // dispatch + if (element) element.dispatchEvent(ev); + + return ev; +} + + +/** + * Turn on window scroll lock. + */ +function enableScrollLockFn() { + // increment counter + scrollLock += 1 + + // add lock + if (scrollLock === 1) { + var win = window, + doc = document; + + scrollLockPos = {left: jqLite.scrollLeft(win), top: jqLite.scrollTop(win)}; + jqLite.addClass(doc.body, scrollLockCls); + win.scrollTo(scrollLockPos.left, scrollLockPos.top); + } +} + + +/** + * Turn off window scroll lock. + */ +function disableScrollLockFn() { + // ignore + if (scrollLock === 0) return; + + // decrement counter + scrollLock -= 1 + + // remove lock + if (scrollLock === 0) { + var win = window, + doc = document; + + jqLite.removeClass(doc.body, scrollLockCls); + win.scrollTo(scrollLockPos.left, scrollLockPos.top); + } +} + + +/** + * Define the module API + */ +module.exports = { + /** Create callback closures */ + callback: callbackFn, + + /** Classnames object to string */ + classNames: classNamesFn, + + /** Disable scroll lock */ + disableScrollLock: disableScrollLockFn, + + /** Dispatch event */ + dispatchEvent: dispatchEventFn, + + /** Enable scroll lock */ + enableScrollLock: enableScrollLockFn, + + /** Log messages to the console when debug is turned on */ + log: logFn, + + /** Load CSS text as new stylesheet */ + loadStyle: loadStyleFn, + + /** Register muiNodeInserted handler */ + onNodeInserted: onNodeInsertedFn, + + /** Raise MUI error */ + raiseError: raiseErrorFn, + + /** Support Pointer Events check */ + supportsPointerEvents: supportsPointerEventsFn +}; + +},{"../config":2,"./jqLite":4}],6:[function(require,module,exports){ +/** + * MUI CSS/JS dropdown module + * @module dropdowns + */ + +'use strict'; + + +var jqLite = require('./lib/jqLite'), + util = require('./lib/util'), + attrKey = 'data-mui-toggle', + attrSelector = '[data-mui-toggle="dropdown"]', + openClass = 'mui--is-open', + menuClass = 'mui-dropdown__menu'; + + +/** + * Initialize toggle element. + * @param {Element} toggleEl - The toggle element. + */ +function initialize(toggleEl) { + // check flag + if (toggleEl._muiDropdown === true) return; + else toggleEl._muiDropdown = true; + + // use type "button" to prevent form submission by default + if (!toggleEl.hasAttribute('type')) toggleEl.type = 'button'; + + // attach click handler + jqLite.on(toggleEl, 'click', clickHandler); +} + + +/** + * Handle click events on dropdown toggle element. + * @param {Event} ev - The DOM event + */ +function clickHandler(ev) { + // only left clicks + if (ev.button !== 0) return; + + var toggleEl = this; + + // exit if toggle button is disabled + if (toggleEl.getAttribute('disabled') !== null) return; + + // toggle dropdown + toggleDropdown(toggleEl); +} + + +/** + * Toggle the dropdown. + * @param {Element} toggleEl - The dropdown toggle element. + */ +function toggleDropdown(toggleEl) { + var wrapperEl = toggleEl.parentNode, + menuEl = toggleEl.nextElementSibling, + doc = wrapperEl.ownerDocument; + + // exit if no menu element + if (!menuEl || !jqLite.hasClass(menuEl, menuClass)) { + return util.raiseError('Dropdown menu element not found'); + } + + // method to close dropdown + function closeDropdownFn() { + jqLite.removeClass(menuEl, openClass); + + // remove event handlers + jqLite.off(doc, 'click', closeDropdownFn); + } + + // method to open dropdown + function openDropdownFn() { + // position menu element below toggle button + var wrapperRect = wrapperEl.getBoundingClientRect(), + toggleRect = toggleEl.getBoundingClientRect(); + + var top = toggleRect.top - wrapperRect.top + toggleRect.height; + jqLite.css(menuEl, 'top', top + 'px'); + + // add open class to wrapper + jqLite.addClass(menuEl, openClass); + + // close dropdown when user clicks outside of menu + setTimeout(function() {jqLite.on(doc, 'click', closeDropdownFn);}, 0); + } + + // toggle dropdown + if (jqLite.hasClass(menuEl, openClass)) closeDropdownFn(); + else openDropdownFn(); +} + + +/** Define module API */ +module.exports = { + /** Initialize module listeners */ + initListeners: function() { + var doc = document; + + // markup elements available when method is called + var elList = doc.querySelectorAll(attrSelector); + for (var i=elList.length - 1; i >= 0; i--) initialize(elList[i]); + + // listen for new elements + util.onNodeInserted(function(el) { + if (el.getAttribute(attrKey) === 'dropdown') initialize(el); + }); + } +}; + +},{"./lib/jqLite":4,"./lib/util":5}],7:[function(require,module,exports){ +module.exports=require(4) +},{}],8:[function(require,module,exports){ +/** + * MUI CSS/JS overlay module + * @module overlay + */ + +'use strict'; + + +var util = require('./lib/util'), + jqLite = require('./lib/jqLite'), + overlayId = 'mui-overlay', + bodyClass = 'mui--overflow-hidden', + iosRegex = /(iPad|iPhone|iPod)/g; + + +/** + * Turn overlay on/off. + * @param {string} action - Turn overlay "on"/"off". + * @param {object} [options] + * @config {boolean} [keyboard] - If true, close when escape key is pressed. + * @config {boolean} [static] - If false, close when backdrop is clicked. + * @config {Function} [onclose] - Callback function to execute on close + * @param {Element} [childElement] - Child element to add to overlay. + */ +function overlayFn(action) { + var overlayEl; + + if (action === 'on') { + // extract arguments + var arg, options, childElement; + + // pull options and childElement from arguments + for (var i=arguments.length - 1; i > 0; i--) { + arg = arguments[i]; + + if (jqLite.type(arg) === 'object') options = arg; + if (arg instanceof Element && arg.nodeType === 1) childElement = arg; + } + + // option defaults + options = options || {}; + if (options.keyboard === undefined) options.keyboard = true; + if (options.static === undefined) options.static = false; + + // execute method + overlayEl = overlayOn(options, childElement); + + } else if (action === 'off') { + overlayEl = overlayOff(); + + } else { + // raise error + util.raiseError("Expecting 'on' or 'off'"); + } + + return overlayEl; +} + + +/** + * Turn on overlay. + * @param {object} options - Overlay options. + * @param {Element} childElement - The child element. + */ +function overlayOn(options, childElement) { + var bodyEl = document.body, + overlayEl = document.getElementById(overlayId); + + // add overlay + util.enableScrollLock(); + //jqLite.addClass(bodyEl, bodyClass); + + if (!overlayEl) { + // create overlayEl + overlayEl = document.createElement('div'); + overlayEl.setAttribute('id', overlayId); + + // add child element + if (childElement) overlayEl.appendChild(childElement); + + bodyEl.appendChild(overlayEl); + + } else { + // remove existing children + while (overlayEl.firstChild) overlayEl.removeChild(overlayEl.firstChild); + + // add child element + if (childElement) overlayEl.appendChild(childElement); + } + + // iOS bugfix + if (iosRegex.test(navigator.userAgent)) { + jqLite.css(overlayEl, 'cursor', 'pointer'); + } + + // handle options + if (options.keyboard) addKeyupHandler(); + else removeKeyupHandler(); + + if (options.static) removeClickHandler(overlayEl); + else addClickHandler(overlayEl); + + // attach options + overlayEl.muiOptions = options; + + return overlayEl; +} + + +/** + * Turn off overlay. + */ +function overlayOff() { + var overlayEl = document.getElementById(overlayId), + callbackFn; + + if (overlayEl) { + // remove children + while (overlayEl.firstChild) overlayEl.removeChild(overlayEl.firstChild); + + // remove overlay element + overlayEl.parentNode.removeChild(overlayEl); + + // callback reference + callbackFn = overlayEl.muiOptions.onclose; + + // remove click handler + removeClickHandler(overlayEl); + } + + util.disableScrollLock(); + + // remove keyup handler + removeKeyupHandler(); + + // execute callback + if (callbackFn) callbackFn(); + + return overlayEl; +} + + +/** + * Add keyup handler. + */ +function addKeyupHandler() { + jqLite.on(document, 'keyup', onKeyup); +} + + +/** + * Remove keyup handler. + */ +function removeKeyupHandler() { + jqLite.off(document, 'keyup', onKeyup); +} + + +/** + * Teardown overlay when escape key is pressed. + */ +function onKeyup(ev) { + if (ev.keyCode === 27) overlayOff(); +} + + +/** + * Add click handler. + */ +function addClickHandler(overlayEl) { + jqLite.on(overlayEl, 'click', onClick); +} + + +/** + * Remove click handler. + */ +function removeClickHandler(overlayEl) { + jqLite.off(overlayEl, 'click', onClick); +} + + +/** + * Teardown overlay when backdrop is clicked. + */ +function onClick(ev) { + if (ev.target.id === overlayId) overlayOff(); +} + + +/** Define module API */ +module.exports = overlayFn; + +},{"./lib/jqLite":4,"./lib/util":5}],9:[function(require,module,exports){ +/** + * MUI CSS/JS ripple module + * @module ripple + */ + +'use strict'; + + +var jqLite = require('./lib/jqLite'), + util = require('./lib/util'), + btnClass = 'mui-btn', + btnFABClass = 'mui-btn--fab', + rippleClass = 'mui-ripple-effect', + animationName = 'mui-btn-inserted'; + + +/** + * Add ripple effects to button element. + * @param {Element} buttonEl - The button element. + */ +function initialize(buttonEl) { + // check flag + if (buttonEl._muiRipple === true) return; + else buttonEl._muiRipple = true; + + // exit if element is INPUT (doesn't support absolute positioned children) + if (buttonEl.tagName === 'INPUT') return; + + // attach event handler + jqLite.on(buttonEl, 'touchstart', eventHandler); + jqLite.on(buttonEl, 'mousedown', eventHandler); +} + + +/** + * Event handler + * @param {Event} ev - The DOM event + */ +function eventHandler(ev) { + // only left clicks + if (ev.button !== 0) return; + + var buttonEl = this; + + // exit if button is disabled + if (buttonEl.disabled === true) return; + + // de-dupe touchstart and mousedown with 100msec flag + if (buttonEl.touchFlag === true) { + return; + } else { + buttonEl.touchFlag = true; + setTimeout(function() { + buttonEl.touchFlag = false; + }, 100); + } + + var rippleEl = document.createElement('div'); + rippleEl.className = rippleClass; + + var offset = jqLite.offset(buttonEl), + xPos = ev.pageX - offset.left, + yPos = ev.pageY - offset.top, + diameter, + radius; + + // get height + if (jqLite.hasClass(buttonEl, btnFABClass)) diameter = offset.height / 2; + else diameter = offset.height; + + radius = diameter / 2; + + jqLite.css(rippleEl, { + height: diameter + 'px', + width: diameter + 'px', + top: yPos - radius + 'px', + left: xPos - radius + 'px' + }); + + buttonEl.appendChild(rippleEl); + + window.setTimeout(function() { + var parentNode = rippleEl.parentNode; + if (parentNode) parentNode.removeChild(rippleEl); + }, 2000); +} + + +/** Define module API */ +module.exports = { + /** Initialize module listeners */ + initListeners: function() { + var doc = document; + + // markup elements available when method is called + var elList = doc.getElementsByClassName(btnClass); + for (var i=elList.length - 1; i >= 0; i--) initialize(elList[i]); + + // listen for new elements + util.onNodeInserted(function(el) { + if (jqLite.hasClass(el, btnClass)) initialize(el); + }); + } +}; + +},{"./lib/jqLite":4,"./lib/util":5}],10:[function(require,module,exports){ +/** + * MUI CSS/JS select module + * @module forms/select + */ + +'use strict'; + + +var jqLite = require('./lib/jqLite'), + util = require('./lib/util'), + formlib = require('./lib/forms'), + wrapperClass = 'mui-select', + cssSelector = '.mui-select > select', + menuClass = 'mui-select__menu', + selectedClass = 'mui--is-selected', + doc = document, + win = window; + + +/** + * Initialize select element. + * @param {Element} selectEl - The select element. + */ +function initialize(selectEl) { + // check flag + if (selectEl._muiSelect === true) return; + else selectEl._muiSelect = true; + + // use default behavior on touch devices + if ('ontouchstart' in doc.documentElement) return; + + // initialize element + new Select(selectEl); +} + + +/** + * Creates a new Select object + * @class + */ +function Select(selectEl) { + // instance variables + this.selectEl = selectEl; + this.wrapperEl = selectEl.parentNode; + this.useDefault = false; // currently unused but let's keep just in case + + // attach event handlers + jqLite.on(selectEl, 'mousedown', util.callback(this, 'mousedownHandler')); + jqLite.on(selectEl, 'focus', util.callback(this, 'focusHandler')); + jqLite.on(selectEl, 'click', util.callback(this, 'clickHandler')); + + // make wrapper focusable and fix firefox bug + this.wrapperEl.tabIndex = -1; + var callbackFn = util.callback(this, 'wrapperFocusHandler'); + jqLite.on(this.wrapperEl, 'focus', callbackFn); +} + + +/** + * Disable default dropdown on mousedown. + * @param {Event} ev - The DOM event + */ +Select.prototype.mousedownHandler = function(ev) { + if (ev.button !== 0 || this.useDefault === true) return; + ev.preventDefault(); +} + + +/** + * Handle focus event on select element. + * @param {Event} ev - The DOM event + */ +Select.prototype.focusHandler = function(ev) { + // check flag + if (this.useDefault === true) return; + + var selectEl = this.selectEl, + wrapperEl = this.wrapperEl, + origIndex = selectEl.tabIndex, + keydownFn = util.callback(this, 'keydownHandler'); + + // attach keydown handler + jqLite.on(doc, 'keydown', keydownFn); + + // disable tabfocus once + selectEl.tabIndex = -1; + jqLite.one(wrapperEl, 'blur', function() { + selectEl.tabIndex = origIndex; + jqLite.off(doc, 'keydown', keydownFn); + }); + + // defer focus to parent + wrapperEl.focus(); +} + + +/** + * Handle keydown events on doc + **/ +Select.prototype.keydownHandler = function(ev) { + var keyCode = ev.keyCode; + + // spacebar, down, up + if (keyCode === 32 || keyCode === 38 || keyCode === 40) { + // prevent win scroll + ev.preventDefault(); + + if (this.selectEl.disabled !== true) this.renderMenu(); + } +} + + +/** + * Handle focus event on wrapper element. + */ +Select.prototype.wrapperFocusHandler = function() { + // firefox bugfix + if (this.selectEl.disabled) return this.wrapperEl.blur(); +} + + +/** + * Handle click events on select element. + * @param {Event} ev - The DOM event + */ +Select.prototype.clickHandler = function(ev) { + // only left clicks + if (ev.button !== 0) return; + this.renderMenu(); +} + + +/** + * Render options dropdown. + */ +Select.prototype.renderMenu = function() { + // check and reset flag + if (this.useDefault === true) return this.useDefault = false; + + new Menu(this.wrapperEl, this.selectEl); +} + + +/** + * Creates a new Menu + * @class + */ +function Menu(wrapperEl, selectEl) { + // add scroll lock + util.enableScrollLock(); + + // instance variables + this.origIndex = null; + this.currentIndex = null; + this.selectEl = selectEl; + this.menuEl = this._createMenuEl(wrapperEl, selectEl); + this.clickCallbackFn = util.callback(this, 'clickHandler'); + this.keydownCallbackFn = util.callback(this, 'keydownHandler'); + this.destroyCallbackFn = util.callback(this, 'destroy'); + + // add to DOM + wrapperEl.appendChild(this.menuEl); + jqLite.scrollTop(this.menuEl, this.menuEl._muiScrollTop); + + // blur active element + setTimeout(function() { + // ie10 bugfix + if (doc.activeElement.nodeName.toLowerCase() !== "body") { + doc.activeElement.blur(); + } + }, 0); + + // attach event handlers + jqLite.on(this.menuEl, 'click', this.clickCallbackFn); + jqLite.on(doc, 'keydown', this.keydownCallbackFn); + jqLite.on(win, 'resize', this.destroyCallbackFn); + + // attach event handler after current event loop exits + var fn = this.destroyCallbackFn; + setTimeout(function() {jqLite.on(doc, 'click', fn);}, 0); +} + + +/** + * Create menu element + * @param {Element} selectEl - The select element + */ +Menu.prototype._createMenuEl = function(wrapperEl, selectEl) { + var menuEl = doc.createElement('div'), + optionEls = selectEl.children, + numOptions = optionEls.length, + selectedPos = 0, + optionEl, + itemEl, + i; + + menuEl.className = menuClass; + + // add options + for (i=0; i < numOptions; i++) { + optionEl = optionEls[i]; + + itemEl = doc.createElement('div'); + itemEl.textContent = optionEl.textContent; + itemEl._muiPos = i; + + if (optionEl.selected) { + itemEl.setAttribute('class', selectedClass); + selectedPos = i; + } + + menuEl.appendChild(itemEl); + } + + // save indices + this.origIndex = selectedPos; + this.currentIndex = selectedPos; + + // set position + var props = formlib.getMenuPositionalCSS( + wrapperEl, + numOptions, + selectedPos + ); + + jqLite.css(menuEl, props); + menuEl._muiScrollTop = props.scrollTop; + + return menuEl; +} + + +/** + * Handle keydown events on doc element. + * @param {Event} ev - The DOM event + */ +Menu.prototype.keydownHandler = function(ev) { + var keyCode = ev.keyCode; + + // tab + if (keyCode === 9) return this.destroy(); + + // escape | up | down | enter + if (keyCode === 27 || keyCode === 40 || keyCode === 38 || keyCode === 13) { + ev.preventDefault(); + } + + if (keyCode === 27) { + this.destroy(); + } else if (keyCode === 40) { + this.increment(); + } else if (keyCode === 38) { + this.decrement(); + } else if (keyCode === 13) { + this.selectCurrent(); + this.destroy(); + } +} + + +/** + * Handle click events on menu element. + * @param {Event} ev - The DOM event + */ +Menu.prototype.clickHandler = function(ev) { + // don't allow events to bubble + ev.stopPropagation(); + + var pos = ev.target._muiPos; + + // ignore clicks on non-items + if (pos === undefined) return; + + // select option + this.currentIndex = pos; + this.selectCurrent(); + + // destroy menu + this.destroy(); +} + + +/** + * Increment selected item + */ +Menu.prototype.increment = function() { + if (this.currentIndex === this.menuEl.children.length - 1) return; + + var optionEls = this.menuEl.children; + + jqLite.removeClass(optionEls[this.currentIndex], selectedClass); + this.currentIndex += 1; + jqLite.addClass(optionEls[this.currentIndex], selectedClass); +} + + +/** + * Decrement selected item + */ +Menu.prototype.decrement = function() { + if (this.currentIndex === 0) return; + + var optionEls = this.menuEl.children; + + jqLite.removeClass(optionEls[this.currentIndex], selectedClass); + this.currentIndex -= 1; + jqLite.addClass(optionEls[this.currentIndex], selectedClass); +} + + +/** + * Select current item + */ +Menu.prototype.selectCurrent = function() { + if (this.currentIndex !== this.origIndex) { + var optionEls = this.selectEl.children; + optionEls[this.origIndex].selected = false; + optionEls[this.currentIndex].selected = true; + + // trigger change event + util.dispatchEvent(this.selectEl, 'change'); + } +} + + +/** + * Destroy menu and detach event handlers + */ +Menu.prototype.destroy = function() { + // remove element and focus element + var parentNode = this.menuEl.parentNode; + if (parentNode) parentNode.removeChild(this.menuEl); + + this.selectEl.focus(); + + // remove scroll lock + util.disableScrollLock(); + + // remove event handlers + jqLite.off(this.menuEl, 'click', this.clickCallbackFn); + jqLite.off(doc, 'keydown', this.keydownCallbackFn); + jqLite.off(doc, 'click', this.destroyCallbackFn); + jqLite.off(win, 'resize', this.destroyCallbackFn); +} + + +/** Define module API */ +module.exports = { + /** Initialize module listeners */ + initListeners: function() { + // markup elements available when method is called + var elList = doc.querySelectorAll(cssSelector); + for (var i=elList.length - 1; i >= 0; i--) initialize(elList[i]); + + // listen for new elements + util.onNodeInserted(function(el) { + if (el.tagName === 'SELECT' && + jqLite.hasClass(el.parentNode, wrapperClass)) { + initialize(el); + } + }); + } +}; + +},{"./lib/forms":3,"./lib/jqLite":4,"./lib/util":5}],11:[function(require,module,exports){ +/** + * MUI CSS/JS tabs module + * @module tabs + */ + +'use strict'; + + +var jqLite = require('./lib/jqLite'), + util = require('./lib/util'), + attrKey = 'data-mui-toggle', + attrSelector = '[' + attrKey + '="tab"]', + controlsAttrKey = 'data-mui-controls', + activeClass = 'mui--is-active', + showstartKey = 'mui.tabs.showstart', + showendKey = 'mui.tabs.showend', + hidestartKey = 'mui.tabs.hidestart', + hideendKey = 'mui.tabs.hideend'; + + +/** + * Initialize the toggle element + * @param {Element} toggleEl - The toggle element. + */ +function initialize(toggleEl) { + // check flag + if (toggleEl._muiTabs === true) return; + else toggleEl._muiTabs = true; + + // attach click handler + jqLite.on(toggleEl, 'click', clickHandler); +} + + +/** + * Handle clicks on the toggle element. + * @param {Event} ev - The DOM event. + */ +function clickHandler(ev) { + // only left clicks + if (ev.button !== 0) return; + + var toggleEl = this; + + // exit if toggle element is disabled + if (toggleEl.getAttribute('disabled') !== null) return; + + activateTab(toggleEl); +} + + +/** + * Activate the tab controlled by the toggle element. + * @param {Element} toggleEl - The toggle element. + */ +function activateTab(currToggleEl) { + var currTabEl = currToggleEl.parentNode, + currPaneId = currToggleEl.getAttribute(controlsAttrKey), + currPaneEl = document.getElementById(currPaneId), + prevTabEl, + prevPaneEl, + prevPaneId, + prevToggleEl, + currData, + prevData, + ev1, + ev2, + cssSelector; + + // exit if already active + if (jqLite.hasClass(currTabEl, activeClass)) return; + + // raise error if pane doesn't exist + if (!currPaneEl) util.raiseError('Tab pane "' + currPaneId + '" not found'); + + // get previous pane + prevPaneEl = getActiveSibling(currPaneEl); + prevPaneId = prevPaneEl.id; + + // get previous toggle and tab elements + cssSelector = '[' + controlsAttrKey + '="' + prevPaneId + '"]'; + prevToggleEl = document.querySelectorAll(cssSelector)[0]; + prevTabEl = prevToggleEl.parentNode; + + // define event data + currData = {paneId: currPaneId, relatedPaneId: prevPaneId}; + prevData = {paneId: prevPaneId, relatedPaneId: currPaneId}; + + // dispatch 'hidestart', 'showstart' events + ev1 = util.dispatchEvent(prevToggleEl, hidestartKey, true, true, prevData); + ev2 = util.dispatchEvent(currToggleEl, showstartKey, true, true, currData); + + // let events bubble + setTimeout(function() { + // exit if either event was canceled + if (ev1.defaultPrevented || ev2.defaultPrevented) return; + + // de-activate previous + if (prevTabEl) jqLite.removeClass(prevTabEl, activeClass); + if (prevPaneEl) jqLite.removeClass(prevPaneEl, activeClass); + + // activate current + jqLite.addClass(currTabEl, activeClass); + jqLite.addClass(currPaneEl, activeClass); + + // dispatch 'hideend', 'showend' events + util.dispatchEvent(prevToggleEl, hideendKey, true, false, prevData); + util.dispatchEvent(currToggleEl, showendKey, true, false, currData); + }, 0); +} + + +/** + * Get previous active sibling. + * @param {Element} el - The anchor element. + */ +function getActiveSibling(el) { + var elList = el.parentNode.children, + q = elList.length, + activeEl = null, + tmpEl; + + while (q-- && !activeEl) { + tmpEl = elList[q]; + if (tmpEl !== el && jqLite.hasClass(tmpEl, activeClass)) activeEl = tmpEl + } + + return activeEl; +} + + +/** Define module API */ +module.exports = { + /** Initialize module listeners */ + initListeners: function() { + // markup elements available when method is called + var elList = document.querySelectorAll(attrSelector); + for (var i=elList.length - 1; i >= 0; i--) initialize(elList[i]); + + // TODO: listen for new elements + util.onNodeInserted(function(el) { + if (el.getAttribute(attrKey) === 'tab') initialize(el); + }); + }, + + /** External API */ + api: { + activate: function(paneId) { + var cssSelector = '[' + controlsAttrKey + '=' + paneId + ']', + toggleEl = document.querySelectorAll(cssSelector); + + if (!toggleEl.length) { + util.raiseError('Tab control for pane "' + paneId + '" not found'); + } + + activateTab(toggleEl[0]); + } + } +}; + +},{"./lib/jqLite":4,"./lib/util":5}],12:[function(require,module,exports){ +/** + * MUI CSS/JS form-control module + * @module forms/form-control + */ + +'use strict'; + + +var jqLite = require('./lib/jqLite'), + util = require('./lib/util'), + cssSelector = '.mui-textfield > input, .mui-textfield > textarea', + emptyClass = 'mui--is-empty', + notEmptyClass = 'mui--is-not-empty', + dirtyClass = 'mui--is-dirty', + floatingLabelClass = 'mui-textfield--float-label'; + + +/** + * Initialize input element. + * @param {Element} inputEl - The input element. + */ +function initialize(inputEl) { + // check flag + if (inputEl._muiTextfield === true) return; + else inputEl._muiTextfield = true; + + if (inputEl.value.length) jqLite.addClass(inputEl, notEmptyClass); + else jqLite.addClass(inputEl, emptyClass); + + jqLite.on(inputEl, 'input', inputHandler); + jqLite.on(inputEl, 'change', inputHandler); + + // add dirty class on focus + jqLite.on(inputEl, 'focus', function(){jqLite.addClass(this, dirtyClass);}); +} + + +/** + * Handle input events. + */ +function inputHandler() { + var inputEl = this; + + if (inputEl.value.length) { + jqLite.removeClass(inputEl, emptyClass); + jqLite.addClass(inputEl, notEmptyClass); + } else { + jqLite.removeClass(inputEl, notEmptyClass); + jqLite.addClass(inputEl, emptyClass) + } + + jqLite.addClass(inputEl, dirtyClass); +} + + +/** Define module API */ +module.exports = { + /** Initialize input elements */ + initialize: initialize, + + /** Initialize module listeners */ + initListeners: function() { + var doc = document; + + // markup elements available when method is called + var elList = doc.querySelectorAll(cssSelector); + for (var i=elList.length - 1; i >= 0; i--) initialize(elList[i]); + + // listen for new elements + util.onNodeInserted(function(el) { + if (el.tagName === 'INPUT' || el.tagName === 'TEXTAREA') initialize(el); + }); + + // add transition css for floating labels + setTimeout(function() { + var css = '.mui-textfield.mui-textfield--float-label > label {' + [ + '-webkit-transition', + '-moz-transition', + '-o-transition', + 'transition', + '' + ].join(':all .15s ease-out;') + '}'; + + util.loadStyle(css); + }, 150); + + // pointer-events shim for floating labels + if (util.supportsPointerEvents() === false) { + jqLite.on(document, 'click', function(ev) { + var targetEl = ev.target; + + if (targetEl.tagName === 'LABEL' && + jqLite.hasClass(targetEl.parentNode, floatingLabelClass)) { + var inputEl = targetEl.previousElementSibling; + if (inputEl) inputEl.focus(); + } + }); + } + } +}; + +},{"./lib/jqLite":4,"./lib/util":5}]},{},[1]) \ No newline at end of file diff --git a/www/libs/mui/packages/meteor/lib/js/mui.min.js b/www/libs/mui/packages/meteor/lib/js/mui.min.js new file mode 100644 index 0000000..833d99c --- /dev/null +++ b/www/libs/mui/packages/meteor/lib/js/mui.min.js @@ -0,0 +1 @@ +!function e(t,n,i){function o(l,s){if(!n[l]){if(!t[l]){var a="function"==typeof require&&require;if(!s&&a)return a(l,!0);if(r)return r(l,!0);throw new Error("Cannot find module '"+l+"'")}var c=n[l]={exports:{}};t[l][0].call(c.exports,function(e){var n=t[l][1][e];return o(n?n:e)},c,c.exports,e,t,n,i)}return n[l].exports}for(var r="function"==typeof require&&require,l=0;ld&&(h=s+(n+1)*l-(-1*i+o+r),m=t*l+2*s-p,v=Math.min(h,m)),{height:p+"px",top:i+"px",scrollTop:v}}var o=15,r=32,l=42,s=8;t.exports={getMenuPositionalCSS:i}},{}],4:[function(e,t,n){"use strict";function i(e,t){if(t&&e.setAttribute){for(var n,i=m(e),o=t.split(" "),r=0;r-1:!1}function l(e){if(void 0===e)return"undefined";var t=Object.prototype.toString.call(e);if(0===t.indexOf("[object "))return t.slice(8,-1).toLowerCase();throw new Error("MUI: Could not understand type: "+t)}function s(e,t,n,i){i=void 0===i?!1:i,e.addEventListener(t,n,i);var o=e._muiEventCache=e._muiEventCache||{};o[t]=o[t]||[],o[t].push([n,i])}function a(e,t,n,i){i=void 0===i?!1:i;var o,r,l=e._muiEventCache=e._muiEventCache||{},s=l[t]||[];for(r=s.length;r--;)o=s[r],(void 0===n||o[0]===n&&o[1]===i)&&(s.splice(r,1),e.removeEventListener(t,o[0],o[1]))}function c(e,t,n,i){s(e,t,function o(i){n&&n.apply(this,arguments),a(e,t,o)},i)}function u(e,t){var n=window;if(void 0===t){if(e===n){var i=document.documentElement;return(n.pageXOffset||i.scrollLeft)-(i.clientLeft||0)}return e.scrollLeft}e===n?n.scrollTo(t,d(n)):e.scrollLeft=t}function d(e,t){var n=window;if(void 0===t){if(e===n){var i=document.documentElement;return(n.pageYOffset||i.scrollTop)-(i.clientTop||0)}return e.scrollTop}e===n?n.scrollTo(u(n),t):e.scrollTop=t}function f(e){var t=window,n=e.getBoundingClientRect(),i=d(t),o=u(t);return{top:n.top+i,left:n.left+o,height:n.height,width:n.width}}function p(e){var t=!1,n=!0,i=document,o=i.defaultView,r=i.documentElement,l=i.addEventListener?"addEventListener":"attachEvent",s=i.addEventListener?"removeEventListener":"detachEvent",a=i.addEventListener?"":"on",c=function(n){"readystatechange"==n.type&&"complete"!=i.readyState||(("load"==n.type?o:i)[s](a+n.type,c,!1),!t&&(t=!0)&&e.call(o,n.type||n))},u=function(){try{r.doScroll("left")}catch(e){return void setTimeout(u,50)}c("poll")};if("complete"==i.readyState)e.call(o,"lazy");else{if(i.createEventObject&&r.doScroll){try{n=!o.frameElement}catch(d){}n&&u()}i[l](a+"DOMContentLoaded",c,!1),i[l](a+"readystatechange",c,!1),o[l](a+"load",c,!1)}}function h(e,t){if(t&&e.setAttribute){for(var n,i=m(e),o=t.split(" "),r=0;r=0;)i=i.replace(" "+n+" "," ");e.setAttribute("class",i.trim())}}function m(e){var t=(e.getAttribute("class")||"").replace(/[\n\t]/g,"");return" "+t+" "}function v(e){return e.replace(g,function(e,t,n,i){return i?n.toUpperCase():n}).replace(E,"Moz$1")}function b(e,t,n){var i;return i=n.getPropertyValue(t),""!==i||e.ownerDocument||(i=e.style[v(t)]),i}var y,g=/([\:\-\_]+(.))/g,E=/^moz([A-Z])/;y={multiple:!0,selected:!0,checked:!0,disabled:!0,readonly:!0,required:!0,open:!0},t.exports={addClass:i,css:o,hasClass:r,off:a,offset:f,on:s,one:c,ready:p,removeClass:h,type:l,scrollLeft:u,scrollTop:d}},{}],5:[function(e,t,n){"use strict";function i(){var e=window;if(v.debug&&"undefined"!=typeof e.console)try{e.console.log.apply(e.console,arguments)}catch(t){var n=Array.prototype.slice.call(arguments);e.console.log(n.join("\n"))}}function o(e){var t,n=document;t=n.head||n.getElementsByTagName("head")[0]||n.documentElement;var i=n.createElement("style");return i.type="text/css",i.styleSheet?i.styleSheet.cssText=e:i.appendChild(n.createTextNode(e)),t.insertBefore(i,t.firstChild),i}function r(e,t){if(!t)throw new Error("MUI: "+e);"undefined"!=typeof console&&console.error("MUI Warning: "+e)}function l(e){if(y.push(e),void 0===y._initialized){var t=document;b.on(t,"animationstart",s),b.on(t,"mozAnimationStart",s),b.on(t,"webkitAnimationStart",s),y._initialized=!0}}function s(e){if("mui-node-inserted"===e.animationName)for(var t=e.target,n=y.length-1;n>=0;n--)y[n](t)}function a(e){var t="";for(var n in e)t+=e[n]?n+" ":"";return t.trim()}function c(){if(void 0!==m)return m;var e=document.createElement("x");return e.style.cssText="pointer-events:auto",m="auto"===e.style.pointerEvents}function u(e,t){return function(){e[t].apply(e,arguments)}}function d(e,t,n,i,o){var r,l=document.createEvent("HTMLEvents"),n=void 0!==n?n:!0,i=void 0!==i?i:!0;if(l.initEvent(t,n,i),o)for(r in o)l[r]=o[r];return e&&e.dispatchEvent(l),l}function f(){if(g+=1,1===g){var e=window,t=document;h={left:b.scrollLeft(e),top:b.scrollTop(e)},b.addClass(t.body,E),e.scrollTo(h.left,h.top)}}function p(){if(0!==g&&(g-=1,0===g)){var e=window,t=document;b.removeClass(t.body,E),e.scrollTo(h.left,h.top)}}var h,m,v=e("../config"),b=e("./jqLite"),y=[],g=0,E="mui-body--scroll-lock";t.exports={callback:u,classNames:a,disableScrollLock:p,dispatchEvent:d,enableScrollLock:f,log:i,loadStyle:o,onNodeInserted:l,raiseError:r,supportsPointerEvents:c}},{"../config":2,"./jqLite":4}],6:[function(e,t,n){"use strict";function i(e){e._muiDropdown!==!0&&(e._muiDropdown=!0,e.hasAttribute("type")||(e.type="button"),l.on(e,"click",o))}function o(e){if(0===e.button){var t=this;null===t.getAttribute("disabled")&&r(t)}}function r(e){function t(){l.removeClass(o,u),l.off(r,"click",t)}function n(){var n=i.getBoundingClientRect(),s=e.getBoundingClientRect(),a=s.top-n.top+s.height;l.css(o,"top",a+"px"),l.addClass(o,u),setTimeout(function(){l.on(r,"click",t)},0)}var i=e.parentNode,o=e.nextElementSibling,r=i.ownerDocument;return o&&l.hasClass(o,d)?void(l.hasClass(o,u)?t():n()):s.raiseError("Dropdown menu element not found")}var l=e("./lib/jqLite"),s=e("./lib/util"),a="data-mui-toggle",c='[data-mui-toggle="dropdown"]',u="mui--is-open",d="mui-dropdown__menu";t.exports={initListeners:function(){for(var e=document,t=e.querySelectorAll(c),n=t.length-1;n>=0;n--)i(t[n]);s.onNodeInserted(function(e){"dropdown"===e.getAttribute(a)&&i(e)})}}},{"./lib/jqLite":4,"./lib/util":5}],7:[function(e,t,n){t.exports=e(4)},{}],8:[function(e,t,n){"use strict";function i(e){var t;if("on"===e){for(var n,i,l,s=arguments.length-1;s>0;s--)n=arguments[s],"object"===p.type(n)&&(i=n),n instanceof Element&&1===n.nodeType&&(l=n);i=i||{},void 0===i.keyboard&&(i.keyboard=!0),void 0===i["static"]&&(i["static"]=!1),t=o(i,l)}else"off"===e?t=r():f.raiseError("Expecting 'on' or 'off'");return t}function o(e,t){var n=document.body,i=document.getElementById(h);if(f.enableScrollLock(),i){for(;i.firstChild;)i.removeChild(i.firstChild);t&&i.appendChild(t)}else i=document.createElement("div"),i.setAttribute("id",h),t&&i.appendChild(t),n.appendChild(i);return m.test(navigator.userAgent)&&p.css(i,"cursor","pointer"),e.keyboard?l():s(),e["static"]?u(i):c(i),i.muiOptions=e,i}function r(){var e,t=document.getElementById(h);if(t){for(;t.firstChild;)t.removeChild(t.firstChild);t.parentNode.removeChild(t),e=t.muiOptions.onclose,u(t)}return f.disableScrollLock(),s(),e&&e(),t}function l(){p.on(document,"keyup",a)}function s(){p.off(document,"keyup",a)}function a(e){27===e.keyCode&&r()}function c(e){p.on(e,"click",d)}function u(e){p.off(e,"click",d)}function d(e){e.target.id===h&&r()}var f=e("./lib/util"),p=e("./lib/jqLite"),h="mui-overlay",m=/(iPad|iPhone|iPod)/g;t.exports=i},{"./lib/jqLite":4,"./lib/util":5}],9:[function(e,t,n){"use strict";function i(e){e._muiRipple!==!0&&(e._muiRipple=!0,"INPUT"!==e.tagName&&(r.on(e,"touchstart",o),r.on(e,"mousedown",o)))}function o(e){if(0===e.button){var t=this;if(t.disabled!==!0&&t.touchFlag!==!0){t.touchFlag=!0,setTimeout(function(){t.touchFlag=!1},100);var n=document.createElement("div");n.className=c;var i,o,l=r.offset(t),s=e.pageX-l.left,u=e.pageY-l.top;i=r.hasClass(t,a)?l.height/2:l.height,o=i/2,r.css(n,{height:i+"px",width:i+"px",top:u-o+"px",left:s-o+"px"}),t.appendChild(n),window.setTimeout(function(){var e=n.parentNode;e&&e.removeChild(n)},2e3)}}}var r=e("./lib/jqLite"),l=e("./lib/util"),s="mui-btn",a="mui-btn--fab",c="mui-ripple-effect";t.exports={initListeners:function(){for(var e=document,t=e.getElementsByClassName(s),n=t.length-1;n>=0;n--)i(t[n]);l.onNodeInserted(function(e){r.hasClass(e,s)&&i(e)})}}},{"./lib/jqLite":4,"./lib/util":5}],10:[function(e,t,n){"use strict";function i(e){e._muiSelect!==!0&&(e._muiSelect=!0,"ontouchstart"in p.documentElement||new o(e))}function o(e){this.selectEl=e,this.wrapperEl=e.parentNode,this.useDefault=!1,l.on(e,"mousedown",s.callback(this,"mousedownHandler")),l.on(e,"focus",s.callback(this,"focusHandler")),l.on(e,"click",s.callback(this,"clickHandler")),this.wrapperEl.tabIndex=-1;var t=s.callback(this,"wrapperFocusHandler");l.on(this.wrapperEl,"focus",t)}function r(e,t){s.enableScrollLock(),this.origIndex=null,this.currentIndex=null,this.selectEl=t,this.menuEl=this._createMenuEl(e,t),this.clickCallbackFn=s.callback(this,"clickHandler"),this.keydownCallbackFn=s.callback(this,"keydownHandler"),this.destroyCallbackFn=s.callback(this,"destroy"),e.appendChild(this.menuEl),l.scrollTop(this.menuEl,this.menuEl._muiScrollTop),setTimeout(function(){"body"!==p.activeElement.nodeName.toLowerCase()&&p.activeElement.blur()},0),l.on(this.menuEl,"click",this.clickCallbackFn),l.on(p,"keydown",this.keydownCallbackFn),l.on(h,"resize",this.destroyCallbackFn);var n=this.destroyCallbackFn;setTimeout(function(){l.on(p,"click",n)},0)}var l=e("./lib/jqLite"),s=e("./lib/util"),a=e("./lib/forms"),c="mui-select",u=".mui-select > select",d="mui-select__menu",f="mui--is-selected",p=document,h=window;o.prototype.mousedownHandler=function(e){0===e.button&&this.useDefault!==!0&&e.preventDefault()},o.prototype.focusHandler=function(e){if(this.useDefault!==!0){var t=this.selectEl,n=this.wrapperEl,i=t.tabIndex,o=s.callback(this,"keydownHandler");l.on(p,"keydown",o),t.tabIndex=-1,l.one(n,"blur",function(){t.tabIndex=i,l.off(p,"keydown",o)}),n.focus()}},o.prototype.keydownHandler=function(e){var t=e.keyCode;32!==t&&38!==t&&40!==t||(e.preventDefault(),this.selectEl.disabled!==!0&&this.renderMenu())},o.prototype.wrapperFocusHandler=function(){return this.selectEl.disabled?this.wrapperEl.blur():void 0},o.prototype.clickHandler=function(e){0===e.button&&this.renderMenu()},o.prototype.renderMenu=function(){return this.useDefault===!0?this.useDefault=!1:void new r(this.wrapperEl,this.selectEl)},r.prototype._createMenuEl=function(e,t){var n,i,o,r=p.createElement("div"),s=t.children,c=s.length,u=0;for(r.className=d,o=0;c>o;o++)n=s[o],i=p.createElement("div"),i.textContent=n.textContent,i._muiPos=o,n.selected&&(i.setAttribute("class",f),u=o),r.appendChild(i);this.origIndex=u,this.currentIndex=u;var h=a.getMenuPositionalCSS(e,c,u);return l.css(r,h),r._muiScrollTop=h.scrollTop,r},r.prototype.keydownHandler=function(e){var t=e.keyCode;return 9===t?this.destroy():(27!==t&&40!==t&&38!==t&&13!==t||e.preventDefault(),void(27===t?this.destroy():40===t?this.increment():38===t?this.decrement():13===t&&(this.selectCurrent(),this.destroy())))},r.prototype.clickHandler=function(e){e.stopPropagation();var t=e.target._muiPos;void 0!==t&&(this.currentIndex=t,this.selectCurrent(),this.destroy())},r.prototype.increment=function(){if(this.currentIndex!==this.menuEl.children.length-1){var e=this.menuEl.children;l.removeClass(e[this.currentIndex],f),this.currentIndex+=1,l.addClass(e[this.currentIndex],f)}},r.prototype.decrement=function(){if(0!==this.currentIndex){var e=this.menuEl.children;l.removeClass(e[this.currentIndex],f),this.currentIndex-=1,l.addClass(e[this.currentIndex],f)}},r.prototype.selectCurrent=function(){if(this.currentIndex!==this.origIndex){var e=this.selectEl.children;e[this.origIndex].selected=!1,e[this.currentIndex].selected=!0,s.dispatchEvent(this.selectEl,"change")}},r.prototype.destroy=function(){var e=this.menuEl.parentNode;e&&e.removeChild(this.menuEl),this.selectEl.focus(),s.disableScrollLock(),l.off(this.menuEl,"click",this.clickCallbackFn),l.off(p,"keydown",this.keydownCallbackFn),l.off(p,"click",this.destroyCallbackFn),l.off(h,"resize",this.destroyCallbackFn)},t.exports={initListeners:function(){for(var e=p.querySelectorAll(u),t=e.length-1;t>=0;t--)i(e[t]);s.onNodeInserted(function(e){"SELECT"===e.tagName&&l.hasClass(e.parentNode,c)&&i(e)})}}},{"./lib/forms":3,"./lib/jqLite":4,"./lib/util":5}],11:[function(e,t,n){"use strict";function i(e){e._muiTabs!==!0&&(e._muiTabs=!0,s.on(e,"click",o))}function o(e){if(0===e.button){var t=this;null===t.getAttribute("disabled")&&r(t)}}function r(e){var t,n,i,o,r,c,u,b,y,g=e.parentNode,E=e.getAttribute(d),C=document.getElementById(E);s.hasClass(g,f)||(C||a.raiseError('Tab pane "'+E+'" not found'),n=l(C),i=n.id,y="["+d+'="'+i+'"]',o=document.querySelectorAll(y)[0],t=o.parentNode,r={paneId:E,relatedPaneId:i},c={paneId:i,relatedPaneId:E},u=a.dispatchEvent(o,m,!0,!0,c),b=a.dispatchEvent(e,p,!0,!0,r),setTimeout(function(){u.defaultPrevented||b.defaultPrevented||(t&&s.removeClass(t,f),n&&s.removeClass(n,f),s.addClass(g,f),s.addClass(C,f),a.dispatchEvent(o,v,!0,!1,c),a.dispatchEvent(e,h,!0,!1,r))},0))}function l(e){for(var t,n=e.parentNode.children,i=n.length,o=null;i--&&!o;)t=n[i],t!==e&&s.hasClass(t,f)&&(o=t);return o}var s=e("./lib/jqLite"),a=e("./lib/util"),c="data-mui-toggle",u="["+c+'="tab"]',d="data-mui-controls",f="mui--is-active",p="mui.tabs.showstart",h="mui.tabs.showend",m="mui.tabs.hidestart",v="mui.tabs.hideend";t.exports={initListeners:function(){for(var e=document.querySelectorAll(u),t=e.length-1;t>=0;t--)i(e[t]);a.onNodeInserted(function(e){"tab"===e.getAttribute(c)&&i(e)})},api:{activate:function(e){var t="["+d+"="+e+"]",n=document.querySelectorAll(t);n.length||a.raiseError('Tab control for pane "'+e+'" not found'),r(n[0])}}}},{"./lib/jqLite":4,"./lib/util":5}],12:[function(e,t,n){"use strict";function i(e){e._muiTextfield!==!0&&(e._muiTextfield=!0,e.value.length?r.addClass(e,c):r.addClass(e,a),r.on(e,"input",o),r.on(e,"change",o),r.on(e,"focus",function(){r.addClass(this,u)}))}function o(){var e=this;e.value.length?(r.removeClass(e,a),r.addClass(e,c)):(r.removeClass(e,c),r.addClass(e,a)),r.addClass(e,u)}var r=e("./lib/jqLite"),l=e("./lib/util"),s=".mui-textfield > input, .mui-textfield > textarea",a="mui--is-empty",c="mui--is-not-empty",u="mui--is-dirty",d="mui-textfield--float-label";t.exports={initialize:i,initListeners:function(){for(var e=document,t=e.querySelectorAll(s),n=t.length-1;n>=0;n--)i(t[n]);l.onNodeInserted(function(e){"INPUT"!==e.tagName&&"TEXTAREA"!==e.tagName||i(e)}),setTimeout(function(){var e=".mui-textfield.mui-textfield--float-label > label {"+["-webkit-transition","-moz-transition","-o-transition","transition",""].join(":all .15s ease-out;")+"}";l.loadStyle(e)},150),l.supportsPointerEvents()===!1&&r.on(document,"click",function(e){var t=e.target;if("LABEL"===t.tagName&&r.hasClass(t.parentNode,d)){var n=t.previousElementSibling;n&&n.focus()}})}}},{"./lib/jqLite":4,"./lib/util":5}]},{},[1]); \ No newline at end of file diff --git a/www/libs/mui/packages/meteor/package.js b/www/libs/mui/packages/meteor/package.js new file mode 100644 index 0000000..f71c18f --- /dev/null +++ b/www/libs/mui/packages/meteor/package.js @@ -0,0 +1,22 @@ +Package.describe({ + name: 'muicss:mui', + version: '0.5.9', + // Brief, one-line summary of the package. + summary: 'MUI is a lightweight CSS framework based on Google\'s Material Design guidelines', + // URL to the Git repository containing the source code for this package. + git: 'https://github.com/muicss/mui', + // By default, Meteor will default to using README.md for documentation. + // To avoid submitting documentation, set this field to null. + documentation: 'README.md' +}); + +Package.onUse(function(api) { + api.versionsFrom('1.0'); + + api.addFiles([ + 'lib/css/mui.css', + 'lib/css/mui.min.css', + 'lib/js/mui.js', + 'lib/js/mui.min.js' + ], 'client'); +}); diff --git a/www/libs/mui/packages/npm/LICENSE.txt b/www/libs/mui/packages/npm/LICENSE.txt new file mode 100644 index 0000000..4b0aef4 --- /dev/null +++ b/www/libs/mui/packages/npm/LICENSE.txt @@ -0,0 +1,31 @@ +Copyright (c) 2015 Andres Morey + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice 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. + +==== + +All files located in the node_modules and bower_components directories are +externally maintained libraries used by this software which have their +own licenses; we recommend you read them, as their terms may differ from +the terms above. diff --git a/www/libs/mui/packages/npm/README.md b/www/libs/mui/packages/npm/README.md new file mode 100644 index 0000000..0d180d1 --- /dev/null +++ b/www/libs/mui/packages/npm/README.md @@ -0,0 +1,487 @@ +# Material Design CSS Framework + +[![MUI](https://www.muicss.com/static/favicons/icon-192x192.png)](https://www.muicss.com) + +MUI is a lightweight CSS framework that follows Google's Material Design guidelines. + +[![Join the chat at https://gitter.im/muicss/mui](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/muicss/mui?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +[![Build Status](https://travis-ci.org/muicss/mui.svg?branch=master)](https://travis-ci.org/muicss/mui) +[![Dependency Status](https://david-dm.org/muicss/mui.svg)](https://david-dm.org/muicss/mui) +[![devDependency Status](https://david-dm.org/muicss/mui/dev-status.svg)](https://david-dm.org/muicss/mui#info=devDependencies) + +## Introduction + +The MUI NPM package makes it easy to import MUI into a project and create a custom build that only includes the components you need. + +The simplest way to use MUI is via the top level imports `muicss` and `muicss/react`: + +```javascript +import { Appbar, Button, Panel } from 'muicss/react'; +``` + +You can also optimize your builds by importing modules one-by-one from the lower level API: + +```javascript +import Appbar from 'muicss/lib/react/appbar'; +import Button from 'muicss/lib/react/button'; +import Container from 'muicss/lib/react/container'; +``` + +Here's an example of how to use MUI in a React app: + +```javascript +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Appbar, Button, Panel } from 'muicss/react'; + +class Example extends React.Component { + onClick() { + console.log('clicked on button'); + } + + render() { + return ( +
                  + + + + + + +
                  + ); + } +} + +ReactDOM.render(, document.getElementById('example')); +``` + +## API Documentation + +### React Library + +All of the MUI React components can be accessed as top-level attributes of the `muicss/react` package. In addition, they can be accessed individually at `muicss/lib/react/{component}`. + +#### Appbar + +```jsx +import Appbar from 'muicss/lib/react/appbar'; + + +``` + +Read more: https://www.muicss.com/docs/v1/react/appbar + +#### Button + +```jsx +import Button from 'muicss/lib/react/button'; + +
                  '; + + // directive function + return ['$timeout', function ($timeout) { + return { + restrict: 'AE', + require: ['ngModel'], + scope: scopeArgs, + replace: true, + template: template, + link: function link(scope, element, attrs, controllers) { + var inputEl = element.find('input') || element.find('textarea'), + labelEl = element.find('label'), + ngModelCtrl = controllers[0], + formCtrl = controllers[1], + isUndef = _angular2.default.isUndefined, + el = inputEl[0]; + + // disable MUI js + if (el) el._muiTextfield = true; + + // remove attributes from wrapper + element.removeAttr('ng-change'); + element.removeAttr('ng-model'); + + // scope defaults + if (!isTextArea) scope.type = scope.type || 'text';else scope.rows = scope.rows || 2; + + // autofocus + if (!isUndef(attrs.autofocus)) inputEl[0].focus(); + + // required + if (!isUndef(attrs.required)) inputEl.prop('required', true); + + // invalid + if (!isUndef(attrs.invalid)) inputEl.addClass('mui--is-invalid'); + + // set is-empty|is-no-empty + handleEmptyClasses(inputEl, scope.ngModel); + + // float-label + if (!isUndef(scope.floatLabel)) { + element.addClass('mui-textfield--float-label'); + + $timeout(function () { + labelEl.css({ + 'transition': '.15s ease-out', + '-webkit-transition': '.15s ease-out', + '-moz-transition': '.15s ease-out', + '-o-transition': '.15s ease-out', + '-ms-transition': '.15s ease-out' + }); + }, 150); + } + + // handle changes + scope.onChange = function () { + var val = scope.ngModel; + + // trigger ng-change + if (ngModelCtrl) ngModelCtrl.$setViewValue(val); + + // set is-empty|is-no-empty + handleEmptyClasses(inputEl, val); + + // add is-dirty + inputEl.addClass(dirtyClass); + }; + + // handle focus event + scope.onFocus = function () { + inputEl.addClass(dirtyClass); + }; + } + }; + }]; +} + +_angular2.default.module(moduleName, []).directive('muiInput', inputFactory(false)).directive('muiTextarea', inputFactory(true)); + +/** Define module API */ +exports.default = moduleName; +module.exports = exports['default']; \ No newline at end of file diff --git a/www/libs/mui/packages/npm/lib/angular/panel.js b/www/libs/mui/packages/npm/lib/angular/panel.js new file mode 100644 index 0000000..6b07daf --- /dev/null +++ b/www/libs/mui/packages/npm/lib/angular/panel.js @@ -0,0 +1,34 @@ +var babelHelpers = require('./babel-helpers.js'); +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _angular = require('angular'); + +var _angular2 = babelHelpers.interopRequireDefault(_angular); + +var moduleName = 'mui.panel'; /** + * MUI Angular Panel Component + * @module angular/panel + */ + +_angular2.default.module(moduleName, []).directive('muiPanel', function () { + return { + restrict: 'AE', + replace: true, + scope: true, + template: '
                  ', + transclude: true, + link: function link(scope, element, attr, controller, transcludeFn) { + transcludeFn(scope, function (clone) { + element.append(clone); + }); + } + }; +}); + +/** Define module API */ +exports.default = moduleName; +module.exports = exports['default']; \ No newline at end of file diff --git a/www/libs/mui/packages/npm/lib/angular/radio.js b/www/libs/mui/packages/npm/lib/angular/radio.js new file mode 100644 index 0000000..17dcc99 --- /dev/null +++ b/www/libs/mui/packages/npm/lib/angular/radio.js @@ -0,0 +1,35 @@ +var babelHelpers = require('./babel-helpers.js'); +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _angular = require('angular'); + +var _angular2 = babelHelpers.interopRequireDefault(_angular); + +var moduleName = 'mui.radio'; /** + * MUI Angular Radio Component + * @module angular/radio + */ + +_angular2.default.module(moduleName, []).directive('muiRadio', function () { + return { + restrict: 'AE', + replace: true, + require: ['?ngModel'], + scope: { + label: '@', + name: '@', + value: '@', + ngModel: '=', + ngDisabled: '=' + }, + template: '
                  ' + ' ' + '
                  ' + }; +}); + +/** Define module API */ +exports.default = moduleName; +module.exports = exports['default']; \ No newline at end of file diff --git a/www/libs/mui/packages/npm/lib/angular/row.js b/www/libs/mui/packages/npm/lib/angular/row.js new file mode 100644 index 0000000..2e7735b --- /dev/null +++ b/www/libs/mui/packages/npm/lib/angular/row.js @@ -0,0 +1,34 @@ +var babelHelpers = require('./babel-helpers.js'); +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _angular = require('angular'); + +var _angular2 = babelHelpers.interopRequireDefault(_angular); + +var moduleName = 'mui.row'; /** + * MUI Angular Grid/Row Module + * @module angular/row.js + */ + +_angular2.default.module('mui.row', []).directive('muiRow', function () { + return { + restrict: 'AE', + scope: true, + replace: true, + template: '
                  ', + transclude: true, + link: function link(scope, element, attr, controller, transcludeFn) { + transcludeFn(scope, function (clone) { + element.append(clone); + }); + } + }; +}); + +/** Define module API */ +exports.default = moduleName; +module.exports = exports['default']; \ No newline at end of file diff --git a/www/libs/mui/packages/npm/lib/angular/select.js b/www/libs/mui/packages/npm/lib/angular/select.js new file mode 100644 index 0000000..2778c9f --- /dev/null +++ b/www/libs/mui/packages/npm/lib/angular/select.js @@ -0,0 +1,256 @@ +var babelHelpers = require('./babel-helpers.js'); +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _angular = require('angular'); + +var _angular2 = babelHelpers.interopRequireDefault(_angular); + +var _forms = require('../js/lib/forms'); + +var formlib = babelHelpers.interopRequireWildcard(_forms); + +var _util = require('../js/lib/util'); + +var util = babelHelpers.interopRequireWildcard(_util); + +var _jqLite = require('../js/lib/jqLite'); + +var jqLite = babelHelpers.interopRequireWildcard(_jqLite); +/** + * MUI Angular Select Component + * @module angular/select + */ + +var moduleName = 'mui.select'; + +_angular2.default.module(moduleName, []).directive('muiSelect', ['$timeout', function ($timeout) { + return { + restrict: 'AE', + require: ['ngModel'], + scope: { + name: '@', + ngDisabled: '=', + ngModel: '=' + }, + replace: true, + transclude: true, + template: '
                  ' + '' + '
                  ' + '
                  {{option.label}}
                  ' + '
                  ' + '
                  ', + link: function link(scope, element, attrs, controller, transcludeFn) { + var wrapperEl = element, + menuEl = element.find('div'), + selectEl = element.find('select'), + isUndef = _angular2.default.isUndefined, + cacheIndex; + + // disable MUI js + selectEl[0]._muiSelect = true; + + // init scope + scope.options = []; + scope.isOpen = false; + scope.useDefault = false; + scope.origTabIndex = selectEl[0].tabIndex; + scope.menuIndex = 0; + + // handle `use-default` attribute + if (!isUndef(attrs.useDefault)) scope.useDefault = true; + + // make wrapper focusable + wrapperEl.prop('tabIndex', -1); + + // extract
                  '; + + // directive function + return ['$timeout', function($timeout) { + return { + restrict: 'AE', + require: ['ngModel'], + scope: scopeArgs, + replace: true, + template: template, + link: function(scope, element, attrs, controllers) { + var inputEl = element.find('input') || element.find('textarea'), + labelEl = element.find('label'), + ngModelCtrl = controllers[0], + formCtrl = controllers[1], + isUndef = angular.isUndefined, + el = inputEl[0]; + + // disable MUI js + if (el) el._muiTextfield = true; + + // remove attributes from wrapper + element.removeAttr('ng-change'); + element.removeAttr('ng-model'); + + // scope defaults + if (!isTextArea) scope.type = scope.type || 'text'; + else scope.rows = scope.rows || 2; + + // autofocus + if (!isUndef(attrs.autofocus)) inputEl[0].focus(); + + // required + if (!isUndef(attrs.required)) inputEl.prop('required', true); + + // invalid + if (!isUndef(attrs.invalid)) inputEl.addClass('mui--is-invalid'); + + // set is-empty|is-no-empty + handleEmptyClasses(inputEl, scope.ngModel); + + // float-label + if (!isUndef(scope.floatLabel)) { + element.addClass('mui-textfield--float-label'); + + $timeout(function() { + labelEl.css({ + 'transition': '.15s ease-out', + '-webkit-transition': '.15s ease-out', + '-moz-transition': '.15s ease-out', + '-o-transition': '.15s ease-out', + '-ms-transition': '.15s ease-out', + }) + }, 150); + } + + // handle changes + scope.onChange = function() { + var val = scope.ngModel; + + // trigger ng-change + if (ngModelCtrl) ngModelCtrl.$setViewValue(val); + + // set is-empty|is-no-empty + handleEmptyClasses(inputEl, val); + + // add is-dirty + inputEl.addClass(dirtyClass); + } + + // handle focus event + scope.onFocus = function() { + inputEl.addClass(dirtyClass); + } + } + }; + }]; +} + + +angular.module(moduleName, []) + .directive('muiInput', inputFactory(false)) + .directive('muiTextarea', inputFactory(true)); + + +/** Define module API */ +export default moduleName; diff --git a/www/libs/mui/src/angular/panel.js b/www/libs/mui/src/angular/panel.js new file mode 100644 index 0000000..a9585f0 --- /dev/null +++ b/www/libs/mui/src/angular/panel.js @@ -0,0 +1,30 @@ +/** + * MUI Angular Panel Component + * @module angular/panel + */ + +import angular from 'angular'; + + +const moduleName = 'mui.panel'; + + +angular.module(moduleName, []) + .directive('muiPanel', function() { + return { + restrict: 'AE', + replace: true, + scope : true, + template: '
                  ', + transclude: true, + link: function(scope, element, attr, controller, transcludeFn) { + transcludeFn(scope, function(clone) { + element.append(clone); + }); + } + }; + }); + + +/** Define module API */ +export default moduleName; diff --git a/www/libs/mui/src/angular/radio.js b/www/libs/mui/src/angular/radio.js new file mode 100644 index 0000000..5a7351a --- /dev/null +++ b/www/libs/mui/src/angular/radio.js @@ -0,0 +1,39 @@ +/** + * MUI Angular Radio Component + * @module angular/radio + */ + +import angular from 'angular'; + + +const moduleName = 'mui.radio'; + + +angular.module(moduleName, []) + .directive('muiRadio', function() { + return { + restrict: 'AE', + replace: true, + require: ['?ngModel'], + scope: { + label: '@', + name: '@', + value: '@', + ngModel: '=', + ngDisabled: '=' + }, + template: '
                  ' + + ' ' + + '
                  ' + } + }); + + +/** Define module API */ +export default moduleName; diff --git a/www/libs/mui/src/angular/row.js b/www/libs/mui/src/angular/row.js new file mode 100644 index 0000000..fd3bf31 --- /dev/null +++ b/www/libs/mui/src/angular/row.js @@ -0,0 +1,30 @@ +/** + * MUI Angular Grid/Row Module + * @module angular/row.js + */ + +import angular from 'angular'; + + +const moduleName = 'mui.row'; + + +angular.module('mui.row', []) + .directive('muiRow', function() { + return { + restrict: 'AE', + scope: true, + replace: true, + template: '
                  ', + transclude: true, + link: function(scope, element, attr, controller, transcludeFn) { + transcludeFn(scope, function(clone) { + element.append(clone); + }); + } + }; + }); + + +/** Define module API */ +export default moduleName; diff --git a/www/libs/mui/src/angular/select.js b/www/libs/mui/src/angular/select.js new file mode 100644 index 0000000..eb4c67b --- /dev/null +++ b/www/libs/mui/src/angular/select.js @@ -0,0 +1,284 @@ +/** + * MUI Angular Select Component + * @module angular/select + */ + +import angular from 'angular'; + +import * as formlib from '../js/lib/forms'; +import * as util from '../js/lib/util'; +import * as jqLite from '../js/lib/jqLite'; + + +const moduleName = 'mui.select'; + + +angular.module(moduleName, []) + .directive('muiSelect', ['$timeout', function($timeout) { + return { + restrict: 'AE', + require: ['ngModel'], + scope: { + name: '@', + ngDisabled: '=', + ngModel: '=' + }, + replace: true, + transclude: true, + template: '
                  ' + + '' + + '
                  ' + + '
                  {{option.label}}
                  ' + + '
                  ' + + '
                  ', + link: function(scope, element, attrs, controller, transcludeFn) { + var wrapperEl = element, + menuEl = element.find('div'), + selectEl = element.find('select'), + isUndef = angular.isUndefined, + cacheIndex; + + // disable MUI js + selectEl[0]._muiSelect = true; + + // init scope + scope.options = []; + scope.isOpen = false; + scope.useDefault = false; + scope.origTabIndex = selectEl[0].tabIndex; + scope.menuIndex = 0; + + // handle `use-default` attribute + if (!isUndef(attrs.useDefault)) scope.useDefault = true; + + // make wrapper focusable + wrapperEl.prop('tabIndex', -1); + + // extract
                  + ); + } +} + + +/** Define module API */ +export default Checkbox; diff --git a/www/libs/mui/src/react/col.jsx b/www/libs/mui/src/react/col.jsx new file mode 100644 index 0000000..d18cbe4 --- /dev/null +++ b/www/libs/mui/src/react/col.jsx @@ -0,0 +1,72 @@ +/** + * MUI React Col Component + * @module react/col + */ + +'use strict'; + +import React from 'react'; + +import * as util from '../js/lib/util'; + + +const breakpoints = ['xs', 'sm', 'md', 'lg', 'xl']; + + +/** + * Col constructor + * @class + */ +class Col extends React.Component { + defaultProps() { + let props = {className: ''}, + i, + v; + + // add {breakpoint}, {breakpoint}-offset to props + for (i=breakpoints.length - 1; i > -1; i--) { + v = breakpoints[i]; + props[v] = null; + props[v + '-offset'] = null; + } + + return props; + } + + render() { + let cls = {}, + i, + bk, + val, + baseCls; + + // add mui-col classes + for (i=breakpoints.length - 1; i > -1; i--) { + bk = breakpoints[i]; + baseCls = 'mui-col-' + bk; + + // add mui-col-{bk}-{val} + val = this.props[bk]; + if (val) cls[baseCls + '-' + val] = true; + + // add mui-col-{bk}-offset-{val} + val = this.props[bk + '-offset']; + if (val) cls[baseCls + '-offset-' + val] = true; + } + + cls = util.classNames(cls); + + return ( +
                  + {this.props.children} +
                  + ); + } +} + + +/** Define module API */ +export default Col; diff --git a/www/libs/mui/src/react/container.jsx b/www/libs/mui/src/react/container.jsx new file mode 100644 index 0000000..7c665dc --- /dev/null +++ b/www/libs/mui/src/react/container.jsx @@ -0,0 +1,44 @@ +/** + * MUI React container module + * @module react/container + */ + +'use strict'; + +import React from 'react'; + + +/** + * Container constructor + * @class + */ +class Container extends React.Component { + static propTypes = { + fluid: React.PropTypes.bool + }; + + static defaultProps = { + className: '', + fluid: false + }; + + render() { + let cls = 'mui-container'; + + // fluid containers + if (this.props.fluid) cls += '-fluid'; + + return ( +
                  + {this.props.children} +
                  + ); + } +} + + +/** Define module API */ +export default Container; diff --git a/www/libs/mui/src/react/divider.jsx b/www/libs/mui/src/react/divider.jsx new file mode 100644 index 0000000..c39816e --- /dev/null +++ b/www/libs/mui/src/react/divider.jsx @@ -0,0 +1,35 @@ +/** + * MUI React divider module + * @module react/divider + */ + +'use strict'; + +import React from 'react'; + + +/** + * Divider constructor + * @class + */ +class Divider extends React.Component { + static defaultProps = { + className: '' + }; + + render() { + let { children, ...other } = this.props; + + return ( +
                  +
                  + ); + } +} + + +/** Define module API */ +export default Divider; diff --git a/www/libs/mui/src/react/dropdown-item.jsx b/www/libs/mui/src/react/dropdown-item.jsx new file mode 100644 index 0000000..17e7117 --- /dev/null +++ b/www/libs/mui/src/react/dropdown-item.jsx @@ -0,0 +1,59 @@ +/** + * MUI React dropdowns module + * @module react/dropdowns + */ +/* jshint quotmark:false */ +// jscs:disable validateQuoteMarks + +'use strict'; + +import React from 'react'; + +import * as util from '../js/lib/util'; + + +const PropTypes = React.PropTypes; + + +/** + * DropdownItem constructor + * @class + */ +class DropdownItem extends React.Component { + constructor(props) { + super(props); + + this.onClickCB = util.callback(this, 'onClick'); + } + + static propTypes = { + link: PropTypes.string, + target: PropTypes.string, + onClick: PropTypes.func + }; + + onClick(ev) { + if (this.props.onClick) this.props.onClick(this, ev); + } + + render() { + let { children, onClick, ...other } = this.props; + + return ( +
                • + + {children} + +
                • + ); + } +} + + +/** Define module API */ +export default DropdownItem; diff --git a/www/libs/mui/src/react/dropdown.jsx b/www/libs/mui/src/react/dropdown.jsx new file mode 100644 index 0000000..af0dffb --- /dev/null +++ b/www/libs/mui/src/react/dropdown.jsx @@ -0,0 +1,200 @@ +/** + * MUI React dropdowns module + * @module react/dropdowns + */ +/* jshint quotmark:false */ +// jscs:disable validateQuoteMarks + +'use strict'; + +import React from 'react'; + +import Button from './button'; +import Caret from './caret'; +import * as jqLite from '../js/lib/jqLite'; +import * as util from '../js/lib/util'; + + +const PropTypes = React.PropTypes, + dropdownClass = 'mui-dropdown', + menuClass = 'mui-dropdown__menu', + openClass = 'mui--is-open', + rightClass = 'mui-dropdown__menu--right'; + + +/** + * Dropdown constructor + * @class + */ +class Dropdown extends React.Component { + constructor(props) { + super(props); + + this.state = { + opened: false, + menuTop: 0 + } + + let cb = util.callback; + this.selectCB = cb(this, 'select'); + this.onClickCB = cb(this, 'onClick'); + this.onOutsideClickCB = cb(this, 'onOutsideClick'); + } + + static propTypes = { + color: PropTypes.oneOf(['default', 'primary', 'danger', 'dark', + 'accent']), + variant: PropTypes.oneOf(['default', 'flat', 'raised', 'fab']), + size: PropTypes.oneOf(['default', 'small', 'large']), + label: PropTypes.oneOfType([ + PropTypes.string, + PropTypes.element + ]), + alignMenu: PropTypes.oneOf(['left', 'right']), + onClick: PropTypes.func, + onSelect: PropTypes.func, + disabled: PropTypes.bool + }; + + static defaultProps = { + className: '', + color: 'default', + variant: 'default', + size: 'default', + label: '', + alignMenu: 'left', + onClick: null, + onSelect: null, + disabled: false + }; + + componentWillMount() { + document.addEventListener('click', this.onOutsideClickCB); + } + + componentWillUnmount() { + document.removeEventListener('click', this.onOutsideClickCB); + } + + onClick(ev) { + // only left clicks + if (ev.button !== 0) return; + + // exit if toggle button is disabled + if (this.props.disabled) return; + + if (!ev.defaultPrevented) { + this.toggle(); + + // execute onClick method + let onClickFn = this.props.onClick; + onClickFn && onClickFn(ev); + } + } + + toggle() { + // exit if no menu element + if (!this.props.children) { + return util.raiseError('Dropdown menu element not found'); + } + + if (this.state.opened) this.close(); + else this.open(); + } + + open() { + // position menu element below toggle button + let wrapperRect = this.refs.wrapperEl.getBoundingClientRect(), + toggleRect; + + toggleRect = this.refs.button.refs.buttonEl.getBoundingClientRect(); + + this.setState({ + opened: true, + menuTop: toggleRect.top - wrapperRect.top + toggleRect.height + }); + } + + close() { + this.setState({opened: false}); + } + + select(ev) { + // onSelect callback + if (this.props.onSelect && ev.target.tagName === 'A') { + this.props.onSelect(ev.target.getAttribute('data-mui-value')); + } + + // close menu + if (!ev.defaultPrevented) this.close(); + } + + onOutsideClick(ev) { + let isClickInside = this.refs.wrapperEl.contains(ev.target); + if (!isClickInside) this.close(); + } + + render() { + let buttonEl, + menuEl, + labelEl; + + // build label + if (jqLite.type(this.props.label) === 'string') { + labelEl = {this.props.label} ; + } else { + labelEl = this.props.label; + } + + buttonEl = ( + + ); + + if (this.state.opened) { + let cs = {}; + + cs[menuClass] = true; + cs[openClass] = this.state.opened; + cs[rightClass] = (this.props.alignMenu === 'right'); + cs = util.classNames(cs); + + menuEl = ( +
                    + {this.props.children} +
                  + ); + } + + let { className, children, onClick, ...other } = this.props; + + return ( +
                  + {buttonEl} + {menuEl} +
                  + ); + } +} + + +/** Define module API */ +export default Dropdown; diff --git a/www/libs/mui/src/react/form.jsx b/www/libs/mui/src/react/form.jsx new file mode 100644 index 0000000..127a0d3 --- /dev/null +++ b/www/libs/mui/src/react/form.jsx @@ -0,0 +1,44 @@ +/** + * MUI React form module + * @module react/form + */ + +'use strict'; + +import React from 'react'; + + +/** + * Form constructor + * @class + */ +class Form extends React.Component { + static propTypes = { + inline: React.PropTypes.bool + }; + + static defaultProps = { + className: '', + inline: false + }; + + render() { + let cls = ''; + + // inline form + if (this.props.inline) cls = 'mui-form--inline'; + + return ( + + {this.props.children} + + ); + } +} + + +/** Define module API */ +export default Form; diff --git a/www/libs/mui/src/react/input.jsx b/www/libs/mui/src/react/input.jsx new file mode 100644 index 0000000..722db29 --- /dev/null +++ b/www/libs/mui/src/react/input.jsx @@ -0,0 +1,35 @@ +/** + * MUI React Input Component + * @module react/input + */ + +'use strict'; + +import React from 'react'; + +import { TextField } from './text-field'; + + +const PropTypes = React.PropTypes; + + +/** + * Input constructor + * @class + */ +class Input extends React.Component { + static propTypes = { + type: PropTypes.oneOf(['text', 'email', 'url', 'tel', 'password']) + }; + + static defaultProps = { + type: 'text' + }; + + render() { + return ; + } +} + + +export default Input; diff --git a/www/libs/mui/src/react/option.jsx b/www/libs/mui/src/react/option.jsx new file mode 100644 index 0000000..ca5e461 --- /dev/null +++ b/www/libs/mui/src/react/option.jsx @@ -0,0 +1,46 @@ +/** + * MUI React options module + * @module react/option + */ + +'use strict'; + +import React from 'react'; + +import * as formlib from '../js/lib/forms'; +import * as jqLite from '../js/lib/jqLite'; +import * as util from '../js/lib/util'; + + +const PropTypes = React.PropTypes; + + +/** + * Option constructor + * @class + */ +class Option extends React.Component { + static propTypes = { + value: PropTypes.string, + label: PropTypes.string + }; + + static defaultProps = { + value: null, + label: null + }; + + render() { + let { children, ...other } = this.props; + + return ( + + ); + } +} + + +/** Define module API */ +export default Option; diff --git a/www/libs/mui/src/react/panel.jsx b/www/libs/mui/src/react/panel.jsx new file mode 100644 index 0000000..038371c --- /dev/null +++ b/www/libs/mui/src/react/panel.jsx @@ -0,0 +1,34 @@ +/** + * MUI React layout module + * @module react/layout + */ + +'use strict'; + +import React from 'react'; + + +/** + * Panel constructor + * @class + */ +class Panel extends React.Component { + static defaultProps = { + className: '' + }; + + render() { + return ( +
                  + {this.props.children} +
                  + ); + } +} + + +/** Define module API */ +export default Panel; diff --git a/www/libs/mui/src/react/radio.jsx b/www/libs/mui/src/react/radio.jsx new file mode 100644 index 0000000..5511429 --- /dev/null +++ b/www/libs/mui/src/react/radio.jsx @@ -0,0 +1,65 @@ +/** + * MUI React radio module + * @module react/radio + */ + +'use strict'; + +import React from 'react'; + + +const PropTypes = React.PropTypes; + + +/** + * Radio constructor + * @class + */ +class Radio extends React.Component { + static propTypes = { + name: PropTypes.string, + label: PropTypes.string, + value: PropTypes.string, + checked: PropTypes.bool, + defaultChecked: PropTypes.bool, + disabled: PropTypes.bool, + onChange: PropTypes.func + }; + + static defaultProps = { + className: '', + name: null, + label: null, + disabled: false, + onChange: null + }; + + render() { + let { children, onChange, ...other } = this.props; + + return ( +
                  + +
                  + ); + } +} + + +/** Define module API */ +export default Radio; diff --git a/www/libs/mui/src/react/row.jsx b/www/libs/mui/src/react/row.jsx new file mode 100644 index 0000000..a67691e --- /dev/null +++ b/www/libs/mui/src/react/row.jsx @@ -0,0 +1,39 @@ +/** + * MUI React Row Component + * @module react/row + */ + +'use strict'; + +import React from 'react'; + +import * as util from '../js/lib/util'; + + +const breakpoints = ['xs', 'sm', 'md', 'lg']; + + +/** + * Row constructor + * @class + */ +class Row extends React.Component { + static defaultProps = { + className: '' + }; + + render() { + return ( +
                  + {this.props.children} +
                  + ); + } +} + + +/** Define module API */ +export default Row; diff --git a/www/libs/mui/src/react/select.jsx b/www/libs/mui/src/react/select.jsx new file mode 100644 index 0000000..d467695 --- /dev/null +++ b/www/libs/mui/src/react/select.jsx @@ -0,0 +1,389 @@ +/** + * MUI React select module + * @module react/select + */ + +'use strict'; + +import React from 'react'; + +import * as formlib from '../js/lib/forms'; +import * as jqLite from '../js/lib/jqLite'; +import * as util from '../js/lib/util'; +import { controlledMessage } from './_helpers'; + + +const PropTypes = React.PropTypes; + + +/** + * Select constructor + * @class + */ +class Select extends React.Component { + constructor(props) { + super(props); + + // warn if value defined but onChange is not + if (props.readOnly === false && + props.value !== undefined && + props.onChange === null) { + util.raiseError(controlledMessage, true); + } + + this.state.value = props.value; + + // bind callback function + let cb = util.callback; + this.hideMenuCB = cb(this, 'hideMenu'); + this.onInnerChangeCB = cb(this, 'onInnerChange'); + this.onInnerClickCB = cb(this, 'onInnerClick'); + this.onInnerFocusCB = cb(this, 'onInnerFocus'); + this.onInnerMouseDownCB = cb(this, 'onInnerMouseDown'); + this.onKeydownCB = cb(this, 'onKeydown'); + this.onMenuChangeCB = cb(this, 'onMenuChange'); + this.onOuterFocusCB = cb(this, 'onOuterFocus'); + this.onOuterBlurCB = cb(this, 'onOuterBlur'); + } + + state = { + showMenu: false + }; + + static propTypes = { + name: PropTypes.string, + value: PropTypes.string, + defaultValue: PropTypes.string, + autoFocus: PropTypes.bool, + disabled: PropTypes.bool, + multiple: PropTypes.bool, + readOnly: PropTypes.bool, + required: PropTypes.bool, + useDefault: PropTypes.bool, + onChange: PropTypes.func + }; + + static defaultProps = { + className: '', + name: null, + autoFocus: false, + disabled: false, + multiple: false, + readOnly: false, + required: false, + useDefault: false, + onChange: null + }; + + componentDidMount() { + // disable MUI js + this.refs.selectEl._muiSelect = true; + + // make wrapper element focusable (to enable Firefox bugfix) + this.refs.wrapperEl.tabIndex = -1; + + // handle autofocus + if (this.props.autoFocus) this.refs.wrapperEl.focus(); + } + + componentWillReceiveProps(nextProps) { + this.setState({value: nextProps.value}); + } + + onInnerMouseDown(ev) { + if (ev.button !== 0 || this.props.useDefault === true) return; + ev.preventDefault(); + } + + onInnerChange(ev) { + let value = ev.target.value; + this.setState({ value }); + + let fn = this.props.onChange; + if (fn) fn(value); + } + + onInnerClick(ev) { + if (ev.button !== 0) return; // only left clicks + this.showMenu(); + } + + onInnerFocus(ev) { + // check flag + if (this.props.useDefault === true) return; + + // defer focus to parent + setTimeout(() => {this.refs.wrapperEl.focus();}, 0); + } + + onOuterFocus(ev) { + // ignore focus on inner element (react artifact) + if (ev.target !== this.refs.wrapperEl) return; + + // disable tabfocus on inner element + var selectEl = this.refs.selectEl; + selectEl._muiOrigIndex = selectEl.tabIndex; + selectEl.tabIndex = -1; + + // firefox bugfix + if (selectEl.disabled) return this.refs.wrapperEl.blur(); + + // attach keydown handler + jqLite.on(document, 'keydown', this.onKeydownCB); + } + + onOuterBlur(ev) { + // ignore blur on inner element + if (ev.target !== this.refs.wrapperEl) return; + + // restore tab focus on inner element + let selectEl = this.refs.selectEl; + selectEl.tabIndex = selectEl._muiOrigIndex; + + // remove keydown handler + jqLite.off(document, 'keydown', this.onKeydownCB); + } + + onKeydown(ev) { + // spacebar, down, up + if (ev.keyCode === 32 || ev.keyCode === 38 || ev.keyCode === 40) { + // prevent win scroll + ev.preventDefault(); + + if (this.refs.selectEl.disabled !== true) this.showMenu(); + } + } + + showMenu() { + // check useDefault flag + if (this.props.useDefault === true) return; + + // add scroll lock + util.enableScrollLock(); + + // add event listeners + jqLite.on(window, 'resize', this.hideMenuCB); + jqLite.on(document, 'click', this.hideMenuCB); + + // re-draw + this.setState({showMenu: true}); + } + + hideMenu() { + // remove scroll lock + util.disableScrollLock(); + + // remove event listeners + jqLite.off(window, 'resize', this.hideMenuCB); + jqLite.off(document, 'click', this.hideMenuCB); + + // re-draw + this.setState({showMenu: false}); + + // refocus + this.refs.selectEl.focus(); + } + + onMenuChange(value) { + if (this.props.readOnly === true) return; + + this.setState({ value }); + + // execute onChange method + let fn = this.props.onChange; + if (fn) fn(value); + } + + render() { + let menuElem; + + if (this.state.showMenu) { + menuElem = ( + + ); + } + + let { children, onChange, ...other } = this.props; + + return ( +
                  + + {menuElem} +
                  + ); + } +} + + +/** + * Menu constructor + * @class + */ +class Menu extends React.Component { + constructor(props) { + super(props); + + this.onKeydownCB = util.callback(this, 'onKeydown'); + } + + state = { + origIndex: null, + currentIndex: null + }; + + static defaultProps = { + optionEls: [], + wrapperEl: null, + onChange: null, + onClose: null + }; + + componentWillMount() { + let optionEls = this.props.optionEls, + m = optionEls.length, + selectedPos = 0, + i; + + // get current selected position + for (i=m - 1; i > -1; i--) if (optionEls[i].selected) selectedPos = i; + this.setState({origIndex: selectedPos, currentIndex: selectedPos}); + } + + componentDidMount() { + // blur active element (IE10 bugfix) + this.blurTimer = setTimeout(function() { + let el = document.activeElement; + if (el.nodeName.toLowerCase() !== 'body') el.blur(); + }, 0); + + // set position + let props = formlib.getMenuPositionalCSS( + this.props.wrapperEl, + this.props.optionEls.length, + this.state.currentIndex + ); + + let el = this.refs.wrapperEl; + jqLite.css(el, props); + jqLite.scrollTop(el, props.scrollTop); + + // attach keydown handler + jqLite.on(document, 'keydown', this.onKeydownCB); + } + + componentWillUnmount() { + // clear timer + clearTimeout(this.blurTimer); + + // remove keydown handler + jqLite.off(document, 'keydown', this.onKeydownCB); + } + + onClick(pos, ev) { + // don't allow events to bubble + ev.stopPropagation(); + this.selectAndDestroy(pos); + } + + onKeydown(ev) { + let keyCode = ev.keyCode; + + // tab + if (keyCode === 9) return this.destroy(); + + // escape | up | down | enter + if (keyCode === 27 || keyCode === 40 || keyCode === 38 || keyCode === 13) { + ev.preventDefault(); + } + + if (keyCode === 27) this.destroy(); + else if (keyCode === 40) this.increment(); + else if (keyCode === 38) this.decrement(); + else if (keyCode === 13) this.selectAndDestroy(); + } + + increment() { + if (this.state.currentIndex === this.props.optionEls.length - 1) { + return; + } + + this.setState({currentIndex: this.state.currentIndex + 1}); + } + + decrement() { + if (this.state.currentIndex === 0) return; + this.setState({currentIndex: this.state.currentIndex - 1}); + } + + selectAndDestroy(pos) { + pos = (pos === undefined) ? this.state.currentIndex : pos; + + // handle onChange + if (pos !== this.state.origIndex) { + this.props.onChange(this.props.optionEls[pos].value); + } + + // close menu + this.destroy(); + } + + destroy() { + this.props.onClose(); + } + + render() { + let menuItems = [], + optionEls = this.props.optionEls, + m = optionEls.length, + optionEl, + cls, + i; + + // define menu items + for (i=0; i < m; i++) { + cls = (i === this.state.currentIndex) ? 'mui--is-selected' : ''; + + menuItems.push( +
                  + {optionEls[i].textContent} +
                  + ); + } + + return
                  {menuItems}
                  ; + } +} + + +/** Define module API */ +export default Select; diff --git a/www/libs/mui/src/react/tab.jsx b/www/libs/mui/src/react/tab.jsx new file mode 100644 index 0000000..73b7c4b --- /dev/null +++ b/www/libs/mui/src/react/tab.jsx @@ -0,0 +1,40 @@ +/** + * MUI React tabs module + * @module react/tabs + */ +/* jshint quotmark:false */ +// jscs:disable validateQuoteMarks + +'use strict'; + +import React from 'react'; + + +const PropTypes = React.PropTypes; + + +/** + * Tab constructor + * @class + */ +class Tab extends React.Component { + static propTypes = { + value: PropTypes.any, + label: PropTypes.string, + onActive: PropTypes.func + }; + + static defaultProps = { + value: null, + label: '', + onActive: null + }; + + render() { + return null; + }; +} + + +/** Define module API */ +export default Tab; diff --git a/www/libs/mui/src/react/tabs.jsx b/www/libs/mui/src/react/tabs.jsx new file mode 100644 index 0000000..aa00ae5 --- /dev/null +++ b/www/libs/mui/src/react/tabs.jsx @@ -0,0 +1,116 @@ +/** + * MUI React tabs module + * @module react/tabs + */ +/* jshint quotmark:false */ +// jscs:disable validateQuoteMarks + +'use strict'; + +import React from 'react'; + +import Tab from './tab'; +import * as util from '../js/lib/util'; + + +const PropTypes = React.PropTypes, + tabsBarClass = 'mui-tabs__bar', + tabsBarJustifiedClass = 'mui-tabs__bar--justified', + tabsPaneClass = 'mui-tabs__pane', + isActiveClass = 'mui--is-active'; + + +/** + * Tabs constructor + * @class + */ +class Tabs extends React.Component { + constructor(props) { + super(props); + this.state = {currentSelectedIndex: props.initialSelectedIndex}; + } + + static propTypes = { + initialSelectedIndex: PropTypes.number, + justified: PropTypes.bool, + onChange: PropTypes.func + }; + + static defaultProps = { + className: '', + initialSelectedIndex: 0, + justified: false, + onChange: null + }; + + onClick(i, tab, ev) { + if (i !== this.state.currentSelectedIndex) { + this.setState({currentSelectedIndex: i}); + + // onActive callback + if (tab.props.onActive) tab.props.onActive(tab); + + // onChange callback + if (this.props.onChange) { + this.props.onChange(i, tab.props.value, tab, ev); + } + } + } + + render() { + let { children, ...other } = this.props; + + let tabEls = [], + paneEls = [], + m = children.length, + selectedIndex = this.state.currentSelectedIndex % m, + isActive, + item, + cls, + i; + + for (i=0; i < m; i++) { + item = children[i]; + + // only accept MUITab elements + if (item.type !== Tab) util.raiseError('Expecting MUITab React Element'); + + isActive = (i === selectedIndex) ? true : false; + + // tab element + tabEls.push( +
                • + + {item.props.label} + +
                • + ); + + // pane element + cls = tabsPaneClass + ' '; + if (isActive) cls += isActiveClass; + + paneEls.push( +
                  + {item.props.children} +
                  + ); + } + + cls = tabsBarClass; + if (this.props.justified) cls += ' ' + tabsBarJustifiedClass; + + return ( +
                  +
                    + {tabEls} +
                  + {paneEls} +
                  + ); + } +} + + +/** Define module API */ +export default Tabs; diff --git a/www/libs/mui/src/react/text-field.jsx b/www/libs/mui/src/react/text-field.jsx new file mode 100644 index 0000000..c20b8ea --- /dev/null +++ b/www/libs/mui/src/react/text-field.jsx @@ -0,0 +1,239 @@ +/** + * MUI React TextInput Component + * @module react/text-input + */ + +'use strict'; + +import React from 'react'; + +import * as util from '../js/lib/util'; +import { controlledMessage } from './_helpers'; + + +const PropTypes = React.PropTypes; + + +/** + * Input constructor + * @class + */ +class Input extends React.Component { + constructor(props) { + super(props); + + let value = props.value; + let innerValue = value || props.defaultValue; + + this.state = { + innerValue: innerValue, + isDirty: Boolean(innerValue) + }; + + // warn if value defined but onChange is not + if (value !== undefined && props.onChange === null) { + util.raiseError(controlledMessage, true); + } + + let cb = util.callback; + this.onChangeCB = cb(this, 'onChange'); + this.onFocusCB = cb(this, 'onFocus'); + } + + static propTypes = { + hint: PropTypes.string, + value: PropTypes.string, + type: PropTypes.string, + autoFocus: PropTypes.bool, + onChange: PropTypes.func + }; + + static defaultProps = { + hint: null, + type: null, + autoFocus: false, + onChange: null + }; + + componentDidMount() { + // disable MUI js + this.refs.inputEl._muiTextfield = true; + } + + onChange(ev) { + this.setState({innerValue: ev.target.value}); + + let fn = this.props.onChange; + if (fn) fn(ev); + } + + onFocus(ev) { + this.setState({isDirty: true}); + } + + triggerFocus() { + // hack to enable IE10 pointer-events shim + this.refs.inputEl.focus(); + } + + render() { + let cls = {}, + isNotEmpty = Boolean(this.state.innerValue), + inputEl; + + cls['mui--is-empty'] = !isNotEmpty; + cls['mui--is-not-empty'] = isNotEmpty; + cls['mui--is-dirty'] = this.state.isDirty; + cls['mui--is-invalid'] = this.props.invalid; + + cls = util.classNames(cls); + + let { children, ...other } = this.props; + + if (this.props.type === 'textarea') { + inputEl = ( +

                  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