diff --git a/.gitignore b/.gitignore index e5034c1..7035e84 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ node_modules node_debug.log /dist +**.DS_Store +/build +/release \ No newline at end of file diff --git a/LICENSE b/LICENSE.md similarity index 96% rename from LICENSE rename to LICENSE.md index cabd00b..a036382 100644 --- a/LICENSE +++ b/LICENSE.md @@ -1,4 +1,4 @@ -Copyright (c) 2016 Jacob Crowther +Copyright (c) 2017 Jacob Crowther 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: diff --git a/README.md b/README.md index bcabe73..2cd2f8f 100644 --- a/README.md +++ b/README.md @@ -1,38 +1,101 @@ # Cryptr -Cryptr is a secret store GUI built for secrets managed by SaltStack's [GPG renderer](http://docs.saltstack.com/en/latest/ref/renderers/all/salt.renderers.gpg.html). Using Salt's gpg renderer, you can securely save passwords, certificates, or other secrets on the salt master, where minions may request them as needed. This repo houses the front-end GUI to integrate with cryptr-server, which runs on a salt-master housing salt gpg-encrypted passwords. Using Cryptr, a user may easily interact with the secrets in the saltstore, including reading and (eventually) modifying secrets easily. +Cryptr is a GUI for [Hashicorp's Vault](https://www.vaultproject.io/). + +Using Cryptr, a user may easily interact with their Vault instance's API, reading, creating, and modifying secrets with ease. ![alt text](app/images/cryptr-demo.png "Cryptr") -Download Binaries ------------------ +## Download Binaries + +Current release can be [downloaded here](https://github.com/jcrowthe/cryptr/releases). +Cryptr supports Windows, Linux and Mac OS. It has been tested on Windows 10, Ubuntu 16.04 Desktop, and macOS 10.12 Sierra. + + +## Building from Source + +``` +git clone https://github.com/jcrowthe/cryptr.git +cd cryptr +npm install +npm run dev +``` + + +## License + +MIT License. + + +## HTTPS + +Cryptr will ONLY access Vault servers enabled with HTTPS. +These are your secrets. Don't be stupid. + -Current release can be [downloaded from here](https://github.com/jcrowthe/cryptr/releases). -Cryptr supports Windows, Linux and Mac OS. It has been tested on Windows 10, Ubuntu 14.04 Desktop, and Mac OS 10.10 Yosemite. +## Auth backends -On first run, Cryptr prompts you for the url of cryptr-server. If you haven't already set it up, you may do so [here](https://github.com/jcrowthe/cryptr-server.git). +Currently LDAP, UserPass and Token auth backends are accepted. Most others are not useful for a GUI, but if you feel otherwise, submit a pull request. -Status ------- +# Important Notes about Policies -Currently Cryptr only allows read-only access to the salt secret storage. Write access is in progress. +## Secret Discovery +Cryptr requires the policies associated with the token to be readable by the token. The purpose for this is to discover what secrets are available to the token. An example ACL for policy found at `sys/policy/allsecrets` would be as follows: -Building from Source ------------------ ``` -git clone https://github.com/jcrowthe/cryptr.git -npm install -npm run build +path "secret/mysecrets/*" { + policy = "write" +} + +path "sys/policy/allsecrets" { + policy = "read" +} ``` -This will run the npm 'build' script, which runs electron-packager. It will create a binary application for all distributions (Win/Mac/Linux) for both x32 and amd64. See electron-packager documentation for more info. Binaries are found in /dist. +Only the permission to `read` is advised. **NOTE: This policy addition is _critical_ to discovering available secrets.** Without this, there is no programatic way for Cryptr to know what secrets it should show the user. (Also, for that matter, there is no way for a human using the CLI to discover secrets either except for blinding attempting to `list` potential folders) As such, it is **highly** recommended to do this for all policies. All policies without this ability must, and will, be ignored by Cryptr. -NOTE: If building for the Windows platform on a non-windows machine, you will [need](https://www.npmjs.com/package/electron-packager#building-windows-apps-from-non-windows-platforms) to install Wine and node-rcedit. This is due to the custom app icon. +## Wildcards and Secret Discovery +Wildcards in path names are supported. However, there is a caveat that is best described with an example. Take the following policy as an example, understanding it being the only policy applied in this example: -License -------- +``` +path "secret/myteam*" { + policy = "write" +} +``` -MIT License. +With this policy, a user may create secrets such as `secret/myteam-keys` or `secret/myteam/certs`. This is absolutely accepted in Vault, however without an additional policy, neither Cryptr nor a human being on the CLI will be able to *discover* any of these secrets. This is because there is no containing folder upon which to execute a `list` command. The natural next step, then, would be to make an addition to the policy, as follows: + +``` +path "secret/myteam*" { + policy = "write" +} + +path "secret/*" { + policy = "list" +} +``` + +But this is _not_ recommended for multiple reasons (the above being one obvious reason). Noted [here](https://www.vaultproject.io/docs/concepts/policies.html#list), `list` command outputs are not filtered by policy. This means all secrets found at `secret/*` will be listed, regardless if the token has rights to use any of them. + +As such, the recommended procedure for using wildcards in policies is to not use prefixes and suffixes in the path. ie: + +``` +#GOOD +path "secret/myteam/*" { + policy = "write" +} + +#BAD +path "secret/group*" { + policy = "write" +} + +#BAD +path "secret/*group" { + policy = "write" +} + +``` \ No newline at end of file diff --git a/app/bower.json b/app/bower.json new file mode 100644 index 0000000..44624eb --- /dev/null +++ b/app/bower.json @@ -0,0 +1,25 @@ +{ + "name": "Cryptr", + "homepage": "https://github.com/jcrowthe/cryptr", + "authors": [ + "Jacob Crowther " + ], + "description": "A GUI for Vault", + "main": "main.js", + "license": "MIT", + "private": true, + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "test", + "tests" + ], + "dependencies": { + "iron-elements": "PolymerElements/iron-elements#^1.0.10", + "paper-elements": "PolymerElements/paper-elements#^1.0.7", + "neon-elements": "PolymerElements/neon-elements#^1.0.0", + "vaadin-grid": "^1.2.0", + "page": "visionmedia/page.js#^1.7.1" + } +} diff --git a/app/bower_components/accessibility-developer-tools/.bower.json b/app/bower_components/accessibility-developer-tools/.bower.json deleted file mode 100644 index cffb2ce..0000000 --- a/app/bower_components/accessibility-developer-tools/.bower.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "accessibility-developer-tools", - "version": "2.10.0", - "homepage": "https://github.com/GoogleChrome/accessibility-developer-tools", - "authors": [ - "Google" - ], - "description": "This is a library of accessibility-related testing and utility code.", - "main": "dist/js/axs_testing.js", - "moduleType": [ - "amd", - "globals" - ], - "keywords": [ - "accessibility", - "testing", - "WCAG", - "module" - ], - "license": "Apache-2.0", - "ignore": [ - "**/.*", - "lib", - "scripts", - "src", - "test", - "tools", - "Gruntfile.js", - "package.json" - ], - "_release": "2.10.0", - "_resolution": { - "type": "version", - "tag": "v2.10.0", - "commit": "1a46baa0c53becec01f1892eeb2d70afbf2b060a" - }, - "_source": "git://github.com/GoogleChrome/accessibility-developer-tools.git", - "_target": "^2.10.0", - "_originalSource": "accessibility-developer-tools" -} \ No newline at end of file diff --git a/app/bower_components/accessibility-developer-tools/Changelog.md b/app/bower_components/accessibility-developer-tools/Changelog.md deleted file mode 100644 index c9b1818..0000000 --- a/app/bower_components/accessibility-developer-tools/Changelog.md +++ /dev/null @@ -1,141 +0,0 @@ -## 2.10.0 - 2015-11-13 - -## 2.10.0-rc.1 - 2015-10-19 - -### Bug fixes: - -* `linkWithUnclearPurpose` should only look at links, not `` without `href`. (#245) - -## 2.10.0-rc.0 - 2015-10-09 - -### New rules -* A tabpanel should be related to a tab via aria-controls or aria-labelledby (`src/audits/UncontrolledTabpanel.js`) -* A data table must identify row and column headers (`src/audits/TableHasAppropriateHeaders.js`) -* A tooltip element should have an aria-describedby referring to it (`src/audits/RoleTooltipRequiresDescribedBy.js`). - -### Enhancements - -* Pull DOM-related functionality out into `DOMUtils.js` - -### Bug fixes: - -* Fix `findTextAlternatives` not always correctly ignoring hidden elements (#217). -* `findTextAlternatives` now honors `alt` attribute of input type image -* Revert #150 which was causing the extension not to work. -* AX_HTML_02 (duplicate IDs) now only audits elements that are referenced by an IDREF (#141); -* Fix #171 by being smarter about finding the composed parent node. -* Tweak in canScrollTo to handle the (common) case where the container is `document.body` (#243). - -## 2.9.0 - 2015-09-04 - -## 2.9.0-rc.0 - 2015-08-21 - -### New rules - -* A label element may not have labelable descendants other than its labeled control (`src/audits/MultipleLabelableElementsPerLabel.js`) - -### Enhancements - -* Implement support for specifying audit configuration options through an object when initializing audits (#165). -* Implement support for AMD loaders. - -### Bug fixes: - -* Fix `badAriaAttributeValue` not correctly handling decimal values (#182). -* Work around null pointer exception caused by closure compiler issue (#183). -* Add a special case to handle color `"transparent"` to fix (#180). -* Fix `matchSelector` not working properly in browser environments without vendor prefixes (#189). -* Fix false positives on elements with no role for Unsupported ARIA Attribute rule (#178 and #199). -* Fix ARIA `tablist` and ARIA `tab` scope (#204) -* Fix link with clear purpose with text alternative (#156); -* Handle edge cases in number parser, e.g. "+1", ".1", "01" -* HTML button containing img with alt attribute now passes controlsWithoutLabel (#202) -* Disabled elements should be ignored by low contrast audit (#205) -* Fix input of type "text" did not find correct implied role (#225) -* Hidden links are no longer relevant for meaningful link text rule. - -## 2.8.0 - 2015-07-24 - -## 2.8.0-rc.0 - 2015-07-10 - -### Enhancements: -* Pull color code into separate file. -* Improve color suggestion algorithm. -* Descend into iframes when collecting matching elements. - -## 2.7.1 - 2015-06-30 - -## 2.7.1-rc.1 - 2015-06-23 - -### Bug fixes: - -* Check for null `textAlternatives` in `FocusableElementNotVisibleAndNotAriaHidden`'s `relevantElementMatcher` method. - -## 2.7.1-rc.0 - 2015-06-15 - -### Enhancements: -* Rework findTextAlternatives not to return non-exposed text alternatives. -* Add Bower config (#157) - -### Bug fixes: -* Check for any text alternatives when assessing unlabeled images (#154). - -## 2.7.0 - 2015-05-15 - -### New rules -* This element does not support ARIA roles, states and properties (`src/audits/AriaOnReservedElement.js`) -* aria-owns should not be used if ownership is implicit in the DOM (`src/audits/AriaOwnsDescendant.js`) -* Elements with ARIA roles must be in the correct scope (`src/audits/AriaRoleNotScoped.js`) -* An element's ID must be unique in the DOM (`src/audits/DuplicateId.js`) -* The web page should have the content's human language indicated in the markup (`src/audits/HumanLangMissing.js`) -* An element's ID must not be present in more that one aria-owns attribute at any time (`src/audits/MultipleAriaOwners.js`) -* ARIA attributes which refer to other elements by ID should refer to elements which exist in the DOM (`src/audits/NonExistentAriaRelatedElement.js` - previously `src/audits/NonExistentAriaLabeledBy.js`) -* Elements with ARIA roles must ensure required owned elements are present (`src/audits/RequiredOwnedAriaRoleMissing.js`) -* Avoid positive integer values for tabIndex (`src/audits/TabIndexGreaterThanZero.js`) -* This element has an unsupported ARIA attribute (`src/audits/UnsupportedAriaAttribute.js`) - -### Enhancements: -* Add configurable blacklist phrases and stop words to LinkWithUnclearPurpose (#99) -* Detect and warn if we reuse the same code for more than one rule. (#133) -* Force focus before testing visibility on focusable elements. (#65) -* Use getDistributedNodes to get nodes distributed into shadowRoots (#128) -* Add section to Audit Rules page for HumanLangMissing and link to it from rule (#119) -* Reference "applied role" in axs.utils.getRoles enhancement (#130) -* Add warning that AX_FOCUS_02 is not available from axs.Audit.run() (#85) - -### Bug fixes: -* Incorrect use of nth-of-type against className in utils.getQuerySelectorText (#87) -* AX_TEXT_01 Accessibility Audit test should probably ignore role=presentation elements (#97) -* Fix path to audit rules in phantomjs runner (#108) -* Label audit should fail if form fields lack a label, even with placeholder text (#81) -* False positives for controls without labels with role=presentation (#23) -* Fix "valid" flag on return value of axs.utils.getRoles (#131) - -Note: this version number is somewhat arbitrary - just bringing it vaguely in line with [the extension](https://github.com/GoogleChrome/accessibility-developer-tools-extension) since that's where the library originated - but will use semver for version bumps going forward from here. - -## 0.0.5 - 2014-02-04 - -### Enhancements: -* overlapping elements detection code made more sophisticated -* axs.properties.getFocusProperties() returns more information about visibility -* new axs.properties.hasDirectTextDescendant() method with more sophisticated detection of text content - -### Bug fixes: -* FocusableElementNotVisibleAndNotAriaHidden audit passes on elements which are brought onscreen on focus -* UnfocusableElementsWithOnclick checks for element.disabled -* Fix infinite loop when getting descendant text content of a label containing an input -* Detect elements which are out of scroll area of any parent element, not just the document scroll area -* findTextAlternatives doesn't throw TypeError if used on a HTMLSelectElement - -## 0.0.4 - 2013-10-03 - -### Enhancements: - -* axs.AuditRule.run() has a new signature: it now takes an options object. Please see method documentation for details. -* Audit Rule severity can be overridden (per Audit Rule) in AuditConfig. - -### Bug fixes: - -* axs.utils.isLowContrast() now rounds to the nearest 0.1 before checking (so `#777` is now a passing value) -* MainRoleOnInappropriateElement was always failing due to accessible name calculation taking the main role into account and not descending into content (now just gets descendant content directly) -* UnfocusableElementsWithOnClick had a dangling if-statement causing very noisy false positives diff --git a/app/bower_components/accessibility-developer-tools/LICENSE b/app/bower_components/accessibility-developer-tools/LICENSE deleted file mode 100644 index d645695..0000000 --- a/app/bower_components/accessibility-developer-tools/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/app/bower_components/accessibility-developer-tools/README.md b/app/bower_components/accessibility-developer-tools/README.md deleted file mode 100644 index 7460130..0000000 --- a/app/bower_components/accessibility-developer-tools/README.md +++ /dev/null @@ -1,211 +0,0 @@ -# Accessibility Developer Tools - -This is a library of accessibility-related testing and utility code. - -Its main component is the accessibility audit: a collection of audit rules checking for common accessibility problems, and an API for running these rules in an HTML page. - -There is also a collection of accessibility-related utility code, including but not limited to: -* contrast ratio calculation and color suggestions -* retrieving and validating ARIA attributes and states -* accessible name calculation using the algorithm at [http://www.w3.org/TR/wai-aria/roles#textalternativecomputation](http://www.w3.org/TR/wai-aria/roles#textalternativecomputation) - -# Getting the code - -To include just the javascript rules, require the following file: - - https://raw.github.com/GoogleChrome/accessibility-developer-tools/stable/dist/js/axs_testing.js - - `git 1.6.5` or later: - - % git clone --recursive https://github.com/GoogleChrome/accessibility-developer-tools.git - - Before `git 1.6.5`: - - % git clone https://github.com/GoogleChrome/accessibility-developer-tools.git - % cd accessibility-developer-tools - % git submodule init; git submodule update - -# Building - -You will need `node` and `grunt-cli` to build. - -1. (Once only) Install [Node.js](http://nodejs.org/) and `npm` - useful instructions here: [https://gist.github.com/isaacs/579814](https://gist.github.com/isaacs/579814) - - Make sure you have Node.js v 0.8 or higher. - -2. (Once only) Use `npm` to install `grunt-cli` - - % npm install -g grunt-cli # May need to be run as root - -3. (Every time you make a fresh checkout) Install dependencies (including `grunt`) for this project (run from project root) - - % npm install - -4. Build using `grunt` (run from project root) - - % grunt - -# Using the Audit API - -## Including the library - -The simplest option is to include the generated `axs_testing.js` library on your page. - -Work is underway to include the library in WebDriver and other automated testing frameworks. - -## The `axs.Audit.run()` method - -Once you have included `axs_testing.js`, you can call `axs.Audit.run()`. This returns an object in the following form: - - { - /** @type {axs.constants.AuditResult} */ - result, // one of PASS, FAIL or NA - - /** @type {Array.} */ - elements, // The elements which the rule fails on, if result == axs.constants.AuditResult.FAIL - - /** @type {axs.AuditRule} */ - rule // The rule which this result is for. - } - -### Command Line Runner - -The Accessibility Developer Tools project includes a command line runner for the audit. To use the runner, [install phantomjs](http://phantomjs.org/download.html) then run the following command from the project root directory. - - $ phantomjs tools/runner/audit.js - -The runner will load the specified file or URL in a headless browser, inject axs_testing.js, run the audit and output the report text. - -### Run audit from Selenium WebDriver (Scala): - val driver = org.openqa.selenium.firefox.FirefoxDriver //use driver of your choice - val jse = driver.asInstanceOf[JavascriptExecutor] - jse.executeScript(scala.io.Source.fromURL("https://raw.githubusercontent.com/GoogleChrome/" + - "accessibility-developer-tools/stable/dist/js/axs_testing.js").mkString) - val report = js.executeScript("var results = axs.Audit.run();return axs.Audit.createReport(results);") - println(report) - -### Run audit from Selenium WebDriver (Scala)(with caching): - val cache = collection.mutable.Map[String, String]() - val driver = org.openqa.selenium.firefox.FirefoxDriver //use driver of your choice - val jse = driver.asInstanceOf[JavascriptExecutor] - def getUrlSource(arg: String): String = cache get arg match { - case Some(result) => result - case None => - val result: String = scala.io.Source.fromURL(arg).mkString - cache(arg) = result - result - } - jse.executeScript(getUrlSource("https://raw.githubusercontent.com/GoogleChrome/" + - "accessibility-developer-tools/stable/dist/js/axs_testing.js")) - val report = js.executeScript("var results = axs.Audit.run();return axs.Audit.createReport(results);") - println(report) - -If println() outputs nothing, check if you need to set DesiredCapabilities for your WebDriver (such as loggingPrefs): -https://code.google.com/p/selenium/wiki/DesiredCapabilities - -## Using the results - -### Interpreting the result - -The result may be one of three constants: -* `axs.constants.AuditResult.PASS` - This implies that there were elements on the page that may potentially have failed this audit rule, but they passed. Congratulations! -* `axs.constants.AuditResult.NA` - This implies that there were no elements on the page that may potentially have failed this audit rule. For example, an audit rule that checks video elements for subtitles would return this result if there were no video elements on the page. -* `axs.constants.AuditResult.FAIL` - This implies that there were elements on the page that did not pass this audit rule. This is the only result you will probably be interested in. - -### Creating a useful error message - -The static, global `axs.Audit.createReport(results, opt_url)` may be used to create an error message using the return value of axs.Audit.run(). This will look like the following: - - *** Begin accessibility audit results *** - An accessibility audit found 4 errors and 4 warnings on this page. - For more information, please see https://github.com/GoogleChrome/accessibility-developer-tools/wiki/Audit-Rules - - Error: badAriaAttributeValue (AX_ARIA_04) failed on the following elements (1 - 3 of 3): - DIV:nth-of-type(3) > INPUT - DIV:nth-of-type(5) > INPUT - #aria-invalid - - Error: badAriaRole (AX_ARIA_01) failed on the following element: - DIV:nth-of-type(11) > SPAN - - Error: controlsWithoutLabel (AX_TEXT_01) failed on the following elements (1 - 3 of 3): - DIV > INPUT - DIV:nth-of-type(12) > DIV:nth-of-type(3) > INPUT - LABEL > INPUT - - Error: requiredAriaAttributeMissing (AX_ARIA_03) failed on the following element: - DIV:nth-of-type(13) > DIV:nth-of-type(11) > DIV - - Warning: focusableElementNotVisibleAndNotAriaHidden (AX_FOCUS_01) failed on the following element: - #notariahidden - - Warning: imagesWithoutAltText (AX_TEXT_02) failed on the following elements (1 - 2 of 2): - #deceptive-img - DIV:nth-of-type(13) > IMG - - Warning: lowContrastElements (AX_COLOR_01) failed on the following elements (1 - 2 of 2): - DIV:nth-of-type(13) > DIV - DIV:nth-of-type(13) > DIV:nth-of-type(3) - - Warning: nonExistentAriaLabelledbyElement (AX_ARIA_02) failed on the following elements (1 - 2 of 2): - DIV:nth-of-type(3) > INPUT - DIV:nth-of-type(5) > INPUT - *** End accessibility audit results *** - -Each rule will have at most five elements listed as failures, in the form of a unique query selector for each element. - -### Configuring the Audit - -If you wish to fine-tune the audit, you can create an `axs.AuditConfiguration` object, with the following options: - -#### Ignore parts of the page for a particular audit rule - -For example, say you have a separate high-contrast version of your page, and there is a CSS rule which causes certain elements (with class `pretty`) on the page to be low-contrast for stylistic reasons. Running the audit unmodified produces results something like - - Warning: lowContrastElements (AX_COLOR_01) failed on the following elements (1 - 5 of 15): - ... - -You can modify the audit to ignore the elements which are known and intended to have low contrast like this: - - var configuration = new axs.AuditConfiguration(); - configuration.ignoreSelectors('lowContrastElements', '.pretty'); - axs.Audit.run(configuration); - -The `AuditConfiguration.ignoreSelectors()` method takes a rule name, which you can find in the audit report, and a query selector string representing the parts of the page to be ignored for that audit rule. Multiple calls to `ignoreSelectors()` can be made for each audit rule, if multiple selectors need to be ignored. - -#### Restrict the scope of the entire audit to a subsection of the page - -You may have a part of the page which varies while other parts of the page stay constant, like a content area vs. a toolbar. In this case, running the audit on the entire page may give you spurious results in the part of the page which doesn't vary, which may drown out regressions in the main part of the page. - -You can set a `scope` on the `AuditConfiguration` object like this: - - var configuration = new axs.AuditConfiguration(); - configuration.scope = document.querySelector('main'); // or however you wish to choose your scope element - axs.Audit.run(configuration); - -You may also specify a configuration payload while instantiating the `axs.AuditConfiguration`, -which allows you to provide multiple configuration options at once. - - var configuration = new axs.AuditConfiguration({ - auditRulesToRun: ['badAriaRole'], - scope: document.querySelector('main'), - maxResults: 5 - }); - - axs.Audit.run(configuration); - -## License - -Copyright 2013 Google Inc. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -[http://www.apache.org/licenses/LICENSE-2.0](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. diff --git a/app/bower_components/accessibility-developer-tools/bower.json b/app/bower_components/accessibility-developer-tools/bower.json deleted file mode 100644 index 62143ae..0000000 --- a/app/bower_components/accessibility-developer-tools/bower.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "accessibility-developer-tools", - "version": "2.10.0", - "homepage": "https://github.com/GoogleChrome/accessibility-developer-tools", - "authors": [ - "Google" - ], - "description": "This is a library of accessibility-related testing and utility code.", - "main": "dist/js/axs_testing.js", - "moduleType": [ - "amd", - "globals" - ], - "keywords": [ - "accessibility", - "testing", - "WCAG", - "module" - ], - "license": "Apache-2.0", - "ignore": [ - "**/.*", - "lib", - "scripts", - "src", - "test", - "tools", - "Gruntfile.js", - "package.json" - ] -} diff --git a/app/bower_components/accessibility-developer-tools/dist/js/axs_testing.js b/app/bower_components/accessibility-developer-tools/dist/js/axs_testing.js deleted file mode 100644 index f075a05..0000000 --- a/app/bower_components/accessibility-developer-tools/dist/js/axs_testing.js +++ /dev/null @@ -1,2278 +0,0 @@ -/* - * Copyright 2015 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Generated from http://github.com/GoogleChrome/accessibility-developer-tools/tree/404ede0f2186682fbbef624141e76ec2b601317d - * - * See project README for build steps. - */ - -// AUTO-GENERATED CONTENT BELOW: DO NOT EDIT! See above for details. - -var fn = (function() { - var COMPILED = !0, goog = goog || {}; -goog.global = this; -goog.isDef = function(a) { - return void 0 !== a; -}; -goog.exportPath_ = function(a, b, c) { - a = a.split("."); - c = c || goog.global; - a[0] in c || !c.execScript || c.execScript("var " + a[0]); - for (var d;a.length && (d = a.shift());) { - !a.length && goog.isDef(b) ? c[d] = b : c = c[d] ? c[d] : c[d] = {}; - } -}; -goog.define = function(a, b) { - var c = b; - COMPILED || (goog.global.CLOSURE_UNCOMPILED_DEFINES && Object.prototype.hasOwnProperty.call(goog.global.CLOSURE_UNCOMPILED_DEFINES, a) ? c = goog.global.CLOSURE_UNCOMPILED_DEFINES[a] : goog.global.CLOSURE_DEFINES && Object.prototype.hasOwnProperty.call(goog.global.CLOSURE_DEFINES, a) && (c = goog.global.CLOSURE_DEFINES[a])); - goog.exportPath_(a, c); -}; -goog.DEBUG = !0; -goog.LOCALE = "en"; -goog.TRUSTED_SITE = !0; -goog.STRICT_MODE_COMPATIBLE = !1; -goog.provide = function(a) { - if (!COMPILED) { - if (goog.isProvided_(a)) { - throw Error('Namespace "' + a + '" already declared.'); - } - delete goog.implicitNamespaces_[a]; - for (var b = a;(b = b.substring(0, b.lastIndexOf("."))) && !goog.getObjectByName(b);) { - goog.implicitNamespaces_[b] = !0; - } - } - goog.exportPath_(a); -}; -goog.setTestOnly = function(a) { - if (COMPILED && !goog.DEBUG) { - throw a = a || "", Error("Importing test-only code into non-debug environment" + a ? ": " + a : "."); - } -}; -goog.forwardDeclare = function(a) { -}; -COMPILED || (goog.isProvided_ = function(a) { - return !goog.implicitNamespaces_[a] && goog.isDefAndNotNull(goog.getObjectByName(a)); -}, goog.implicitNamespaces_ = {}); -goog.getObjectByName = function(a, b) { - for (var c = a.split("."), d = b || goog.global, e;e = c.shift();) { - if (goog.isDefAndNotNull(d[e])) { - d = d[e]; - } else { - return null; - } - } - return d; -}; -goog.globalize = function(a, b) { - var c = b || goog.global, d; - for (d in a) { - c[d] = a[d]; - } -}; -goog.addDependency = function(a, b, c) { - if (goog.DEPENDENCIES_ENABLED) { - var d; - a = a.replace(/\\/g, "/"); - for (var e = goog.dependencies_, f = 0;d = b[f];f++) { - e.nameToPath[d] = a, a in e.pathToNames || (e.pathToNames[a] = {}), e.pathToNames[a][d] = !0; - } - for (d = 0;b = c[d];d++) { - a in e.requires || (e.requires[a] = {}), e.requires[a][b] = !0; - } - } -}; -goog.ENABLE_DEBUG_LOADER = !0; -goog.require = function(a) { - if (!COMPILED && !goog.isProvided_(a)) { - if (goog.ENABLE_DEBUG_LOADER) { - var b = goog.getPathFromDeps_(a); - if (b) { - goog.included_[b] = !0; - goog.writeScripts_(); - return; - } - } - a = "goog.require could not find: " + a; - goog.global.console && goog.global.console.error(a); - throw Error(a); - } -}; -goog.basePath = ""; -goog.nullFunction = function() { -}; -goog.identityFunction = function(a, b) { - return a; -}; -goog.abstractMethod = function() { - throw Error("unimplemented abstract method"); -}; -goog.addSingletonGetter = function(a) { - a.getInstance = function() { - if (a.instance_) { - return a.instance_; - } - goog.DEBUG && (goog.instantiatedSingletons_[goog.instantiatedSingletons_.length] = a); - return a.instance_ = new a; - }; -}; -goog.instantiatedSingletons_ = []; -goog.DEPENDENCIES_ENABLED = !COMPILED && goog.ENABLE_DEBUG_LOADER; -goog.DEPENDENCIES_ENABLED && (goog.included_ = {}, goog.dependencies_ = {pathToNames:{}, nameToPath:{}, requires:{}, visited:{}, written:{}}, goog.inHtmlDocument_ = function() { - var a = goog.global.document; - return "undefined" != typeof a && "write" in a; -}, goog.findBasePath_ = function() { - if (goog.global.CLOSURE_BASE_PATH) { - goog.basePath = goog.global.CLOSURE_BASE_PATH; - } else { - if (goog.inHtmlDocument_()) { - for (var a = goog.global.document.getElementsByTagName("script"), b = a.length - 1;0 <= b;--b) { - var c = a[b].src, d = c.lastIndexOf("?"), d = -1 == d ? c.length : d; - if ("base.js" == c.substr(d - 7, 7)) { - goog.basePath = c.substr(0, d - 7); - break; - } - } - } - } -}, goog.importScript_ = function(a) { - var b = goog.global.CLOSURE_IMPORT_SCRIPT || goog.writeScriptTag_; - !goog.dependencies_.written[a] && b(a) && (goog.dependencies_.written[a] = !0); -}, goog.writeScriptTag_ = function(a) { - if (goog.inHtmlDocument_()) { - var b = goog.global.document; - if ("complete" == b.readyState) { - if (/\bdeps.js$/.test(a)) { - return !1; - } - throw Error('Cannot write "' + a + '" after document load'); - } - b.write(' - -``` - -## Documentation - -Some functions are also available in the following forms: -* `Series` - the same as `` but runs only a single async operation at a time -* `Limit` - the same as `` but runs a maximum of `limit` async operations at a time - -### Collections - -* [`each`](#each), `eachSeries`, `eachLimit` -* [`forEachOf`](#forEachOf), `forEachOfSeries`, `forEachOfLimit` -* [`map`](#map), `mapSeries`, `mapLimit` -* [`filter`](#filter), `filterSeries`, `filterLimit` -* [`reject`](#reject), `rejectSeries`, `rejectLimit` -* [`reduce`](#reduce), [`reduceRight`](#reduceRight) -* [`detect`](#detect), `detectSeries`, `detectLimit` -* [`sortBy`](#sortBy) -* [`some`](#some), `someLimit` -* [`every`](#every), `everyLimit` -* [`concat`](#concat), `concatSeries` - -### Control Flow - -* [`series`](#seriestasks-callback) -* [`parallel`](#parallel), `parallelLimit` -* [`whilst`](#whilst), [`doWhilst`](#doWhilst) -* [`until`](#until), [`doUntil`](#doUntil) -* [`during`](#during), [`doDuring`](#doDuring) -* [`forever`](#forever) -* [`waterfall`](#waterfall) -* [`compose`](#compose) -* [`seq`](#seq) -* [`applyEach`](#applyEach), `applyEachSeries` -* [`queue`](#queue), [`priorityQueue`](#priorityQueue) -* [`cargo`](#cargo) -* [`auto`](#auto) -* [`retry`](#retry) -* [`iterator`](#iterator) -* [`times`](#times), `timesSeries`, `timesLimit` - -### Utils - -* [`apply`](#apply) -* [`nextTick`](#nextTick) -* [`memoize`](#memoize) -* [`unmemoize`](#unmemoize) -* [`ensureAsync`](#ensureAsync) -* [`constant`](#constant) -* [`asyncify`](#asyncify) -* [`wrapSync`](#wrapSync) -* [`log`](#log) -* [`dir`](#dir) -* [`noConflict`](#noConflict) - -## Collections - - - -### each(arr, iterator, [callback]) - -Applies the function `iterator` to each item in `arr`, in parallel. -The `iterator` is called with an item from the list, and a callback for when it -has finished. If the `iterator` passes an error to its `callback`, the main -`callback` (for the `each` function) is immediately called with the error. - -Note, that since this function applies `iterator` to each item in parallel, -there is no guarantee that the iterator functions will complete in order. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A function to apply to each item in `arr`. - The iterator is passed a `callback(err)` which must be called once it has - completed. If no error has occurred, the `callback` should be run without - arguments or with an explicit `null` argument. The array index is not passed - to the iterator. If you need the index, use [`forEachOf`](#forEachOf). -* `callback(err)` - *Optional* A callback which is called when all `iterator` functions - have finished, or an error occurs. - -__Examples__ - - -```js -// assuming openFiles is an array of file names and saveFile is a function -// to save the modified contents of that file: - -async.each(openFiles, saveFile, function(err){ - // if any of the saves produced an error, err would equal that error -}); -``` - -```js -// assuming openFiles is an array of file names - -async.each(openFiles, function(file, callback) { - - // Perform operation on file here. - console.log('Processing file ' + file); - - if( file.length > 32 ) { - console.log('This file name is too long'); - callback('File name too long'); - } else { - // Do work to process file here - console.log('File processed'); - callback(); - } -}, function(err){ - // if any of the file processing produced an error, err would equal that error - if( err ) { - // One of the iterations produced an error. - // All processing will now stop. - console.log('A file failed to process'); - } else { - console.log('All files have been processed successfully'); - } -}); -``` - -__Related__ - -* eachSeries(arr, iterator, [callback]) -* eachLimit(arr, limit, iterator, [callback]) - ---------------------------------------- - - - - -### forEachOf(obj, iterator, [callback]) - -Like `each`, except that it iterates over objects, and passes the key as the second argument to the iterator. - -__Arguments__ - -* `obj` - An object or array to iterate over. -* `iterator(item, key, callback)` - A function to apply to each item in `obj`. -The `key` is the item's key, or index in the case of an array. The iterator is -passed a `callback(err)` which must be called once it has completed. If no -error has occurred, the callback should be run without arguments or with an -explicit `null` argument. -* `callback(err)` - *Optional* A callback which is called when all `iterator` functions have finished, or an error occurs. - -__Example__ - -```js -var obj = {dev: "/dev.json", test: "/test.json", prod: "/prod.json"}; -var configs = {}; - -async.forEachOf(obj, function (value, key, callback) { - fs.readFile(__dirname + value, "utf8", function (err, data) { - if (err) return callback(err); - try { - configs[key] = JSON.parse(data); - } catch (e) { - return callback(e); - } - callback(); - }) -}, function (err) { - if (err) console.error(err.message); - // configs is now a map of JSON data - doSomethingWith(configs); -}) -``` - -__Related__ - -* forEachOfSeries(obj, iterator, [callback]) -* forEachOfLimit(obj, limit, iterator, [callback]) - ---------------------------------------- - - -### map(arr, iterator, [callback]) - -Produces a new array of values by mapping each value in `arr` through -the `iterator` function. The `iterator` is called with an item from `arr` and a -callback for when it has finished processing. Each of these callback takes 2 arguments: -an `error`, and the transformed item from `arr`. If `iterator` passes an error to its -callback, the main `callback` (for the `map` function) is immediately called with the error. - -Note, that since this function applies the `iterator` to each item in parallel, -there is no guarantee that the `iterator` functions will complete in order. -However, the results array will be in the same order as the original `arr`. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A function to apply to each item in `arr`. - The iterator is passed a `callback(err, transformed)` which must be called once - it has completed with an error (which can be `null`) and a transformed item. -* `callback(err, results)` - *Optional* A callback which is called when all `iterator` - functions have finished, or an error occurs. Results is an array of the - transformed items from the `arr`. - -__Example__ - -```js -async.map(['file1','file2','file3'], fs.stat, function(err, results){ - // results is now an array of stats for each file -}); -``` - -__Related__ -* mapSeries(arr, iterator, [callback]) -* mapLimit(arr, limit, iterator, [callback]) - ---------------------------------------- - - - -### filter(arr, iterator, [callback]) - -__Alias:__ `select` - -Returns a new array of all the values in `arr` which pass an async truth test. -_The callback for each `iterator` call only accepts a single argument of `true` or -`false`; it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like `fs.exists`. This operation is -performed in parallel, but the results array will be in the same order as the -original. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A truth test to apply to each item in `arr`. - The `iterator` is passed a `callback(truthValue)`, which must be called with a - boolean argument once it has completed. -* `callback(results)` - *Optional* A callback which is called after all the `iterator` - functions have finished. - -__Example__ - -```js -async.filter(['file1','file2','file3'], fs.exists, function(results){ - // results now equals an array of the existing files -}); -``` - -__Related__ - -* filterSeries(arr, iterator, [callback]) -* filterLimit(arr, limit, iterator, [callback]) - ---------------------------------------- - - -### reject(arr, iterator, [callback]) - -The opposite of [`filter`](#filter). Removes values that pass an `async` truth test. - -__Related__ - -* rejectSeries(arr, iterator, [callback]) -* rejectLimit(arr, limit, iterator, [callback]) - ---------------------------------------- - - -### reduce(arr, memo, iterator, [callback]) - -__Aliases:__ `inject`, `foldl` - -Reduces `arr` into a single value using an async `iterator` to return -each successive step. `memo` is the initial state of the reduction. -This function only operates in series. - -For performance reasons, it may make sense to split a call to this function into -a parallel map, and then use the normal `Array.prototype.reduce` on the results. -This function is for situations where each step in the reduction needs to be async; -if you can get the data before reducing it, then it's probably a good idea to do so. - -__Arguments__ - -* `arr` - An array to iterate over. -* `memo` - The initial state of the reduction. -* `iterator(memo, item, callback)` - A function applied to each item in the - array to produce the next step in the reduction. The `iterator` is passed a - `callback(err, reduction)` which accepts an optional error as its first - argument, and the state of the reduction as the second. If an error is - passed to the callback, the reduction is stopped and the main `callback` is - immediately called with the error. -* `callback(err, result)` - *Optional* A callback which is called after all the `iterator` - functions have finished. Result is the reduced value. - -__Example__ - -```js -async.reduce([1,2,3], 0, function(memo, item, callback){ - // pointless async: - process.nextTick(function(){ - callback(null, memo + item) - }); -}, function(err, result){ - // result is now equal to the last value of memo, which is 6 -}); -``` - ---------------------------------------- - - -### reduceRight(arr, memo, iterator, [callback]) - -__Alias:__ `foldr` - -Same as [`reduce`](#reduce), only operates on `arr` in reverse order. - - ---------------------------------------- - - -### detect(arr, iterator, [callback]) - -Returns the first value in `arr` that passes an async truth test. The -`iterator` is applied in parallel, meaning the first iterator to return `true` will -fire the detect `callback` with that result. That means the result might not be -the first item in the original `arr` (in terms of order) that passes the test. - -If order within the original `arr` is important, then look at [`detectSeries`](#detectSeries). - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A truth test to apply to each item in `arr`. - The iterator is passed a `callback(truthValue)` which must be called with a - boolean argument once it has completed. **Note: this callback does not take an error as its first argument.** -* `callback(result)` - *Optional* A callback which is called as soon as any iterator returns - `true`, or after all the `iterator` functions have finished. Result will be - the first item in the array that passes the truth test (iterator) or the - value `undefined` if none passed. **Note: this callback does not take an error as its first argument.** - -__Example__ - -```js -async.detect(['file1','file2','file3'], fs.exists, function(result){ - // result now equals the first file in the list that exists -}); -``` - -__Related__ - -* detectSeries(arr, iterator, [callback]) -* detectLimit(arr, limit, iterator, [callback]) - ---------------------------------------- - - -### sortBy(arr, iterator, [callback]) - -Sorts a list by the results of running each `arr` value through an async `iterator`. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A function to apply to each item in `arr`. - The iterator is passed a `callback(err, sortValue)` which must be called once it - has completed with an error (which can be `null`) and a value to use as the sort - criteria. -* `callback(err, results)` - *Optional* A callback which is called after all the `iterator` - functions have finished, or an error occurs. Results is the items from - the original `arr` sorted by the values returned by the `iterator` calls. - -__Example__ - -```js -async.sortBy(['file1','file2','file3'], function(file, callback){ - fs.stat(file, function(err, stats){ - callback(err, stats.mtime); - }); -}, function(err, results){ - // results is now the original array of files sorted by - // modified date -}); -``` - -__Sort Order__ - -By modifying the callback parameter the sorting order can be influenced: - -```js -//ascending order -async.sortBy([1,9,3,5], function(x, callback){ - callback(null, x); -}, function(err,result){ - //result callback -} ); - -//descending order -async.sortBy([1,9,3,5], function(x, callback){ - callback(null, x*-1); //<- x*-1 instead of x, turns the order around -}, function(err,result){ - //result callback -} ); -``` - ---------------------------------------- - - -### some(arr, iterator, [callback]) - -__Alias:__ `any` - -Returns `true` if at least one element in the `arr` satisfies an async test. -_The callback for each iterator call only accepts a single argument of `true` or -`false`; it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like `fs.exists`. Once any iterator -call returns `true`, the main `callback` is immediately called. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A truth test to apply to each item in the array - in parallel. The iterator is passed a `callback(truthValue)`` which must be - called with a boolean argument once it has completed. -* `callback(result)` - *Optional* A callback which is called as soon as any iterator returns - `true`, or after all the iterator functions have finished. Result will be - either `true` or `false` depending on the values of the async tests. - - **Note: the callbacks do not take an error as their first argument.** -__Example__ - -```js -async.some(['file1','file2','file3'], fs.exists, function(result){ - // if result is true then at least one of the files exists -}); -``` - -__Related__ - -* someLimit(arr, limit, iterator, callback) - ---------------------------------------- - - -### every(arr, iterator, [callback]) - -__Alias:__ `all` - -Returns `true` if every element in `arr` satisfies an async test. -_The callback for each `iterator` call only accepts a single argument of `true` or -`false`; it does not accept an error argument first!_ This is in-line with the -way node libraries work with truth tests like `fs.exists`. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A truth test to apply to each item in the array - in parallel. The iterator is passed a `callback(truthValue)` which must be - called with a boolean argument once it has completed. -* `callback(result)` - *Optional* A callback which is called as soon as any iterator returns - `false`, or after all the iterator functions have finished. Result will be - either `true` or `false` depending on the values of the async tests. - - **Note: the callbacks do not take an error as their first argument.** - -__Example__ - -```js -async.every(['file1','file2','file3'], fs.exists, function(result){ - // if result is true then every file exists -}); -``` - -__Related__ - -* everyLimit(arr, limit, iterator, callback) - ---------------------------------------- - - -### concat(arr, iterator, [callback]) - -Applies `iterator` to each item in `arr`, concatenating the results. Returns the -concatenated list. The `iterator`s are called in parallel, and the results are -concatenated as they return. There is no guarantee that the results array will -be returned in the original order of `arr` passed to the `iterator` function. - -__Arguments__ - -* `arr` - An array to iterate over. -* `iterator(item, callback)` - A function to apply to each item in `arr`. - The iterator is passed a `callback(err, results)` which must be called once it - has completed with an error (which can be `null`) and an array of results. -* `callback(err, results)` - *Optional* A callback which is called after all the `iterator` - functions have finished, or an error occurs. Results is an array containing - the concatenated results of the `iterator` function. - -__Example__ - -```js -async.concat(['dir1','dir2','dir3'], fs.readdir, function(err, files){ - // files is now a list of filenames that exist in the 3 directories -}); -``` - -__Related__ - -* concatSeries(arr, iterator, [callback]) - - -## Control Flow - - -### series(tasks, [callback]) - -Run the functions in the `tasks` array in series, each one running once the previous -function has completed. If any functions in the series pass an error to its -callback, no more functions are run, and `callback` is immediately called with the value of the error. -Otherwise, `callback` receives an array of results when `tasks` have completed. - -It is also possible to use an object instead of an array. Each property will be -run as a function, and the results will be passed to the final `callback` as an object -instead of an array. This can be a more readable way of handling results from -[`series`](#series). - -**Note** that while many implementations preserve the order of object properties, the -[ECMAScript Language Specification](http://www.ecma-international.org/ecma-262/5.1/#sec-8.6) -explicitly states that - -> The mechanics and order of enumerating the properties is not specified. - -So if you rely on the order in which your series of functions are executed, and want -this to work on all platforms, consider using an array. - -__Arguments__ - -* `tasks` - An array or object containing functions to run, each function is passed - a `callback(err, result)` it must call on completion with an error `err` (which can - be `null`) and an optional `result` value. -* `callback(err, results)` - An optional callback to run once all the functions - have completed. This function gets a results array (or object) containing all - the result arguments passed to the `task` callbacks. - -__Example__ - -```js -async.series([ - function(callback){ - // do some stuff ... - callback(null, 'one'); - }, - function(callback){ - // do some more stuff ... - callback(null, 'two'); - } -], -// optional callback -function(err, results){ - // results is now equal to ['one', 'two'] -}); - - -// an example using an object instead of an array -async.series({ - one: function(callback){ - setTimeout(function(){ - callback(null, 1); - }, 200); - }, - two: function(callback){ - setTimeout(function(){ - callback(null, 2); - }, 100); - } -}, -function(err, results) { - // results is now equal to: {one: 1, two: 2} -}); -``` - ---------------------------------------- - - -### parallel(tasks, [callback]) - -Run the `tasks` array of functions in parallel, without waiting until the previous -function has completed. If any of the functions pass an error to its -callback, the main `callback` is immediately called with the value of the error. -Once the `tasks` have completed, the results are passed to the final `callback` as an -array. - -**Note:** `parallel` is about kicking-off I/O tasks in parallel, not about parallel execution of code. If your tasks do not use any timers or perform any I/O, they will actually be executed in series. Any synchronous setup sections for each task will happen one after the other. JavaScript remains single-threaded. - -It is also possible to use an object instead of an array. Each property will be -run as a function and the results will be passed to the final `callback` as an object -instead of an array. This can be a more readable way of handling results from -[`parallel`](#parallel). - - -__Arguments__ - -* `tasks` - An array or object containing functions to run. Each function is passed - a `callback(err, result)` which it must call on completion with an error `err` - (which can be `null`) and an optional `result` value. -* `callback(err, results)` - An optional callback to run once all the functions - have completed successfully. This function gets a results array (or object) containing all - the result arguments passed to the task callbacks. - -__Example__ - -```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. -}); - - -// an example using an object instead of an array -async.parallel({ - one: function(callback){ - setTimeout(function(){ - callback(null, 1); - }, 200); - }, - two: function(callback){ - setTimeout(function(){ - callback(null, 2); - }, 100); - } -}, -function(err, results) { - // results is now equals to: {one: 1, two: 2} -}); -``` - -__Related__ - -* parallelLimit(tasks, limit, [callback]) - ---------------------------------------- - - -### whilst(test, fn, callback) - -Repeatedly call `fn`, while `test` returns `true`. Calls `callback` when stopped, -or an error occurs. - -__Arguments__ - -* `test()` - synchronous truth test to perform before each execution of `fn`. -* `fn(callback)` - A function which is called each time `test` passes. The function is - passed a `callback(err)`, which must be called once it has completed with an - optional `err` argument. -* `callback(err, [results])` - A callback which is called after the test - function has failed and repeated execution of `fn` has stopped. `callback` - will be passed an error and any arguments passed to the final `fn`'s callback. - -__Example__ - -```js -var count = 0; - -async.whilst( - function () { return count < 5; }, - function (callback) { - count++; - setTimeout(function () { - callback(null, count); - }, 1000); - }, - function (err, n) { - // 5 seconds have passed, n = 5 - } -); -``` - ---------------------------------------- - - -### doWhilst(fn, test, callback) - -The post-check version of [`whilst`](#whilst). To reflect the difference in -the order of operations, the arguments `test` and `fn` are switched. - -`doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript. - ---------------------------------------- - - -### until(test, fn, callback) - -Repeatedly call `fn` until `test` returns `true`. Calls `callback` when stopped, -or an error occurs. `callback` will be passed an error and any arguments passed -to the final `fn`'s callback. - -The inverse of [`whilst`](#whilst). - ---------------------------------------- - - -### doUntil(fn, test, callback) - -Like [`doWhilst`](#doWhilst), except the `test` is inverted. Note the argument ordering differs from `until`. - ---------------------------------------- - - -### during(test, fn, callback) - -Like [`whilst`](#whilst), except the `test` is an asynchronous function that is passed a callback in the form of `function (err, truth)`. If error is passed to `test` or `fn`, the main callback is immediately called with the value of the error. - -__Example__ - -```js -var count = 0; - -async.during( - function (callback) { - return callback(null, count < 5); - }, - function (callback) { - count++; - setTimeout(callback, 1000); - }, - function (err) { - // 5 seconds have passed - } -); -``` - ---------------------------------------- - - -### doDuring(fn, test, callback) - -The post-check version of [`during`](#during). To reflect the difference in -the order of operations, the arguments `test` and `fn` are switched. - -Also a version of [`doWhilst`](#doWhilst) with asynchronous `test` function. - ---------------------------------------- - - -### forever(fn, [errback]) - -Calls the asynchronous function `fn` with a callback parameter that allows it to -call itself again, in series, indefinitely. - -If an error is passed to the callback then `errback` is called with the -error, and execution stops, otherwise it will never be called. - -```js -async.forever( - function(next) { - // next is suitable for passing to things that need a callback(err [, whatever]); - // it will result in this function being called again. - }, - function(err) { - // if next is called with a value in its first parameter, it will appear - // in here as 'err', and execution will stop. - } -); -``` - ---------------------------------------- - - -### waterfall(tasks, [callback]) - -Runs the `tasks` array of functions in series, each passing their results to the next in -the array. However, if any of the `tasks` pass an error to their own callback, the -next function is not executed, and the main `callback` is immediately called with -the error. - -__Arguments__ - -* `tasks` - An array of functions to run, each function is passed a - `callback(err, result1, result2, ...)` it must call on completion. The first - argument is an error (which can be `null`) and any further arguments will be - passed as arguments in order to the next task. -* `callback(err, [results])` - An optional callback to run once all the functions - have completed. This will be passed the results of the last task's callback. - - - -__Example__ - -```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' -}); -``` -Or, with named functions: - -```js -async.waterfall([ - myFirstFunction, - mySecondFunction, - myLastFunction, -], function (err, result) { - // result now equals 'done' -}); -function myFirstFunction(callback) { - callback(null, 'one', 'two'); -} -function mySecondFunction(arg1, arg2, callback) { - // arg1 now equals 'one' and arg2 now equals 'two' - callback(null, 'three'); -} -function myLastFunction(arg1, callback) { - // arg1 now equals 'three' - callback(null, 'done'); -} -``` - -Or, if you need to pass any argument to the first function: - -```js -async.waterfall([ - async.apply(myFirstFunction, 'zero'), - mySecondFunction, - myLastFunction, -], function (err, result) { - // result now equals 'done' -}); -function myFirstFunction(arg1, callback) { - // arg1 now equals 'zero' - callback(null, 'one', 'two'); -} -function mySecondFunction(arg1, arg2, callback) { - // arg1 now equals 'one' and arg2 now equals 'two' - callback(null, 'three'); -} -function myLastFunction(arg1, callback) { - // arg1 now equals 'three' - callback(null, 'done'); -} -``` - ---------------------------------------- - -### compose(fn1, fn2...) - -Creates a function which is a composition of the passed asynchronous -functions. Each function consumes the return value of the function that -follows. Composing functions `f()`, `g()`, and `h()` would produce the result of -`f(g(h()))`, only this version uses callbacks to obtain the return values. - -Each function is executed with the `this` binding of the composed function. - -__Arguments__ - -* `functions...` - the asynchronous functions to compose - - -__Example__ - -```js -function add1(n, callback) { - setTimeout(function () { - callback(null, n + 1); - }, 10); -} - -function mul3(n, callback) { - setTimeout(function () { - callback(null, n * 3); - }, 10); -} - -var add1mul3 = async.compose(mul3, add1); - -add1mul3(4, function (err, result) { - // result now equals 15 -}); -``` - ---------------------------------------- - -### seq(fn1, fn2...) - -Version of the compose function that is more natural to read. -Each function consumes the return value of the previous function. -It is the equivalent of [`compose`](#compose) with the arguments reversed. - -Each function is executed with the `this` binding of the composed function. - -__Arguments__ - -* `functions...` - the asynchronous functions to compose - - -__Example__ - -```js -// Requires lodash (or underscore), express3 and dresende's orm2. -// Part of an app, that fetches cats of the logged user. -// This example uses `seq` function to avoid overnesting and error -// handling clutter. -app.get('/cats', function(request, response) { - var User = request.models.User; - async.seq( - _.bind(User.get, User), // 'User.get' has signature (id, callback(err, data)) - function(user, fn) { - user.getCats(fn); // 'getCats' has signature (callback(err, data)) - } - )(req.session.user_id, function (err, cats) { - if (err) { - console.error(err); - response.json({ status: 'error', message: err.message }); - } else { - response.json({ status: 'ok', message: 'Cats found', data: cats }); - } - }); -}); -``` - ---------------------------------------- - -### applyEach(fns, args..., callback) - -Applies the provided arguments to each function in the array, calling -`callback` after all functions have completed. If you only provide the first -argument, then it will return a function which lets you pass in the -arguments as if it were a single function call. - -__Arguments__ - -* `fns` - the asynchronous functions to all call with the same arguments -* `args...` - any number of separate arguments to pass to the function -* `callback` - the final argument should be the callback, called when all - functions have completed processing - - -__Example__ - -```js -async.applyEach([enableSearch, updateSchema], 'bucket', callback); - -// partial application example: -async.each( - buckets, - async.applyEach([enableSearch, updateSchema]), - callback -); -``` - -__Related__ - -* applyEachSeries(tasks, args..., [callback]) - ---------------------------------------- - - -### queue(worker, [concurrency]) - -Creates a `queue` object with the specified `concurrency`. Tasks added to the -`queue` are processed in parallel (up to the `concurrency` limit). If all -`worker`s are in progress, the task is queued until one becomes available. -Once a `worker` completes a `task`, that `task`'s callback is called. - -__Arguments__ - -* `worker(task, callback)` - An asynchronous function for processing a queued - task, which must call its `callback(err)` argument when finished, with an - optional `error` as an argument. If you want to handle errors from an individual task, pass a callback to `q.push()`. -* `concurrency` - An `integer` for determining how many `worker` functions should be - run in parallel. If omitted, the concurrency defaults to `1`. If the concurrency is `0`, an error is thrown. - -__Queue objects__ - -The `queue` object returned by this function has the following properties and -methods: - -* `length()` - a function returning the number of items waiting to be processed. -* `started` - a function returning whether or not any items have been pushed and processed by the queue -* `running()` - a function returning the number of items currently being processed. -* `workersList()` - a function returning the array of items currently being processed. -* `idle()` - a function returning false if there are items waiting or being processed, or true if not. -* `concurrency` - an integer for determining how many `worker` functions should be - run in parallel. This property can be changed after a `queue` is created to - alter the concurrency on-the-fly. -* `push(task, [callback])` - add a new task to the `queue`. Calls `callback` once - the `worker` has finished processing the task. Instead of a single task, a `tasks` array - can be submitted. The respective callback is used for every task in the list. -* `unshift(task, [callback])` - add a new task to the front of the `queue`. -* `saturated` - a callback that is called when the `queue` length hits the `concurrency` limit, - and further tasks will be queued. -* `empty` - a callback that is called when the last item from the `queue` is given to a `worker`. -* `drain` - a callback that is called when the last item from the `queue` has returned from the `worker`. -* `paused` - a boolean for determining whether the queue is in a paused state -* `pause()` - a function that pauses the processing of tasks until `resume()` is called. -* `resume()` - a function that resumes the processing of queued tasks when the queue is paused. -* `kill()` - a function that removes the `drain` callback and empties remaining tasks from the queue forcing it to go idle. - -__Example__ - -```js -// create a queue object with concurrency 2 - -var q = async.queue(function (task, callback) { - console.log('hello ' + task.name); - callback(); -}, 2); - - -// assign a callback -q.drain = function() { - console.log('all items have been processed'); -} - -// add some items to the queue - -q.push({name: 'foo'}, function (err) { - console.log('finished processing foo'); -}); -q.push({name: 'bar'}, function (err) { - console.log('finished processing bar'); -}); - -// add some items to the queue (batch-wise) - -q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function (err) { - console.log('finished processing item'); -}); - -// add some items to the front of the queue - -q.unshift({name: 'bar'}, function (err) { - console.log('finished processing bar'); -}); -``` - - ---------------------------------------- - - -### priorityQueue(worker, concurrency) - -The same as [`queue`](#queue) only tasks are assigned a priority and completed in ascending priority order. There are two differences between `queue` and `priorityQueue` objects: - -* `push(task, priority, [callback])` - `priority` should be a number. If an array of - `tasks` is given, all tasks will be assigned the same priority. -* The `unshift` method was removed. - ---------------------------------------- - - -### cargo(worker, [payload]) - -Creates a `cargo` object with the specified payload. Tasks added to the -cargo will be processed altogether (up to the `payload` limit). If the -`worker` is in progress, the task is queued until it becomes available. Once -the `worker` has completed some tasks, each callback of those tasks is called. -Check out [these](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) [animations](https://camo.githubusercontent.com/f4810e00e1c5f5f8addbe3e9f49064fd5d102699/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130312f38346339323036362d356632392d313165322d383134662d3964336430323431336266642e676966) for how `cargo` and `queue` work. - -While [queue](#queue) passes only one task to one of a group of workers -at a time, cargo passes an array of tasks to a single worker, repeating -when the worker is finished. - -__Arguments__ - -* `worker(tasks, callback)` - An asynchronous function for processing an array of - queued tasks, which must call its `callback(err)` argument when finished, with - an optional `err` argument. -* `payload` - An optional `integer` for determining how many tasks should be - processed per round; if omitted, the default is unlimited. - -__Cargo objects__ - -The `cargo` object returned by this function has the following properties and -methods: - -* `length()` - A function returning the number of items waiting to be processed. -* `payload` - An `integer` for determining how many tasks should be - process per round. This property can be changed after a `cargo` is created to - alter the payload on-the-fly. -* `push(task, [callback])` - Adds `task` to the `queue`. The callback is called - once the `worker` has finished processing the task. Instead of a single task, an array of `tasks` - can be submitted. The respective callback is used for every task in the list. -* `saturated` - A callback that is called when the `queue.length()` hits the concurrency and further tasks will be queued. -* `empty` - A callback that is called when the last item from the `queue` is given to a `worker`. -* `drain` - A callback that is called when the last item from the `queue` has returned from the `worker`. -* `idle()`, `pause()`, `resume()`, `kill()` - cargo inherits all of the same methods and event calbacks as [`queue`](#queue) - -__Example__ - -```js -// create a cargo object with payload 2 - -var cargo = async.cargo(function (tasks, callback) { - for(var i=0; i -### auto(tasks, [concurrency], [callback]) - -Determines the best order for running the functions in `tasks`, based on their requirements. Each function can optionally depend on other functions being completed first, and each function is run as soon as its requirements are satisfied. - -If any of the functions pass an error to their callback, the `auto` sequence will stop. Further tasks will not execute (so any other functions depending on it will not run), and the main `callback` is immediately called with the error. Functions also receive an object containing the results of functions which have completed so far. - -Note, all functions are called with a `results` object as a second argument, -so it is unsafe to pass functions in the `tasks` object which cannot handle the -extra argument. - -For example, this snippet of code: - -```js -async.auto({ - readData: async.apply(fs.readFile, 'data.txt', 'utf-8') -}, callback); -``` - -will have the effect of calling `readFile` with the results object as the last -argument, which will fail: - -```js -fs.readFile('data.txt', 'utf-8', cb, {}); -``` - -Instead, wrap the call to `readFile` in a function which does not forward the -`results` object: - -```js -async.auto({ - readData: function(cb, results){ - fs.readFile('data.txt', 'utf-8', cb); - } -}, callback); -``` - -__Arguments__ - -* `tasks` - An object. Each of its properties is either a function or an array of - requirements, with the function itself the last item in the array. The object's key - of a property serves as the name of the task defined by that property, - i.e. can be used when specifying requirements for other tasks. - The function receives two arguments: (1) a `callback(err, result)` which must be - called when finished, passing an `error` (which can be `null`) and the result of - the function's execution, and (2) a `results` object, containing the results of - the previously executed functions. -* `concurrency` - An optional `integer` for determining the maximum number of tasks that can be run in parallel. By default, as many as possible. -* `callback(err, results)` - An optional callback which is called when all the - tasks have been completed. It receives the `err` argument if any `tasks` - pass an error to their callback. Results are always returned; however, if - an error occurs, no further `tasks` will be performed, and the results - object will only contain partial results. - - -__Example__ - -```js -async.auto({ - get_data: function(callback){ - console.log('in get_data'); - // async code to get some data - callback(null, 'data', 'converted to array'); - }, - make_folder: function(callback){ - console.log('in make_folder'); - // async code to create a directory to store a file in - // this is run at the same time as getting the data - callback(null, 'folder'); - }, - write_file: ['get_data', 'make_folder', function(callback, results){ - console.log('in write_file', JSON.stringify(results)); - // once there is some data and the directory exists, - // write the data to a file in the directory - callback(null, 'filename'); - }], - email_link: ['write_file', function(callback, results){ - console.log('in email_link', JSON.stringify(results)); - // once the file is written let's email a link to it... - // results.write_file contains the filename returned by write_file. - callback(null, {'file':results.write_file, 'email':'user@example.com'}); - }] -}, function(err, results) { - console.log('err = ', err); - console.log('results = ', results); -}); -``` - -This is a fairly trivial example, but to do this using the basic parallel and -series functions would look like this: - -```js -async.parallel([ - function(callback){ - console.log('in get_data'); - // async code to get some data - callback(null, 'data', 'converted to array'); - }, - function(callback){ - console.log('in make_folder'); - // async code to create a directory to store a file in - // this is run at the same time as getting the data - callback(null, 'folder'); - } -], -function(err, results){ - async.series([ - function(callback){ - console.log('in write_file', JSON.stringify(results)); - // once there is some data and the directory exists, - // write the data to a file in the directory - results.push('filename'); - callback(null); - }, - function(callback){ - console.log('in email_link', JSON.stringify(results)); - // once the file is written let's email a link to it... - callback(null, {'file':results.pop(), 'email':'user@example.com'}); - } - ]); -}); -``` - -For a complicated series of `async` tasks, using the [`auto`](#auto) function makes adding -new tasks much easier (and the code more readable). - - ---------------------------------------- - - -### retry([opts = {times: 5, interval: 0}| 5], task, [callback]) - -Attempts to get a successful response from `task` no more than `times` times before -returning an error. If the task is successful, the `callback` will be passed the result -of the successful task. If all attempts fail, the callback will be passed the error and -result (if any) of the final attempt. - -__Arguments__ - -* `opts` - Can be either an object with `times` and `interval` or a number. - * `times` - The number of attempts to make before giving up. The default is `5`. - * `interval` - The time to wait between retries, in milliseconds. The default is `0`. - * If `opts` is a number, the number specifies the number of times to retry, with the default interval of `0`. -* `task(callback, results)` - A function which receives two arguments: (1) a `callback(err, result)` - which must be called when finished, passing `err` (which can be `null`) and the `result` of - the function's execution, and (2) a `results` object, containing the results of - the previously executed functions (if nested inside another control flow). -* `callback(err, results)` - An optional callback which is called when the - task has succeeded, or after the final failed attempt. It receives the `err` and `result` arguments of the last attempt at completing the `task`. - -The [`retry`](#retry) function can be used as a stand-alone control flow by passing a callback, as shown below: - -```js -// try calling apiMethod 3 times -async.retry(3, apiMethod, function(err, result) { - // do something with the result -}); -``` - -```js -// try calling apiMethod 3 times, waiting 200 ms between each retry -async.retry({times: 3, interval: 200}, apiMethod, function(err, result) { - // do something with the result -}); -``` - -```js -// try calling apiMethod the default 5 times no delay between each retry -async.retry(apiMethod, function(err, result) { - // do something with the result -}); -``` - -It can also be embedded within other control flow functions to retry individual methods -that are not as reliable, like this: - -```js -async.auto({ - users: api.getUsers.bind(api), - payments: async.retry(3, api.getPayments.bind(api)) -}, function(err, results) { - // do something with the results -}); -``` - - ---------------------------------------- - - -### iterator(tasks) - -Creates an iterator function which calls the next function in the `tasks` array, -returning a continuation to call the next one after that. It's also possible to -“peek” at the next iterator with `iterator.next()`. - -This function is used internally by the `async` module, but can be useful when -you want to manually control the flow of functions in series. - -__Arguments__ - -* `tasks` - An array of functions to run. - -__Example__ - -```js -var iterator = async.iterator([ - function(){ sys.p('one'); }, - function(){ sys.p('two'); }, - function(){ sys.p('three'); } -]); - -node> var iterator2 = iterator(); -'one' -node> var iterator3 = iterator2(); -'two' -node> iterator3(); -'three' -node> var nextfn = iterator2.next(); -node> nextfn(); -'three' -``` - ---------------------------------------- - - -### apply(function, arguments..) - -Creates a continuation function with some arguments already applied. - -Useful as a shorthand when combined with other control flow functions. Any arguments -passed to the returned function are added to the arguments originally passed -to apply. - -__Arguments__ - -* `function` - The function you want to eventually apply all arguments to. -* `arguments...` - Any number of arguments to automatically apply when the - continuation is called. - -__Example__ - -```js -// using apply - -async.parallel([ - async.apply(fs.writeFile, 'testfile1', 'test1'), - async.apply(fs.writeFile, 'testfile2', 'test2'), -]); - - -// the same process without using apply - -async.parallel([ - function(callback){ - fs.writeFile('testfile1', 'test1', callback); - }, - function(callback){ - fs.writeFile('testfile2', 'test2', callback); - } -]); -``` - -It's possible to pass any number of additional arguments when calling the -continuation: - -```js -node> var fn = async.apply(sys.puts, 'one'); -node> fn('two', 'three'); -one -two -three -``` - ---------------------------------------- - - -### nextTick(callback), setImmediate(callback) - -Calls `callback` on a later loop around the event loop. In Node.js this just -calls `process.nextTick`; in the browser it falls back to `setImmediate(callback)` -if available, otherwise `setTimeout(callback, 0)`, which means other higher priority -events may precede the execution of `callback`. - -This is used internally for browser-compatibility purposes. - -__Arguments__ - -* `callback` - The function to call on a later loop around the event loop. - -__Example__ - -```js -var call_order = []; -async.nextTick(function(){ - call_order.push('two'); - // call_order now equals ['one','two'] -}); -call_order.push('one') -``` - - -### times(n, iterator, [callback]) - -Calls the `iterator` function `n` times, and accumulates results in the same manner -you would use with [`map`](#map). - -__Arguments__ - -* `n` - The number of times to run the function. -* `iterator` - The function to call `n` times. -* `callback` - see [`map`](#map) - -__Example__ - -```js -// Pretend this is some complicated async factory -var createUser = function(id, callback) { - callback(null, { - id: 'user' + id - }) -} -// generate 5 users -async.times(5, function(n, next){ - createUser(n, function(err, user) { - next(err, user) - }) -}, function(err, users) { - // we should now have 5 users -}); -``` - -__Related__ - -* timesSeries(n, iterator, [callback]) -* timesLimit(n, limit, iterator, [callback]) - - -## Utils - - -### memoize(fn, [hasher]) - -Caches the results of an `async` function. When creating a hash to store function -results against, the callback is omitted from the hash and an optional hash -function can be used. - -If no hash function is specified, the first argument is used as a hash key, which may work reasonably if it is a string or a data type that converts to a distinct string. Note that objects and arrays will not behave reasonably. Neither will cases where the other arguments are significant. In such cases, specify your own hash function. - -The cache of results is exposed as the `memo` property of the function returned -by `memoize`. - -__Arguments__ - -* `fn` - The function to proxy and cache results from. -* `hasher` - An optional function for generating a custom hash for storing - results. It has all the arguments applied to it apart from the callback, and - must be synchronous. - -__Example__ - -```js -var slow_fn = function (name, callback) { - // do something - callback(null, result); -}; -var fn = async.memoize(slow_fn); - -// fn can now be used as if it were slow_fn -fn('some name', function () { - // callback -}); -``` - - -### unmemoize(fn) - -Undoes a [`memoize`](#memoize)d function, reverting it to the original, unmemoized -form. Handy for testing. - -__Arguments__ - -* `fn` - the memoized function - ---------------------------------------- - - -### ensureAsync(fn) - -Wrap an async function and ensure it calls its callback on a later tick of the event loop. If the function already calls its callback on a next tick, no extra deferral is added. This is useful for preventing stack overflows (`RangeError: Maximum call stack size exceeded`) and generally keeping [Zalgo](http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony) contained. - -__Arguments__ - -* `fn` - an async function, one that expects a node-style callback as its last argument - -Returns a wrapped function with the exact same call signature as the function passed in. - -__Example__ - -```js -function sometimesAsync(arg, callback) { - if (cache[arg]) { - return callback(null, cache[arg]); // this would be synchronous!! - } else { - doSomeIO(arg, callback); // this IO would be asynchronous - } -} - -// this has a risk of stack overflows if many results are cached in a row -async.mapSeries(args, sometimesAsync, done); - -// this will defer sometimesAsync's callback if necessary, -// preventing stack overflows -async.mapSeries(args, async.ensureAsync(sometimesAsync), done); - -``` - ---------------------------------------- - - -### constant(values...) - -Returns a function that when called, calls-back with the values provided. Useful as the first function in a `waterfall`, or for plugging values in to `auto`. - -__Example__ - -```js -async.waterfall([ - async.constant(42), - function (value, next) { - // value === 42 - }, - //... -], callback); - -async.waterfall([ - async.constant(filename, "utf8"), - fs.readFile, - function (fileData, next) { - //... - } - //... -], callback); - -async.auto({ - hostname: async.constant("https://server.net/"), - port: findFreePort, - launchServer: ["hostname", "port", function (cb, options) { - startServer(options, cb); - }], - //... -}, callback); - -``` - ---------------------------------------- - - - -### asyncify(func) - -__Alias:__ `wrapSync` - -Take a sync function and make it async, passing its return value to a callback. This is useful for plugging sync functions into a waterfall, series, or other async functions. Any arguments passed to the generated function will be passed to the wrapped function (except for the final callback argument). Errors thrown will be passed to the callback. - -__Example__ - -```js -async.waterfall([ - async.apply(fs.readFile, filename, "utf8"), - async.asyncify(JSON.parse), - function (data, next) { - // data is the result of parsing the text. - // If there was a parsing error, it would have been caught. - } -], callback) -``` - -If the function passed to `asyncify` returns a Promise, that promises's resolved/rejected state will be used to call the callback, rather than simply the synchronous return value. Example: - -```js -async.waterfall([ - async.apply(fs.readFile, filename, "utf8"), - async.asyncify(function (contents) { - return db.model.create(contents); - }), - function (model, next) { - // `model` is the instantiated model object. - // If there was an error, this function would be skipped. - } -], callback) -``` - -This also means you can asyncify ES2016 `async` functions. - -```js -var q = async.queue(async.asyncify(async function (file) { - var intermediateStep = await processFile(file); - return await somePromise(intermediateStep) -})); - -q.push(files); -``` - ---------------------------------------- - - -### log(function, arguments) - -Logs the result of an `async` function to the `console`. Only works in Node.js or -in browsers that support `console.log` and `console.error` (such as FF and Chrome). -If multiple arguments are returned from the async function, `console.log` is -called on each argument in order. - -__Arguments__ - -* `function` - The function you want to eventually apply all arguments to. -* `arguments...` - Any number of arguments to apply to the function. - -__Example__ - -```js -var hello = function(name, callback){ - setTimeout(function(){ - callback(null, 'hello ' + name); - }, 1000); -}; -``` -```js -node> async.log(hello, 'world'); -'hello world' -``` - ---------------------------------------- - - -### dir(function, arguments) - -Logs the result of an `async` function to the `console` using `console.dir` to -display the properties of the resulting object. Only works in Node.js or -in browsers that support `console.dir` and `console.error` (such as FF and Chrome). -If multiple arguments are returned from the async function, `console.dir` is -called on each argument in order. - -__Arguments__ - -* `function` - The function you want to eventually apply all arguments to. -* `arguments...` - Any number of arguments to apply to the function. - -__Example__ - -```js -var hello = function(name, callback){ - setTimeout(function(){ - callback(null, {hello: name}); - }, 1000); -}; -``` -```js -node> async.dir(hello, 'world'); -{hello: 'world'} -``` - ---------------------------------------- - - -### noConflict() - -Changes the value of `async` back to its original value, returning a reference to the -`async` object. diff --git a/app/bower_components/async/bower.json b/app/bower_components/async/bower.json deleted file mode 100644 index 0ce24ba..0000000 --- a/app/bower_components/async/bower.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "async", - "description": "Higher-order functions and common patterns for asynchronous code", - "main": "lib/async.js", - "keywords": [ - "async", - "callback", - "utility", - "module" - ], - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/caolan/async.git" - }, - "devDependencies": { - "benchmark": "bestiejs/benchmark.js", - "bluebird": "^2.9.32", - "chai": "^3.1.0", - "coveralls": "^2.11.2", - "es6-promise": "^2.3.0", - "jscs": "^1.13.1", - "jshint": "~2.8.0", - "karma": "^0.13.2", - "karma-browserify": "^4.2.1", - "karma-firefox-launcher": "^0.1.6", - "karma-mocha": "^0.2.0", - "karma-mocha-reporter": "^1.0.2", - "lodash": "^3.9.0", - "mkdirp": "~0.5.1", - "mocha": "^2.2.5", - "native-promise-only": "^0.8.0-a", - "nodeunit": ">0.0.0", - "nyc": "^2.1.0", - "rsvp": "^3.0.18", - "semver": "^4.3.6", - "uglify-js": "~2.4.0", - "xyz": "^0.5.0", - "yargs": "~3.9.1" - }, - "moduleType": [ - "amd", - "globals", - "node" - ], - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "test", - "tests" - ], - "authors": [ - "Caolan McMahon" - ], - "version": "1.5.2" -} diff --git a/app/bower_components/async/component.json b/app/bower_components/async/component.json deleted file mode 100644 index 103558d..0000000 --- a/app/bower_components/async/component.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "async", - "description": "Higher-order functions and common patterns for asynchronous code", - "version": "1.5.2", - "keywords": [ - "async", - "callback", - "utility", - "module" - ], - "license": "MIT", - "main": "lib/async.js", - "repository": "caolan/async", - "scripts": [ - "lib/async.js" - ] -} diff --git a/app/bower_components/async/deps/nodeunit.css b/app/bower_components/async/deps/nodeunit.css deleted file mode 100644 index 274434a..0000000 --- a/app/bower_components/async/deps/nodeunit.css +++ /dev/null @@ -1,70 +0,0 @@ -/*! - * Styles taken from qunit.css - */ - -h1#nodeunit-header, h1.nodeunit-header { - padding: 15px; - font-size: large; - background-color: #06b; - color: white; - font-family: 'trebuchet ms', verdana, arial; - margin: 0; -} - -h1#nodeunit-header a { - color: white; -} - -h2#nodeunit-banner { - height: 2em; - border-bottom: 1px solid white; - background-color: #eee; - margin: 0; - font-family: 'trebuchet ms', verdana, arial; -} -h2#nodeunit-banner.pass { - background-color: green; -} -h2#nodeunit-banner.fail { - background-color: red; -} - -h2#nodeunit-userAgent, h2.nodeunit-userAgent { - padding: 10px; - background-color: #eee; - color: black; - margin: 0; - font-size: small; - font-weight: normal; - font-family: 'trebuchet ms', verdana, arial; - font-size: 10pt; -} - -div#nodeunit-testrunner-toolbar { - background: #eee; - border-top: 1px solid black; - padding: 10px; - font-family: 'trebuchet ms', verdana, arial; - margin: 0; - font-size: 10pt; -} - -ol#nodeunit-tests { - font-family: 'trebuchet ms', verdana, arial; - font-size: 10pt; -} -ol#nodeunit-tests li strong { - cursor:pointer; -} -ol#nodeunit-tests .pass { - color: green; -} -ol#nodeunit-tests .fail { - color: red; -} - -p#nodeunit-testresult { - margin-left: 1em; - font-size: 10pt; - font-family: 'trebuchet ms', verdana, arial; -} diff --git a/app/bower_components/async/deps/nodeunit.js b/app/bower_components/async/deps/nodeunit.js deleted file mode 100644 index 6251ba1..0000000 --- a/app/bower_components/async/deps/nodeunit.js +++ /dev/null @@ -1,2117 +0,0 @@ -/*! - * Nodeunit - * https://github.com/caolan/nodeunit - * Copyright (c) 2010 Caolan McMahon - * MIT Licensed - * - * json2.js - * http://www.JSON.org/json2.js - * Public Domain. - * NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. - */ -nodeunit = (function(){ -/* - http://www.JSON.org/json2.js - 2010-11-17 - - Public Domain. - - NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. - - See http://www.JSON.org/js.html - - - This code should be minified before deployment. - See http://javascript.crockford.com/jsmin.html - - USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO - NOT CONTROL. - - - This file creates a global JSON object containing two methods: stringify - and parse. - - JSON.stringify(value, replacer, space) - value any JavaScript value, usually an object or array. - - replacer an optional parameter that determines how object - values are stringified for objects. It can be a - function or an array of strings. - - space an optional parameter that specifies the indentation - of nested structures. If it is omitted, the text will - be packed without extra whitespace. If it is a number, - it will specify the number of spaces to indent at each - level. If it is a string (such as '\t' or ' '), - it contains the characters used to indent at each level. - - This method produces a JSON text from a JavaScript value. - - When an object value is found, if the object contains a toJSON - method, its toJSON method will be called and the result will be - stringified. A toJSON method does not serialize: it returns the - value represented by the name/value pair that should be serialized, - or undefined if nothing should be serialized. The toJSON method - will be passed the key associated with the value, and this will be - bound to the value - - For example, this would serialize Dates as ISO strings. - - Date.prototype.toJSON = function (key) { - function f(n) { - // Format integers to have at least two digits. - return n < 10 ? '0' + n : n; - } - - return this.getUTCFullYear() + '-' + - f(this.getUTCMonth() + 1) + '-' + - f(this.getUTCDate()) + 'T' + - f(this.getUTCHours()) + ':' + - f(this.getUTCMinutes()) + ':' + - f(this.getUTCSeconds()) + 'Z'; - }; - - You can provide an optional replacer method. It will be passed the - key and value of each member, with this bound to the containing - object. The value that is returned from your method will be - serialized. If your method returns undefined, then the member will - be excluded from the serialization. - - If the replacer parameter is an array of strings, then it will be - used to select the members to be serialized. It filters the results - such that only members with keys listed in the replacer array are - stringified. - - Values that do not have JSON representations, such as undefined or - functions, will not be serialized. Such values in objects will be - dropped; in arrays they will be replaced with null. You can use - a replacer function to replace those with JSON values. - JSON.stringify(undefined) returns undefined. - - The optional space parameter produces a stringification of the - value that is filled with line breaks and indentation to make it - easier to read. - - If the space parameter is a non-empty string, then that string will - be used for indentation. If the space parameter is a number, then - the indentation will be that many spaces. - - Example: - - text = JSON.stringify(['e', {pluribus: 'unum'}]); - // text is '["e",{"pluribus":"unum"}]' - - - text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t'); - // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]' - - text = JSON.stringify([new Date()], function (key, value) { - return this[key] instanceof Date ? - 'Date(' + this[key] + ')' : value; - }); - // text is '["Date(---current time---)"]' - - - JSON.parse(text, reviver) - This method parses a JSON text to produce an object or array. - It can throw a SyntaxError exception. - - The optional reviver parameter is a function that can filter and - transform the results. It receives each of the keys and values, - and its return value is used instead of the original value. - If it returns what it received, then the structure is not modified. - If it returns undefined then the member is deleted. - - Example: - - // Parse the text. Values that look like ISO date strings will - // be converted to Date objects. - - myData = JSON.parse(text, function (key, value) { - var a; - if (typeof value === 'string') { - a = -/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value); - if (a) { - return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], - +a[5], +a[6])); - } - } - return value; - }); - - myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) { - var d; - if (typeof value === 'string' && - value.slice(0, 5) === 'Date(' && - value.slice(-1) === ')') { - d = new Date(value.slice(5, -1)); - if (d) { - return d; - } - } - return value; - }); - - - This is a reference implementation. You are free to copy, modify, or - redistribute. -*/ - -/*jslint evil: true, strict: false, regexp: false */ - -/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply, - call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours, - getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join, - lastIndex, length, parse, prototype, push, replace, slice, stringify, - test, toJSON, toString, valueOf -*/ - - -// Create a JSON object only if one does not already exist. We create the -// methods in a closure to avoid creating global variables. - -var JSON = {}; - -(function () { - "use strict"; - - function f(n) { - // Format integers to have at least two digits. - return n < 10 ? '0' + n : n; - } - - if (typeof Date.prototype.toJSON !== 'function') { - - Date.prototype.toJSON = function (key) { - - return isFinite(this.valueOf()) ? - this.getUTCFullYear() + '-' + - f(this.getUTCMonth() + 1) + '-' + - f(this.getUTCDate()) + 'T' + - f(this.getUTCHours()) + ':' + - f(this.getUTCMinutes()) + ':' + - f(this.getUTCSeconds()) + 'Z' : null; - }; - - String.prototype.toJSON = - Number.prototype.toJSON = - Boolean.prototype.toJSON = function (key) { - return this.valueOf(); - }; - } - - var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - gap, - indent, - meta = { // table of character substitutions - '\b': '\\b', - '\t': '\\t', - '\n': '\\n', - '\f': '\\f', - '\r': '\\r', - '"' : '\\"', - '\\': '\\\\' - }, - rep; - - - function quote(string) { - -// If the string contains no control characters, no quote characters, and no -// backslash characters, then we can safely slap some quotes around it. -// Otherwise we must also replace the offending characters with safe escape -// sequences. - - escapable.lastIndex = 0; - return escapable.test(string) ? - '"' + string.replace(escapable, function (a) { - var c = meta[a]; - return typeof c === 'string' ? c : - '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); - }) + '"' : - '"' + string + '"'; - } - - - function str(key, holder) { - -// Produce a string from holder[key]. - - var i, // The loop counter. - k, // The member key. - v, // The member value. - length, - mind = gap, - partial, - value = holder[key]; - -// If the value has a toJSON method, call it to obtain a replacement value. - - if (value && typeof value === 'object' && - typeof value.toJSON === 'function') { - value = value.toJSON(key); - } - -// If we were called with a replacer function, then call the replacer to -// obtain a replacement value. - - if (typeof rep === 'function') { - value = rep.call(holder, key, value); - } - -// What happens next depends on the value's type. - - switch (typeof value) { - case 'string': - return quote(value); - - case 'number': - -// JSON numbers must be finite. Encode non-finite numbers as null. - - return isFinite(value) ? String(value) : 'null'; - - case 'boolean': - case 'null': - -// If the value is a boolean or null, convert it to a string. Note: -// typeof null does not produce 'null'. The case is included here in -// the remote chance that this gets fixed someday. - - return String(value); - -// If the type is 'object', we might be dealing with an object or an array or -// null. - - case 'object': - -// Due to a specification blunder in ECMAScript, typeof null is 'object', -// so watch out for that case. - - if (!value) { - return 'null'; - } - -// Make an array to hold the partial results of stringifying this object value. - - gap += indent; - partial = []; - -// Is the value an array? - - if (Object.prototype.toString.apply(value) === '[object Array]') { - -// The value is an array. Stringify every element. Use null as a placeholder -// for non-JSON values. - - length = value.length; - for (i = 0; i < length; i += 1) { - partial[i] = str(i, value) || 'null'; - } - -// Join all of the elements together, separated with commas, and wrap them in -// brackets. - - v = partial.length === 0 ? '[]' : - gap ? '[\n' + gap + - partial.join(',\n' + gap) + '\n' + - mind + ']' : - '[' + partial.join(',') + ']'; - gap = mind; - return v; - } - -// If the replacer is an array, use it to select the members to be stringified. - - if (rep && typeof rep === 'object') { - length = rep.length; - for (i = 0; i < length; i += 1) { - k = rep[i]; - if (typeof k === 'string') { - v = str(k, value); - if (v) { - partial.push(quote(k) + (gap ? ': ' : ':') + v); - } - } - } - } else { - -// Otherwise, iterate through all of the keys in the object. - - for (k in value) { - if (Object.hasOwnProperty.call(value, k)) { - v = str(k, value); - if (v) { - partial.push(quote(k) + (gap ? ': ' : ':') + v); - } - } - } - } - -// Join all of the member texts together, separated with commas, -// and wrap them in braces. - - v = partial.length === 0 ? '{}' : - gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + - mind + '}' : '{' + partial.join(',') + '}'; - gap = mind; - return v; - } - } - -// If the JSON object does not yet have a stringify method, give it one. - - if (typeof JSON.stringify !== 'function') { - JSON.stringify = function (value, replacer, space) { - -// The stringify method takes a value and an optional replacer, and an optional -// space parameter, and returns a JSON text. The replacer can be a function -// that can replace values, or an array of strings that will select the keys. -// A default replacer method can be provided. Use of the space parameter can -// produce text that is more easily readable. - - var i; - gap = ''; - indent = ''; - -// If the space parameter is a number, make an indent string containing that -// many spaces. - - if (typeof space === 'number') { - for (i = 0; i < space; i += 1) { - indent += ' '; - } - -// If the space parameter is a string, it will be used as the indent string. - - } else if (typeof space === 'string') { - indent = space; - } - -// If there is a replacer, it must be a function or an array. -// Otherwise, throw an error. - - rep = replacer; - if (replacer && typeof replacer !== 'function' && - (typeof replacer !== 'object' || - typeof replacer.length !== 'number')) { - throw new Error('JSON.stringify'); - } - -// Make a fake root object containing our value under the key of ''. -// Return the result of stringifying the value. - - return str('', {'': value}); - }; - } - - -// If the JSON object does not yet have a parse method, give it one. - - if (typeof JSON.parse !== 'function') { - JSON.parse = function (text, reviver) { - -// The parse method takes a text and an optional reviver function, and returns -// a JavaScript value if the text is a valid JSON text. - - var j; - - function walk(holder, key) { - -// The walk method is used to recursively walk the resulting structure so -// that modifications can be made. - - var k, v, value = holder[key]; - if (value && typeof value === 'object') { - for (k in value) { - if (Object.hasOwnProperty.call(value, k)) { - v = walk(value, k); - if (v !== undefined) { - value[k] = v; - } else { - delete value[k]; - } - } - } - } - return reviver.call(holder, key, value); - } - - -// Parsing happens in four stages. In the first stage, we replace certain -// Unicode characters with escape sequences. JavaScript handles many characters -// incorrectly, either silently deleting them, or treating them as line endings. - - text = String(text); - cx.lastIndex = 0; - if (cx.test(text)) { - text = text.replace(cx, function (a) { - return '\\u' + - ('0000' + a.charCodeAt(0).toString(16)).slice(-4); - }); - } - -// In the second stage, we run the text against regular expressions that look -// for non-JSON patterns. We are especially concerned with '()' and 'new' -// because they can cause invocation, and '=' because it can cause mutation. -// But just to be safe, we want to reject all unexpected forms. - -// We split the second stage into 4 regexp operations in order to work around -// crippling inefficiencies in IE's and Safari's regexp engines. First we -// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we -// replace all simple value tokens with ']' characters. Third, we delete all -// open brackets that follow a colon or comma or that begin the text. Finally, -// we look to see that the remaining characters are only whitespace or ']' or -// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. - - if (/^[\],:{}\s]*$/ -.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@') -.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']') -.replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { - -// In the third stage we use the eval function to compile the text into a -// JavaScript structure. The '{' operator is subject to a syntactic ambiguity -// in JavaScript: it can begin a block or an object literal. We wrap the text -// in parens to eliminate the ambiguity. - - j = eval('(' + text + ')'); - -// In the optional fourth stage, we recursively walk the new structure, passing -// each name/value pair to a reviver function for possible transformation. - - return typeof reviver === 'function' ? - walk({'': j}, '') : j; - } - -// If the text is not JSON parseable, then a SyntaxError is thrown. - - throw new SyntaxError('JSON.parse'); - }; - } -}()); -var assert = this.assert = {}; -var types = {}; -var core = {}; -var nodeunit = {}; -var reporter = {}; -/*global setTimeout: false, console: false */ -(function () { - - var async = {}; - - // global on the server, window in the browser - var root = this, - previous_async = root.async; - - if (typeof module !== 'undefined' && module.exports) { - module.exports = async; - } - else { - root.async = async; - } - - async.noConflict = function () { - root.async = previous_async; - return async; - }; - - //// cross-browser compatiblity functions //// - - var _forEach = function (arr, iterator) { - if (arr.forEach) { - return arr.forEach(iterator); - } - for (var i = 0; i < arr.length; i += 1) { - iterator(arr[i], i, arr); - } - }; - - var _map = function (arr, iterator) { - if (arr.map) { - return arr.map(iterator); - } - var results = []; - _forEach(arr, function (x, i, a) { - results.push(iterator(x, i, a)); - }); - return results; - }; - - var _reduce = function (arr, iterator, memo) { - if (arr.reduce) { - return arr.reduce(iterator, memo); - } - _forEach(arr, function (x, i, a) { - memo = iterator(memo, x, i, a); - }); - return memo; - }; - - var _keys = function (obj) { - if (Object.keys) { - return Object.keys(obj); - } - var keys = []; - for (var k in obj) { - if (obj.hasOwnProperty(k)) { - keys.push(k); - } - } - return keys; - }; - - var _indexOf = function (arr, item) { - if (arr.indexOf) { - return arr.indexOf(item); - } - for (var i = 0; i < arr.length; i += 1) { - if (arr[i] === item) { - return i; - } - } - return -1; - }; - - //// exported async module functions //// - - //// nextTick implementation with browser-compatible fallback //// - if (typeof setImmediate === 'function') { - async.nextTick = function (fn) { - setImmediate(fn); - }; - } - else if (typeof process !== 'undefined' && process.nextTick) { - async.nextTick = process.nextTick; - } - else { - async.nextTick = function (fn) { - setTimeout(fn, 0); - }; - } - - async.forEach = function (arr, iterator, callback) { - if (!arr.length) { - return callback(); - } - var completed = 0; - _forEach(arr, function (x) { - iterator(x, function (err) { - if (err) { - callback(err); - callback = function () {}; - } - else { - completed += 1; - if (completed === arr.length) { - callback(); - } - } - }); - }); - }; - - async.forEachSeries = function (arr, iterator, callback) { - if (!arr.length) { - return callback(); - } - var completed = 0; - var iterate = function () { - iterator(arr[completed], function (err) { - if (err) { - callback(err); - callback = function () {}; - } - else { - completed += 1; - if (completed === arr.length) { - callback(); - } - else { - iterate(); - } - } - }); - }; - iterate(); - }; - - - var doParallel = function (fn) { - return function () { - var args = Array.prototype.slice.call(arguments); - return fn.apply(null, [async.forEach].concat(args)); - }; - }; - var doSeries = function (fn) { - return function () { - var args = Array.prototype.slice.call(arguments); - return fn.apply(null, [async.forEachSeries].concat(args)); - }; - }; - - - var _asyncMap = function (eachfn, arr, iterator, callback) { - var results = []; - arr = _map(arr, function (x, i) { - return {index: i, value: x}; - }); - eachfn(arr, function (x, callback) { - iterator(x.value, function (err, v) { - results[x.index] = v; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - }; - async.map = doParallel(_asyncMap); - async.mapSeries = doSeries(_asyncMap); - - - // reduce only has a series version, as doing reduce in parallel won't - // work in many situations. - async.reduce = function (arr, memo, iterator, callback) { - async.forEachSeries(arr, function (x, callback) { - iterator(memo, x, function (err, v) { - memo = v; - callback(err); - }); - }, function (err) { - callback(err, memo); - }); - }; - // inject alias - async.inject = async.reduce; - // foldl alias - async.foldl = async.reduce; - - async.reduceRight = function (arr, memo, iterator, callback) { - var reversed = _map(arr, function (x) { - return x; - }).reverse(); - async.reduce(reversed, memo, iterator, callback); - }; - // foldr alias - async.foldr = async.reduceRight; - - var _filter = function (eachfn, arr, iterator, callback) { - var results = []; - arr = _map(arr, function (x, i) { - return {index: i, value: x}; - }); - eachfn(arr, function (x, callback) { - iterator(x.value, function (v) { - if (v) { - results.push(x); - } - callback(); - }); - }, function (err) { - callback(_map(results.sort(function (a, b) { - return a.index - b.index; - }), function (x) { - return x.value; - })); - }); - }; - async.filter = doParallel(_filter); - async.filterSeries = doSeries(_filter); - // select alias - async.select = async.filter; - async.selectSeries = async.filterSeries; - - var _reject = function (eachfn, arr, iterator, callback) { - var results = []; - arr = _map(arr, function (x, i) { - return {index: i, value: x}; - }); - eachfn(arr, function (x, callback) { - iterator(x.value, function (v) { - if (!v) { - results.push(x); - } - callback(); - }); - }, function (err) { - callback(_map(results.sort(function (a, b) { - return a.index - b.index; - }), function (x) { - return x.value; - })); - }); - }; - async.reject = doParallel(_reject); - async.rejectSeries = doSeries(_reject); - - var _detect = function (eachfn, arr, iterator, main_callback) { - eachfn(arr, function (x, callback) { - iterator(x, function (result) { - if (result) { - main_callback(x); - } - else { - callback(); - } - }); - }, function (err) { - main_callback(); - }); - }; - async.detect = doParallel(_detect); - async.detectSeries = doSeries(_detect); - - async.some = function (arr, iterator, main_callback) { - async.forEach(arr, function (x, callback) { - iterator(x, function (v) { - if (v) { - main_callback(true); - main_callback = function () {}; - } - callback(); - }); - }, function (err) { - main_callback(false); - }); - }; - // any alias - async.any = async.some; - - async.every = function (arr, iterator, main_callback) { - async.forEach(arr, function (x, callback) { - iterator(x, function (v) { - if (!v) { - main_callback(false); - main_callback = function () {}; - } - callback(); - }); - }, function (err) { - main_callback(true); - }); - }; - // all alias - async.all = async.every; - - async.sortBy = function (arr, iterator, callback) { - async.map(arr, function (x, callback) { - iterator(x, function (err, criteria) { - if (err) { - callback(err); - } - else { - callback(null, {value: x, criteria: criteria}); - } - }); - }, function (err, results) { - if (err) { - return callback(err); - } - else { - var fn = function (left, right) { - var a = left.criteria, b = right.criteria; - return a < b ? -1 : a > b ? 1 : 0; - }; - callback(null, _map(results.sort(fn), function (x) { - return x.value; - })); - } - }); - }; - - async.auto = function (tasks, callback) { - callback = callback || function () {}; - var keys = _keys(tasks); - if (!keys.length) { - return callback(null); - } - - var completed = []; - - var listeners = []; - var addListener = function (fn) { - listeners.unshift(fn); - }; - var removeListener = function (fn) { - for (var i = 0; i < listeners.length; i += 1) { - if (listeners[i] === fn) { - listeners.splice(i, 1); - return; - } - } - }; - var taskComplete = function () { - _forEach(listeners, function (fn) { - fn(); - }); - }; - - addListener(function () { - if (completed.length === keys.length) { - callback(null); - } - }); - - _forEach(keys, function (k) { - var task = (tasks[k] instanceof Function) ? [tasks[k]]: tasks[k]; - var taskCallback = function (err) { - if (err) { - callback(err); - // stop subsequent errors hitting callback multiple times - callback = function () {}; - } - else { - completed.push(k); - taskComplete(); - } - }; - var requires = task.slice(0, Math.abs(task.length - 1)) || []; - var ready = function () { - return _reduce(requires, function (a, x) { - return (a && _indexOf(completed, x) !== -1); - }, true); - }; - if (ready()) { - task[task.length - 1](taskCallback); - } - else { - var listener = function () { - if (ready()) { - removeListener(listener); - task[task.length - 1](taskCallback); - } - }; - addListener(listener); - } - }); - }; - - async.waterfall = function (tasks, callback) { - if (!tasks.length) { - return callback(); - } - callback = callback || function () {}; - var wrapIterator = function (iterator) { - return function (err) { - if (err) { - callback(err); - callback = function () {}; - } - else { - var args = Array.prototype.slice.call(arguments, 1); - var next = iterator.next(); - if (next) { - args.push(wrapIterator(next)); - } - else { - args.push(callback); - } - async.nextTick(function () { - iterator.apply(null, args); - }); - } - }; - }; - wrapIterator(async.iterator(tasks))(); - }; - - async.parallel = function (tasks, callback) { - callback = callback || function () {}; - if (tasks.constructor === Array) { - async.map(tasks, function (fn, callback) { - if (fn) { - fn(function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - callback.call(null, err, args || null); - }); - } - }, callback); - } - else { - var results = {}; - async.forEach(_keys(tasks), function (k, callback) { - tasks[k](function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - results[k] = args; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - } - }; - - async.series = function (tasks, callback) { - callback = callback || function () {}; - if (tasks.constructor === Array) { - async.mapSeries(tasks, function (fn, callback) { - if (fn) { - fn(function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - callback.call(null, err, args || null); - }); - } - }, callback); - } - else { - var results = {}; - async.forEachSeries(_keys(tasks), function (k, callback) { - tasks[k](function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - results[k] = args; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - } - }; - - async.iterator = function (tasks) { - var makeCallback = function (index) { - var fn = function () { - if (tasks.length) { - tasks[index].apply(null, arguments); - } - return fn.next(); - }; - fn.next = function () { - return (index < tasks.length - 1) ? makeCallback(index + 1): null; - }; - return fn; - }; - return makeCallback(0); - }; - - async.apply = function (fn) { - var args = Array.prototype.slice.call(arguments, 1); - return function () { - return fn.apply( - null, args.concat(Array.prototype.slice.call(arguments)) - ); - }; - }; - - var _concat = function (eachfn, arr, fn, callback) { - var r = []; - eachfn(arr, function (x, cb) { - fn(x, function (err, y) { - r = r.concat(y || []); - cb(err); - }); - }, function (err) { - callback(err, r); - }); - }; - async.concat = doParallel(_concat); - async.concatSeries = doSeries(_concat); - - async.whilst = function (test, iterator, callback) { - if (test()) { - iterator(function (err) { - if (err) { - return callback(err); - } - async.whilst(test, iterator, callback); - }); - } - else { - callback(); - } - }; - - async.until = function (test, iterator, callback) { - if (!test()) { - iterator(function (err) { - if (err) { - return callback(err); - } - async.until(test, iterator, callback); - }); - } - else { - callback(); - } - }; - - async.queue = function (worker, concurrency) { - var workers = 0; - var tasks = []; - var q = { - concurrency: concurrency, - push: function (data, callback) { - tasks.push({data: data, callback: callback}); - async.nextTick(q.process); - }, - process: function () { - if (workers < q.concurrency && tasks.length) { - var task = tasks.splice(0, 1)[0]; - workers += 1; - worker(task.data, function () { - workers -= 1; - if (task.callback) { - task.callback.apply(task, arguments); - } - q.process(); - }); - } - }, - length: function () { - return tasks.length; - } - }; - return q; - }; - - var _console_fn = function (name) { - return function (fn) { - var args = Array.prototype.slice.call(arguments, 1); - fn.apply(null, args.concat([function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (typeof console !== 'undefined') { - if (err) { - if (console.error) { - console.error(err); - } - } - else if (console[name]) { - _forEach(args, function (x) { - console[name](x); - }); - } - } - }])); - }; - }; - async.log = _console_fn('log'); - async.dir = _console_fn('dir'); - /*async.info = _console_fn('info'); - async.warn = _console_fn('warn'); - async.error = _console_fn('error');*/ - - async.memoize = function (fn, hasher) { - var memo = {}; - hasher = hasher || function (x) { - return x; - }; - return function () { - var args = Array.prototype.slice.call(arguments); - var callback = args.pop(); - var key = hasher.apply(null, args); - if (key in memo) { - callback.apply(null, memo[key]); - } - else { - fn.apply(null, args.concat([function () { - memo[key] = arguments; - callback.apply(null, arguments); - }])); - } - }; - }; - -}()); -(function(exports){ -/** - * This file is based on the node.js assert module, but with some small - * changes for browser-compatibility - * THIS FILE SHOULD BE BROWSER-COMPATIBLE JS! - */ - - -/** - * Added for browser compatibility - */ - -var _keys = function(obj){ - if(Object.keys) return Object.keys(obj); - if (typeof obj != 'object' && typeof obj != 'function') { - throw new TypeError('-'); - } - var keys = []; - for(var k in obj){ - if(obj.hasOwnProperty(k)) keys.push(k); - } - return keys; -}; - - - -// http://wiki.commonjs.org/wiki/Unit_Testing/1.0 -// -// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8! -// -// Originally from narwhal.js (http://narwhaljs.org) -// Copyright (c) 2009 Thomas Robinson <280north.com> -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the 'Software'), to -// deal in the Software without restriction, including without limitation the -// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -// sell copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS 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. - - -var pSlice = Array.prototype.slice; - -// 1. The assert module provides functions that throw -// AssertionError's when particular conditions are not met. The -// assert module must conform to the following interface. - -var assert = exports; - -// 2. The AssertionError is defined in assert. -// new assert.AssertionError({message: message, actual: actual, expected: expected}) - -assert.AssertionError = function AssertionError (options) { - this.name = "AssertionError"; - this.message = options.message; - this.actual = options.actual; - this.expected = options.expected; - this.operator = options.operator; - var stackStartFunction = options.stackStartFunction || fail; - - if (Error.captureStackTrace) { - Error.captureStackTrace(this, stackStartFunction); - } -}; -// code from util.inherits in node -assert.AssertionError.super_ = Error; - - -// EDITED FOR BROWSER COMPATIBILITY: replaced Object.create call -// TODO: test what effect this may have -var ctor = function () { this.constructor = assert.AssertionError; }; -ctor.prototype = Error.prototype; -assert.AssertionError.prototype = new ctor(); - - -assert.AssertionError.prototype.toString = function() { - if (this.message) { - return [this.name+":", this.message].join(' '); - } else { - return [ this.name+":" - , typeof this.expected !== 'undefined' ? JSON.stringify(this.expected) : 'undefined' - , this.operator - , typeof this.actual !== 'undefined' ? JSON.stringify(this.actual) : 'undefined' - ].join(" "); - } -}; - -// assert.AssertionError instanceof Error - -assert.AssertionError.__proto__ = Error.prototype; - -// At present only the three keys mentioned above are used and -// understood by the spec. Implementations or sub modules can pass -// other keys to the AssertionError's constructor - they will be -// ignored. - -// 3. All of the following functions must throw an AssertionError -// when a corresponding condition is not met, with a message that -// may be undefined if not provided. All assertion methods provide -// both the actual and expected values to the assertion error for -// display purposes. - -function fail(actual, expected, message, operator, stackStartFunction) { - throw new assert.AssertionError({ - message: message, - actual: actual, - expected: expected, - operator: operator, - stackStartFunction: stackStartFunction - }); -} - -// EXTENSION! allows for well behaved errors defined elsewhere. -assert.fail = fail; - -// 4. Pure assertion tests whether a value is truthy, as determined -// by !!guard. -// assert.ok(guard, message_opt); -// This statement is equivalent to assert.equal(true, guard, -// message_opt);. To test strictly for the value true, use -// assert.strictEqual(true, guard, message_opt);. - -assert.ok = function ok(value, message) { - if (!!!value) fail(value, true, message, "==", assert.ok); -}; - -// 5. The equality assertion tests shallow, coercive equality with -// ==. -// assert.equal(actual, expected, message_opt); - -assert.equal = function equal(actual, expected, message) { - if (actual != expected) fail(actual, expected, message, "==", assert.equal); -}; - -// 6. The non-equality assertion tests for whether two objects are not equal -// with != assert.notEqual(actual, expected, message_opt); - -assert.notEqual = function notEqual(actual, expected, message) { - if (actual == expected) { - fail(actual, expected, message, "!=", assert.notEqual); - } -}; - -// 7. The equivalence assertion tests a deep equality relation. -// assert.deepEqual(actual, expected, message_opt); - -assert.deepEqual = function deepEqual(actual, expected, message) { - if (!_deepEqual(actual, expected)) { - fail(actual, expected, message, "deepEqual", assert.deepEqual); - } -}; - -var Buffer = null; -if (typeof require !== 'undefined' && typeof process !== 'undefined') { - try { - Buffer = require('buffer').Buffer; - } - catch (e) { - // May be a CommonJS environment other than Node.js - Buffer = null; - } -} - -function _deepEqual(actual, expected) { - // 7.1. All identical values are equivalent, as determined by ===. - if (actual === expected) { - return true; - // 7.2. If the expected value is a Date object, the actual value is - // equivalent if it is also a Date object that refers to the same time. - } else if (actual instanceof Date && expected instanceof Date) { - return actual.getTime() === expected.getTime(); - - // 7.2.1 If the expcted value is a RegExp object, the actual value is - // equivalent if it is also a RegExp object that refers to the same source and options - } else if (actual instanceof RegExp && expected instanceof RegExp) { - return actual.source === expected.source && - actual.global === expected.global && - actual.ignoreCase === expected.ignoreCase && - actual.multiline === expected.multiline; - - } else if (Buffer && actual instanceof Buffer && expected instanceof Buffer) { - return (function() { - var i, len; - - for (i = 0, len = expected.length; i < len; i++) { - if (actual[i] !== expected[i]) { - return false; - } - } - return actual.length === expected.length; - })(); - // 7.3. Other pairs that do not both pass typeof value == "object", - // equivalence is determined by ==. - } else if (typeof actual != 'object' && typeof expected != 'object') { - return actual == expected; - - // 7.4. For all other Object pairs, including Array objects, equivalence is - // determined by having the same number of owned properties (as verified - // with Object.prototype.hasOwnProperty.call), the same set of keys - // (although not necessarily the same order), equivalent values for every - // corresponding key, and an identical "prototype" property. Note: this - // accounts for both named and indexed properties on Arrays. - } else { - return objEquiv(actual, expected); - } -} - -function isUndefinedOrNull (value) { - return value === null || value === undefined; -} - -function isArguments (object) { - return Object.prototype.toString.call(object) == '[object Arguments]'; -} - -function objEquiv (a, b) { - if (isUndefinedOrNull(a) || isUndefinedOrNull(b)) - return false; - // an identical "prototype" property. - if (a.prototype !== b.prototype) return false; - //~~~I've managed to break Object.keys through screwy arguments passing. - // Converting to array solves the problem. - if (isArguments(a)) { - if (!isArguments(b)) { - return false; - } - a = pSlice.call(a); - b = pSlice.call(b); - return _deepEqual(a, b); - } - try{ - var ka = _keys(a), - kb = _keys(b), - key, i; - } catch (e) {//happens when one is a string literal and the other isn't - return false; - } - // having the same number of owned properties (keys incorporates hasOwnProperty) - if (ka.length != kb.length) - return false; - //the same set of keys (although not necessarily the same order), - ka.sort(); - kb.sort(); - //~~~cheap key test - for (i = ka.length - 1; i >= 0; i--) { - if (ka[i] != kb[i]) - return false; - } - //equivalent values for every corresponding key, and - //~~~possibly expensive deep test - for (i = ka.length - 1; i >= 0; i--) { - key = ka[i]; - if (!_deepEqual(a[key], b[key] )) - return false; - } - return true; -} - -// 8. The non-equivalence assertion tests for any deep inequality. -// assert.notDeepEqual(actual, expected, message_opt); - -assert.notDeepEqual = function notDeepEqual(actual, expected, message) { - if (_deepEqual(actual, expected)) { - fail(actual, expected, message, "notDeepEqual", assert.notDeepEqual); - } -}; - -// 9. The strict equality assertion tests strict equality, as determined by ===. -// assert.strictEqual(actual, expected, message_opt); - -assert.strictEqual = function strictEqual(actual, expected, message) { - if (actual !== expected) { - fail(actual, expected, message, "===", assert.strictEqual); - } -}; - -// 10. The strict non-equality assertion tests for strict inequality, as determined by !==. -// assert.notStrictEqual(actual, expected, message_opt); - -assert.notStrictEqual = function notStrictEqual(actual, expected, message) { - if (actual === expected) { - fail(actual, expected, message, "!==", assert.notStrictEqual); - } -}; - -function expectedException(actual, expected) { - if (!actual || !expected) { - return false; - } - - if (expected instanceof RegExp) { - return expected.test(actual.message || actual); - } else if (actual instanceof expected) { - return true; - } else if (expected.call({}, actual) === true) { - return true; - } - - return false; -} - -function _throws(shouldThrow, block, expected, message) { - var actual; - - if (typeof expected === 'string') { - message = expected; - expected = null; - } - - try { - block(); - } catch (e) { - actual = e; - } - - message = (expected && expected.name ? ' (' + expected.name + ').' : '.') + - (message ? ' ' + message : '.'); - - if (shouldThrow && !actual) { - fail('Missing expected exception' + message); - } - - if (!shouldThrow && expectedException(actual, expected)) { - fail('Got unwanted exception' + message); - } - - if ((shouldThrow && actual && expected && - !expectedException(actual, expected)) || (!shouldThrow && actual)) { - throw actual; - } -} - -// 11. Expected to throw an error: -// assert.throws(block, Error_opt, message_opt); - -assert.throws = function(block, /*optional*/error, /*optional*/message) { - _throws.apply(this, [true].concat(pSlice.call(arguments))); -}; - -// EXTENSION! This is annoying to write outside this module. -assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) { - _throws.apply(this, [false].concat(pSlice.call(arguments))); -}; - -assert.ifError = function (err) { if (err) {throw err;}}; -})(assert); -(function(exports){ -/*! - * Nodeunit - * Copyright (c) 2010 Caolan McMahon - * MIT Licensed - * - * THIS FILE SHOULD BE BROWSER-COMPATIBLE JS! - * Only code on that line will be removed, it's mostly to avoid requiring code - * that is node specific - */ - -/** - * Module dependencies - */ - - - -/** - * Creates assertion objects representing the result of an assert call. - * Accepts an object or AssertionError as its argument. - * - * @param {object} obj - * @api public - */ - -exports.assertion = function (obj) { - return { - method: obj.method || '', - message: obj.message || (obj.error && obj.error.message) || '', - error: obj.error, - passed: function () { - return !this.error; - }, - failed: function () { - return Boolean(this.error); - } - }; -}; - -/** - * Creates an assertion list object representing a group of assertions. - * Accepts an array of assertion objects. - * - * @param {Array} arr - * @param {Number} duration - * @api public - */ - -exports.assertionList = function (arr, duration) { - var that = arr || []; - that.failures = function () { - var failures = 0; - for (var i = 0; i < this.length; i += 1) { - if (this[i].failed()) { - failures += 1; - } - } - return failures; - }; - that.passes = function () { - return that.length - that.failures(); - }; - that.duration = duration || 0; - return that; -}; - -/** - * Create a wrapper function for assert module methods. Executes a callback - * after it's complete with an assertion object representing the result. - * - * @param {Function} callback - * @api private - */ - -var assertWrapper = function (callback) { - return function (new_method, assert_method, arity) { - return function () { - var message = arguments[arity - 1]; - var a = exports.assertion({method: new_method, message: message}); - try { - assert[assert_method].apply(null, arguments); - } - catch (e) { - a.error = e; - } - callback(a); - }; - }; -}; - -/** - * Creates the 'test' object that gets passed to every test function. - * Accepts the name of the test function as its first argument, followed by - * the start time in ms, the options object and a callback function. - * - * @param {String} name - * @param {Number} start - * @param {Object} options - * @param {Function} callback - * @api public - */ - -exports.test = function (name, start, options, callback) { - var expecting; - var a_list = []; - - var wrapAssert = assertWrapper(function (a) { - a_list.push(a); - if (options.log) { - async.nextTick(function () { - options.log(a); - }); - } - }); - - var test = { - done: function (err) { - if (expecting !== undefined && expecting !== a_list.length) { - var e = new Error( - 'Expected ' + expecting + ' assertions, ' + - a_list.length + ' ran' - ); - var a1 = exports.assertion({method: 'expect', error: e}); - a_list.push(a1); - if (options.log) { - async.nextTick(function () { - options.log(a1); - }); - } - } - if (err) { - var a2 = exports.assertion({error: err}); - a_list.push(a2); - if (options.log) { - async.nextTick(function () { - options.log(a2); - }); - } - } - var end = new Date().getTime(); - async.nextTick(function () { - var assertion_list = exports.assertionList(a_list, end - start); - options.testDone(name, assertion_list); - callback(null, a_list); - }); - }, - ok: wrapAssert('ok', 'ok', 2), - same: wrapAssert('same', 'deepEqual', 3), - equals: wrapAssert('equals', 'equal', 3), - expect: function (num) { - expecting = num; - }, - _assertion_list: a_list - }; - // add all functions from the assert module - for (var k in assert) { - if (assert.hasOwnProperty(k)) { - test[k] = wrapAssert(k, k, assert[k].length); - } - } - return test; -}; - -/** - * Ensures an options object has all callbacks, adding empty callback functions - * if any are missing. - * - * @param {Object} opt - * @return {Object} - * @api public - */ - -exports.options = function (opt) { - var optionalCallback = function (name) { - opt[name] = opt[name] || function () {}; - }; - - optionalCallback('moduleStart'); - optionalCallback('moduleDone'); - optionalCallback('testStart'); - optionalCallback('testReady'); - optionalCallback('testDone'); - //optionalCallback('log'); - - // 'done' callback is not optional. - - return opt; -}; -})(types); -(function(exports){ -/*! - * Nodeunit - * Copyright (c) 2010 Caolan McMahon - * MIT Licensed - * - * THIS FILE SHOULD BE BROWSER-COMPATIBLE JS! - * Only code on that line will be removed, it's mostly to avoid requiring code - * that is node specific - */ - -/** - * Module dependencies - */ - - - -/** - * Added for browser compatibility - */ - -var _keys = function (obj) { - if (Object.keys) { - return Object.keys(obj); - } - var keys = []; - for (var k in obj) { - if (obj.hasOwnProperty(k)) { - keys.push(k); - } - } - return keys; -}; - - -var _copy = function (obj) { - var nobj = {}; - var keys = _keys(obj); - for (var i = 0; i < keys.length; i += 1) { - nobj[keys[i]] = obj[keys[i]]; - } - return nobj; -}; - - -/** - * Runs a test function (fn) from a loaded module. After the test function - * calls test.done(), the callback is executed with an assertionList as its - * second argument. - * - * @param {String} name - * @param {Function} fn - * @param {Object} opt - * @param {Function} callback - * @api public - */ - -exports.runTest = function (name, fn, opt, callback) { - var options = types.options(opt); - - options.testStart(name); - var start = new Date().getTime(); - var test = types.test(name, start, options, callback); - - options.testReady(test); - try { - fn(test); - } - catch (e) { - test.done(e); - } -}; - -/** - * Takes an object containing test functions or other test suites as properties - * and runs each in series. After all tests have completed, the callback is - * called with a list of all assertions as the second argument. - * - * If a name is passed to this function it is prepended to all test and suite - * names that run within it. - * - * @param {String} name - * @param {Object} suite - * @param {Object} opt - * @param {Function} callback - * @api public - */ - -exports.runSuite = function (name, suite, opt, callback) { - suite = wrapGroup(suite); - var keys = _keys(suite); - - async.concatSeries(keys, function (k, cb) { - var prop = suite[k], _name; - - _name = name ? [].concat(name, k) : [k]; - _name.toString = function () { - // fallback for old one - return this.join(' - '); - }; - - if (typeof prop === 'function') { - var in_name = false, - in_specific_test = (_name.toString() === opt.testFullSpec) ? true : false; - for (var i = 0; i < _name.length; i += 1) { - if (_name[i] === opt.testspec) { - in_name = true; - } - } - - if ((!opt.testFullSpec || in_specific_test) && (!opt.testspec || in_name)) { - if (opt.moduleStart) { - opt.moduleStart(); - } - exports.runTest(_name, suite[k], opt, cb); - } - else { - return cb(); - } - } - else { - exports.runSuite(_name, suite[k], opt, cb); - } - }, callback); -}; - -/** - * Run each exported test function or test suite from a loaded module. - * - * @param {String} name - * @param {Object} mod - * @param {Object} opt - * @param {Function} callback - * @api public - */ - -exports.runModule = function (name, mod, opt, callback) { - var options = _copy(types.options(opt)); - - var _run = false; - var _moduleStart = options.moduleStart; - - mod = wrapGroup(mod); - - function run_once() { - if (!_run) { - _run = true; - _moduleStart(name); - } - } - options.moduleStart = run_once; - - var start = new Date().getTime(); - - exports.runSuite(null, mod, options, function (err, a_list) { - var end = new Date().getTime(); - var assertion_list = types.assertionList(a_list, end - start); - options.moduleDone(name, assertion_list); - if (nodeunit.complete) { - nodeunit.complete(name, assertion_list); - } - callback(null, a_list); - }); -}; - -/** - * Treats an object literal as a list of modules keyed by name. Runs each - * module and finished with calling 'done'. You can think of this as a browser - * safe alternative to runFiles in the nodeunit module. - * - * @param {Object} modules - * @param {Object} opt - * @api public - */ - -// TODO: add proper unit tests for this function -exports.runModules = function (modules, opt) { - var all_assertions = []; - var options = types.options(opt); - var start = new Date().getTime(); - - async.concatSeries(_keys(modules), function (k, cb) { - exports.runModule(k, modules[k], options, cb); - }, - function (err, all_assertions) { - var end = new Date().getTime(); - options.done(types.assertionList(all_assertions, end - start)); - }); -}; - - -/** - * Wraps a test function with setUp and tearDown functions. - * Used by testCase. - * - * @param {Function} setUp - * @param {Function} tearDown - * @param {Function} fn - * @api private - */ - -var wrapTest = function (setUp, tearDown, fn) { - return function (test) { - var context = {}; - if (tearDown) { - var done = test.done; - test.done = function (err) { - try { - tearDown.call(context, function (err2) { - if (err && err2) { - test._assertion_list.push( - types.assertion({error: err}) - ); - return done(err2); - } - done(err || err2); - }); - } - catch (e) { - done(e); - } - }; - } - if (setUp) { - setUp.call(context, function (err) { - if (err) { - return test.done(err); - } - fn.call(context, test); - }); - } - else { - fn.call(context, test); - } - }; -}; - - -/** - * Returns a serial callback from two functions. - * - * @param {Function} funcFirst - * @param {Function} funcSecond - * @api private - */ - -var getSerialCallback = function (fns) { - if (!fns.length) { - return null; - } - return function (callback) { - var that = this; - var bound_fns = []; - for (var i = 0, len = fns.length; i < len; i++) { - (function (j) { - bound_fns.push(function () { - return fns[j].apply(that, arguments); - }); - })(i); - } - return async.series(bound_fns, callback); - }; -}; - - -/** - * Wraps a group of tests with setUp and tearDown functions. - * Used by testCase. - * - * @param {Object} group - * @param {Array} setUps - parent setUp functions - * @param {Array} tearDowns - parent tearDown functions - * @api private - */ - -var wrapGroup = function (group, setUps, tearDowns) { - var tests = {}; - - var setUps = setUps ? setUps.slice(): []; - var tearDowns = tearDowns ? tearDowns.slice(): []; - - if (group.setUp) { - setUps.push(group.setUp); - delete group.setUp; - } - if (group.tearDown) { - tearDowns.unshift(group.tearDown); - delete group.tearDown; - } - - var keys = _keys(group); - - for (var i = 0; i < keys.length; i += 1) { - var k = keys[i]; - if (typeof group[k] === 'function') { - tests[k] = wrapTest( - getSerialCallback(setUps), - getSerialCallback(tearDowns), - group[k] - ); - } - else if (typeof group[k] === 'object') { - tests[k] = wrapGroup(group[k], setUps, tearDowns); - } - } - return tests; -}; - - -/** - * Backwards compatibility for test suites using old testCase API - */ - -exports.testCase = function (suite) { - return suite; -}; -})(core); -(function(exports){ -/*! - * Nodeunit - * Copyright (c) 2010 Caolan McMahon - * MIT Licensed - * - * THIS FILE SHOULD BE BROWSER-COMPATIBLE JS! - * Only code on that line will be removed, its mostly to avoid requiring code - * that is node specific - */ - - -/** - * NOTE: this test runner is not listed in index.js because it cannot be - * used with the command-line tool, only inside the browser. - */ - - -/** - * Reporter info string - */ - -exports.info = "Browser-based test reporter"; - - -/** - * Run all tests within each module, reporting the results - * - * @param {Array} files - * @api public - */ - -exports.run = function (modules, options, callback) { - var start = new Date().getTime(), div; - options = options || {}; - div = options.div || document.body; - - function setText(el, txt) { - if ('innerText' in el) { - el.innerText = txt; - } - else if ('textContent' in el){ - el.textContent = txt; - } - } - - function getOrCreate(tag, id) { - var el = document.getElementById(id); - if (!el) { - el = document.createElement(tag); - el.id = id; - div.appendChild(el); - } - return el; - }; - - var header = getOrCreate('h1', 'nodeunit-header'); - var banner = getOrCreate('h2', 'nodeunit-banner'); - var userAgent = getOrCreate('h2', 'nodeunit-userAgent'); - var tests = getOrCreate('ol', 'nodeunit-tests'); - var result = getOrCreate('p', 'nodeunit-testresult'); - - setText(userAgent, navigator.userAgent); - - nodeunit.runModules(modules, { - moduleStart: function (name) { - /*var mheading = document.createElement('h2'); - mheading.innerText = name; - results.appendChild(mheading); - module = document.createElement('ol'); - results.appendChild(module);*/ - }, - testDone: function (name, assertions) { - var test = document.createElement('li'); - var strong = document.createElement('strong'); - strong.innerHTML = name + ' (' + - '' + assertions.failures() + ', ' + - '' + assertions.passes() + ', ' + - assertions.length + - ')'; - test.className = assertions.failures() ? 'fail': 'pass'; - test.appendChild(strong); - - var aList = document.createElement('ol'); - aList.style.display = 'none'; - test.onclick = function () { - var d = aList.style.display; - aList.style.display = (d == 'none') ? 'block': 'none'; - }; - for (var i=0; i' + (a.error.stack || a.error) + ''; - li.className = 'fail'; - } - else { - li.innerHTML = a.message || a.method || 'no message'; - li.className = 'pass'; - } - aList.appendChild(li); - } - test.appendChild(aList); - tests.appendChild(test); - }, - done: function (assertions) { - var end = new Date().getTime(); - var duration = end - start; - - var failures = assertions.failures(); - banner.className = failures ? 'fail': 'pass'; - - result.innerHTML = 'Tests completed in ' + duration + - ' milliseconds.
' + - assertions.passes() + ' assertions of ' + - '' + assertions.length + ' passed, ' + - assertions.failures() + ' failed.'; - - if (callback) callback(assertions.failures() ? new Error('We have got test failures.') : undefined); - } - }); -}; -})(reporter); -nodeunit = core; -nodeunit.assert = assert; -nodeunit.reporter = reporter; -nodeunit.run = reporter.run; -return nodeunit; })(); diff --git a/app/bower_components/async/dist/async.js b/app/bower_components/async/dist/async.js deleted file mode 100644 index 31e7620..0000000 --- a/app/bower_components/async/dist/async.js +++ /dev/null @@ -1,1265 +0,0 @@ -/*! - * async - * https://github.com/caolan/async - * - * Copyright 2010-2014 Caolan McMahon - * Released under the MIT license - */ -(function () { - - var async = {}; - function noop() {} - function identity(v) { - return v; - } - function toBool(v) { - return !!v; - } - function notId(v) { - return !v; - } - - // global on the server, window in the browser - var previous_async; - - // Establish the root object, `window` (`self`) in the browser, `global` - // on the server, or `this` in some virtual machines. We use `self` - // instead of `window` for `WebWorker` support. - var root = typeof self === 'object' && self.self === self && self || - typeof global === 'object' && global.global === global && global || - this; - - if (root != null) { - previous_async = root.async; - } - - async.noConflict = function () { - root.async = previous_async; - return async; - }; - - function only_once(fn) { - return function() { - if (fn === null) throw new Error("Callback was already called."); - fn.apply(this, arguments); - fn = null; - }; - } - - function _once(fn) { - return function() { - if (fn === null) return; - fn.apply(this, arguments); - fn = null; - }; - } - - //// cross-browser compatiblity functions //// - - var _toString = Object.prototype.toString; - - var _isArray = Array.isArray || function (obj) { - return _toString.call(obj) === '[object Array]'; - }; - - // Ported from underscore.js isObject - var _isObject = function(obj) { - var type = typeof obj; - return type === 'function' || type === 'object' && !!obj; - }; - - function _isArrayLike(arr) { - return _isArray(arr) || ( - // has a positive integer length property - typeof arr.length === "number" && - arr.length >= 0 && - arr.length % 1 === 0 - ); - } - - function _arrayEach(arr, iterator) { - var index = -1, - length = arr.length; - - while (++index < length) { - iterator(arr[index], index, arr); - } - } - - function _map(arr, iterator) { - var index = -1, - length = arr.length, - result = Array(length); - - while (++index < length) { - result[index] = iterator(arr[index], index, arr); - } - return result; - } - - function _range(count) { - return _map(Array(count), function (v, i) { return i; }); - } - - function _reduce(arr, iterator, memo) { - _arrayEach(arr, function (x, i, a) { - memo = iterator(memo, x, i, a); - }); - return memo; - } - - function _forEachOf(object, iterator) { - _arrayEach(_keys(object), function (key) { - iterator(object[key], key); - }); - } - - function _indexOf(arr, item) { - for (var i = 0; i < arr.length; i++) { - if (arr[i] === item) return i; - } - return -1; - } - - var _keys = Object.keys || function (obj) { - var keys = []; - for (var k in obj) { - if (obj.hasOwnProperty(k)) { - keys.push(k); - } - } - return keys; - }; - - function _keyIterator(coll) { - var i = -1; - var len; - var keys; - if (_isArrayLike(coll)) { - len = coll.length; - return function next() { - i++; - return i < len ? i : null; - }; - } else { - keys = _keys(coll); - len = keys.length; - return function next() { - i++; - return i < len ? keys[i] : null; - }; - } - } - - // Similar to ES6's rest param (http://ariya.ofilabs.com/2013/03/es6-and-rest-parameter.html) - // This accumulates the arguments passed into an array, after a given index. - // From underscore.js (https://github.com/jashkenas/underscore/pull/2140). - function _restParam(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0); - var rest = Array(length); - for (var index = 0; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - } - // Currently unused but handle cases outside of the switch statement: - // var args = Array(startIndex + 1); - // for (index = 0; index < startIndex; index++) { - // args[index] = arguments[index]; - // } - // args[startIndex] = rest; - // return func.apply(this, args); - }; - } - - function _withoutIndex(iterator) { - return function (value, index, callback) { - return iterator(value, callback); - }; - } - - //// exported async module functions //// - - //// nextTick implementation with browser-compatible fallback //// - - // capture the global reference to guard against fakeTimer mocks - var _setImmediate = typeof setImmediate === 'function' && setImmediate; - - var _delay = _setImmediate ? function(fn) { - // not a direct alias for IE10 compatibility - _setImmediate(fn); - } : function(fn) { - setTimeout(fn, 0); - }; - - if (typeof process === 'object' && typeof process.nextTick === 'function') { - async.nextTick = process.nextTick; - } else { - async.nextTick = _delay; - } - async.setImmediate = _setImmediate ? _delay : async.nextTick; - - - async.forEach = - async.each = function (arr, iterator, callback) { - return async.eachOf(arr, _withoutIndex(iterator), callback); - }; - - async.forEachSeries = - async.eachSeries = function (arr, iterator, callback) { - return async.eachOfSeries(arr, _withoutIndex(iterator), callback); - }; - - - async.forEachLimit = - async.eachLimit = function (arr, limit, iterator, callback) { - return _eachOfLimit(limit)(arr, _withoutIndex(iterator), callback); - }; - - async.forEachOf = - async.eachOf = function (object, iterator, callback) { - callback = _once(callback || noop); - object = object || []; - - var iter = _keyIterator(object); - var key, completed = 0; - - while ((key = iter()) != null) { - completed += 1; - iterator(object[key], key, only_once(done)); - } - - if (completed === 0) callback(null); - - function done(err) { - completed--; - if (err) { - callback(err); - } - // Check key is null in case iterator isn't exhausted - // and done resolved synchronously. - else if (key === null && completed <= 0) { - callback(null); - } - } - }; - - async.forEachOfSeries = - async.eachOfSeries = function (obj, iterator, callback) { - callback = _once(callback || noop); - obj = obj || []; - var nextKey = _keyIterator(obj); - var key = nextKey(); - function iterate() { - var sync = true; - if (key === null) { - return callback(null); - } - iterator(obj[key], key, only_once(function (err) { - if (err) { - callback(err); - } - else { - key = nextKey(); - if (key === null) { - return callback(null); - } else { - if (sync) { - async.setImmediate(iterate); - } else { - iterate(); - } - } - } - })); - sync = false; - } - iterate(); - }; - - - - async.forEachOfLimit = - async.eachOfLimit = function (obj, limit, iterator, callback) { - _eachOfLimit(limit)(obj, iterator, callback); - }; - - function _eachOfLimit(limit) { - - return function (obj, iterator, callback) { - callback = _once(callback || noop); - obj = obj || []; - var nextKey = _keyIterator(obj); - if (limit <= 0) { - return callback(null); - } - var done = false; - var running = 0; - var errored = false; - - (function replenish () { - if (done && running <= 0) { - return callback(null); - } - - while (running < limit && !errored) { - var key = nextKey(); - if (key === null) { - done = true; - if (running <= 0) { - callback(null); - } - return; - } - running += 1; - iterator(obj[key], key, only_once(function (err) { - running -= 1; - if (err) { - callback(err); - errored = true; - } - else { - replenish(); - } - })); - } - })(); - }; - } - - - function doParallel(fn) { - return function (obj, iterator, callback) { - return fn(async.eachOf, obj, iterator, callback); - }; - } - function doParallelLimit(fn) { - return function (obj, limit, iterator, callback) { - return fn(_eachOfLimit(limit), obj, iterator, callback); - }; - } - function doSeries(fn) { - return function (obj, iterator, callback) { - return fn(async.eachOfSeries, obj, iterator, callback); - }; - } - - function _asyncMap(eachfn, arr, iterator, callback) { - callback = _once(callback || noop); - arr = arr || []; - var results = _isArrayLike(arr) ? [] : {}; - eachfn(arr, function (value, index, callback) { - iterator(value, function (err, v) { - results[index] = v; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - } - - async.map = doParallel(_asyncMap); - async.mapSeries = doSeries(_asyncMap); - async.mapLimit = doParallelLimit(_asyncMap); - - // reduce only has a series version, as doing reduce in parallel won't - // work in many situations. - async.inject = - async.foldl = - async.reduce = function (arr, memo, iterator, callback) { - async.eachOfSeries(arr, function (x, i, callback) { - iterator(memo, x, function (err, v) { - memo = v; - callback(err); - }); - }, function (err) { - callback(err, memo); - }); - }; - - async.foldr = - async.reduceRight = function (arr, memo, iterator, callback) { - var reversed = _map(arr, identity).reverse(); - async.reduce(reversed, memo, iterator, callback); - }; - - async.transform = function (arr, memo, iterator, callback) { - if (arguments.length === 3) { - callback = iterator; - iterator = memo; - memo = _isArray(arr) ? [] : {}; - } - - async.eachOf(arr, function(v, k, cb) { - iterator(memo, v, k, cb); - }, function(err) { - callback(err, memo); - }); - }; - - function _filter(eachfn, arr, iterator, callback) { - var results = []; - eachfn(arr, function (x, index, callback) { - iterator(x, function (v) { - if (v) { - results.push({index: index, value: x}); - } - callback(); - }); - }, function () { - callback(_map(results.sort(function (a, b) { - return a.index - b.index; - }), function (x) { - return x.value; - })); - }); - } - - async.select = - async.filter = doParallel(_filter); - - async.selectLimit = - async.filterLimit = doParallelLimit(_filter); - - async.selectSeries = - async.filterSeries = doSeries(_filter); - - function _reject(eachfn, arr, iterator, callback) { - _filter(eachfn, arr, function(value, cb) { - iterator(value, function(v) { - cb(!v); - }); - }, callback); - } - async.reject = doParallel(_reject); - async.rejectLimit = doParallelLimit(_reject); - async.rejectSeries = doSeries(_reject); - - function _createTester(eachfn, check, getResult) { - return function(arr, limit, iterator, cb) { - function done() { - if (cb) cb(getResult(false, void 0)); - } - function iteratee(x, _, callback) { - if (!cb) return callback(); - iterator(x, function (v) { - if (cb && check(v)) { - cb(getResult(true, x)); - cb = iterator = false; - } - callback(); - }); - } - if (arguments.length > 3) { - eachfn(arr, limit, iteratee, done); - } else { - cb = iterator; - iterator = limit; - eachfn(arr, iteratee, done); - } - }; - } - - async.any = - async.some = _createTester(async.eachOf, toBool, identity); - - async.someLimit = _createTester(async.eachOfLimit, toBool, identity); - - async.all = - async.every = _createTester(async.eachOf, notId, notId); - - async.everyLimit = _createTester(async.eachOfLimit, notId, notId); - - function _findGetResult(v, x) { - return x; - } - async.detect = _createTester(async.eachOf, identity, _findGetResult); - async.detectSeries = _createTester(async.eachOfSeries, identity, _findGetResult); - async.detectLimit = _createTester(async.eachOfLimit, identity, _findGetResult); - - async.sortBy = function (arr, iterator, callback) { - async.map(arr, function (x, callback) { - iterator(x, function (err, criteria) { - if (err) { - callback(err); - } - else { - callback(null, {value: x, criteria: criteria}); - } - }); - }, function (err, results) { - if (err) { - return callback(err); - } - else { - callback(null, _map(results.sort(comparator), function (x) { - return x.value; - })); - } - - }); - - function comparator(left, right) { - var a = left.criteria, b = right.criteria; - return a < b ? -1 : a > b ? 1 : 0; - } - }; - - async.auto = function (tasks, concurrency, callback) { - if (typeof arguments[1] === 'function') { - // concurrency is optional, shift the args. - callback = concurrency; - concurrency = null; - } - callback = _once(callback || noop); - var keys = _keys(tasks); - var remainingTasks = keys.length; - if (!remainingTasks) { - return callback(null); - } - if (!concurrency) { - concurrency = remainingTasks; - } - - var results = {}; - var runningTasks = 0; - - var hasError = false; - - var listeners = []; - function addListener(fn) { - listeners.unshift(fn); - } - function removeListener(fn) { - var idx = _indexOf(listeners, fn); - if (idx >= 0) listeners.splice(idx, 1); - } - function taskComplete() { - remainingTasks--; - _arrayEach(listeners.slice(0), function (fn) { - fn(); - }); - } - - addListener(function () { - if (!remainingTasks) { - callback(null, results); - } - }); - - _arrayEach(keys, function (k) { - if (hasError) return; - var task = _isArray(tasks[k]) ? tasks[k]: [tasks[k]]; - var taskCallback = _restParam(function(err, args) { - runningTasks--; - if (args.length <= 1) { - args = args[0]; - } - if (err) { - var safeResults = {}; - _forEachOf(results, function(val, rkey) { - safeResults[rkey] = val; - }); - safeResults[k] = args; - hasError = true; - - callback(err, safeResults); - } - else { - results[k] = args; - async.setImmediate(taskComplete); - } - }); - var requires = task.slice(0, task.length - 1); - // prevent dead-locks - var len = requires.length; - var dep; - while (len--) { - if (!(dep = tasks[requires[len]])) { - throw new Error('Has nonexistent dependency in ' + requires.join(', ')); - } - if (_isArray(dep) && _indexOf(dep, k) >= 0) { - throw new Error('Has cyclic dependencies'); - } - } - function ready() { - return runningTasks < concurrency && _reduce(requires, function (a, x) { - return (a && results.hasOwnProperty(x)); - }, true) && !results.hasOwnProperty(k); - } - if (ready()) { - runningTasks++; - task[task.length - 1](taskCallback, results); - } - else { - addListener(listener); - } - function listener() { - if (ready()) { - runningTasks++; - removeListener(listener); - task[task.length - 1](taskCallback, results); - } - } - }); - }; - - - - async.retry = function(times, task, callback) { - var DEFAULT_TIMES = 5; - var DEFAULT_INTERVAL = 0; - - var attempts = []; - - var opts = { - times: DEFAULT_TIMES, - interval: DEFAULT_INTERVAL - }; - - function parseTimes(acc, t){ - if(typeof t === 'number'){ - acc.times = parseInt(t, 10) || DEFAULT_TIMES; - } else if(typeof t === 'object'){ - acc.times = parseInt(t.times, 10) || DEFAULT_TIMES; - acc.interval = parseInt(t.interval, 10) || DEFAULT_INTERVAL; - } else { - throw new Error('Unsupported argument type for \'times\': ' + typeof t); - } - } - - var length = arguments.length; - if (length < 1 || length > 3) { - throw new Error('Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)'); - } else if (length <= 2 && typeof times === 'function') { - callback = task; - task = times; - } - if (typeof times !== 'function') { - parseTimes(opts, times); - } - opts.callback = callback; - opts.task = task; - - function wrappedTask(wrappedCallback, wrappedResults) { - function retryAttempt(task, finalAttempt) { - return function(seriesCallback) { - task(function(err, result){ - seriesCallback(!err || finalAttempt, {err: err, result: result}); - }, wrappedResults); - }; - } - - function retryInterval(interval){ - return function(seriesCallback){ - setTimeout(function(){ - seriesCallback(null); - }, interval); - }; - } - - while (opts.times) { - - var finalAttempt = !(opts.times-=1); - attempts.push(retryAttempt(opts.task, finalAttempt)); - if(!finalAttempt && opts.interval > 0){ - attempts.push(retryInterval(opts.interval)); - } - } - - async.series(attempts, function(done, data){ - data = data[data.length - 1]; - (wrappedCallback || opts.callback)(data.err, data.result); - }); - } - - // If a callback is passed, run this as a controll flow - return opts.callback ? wrappedTask() : wrappedTask; - }; - - async.waterfall = function (tasks, callback) { - callback = _once(callback || noop); - if (!_isArray(tasks)) { - var err = new Error('First argument to waterfall must be an array of functions'); - return callback(err); - } - if (!tasks.length) { - return callback(); - } - function wrapIterator(iterator) { - return _restParam(function (err, args) { - if (err) { - callback.apply(null, [err].concat(args)); - } - else { - var next = iterator.next(); - if (next) { - args.push(wrapIterator(next)); - } - else { - args.push(callback); - } - ensureAsync(iterator).apply(null, args); - } - }); - } - wrapIterator(async.iterator(tasks))(); - }; - - function _parallel(eachfn, tasks, callback) { - callback = callback || noop; - var results = _isArrayLike(tasks) ? [] : {}; - - eachfn(tasks, function (task, key, callback) { - task(_restParam(function (err, args) { - if (args.length <= 1) { - args = args[0]; - } - results[key] = args; - callback(err); - })); - }, function (err) { - callback(err, results); - }); - } - - async.parallel = function (tasks, callback) { - _parallel(async.eachOf, tasks, callback); - }; - - async.parallelLimit = function(tasks, limit, callback) { - _parallel(_eachOfLimit(limit), tasks, callback); - }; - - async.series = function(tasks, callback) { - _parallel(async.eachOfSeries, tasks, callback); - }; - - async.iterator = function (tasks) { - function makeCallback(index) { - function fn() { - if (tasks.length) { - tasks[index].apply(null, arguments); - } - return fn.next(); - } - fn.next = function () { - return (index < tasks.length - 1) ? makeCallback(index + 1): null; - }; - return fn; - } - return makeCallback(0); - }; - - async.apply = _restParam(function (fn, args) { - return _restParam(function (callArgs) { - return fn.apply( - null, args.concat(callArgs) - ); - }); - }); - - function _concat(eachfn, arr, fn, callback) { - var result = []; - eachfn(arr, function (x, index, cb) { - fn(x, function (err, y) { - result = result.concat(y || []); - cb(err); - }); - }, function (err) { - callback(err, result); - }); - } - async.concat = doParallel(_concat); - async.concatSeries = doSeries(_concat); - - async.whilst = function (test, iterator, callback) { - callback = callback || noop; - if (test()) { - var next = _restParam(function(err, args) { - if (err) { - callback(err); - } else if (test.apply(this, args)) { - iterator(next); - } else { - callback.apply(null, [null].concat(args)); - } - }); - iterator(next); - } else { - callback(null); - } - }; - - async.doWhilst = function (iterator, test, callback) { - var calls = 0; - return async.whilst(function() { - return ++calls <= 1 || test.apply(this, arguments); - }, iterator, callback); - }; - - async.until = function (test, iterator, callback) { - return async.whilst(function() { - return !test.apply(this, arguments); - }, iterator, callback); - }; - - async.doUntil = function (iterator, test, callback) { - return async.doWhilst(iterator, function() { - return !test.apply(this, arguments); - }, callback); - }; - - async.during = function (test, iterator, callback) { - callback = callback || noop; - - var next = _restParam(function(err, args) { - if (err) { - callback(err); - } else { - args.push(check); - test.apply(this, args); - } - }); - - var check = function(err, truth) { - if (err) { - callback(err); - } else if (truth) { - iterator(next); - } else { - callback(null); - } - }; - - test(check); - }; - - async.doDuring = function (iterator, test, callback) { - var calls = 0; - async.during(function(next) { - if (calls++ < 1) { - next(null, true); - } else { - test.apply(this, arguments); - } - }, iterator, callback); - }; - - function _queue(worker, concurrency, payload) { - if (concurrency == null) { - concurrency = 1; - } - else if(concurrency === 0) { - throw new Error('Concurrency must not be zero'); - } - function _insert(q, data, pos, callback) { - if (callback != null && typeof callback !== "function") { - throw new Error("task callback must be a function"); - } - q.started = true; - if (!_isArray(data)) { - data = [data]; - } - if(data.length === 0 && q.idle()) { - // call drain immediately if there are no tasks - return async.setImmediate(function() { - q.drain(); - }); - } - _arrayEach(data, function(task) { - var item = { - data: task, - callback: callback || noop - }; - - if (pos) { - q.tasks.unshift(item); - } else { - q.tasks.push(item); - } - - if (q.tasks.length === q.concurrency) { - q.saturated(); - } - }); - async.setImmediate(q.process); - } - function _next(q, tasks) { - return function(){ - workers -= 1; - - var removed = false; - var args = arguments; - _arrayEach(tasks, function (task) { - _arrayEach(workersList, function (worker, index) { - if (worker === task && !removed) { - workersList.splice(index, 1); - removed = true; - } - }); - - task.callback.apply(task, args); - }); - if (q.tasks.length + workers === 0) { - q.drain(); - } - q.process(); - }; - } - - var workers = 0; - var workersList = []; - var q = { - tasks: [], - concurrency: concurrency, - payload: payload, - saturated: noop, - empty: noop, - drain: noop, - started: false, - paused: false, - push: function (data, callback) { - _insert(q, data, false, callback); - }, - kill: function () { - q.drain = noop; - q.tasks = []; - }, - unshift: function (data, callback) { - _insert(q, data, true, callback); - }, - process: function () { - while(!q.paused && workers < q.concurrency && q.tasks.length){ - - var tasks = q.payload ? - q.tasks.splice(0, q.payload) : - q.tasks.splice(0, q.tasks.length); - - var data = _map(tasks, function (task) { - return task.data; - }); - - if (q.tasks.length === 0) { - q.empty(); - } - workers += 1; - workersList.push(tasks[0]); - var cb = only_once(_next(q, tasks)); - worker(data, cb); - } - }, - length: function () { - return q.tasks.length; - }, - running: function () { - return workers; - }, - workersList: function () { - return workersList; - }, - idle: function() { - return q.tasks.length + workers === 0; - }, - pause: function () { - q.paused = true; - }, - resume: function () { - if (q.paused === false) { return; } - q.paused = false; - var resumeCount = Math.min(q.concurrency, q.tasks.length); - // Need to call q.process once per concurrent - // worker to preserve full concurrency after pause - for (var w = 1; w <= resumeCount; w++) { - async.setImmediate(q.process); - } - } - }; - return q; - } - - async.queue = function (worker, concurrency) { - var q = _queue(function (items, cb) { - worker(items[0], cb); - }, concurrency, 1); - - return q; - }; - - async.priorityQueue = function (worker, concurrency) { - - function _compareTasks(a, b){ - return a.priority - b.priority; - } - - function _binarySearch(sequence, item, compare) { - var beg = -1, - end = sequence.length - 1; - while (beg < end) { - var mid = beg + ((end - beg + 1) >>> 1); - if (compare(item, sequence[mid]) >= 0) { - beg = mid; - } else { - end = mid - 1; - } - } - return beg; - } - - function _insert(q, data, priority, callback) { - if (callback != null && typeof callback !== "function") { - throw new Error("task callback must be a function"); - } - q.started = true; - if (!_isArray(data)) { - data = [data]; - } - if(data.length === 0) { - // call drain immediately if there are no tasks - return async.setImmediate(function() { - q.drain(); - }); - } - _arrayEach(data, function(task) { - var item = { - data: task, - priority: priority, - callback: typeof callback === 'function' ? callback : noop - }; - - q.tasks.splice(_binarySearch(q.tasks, item, _compareTasks) + 1, 0, item); - - if (q.tasks.length === q.concurrency) { - q.saturated(); - } - async.setImmediate(q.process); - }); - } - - // Start with a normal queue - var q = async.queue(worker, concurrency); - - // Override push to accept second parameter representing priority - q.push = function (data, priority, callback) { - _insert(q, data, priority, callback); - }; - - // Remove unshift function - delete q.unshift; - - return q; - }; - - async.cargo = function (worker, payload) { - return _queue(worker, 1, payload); - }; - - function _console_fn(name) { - return _restParam(function (fn, args) { - fn.apply(null, args.concat([_restParam(function (err, args) { - if (typeof console === 'object') { - if (err) { - if (console.error) { - console.error(err); - } - } - else if (console[name]) { - _arrayEach(args, function (x) { - console[name](x); - }); - } - } - })])); - }); - } - async.log = _console_fn('log'); - async.dir = _console_fn('dir'); - /*async.info = _console_fn('info'); - async.warn = _console_fn('warn'); - async.error = _console_fn('error');*/ - - async.memoize = function (fn, hasher) { - var memo = {}; - var queues = {}; - var has = Object.prototype.hasOwnProperty; - hasher = hasher || identity; - var memoized = _restParam(function memoized(args) { - var callback = args.pop(); - var key = hasher.apply(null, args); - if (has.call(memo, key)) { - async.setImmediate(function () { - callback.apply(null, memo[key]); - }); - } - else if (has.call(queues, key)) { - queues[key].push(callback); - } - else { - queues[key] = [callback]; - fn.apply(null, args.concat([_restParam(function (args) { - memo[key] = args; - var q = queues[key]; - delete queues[key]; - for (var i = 0, l = q.length; i < l; i++) { - q[i].apply(null, args); - } - })])); - } - }); - memoized.memo = memo; - memoized.unmemoized = fn; - return memoized; - }; - - async.unmemoize = function (fn) { - return function () { - return (fn.unmemoized || fn).apply(null, arguments); - }; - }; - - function _times(mapper) { - return function (count, iterator, callback) { - mapper(_range(count), iterator, callback); - }; - } - - async.times = _times(async.map); - async.timesSeries = _times(async.mapSeries); - async.timesLimit = function (count, limit, iterator, callback) { - return async.mapLimit(_range(count), limit, iterator, callback); - }; - - async.seq = function (/* functions... */) { - var fns = arguments; - return _restParam(function (args) { - var that = this; - - var callback = args[args.length - 1]; - if (typeof callback == 'function') { - args.pop(); - } else { - callback = noop; - } - - async.reduce(fns, args, function (newargs, fn, cb) { - fn.apply(that, newargs.concat([_restParam(function (err, nextargs) { - cb(err, nextargs); - })])); - }, - function (err, results) { - callback.apply(that, [err].concat(results)); - }); - }); - }; - - async.compose = function (/* functions... */) { - return async.seq.apply(null, Array.prototype.reverse.call(arguments)); - }; - - - function _applyEach(eachfn) { - return _restParam(function(fns, args) { - var go = _restParam(function(args) { - var that = this; - var callback = args.pop(); - return eachfn(fns, function (fn, _, cb) { - fn.apply(that, args.concat([cb])); - }, - callback); - }); - if (args.length) { - return go.apply(this, args); - } - else { - return go; - } - }); - } - - async.applyEach = _applyEach(async.eachOf); - async.applyEachSeries = _applyEach(async.eachOfSeries); - - - async.forever = function (fn, callback) { - var done = only_once(callback || noop); - var task = ensureAsync(fn); - function next(err) { - if (err) { - return done(err); - } - task(next); - } - next(); - }; - - function ensureAsync(fn) { - return _restParam(function (args) { - var callback = args.pop(); - args.push(function () { - var innerArgs = arguments; - if (sync) { - async.setImmediate(function () { - callback.apply(null, innerArgs); - }); - } else { - callback.apply(null, innerArgs); - } - }); - var sync = true; - fn.apply(this, args); - sync = false; - }); - } - - async.ensureAsync = ensureAsync; - - async.constant = _restParam(function(values) { - var args = [null].concat(values); - return function (callback) { - return callback.apply(this, args); - }; - }); - - async.wrapSync = - async.asyncify = function asyncify(func) { - return _restParam(function (args) { - var callback = args.pop(); - var result; - try { - result = func.apply(this, args); - } catch (e) { - return callback(e); - } - // if result is Promise object - if (_isObject(result) && typeof result.then === "function") { - result.then(function(value) { - callback(null, value); - })["catch"](function(err) { - callback(err.message ? err : new Error(err)); - }); - } else { - callback(null, result); - } - }); - }; - - // Node.js - if (typeof module === 'object' && module.exports) { - module.exports = async; - } - // AMD / RequireJS - else if (typeof define === 'function' && define.amd) { - define([], function () { - return async; - }); - } - // included directly via - diff --git a/app/bower_components/iron-data-table/data-table-checkbox.html b/app/bower_components/iron-data-table/data-table-checkbox.html deleted file mode 100644 index 65e22a3..0000000 --- a/app/bower_components/iron-data-table/data-table-checkbox.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - diff --git a/app/bower_components/iron-data-table/data-table-column-filter.html b/app/bower_components/iron-data-table/data-table-column-filter.html deleted file mode 100644 index 508e79c..0000000 --- a/app/bower_components/iron-data-table/data-table-column-filter.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - diff --git a/app/bower_components/iron-data-table/data-table-column-sort.html b/app/bower_components/iron-data-table/data-table-column-sort.html deleted file mode 100644 index 3356750..0000000 --- a/app/bower_components/iron-data-table/data-table-column-sort.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - diff --git a/app/bower_components/iron-data-table/data-table-column.html b/app/bower_components/iron-data-table/data-table-column.html deleted file mode 100644 index b343c32..0000000 --- a/app/bower_components/iron-data-table/data-table-column.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - diff --git a/app/bower_components/iron-data-table/data-table-icons.html b/app/bower_components/iron-data-table/data-table-icons.html deleted file mode 100644 index 8f5f088..0000000 --- a/app/bower_components/iron-data-table/data-table-icons.html +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/app/bower_components/iron-data-table/data-table-row-detail.html b/app/bower_components/iron-data-table/data-table-row-detail.html deleted file mode 100644 index 364332f..0000000 --- a/app/bower_components/iron-data-table/data-table-row-detail.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - diff --git a/app/bower_components/iron-data-table/data-table-row.html b/app/bower_components/iron-data-table/data-table-row.html deleted file mode 100644 index d00b3e8..0000000 --- a/app/bower_components/iron-data-table/data-table-row.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - diff --git a/app/bower_components/iron-data-table/data-table-templatizer-behavior.html b/app/bower_components/iron-data-table/data-table-templatizer-behavior.html deleted file mode 100644 index ad47483..0000000 --- a/app/bower_components/iron-data-table/data-table-templatizer-behavior.html +++ /dev/null @@ -1,150 +0,0 @@ - diff --git a/app/bower_components/iron-data-table/default-styles.html b/app/bower_components/iron-data-table/default-styles.html deleted file mode 100644 index 44db38e..0000000 --- a/app/bower_components/iron-data-table/default-styles.html +++ /dev/null @@ -1,56 +0,0 @@ - diff --git a/app/bower_components/iron-data-table/demo/columns.html b/app/bower_components/iron-data-table/demo/columns.html deleted file mode 100644 index 376b709..0000000 --- a/app/bower_components/iron-data-table/demo/columns.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - - - -
Fork me on GitHub -
- - -

Column Resizing

- - - - -

Column Hiding

- - - - -

Column Reordering

- - - -
- - - diff --git a/app/bower_components/iron-data-table/demo/common.html b/app/bower_components/iron-data-table/demo/common.html deleted file mode 100644 index 7653acb..0000000 --- a/app/bower_components/iron-data-table/demo/common.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/app/bower_components/iron-data-table/demo/details.html b/app/bower_components/iron-data-table/demo/details.html deleted file mode 100644 index f9b6c25..0000000 --- a/app/bower_components/iron-data-table/demo/details.html +++ /dev/null @@ -1,211 +0,0 @@ - - - - - - - - - - Fork me on GitHub -
- - -

Row Details

- - - - -

Custom Expand Toggle

- - - - -

Styling Expand Indicator

- - - - -

Customizing Expansion - Single Item Expanded

- - - -
- - - diff --git a/app/bower_components/iron-data-table/demo/filtering.html b/app/bower_components/iron-data-table/demo/filtering.html deleted file mode 100644 index 99c19b8..0000000 --- a/app/bower_components/iron-data-table/demo/filtering.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - Fork me on GitHub -
- - -

Filtering

- - - - -

Custom Filter Input

- - - - -

Sorting

- - - -
- - - - diff --git a/app/bower_components/iron-data-table/demo/index.html b/app/bower_components/iron-data-table/demo/index.html deleted file mode 100644 index b047dba..0000000 --- a/app/bower_components/iron-data-table/demo/index.html +++ /dev/null @@ -1,177 +0,0 @@ - - - - - - - - - - Fork me on GitHub -
- - -

Static Arrays

- - - - -

Remote Data

- - - - -

"Infinite" Data Source

- - - -
- - - diff --git a/app/bower_components/iron-data-table/demo/selecting.html b/app/bower_components/iron-data-table/demo/selecting.html deleted file mode 100644 index f74ae8f..0000000 --- a/app/bower_components/iron-data-table/demo/selecting.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - - - - Fork me on GitHub -
- - -

Selection Enabled

- - - - -

Multi-Selection

- - - - -

Customizing Selection

- - - -
- - - diff --git a/app/bower_components/iron-data-table/demo/styling.html b/app/bower_components/iron-data-table/demo/styling.html deleted file mode 100644 index 0519d96..0000000 --- a/app/bower_components/iron-data-table/demo/styling.html +++ /dev/null @@ -1,270 +0,0 @@ - - - - - - - - - - Fork me on GitHub -
- - -

Style Mixins

- - - - -

Custom Classes

- - - - -

Customizing Rows and Cells with Hooks

- - - - -

Flex Height

- - - - -

Variable Row Height

- - - - -

Alternative Alignment

- - - -
- - - - diff --git a/app/bower_components/iron-data-table/demo/templates.html b/app/bower_components/iron-data-table/demo/templates.html deleted file mode 100644 index a8f6248..0000000 --- a/app/bower_components/iron-data-table/demo/templates.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - Fork me on GitHub -
- - -

Template Support

- - - - -

Header Templates

- - - - -

Two-Way Binding Support

- - - -
- - - diff --git a/app/bower_components/iron-data-table/demo/users.json b/app/bower_components/iron-data-table/demo/users.json deleted file mode 100644 index b261f77..0000000 --- a/app/bower_components/iron-data-table/demo/users.json +++ /dev/null @@ -1,6607 +0,0 @@ -{ - "results": [ - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "donna", - "last": "davis" - }, - "location": { - "street": "5280 dublin road", - "city": "Limerick", - "state": "hawaii", - "zip": 48371 - }, - "email": "donna.davis@example.com", - "username": "whitebird347", - "password": "salami", - "salt": "cg5uDi8L", - "md5": "4daea30cea63dc12bcb99dda2796d7d8", - "sha1": "f7ae9d7a860cd706e043f9a7ed898c84e4aad6e2", - "sha256": "7769fa6dcd3d795f93b9e3064d13efe1925ce741fd07db982dd0bee390dacf08", - "registered": 1049320624, - "dob": 1303979587, - "phone": "051-860-2380", - "cell": "081-912-8917", - "PPS": "9421093T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/92.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/92.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/92.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "samuel", - "last": "kelley" - }, - "location": { - "street": "8368 dublin road", - "city": "Carrigaline", - "state": "iowa", - "zip": 46037 - }, - "email": "samuel.kelley@example.com", - "username": "redmeercat301", - "password": "word", - "salt": "qzLIfPaU", - "md5": "f365d0bbb9a89026869942231ad1df61", - "sha1": "6428ed2eb402bd1527eb8720720fa9ea0fd3ddd8", - "sha256": "94758427b6a965edae305f940e02551e08a0f06067738732baff69fcabae7649", - "registered": 1213772773, - "dob": 721214121, - "phone": "031-144-9861", - "cell": "081-605-3682", - "PPS": "6652292T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/55.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/55.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/55.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "ms", - "first": "katie", - "last": "butler" - }, - "location": { - "street": "1489 springfield road", - "city": "Gorey", - "state": "georgia", - "zip": 98900 - }, - "email": "katie.butler@example.com", - "username": "beautifulladybug546", - "password": "ontario", - "salt": "7kR5tNFx", - "md5": "09942d76e8e74083ae5128044481f9f5", - "sha1": "14f066f10b6504d56adc0b940396f5dbada8f792", - "sha256": "e8e8b51af3e06b4fee925c0b5974f7018e9d9be41a4a90c30d2edf2c5bd57178", - "registered": 1048146620, - "dob": 1207641587, - "phone": "071-320-5987", - "cell": "081-501-0912", - "PPS": "4026682T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/62.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/62.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/62.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "bernard", - "last": "mitchell" - }, - "location": { - "street": "8055 westmoreland street", - "city": "Birr", - "state": "nebraska", - "zip": 78220 - }, - "email": "bernard.mitchell@example.com", - "username": "whiteleopard236", - "password": "american", - "salt": "9hOkuSSg", - "md5": "c5bae05c92ab423fc7af0c727d5d0cac", - "sha1": "48eb2897f5edf6195b49554b9cffa1831bf57ed1", - "sha256": "05ec933f0f905a393807d3ac0c91b6e9298b481e7d883493ed0c06e2fc506881", - "registered": 1225459592, - "dob": 186051344, - "phone": "051-409-0422", - "cell": "081-849-2590", - "PPS": "1191403T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/69.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/69.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/69.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "amy", - "last": "reynolds" - }, - "location": { - "street": "4495 novara avenue", - "city": "New Ross", - "state": "texas", - "zip": 41573 - }, - "email": "amy.reynolds@example.com", - "username": "greengorilla845", - "password": "cezer121", - "salt": "I2ct7vGl", - "md5": "c365f0b52b04f9d554039466afbd4e74", - "sha1": "266ae3b644be61655db8658d42c15d71065aa5ac", - "sha256": "727242066daa05bff2cdafb414fa4e3933bbec351d1e54c6db694898914c1a31", - "registered": 1031185448, - "dob": 1434406094, - "phone": "041-146-5260", - "cell": "081-156-9645", - "PPS": "5000866TA", - "picture": { - "large": "https://randomuser.me/api/portraits/women/61.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/61.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/61.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "darryl", - "last": "caldwell" - }, - "location": { - "street": "8110 dame street", - "city": "Dundalk", - "state": "delaware", - "zip": 28437 - }, - "email": "darryl.caldwell@example.com", - "username": "goldencat943", - "password": "bean", - "salt": "X0zg0wBq", - "md5": "a4f0fc75334340ec2d7121d28fc33c50", - "sha1": "71c6c6a8a2614df0dbd66844a99266afa81eb680", - "sha256": "593c46639b7115cc1ef523cbb443598fd0cb1dafa4e40e87b6fadfc52fc3e7ac", - "registered": 1149661666, - "dob": 1259061941, - "phone": "051-919-0654", - "cell": "081-425-5272", - "PPS": "3496761T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/6.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/6.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/6.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "mrs", - "first": "phoebe", - "last": "evans" - }, - "location": { - "street": "1316 dame street", - "city": "Passage West", - "state": "idaho", - "zip": 29068 - }, - "email": "phoebe.evans@example.com", - "username": "lazypanda428", - "password": "carver", - "salt": "uqxdJYc2", - "md5": "3783646659df171427fc2ae178ce546f", - "sha1": "81a444e3808bf61b7e0d06f72bf72ddf4f534e6e", - "sha256": "b6eb5bb8eae1ac45bab75750553ddd9b73c1c3e330882a713ff3a8be7c4088c2", - "registered": 1416096997, - "dob": 141389117, - "phone": "021-003-3034", - "cell": "081-639-4543", - "PPS": "3960786T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/15.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/15.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/15.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "sean", - "last": "peterson" - }, - "location": { - "street": "3097 patrick street", - "city": "Carlow", - "state": "indiana", - "zip": 47123 - }, - "email": "sean.peterson@example.com", - "username": "crazyelephant306", - "password": "nong", - "salt": "a4RZfiLh", - "md5": "b4ed048e33c66ad04274d726c34b2314", - "sha1": "d6bd0571ec4ba6cbc4f8a8efd3dfae31d31b3bbd", - "sha256": "6de32c67288a4f7b4bd74bb29f49c0664b05992c28e66affa0bc6fc001780ff8", - "registered": 1421018374, - "dob": 39681530, - "phone": "031-580-9758", - "cell": "081-119-7168", - "PPS": "0776635T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/18.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/18.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/18.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "dean", - "last": "lynch" - }, - "location": { - "street": "2632 herbert road", - "city": "Dungarvan", - "state": "nevada", - "zip": 21434 - }, - "email": "dean.lynch@example.com", - "username": "yellowduck200", - "password": "imagine", - "salt": "02i3heAx", - "md5": "b33c38c84beaabeb079dcc64a321c0eb", - "sha1": "8f9ea0cba5c1cf5853161e93fd11d2cda119fef1", - "sha256": "751c095081b68881561c66bb4ed7376a4d1e3a93409fe0e23235175c5e1b521f", - "registered": 1367198788, - "dob": 1268264383, - "phone": "041-282-0565", - "cell": "081-067-2440", - "PPS": "4614328T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/44.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/44.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/44.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "julian", - "last": "obrien" - }, - "location": { - "street": "7154 grove road", - "city": "Ennis", - "state": "michigan", - "zip": 65614 - }, - "email": "julian.obrien@example.com", - "username": "bigtiger177", - "password": "swordfis", - "salt": "JUwVaEJz", - "md5": "51910d28130cca8e47c4ce5733fa5c5f", - "sha1": "cf73a249cc60b476837c18afa2199c4bbd6b6c08", - "sha256": "5eafbfee086575b0270b015fe3f0a7abaab000b8e437d38a6c03d095f7a2e48a", - "registered": 1101261788, - "dob": 1140751968, - "phone": "041-937-0935", - "cell": "081-369-8835", - "PPS": "3087193T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/39.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/39.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/39.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "dale", - "last": "davidson" - }, - "location": { - "street": "9431 south street", - "city": "Sallins", - "state": "illinois", - "zip": 31167 - }, - "email": "dale.davidson@example.com", - "username": "blueleopard905", - "password": "emilie", - "salt": "DAVqW9NB", - "md5": "11c379b6aca3cc28814b7ba1ebcd92c8", - "sha1": "088bc696e9629fc4d41007204adfd10d21766043", - "sha256": "e74388757dcf1ec71f5f054e62f31972edd6b8faef455c18c11359b50827b418", - "registered": 946246212, - "dob": 676613110, - "phone": "071-954-0675", - "cell": "081-052-7566", - "PPS": "9238626T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/71.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/71.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/71.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "bruce", - "last": "green" - }, - "location": { - "street": "2119 new street", - "city": "Athenry", - "state": "rhode island", - "zip": 86045 - }, - "email": "bruce.green@example.com", - "username": "orangeduck130", - "password": "junk", - "salt": "XWbxSWuB", - "md5": "4fee340e09aca1e549ad1eef81f3a154", - "sha1": "c7d2ddb3914556bbe450a83127373ea857108645", - "sha256": "dfaa32dbeed0d7131e5b30b8d54bd2c2ab38e8c45e5424207f88efc3a189eaf0", - "registered": 1425148157, - "dob": 1312254375, - "phone": "021-806-1434", - "cell": "081-309-7604", - "PPS": "4196554T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/38.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/38.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/38.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "marvin", - "last": "rice" - }, - "location": { - "street": "2674 high street", - "city": "Carrick-on-Shannon", - "state": "virginia", - "zip": 49612 - }, - "email": "marvin.rice@example.com", - "username": "brownrabbit458", - "password": "eric", - "salt": "GJe5CfZ2", - "md5": "bbe3b9e1304ccce0714e941998efe133", - "sha1": "35bc119ea1b7d6e7bf173583101e6d554e906532", - "sha256": "336fce8c7c94556e20f9ccd955d613cf887b023872a0766e60b55b2d26559b84", - "registered": 1360241211, - "dob": 957296444, - "phone": "051-346-1073", - "cell": "081-345-7007", - "PPS": "4304592T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/39.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/39.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/39.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "patrick", - "last": "lucas" - }, - "location": { - "street": "1321 westmoreland street", - "city": "Gorey", - "state": "minnesota", - "zip": 90029 - }, - "email": "patrick.lucas@example.com", - "username": "beautifulcat705", - "password": "imation", - "salt": "HQztOe8h", - "md5": "0d351ef795b658e6e8d2f17b2499b697", - "sha1": "c6de67b0130ba912d690dfba2174c0a2ca3e2c2f", - "sha256": "5e1fb6d6967f0a1754e290f39f2d76a40e979f930c2f85f604ed4363f4f66c80", - "registered": 961938671, - "dob": 1138871394, - "phone": "021-597-6780", - "cell": "081-123-9880", - "PPS": "6999189T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/60.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/60.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/60.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "byron", - "last": "stanley" - }, - "location": { - "street": "5248 mill road", - "city": "Newbridge", - "state": "minnesota", - "zip": 47504 - }, - "email": "byron.stanley@example.com", - "username": "beautifulmeercat207", - "password": "jamie", - "salt": "mlTkTYG2", - "md5": "bcb2ec9a19af365221039596827ab02d", - "sha1": "e9df186606bc7985091c608cb8934326edd63702", - "sha256": "3bfcbd14705d69a320d228c48db40ac1be6a77c635ef8747b2b1363b7c9c88cc", - "registered": 1116052802, - "dob": 1261187893, - "phone": "051-286-1918", - "cell": "081-139-3596", - "PPS": "4699871T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/91.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/91.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/91.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "victoria", - "last": "burke" - }, - "location": { - "street": "8648 the green", - "city": "Westport", - "state": "pennsylvania", - "zip": 15319 - }, - "email": "victoria.burke@example.com", - "username": "silverbutterfly151", - "password": "cinema", - "salt": "911VD90L", - "md5": "2767eb33204b0f49361e51e1afc37b05", - "sha1": "e81618ee2ede8df4edea7fe1bc8f11ae11942ac4", - "sha256": "c13043198a2f142c47e3fee6ab4de8a9c8f8e81b6ad6733d6fb9de34ce3e2c5f", - "registered": 1079727003, - "dob": 209575261, - "phone": "061-525-8894", - "cell": "081-317-9246", - "PPS": "1428924T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/73.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/73.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/73.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "erik", - "last": "hall" - }, - "location": { - "street": "7843 novara avenue", - "city": "Enniscorthy", - "state": "rhode island", - "zip": 48169 - }, - "email": "erik.hall@example.com", - "username": "redswan546", - "password": "rabbit", - "salt": "725kIhMI", - "md5": "d5518c45b5bfd7bbbf5ac27fd44ef22e", - "sha1": "89832680dcaeffc68ddab59ca1117c94e2628cfe", - "sha256": "333123fd4bcb300bf7567ae8fae099c23e1c0f2c92ea350e3fede70e690559ce", - "registered": 1137265844, - "dob": 660849089, - "phone": "051-585-2863", - "cell": "081-293-8087", - "PPS": "4806054T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/76.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/76.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/76.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "mrs", - "first": "patricia", - "last": "ferguson" - }, - "location": { - "street": "7663 the avenue", - "city": "Roscommon", - "state": "new hampshire", - "zip": 12191 - }, - "email": "patricia.ferguson@example.com", - "username": "smallsnake457", - "password": "1qwerty", - "salt": "BmI270Zq", - "md5": "b09177f40cc3cfa95ec40536f3d568ef", - "sha1": "2874830998c5753a565f4d334d038429fbd989a5", - "sha256": "4a4a4fe5d8dd970803a5b52bd62a1664573b1b3e0ca074a5c931b6da4360f8dd", - "registered": 984191042, - "dob": 791480953, - "phone": "071-897-4142", - "cell": "081-433-6910", - "PPS": "2286077T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/56.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/56.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/56.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "ms", - "first": "paige", - "last": "coleman" - }, - "location": { - "street": "4986 church lane", - "city": "Shannon", - "state": "iowa", - "zip": 31995 - }, - "email": "paige.coleman@example.com", - "username": "ticklishpanda176", - "password": "services", - "salt": "6VAn10QU", - "md5": "b74593bb5789ecf13dcd1580af84b0e4", - "sha1": "e468d2f6e7e31c53ff258549a2f5de2296a60163", - "sha256": "b17aff0d7955fec0bd7726bd53f67e857119b75e1f75abb14254a730dd547b1a", - "registered": 1437527307, - "dob": 1208130577, - "phone": "071-227-9579", - "cell": "081-685-2623", - "PPS": "2062023T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/28.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/28.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/28.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "ellie", - "last": "boyd" - }, - "location": { - "street": "9663 station road", - "city": "Wexford", - "state": "massachusetts", - "zip": 22414 - }, - "email": "ellie.boyd@example.com", - "username": "smallpeacock525", - "password": "last", - "salt": "medo8Wcb", - "md5": "ab417f2fc1107d86986de269791a80e1", - "sha1": "362734874d11c27d0096e79d926f89296793c810", - "sha256": "5d60b902227f772d622b204806126ee93f256c7d4c23cd336dd2623c6c2644e7", - "registered": 1105601368, - "dob": 550621755, - "phone": "031-452-0869", - "cell": "081-335-2972", - "PPS": "1450349T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/12.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/12.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/12.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "caitlin", - "last": "banks" - }, - "location": { - "street": "3035 patrick street", - "city": "Portmarnock", - "state": "virginia", - "zip": 10745 - }, - "email": "caitlin.banks@example.com", - "username": "smallbutterfly786", - "password": "hun999", - "salt": "pTIA8rVH", - "md5": "5b0e3432a378488be028483764f7ebe6", - "sha1": "a09f2beadc3f085ab68ebdf134ca8686c93cd18b", - "sha256": "d4bd3f611cf0c2d0330f70199b03aae17dfb6039c1fb638dd88fd562905d5f22", - "registered": 946922942, - "dob": 838569832, - "phone": "031-171-6317", - "cell": "081-615-0174", - "PPS": "2142867T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/0.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/0.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/0.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "elizabeth", - "last": "adams" - }, - "location": { - "street": "2665 church road", - "city": "Shannon", - "state": "michigan", - "zip": 85902 - }, - "email": "elizabeth.adams@example.com", - "username": "lazycat327", - "password": "script", - "salt": "cWK72BrU", - "md5": "2f453c9a27ce2a09a4f62cc84843d91f", - "sha1": "61363afc296518adf2799967f7daba724845ee32", - "sha256": "f1eabdf3048f36d6d378ef86f3c8027e71f5687c55f81d1cd801770ee6d6c5bc", - "registered": 1257832751, - "dob": 1017164145, - "phone": "061-239-6637", - "cell": "081-623-1497", - "PPS": "5975075T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/36.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/36.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/36.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "faith", - "last": "bailey" - }, - "location": { - "street": "8625 herbert road", - "city": "Balbriggan", - "state": "hawaii", - "zip": 54990 - }, - "email": "faith.bailey@example.com", - "username": "bigdog335", - "password": "jermaine", - "salt": "RmmlNvhQ", - "md5": "6ed5a538e263d5d5d363fb174506d251", - "sha1": "96e3c9a20d7f280c6b122dd3d204d8d2ca412983", - "sha256": "e5ed351b970f18acdbf8e063951ca7e4dbc9f0243e673b06b7ee227e8886b5b8", - "registered": 1274283738, - "dob": 120827294, - "phone": "041-415-9831", - "cell": "081-374-2790", - "PPS": "1910390T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/39.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/39.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/39.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "sofia", - "last": "jackson" - }, - "location": { - "street": "1364 rochestown road", - "city": "Cobh", - "state": "arizona", - "zip": 80561 - }, - "email": "sofia.jackson@example.com", - "username": "brownlion712", - "password": "japanees", - "salt": "fNKqivy2", - "md5": "cfed484b974f7a4ff7698fb55491e368", - "sha1": "d309c0ec9807e562f5dcf808bf9b77cfbe177a4a", - "sha256": "0b605eaaff2a9702824fa700bcaaa2b4abe3cea472af28dca027d3edd7545222", - "registered": 1158588936, - "dob": 21216979, - "phone": "011-743-6681", - "cell": "081-927-8325", - "PPS": "2076357T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/20.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/20.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/20.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "johnni", - "last": "osullivan" - }, - "location": { - "street": "3066 novara avenue", - "city": "Carrickmacross", - "state": "nebraska", - "zip": 27756 - }, - "email": "johnni.osullivan@example.com", - "username": "smallbird531", - "password": "twist", - "salt": "XmmU5gu2", - "md5": "2cca1d8463ed2fa3e2c2ac5a40764256", - "sha1": "a2b0fcb5864d6074feea22231990fc6c554d87da", - "sha256": "b381d26ee1b8ea2c23ffbc76a2a48398075b74bad51f8c1953d33bb1fecab5e4", - "registered": 1390183703, - "dob": 1114776667, - "phone": "011-623-9067", - "cell": "081-998-6623", - "PPS": "1326353T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/67.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/67.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/67.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "soham", - "last": "beck" - }, - "location": { - "street": "4620 alexander road", - "city": "Tramore", - "state": "vermont", - "zip": 23653 - }, - "email": "soham.beck@example.com", - "username": "silverrabbit876", - "password": "maxwell", - "salt": "vsWjKfX1", - "md5": "7e42a6aeceeb3d4776a69176afddfc1e", - "sha1": "a6848891f94d3eb7aa6d878cdd96fa667313f5e0", - "sha256": "b7aebfa0106a807bce3ebc4e9e4d7ab621b342a2e77135c9225de9e9df8a0d23", - "registered": 1203557177, - "dob": 1253514027, - "phone": "011-197-8946", - "cell": "081-406-6339", - "PPS": "0576879T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/36.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/36.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/36.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "mrs", - "first": "nicole", - "last": "scott" - }, - "location": { - "street": "1010 o'connell street", - "city": "Dungarvan", - "state": "north carolina", - "zip": 22715 - }, - "email": "nicole.scott@example.com", - "username": "beautifulswan426", - "password": "foster", - "salt": "ltmtfO2Q", - "md5": "5fd9a2c83e174b17ef307b167046ada4", - "sha1": "f8bb8593e656b63f15b8425f7f8d9e81801e27a5", - "sha256": "f6b85cd2510de68646b71eef348169665b00152d5adc3264a9b3f4a76a550c9c", - "registered": 1174801344, - "dob": 727433403, - "phone": "041-264-1930", - "cell": "081-128-5606", - "PPS": "5134609T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/53.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/53.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/53.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "judy", - "last": "harris" - }, - "location": { - "street": "9473 richmond park", - "city": "Buncrana", - "state": "mississippi", - "zip": 21796 - }, - "email": "judy.harris@example.com", - "username": "heavydog597", - "password": "julius", - "salt": "LOUDE0yE", - "md5": "907dd9613063522599654b1cc9c4e854", - "sha1": "e91c8140e86d16f2564fe07a2bda18f4b5831cb8", - "sha256": "45b27f6e395b5f38ae3ab77635537724fae98b7dce87a27f990d2760357e4af2", - "registered": 983559211, - "dob": 937032421, - "phone": "041-984-0576", - "cell": "081-483-0893", - "PPS": "9264408T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/69.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/69.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/69.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "ms", - "first": "judith", - "last": "lowe" - }, - "location": { - "street": "6513 south street", - "city": "Sligo", - "state": "north carolina", - "zip": 95399 - }, - "email": "judith.lowe@example.com", - "username": "redleopard225", - "password": "sebring", - "salt": "JhO4uDaN", - "md5": "7bdcbea3a41a15e10bc094382bb23701", - "sha1": "806cfe6ad813820c2e6a7f5425f97bf2ebc6b830", - "sha256": "11ce272f4f740897c4582dea1d3d1bf22a9ea290cacf79cd01d1a708a5e7a6e6", - "registered": 1206784824, - "dob": 112689902, - "phone": "051-658-6491", - "cell": "081-849-2494", - "PPS": "8273606T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/45.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/45.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/45.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "ms", - "first": "karen", - "last": "hunter" - }, - "location": { - "street": "8546 park avenue", - "city": "Wexford", - "state": "hawaii", - "zip": 43488 - }, - "email": "karen.hunter@example.com", - "username": "silverelephant809", - "password": "stan", - "salt": "oIf1dvzr", - "md5": "e2b075f8e451f7923074ec2d6cac197b", - "sha1": "d101c7caaa7a1aeebc6ca3661bd27895b3b21491", - "sha256": "1b0211caf8faf9eb4efabb41579f6590297ae3e91c794c682d41f12a2929862c", - "registered": 1244201725, - "dob": 1422443531, - "phone": "061-634-6234", - "cell": "081-502-1368", - "PPS": "7520868TA", - "picture": { - "large": "https://randomuser.me/api/portraits/women/47.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/47.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/47.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "danielle", - "last": "brown" - }, - "location": { - "street": "5700 rochestown road", - "city": "Newcastle West", - "state": "minnesota", - "zip": 16345 - }, - "email": "danielle.brown@example.com", - "username": "orangefrog592", - "password": "tomahawk", - "salt": "QyGsdSzN", - "md5": "d9dca83ea56946271ed3da42ba444f2d", - "sha1": "d80c3e53a671dff83c9ae784e65d8d21ff72260f", - "sha256": "812b079fa6afab4fa9308b8d3fb1996a27654b57e24c8959011e75603e373447", - "registered": 960377588, - "dob": 661611836, - "phone": "031-699-8634", - "cell": "081-593-5500", - "PPS": "1158715T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/77.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/77.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/77.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "seamus", - "last": "shelton" - }, - "location": { - "street": "4726 school lane", - "city": "Skerries", - "state": "arkansas", - "zip": 22638 - }, - "email": "seamus.shelton@example.com", - "username": "organicrabbit642", - "password": "luther", - "salt": "sUxC8HCo", - "md5": "aa769d38dd59093ca9c1ec2015753a58", - "sha1": "364b1792d0b39ca81274e63fc10786e9be604fd9", - "sha256": "09a827e570013c9341e1099518caa66aba20fb6a7a1b94ba70f27d00c9ca5797", - "registered": 970079941, - "dob": 496914698, - "phone": "031-181-4917", - "cell": "081-941-8833", - "PPS": "1135230T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/95.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/95.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/95.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "kent", - "last": "curtis" - }, - "location": { - "street": "7666 denny street", - "city": "Clonmel", - "state": "oregon", - "zip": 76673 - }, - "email": "kent.curtis@example.com", - "username": "blueduck552", - "password": "bonita", - "salt": "4IlLwfdB", - "md5": "886e6762c3f4cd592fb21d4a0e17bb50", - "sha1": "7121ea59d56f385fcd6cdc4f856d666f54d65ead", - "sha256": "87dae3dddf39999f8ad505afa41e42b068b4f77da8c8917f8d606dfc9602861f", - "registered": 1285189811, - "dob": 717500304, - "phone": "011-663-1648", - "cell": "081-611-1609", - "PPS": "7985150T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/99.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/99.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/99.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "leslie", - "last": "crawford" - }, - "location": { - "street": "5082 the grove", - "city": "Carrick-on-Shannon", - "state": "massachusetts", - "zip": 38375 - }, - "email": "leslie.crawford@example.com", - "username": "crazylion732", - "password": "pheonix", - "salt": "mtpZij1l", - "md5": "62b599ff37d118a217d4be88823bff86", - "sha1": "2b1eadf72c455fd080133b957e58fe996153bfd2", - "sha256": "642a6bb09e044d9ddc9dd452ff3bacfbacbcb3127bb2583ff23e17b9eec5c7e6", - "registered": 1215107072, - "dob": 48595284, - "phone": "041-934-6235", - "cell": "081-287-2661", - "PPS": "5183321T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/87.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/87.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/87.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "frankie", - "last": "arnold" - }, - "location": { - "street": "5708 westmoreland street", - "city": "Roscrea", - "state": "south carolina", - "zip": 90290 - }, - "email": "frankie.arnold@example.com", - "username": "smallbear968", - "password": "foot", - "salt": "7nczsttw", - "md5": "902a8c3b8fc713d501b35fa6dd28c0ed", - "sha1": "9424c02d82274a58b9597c773997cf4a8bada59a", - "sha256": "6ebc207c3970447ea04d5a5bcac0c382a71b7836a874f305664d2e9a5bc676b6", - "registered": 996467614, - "dob": 391393818, - "phone": "051-811-6291", - "cell": "081-111-7803", - "PPS": "3779177T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/75.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/75.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/75.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "mrs", - "first": "debbie", - "last": "rhodes" - }, - "location": { - "street": "8954 woodlawn avenue", - "city": "Mountmellick", - "state": "texas", - "zip": 63870 - }, - "email": "debbie.rhodes@example.com", - "username": "bluesnake373", - "password": "kuang", - "salt": "umSXhfDN", - "md5": "9856e4ee1a30b76697b90e05adac9576", - "sha1": "1e365b2959d7337743c14ac81ee0b7e8380a38ac", - "sha256": "0bcf97dadb5beb8763a494ecb5960ca1c12d3e09e228c060ef1b63103b4ae5d8", - "registered": 1135666304, - "dob": 22560, - "phone": "071-232-5752", - "cell": "081-757-2469", - "PPS": "4516761T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/96.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/96.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/96.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "pat", - "last": "gregory" - }, - "location": { - "street": "3472 new road", - "city": "Dungarvan", - "state": "wyoming", - "zip": 19450 - }, - "email": "pat.gregory@example.com", - "username": "goldenelephant357", - "password": "score", - "salt": "MALCd3ct", - "md5": "dc7046a7e3c2b99a3cc1ed2517d96a51", - "sha1": "da67abfb3d106659fe984f11d7ef4a751895a340", - "sha256": "0d65a66b78ae0f8385baab9dff4e3f824aa75a001d18ff2fbbc401e7c304c293", - "registered": 1371091796, - "dob": 1212334027, - "phone": "051-373-5526", - "cell": "081-334-9644", - "PPS": "8460770T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/10.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/10.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/10.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "freddie", - "last": "perkins" - }, - "location": { - "street": "5625 dame street", - "city": "Dublin", - "state": "maryland", - "zip": 12928 - }, - "email": "freddie.perkins@example.com", - "username": "greenbird620", - "password": "kawasaki", - "salt": "wC1qEEJ3", - "md5": "d86bb674622fb15b290f81d389418266", - "sha1": "d942a0ca1c59e19a9135d3095c26cd4af5daa023", - "sha256": "fa953e51aadeeee9e40ecbae6e1e85b0db89cc91a8cacbad315ba2c1a7a161a0", - "registered": 1044344428, - "dob": 804583283, - "phone": "071-964-0117", - "cell": "081-667-8823", - "PPS": "4061324T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/95.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/95.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/95.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "phil", - "last": "fleming" - }, - "location": { - "street": "2793 grove road", - "city": "Buncrana", - "state": "new jersey", - "zip": 17020 - }, - "email": "phil.fleming@example.com", - "username": "smallbutterfly880", - "password": "intercourse", - "salt": "8rrqBiBF", - "md5": "bcebe16f9492c7b962bdaa86c12cfec2", - "sha1": "b330e1cc53c55bb428ab56a40882ed585bc58ccf", - "sha256": "b3565ed5faecc74cd3b0d2788a81c6884532136b4373e7366d23a1e5ee059e11", - "registered": 990281226, - "dob": 996881396, - "phone": "051-267-7038", - "cell": "081-146-1793", - "PPS": "9745738T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/58.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/58.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/58.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "ms", - "first": "scarlett", - "last": "adams" - }, - "location": { - "street": "2209 north road", - "city": "Ballybofey-Stranorlar", - "state": "montana", - "zip": 83344 - }, - "email": "scarlett.adams@example.com", - "username": "tinysnake795", - "password": "melanie", - "salt": "R1Zfwprb", - "md5": "19beeb4490f81f0476255ee8f68bcce7", - "sha1": "3fc82223b536c2bfe07b6c6bd15390c38ed070a1", - "sha256": "e728b8bf4cd794e310f18a1d8d164c91376e8060dc858767badf493b0f8b737d", - "registered": 1337704255, - "dob": 577467779, - "phone": "031-652-2246", - "cell": "081-939-4978", - "PPS": "5320583T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/50.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/50.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/50.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "ms", - "first": "ashley", - "last": "peterson" - }, - "location": { - "street": "8770 manor road", - "city": "Wicklow", - "state": "new jersey", - "zip": 20058 - }, - "email": "ashley.peterson@example.com", - "username": "blackdog820", - "password": "phil", - "salt": "oURfpAan", - "md5": "7789a1bdf61b8324022de69c7209f966", - "sha1": "316a2ba9c5fa96afee4e302a0c89b663ef54b50d", - "sha256": "cb8e847087b506e637663e395b2e8fd93925fa2071011021fdd829c3f9d81f55", - "registered": 1435721577, - "dob": 347555370, - "phone": "031-122-9499", - "cell": "081-422-6581", - "PPS": "7243309T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/60.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/60.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/60.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "shaun", - "last": "rose" - }, - "location": { - "street": "9559 grange road", - "city": "Carlow", - "state": "tennessee", - "zip": 92314 - }, - "email": "shaun.rose@example.com", - "username": "brownfrog497", - "password": "dandfa", - "salt": "uvuaK5vK", - "md5": "d3d34a36bed02fd0fb33e15d28f467f4", - "sha1": "a4ab79ff501165d4a440dea64981dd73040a692c", - "sha256": "90c3ae63b6c3a4862ab0dc7f0470611e98c8a47a675ee557e4b489aff2c25245", - "registered": 1343743910, - "dob": 1107664240, - "phone": "041-009-0707", - "cell": "081-702-4079", - "PPS": "8014644T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/38.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/38.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/38.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "luis", - "last": "sanders" - }, - "location": { - "street": "1639 the avenue", - "city": "Tuam", - "state": "tennessee", - "zip": 50888 - }, - "email": "luis.sanders@example.com", - "username": "beautifulswan473", - "password": "glacier", - "salt": "OyTdUfj8", - "md5": "cfe12e19895f05ebffa9abf593bf0371", - "sha1": "21dc3abebd31ceb6c0c694c75c3f7eba7d8e6636", - "sha256": "12d15ec5b9444d6b337096214c7dd35d8d7d8c30e67a0e5a1f7bcc90fe86bb10", - "registered": 974366810, - "dob": 1011554446, - "phone": "011-762-8661", - "cell": "081-654-5427", - "PPS": "4339157T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/17.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/17.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/17.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "mrs", - "first": "vanessa", - "last": "obrien" - }, - "location": { - "street": "5979 new street", - "city": "Dublin", - "state": "wisconsin", - "zip": 89748 - }, - "email": "vanessa.obrien@example.com", - "username": "beautifulbear172", - "password": "women", - "salt": "Pel4FwDA", - "md5": "dfbbd730eb06d37a27bb97a985509f3b", - "sha1": "afd5a19adba5172809bf78e536b578c7993ca789", - "sha256": "34f531515ee807e4a0cd94da54a3cb008e8e1cc4bfad74b5e179595a2c8c4b9b", - "registered": 938327549, - "dob": 591575278, - "phone": "011-138-6478", - "cell": "081-806-3491", - "PPS": "7394103T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/19.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/19.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/19.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "earl", - "last": "curtis" - }, - "location": { - "street": "7968 church road", - "city": "Ballina", - "state": "missouri", - "zip": 40289 - }, - "email": "earl.curtis@example.com", - "username": "browngorilla444", - "password": "odessa", - "salt": "ezv64YhS", - "md5": "675f14b2c00a4b5d1fca8f47e3fc4a1c", - "sha1": "b2abe8d2de84718cf5403433815ee8826bf5c80d", - "sha256": "67d157ef9d695d2ca0af54c9e426058719207fbd2ee445e3bf7d78c80e2f0cbd", - "registered": 1219715892, - "dob": 738746467, - "phone": "071-494-5895", - "cell": "081-980-0748", - "PPS": "8028992T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/7.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/7.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/7.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "timmothy", - "last": "horton" - }, - "location": { - "street": "3827 the grove", - "city": "Celbridge", - "state": "delaware", - "zip": 89826 - }, - "email": "timmothy.horton@example.com", - "username": "heavygorilla437", - "password": "cobain", - "salt": "fUz43tk8", - "md5": "933350a1886fc8e1a319605358296d29", - "sha1": "4628c2e5f4274509cd665283833b18b190b4b1c2", - "sha256": "e309cab9bee928cd461bf6b3ce013463a6d7fca0c847c5a72e5ec985f88a282b", - "registered": 1357145696, - "dob": 842445852, - "phone": "021-649-1001", - "cell": "081-094-9376", - "PPS": "0183764T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/97.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/97.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/97.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "jimmy", - "last": "wade" - }, - "location": { - "street": "2250 alexander road", - "city": "Kilkenny", - "state": "texas", - "zip": 64107 - }, - "email": "jimmy.wade@example.com", - "username": "greenostrich715", - "password": "baura", - "salt": "nBJGIlDv", - "md5": "f249198f87975c3132e911092e3ebe76", - "sha1": "945a5392c13f2964dbbfda27fe87ecf1e704aabf", - "sha256": "4b989ef93fa700f93c691fcd7cdd1d57ee6f05e5b4bc25febc6b8ea116d4aa14", - "registered": 1268625008, - "dob": 247541512, - "phone": "031-545-4491", - "cell": "081-839-5522", - "PPS": "9589127T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/94.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/94.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/94.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "walter", - "last": "elliott" - }, - "location": { - "street": "8004 richmond park", - "city": "Mallow", - "state": "alabama", - "zip": 48069 - }, - "email": "walter.elliott@example.com", - "username": "tinykoala336", - "password": "milo", - "salt": "nMin1I5m", - "md5": "88f2979c2bd34517095708ebe2ae04be", - "sha1": "18ded848c7816d447b669b7607e5393076d65e57", - "sha256": "5872aa45e679d69e39341f6ddcb51186327884bfa230f62b6ca89cc175314f9f", - "registered": 937214776, - "dob": 1274947147, - "phone": "061-551-8752", - "cell": "081-786-7521", - "PPS": "7036927T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/56.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/56.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/56.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "jay", - "last": "edwards" - }, - "location": { - "street": "4409 highfield road", - "city": "Gorey", - "state": "missouri", - "zip": 36918 - }, - "email": "jay.edwards@example.com", - "username": "yellowbird670", - "password": "home", - "salt": "qbXQCrhi", - "md5": "1376f0c1b9818e537d5150a705998777", - "sha1": "3501c5693e3a6ecf3bbb122f91de9e80802299f6", - "sha256": "4cd9c857b7d65233f495d05114092a54592aefdaae75995b1a23b3e46ff6c994", - "registered": 1143181456, - "dob": 1291058499, - "phone": "021-472-1213", - "cell": "081-763-2967", - "PPS": "8249286T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/79.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/79.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/79.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "louise", - "last": "hansen" - }, - "location": { - "street": "7897 o'connell avenue", - "city": "Cavan", - "state": "utah", - "zip": 41640 - }, - "email": "louise.hansen@example.com", - "username": "beautifulgorilla680", - "password": "0069", - "salt": "6fm9Dvj4", - "md5": "2697741f91f19f48000ba1bbef4d983a", - "sha1": "31231f2322c31b155591f1a7c5821a5fb5a224a1", - "sha256": "a9d651531d4f120a235fcc7f4f774338a556861d6a4c23786745ab7d45177c68", - "registered": 1417580205, - "dob": 1271698976, - "phone": "041-866-8416", - "cell": "081-040-9882", - "PPS": "2999953T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/8.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/8.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/8.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "ms", - "first": "donna", - "last": "howard" - }, - "location": { - "street": "3414 church road", - "city": "Roscrea", - "state": "colorado", - "zip": 83231 - }, - "email": "donna.howard@example.com", - "username": "orangeswan108", - "password": "masters", - "salt": "RjphNttf", - "md5": "d4820ea38025c13ec00557d0c13c78f7", - "sha1": "93d42c00fe902ade4554d70581c8e6acbd411cfc", - "sha256": "bd27a433badf4801fa6a677506816f41c3489441ded9c1e7fab861544a1bd1e7", - "registered": 948441932, - "dob": 682860922, - "phone": "061-827-5776", - "cell": "081-561-2477", - "PPS": "7384803T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/55.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/55.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/55.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "theodore", - "last": "welch" - }, - "location": { - "street": "8866 green lane", - "city": "Dublin", - "state": "south dakota", - "zip": 85778 - }, - "email": "theodore.welch@example.com", - "username": "redbird253", - "password": "xerxes", - "salt": "Umdu0NhT", - "md5": "42d46013ae469c765c8ba327575685f3", - "sha1": "62aa1fe8a0ed6721d7081522e14f1a0dd48d6649", - "sha256": "f46ee83788027a9a01b22c688b95407573dbe19f78f9957ec3d12289e820009b", - "registered": 1077833749, - "dob": 733282514, - "phone": "011-803-1177", - "cell": "081-369-8020", - "PPS": "0235051T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/70.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/70.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/70.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "ms", - "first": "ashley", - "last": "green" - }, - "location": { - "street": "4786 park lane", - "city": "Ashbourne", - "state": "kansas", - "zip": 30027 - }, - "email": "ashley.green@example.com", - "username": "blackwolf336", - "password": "knockers", - "salt": "1Umapyhg", - "md5": "81e1ee6ab7cb3f70f45eca082a824c3f", - "sha1": "4f325d92ab54b9da28839b2e2c4e6e86d611faae", - "sha256": "e5e769d4aa12edccd9bd55146f44884b75b137e9df70c57b7235037714af6d5b", - "registered": 1177797709, - "dob": 1369192498, - "phone": "061-898-4607", - "cell": "081-298-9116", - "PPS": "0775356TA", - "picture": { - "large": "https://randomuser.me/api/portraits/women/55.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/55.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/55.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "cathy", - "last": "barnes" - }, - "location": { - "street": "8409 strand road", - "city": "Trim", - "state": "oregon", - "zip": 77052 - }, - "email": "cathy.barnes@example.com", - "username": "silverduck666", - "password": "pasword", - "salt": "iZQYaYHf", - "md5": "14121fef740cc978eeda7e0a6171c9f2", - "sha1": "7ad05092c7db57b6086fbf0114edee44047d67fc", - "sha256": "8ece7515641bb5d519383277b80267cdd4e6cc8083e25e55ac2df595d3e2b0d6", - "registered": 988321654, - "dob": 1356336628, - "phone": "031-299-3922", - "cell": "081-047-2644", - "PPS": "9805269T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/15.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/15.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/15.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "ms", - "first": "lauren", - "last": "williamson" - }, - "location": { - "street": "7647 denny street", - "city": "Clonakilty", - "state": "georgia", - "zip": 52539 - }, - "email": "lauren.williamson@example.com", - "username": "whitebear840", - "password": "thunderb", - "salt": "QrB8uNWf", - "md5": "116c662f5f8cd884f207e36cd90419bf", - "sha1": "82599670adad9a907891abe76051cd40d6185151", - "sha256": "20dd4d79f7b56e3fbcffee817b9bbe14a9d5d25ebb30015e71a7272d824ec6de", - "registered": 1081558079, - "dob": 1072446015, - "phone": "041-595-6782", - "cell": "081-318-8013", - "PPS": "8679840T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/93.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/93.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/93.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "ms", - "first": "laura", - "last": "richardson" - }, - "location": { - "street": "9110 manor road", - "city": "Kilcoole", - "state": "minnesota", - "zip": 22282 - }, - "email": "laura.richardson@example.com", - "username": "yellowbutterfly228", - "password": "mets", - "salt": "mScfbRdH", - "md5": "96782882672382bc5c0066deb7c84069", - "sha1": "2974f24e8c705897ba29c39a51449726f9de5165", - "sha256": "e2853c331bbbb3fa52ca09ae55e5ffb8a48513cddfbd25b598e2bca4f46a5a6a", - "registered": 1281036865, - "dob": 1271107543, - "phone": "051-670-5482", - "cell": "081-351-2748", - "PPS": "2520570T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/34.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/34.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/34.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "mrs", - "first": "vanessa", - "last": "simmons" - }, - "location": { - "street": "2540 dublin road", - "city": "Carlow", - "state": "michigan", - "zip": 73663 - }, - "email": "vanessa.simmons@example.com", - "username": "yellowgoose729", - "password": "sassy", - "salt": "gzRnURUq", - "md5": "b5e4fced503a164e1d8960f53b0a8338", - "sha1": "bbb7db2aa6dbee8fe589ecca7a0d6c1b57b8ef06", - "sha256": "1b21bad8061b206da563e009e26144d157470c4207f62d59e2b7b4766efa319d", - "registered": 1322917077, - "dob": 53568336, - "phone": "061-868-2618", - "cell": "081-510-5408", - "PPS": "8379168T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/71.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/71.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/71.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "vincent", - "last": "carr" - }, - "location": { - "street": "9109 pearse street", - "city": "Roscrea", - "state": "rhode island", - "zip": 27032 - }, - "email": "vincent.carr@example.com", - "username": "bigwolf996", - "password": "martin1", - "salt": "nIWIaJZn", - "md5": "0fe305943fd8968426cd7ffff57e6381", - "sha1": "621904fb3822b00a923b7c95d401332fda1f8439", - "sha256": "7177e0863ac9a83bd3a60738e2bb7b820d9253f1c92f457c936199d9917e998a", - "registered": 956310544, - "dob": 1268443200, - "phone": "031-796-9533", - "cell": "081-436-1898", - "PPS": "3359383T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/51.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/51.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/51.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "ms", - "first": "stephanie", - "last": "brooks" - }, - "location": { - "street": "1897 new street", - "city": "Kilkenny", - "state": "michigan", - "zip": 44280 - }, - "email": "stephanie.brooks@example.com", - "username": "ticklishtiger374", - "password": "something", - "salt": "r0n40lgg", - "md5": "6ad1d7c36347b8b218e2e7082fa65c70", - "sha1": "4ef110c195a200668d1cf7fa824ae3fac710defb", - "sha256": "b87fe9b36dab3e6ff177ba41077d610eaba1d4e63d78745bf8b55ed0efca8aee", - "registered": 1064969568, - "dob": 1168385185, - "phone": "031-522-7531", - "cell": "081-302-2858", - "PPS": "6868346T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/87.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/87.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/87.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "raymond", - "last": "price" - }, - "location": { - "street": "9738 new street", - "city": "Gorey", - "state": "indiana", - "zip": 12032 - }, - "email": "raymond.price@example.com", - "username": "tinypanda292", - "password": "chains", - "salt": "LLgaG8v9", - "md5": "16437ec21033e2ebe0a442dd2c44d663", - "sha1": "792cde4d49fbd97edb3e9e1f82a39d508ca5f564", - "sha256": "8ae42a29d56a5fec81e881a099b537fd268191ad84902cede4c2f70dde4a91f7", - "registered": 1085566135, - "dob": 647671124, - "phone": "051-498-0707", - "cell": "081-435-0071", - "PPS": "6204274T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/74.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/74.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/74.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "martha", - "last": "evans" - }, - "location": { - "street": "3351 mill road", - "city": "Carrigtwohill", - "state": "maryland", - "zip": 92543 - }, - "email": "martha.evans@example.com", - "username": "yellowtiger755", - "password": "films", - "salt": "cnZS1JzN", - "md5": "5782227d855d6ac2568c687d12c5ee56", - "sha1": "019607429a825d4171b7fede1950f5faa51bb429", - "sha256": "6ff1a026236098ffb6767b3de06427a3a0658e720a9d99492c3b924aef7db29f", - "registered": 1362972987, - "dob": 496891219, - "phone": "021-421-7980", - "cell": "081-499-5913", - "PPS": "9934605T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/21.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/21.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/21.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "ms", - "first": "rachel", - "last": "johnson" - }, - "location": { - "street": "8025 strand road", - "city": "Carrick-on-Suir", - "state": "delaware", - "zip": 36846 - }, - "email": "rachel.johnson@example.com", - "username": "blueduck686", - "password": "jian", - "salt": "aywcfEiy", - "md5": "657fe2b739344cedab808770946f2409", - "sha1": "4911b3b942afb2019a0e9b1fb3e2c74a2523f76f", - "sha256": "e6f02b7f691f06bfba485a6b41a8cc9fe7046cb92576352ee75f40edac497c9c", - "registered": 958350865, - "dob": 234283583, - "phone": "021-625-3846", - "cell": "081-015-6854", - "PPS": "8119433T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/55.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/55.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/55.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "benjamin", - "last": "young" - }, - "location": { - "street": "7982 church lane", - "city": "Kilcoole", - "state": "pennsylvania", - "zip": 57530 - }, - "email": "benjamin.young@example.com", - "username": "goldenpeacock965", - "password": "hakr", - "salt": "7A25Ewsk", - "md5": "4de1fa2c28367112e3d4a1de21a20b6b", - "sha1": "ab1f6fcd38a33afb2e2df564de5d18bdd0c11aba", - "sha256": "742264f0f9e0b5aa88cf9e91b320223f8febc6397995b543c9f3dee7a8937a7d", - "registered": 1431189355, - "dob": 1064594222, - "phone": "061-081-4914", - "cell": "081-862-6995", - "PPS": "8795895T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/98.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/98.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/98.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "abigail", - "last": "smith" - }, - "location": { - "street": "6927 woodlawn avenue", - "city": "Longford", - "state": "arizona", - "zip": 34051 - }, - "email": "abigail.smith@example.com", - "username": "goldenfish869", - "password": "nolimit", - "salt": "FbMrjR88", - "md5": "ba9e602b1d0d63a4ee71d9e4d3c0a8c6", - "sha1": "3123562fe06c7ce6fffe07886436828a2b079f62", - "sha256": "0ab1e7bf850b889606a90b7ea011e2069cc7078763486401f4c025ad682244bd", - "registered": 1031673596, - "dob": 270292185, - "phone": "051-427-6997", - "cell": "081-747-5426", - "PPS": "1211268T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/54.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/54.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/54.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "emily", - "last": "perkins" - }, - "location": { - "street": "2061 patrick street", - "city": "Kinsale", - "state": "kentucky", - "zip": 81063 - }, - "email": "emily.perkins@example.com", - "username": "heavyelephant757", - "password": "bigman", - "salt": "NZX1BTpp", - "md5": "05d8f4e5361da7057ae4e8043e3bf727", - "sha1": "cc5862061a35d0847b7ad53607976dae7d519255", - "sha256": "dd192a2208733befe02529159169704652f9800cfc360bc0dccb43b1fa81932e", - "registered": 1322876089, - "dob": 1374544170, - "phone": "011-188-5223", - "cell": "081-729-0969", - "PPS": "6668626TA", - "picture": { - "large": "https://randomuser.me/api/portraits/women/29.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/29.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/29.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "charlie", - "last": "howell" - }, - "location": { - "street": "5770 victoria road", - "city": "Castlebar", - "state": "virginia", - "zip": 28997 - }, - "email": "charlie.howell@example.com", - "username": "orangedog474", - "password": "joebob", - "salt": "n1rMsDqP", - "md5": "2702076bcfd3e7b73ca6603185b69e85", - "sha1": "827558c9cb638feca5a829effd5cba69a6f4e802", - "sha256": "d5b4b6834c19e9f0c0753db10eab4b702c46744f148df1b88924e1648b0b26ec", - "registered": 1207966221, - "dob": 1294846635, - "phone": "011-995-2294", - "cell": "081-818-6931", - "PPS": "2712836T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/89.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/89.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/89.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "ms", - "first": "kathy", - "last": "owens" - }, - "location": { - "street": "5843 ormond quay", - "city": "Ennis", - "state": "hawaii", - "zip": 87271 - }, - "email": "kathy.owens@example.com", - "username": "bigostrich206", - "password": "seinfeld", - "salt": "pMv5MR8r", - "md5": "3e50d4f1c58cebc1a755f4b65aa09dfa", - "sha1": "5c5cc828ff17939436f4bc6222a376b248a34b49", - "sha256": "9683b3ef61bd8ee5f3e680b11f32da7a57da0ff8e56b4e4fe9f243a2e67096f7", - "registered": 1397553575, - "dob": 128258108, - "phone": "051-266-9066", - "cell": "081-130-6524", - "PPS": "1921886T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/65.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/65.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/65.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "carl", - "last": "black" - }, - "location": { - "street": "2263 new road", - "city": "Tipperary", - "state": "illinois", - "zip": 79196 - }, - "email": "carl.black@example.com", - "username": "whitefish527", - "password": "boom", - "salt": "NPJccIgB", - "md5": "0564dd9c8150d9f59f6428cbebcf3be6", - "sha1": "a220e6006e905aac09c619091e0065accaeb33b0", - "sha256": "992899d80a18bbc907b70f6f30270eb13fc6aa719a633eea7b0fcbf0b0e154a1", - "registered": 1067574222, - "dob": 919579009, - "phone": "021-910-8136", - "cell": "081-066-9044", - "PPS": "2630570T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/24.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/24.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/24.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "amelia", - "last": "smythe" - }, - "location": { - "street": "6710 mill road", - "city": "Portmarnock", - "state": "connecticut", - "zip": 92709 - }, - "email": "amelia.smythe@example.com", - "username": "silverrabbit681", - "password": "charles1", - "salt": "PSRzQpKz", - "md5": "6ce906058146ff2e86f64d7342800776", - "sha1": "da15e1876d198bd72466fa41d315fedca52664d2", - "sha256": "139e5083d5e1e7a07e722ebc252dbc62796eac9ce0304df787d2cc7f046dda18", - "registered": 1057307557, - "dob": 1019677161, - "phone": "061-612-4059", - "cell": "081-497-7156", - "PPS": "4349472T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/10.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/10.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/10.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "claude", - "last": "collins" - }, - "location": { - "street": "4479 highfield road", - "city": "Athlone", - "state": "tennessee", - "zip": 70307 - }, - "email": "claude.collins@example.com", - "username": "ticklishbutterfly678", - "password": "toocool", - "salt": "CmeM3YTZ", - "md5": "33cf5ff58c6a8720e14aa678d6af4485", - "sha1": "82d7fab9e2a1979ea7d96a2683c93c2893c50642", - "sha256": "d45311c01d5c1fc01efced6d7bd2ca64ebeff40734767656b1df209b90226aae", - "registered": 1329399184, - "dob": 975211437, - "phone": "041-265-7220", - "cell": "081-765-8082", - "PPS": "0024219T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/45.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/45.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/45.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "mrs", - "first": "phoebe", - "last": "cook" - }, - "location": { - "street": "1556 denny street", - "city": "Gorey", - "state": "minnesota", - "zip": 27517 - }, - "email": "phoebe.cook@example.com", - "username": "smallwolf702", - "password": "grandam", - "salt": "elcVUVHi", - "md5": "cdc829b6cd4f6bf15785cd1d78afc535", - "sha1": "77cb60db8f55e38438c3d1093c3100943ab0c932", - "sha256": "60530c3279f61c7bf83a1c77bd259a095c606b5436403a2bb0149e50b73b59e3", - "registered": 951839547, - "dob": 653698293, - "phone": "061-954-1909", - "cell": "081-904-3382", - "PPS": "2487215T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/74.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/74.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/74.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "kathleen", - "last": "fuller" - }, - "location": { - "street": "3727 north road", - "city": "Buncrana", - "state": "idaho", - "zip": 92479 - }, - "email": "kathleen.fuller@example.com", - "username": "brownbird357", - "password": "456654", - "salt": "GJAD0RlY", - "md5": "b90bf88e221a5cb788286cf50d841f5a", - "sha1": "28a4d4ed78d9527c9766ba8b6cbc595e7d03c875", - "sha256": "4338f15b5dfcda9924685deda3a385c63202cb53af06eef3d34fac251f79f696", - "registered": 971610686, - "dob": 559255610, - "phone": "031-864-9487", - "cell": "081-078-8480", - "PPS": "5873391T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/45.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/45.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/45.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "ms", - "first": "eleanor", - "last": "hale" - }, - "location": { - "street": "4227 manor road", - "city": "Sallins", - "state": "massachusetts", - "zip": 73941 - }, - "email": "eleanor.hale@example.com", - "username": "bigmouse429", - "password": "zenith", - "salt": "9MUZwmsQ", - "md5": "37cc83f39c131e335ea2b076e657cfa2", - "sha1": "06d067cebab148edec56c370ea214d5792c972cc", - "sha256": "16514da859aa9cf68a3e72682f76e4a6fae387fddd694b87e6386e53c0f9a706", - "registered": 1379715523, - "dob": 699375166, - "phone": "051-996-1584", - "cell": "081-204-3653", - "PPS": "8605418T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/90.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/90.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/90.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "soham", - "last": "steward" - }, - "location": { - "street": "7478 pearse street", - "city": "Malahide", - "state": "georgia", - "zip": 94033 - }, - "email": "soham.steward@example.com", - "username": "smallfrog970", - "password": "1a2b3c", - "salt": "CT1pMpMh", - "md5": "016b2996987a027e64dbfc0426c4bdfd", - "sha1": "7a4ab3cc15383df3751a11e080133943ae84cd93", - "sha256": "5ca8037670a92754849eacc577e0fdaf1855c81a5c25d093c61a2b010a1d6dfb", - "registered": 970301593, - "dob": 1049430000, - "phone": "051-955-3148", - "cell": "081-698-8715", - "PPS": "4800540T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/17.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/17.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/17.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "daniel", - "last": "daniels" - }, - "location": { - "street": "7133 mill lane", - "city": "Dublin", - "state": "florida", - "zip": 62710 - }, - "email": "daniel.daniels@example.com", - "username": "whiteladybug131", - "password": "allsop", - "salt": "6EvKIIaU", - "md5": "9e8fd43f8c10c1e1cc40346fd232789b", - "sha1": "7f5cf04c6c47250577f371cb93f30e4fdc5115cb", - "sha256": "c9e63f1b0a6e2d3142a763fe0b95639480a153cb2599a687fa20633821b74289", - "registered": 1019950487, - "dob": 947929728, - "phone": "031-301-3757", - "cell": "081-143-4366", - "PPS": "9442984T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/36.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/36.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/36.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "carter", - "last": "watts" - }, - "location": { - "street": "4544 george street", - "city": "Ardee", - "state": "connecticut", - "zip": 90963 - }, - "email": "carter.watts@example.com", - "username": "silverpanda437", - "password": "seymour", - "salt": "yzIgg3yk", - "md5": "4ee669c05141f6d99953ef8cfcf00784", - "sha1": "d4e80fc5be66dbef6839ef82418897c9da8af669", - "sha256": "b3637f248ae12d99aeb9d2ce88ef530e7252c82a64c9ab305031b1e8158de238", - "registered": 1210807590, - "dob": 1433643524, - "phone": "011-289-7899", - "cell": "081-633-6211", - "PPS": "7873190TA", - "picture": { - "large": "https://randomuser.me/api/portraits/men/30.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/30.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/30.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "cecil", - "last": "howell" - }, - "location": { - "street": "3306 galway road", - "city": "Castlebar", - "state": "new york", - "zip": 49423 - }, - "email": "cecil.howell@example.com", - "username": "goldenpanda185", - "password": "lakewood", - "salt": "anLD9ERJ", - "md5": "1c0c78f51f452c6f15d3cd53e34b5c75", - "sha1": "5d45a9105d43f30833141443144e32fdea54568b", - "sha256": "f5ecfefbc3ea8bafae40c809cddb1719d006682d2627aef9dff5ec16f46ce1f1", - "registered": 1352691365, - "dob": 1294637043, - "phone": "071-467-4144", - "cell": "081-566-3596", - "PPS": "7391520T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/93.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/93.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/93.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "gavin", - "last": "robertson" - }, - "location": { - "street": "4634 woodlawn avenue", - "city": "Athy", - "state": "iowa", - "zip": 22803 - }, - "email": "gavin.robertson@example.com", - "username": "smallostrich518", - "password": "chip", - "salt": "ppqrhAGC", - "md5": "f892a25970923b4c1b299cb529ec78c9", - "sha1": "cbfa6f2a902cf2a671fe79560faab10bb9c78ec5", - "sha256": "d05bf4de032e741357af31bf99ca7fb0c010861bb989a9af2bbe9ecf0399fa8d", - "registered": 1395714115, - "dob": 937318587, - "phone": "061-209-7417", - "cell": "081-976-1323", - "PPS": "2361562T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/68.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/68.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/68.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "steven", - "last": "harper" - }, - "location": { - "street": "4780 the avenue", - "city": "Duleek", - "state": "colorado", - "zip": 63553 - }, - "email": "steven.harper@example.com", - "username": "beautifulleopard765", - "password": "pitures", - "salt": "BLyLUgY2", - "md5": "ab0f89501e19341d41b9369f97e10a59", - "sha1": "5626c1f9d9d1e0a95679fbf9c195f3d0c96b5aa7", - "sha256": "93f8fb47043d47059ee51478e52606d2b8c87d13fd08659e992d82a1e3368c28", - "registered": 1011372141, - "dob": 838081330, - "phone": "021-615-8257", - "cell": "081-868-3210", - "PPS": "8102229T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/86.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/86.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/86.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "ms", - "first": "vanessa", - "last": "jensen" - }, - "location": { - "street": "7308 victoria road", - "city": "Kilcock", - "state": "oklahoma", - "zip": 43895 - }, - "email": "vanessa.jensen@example.com", - "username": "crazyleopard622", - "password": "natalia", - "salt": "b9mQl11o", - "md5": "cfebdc25ef7532ae9e313b93a37b6253", - "sha1": "1d3e4c90e5e89d476a6c7afb00a8d9f9daaf5a46", - "sha256": "ee6367253f1c92764e6335ba2926a545a002e293ba041ca959820eff25201d77", - "registered": 1139789888, - "dob": 1126965132, - "phone": "011-485-2026", - "cell": "081-688-1507", - "PPS": "1527718T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/72.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/72.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/72.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "johnny", - "last": "fields" - }, - "location": { - "street": "9380 the avenue", - "city": "Lusk", - "state": "new jersey", - "zip": 51462 - }, - "email": "johnny.fields@example.com", - "username": "blackgoose846", - "password": "homemade", - "salt": "uthUC3iK", - "md5": "02806d0d53bd5df7ce716504ee69f979", - "sha1": "b0d8fc6f1f9ec5df3c40deb88788998b355ae0fc", - "sha256": "eba290b40edccb222a07d85c2bdd9cd57e80da447ce2f04bb0b0618aab93b9ab", - "registered": 1047316545, - "dob": 997650420, - "phone": "071-366-0815", - "cell": "081-836-7608", - "PPS": "8390289T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/44.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/44.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/44.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "mrs", - "first": "sharron", - "last": "ryan" - }, - "location": { - "street": "2414 the grove", - "city": "Tullow", - "state": "montana", - "zip": 31501 - }, - "email": "sharron.ryan@example.com", - "username": "tinyfish206", - "password": "orchard", - "salt": "Xxu8MC8J", - "md5": "1138b9a9557ecc75c17831b013ba7c96", - "sha1": "fbc68df824da95860a22bb4eaebfdf6004febc34", - "sha256": "a1e5fb3dd5b4554bf438b495b1a49c2867c210efe69b1a4fe3273fd853c5ad1f", - "registered": 1389406412, - "dob": 662210071, - "phone": "061-693-1625", - "cell": "081-192-8326", - "PPS": "2587514T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/89.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/89.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/89.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "melvin", - "last": "fitzsimmons" - }, - "location": { - "street": "3717 york road", - "city": "Arklow", - "state": "delaware", - "zip": 29175 - }, - "email": "melvin.fitzsimmons@example.com", - "username": "beautifulbird832", - "password": "jonjon", - "salt": "jJbZP2Ny", - "md5": "0a328c95b0b35d00ada197d4e1f9fafc", - "sha1": "1642192edb84c4fb7fda1de23d8309e13f225e25", - "sha256": "39c789355dfed164afe1810878bfd138c78cf151ddc79c305d6d8d1acb884623", - "registered": 932217840, - "dob": 846935365, - "phone": "021-082-1311", - "cell": "081-995-8169", - "PPS": "1311758T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/79.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/79.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/79.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "ms", - "first": "caroline", - "last": "peterson" - }, - "location": { - "street": "2381 church road", - "city": "Duleek", - "state": "texas", - "zip": 27562 - }, - "email": "caroline.peterson@example.com", - "username": "yellowduck446", - "password": "atlantis", - "salt": "nN61x8Xa", - "md5": "3221224344772e1dc8812307441f624f", - "sha1": "d59fdc9426ea838a3cbc6f029721e30ff2da162c", - "sha256": "ab73a7de44707fe7302b41299319e945699a3c394f04aad1363a731608e88354", - "registered": 932664849, - "dob": 1068842257, - "phone": "031-990-7692", - "cell": "081-325-5238", - "PPS": "8765128T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/29.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/29.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/29.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "mrs", - "first": "debra", - "last": "ferguson" - }, - "location": { - "street": "7833 the grove", - "city": "Buncrana", - "state": "alaska", - "zip": 69826 - }, - "email": "debra.ferguson@example.com", - "username": "tinyostrich747", - "password": "bigbooty", - "salt": "j6Xx2Dcf", - "md5": "d74522c876ef990476f8c91a72985144", - "sha1": "c9eb9de1b8622f889d586e2ffc3be731cf5b525c", - "sha256": "a0db6db8b1cb99389973c06681a40ca9d0d41309441a37b7c0b617309033dc75", - "registered": 1410087735, - "dob": 499587832, - "phone": "011-425-4849", - "cell": "081-940-5845", - "PPS": "6989027T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/34.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/34.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/34.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "ms", - "first": "alison", - "last": "may" - }, - "location": { - "street": "1231 rochestown road", - "city": "Carlow", - "state": "pennsylvania", - "zip": 44279 - }, - "email": "alison.may@example.com", - "username": "smallostrich564", - "password": "cactus", - "salt": "yQIpxvm8", - "md5": "89e88b7db1fec5fa860ddeed908da0c2", - "sha1": "9bf5ebc9381fcafa670fa8fea5794ce98f520d8c", - "sha256": "aa4a1bc5861a3999a205c120f160cea4b0b22458ee18fa07e1e7c6063c96ded9", - "registered": 1086728863, - "dob": 1006260448, - "phone": "051-669-6893", - "cell": "081-192-3502", - "PPS": "6192832T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/33.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/33.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/33.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "mrs", - "first": "andrea", - "last": "bates" - }, - "location": { - "street": "4798 patrick street", - "city": "Enniscorthy", - "state": "nebraska", - "zip": 21420 - }, - "email": "andrea.bates@example.com", - "username": "brownostrich673", - "password": "orion1", - "salt": "MEAt6fxk", - "md5": "3820cd6a346dde7c5e75f4a114751aab", - "sha1": "330b77bd53fd58bf6f7fd334de37437aa63f4699", - "sha256": "b73380ba033c92f80266e0851c7993a346988c5dc3d86f2aae48b04a9b19cbfb", - "registered": 1252549150, - "dob": 595903650, - "phone": "071-636-7469", - "cell": "081-604-5253", - "PPS": "8043917T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/73.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/73.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/73.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "gene", - "last": "wallace" - }, - "location": { - "street": "9102 grafton street", - "city": "Cork", - "state": "south carolina", - "zip": 66479 - }, - "email": "gene.wallace@example.com", - "username": "bluefrog690", - "password": "milkman", - "salt": "ZzlsYL9y", - "md5": "9a493df4bf16fe74fbf0ca8e050622ed", - "sha1": "2ef35e9a618f96ed465a3f3777998335783e7abf", - "sha256": "0e96b6c845f6f464df22bef16e5326796a3c288c38944a0df870433f78af49e4", - "registered": 1158948257, - "dob": 1089421464, - "phone": "021-557-7598", - "cell": "081-509-4563", - "PPS": "1682656T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/20.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/20.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/20.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "mrs", - "first": "leah", - "last": "hoffman" - }, - "location": { - "street": "3613 novara avenue", - "city": "Tullow", - "state": "california", - "zip": 20580 - }, - "email": "leah.hoffman@example.com", - "username": "ticklishgoose826", - "password": "aliens", - "salt": "3atICpS6", - "md5": "3dca1575d2fafe3de89907d1b6e1dab2", - "sha1": "020fc20c8320d69296e1a02904a2441363cfbb37", - "sha256": "9cd6cc041c07b84b772fec7306ce9e4f040d41bf21825178f16fb51f8536048a", - "registered": 959265541, - "dob": 172597497, - "phone": "011-734-1901", - "cell": "081-834-7340", - "PPS": "4687129T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/74.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/74.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/74.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "larry", - "last": "campbell" - }, - "location": { - "street": "1909 highfield road", - "city": "Waterford", - "state": "nevada", - "zip": 29451 - }, - "email": "larry.campbell@example.com", - "username": "biglion642", - "password": "snake1", - "salt": "fflo3BBK", - "md5": "b85728c082be3906b4d3486f2a56d10b", - "sha1": "6c72c630c064c6aedabb223dbf6cb4bc12dbbbb8", - "sha256": "4b96d721d47a9267f3a0b9b729aa4ed7f476ac283f11237813e691ca220925bd", - "registered": 1062197344, - "dob": 532889197, - "phone": "011-707-4898", - "cell": "081-222-5406", - "PPS": "3441635T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/35.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/35.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/35.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "barbara", - "last": "watkins" - }, - "location": { - "street": "3208 york road", - "city": "Malahide", - "state": "oklahoma", - "zip": 45708 - }, - "email": "barbara.watkins@example.com", - "username": "smallsnake690", - "password": "time", - "salt": "sXUk4UXx", - "md5": "e7e7a0b298c6a30fb23031ca29b37c13", - "sha1": "d64dac7d363917b0fb0d26add998928a78e5686e", - "sha256": "7f3129796c0da6f160169502bb77b2299c55b7aa57b7decb968b19fe4307df4f", - "registered": 996058668, - "dob": 879075808, - "phone": "041-495-8918", - "cell": "081-822-1872", - "PPS": "3962945T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/44.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/44.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/44.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "eddie", - "last": "caldwell" - }, - "location": { - "street": "4234 dublin road", - "city": "Rush", - "state": "new mexico", - "zip": 44164 - }, - "email": "eddie.caldwell@example.com", - "username": "tinydog981", - "password": "artemis", - "salt": "5PANxBEq", - "md5": "1ab0148f17b26a367ef8c5d3115f8662", - "sha1": "c6f02afbf03128c6d90e014b2eb40b8ead624388", - "sha256": "29e5a961fa4d645f50e010a0b30d82d4cb3d449fb6c925e72a5c31fbf4b12e75", - "registered": 1371573081, - "dob": 1082952914, - "phone": "051-340-5682", - "cell": "081-586-5841", - "PPS": "7985031T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/49.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/49.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/49.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "jim", - "last": "reid" - }, - "location": { - "street": "3394 park lane", - "city": "Carrick-on-Suir", - "state": "nebraska", - "zip": 53710 - }, - "email": "jim.reid@example.com", - "username": "lazygorilla792", - "password": "bingo", - "salt": "qMBv7wxp", - "md5": "21a6827e3c9ae7de335cd91445b0db12", - "sha1": "214db61a6f799de8a8f426e0701fd065fae915ec", - "sha256": "47d201dfef163493b8afde7b788696d86b95f442fe17e502cb3d7e3f9320eb89", - "registered": 1245224223, - "dob": 9696009, - "phone": "041-994-9586", - "cell": "081-434-6599", - "PPS": "5324493T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/93.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/93.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/93.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "ms", - "first": "kayla", - "last": "fitzsimmons" - }, - "location": { - "street": "2708 mill lane", - "city": "Midleton", - "state": "oregon", - "zip": 33341 - }, - "email": "kayla.fitzsimmons@example.com", - "username": "purpledog595", - "password": "achilles", - "salt": "CIzeg8FE", - "md5": "97d8ac030079fe623533813dee47cea2", - "sha1": "6ccb72e425f98407d87aa0b850ccbd1c4cdc5bb6", - "sha256": "8467a23f7fdff9011bb94f76e18ea3a669d6874b7925298aa92de926fecbca69", - "registered": 1059160284, - "dob": 1026749092, - "phone": "021-981-5407", - "cell": "081-070-5029", - "PPS": "9396060T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/47.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/47.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/47.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "landon", - "last": "brady" - }, - "location": { - "street": "7628 park road", - "city": "Navan", - "state": "vermont", - "zip": 61446 - }, - "email": "landon.brady@example.com", - "username": "yellowwolf108", - "password": "ripley", - "salt": "GgfvrzIA", - "md5": "c4f26d6393da823e6b8992272f63c0ac", - "sha1": "4d3a17fb8697934451c6007f80f58606012d3c0f", - "sha256": "69d9e5d51c0491fc51a51d8826a45cb32265c72577f7c45f8e42cc65b11124b0", - "registered": 1150524819, - "dob": 479195152, - "phone": "021-178-3909", - "cell": "081-703-7700", - "PPS": "9569618T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/0.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/0.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/0.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "arron", - "last": "burke" - }, - "location": { - "street": "8616 patrick street", - "city": "Ratoath", - "state": "delaware", - "zip": 21768 - }, - "email": "arron.burke@example.com", - "username": "redbird999", - "password": "packers", - "salt": "1I8GeOGS", - "md5": "499811231663fc9dc9b493689e88c085", - "sha1": "0938dfd12e4a83c76cd26b9ff68fa4df014d3b9a", - "sha256": "0d1d33d584bb05b221fe702b86c83c9153c0f792aa74faa3e9e6546129aaeda1", - "registered": 1342106036, - "dob": 1376898208, - "phone": "051-885-2826", - "cell": "081-042-4294", - "PPS": "1477357TA", - "picture": { - "large": "https://randomuser.me/api/portraits/men/47.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/47.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/47.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "mrs", - "first": "jennifer", - "last": "woods" - }, - "location": { - "street": "3817 green lane", - "city": "Listowel", - "state": "missouri", - "zip": 78123 - }, - "email": "jennifer.woods@example.com", - "username": "silvergoose468", - "password": "stoney", - "salt": "UcrIQLtW", - "md5": "d65e3b42267c667fa1558057e82b335b", - "sha1": "c7c9d8c8c5607775d5bcde86c3bbf37c14bea858", - "sha256": "37b478c55c4bc0a9c4158322a3ca3334d77b27ed8ae01993f43e65e62aba5016", - "registered": 1360548136, - "dob": 182723003, - "phone": "061-367-9956", - "cell": "081-296-8463", - "PPS": "8989497T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/23.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/23.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/23.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "luis", - "last": "lawson" - }, - "location": { - "street": "5606 richmond park", - "city": "Dungarvan", - "state": "indiana", - "zip": 90252 - }, - "email": "luis.lawson@example.com", - "username": "orangeostrich481", - "password": "4242", - "salt": "pIjVsIsV", - "md5": "a99aa884d649004aa616fe6a8639ed4c", - "sha1": "9a647057c6c89e6b2d223bd3ad94d4bfcc6c0959", - "sha256": "116d8a47faf1d19b32e46aeca2c206598dc6cea632ae02e4848615b226cf83a6", - "registered": 1239156711, - "dob": 806816268, - "phone": "061-687-3323", - "cell": "081-443-6325", - "PPS": "5939304T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/90.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/90.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/90.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "johnny", - "last": "fitzpatrick" - }, - "location": { - "street": "6193 north street", - "city": "Balbriggan", - "state": "washington", - "zip": 16896 - }, - "email": "johnny.fitzpatrick@example.com", - "username": "tinyleopard298", - "password": "hobbit", - "salt": "0NAUTnE1", - "md5": "87d95eb5df95b165b89a942dd7770c40", - "sha1": "184620f04093012f0c3d2a7f3651fc697a6fab80", - "sha256": "b0f74ea31d2aae93500c7ef9874c4a825e41fb5eec048b1b4b177871dfd999e9", - "registered": 975889947, - "dob": 1218115557, - "phone": "011-957-2292", - "cell": "081-166-9855", - "PPS": "5877829T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/27.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/27.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/27.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "kimberly", - "last": "myers" - }, - "location": { - "street": "2297 the grove", - "city": "Edenderry", - "state": "georgia", - "zip": 66769 - }, - "email": "kimberly.myers@example.com", - "username": "blackostrich343", - "password": "mizzou", - "salt": "1exvCZHC", - "md5": "d8d86908daf5e207b30489bd8adc6926", - "sha1": "f92d9a36d6624abb314c2bf923018636d6b5cef5", - "sha256": "10bede21d7c2a3391fca6b32ebf4606509d9bd5a9d168ebcf7c488b6265f0029", - "registered": 997256102, - "dob": 498522713, - "phone": "031-389-5012", - "cell": "081-121-2248", - "PPS": "8806920T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/12.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/12.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/12.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "carol", - "last": "freeman" - }, - "location": { - "street": "1243 mill lane", - "city": "Ennis", - "state": "kansas", - "zip": 93577 - }, - "email": "carol.freeman@example.com", - "username": "smalldog935", - "password": "west", - "salt": "RRc6U9uH", - "md5": "46f70fb285b7febe0616cbbb35687e93", - "sha1": "5c76a3157c62fda7f7cf4702906b7f14857ede28", - "sha256": "ab2cb4b685c1db968cb6a393d43d106394bf29b6a85694f20d65f99e85593ae7", - "registered": 1233934492, - "dob": 1050213148, - "phone": "061-408-0925", - "cell": "081-675-8521", - "PPS": "8268456T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/41.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/41.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/41.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "abigail", - "last": "carroll" - }, - "location": { - "street": "5294 denny street", - "city": "Greystones", - "state": "iowa", - "zip": 69939 - }, - "email": "abigail.carroll@example.com", - "username": "heavyostrich387", - "password": "option", - "salt": "KjtJWKAc", - "md5": "8165c00720b07ae8f2285696ccdf0587", - "sha1": "dfa6a78e96c2091ea29dc88cae0bd4cbbcfd5dd0", - "sha256": "a1536e39717b704f81ce0d549ca9b840a88684fdde33cbf8a114ccb9e9f1b084", - "registered": 1266410247, - "dob": 24962021, - "phone": "071-856-6319", - "cell": "081-524-1417", - "PPS": "1730719T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/3.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/3.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/3.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "andrew", - "last": "ford" - }, - "location": { - "street": "1621 church lane", - "city": "Portarlington", - "state": "nevada", - "zip": 12090 - }, - "email": "andrew.ford@example.com", - "username": "ticklishduck786", - "password": "skibum", - "salt": "HldyopE4", - "md5": "22a0b84f5df7044171e1f8da6438ea61", - "sha1": "7af6f6a60fd2414134df61380ed93536856a5a9d", - "sha256": "acdc5f67f0a9381456c53cd096f8953114aeb991db6a834b11b2390bd5e4bc6e", - "registered": 1405312109, - "dob": 990699559, - "phone": "051-300-0625", - "cell": "081-512-8738", - "PPS": "1074815T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/66.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/66.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/66.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "eddie", - "last": "brewer" - }, - "location": { - "street": "4042 albert road", - "city": "Malahide", - "state": "new jersey", - "zip": 19260 - }, - "email": "eddie.brewer@example.com", - "username": "silverbutterfly632", - "password": "ohyeah", - "salt": "yt148k1E", - "md5": "12fde76bc5a8994ad9c21dd80c5177e4", - "sha1": "1b25b2d5e39542a5cfe14be5ed44beac8d5903b3", - "sha256": "1c68101d8b712642e7fd760079abd0cef7ff09719d61aa0cf15de562322a1d68", - "registered": 1335714112, - "dob": 248366687, - "phone": "061-079-8705", - "cell": "081-389-4747", - "PPS": "0540197T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/81.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/81.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/81.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "jason", - "last": "fields" - }, - "location": { - "street": "5268 pearse street", - "city": "Youghal", - "state": "kansas", - "zip": 52809 - }, - "email": "jason.fields@example.com", - "username": "smallpeacock763", - "password": "tasha1", - "salt": "qc0S1wNk", - "md5": "8c802dc3c152c0f93ee16c5d1c8c97f7", - "sha1": "ce6b064e4afc219d4d067215a0a1eb87510e601a", - "sha256": "c7f45d9cb0234735cd5ef891b1558d7197c3777843717c4241ca36ee1d258b76", - "registered": 1201244767, - "dob": 1346427167, - "phone": "031-793-1100", - "cell": "081-194-1909", - "PPS": "3122202T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/9.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/9.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/9.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "samuel", - "last": "hunter" - }, - "location": { - "street": "4631 westmoreland street", - "city": "Birr", - "state": "georgia", - "zip": 67063 - }, - "email": "samuel.hunter@example.com", - "username": "yellowpeacock523", - "password": "madness", - "salt": "HutXH2j4", - "md5": "aa543bcbc838764e777414729ddf2ef6", - "sha1": "c8a7a10806a7733c42456fe3dafd458021c727de", - "sha256": "98b7d6d1ac03fb27951efda2674ffa8da6462cf6bbc2bd7a48e7b569b96f2862", - "registered": 1360512339, - "dob": 1247394700, - "phone": "041-783-3740", - "cell": "081-165-9153", - "PPS": "7337947T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/40.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/40.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/40.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "aaron", - "last": "foster" - }, - "location": { - "street": "3789 mill road", - "city": "Mullingar", - "state": "hawaii", - "zip": 66122 - }, - "email": "aaron.foster@example.com", - "username": "blackbutterfly567", - "password": "latin", - "salt": "fwOElVb8", - "md5": "aecef6e75eb3e77b21d5d2c53ab1b265", - "sha1": "391088288ca42ab050bfab2af69ab5750bb30e9a", - "sha256": "d3b198db15fda9cbfeb4325db27a6ed24d99aaeef5b2ac787e943cfe25b91345", - "registered": 1435166055, - "dob": 1195658155, - "phone": "061-997-0885", - "cell": "081-557-5905", - "PPS": "9833757T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/37.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/37.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/37.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "eli", - "last": "shaw" - }, - "location": { - "street": "1646 jones road", - "city": "Trim", - "state": "new jersey", - "zip": 46678 - }, - "email": "eli.shaw@example.com", - "username": "brownbutterfly794", - "password": "huskers", - "salt": "d56BQ5Hk", - "md5": "afe3c2dee305c3d9ed4485a590b14e0a", - "sha1": "726a7359cd424cafed47738843545fdf9430f97f", - "sha256": "6412f50c181a689875ca96f9e5e55bc622869a1d1dd8c29ab515ba21c8eff9b0", - "registered": 1415420831, - "dob": 670749883, - "phone": "071-754-1952", - "cell": "081-044-0953", - "PPS": "5594328T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/9.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/9.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/9.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "mrs", - "first": "maddison", - "last": "hopkins" - }, - "location": { - "street": "9520 springfield road", - "city": "Listowel", - "state": "new jersey", - "zip": 69195 - }, - "email": "maddison.hopkins@example.com", - "username": "purplegorilla606", - "password": "pepsi", - "salt": "A3L7D8ei", - "md5": "b2961f3f31d59e1366550dc8753a4f0e", - "sha1": "ccd134faae0e09518d650779539b8d94b001d27f", - "sha256": "6011d751e71369cc7a5ef8f750a79794c89644925af7d4cb1934f5ca7862ee90", - "registered": 1384948904, - "dob": 1393443026, - "phone": "011-637-3528", - "cell": "081-845-8509", - "PPS": "5077935TA", - "picture": { - "large": "https://randomuser.me/api/portraits/women/39.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/39.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/39.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "mrs", - "first": "lillian", - "last": "hamilton" - }, - "location": { - "street": "9300 west street", - "city": "Galway", - "state": "ohio", - "zip": 29258 - }, - "email": "lillian.hamilton@example.com", - "username": "brownbutterfly691", - "password": "woodstoc", - "salt": "HbJPIhKE", - "md5": "a889ada7f792274970f153a935969ae6", - "sha1": "06f3db0dfd4ed81f2f8ffd898799351ca466079c", - "sha256": "10124c4b0b878a53c9a36eb010d6997510ccd00197cf7665f64d0af18cdcd90a", - "registered": 1232012359, - "dob": 1242121833, - "phone": "071-189-1561", - "cell": "081-825-1445", - "PPS": "6002276T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/28.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/28.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/28.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "mrs", - "first": "kim", - "last": "ferguson" - }, - "location": { - "street": "3693 jones road", - "city": "Passage West", - "state": "kentucky", - "zip": 99419 - }, - "email": "kim.ferguson@example.com", - "username": "bigbutterfly387", - "password": "frogman", - "salt": "ChRtXGTy", - "md5": "da215d53c0ba685702bcf8c8725414e4", - "sha1": "b7c2581bda82b0353511819f7d169745d5c18274", - "sha256": "e0146fe5d7c35888359475a36389c62ab3812172f3f0a27f30ac47edeed63e02", - "registered": 1250483448, - "dob": 49812412, - "phone": "011-317-2400", - "cell": "081-085-5362", - "PPS": "7996609T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/37.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/37.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/37.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "matt", - "last": "cole" - }, - "location": { - "street": "9958 westmoreland street", - "city": "Portmarnock", - "state": "new mexico", - "zip": 77503 - }, - "email": "matt.cole@example.com", - "username": "blueladybug278", - "password": "spread", - "salt": "qlkzcolk", - "md5": "98279b998c921f40d33913e65595251a", - "sha1": "120308015af245cdd57eedb3a76788655b067127", - "sha256": "7a49b4f458152dfce26d1e9752e3d682e51d8aff8703abf5e3e6369548cec5b9", - "registered": 1068556109, - "dob": 1326350906, - "phone": "061-510-5240", - "cell": "081-062-3525", - "PPS": "5811317T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/14.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/14.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/14.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "mrs", - "first": "lisa", - "last": "davidson" - }, - "location": { - "street": "2445 the crescent", - "city": "Lusk", - "state": "new jersey", - "zip": 31689 - }, - "email": "lisa.davidson@example.com", - "username": "blackwolf429", - "password": "98765432", - "salt": "qX0NHJp7", - "md5": "8685fa9059c58a254cc4512b0c6fa2ba", - "sha1": "cd7eeaf5f7910436a9d598c2b1777681a95d0605", - "sha256": "e5e888d57de0bdc9f35f30654e5622b662d0636b6ea72ff3a4d928deea08ddfe", - "registered": 1045059021, - "dob": 1260442372, - "phone": "051-834-3746", - "cell": "081-531-8956", - "PPS": "5626560T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/96.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/96.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/96.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "tyler", - "last": "thomas" - }, - "location": { - "street": "8648 henry street", - "city": "Mallow", - "state": "illinois", - "zip": 91160 - }, - "email": "tyler.thomas@example.com", - "username": "bluekoala326", - "password": "emperor", - "salt": "I35sIGv9", - "md5": "12e4be018aabc2879eb6edc132ea0d96", - "sha1": "3600ef32d4d53470e6756150192069f3da73bfb5", - "sha256": "d0103440e351c725f3f1709b50b69f997a3b27b1610cc5fbb5a889957545d5ff", - "registered": 1091258528, - "dob": 872219880, - "phone": "011-169-9802", - "cell": "081-421-4581", - "PPS": "5501018T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/99.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/99.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/99.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "nelson", - "last": "scott" - }, - "location": { - "street": "9408 dublin road", - "city": "Ardee", - "state": "oklahoma", - "zip": 17762 - }, - "email": "nelson.scott@example.com", - "username": "crazybutterfly165", - "password": "jackpot", - "salt": "nYjrgNNo", - "md5": "df94152c8f9f27ccb13b39982278ab65", - "sha1": "f6bbfc7ad5c2d11e98e8024f14b414802cbc4059", - "sha256": "fd3016401af2e496cdd2885a0479ca578d7b3e831280ae4917139ff2a40b3860", - "registered": 1325854782, - "dob": 1298396333, - "phone": "021-566-1560", - "cell": "081-241-9650", - "PPS": "9122680T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/31.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/31.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/31.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "louis", - "last": "carter" - }, - "location": { - "street": "1706 park lane", - "city": "Dunboyne", - "state": "nevada", - "zip": 85031 - }, - "email": "louis.carter@example.com", - "username": "redelephant673", - "password": "terefon", - "salt": "vslYK8hh", - "md5": "ca20e03f951f1b6a57b03549156691fb", - "sha1": "7368f45934444cdbb4cc57aa9cf6bdba9bfcb01b", - "sha256": "84565f6e1ee973175f36fcdb76262bc16c418809cb18c6abf7fe02c998b510a3", - "registered": 1344472973, - "dob": 729896885, - "phone": "021-782-4121", - "cell": "081-421-8436", - "PPS": "5068716T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/71.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/71.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/71.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "mathew", - "last": "banks" - }, - "location": { - "street": "7076 boghall road", - "city": "Listowel", - "state": "new hampshire", - "zip": 30871 - }, - "email": "mathew.banks@example.com", - "username": "brownfrog106", - "password": "conway", - "salt": "3AwrpLtV", - "md5": "e25441be43a740e314a50fcd690a4855", - "sha1": "484258f3dfeccaaaab08b10fb678f47081650e41", - "sha256": "de939a220408d2d5304493ea37aec40c3832d2bfe6cc8284b2ccd004bcbd867f", - "registered": 1117456073, - "dob": 533305423, - "phone": "011-951-1435", - "cell": "081-331-9246", - "PPS": "0223214T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/23.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/23.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/23.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "ms", - "first": "hanna", - "last": "brown" - }, - "location": { - "street": "8236 the avenue", - "city": "Tramore", - "state": "louisiana", - "zip": 48758 - }, - "email": "hanna.brown@example.com", - "username": "heavyelephant984", - "password": "ripley", - "salt": "spB0fHMm", - "md5": "eac7c01db1b1159ff3193e5fe0399651", - "sha1": "f300f16e925082aa1573059909a1052da731346c", - "sha256": "69d9e5d51c0491fc51a51d8826a45cb32265c72577f7c45f8e42cc65b11124b0", - "registered": 1138641223, - "dob": 625602038, - "phone": "011-039-6721", - "cell": "081-452-2476", - "PPS": "0360301T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/90.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/90.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/90.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "andrew", - "last": "reed" - }, - "location": { - "street": "9392 new street", - "city": "Sligo", - "state": "new york", - "zip": 74681 - }, - "email": "andrew.reed@example.com", - "username": "brownbutterfly847", - "password": "loose", - "salt": "PLdz50bG", - "md5": "551a3f85339ef3d9bfa8204df76fa13d", - "sha1": "f1f5d6b332d79102ac1c6c94bdc545edadb040b0", - "sha256": "f0031bc674f34c43816cc0f7c2404c07867cdd73fa5cc48f2d966055526ca96f", - "registered": 1249729266, - "dob": 44056644, - "phone": "041-037-0781", - "cell": "081-394-6812", - "PPS": "2952422T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/43.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/43.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/43.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "lonnie", - "last": "clark" - }, - "location": { - "street": "4359 mill road", - "city": "Athy", - "state": "louisiana", - "zip": 84816 - }, - "email": "lonnie.clark@example.com", - "username": "purplepeacock249", - "password": "hammer1", - "salt": "5YmfQ36t", - "md5": "7c3713053dc864e699f00d6633e6062a", - "sha1": "9ed99438126945601aa4d20082c23dee6ebc46c2", - "sha256": "65360ab01af424f56006a5a2704f642773fbaed160ca54c67f67fc164f49a0ca", - "registered": 1369877407, - "dob": 432890401, - "phone": "071-811-5489", - "cell": "081-549-5289", - "PPS": "5279522T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/32.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/32.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/32.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "nolan", - "last": "lawrence" - }, - "location": { - "street": "2620 o'connell street", - "city": "Carrigtwohill", - "state": "california", - "zip": 65018 - }, - "email": "nolan.lawrence@example.com", - "username": "tinygorilla447", - "password": "hola", - "salt": "mfJGHEHB", - "md5": "975c89a548ee1847d6300c76385ad69a", - "sha1": "9e5635e7c6c509f10a30c6f648dadbc64d419b6d", - "sha256": "d0e8a6c08498304531f9902389b92ecbfe1cf2318701d2c7b607f3c82a7e0ff5", - "registered": 962229002, - "dob": 1147635706, - "phone": "011-566-9019", - "cell": "081-180-2483", - "PPS": "2617209T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/73.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/73.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/73.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "ms", - "first": "laura", - "last": "lawson" - }, - "location": { - "street": "2760 west street", - "city": "Roscrea", - "state": "idaho", - "zip": 76121 - }, - "email": "laura.lawson@example.com", - "username": "heavyostrich310", - "password": "damon", - "salt": "XEyFkgDW", - "md5": "2bb58f0739e326d13436ab2f098df18e", - "sha1": "fe95cedec7acf18a8f89cad49ea66b95ff133e5c", - "sha256": "29710bd51ec7bb5bda249d7f11de2bb4575eec5eb7b7f1b083fc3aa8578a972b", - "registered": 1150052518, - "dob": 940925907, - "phone": "011-962-9013", - "cell": "081-107-2155", - "PPS": "7413382T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/80.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/80.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/80.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "lee", - "last": "perkins" - }, - "location": { - "street": "8630 highfield road", - "city": "Oranmore", - "state": "delaware", - "zip": 54365 - }, - "email": "lee.perkins@example.com", - "username": "yellowmeercat177", - "password": "glasgow", - "salt": "iR9HxnUv", - "md5": "1b4aae16453a5b3db5d207a1a22b5e88", - "sha1": "df4884a3f8e8931d4fba2729e4b19d5f655cbc4c", - "sha256": "cb55db9a97019214a248b29bdb4733d7d016c5ad6e567d8bd90b3c8de0cce954", - "registered": 1216394839, - "dob": 926564067, - "phone": "021-589-2295", - "cell": "081-444-0756", - "PPS": "2352364T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/51.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/51.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/51.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "andy", - "last": "hughes" - }, - "location": { - "street": "2685 boghall road", - "city": "Enniscorthy", - "state": "louisiana", - "zip": 34665 - }, - "email": "andy.hughes@example.com", - "username": "ticklishpeacock594", - "password": "manning", - "salt": "KKE6Umjn", - "md5": "cc47b24ebb8e3de598eaa8a3b8427bd7", - "sha1": "3aa6dd1eff24473ea2f414dc65ce3fb82a48f895", - "sha256": "af20ec1ea1b0ed85b01634a3e542d892b086cd891508a85002869757b42191cc", - "registered": 1019743497, - "dob": 62877531, - "phone": "061-818-9922", - "cell": "081-678-3348", - "PPS": "8383274T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/33.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/33.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/33.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "ron", - "last": "curtis" - }, - "location": { - "street": "4947 church lane", - "city": "Ballinasloe", - "state": "minnesota", - "zip": 77943 - }, - "email": "ron.curtis@example.com", - "username": "beautifulmeercat723", - "password": "civicsi", - "salt": "jE2Nk9IK", - "md5": "a76991ac850908709bd4b7d88df52a85", - "sha1": "2e5c7d577b255e7ff875a7c46c92263c00b493ba", - "sha256": "17eb444fa40ae4f0f0abb516837274ebfc0203d7e79ead09cb0bb40763942390", - "registered": 1294247063, - "dob": 1232616805, - "phone": "071-558-7793", - "cell": "081-073-1522", - "PPS": "9830959T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/55.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/55.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/55.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "soham", - "last": "king" - }, - "location": { - "street": "9428 the drive", - "city": "Ennis", - "state": "maine", - "zip": 49064 - }, - "email": "soham.king@example.com", - "username": "smalllion109", - "password": "boomer", - "salt": "JEmQSZXZ", - "md5": "927fe18230bf2c949f3cb3ab0e529d7e", - "sha1": "b34c477ce75a94cb8f1dc1b71a960905baae4c14", - "sha256": "d861710e54080fba0b02fee3f7ab6f729aa073857bc163711c171076b72029a0", - "registered": 1002692957, - "dob": 68243630, - "phone": "061-884-4183", - "cell": "081-785-7849", - "PPS": "1929756T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/69.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/69.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/69.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "ms", - "first": "alexandra", - "last": "bishop" - }, - "location": { - "street": "3904 mill road", - "city": "Carlow", - "state": "idaho", - "zip": 12727 - }, - "email": "alexandra.bishop@example.com", - "username": "brownleopard138", - "password": "dong", - "salt": "Vug1Q1oa", - "md5": "406ad52a1f6ff11b3bdf7a78a1aac335", - "sha1": "eeb617ebec801a8c076aa3bd500de5447cb6d6aa", - "sha256": "948a3823e196dddd5dc3eceeda21885ad9d0958febdafde74ed76efee2f13241", - "registered": 1404624473, - "dob": 924998374, - "phone": "061-693-7154", - "cell": "081-937-2665", - "PPS": "5379426T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/47.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/47.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/47.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "glen", - "last": "wheeler" - }, - "location": { - "street": "4752 henry street", - "city": "Limerick", - "state": "mississippi", - "zip": 42371 - }, - "email": "glen.wheeler@example.com", - "username": "smallsnake619", - "password": "dang", - "salt": "ONY4ELT7", - "md5": "66cc46e903909ae44e6cd3ec67b1af99", - "sha1": "a31f31ba05f243a62201ddf23631477da885a80e", - "sha256": "7641fe13570827f12a590399294bc2c4ede0b99ace79d687c94e3505e1f4573d", - "registered": 1191364884, - "dob": 151024922, - "phone": "011-826-4749", - "cell": "081-446-2862", - "PPS": "1748543T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/77.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/77.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/77.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "gary", - "last": "kelly" - }, - "location": { - "street": "7012 green lane", - "city": "Cavan", - "state": "delaware", - "zip": 87564 - }, - "email": "gary.kelly@example.com", - "username": "greenmeercat820", - "password": "felicia", - "salt": "A1eK5PYy", - "md5": "d9be6f08c0e235b467c2264e86036651", - "sha1": "86490932f9cc257f0748c2245f1c19d1b0150a0c", - "sha256": "2ff7be60d55d2f8225fe6f65d7b5a7c1f9322aa94f98f839b2ce8146e899614b", - "registered": 1163963072, - "dob": 823814772, - "phone": "041-651-5752", - "cell": "081-462-9985", - "PPS": "7845297T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/53.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/53.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/53.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "ms", - "first": "michelle", - "last": "campbell" - }, - "location": { - "street": "4208 ormond quay", - "city": "Malahide", - "state": "colorado", - "zip": 80898 - }, - "email": "michelle.campbell@example.com", - "username": "blackmouse462", - "password": "asdasd", - "salt": "y1YnKDYP", - "md5": "444c6234e292c835a1c9874d8a506526", - "sha1": "5c20eb9ebd4b68ee2b64485ee856edcd7edacbf0", - "sha256": "34029c39c6ac64d8041aa5dc5c8f9ac5d9db5a4baaf936a50407c15ffb11990f", - "registered": 935810571, - "dob": 597518268, - "phone": "041-647-2894", - "cell": "081-698-7986", - "PPS": "5113020T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/48.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/48.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/48.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "becky", - "last": "walker" - }, - "location": { - "street": "5407 mill lane", - "city": "Tullow", - "state": "connecticut", - "zip": 80341 - }, - "email": "becky.walker@example.com", - "username": "smallbear932", - "password": "pisces", - "salt": "yiz93tQB", - "md5": "e83e202f251034174546b8cc7360e6be", - "sha1": "4a9df4ce24dad798d1e16022ca96a629b890d4f0", - "sha256": "905733d90be7ac88bac20cc3a0973e31222f5f20726ed2433a5c917f68abe20e", - "registered": 1390707207, - "dob": 1253866326, - "phone": "071-498-7845", - "cell": "081-619-3378", - "PPS": "1397969T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/2.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/2.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/2.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "bradley", - "last": "gray" - }, - "location": { - "street": "7049 strand road", - "city": "Athlone", - "state": "oklahoma", - "zip": 83524 - }, - "email": "bradley.gray@example.com", - "username": "purplebird224", - "password": "justus", - "salt": "pihy5WQT", - "md5": "441cbd534304bf4ffb335367d452dfcf", - "sha1": "65282a0ebbd23e96bc6c8bd22f9dd63bfda94c15", - "sha256": "8a92a4611e06fb670b43b72eb1257ec0e4e82dd59aaf0767f0d9c12466518313", - "registered": 1172494006, - "dob": 718389821, - "phone": "011-699-8824", - "cell": "081-196-2871", - "PPS": "5885564T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/73.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/73.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/73.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "ms", - "first": "vicky", - "last": "hamilton" - }, - "location": { - "street": "7090 strand road", - "city": "Navan", - "state": "wisconsin", - "zip": 99638 - }, - "email": "vicky.hamilton@example.com", - "username": "tinybutterfly309", - "password": "annika", - "salt": "oxnUnuwu", - "md5": "f22a9a2ae045f6a333f214e9d3e57adc", - "sha1": "a568ad2e659cc206e9cf976183f313f8144ce056", - "sha256": "3962717ee5c47f93f82decec8d66db0b26d75f5d416ccdd01810b0f7797c0852", - "registered": 1132339613, - "dob": 53600761, - "phone": "021-528-0572", - "cell": "081-485-4692", - "PPS": "5683189T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/33.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/33.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/33.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "mrs", - "first": "debbie", - "last": "williams" - }, - "location": { - "street": "7165 south street", - "city": "Blessington", - "state": "florida", - "zip": 51158 - }, - "email": "debbie.williams@example.com", - "username": "yellowrabbit502", - "password": "panama", - "salt": "bFKIV4GB", - "md5": "9e82ade060effa167a788489e5edb401", - "sha1": "77ca34ca0d4f20ed43591c31ed3df3b64cf7fe9e", - "sha256": "25793956ac1428004129e98468545ff8bbeb0d3516be5d11f239235b0777ccc7", - "registered": 1105598905, - "dob": 79566617, - "phone": "031-305-6368", - "cell": "081-364-1426", - "PPS": "5091357T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/4.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/4.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/4.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "ms", - "first": "charlotte", - "last": "carter" - }, - "location": { - "street": "5576 mill lane", - "city": "Tullow", - "state": "illinois", - "zip": 32585 - }, - "email": "charlotte.carter@example.com", - "username": "organicfrog316", - "password": "chiquita", - "salt": "lIep46a7", - "md5": "d3e85fc599715e5453be5199c36e70bf", - "sha1": "b4aa26b41be9c63d4effceb4f828a42fddcfe614", - "sha256": "71a4c967dda275f97a28c915d7ca503cc386208cd1c4ac23a6c8e2efa5104797", - "registered": 926649874, - "dob": 338472603, - "phone": "031-077-0644", - "cell": "081-709-7281", - "PPS": "1371822T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/21.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/21.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/21.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "mrs", - "first": "judith", - "last": "jennings" - }, - "location": { - "street": "4579 school lane", - "city": "Trim", - "state": "michigan", - "zip": 13629 - }, - "email": "judith.jennings@example.com", - "username": "silversnake964", - "password": "spectre", - "salt": "dUj40G7e", - "md5": "4eaacca0aee25cd5c29ff0226f51e31c", - "sha1": "66d888e557a6aded7c4d08b94c404141639fb4fa", - "sha256": "a1c224ea74f299f8f77be27a8010b75e054af73275ea68ba01e3bfed587e6efd", - "registered": 1143720034, - "dob": 1056621358, - "phone": "071-871-0378", - "cell": "081-217-8123", - "PPS": "3899916T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/82.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/82.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/82.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "mrs", - "first": "mary", - "last": "long" - }, - "location": { - "street": "5419 york road", - "city": "Limerick", - "state": "california", - "zip": 63860 - }, - "email": "mary.long@example.com", - "username": "smallmeercat373", - "password": "ebony", - "salt": "Tj3Va4uu", - "md5": "fdecf579aeb32c1943c0e1fe9f4873c2", - "sha1": "0e0c82fdd640c515f015698dffd9c3cc3800355e", - "sha256": "0c567698739cac168a597fe0cb4b85733dce90c6b7d0b99425f42de0486994a0", - "registered": 1167076080, - "dob": 1092792803, - "phone": "041-954-3588", - "cell": "081-255-6619", - "PPS": "8958345T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/3.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/3.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/3.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "angela", - "last": "price" - }, - "location": { - "street": "9028 springfield road", - "city": "Ballinasloe", - "state": "washington", - "zip": 61745 - }, - "email": "angela.price@example.com", - "username": "redostrich731", - "password": "456789", - "salt": "TgephGBD", - "md5": "3170945a3afffcd15abb6b34dfc94dea", - "sha1": "573bf21227ff95dbc480ad77f023d3d3aa407f7a", - "sha256": "6e0b889260e1f5c0df0ec1ae434caa2bc463c3550715ee4b437b368fdfe532c5", - "registered": 1436099127, - "dob": 1146412818, - "phone": "051-236-2354", - "cell": "081-207-2036", - "PPS": "9623264T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/6.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/6.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/6.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "avery", - "last": "austin" - }, - "location": { - "street": "5381 strand road", - "city": "Ratoath", - "state": "alaska", - "zip": 81194 - }, - "email": "avery.austin@example.com", - "username": "organicmouse315", - "password": "wheels", - "salt": "YnQszCpZ", - "md5": "a2bb580c6181bdc4f5f38bd824713c69", - "sha1": "88dfcf47025d214dd950c8cb2956dda81f89a9c0", - "sha256": "32bba9f84feabfc2a138211ef5994d91b3abf88b906c30f069697fe3093455bb", - "registered": 1116750619, - "dob": 344290752, - "phone": "051-783-0258", - "cell": "081-652-1922", - "PPS": "6687534T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/84.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/84.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/84.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "lola", - "last": "day" - }, - "location": { - "street": "8909 george street", - "city": "Newbridge", - "state": "delaware", - "zip": 25314 - }, - "email": "lola.day@example.com", - "username": "brownleopard965", - "password": "pooky", - "salt": "vNylbODl", - "md5": "9125db33e9c672a1da5b1d1cfe83707a", - "sha1": "ddcc7bf9d541152830dff283d5d14ee66687eed2", - "sha256": "cdfb2c5ea35d8973ef996cbcca279fcf13ab57f5445e333243c1ee8f3b6a9e38", - "registered": 1337482070, - "dob": 1148507682, - "phone": "061-360-8470", - "cell": "081-453-9090", - "PPS": "7563774T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/32.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/32.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/32.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "cory", - "last": "white" - }, - "location": { - "street": "6476 main street", - "city": "Longford", - "state": "tennessee", - "zip": 62438 - }, - "email": "cory.white@example.com", - "username": "blacktiger807", - "password": "businessbabe", - "salt": "Q71yoYBA", - "md5": "d49cb5da4f68b79721c23e668f424ee2", - "sha1": "6433138cb7d751327ab68e7729966faee233af98", - "sha256": "8de9e6dfa803320cd6bedd322eddd80fdc122f8388b0568a4169995c91ac8709", - "registered": 1236234800, - "dob": 343114076, - "phone": "031-395-6706", - "cell": "081-397-9285", - "PPS": "7602217T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/2.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/2.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/2.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "ray", - "last": "fitzgerald" - }, - "location": { - "street": "7286 albert road", - "city": "Bandon", - "state": "georgia", - "zip": 63922 - }, - "email": "ray.fitzgerald@example.com", - "username": "goldenduck708", - "password": "bighead", - "salt": "o78ZWjnf", - "md5": "7bbb63c13b315a3f67acdf5d7f9492cc", - "sha1": "aa57286bfad5410cd52e46971ebeab825e1bfaba", - "sha256": "9e7b974eecb5f9d0f61ed7a94b3663a2d3eb24005ea17adbd3bccdc6d49bb29e", - "registered": 1264986438, - "dob": 563348714, - "phone": "071-133-8494", - "cell": "081-394-8229", - "PPS": "6765604T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/11.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/11.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/11.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "ms", - "first": "samantha", - "last": "bailey" - }, - "location": { - "street": "6859 pearse street", - "city": "Listowel", - "state": "new hampshire", - "zip": 65525 - }, - "email": "samantha.bailey@example.com", - "username": "yellowgorilla291", - "password": "nong", - "salt": "nSDC7dYa", - "md5": "ac654d40d64031a48d7318924448296e", - "sha1": "b4b33f19371d3536a110f833c6959392d02d31fe", - "sha256": "6de32c67288a4f7b4bd74bb29f49c0664b05992c28e66affa0bc6fc001780ff8", - "registered": 1045750248, - "dob": 185197846, - "phone": "041-240-3738", - "cell": "081-238-0959", - "PPS": "2045488T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/43.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/43.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/43.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "ms", - "first": "caitlin", - "last": "brooks" - }, - "location": { - "street": "5968 killarney road", - "city": "Portarlington", - "state": "hawaii", - "zip": 82228 - }, - "email": "caitlin.brooks@example.com", - "username": "lazyelephant151", - "password": "ministry", - "salt": "xVM9mesx", - "md5": "87cf5d8061291a6770a01e11fdb8ea1a", - "sha1": "d1c25205d6870e0e52cc3ab4ec47977f03bbc04c", - "sha256": "2c529c875792d556d6f9c8bae64d5fe093ad6a26677b780d2145bd447a52271d", - "registered": 1014102716, - "dob": 1020348430, - "phone": "071-193-6622", - "cell": "081-381-4076", - "PPS": "8403074T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/86.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/86.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/86.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "daniel", - "last": "williamson" - }, - "location": { - "street": "7863 church street", - "city": "Fermoy", - "state": "delaware", - "zip": 42434 - }, - "email": "daniel.williamson@example.com", - "username": "smallswan837", - "password": "shojou", - "salt": "r567QcPs", - "md5": "a060e432a634a57794f6131a62b71429", - "sha1": "c0ac416e938822766ee0a9c10e1cdc153361d8af", - "sha256": "f999f9b7c0d0a08f9a55d9bd2fc854552cde34e2e57d398a786ecefdab7004e9", - "registered": 946555340, - "dob": 755925672, - "phone": "041-901-8476", - "cell": "081-770-1091", - "PPS": "1780544T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/83.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/83.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/83.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "tyler", - "last": "palmer" - }, - "location": { - "street": "4235 park avenue", - "city": "Tullamore", - "state": "illinois", - "zip": 81707 - }, - "email": "tyler.palmer@example.com", - "username": "purplefrog309", - "password": "boston1", - "salt": "dwk5emqz", - "md5": "bfdaaca5cbd207fa8dabd7cc9f4ff627", - "sha1": "09bdaac835183c6768f7f0f1016cfb75f5e6c6c8", - "sha256": "cdd0eec0ba5d90ecfdf0d1726dfcf091a8878d9e4397606f03d73fb0272b1f1c", - "registered": 1078846758, - "dob": 874123466, - "phone": "041-541-2436", - "cell": "081-363-4973", - "PPS": "8179945T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/82.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/82.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/82.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "mrs", - "first": "marie", - "last": "gardner" - }, - "location": { - "street": "2279 george street", - "city": "Galway", - "state": "hawaii", - "zip": 26347 - }, - "email": "marie.gardner@example.com", - "username": "bluemeercat194", - "password": "connect", - "salt": "qfH34rxB", - "md5": "61981700482c5612559270480fbf4567", - "sha1": "37f6be6f975a88466265986ebae9c2b07a673e14", - "sha256": "3dbd6d576cd1297bba865ee6736a4e4dc71ca096988f580790f9c95823a98b8a", - "registered": 1133035696, - "dob": 1217757022, - "phone": "021-930-9617", - "cell": "081-831-7285", - "PPS": "9137747T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/89.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/89.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/89.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "jeremiah", - "last": "evans" - }, - "location": { - "street": "3685 north road", - "city": "Newcastle West", - "state": "new mexico", - "zip": 42935 - }, - "email": "jeremiah.evans@example.com", - "username": "brownostrich131", - "password": "norris", - "salt": "vGPgl4kC", - "md5": "06e65cc0d00e9d3d3d205c79f35342f9", - "sha1": "1e89774aafd719826a1a38527a3ed4b9b8b73e61", - "sha256": "89e4abba7c75fd282211bc33e5f11819eef0cfd4a145269abd48f307f53e885b", - "registered": 1118213961, - "dob": 644259820, - "phone": "051-781-4437", - "cell": "081-581-3630", - "PPS": "0838940T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/9.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/9.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/9.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "floyd", - "last": "lopez" - }, - "location": { - "street": "5704 strand road", - "city": "Longford", - "state": "delaware", - "zip": 87973 - }, - "email": "floyd.lopez@example.com", - "username": "smallmeercat548", - "password": "wolfen", - "salt": "nb3zSMR1", - "md5": "9b2c148ef60716ce81ffec43ba72d729", - "sha1": "b096428f8f47a18d2e2dda93c9881efbb330acf6", - "sha256": "344089357416eeb618b2c97ee9067aab5c4f640b4677b419f162d18f2bf03c41", - "registered": 1129912405, - "dob": 1859844, - "phone": "021-961-9927", - "cell": "081-203-3277", - "PPS": "4144733T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/38.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/38.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/38.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "steven", - "last": "mitchell" - }, - "location": { - "street": "7366 the drive", - "city": "Loughrea", - "state": "kansas", - "zip": 70753 - }, - "email": "steven.mitchell@example.com", - "username": "brownbutterfly527", - "password": "rebecca", - "salt": "y99R4OyW", - "md5": "17d9fb69044919640a059ae4b36d79d3", - "sha1": "158dd156234cde8ada413faaf960673e76aadd49", - "sha256": "4a2520d3a3f045911853c04a50c3c1986c563e552006c2ecc9c0ac453dc2c4e8", - "registered": 1160454849, - "dob": 188542694, - "phone": "061-355-1579", - "cell": "081-877-4155", - "PPS": "1561320T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/71.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/71.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/71.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "howard", - "last": "james" - }, - "location": { - "street": "7568 patrick street", - "city": "Wicklow", - "state": "pennsylvania", - "zip": 51844 - }, - "email": "howard.james@example.com", - "username": "silverrabbit625", - "password": "mayday", - "salt": "NzKcRMyP", - "md5": "542a7500ecd2770b14fdf8033b95e112", - "sha1": "d7a0bfa3025ddd8e562dc7b68e4aea4fba9ec201", - "sha256": "c3421eda671558af41610539fc566459e57a8ab837e898f79761dbb1b0e4e0b9", - "registered": 1270608170, - "dob": 488376530, - "phone": "021-406-2978", - "cell": "081-365-9005", - "PPS": "1368296T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/2.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/2.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/2.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "lily", - "last": "cunningham" - }, - "location": { - "street": "1627 victoria road", - "city": "Rush", - "state": "wyoming", - "zip": 35621 - }, - "email": "lily.cunningham@example.com", - "username": "crazysnake194", - "password": "playa", - "salt": "4tnMrzpI", - "md5": "82ab973b40a409f636023f311288efc5", - "sha1": "ec3b92f7b6e4b507e779f428d79753307ce0ca1e", - "sha256": "f929c5ebdb886dce764cfa8a772d90971db0049f6b1515e5f4de9846f5f6b900", - "registered": 1259848591, - "dob": 199819663, - "phone": "061-874-7014", - "cell": "081-311-3304", - "PPS": "3758772T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/74.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/74.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/74.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "leah", - "last": "henry" - }, - "location": { - "street": "1738 new road", - "city": "Mallow", - "state": "new mexico", - "zip": 44971 - }, - "email": "leah.henry@example.com", - "username": "silverfish465", - "password": "picasso", - "salt": "jiWhm56a", - "md5": "6a481953798bb8f3b611fbe973b644af", - "sha1": "ee612b4ec167db30e0de829287b1a4695aaa904a", - "sha256": "6d4334f1d50028e36802cdf123beaaad6f420e83bcff0d1feab695c6e2e7004f", - "registered": 1002489603, - "dob": 786391564, - "phone": "021-293-6674", - "cell": "081-912-8657", - "PPS": "5546401T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/43.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/43.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/43.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "bryan", - "last": "elliott" - }, - "location": { - "street": "8138 church street", - "city": "Ballybofey-Stranorlar", - "state": "louisiana", - "zip": 53345 - }, - "email": "bryan.elliott@example.com", - "username": "silverdog120", - "password": "throat", - "salt": "ApWkunMd", - "md5": "b571cca45516befd41a0872dd033c3d2", - "sha1": "3c135823037671aaafc7bcb98c63d37ae3eae2c8", - "sha256": "4cb6a274ec5bf606453063267ca6de6fba7d0f79c9b60d775e5da1b857432416", - "registered": 1019386474, - "dob": 679871258, - "phone": "061-739-0623", - "cell": "081-700-0822", - "PPS": "3650721T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/54.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/54.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/54.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "sophie", - "last": "gray" - }, - "location": { - "street": "7650 denny street", - "city": "Dungarvan", - "state": "idaho", - "zip": 33193 - }, - "email": "sophie.gray@example.com", - "username": "heavywolf213", - "password": "weather", - "salt": "dCpapaG9", - "md5": "43b666267538518847dcea03d3280df2", - "sha1": "122627559393259d8d62542d5a577898d0d78e0d", - "sha256": "ee3e9d96bc5aa645abc1badee1adbc5bc3ccfc0d63aaa9b76d8449ae240be206", - "registered": 1038936232, - "dob": 546729782, - "phone": "011-758-6170", - "cell": "081-651-8958", - "PPS": "4119751T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/70.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/70.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/70.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "mrs", - "first": "maddison", - "last": "carter" - }, - "location": { - "street": "5988 south street", - "city": "Edenderry", - "state": "california", - "zip": 21139 - }, - "email": "maddison.carter@example.com", - "username": "brownostrich213", - "password": "jade", - "salt": "EuHqWwOw", - "md5": "97b1be3f18f3b0a7aa27c9e4775c8941", - "sha1": "8e87fe6dc50ead21e1518af0ed69cf1e45652d01", - "sha256": "3bb5d4b83d8f19adf7f5b438614719bd500f51e7aaf347cc1cb3e29bf033c514", - "registered": 989077207, - "dob": 1159981967, - "phone": "041-469-9584", - "cell": "081-379-6169", - "PPS": "2917408T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/31.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/31.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/31.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "caroline", - "last": "sanders" - }, - "location": { - "street": "5420 high street", - "city": "Roscommon", - "state": "oklahoma", - "zip": 24611 - }, - "email": "caroline.sanders@example.com", - "username": "smallkoala257", - "password": "rong", - "salt": "y9iJfRLY", - "md5": "69617896b6eb8c26943798be757574af", - "sha1": "40fdf346a51452ec592d50eb90f5d6da44ab57d2", - "sha256": "bb0cc1220f527f34fb7dfa2ad7b2ee3f0d3791009432f8b25392b3324a2b2a74", - "registered": 1010096183, - "dob": 1268541883, - "phone": "021-567-1035", - "cell": "081-429-0129", - "PPS": "5789418T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/13.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/13.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/13.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "mrs", - "first": "kathleen", - "last": "obrien" - }, - "location": { - "street": "1156 church road", - "city": "Leixlip", - "state": "north dakota", - "zip": 33063 - }, - "email": "kathleen.obrien@example.com", - "username": "tinydog949", - "password": "stroke", - "salt": "DYjX8wxr", - "md5": "eb05ada2462d8e1fa571fb079d59afd8", - "sha1": "136fceb6d15ae966eb6f79353a639ec29be0a54e", - "sha256": "ad5b2caaddc0e38512908b2726fb6cbdf90b47f07b97343504c871117864d8ca", - "registered": 1116087090, - "dob": 106065184, - "phone": "031-139-4073", - "cell": "081-895-0834", - "PPS": "0501572T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/2.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/2.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/2.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "gordon", - "last": "knight" - }, - "location": { - "street": "6290 denny street", - "city": "Donabate", - "state": "alabama", - "zip": 72775 - }, - "email": "gordon.knight@example.com", - "username": "heavyleopard943", - "password": "20202020", - "salt": "5RxRs0ij", - "md5": "5a2bba94ec55967c10dee2f646f3fc5b", - "sha1": "dd992761cd8f7477a515d1eb902aa468a4359757", - "sha256": "5325e25eaafbb22e15e18a29a7a83fdfc0c14ad2df106e47c08264786bdee7a0", - "registered": 1372032863, - "dob": 1321810898, - "phone": "071-969-0705", - "cell": "081-069-7701", - "PPS": "5451010T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/30.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/30.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/30.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "ms", - "first": "allie", - "last": "rice" - }, - "location": { - "street": "7700 albert road", - "city": "Kilkenny", - "state": "new hampshire", - "zip": 71188 - }, - "email": "allie.rice@example.com", - "username": "whitegoose462", - "password": "answer", - "salt": "cep9hekm", - "md5": "cc9e740cf3fd5379027077f1c42913e2", - "sha1": "568101712037d1fadbcd088a44c6527c7ea94f63", - "sha256": "50922a4cdad01d1e7c22258d8b7f84ddc5ef5e4bb840ec5778596144247dd5f2", - "registered": 1044447008, - "dob": 268689543, - "phone": "051-278-3633", - "cell": "081-307-4193", - "PPS": "0809890T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/41.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/41.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/41.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "mrs", - "first": "diana", - "last": "kelly" - }, - "location": { - "street": "6446 victoria road", - "city": "Portlaoise", - "state": "texas", - "zip": 80370 - }, - "email": "diana.kelly@example.com", - "username": "ticklishbutterfly246", - "password": "xmas", - "salt": "bNMpL6Ox", - "md5": "68ea43870e1fc12a58a892e35a0ee663", - "sha1": "20c911363bc0a01a7599113d38729db534665a14", - "sha256": "95fd1173a1595d060ff427b7bac2bf418e3655de8c26dd8085d7db039ffd2d61", - "registered": 1195755959, - "dob": 1431929181, - "phone": "041-573-5441", - "cell": "081-415-4168", - "PPS": "5150201TA", - "picture": { - "large": "https://randomuser.me/api/portraits/women/73.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/73.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/73.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "mia", - "last": "gibson" - }, - "location": { - "street": "5449 o'connell avenue", - "city": "Tuam", - "state": "connecticut", - "zip": 25615 - }, - "email": "mia.gibson@example.com", - "username": "ticklishgoose621", - "password": "taurus", - "salt": "X4a6Hvik", - "md5": "6739816eed27e3e77a3eb14c36b8171b", - "sha1": "e2db5fa7ac0999a24870edc01719f33384caad7f", - "sha256": "f689c97d436c85b7787f7897a7ba6c8fe3c321ea3ef79c08ad8746244d9c062d", - "registered": 1291210006, - "dob": 533404840, - "phone": "041-903-1382", - "cell": "081-255-5018", - "PPS": "4382563T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/58.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/58.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/58.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "elijah", - "last": "king" - }, - "location": { - "street": "5736 denny street", - "city": "Lusk", - "state": "wisconsin", - "zip": 59114 - }, - "email": "elijah.king@example.com", - "username": "orangedog542", - "password": "chewbacc", - "salt": "V9LpOKY6", - "md5": "8454cd164f1cd4c05e2603925a240b91", - "sha1": "2bd668d4066b6b7fe282606e0212ed09081663f3", - "sha256": "a25899e761a6ff327d298727f6b65aae982f3e4e35a277fe7752db3e3747d0f1", - "registered": 1369834181, - "dob": 1158985736, - "phone": "011-024-9246", - "cell": "081-585-8908", - "PPS": "6607125T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/30.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/30.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/30.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "paige", - "last": "chambers" - }, - "location": { - "street": "5179 church lane", - "city": "Oranmore", - "state": "washington", - "zip": 85776 - }, - "email": "paige.chambers@example.com", - "username": "goldenfish109", - "password": "dustin", - "salt": "wttET9w6", - "md5": "d3459cff49496900b3d0abddb49da6a1", - "sha1": "de32f4d55c3917b5e6d64653f39a7bf1f96a50e7", - "sha256": "7a3bcf155c797df689ba205637dabe4d6d0fe06b5c7f497f41fe4aba01a6364a", - "registered": 1064533108, - "dob": 287903785, - "phone": "021-395-8813", - "cell": "081-057-4051", - "PPS": "2959617T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/19.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/19.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/19.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "ruben", - "last": "lane" - }, - "location": { - "street": "4330 grove road", - "city": "Dublin", - "state": "rhode island", - "zip": 41256 - }, - "email": "ruben.lane@example.com", - "username": "ticklishrabbit706", - "password": "rusty2", - "salt": "NdWwdDn4", - "md5": "165734fdaecf7160c9ad2bb02d969032", - "sha1": "04d690293236edf5ebdecfb3b7fcccd7f777bf4e", - "sha256": "b5101d41363b7b9850eea2c870f0ebe1fd18a5c40910cf938b93be5536a4d21a", - "registered": 1062425874, - "dob": 333384176, - "phone": "061-955-8357", - "cell": "081-386-4368", - "PPS": "9203068T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/52.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/52.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/52.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "brayden", - "last": "carr" - }, - "location": { - "street": "1212 henry street", - "city": "Cashel", - "state": "virginia", - "zip": 49118 - }, - "email": "brayden.carr@example.com", - "username": "purpledog240", - "password": "11112222", - "salt": "qTVAaZh7", - "md5": "d3a5265ea6171e0d76ded9cf5a68c8c1", - "sha1": "8b3dbbba54430a5b628b8d48c823fd4b406df281", - "sha256": "dcdfea07b28779f4813f420f78a3b6bda75193b37750265d2e61da64dece69ce", - "registered": 1255187251, - "dob": 551058090, - "phone": "021-319-8542", - "cell": "081-480-6783", - "PPS": "0072090T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/60.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/60.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/60.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "brandon", - "last": "snyder" - }, - "location": { - "street": "5668 west street", - "city": "Swords", - "state": "colorado", - "zip": 38686 - }, - "email": "brandon.snyder@example.com", - "username": "silverelephant219", - "password": "groucho", - "salt": "DTzikUv2", - "md5": "eca64a2417220d55a9aa3ebb62ec6ac0", - "sha1": "46ce208f609cf7bcac419b7b81e380a086bd997e", - "sha256": "1e33011fc217f5c68c002a05d035739c2718e7029684f3e718bec627b7a74b64", - "registered": 1352582949, - "dob": 1283428578, - "phone": "011-987-7286", - "cell": "081-530-4335", - "PPS": "6578926T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/76.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/76.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/76.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "floyd", - "last": "lord" - }, - "location": { - "street": "7124 the avenue", - "city": "Castlebar", - "state": "kentucky", - "zip": 45722 - }, - "email": "floyd.lord@example.com", - "username": "lazyrabbit202", - "password": "spider", - "salt": "IopIHftv", - "md5": "1de2e0b5dae1a17ef02c904daec8ba91", - "sha1": "bde8946970fc65f4a734112eb411fe8a51e7d81f", - "sha256": "f14f13d5067ce267faefc3abf13e1026bf922c9db1266713478db6a8e76591f0", - "registered": 1349235454, - "dob": 1396877972, - "phone": "031-099-7615", - "cell": "081-712-9419", - "PPS": "8225067TA", - "picture": { - "large": "https://randomuser.me/api/portraits/men/35.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/35.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/35.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "guy", - "last": "davis" - }, - "location": { - "street": "6437 church street", - "city": "Navan", - "state": "wisconsin", - "zip": 55629 - }, - "email": "guy.davis@example.com", - "username": "goldenfrog664", - "password": "longjohn", - "salt": "3yZbJ2BL", - "md5": "1675bbd746bb7a0dc305bd7497e56350", - "sha1": "3160fae46e5cd27ac59c62ab4b87cbdbef07d724", - "sha256": "b5a23a6dc1374cf1fb7a8a18044b3ae67c281f59b938fcaf384f2b991c934dbf", - "registered": 1157364663, - "dob": 1170585330, - "phone": "021-969-4594", - "cell": "081-201-8382", - "PPS": "2522648T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/19.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/19.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/19.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "hunter", - "last": "osullivan" - }, - "location": { - "street": "1534 park road", - "city": "Tramore", - "state": "washington", - "zip": 63286 - }, - "email": "hunter.osullivan@example.com", - "username": "lazybird412", - "password": "fireblad", - "salt": "nnVGfcKm", - "md5": "754151aede7cc7b1abcc6635af851cc4", - "sha1": "1e1b76a0ac9fdd2bdb0ab75c494094d887d32469", - "sha256": "954f84fc9917ac13ce4fcb088bafe84ac1907a79c1fe598ee93633c3bc6da92b", - "registered": 964092543, - "dob": 1094022977, - "phone": "041-138-3751", - "cell": "081-826-2674", - "PPS": "0970192T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/44.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/44.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/44.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "ms", - "first": "suzy", - "last": "lewis" - }, - "location": { - "street": "5129 the grove", - "city": "Ballybofey-Stranorlar", - "state": "maine", - "zip": 49572 - }, - "email": "suzy.lewis@example.com", - "username": "redleopard508", - "password": "jules", - "salt": "qLiICYWE", - "md5": "f5a6c3470f91c325924fa7c0042ff7f8", - "sha1": "9e48b31359862c16467cff9304d5365de3752c4d", - "sha256": "1b668b2521318ee8a8d0f2e7742efeb5aa3ebc220c71fdceb0089d450f96cc40", - "registered": 961690618, - "dob": 623506149, - "phone": "021-745-6036", - "cell": "081-802-0321", - "PPS": "1500550T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/49.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/49.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/49.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "mrs", - "first": "scarlett", - "last": "doyle" - }, - "location": { - "street": "6175 high street", - "city": "Newcastle West", - "state": "vermont", - "zip": 22417 - }, - "email": "scarlett.doyle@example.com", - "username": "blueelephant549", - "password": "andy", - "salt": "OiON6osW", - "md5": "15cb74ab7485d47e49434440efa19580", - "sha1": "bc684b087233fe621c69a02f0a5b434091c6666c", - "sha256": "3a29343d4e924d998a755674221585e9d292fd48b9fe18992256649986867e22", - "registered": 1266010484, - "dob": 785531984, - "phone": "021-724-5033", - "cell": "081-452-3941", - "PPS": "5005822T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/56.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/56.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/56.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "darryl", - "last": "terry" - }, - "location": { - "street": "3650 cork street", - "city": "Cavan", - "state": "delaware", - "zip": 54477 - }, - "email": "darryl.terry@example.com", - "username": "tinysnake295", - "password": "delta", - "salt": "RpGYMVvJ", - "md5": "896428a97f3363f7b793dc6fcb6813e0", - "sha1": "c9fc14cc4c8b965c97a6e6257065bb564e79c47f", - "sha256": "2c0de0f38346d77cb87092bd517f1e338abf6f69a1fbd3768b9ae23dc054046d", - "registered": 1113553812, - "dob": 149914722, - "phone": "051-690-5047", - "cell": "081-270-9407", - "PPS": "7865053T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/76.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/76.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/76.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "mathew", - "last": "douglas" - }, - "location": { - "street": "6397 pearse street", - "city": "Dunboyne", - "state": "new mexico", - "zip": 32936 - }, - "email": "mathew.douglas@example.com", - "username": "blackduck970", - "password": "megan", - "salt": "wLRpg7HY", - "md5": "34d003a319ceca08d62954a7c351ac8d", - "sha1": "1d1f8fbe76bc1b26544c2c6c32fbeff130ee639c", - "sha256": "f677195dcd5009299146f422cf72a72bf7e15000d7556ecba4c6633c215cc9a3", - "registered": 1114551285, - "dob": 1196780255, - "phone": "021-725-4096", - "cell": "081-008-2546", - "PPS": "6385060T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/28.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/28.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/28.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "blake", - "last": "jacobs" - }, - "location": { - "street": "6077 park avenue", - "city": "Lusk", - "state": "rhode island", - "zip": 94177 - }, - "email": "blake.jacobs@example.com", - "username": "silverpeacock438", - "password": "shauna", - "salt": "CSiAbmQk", - "md5": "da5a0bb9b644d988adfefee55e3b0638", - "sha1": "68a1d44dd32c077cd118266dae11eac6c9cb3796", - "sha256": "044ae7146c5dd35dbd1129210df8cb977aa8f37926bdab22a5d6e2b51a198807", - "registered": 1207296583, - "dob": 716501676, - "phone": "071-179-3251", - "cell": "081-276-3453", - "PPS": "4700733T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/66.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/66.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/66.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "tony", - "last": "flores" - }, - "location": { - "street": "2106 church lane", - "city": "Skerries", - "state": "kansas", - "zip": 48234 - }, - "email": "tony.flores@example.com", - "username": "greenlion920", - "password": "bigbooty", - "salt": "ksAd60n4", - "md5": "f41673df1c64fa0071498e654d9c86d4", - "sha1": "bd2615ba723d75026510bf08bffe2da48b9e934c", - "sha256": "a0db6db8b1cb99389973c06681a40ca9d0d41309441a37b7c0b617309033dc75", - "registered": 1045446553, - "dob": 469926629, - "phone": "051-955-1663", - "cell": "081-463-0900", - "PPS": "7290508T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/10.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/10.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/10.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "wesley", - "last": "berry" - }, - "location": { - "street": "6676 george street", - "city": "Kilcoole", - "state": "hawaii", - "zip": 60065 - }, - "email": "wesley.berry@example.com", - "username": "redfrog357", - "password": "polo", - "salt": "7Jn98Cee", - "md5": "54fe3b4c68a4d79c149ae61a4b4fc9bd", - "sha1": "8d8bfb8ad92dc31105267a9938f1b4e95e50f838", - "sha256": "2bcce7f79ac6dbae43378d90dabcb7f7b11a4ee0a4b213bcf7de04aa5270ba50", - "registered": 1083427252, - "dob": 456442236, - "phone": "061-104-2002", - "cell": "081-843-9171", - "PPS": "3597881T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/59.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/59.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/59.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "ms", - "first": "caroline", - "last": "jenkins" - }, - "location": { - "street": "5902 west street", - "city": "Ballina", - "state": "georgia", - "zip": 29441 - }, - "email": "caroline.jenkins@example.com", - "username": "purplefish853", - "password": "number", - "salt": "AazrmXyS", - "md5": "91f1ac8a1bed971bf07c2e9b2be2782a", - "sha1": "8846c159f9e24667a212055661bfc7693d0bed74", - "sha256": "3f67d22f13ca41edeb82df6ee014fa1f0ada795578e47e56bdf622cede403872", - "registered": 1250651166, - "dob": 460291728, - "phone": "061-639-2338", - "cell": "081-053-6509", - "PPS": "8380532T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/61.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/61.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/61.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "lisa", - "last": "smythe" - }, - "location": { - "street": "6153 george street", - "city": "Athy", - "state": "arkansas", - "zip": 33319 - }, - "email": "lisa.smythe@example.com", - "username": "bluedog611", - "password": "chilly", - "salt": "wFBOTkYW", - "md5": "c0f2341c0ac1002ffa01c0594beb6871", - "sha1": "8817f3fd7e760eccf114298161f552c2f5bd0cf2", - "sha256": "acdf7a0f6c9e168765a06bc0e1692de2157f9db425372fb2adef1d0b3c4639f4", - "registered": 1063570720, - "dob": 68475931, - "phone": "011-538-1141", - "cell": "081-535-6128", - "PPS": "3174100T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/74.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/74.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/74.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "mrs", - "first": "kelly", - "last": "nguyen" - }, - "location": { - "street": "2653 novara avenue", - "city": "Tramore", - "state": "delaware", - "zip": 89835 - }, - "email": "kelly.nguyen@example.com", - "username": "organicostrich898", - "password": "medical", - "salt": "0Z0n7YsA", - "md5": "cda98cb8e63824200e1ad3df10bf697e", - "sha1": "0fb604cd3fd2892b683831d2610c3339cd1dd0f1", - "sha256": "debbb57b011cd339602ae7eca0c125aa9b4a75c7e81df81e08c6c94364c144a7", - "registered": 1039259849, - "dob": 1327348069, - "phone": "051-238-6828", - "cell": "081-433-5323", - "PPS": "9817432T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/37.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/37.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/37.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "mrs", - "first": "maria", - "last": "powell" - }, - "location": { - "street": "8345 dublin road", - "city": "Ballina", - "state": "nebraska", - "zip": 79315 - }, - "email": "maria.powell@example.com", - "username": "bluerabbit632", - "password": "cassie", - "salt": "bZA8oHQ0", - "md5": "0900df92a935d63a18c1fc7c2c84fdc8", - "sha1": "a0e9488d28f4bfef23aeb212f36bbaf4675350b1", - "sha256": "d430ebfea7e7fbacf934f17f7b8019caf2cd95ab67266e5de198d178c3f6e26f", - "registered": 1361470263, - "dob": 547316592, - "phone": "051-487-2889", - "cell": "081-730-3108", - "PPS": "2016910T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/75.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/75.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/75.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "sheryl", - "last": "jordan" - }, - "location": { - "street": "9643 herbert road", - "city": "Athenry", - "state": "connecticut", - "zip": 50591 - }, - "email": "sheryl.jordan@example.com", - "username": "purplelion827", - "password": "0069", - "salt": "dCikUX0S", - "md5": "550e0e141855c21b99ebcec082adc7ea", - "sha1": "1016d9594926e064d3496dd4b7350a037dec6761", - "sha256": "a9d651531d4f120a235fcc7f4f774338a556861d6a4c23786745ab7d45177c68", - "registered": 951200134, - "dob": 418110390, - "phone": "061-742-8972", - "cell": "081-106-7535", - "PPS": "9086129T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/17.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/17.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/17.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "troy", - "last": "williams" - }, - "location": { - "street": "4987 grafton street", - "city": "Arklow", - "state": "florida", - "zip": 42557 - }, - "email": "troy.williams@example.com", - "username": "heavymouse922", - "password": "vagabond", - "salt": "iYTIqEOU", - "md5": "2d5b4a702df133d8045a9b55a83b9b64", - "sha1": "f37ee2c0657facd92c7b33fc18a4cb0c8b82722b", - "sha256": "b5ddc14313bc2021b9ab80cd3c6157ffd7b4b070412396c6d092aacbe844c12a", - "registered": 1040760240, - "dob": 670618999, - "phone": "041-700-3283", - "cell": "081-929-3147", - "PPS": "5190403T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/62.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/62.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/62.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "mrs", - "first": "sophia", - "last": "weaver" - }, - "location": { - "street": "2947 woodlawn avenue", - "city": "Longford", - "state": "oklahoma", - "zip": 83270 - }, - "email": "sophia.weaver@example.com", - "username": "silversnake446", - "password": "doom", - "salt": "OHeUb09a", - "md5": "a14c2b7da0542a233e2e6266c8c015df", - "sha1": "ffe0c520b8457d090873e4cd4c82fd7dabf6f254", - "sha256": "99208b568e0e4ee51760d75d30f364d47b06761af9a98fe5ef82d7138238a102", - "registered": 1269306056, - "dob": 705942235, - "phone": "031-820-4914", - "cell": "081-034-0193", - "PPS": "0991068T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/58.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/58.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/58.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "theodore", - "last": "morrison" - }, - "location": { - "street": "6988 high street", - "city": "Athenry", - "state": "new mexico", - "zip": 86211 - }, - "email": "theodore.morrison@example.com", - "username": "goldenbear875", - "password": "clarke", - "salt": "2oABRpN0", - "md5": "e25a8ebbe6c8dda94684e0b2bfe4e53f", - "sha1": "c23cbd20bc5bb27086e786569aa06ee5a47f79c9", - "sha256": "25fade6596283344856b26a6c21be36e8c50e12659c138947d7225ff3dccaee5", - "registered": 1038928443, - "dob": 576384193, - "phone": "041-547-0058", - "cell": "081-849-2980", - "PPS": "5715044T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/5.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/5.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/5.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "chloe", - "last": "richardson" - }, - "location": { - "street": "5740 dame street", - "city": "Cork", - "state": "massachusetts", - "zip": 59601 - }, - "email": "chloe.richardson@example.com", - "username": "organicbird319", - "password": "pontiac", - "salt": "HQ7lrwNp", - "md5": "7dd89395be94f129b5bdcb16d4ec4f96", - "sha1": "cd24be2e8b31f2c083969ce5b10ff8b230ceb694", - "sha256": "c2128dacaf3fe87733591562f0d82dfb06199a5f94aebb1051a60202363c1daf", - "registered": 1368621544, - "dob": 1059973825, - "phone": "071-573-0853", - "cell": "081-948-7200", - "PPS": "8545364T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/29.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/29.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/29.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "erin", - "last": "cunningham" - }, - "location": { - "street": "6993 mill road", - "city": "Ballinasloe", - "state": "iowa", - "zip": 72457 - }, - "email": "erin.cunningham@example.com", - "username": "goldenbear361", - "password": "1957", - "salt": "ZBymwR88", - "md5": "5e51610181c1353bdcb3a8ca7f78d8fc", - "sha1": "c86898c4ca760beaa94585b1994b96f4c6319924", - "sha256": "ca33ac5694e7efd40ed58e6b37cc0332c3411badd268a1abeb3fae4744e4dcf0", - "registered": 1159488512, - "dob": 273015448, - "phone": "031-994-1553", - "cell": "081-840-9174", - "PPS": "1874394T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/91.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/91.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/91.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "ms", - "first": "brittany", - "last": "stanley" - }, - "location": { - "street": "9460 park avenue", - "city": "Dungarvan", - "state": "missouri", - "zip": 38241 - }, - "email": "brittany.stanley@example.com", - "username": "brownmeercat999", - "password": "fraser", - "salt": "PKKfuqlb", - "md5": "06b9ffa6386cfab89bbb5adb7d52dfc3", - "sha1": "258c036df2732074252a2dfc87ee5950817b11b1", - "sha256": "0b85bcfcbfa4d26c00c5901bb8d8a7b968dea04f3b0feae6fb3157d48702d8ca", - "registered": 966555148, - "dob": 397939782, - "phone": "041-954-2314", - "cell": "081-513-7492", - "PPS": "5470883T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/48.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/48.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/48.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "mia", - "last": "gordon" - }, - "location": { - "street": "2468 south street", - "city": "Enniscorthy", - "state": "north carolina", - "zip": 70989 - }, - "email": "mia.gordon@example.com", - "username": "silverostrich370", - "password": "gallaries", - "salt": "Ea5AAE26", - "md5": "aec52ac61f51d8fef80a01dce488719a", - "sha1": "380cbd32900c8facef0c33e4ede4af894e3ef0ce", - "sha256": "5b556fb8c3901e3832f69413826c6b35145b7b8e2e3e87dafc8c53aaaacb9b77", - "registered": 1273758579, - "dob": 281923403, - "phone": "051-022-0352", - "cell": "081-987-9692", - "PPS": "2402767T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/7.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/7.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/7.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "ms", - "first": "karen", - "last": "jordan" - }, - "location": { - "street": "3407 the drive", - "city": "Newbridge", - "state": "minnesota", - "zip": 99905 - }, - "email": "karen.jordan@example.com", - "username": "goldenkoala943", - "password": "racecar", - "salt": "BfdlNWVW", - "md5": "1eeac0758fb956b6e49bd58653823451", - "sha1": "d00736c0a980c794b41877b40479e3791729cdb4", - "sha256": "b340a6f931287998acd161ecd891c3a9a20389b51f4233219aae69ab8c2e9c7f", - "registered": 1055091584, - "dob": 1181450758, - "phone": "011-475-4252", - "cell": "081-415-3152", - "PPS": "1360142T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/41.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/41.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/41.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "ron", - "last": "hansen" - }, - "location": { - "street": "8219 the green", - "city": "Galway", - "state": "nebraska", - "zip": 89993 - }, - "email": "ron.hansen@example.com", - "username": "silversnake641", - "password": "ncc74656", - "salt": "YLGMLtkp", - "md5": "12343f1a70329a5155f0ba048635810e", - "sha1": "6f721984dcb61a524baa0988e2b263c401d38022", - "sha256": "442816b97e839f3134946fca71c0809a3f10ff9e73464ac62dbc17941389a1e2", - "registered": 1122260071, - "dob": 546337840, - "phone": "011-308-7200", - "cell": "081-353-0208", - "PPS": "1827849T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/37.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/37.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/37.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "ethan", - "last": "lewis" - }, - "location": { - "street": "1035 north street", - "city": "Tullamore", - "state": "north carolina", - "zip": 43688 - }, - "email": "ethan.lewis@example.com", - "username": "whitelion995", - "password": "nofear", - "salt": "LECgLgi0", - "md5": "479ca36af95ab408fd8280de7189e34a", - "sha1": "615bc0831bfcf9fccf443a9cdbb68f44ee7ae8b8", - "sha256": "ffd446a1c9c90df094c2f113df0bd090a493d322b3815d24c9104db46af16ca3", - "registered": 1000524141, - "dob": 1397040157, - "phone": "031-467-8796", - "cell": "081-331-4308", - "PPS": "4652654TA", - "picture": { - "large": "https://randomuser.me/api/portraits/men/42.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/42.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/42.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "alfred", - "last": "caldwell" - }, - "location": { - "street": "8584 manor road", - "city": "Monaghan", - "state": "connecticut", - "zip": 80417 - }, - "email": "alfred.caldwell@example.com", - "username": "blackostrich469", - "password": "enforcer", - "salt": "woKzGcHn", - "md5": "b2009cccd87d11da4a701b9341d572b2", - "sha1": "95abf1d2e14564d49a7d98473ccea1bba970e192", - "sha256": "3b0484266f47830803d35d8b310a675b40b9d545b5e48b615426e20b694e57a6", - "registered": 1305707448, - "dob": 325569519, - "phone": "071-449-5586", - "cell": "081-132-8765", - "PPS": "2869766T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/2.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/2.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/2.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "ms", - "first": "janet", - "last": "burke" - }, - "location": { - "street": "4095 the drive", - "city": "Tralee", - "state": "kentucky", - "zip": 77863 - }, - "email": "janet.burke@example.com", - "username": "lazygorilla669", - "password": "survivor", - "salt": "Mkm2OGhR", - "md5": "bed3fcd8b98593f9a5b5baec7e4c0aa8", - "sha1": "4a8f8e91bd6195ef336c664a63e3954c5770cd84", - "sha256": "7bb57c412df77a475c7454f2e16d559bbbb8fa6c71130dc11e0c78e821ab7e5d", - "registered": 1337139172, - "dob": 912951394, - "phone": "061-753-9741", - "cell": "081-107-4111", - "PPS": "3776773T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/30.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/30.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/30.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "kent", - "last": "garrett" - }, - "location": { - "street": "4040 strand road", - "city": "Birr", - "state": "tennessee", - "zip": 53066 - }, - "email": "kent.garrett@example.com", - "username": "goldenmouse489", - "password": "faithful", - "salt": "FgeCtcWn", - "md5": "fcc05c1dc14326afb5d45f06760cf765", - "sha1": "189ccc738ef146a88fb7660382e507cf4d997c87", - "sha256": "bfa7b0e0044b54038c01ff8d3081879f877ba6a8bfa7b4c00aac05bc5bb97ee6", - "registered": 1087712916, - "dob": 1409910342, - "phone": "021-505-6610", - "cell": "081-929-5252", - "PPS": "2340530TA", - "picture": { - "large": "https://randomuser.me/api/portraits/men/74.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/74.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/74.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "shaun", - "last": "andrews" - }, - "location": { - "street": "9559 the green", - "city": "Navan", - "state": "california", - "zip": 36355 - }, - "email": "shaun.andrews@example.com", - "username": "yellowbird659", - "password": "hydro", - "salt": "wKXWBltV", - "md5": "98d34503b5897f6a0a60158c60eca5bc", - "sha1": "e2d5c29db510c1fd6f4eb601e32d5265a4728959", - "sha256": "bc3e8e2254796f42f4b1ad2b7dd23132f48b60597d205d49db757e74f0dca868", - "registered": 1023789528, - "dob": 158146014, - "phone": "071-089-9197", - "cell": "081-898-1596", - "PPS": "6482778T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/75.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/75.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/75.jpg" - } - } - }, - { - "user": { - "gender": "male", - "name": { - "title": "mr", - "first": "flenn", - "last": "hart" - }, - "location": { - "street": "4433 new street", - "city": "Carlow", - "state": "new hampshire", - "zip": 34566 - }, - "email": "flenn.hart@example.com", - "username": "organicrabbit174", - "password": "password", - "salt": "n6RvTFyo", - "md5": "3339e9632a49562f758b213d7bc3d019", - "sha1": "7df922a426f356bcba8840e936cf868efb72e2c6", - "sha256": "146fcc98835ac7e45f6f541e76ccb0a14571c186f8e14eaa35ecae827af29f83", - "registered": 1123651638, - "dob": 529294285, - "phone": "071-237-7022", - "cell": "081-475-1865", - "PPS": "0432817T", - "picture": { - "large": "https://randomuser.me/api/portraits/men/38.jpg", - "medium": "https://randomuser.me/api/portraits/med/men/38.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/men/38.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "mrs", - "first": "stephanie", - "last": "harris" - }, - "location": { - "street": "9498 church road", - "city": "Cavan", - "state": "north dakota", - "zip": 51508 - }, - "email": "stephanie.harris@example.com", - "username": "orangegoose487", - "password": "office", - "salt": "td8lESOc", - "md5": "a22ff630ff7e7a567a303675de3bbd00", - "sha1": "ca75a44771a8c9fd2e117c100ee35a3d34fe3810", - "sha256": "ff3dfc0fbfd8516ef117a63d4877fe7a1ec2f97554a14e794781aaf32551de66", - "registered": 1386042538, - "dob": 473812201, - "phone": "021-212-9830", - "cell": "081-672-1352", - "PPS": "6828372T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/90.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/90.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/90.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "rose", - "last": "lynch" - }, - "location": { - "street": "8730 west street", - "city": "Sligo", - "state": "connecticut", - "zip": 40703 - }, - "email": "rose.lynch@example.com", - "username": "brownmeercat557", - "password": "nipples", - "salt": "IdmXUbA5", - "md5": "f4943b802ac83fd4bcbaec195dea987a", - "sha1": "e9a7f15241fbee2beb9c537825d49a6278a267e4", - "sha256": "0da7cd0ed1e3c1dc46b616b8cf8f618aac4dcb2e8d507714cb60823f92ba69aa", - "registered": 1009914451, - "dob": 809411400, - "phone": "061-055-6118", - "cell": "081-866-7460", - "PPS": "0076565T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/37.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/37.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/37.jpg" - } - } - }, - { - "user": { - "gender": "female", - "name": { - "title": "miss", - "first": "jen", - "last": "jenkins" - }, - "location": { - "street": "5260 herbert road", - "city": "Longford", - "state": "wyoming", - "zip": 68517 - }, - "email": "jen.jenkins@example.com", - "username": "beautifullion672", - "password": "huge", - "salt": "pXAdKnLh", - "md5": "6c30ee91b787954d643130f312f5c9b0", - "sha1": "1b7a32726dea8c3a8de1ac4b7e3d95abee8d836e", - "sha256": "b3c5368cb3b72822d2283e87faf28882bf70848c48829141a241672d2092bccc", - "registered": 947626940, - "dob": 125270545, - "phone": "061-970-6082", - "cell": "081-464-4847", - "PPS": "8624410T", - "picture": { - "large": "https://randomuser.me/api/portraits/women/57.jpg", - "medium": "https://randomuser.me/api/portraits/med/women/57.jpg", - "thumbnail": "https://randomuser.me/api/portraits/thumb/women/57.jpg" - } - } - } - ], - "nationality": "IE", - "seed": "8e74179fc20a0b7405", - "version": "0.7" -} \ No newline at end of file diff --git a/app/bower_components/iron-data-table/index.html b/app/bower_components/iron-data-table/index.html deleted file mode 100644 index 5ec6984..0000000 --- a/app/bower_components/iron-data-table/index.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - iron-data-table - - - - - - - - - - - - - diff --git a/app/bower_components/iron-data-table/iron-data-table.html b/app/bower_components/iron-data-table/iron-data-table.html deleted file mode 100644 index fea9e8c..0000000 --- a/app/bower_components/iron-data-table/iron-data-table.html +++ /dev/null @@ -1,1013 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/bower_components/iron-data-table/iron-data-table.png b/app/bower_components/iron-data-table/iron-data-table.png deleted file mode 100644 index e3a6705..0000000 Binary files a/app/bower_components/iron-data-table/iron-data-table.png and /dev/null differ diff --git a/app/bower_components/iron-data-table/package.json b/app/bower_components/iron-data-table/package.json deleted file mode 100644 index 35e5edc..0000000 --- a/app/bower_components/iron-data-table/package.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "iron-data-table", - "version": "0.1.4", - "description": "![](iron-data-table.png)", - "main": "index.html", - "directories": { - "test": "test" - }, - "scripts": { - "test": "node_modules/web-component-tester/bin/wct", - "install": "node_modules/bower/bin/bower install --allow-root" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/Saulis/iron-data-table.git" - }, - "author": "", - "license": "Apache-2.0", - "bugs": { - "url": "https://github.com/Saulis/iron-data-table/issues" - }, - "homepage": "https://github.com/Saulis/iron-data-table#readme", - "dependencies": { - "bower": "^1.7.7" - }, - "devDependencies": { - "web-component-tester": "^4.2.0" - } -} diff --git a/app/bower_components/iron-data-table/tsconfig.json b/app/bower_components/iron-data-table/tsconfig.json deleted file mode 100644 index c9c6cc2..0000000 --- a/app/bower_components/iron-data-table/tsconfig.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "module": "system", - "moduleResolution": "node", - "sourceMap": true, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "removeComments": false, - "noImplicitAny": false - }, - "exclude": [ - "bower_components", - "node_modules", - "test", - "demo" - ] -} diff --git a/app/bower_components/iron-data-table/wct.conf.js b/app/bower_components/iron-data-table/wct.conf.js deleted file mode 100644 index 9dc8ba5..0000000 --- a/app/bower_components/iron-data-table/wct.conf.js +++ /dev/null @@ -1,31 +0,0 @@ -module.exports = { - "plugins": { - "sauce": { - "browsers": [{ - "browserName": "microsoftedge", - "platform": "Windows 10", - "version": "20" - }, { - "browserName": "internet explorer", - "platform": "Windows 8.1", - "version": "11" - }, - { - "browserName": "safari", - "platform": "OS X 10.11", - "version": "9" - }, - { - "browserName": "firefox", - "platform": "Windows 10", - "version": "44" - }, - { - "browserName": "chrome", - "platform": "Windows 10", - "version": "48" - } - ] - } - } -}; diff --git a/app/bower_components/iron-doc-viewer/.bower.json b/app/bower_components/iron-doc-viewer/.bower.json index 37a63e3..cc2279b 100644 --- a/app/bower_components/iron-doc-viewer/.bower.json +++ b/app/bower_components/iron-doc-viewer/.bower.json @@ -1,6 +1,6 @@ { "name": "iron-doc-viewer", - "version": "1.0.15", + "version": "1.1.0", "authors": [ "The Polymer Authors" ], @@ -34,13 +34,13 @@ "web-component-tester": "^4.0.0", "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" }, - "_release": "1.0.15", + "_release": "1.1.0", "_resolution": { "type": "version", - "tag": "v1.0.15", - "commit": "f4dca35485bc6b053cb33eb404f2b745dbcc3181" + "tag": "v1.1.0", + "commit": "1c2186596641e347f32764458a22b065dd4f7225" }, "_source": "git://github.com/PolymerElements/iron-doc-viewer.git", - "_target": "^1.0.1", + "_target": "^1.0.0", "_originalSource": "PolymerElements/iron-doc-viewer" } \ No newline at end of file diff --git a/app/bower_components/iron-doc-viewer/bower.json b/app/bower_components/iron-doc-viewer/bower.json index 34509d8..25e6438 100644 --- a/app/bower_components/iron-doc-viewer/bower.json +++ b/app/bower_components/iron-doc-viewer/bower.json @@ -1,6 +1,6 @@ { "name": "iron-doc-viewer", - "version": "1.0.15", + "version": "1.1.0", "authors": [ "The Polymer Authors" ], diff --git a/app/bower_components/iron-doc-viewer/iron-doc-property-styles.html b/app/bower_components/iron-doc-viewer/iron-doc-property-styles.html index 98d7736..dea72f1 100644 --- a/app/bower_components/iron-doc-viewer/iron-doc-property-styles.html +++ b/app/bower_components/iron-doc-viewer/iron-doc-property-styles.html @@ -9,6 +9,25 @@ --> + + + + + +
-
+
@@ -450,7 +453,9 @@ markers: { type: Array, readOnly: true, - value: [] + value: function() { + return []; + } }, }, @@ -561,12 +566,12 @@ this._setDragging(true); }, - _trackX: function(e) { + _trackX: function(event) { if (!this.dragging) { - this._trackStart(e); + this._trackStart(event); } - var dx = Math.min(this._maxx, Math.max(this._minx, e.detail.dx)); + var dx = Math.min(this._maxx, Math.max(this._minx, event.detail.dx)); this._x = this._startx + dx; var immediateValue = this._calcStep(this._calcKnobPosition(this._x / this._w)); @@ -676,6 +681,7 @@ this.increment(); } this.fire('change'); + event.preventDefault(); } }, @@ -687,6 +693,7 @@ this.decrement(); } this.fire('change'); + event.preventDefault(); } }, @@ -734,7 +741,7 @@ * Fired when the slider's immediateValue changes. Only occurs while the * user is dragging. * - * To detect changes to immediateValue that happen for any input (i.e. + * To detect changes to immediateValue that happen for any input (i.e. * dragging, tapping, clicking, etc.) listen for immediate-value-changed * instead. * diff --git a/app/bower_components/paper-slider/test/a11y.html b/app/bower_components/paper-slider/test/a11y.html index 1d5adce..e39f522 100644 --- a/app/bower_components/paper-slider/test/a11y.html +++ b/app/bower_components/paper-slider/test/a11y.html @@ -74,6 +74,31 @@ assert.isTrue(focusSpy.called); }); + test('slider increments on up key"', function() { + var oldValue = slider.value; + var up = MockInteractions.keyboardEventFor('keydown', 38); + slider.dispatchEvent(up); + assert.equal(oldValue + slider.step, slider.value); + assert.isTrue(up.defaultPrevented); + }); + + test('slider decrements on down key"', function() { + var oldValue = slider.value; + var down = MockInteractions.keyboardEventFor('keydown', 40); + slider.dispatchEvent(down); + assert.equal(oldValue - slider.step, slider.value); + assert.isTrue(down.defaultPrevented); + }); + + test('slider does not change on key when disabled"', function() { + slider.disabled = true; + var oldValue = slider.value; + var up = MockInteractions.keyboardEventFor('keydown', 38); + slider.dispatchEvent(up); + assert.equal(oldValue, slider.value); + assert.isFalse(up.defaultPrevented); + }); + a11ySuite('trivialSlider'); }); diff --git a/app/bower_components/paper-spinner/.bower.json b/app/bower_components/paper-spinner/.bower.json index 38dad0d..cc28d74 100644 --- a/app/bower_components/paper-spinner/.bower.json +++ b/app/bower_components/paper-spinner/.bower.json @@ -1,6 +1,6 @@ { "name": "paper-spinner", - "version": "1.2.0", + "version": "1.2.1", "description": "A material design spinner", "authors": [ "The Polymer Authors" @@ -35,11 +35,11 @@ "paper-spinner.html", "paper-spinner-lite.html" ], - "_release": "1.2.0", + "_release": "1.2.1", "_resolution": { "type": "version", - "tag": "v1.2.0", - "commit": "66dc50a940aa9a3a067137defe1712aa85de6f35" + "tag": "v1.2.1", + "commit": "b858c85867bb6e2f9fa00ab335ea9ee496fa14b8" }, "_source": "git://github.com/PolymerElements/paper-spinner.git", "_target": "^1.0.0", diff --git a/app/bower_components/paper-spinner/.travis.yml b/app/bower_components/paper-spinner/.travis.yml index 2f5e400..ff38c72 100644 --- a/app/bower_components/paper-spinner/.travis.yml +++ b/app/bower_components/paper-spinner/.travis.yml @@ -1,23 +1,23 @@ language: node_js sudo: required before_script: - - npm install -g bower polylint web-component-tester - - bower install - - polylint +- npm install -g bower polylint web-component-tester +- bower install +- polylint env: global: - - secure: dpHtK5BMl68o/D6cQO9VsQWBPVuTrFPC56NT6kBLbiQtmxG2E2FD8dN4cHuEWafZopwYSsLLmEIIK77FMaonTSmzos5EixIQyqGxWTyNTpthg0Jenzc+6vZEs3h+3LDodFjdZSu8FgKyxU8SFLLGjAsSy8aegUNBszy7/SY8FAM= - - secure: EASvFsWb/njjh3DOLD5Oz3nw4QPl4aIhDAIhU2qelb2UCp8Q/KGniU7VjNoQ7OSN05jh2ooz8Pu3cAhLmrWumJn2atXEXvRPKtT/+1Ciy3xFcvgmqM0RHB+7qSSOUwgvPW9bwdzVxxMjAW7Oqb7w3nVn9/mEv2sMPNSv7iEbiUI= + - secure: dIA8M55rHJN07lbp0VCU9RkN4CWlbkVdU6cP4wFZabuJJusISThMZVrZeGtbdErvQ8oiSexrE8iCZ7A/OcLnVNCrVBZX5YwJlfbex4I4uG6L8zw1E3oOX1MmdcTx2sI8MffDyG1pnXzwP5lzPItKiscEpepGY9+V0JP1j5z9qVg= + - secure: KvttUgmPIlCz4WU2WIpse5s/1SVXHoS+snGDkNqYLOVXscRjJoncXYbdvLltf7SPrU7gK4HuEuEVRthhDGtuvgrXUlIOS/gaK8dWI3kuVYPppOU1DnlXgAtj/3quGZG1dNw07IGzOEW4Taq/5KdU8LRqb9clvK+jyoBQZKIXbtg= node_js: stable addons: - firefox: latest + firefox: '46.0' apt: sources: - - google-chrome + - google-chrome packages: - - google-chrome-stable + - google-chrome-stable sauce_connect: true script: - - xvfb-run wct - - "if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ]; then wct -s 'default'; fi" +- xvfb-run wct +- if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then wct -s 'default'; fi dist: trusty diff --git a/app/bower_components/paper-spinner/README.md b/app/bower_components/paper-spinner/README.md index ad57a2f..e913ae5 100644 --- a/app/bower_components/paper-spinner/README.md +++ b/app/bower_components/paper-spinner/README.md @@ -1,93 +1,49 @@ - - - [![Build status](https://travis-ci.org/PolymerElements/paper-spinner.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-spinner) -_[Demo and API docs](https://elements.polymer-project.org/elements/paper-spinner)_ - - ##<paper-spinner> Material design: [Progress & activity](https://www.google.com/design/spec/components/progress-activity.html) Element providing a multiple color material design circular spinner. -```html - -``` - -The default spinner cycles between four layers of colors; by default they are -blue, red, yellow and green. It can be customized to cycle between four different -colors. Use for single color spinners. - -### Accessibility - -Alt attribute should be set to provide adequate context for accessibility. If not provided, -it defaults to 'loading'. -Empty alt can be provided to mark the element as decorative if alternative content is provided -in another form (e.g. a text block following the spinner). - -```html - + ```html - +... + + + + ``` - -### Styling - -The following custom properties and mixins are available for styling: - -| Custom property | Description | Default | -| --- | --- | --- | -| `--paper-spinner-color` | Color of the spinner | `--google-blue-500` | -| `--paper-spinner-stroke-width` | The width of the spinner stroke | 3px | - - - - diff --git a/app/bower_components/paper-styles/.bower.json b/app/bower_components/paper-styles/.bower.json index ae677ef..7dbddd3 100644 --- a/app/bower_components/paper-styles/.bower.json +++ b/app/bower_components/paper-styles/.bower.json @@ -1,6 +1,6 @@ { "name": "paper-styles", - "version": "1.1.4", + "version": "1.1.5", "description": "Common (global) styles for Material Design elements.", "authors": [ "The Polymer Authors" @@ -30,11 +30,11 @@ "iron-component-page": "polymerelements/iron-component-page#^1.0.0", "web-component-tester": "^4.0.0" }, - "_release": "1.1.4", + "_release": "1.1.5", "_resolution": { "type": "version", - "tag": "v1.1.4", - "commit": "885bbd74db88dab4fb5dc229cdf994c55fb2b31b" + "tag": "v1.1.5", + "commit": "4b26a4e50db27c53425f61a0dc9148b73691970a" }, "_source": "git://github.com/PolymerElements/paper-styles.git", "_target": "^1.0.0", diff --git a/app/bower_components/paper-styles/CONTRIBUTING.md b/app/bower_components/paper-styles/CONTRIBUTING.md index f147978..093090d 100644 --- a/app/bower_components/paper-styles/CONTRIBUTING.md +++ b/app/bower_components/paper-styles/CONTRIBUTING.md @@ -1,4 +1,3 @@ - + # Polymer Elements ## Guide for Contributors diff --git a/app/bower_components/paper-styles/bower.json b/app/bower_components/paper-styles/bower.json index f3330c3..83a51a6 100644 --- a/app/bower_components/paper-styles/bower.json +++ b/app/bower_components/paper-styles/bower.json @@ -1,6 +1,6 @@ { "name": "paper-styles", - "version": "1.1.4", + "version": "1.1.5", "description": "Common (global) styles for Material Design elements.", "authors": [ "The Polymer Authors" diff --git a/app/bower_components/paper-styles/classes/shadow-layout.html b/app/bower_components/paper-styles/classes/shadow-layout.html index 2638aa8..50708be 100644 --- a/app/bower_components/paper-styles/classes/shadow-layout.html +++ b/app/bower_components/paper-styles/classes/shadow-layout.html @@ -7,6 +7,11 @@ Code distributed by Google as part of the polymer project is also subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt --> + + + diff --git a/app/bower_components/paper-tabs/.bower.json b/app/bower_components/paper-tabs/.bower.json index 636d8b8..ec1881e 100644 --- a/app/bower_components/paper-tabs/.bower.json +++ b/app/bower_components/paper-tabs/.bower.json @@ -1,6 +1,6 @@ { "name": "paper-tabs", - "version": "1.6.2", + "version": "1.8.0", "license": "http://polymer.github.io/LICENSE.txt", "description": "Material design tabs", "private": true, @@ -42,11 +42,11 @@ }, "ignore": [], "homepage": "https://github.com/PolymerElements/paper-tabs", - "_release": "1.6.2", + "_release": "1.8.0", "_resolution": { "type": "version", - "tag": "v1.6.2", - "commit": "fc3df3875f97cbcee8cfa8f4895d86a4fd2925c7" + "tag": "v1.8.0", + "commit": "0476ca9d9b9a1d4702da4f3405ea2bb2801cfbff" }, "_source": "git://github.com/PolymerElements/paper-tabs.git", "_target": "^1.0.0", diff --git a/app/bower_components/paper-tabs/.travis.yml b/app/bower_components/paper-tabs/.travis.yml index c9a2950..6b98b2c 100644 --- a/app/bower_components/paper-tabs/.travis.yml +++ b/app/bower_components/paper-tabs/.travis.yml @@ -1,24 +1,23 @@ language: node_js sudo: required before_script: - - npm install -g bower polylint web-component-tester - - bower install - - polylint -env: - global: - - secure: ieKt2HWOdClqU7OyYA20DFlWduaM0IDk91lO7mWySQL6r55SSB4DnUCgVycQJf0L6S8vyY/fbC/vFP0notyz3MvMAz1NwpRzAI9mKkVWJuaBbm9Ql9PewjanX42chbz3XyqZofXVkfBywmj61NyPM7VRVwhEHmOeYgyFUyV9cls= - - secure: g7yrxdFIVMIjkYBKZ29FHUX3noS6u1lvjUmaAaG28rGaEfXK4XR9fhZABR+6ydAjLjdo+WUMvTp4oi6HYrb6ToByprEli/fTexjeGuagDc5r5R84u3CusBuw9YYHDjstHCBFmIZndD+r4PRXkWvYatciF9c0NCHoVrjTH/woe9g= -node_js: stable +- npm install -g bower polylint web-component-tester +- bower install +- polylint +node_js: '6' addons: - firefox: '46.0' + firefox: latest apt: sources: - - google-chrome + - google-chrome packages: - - google-chrome-stable - sauce_connect: true + - google-chrome-stable script: - - xvfb-run wct -l chrome - - xvfb-run wct -l firefox - - "if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ]; then wct -s 'default'; fi" +- xvfb-run wct -l chrome +- xvfb-run wct -l firefox +- if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then wct -s 'default'; fi dist: trusty +env: + global: + - secure: KEzThhoQ3Aq9kSZIuCzyi6MtYbzxB67JSs2t9CebYoXgW49k3q7Uh/KMUHz8RM04hSa7k2gDGf1Spr4jkXpItHn037aW/Bd+95l49my8pSJvHLEQR8KO/b+FSH/Tu+wKXAm4xk4Mp+vESOxIWap1JXHxSJnoa0EqKyYCeKVVkMI= + - secure: dhfUH2Sx4rC089kHVtjggaGRMdEa0UHa9ksC5buMk5XBI2GriRE+D3/1N7tBxg4f2HcVbi1+7jTIRHz+xYvypuXCr/9Bh7zh19KhBjrMdFYPZwy3fK3O9xfrypwpldFq1Q3mFcJ3p5sfqHjKvvWlGf/lffqQY5rVr8UI86Lklac= diff --git a/app/bower_components/paper-tabs/README.md b/app/bower_components/paper-tabs/README.md index 96683ca..050979f 100644 --- a/app/bower_components/paper-tabs/README.md +++ b/app/bower_components/paper-tabs/README.md @@ -1,21 +1,5 @@ - - - [![Build status](https://travis-ci.org/PolymerElements/paper-tabs.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-tabs) - -_[Demo and API docs](https://elements.polymer-project.org/elements/paper-tabs)_ - +[![Published on webcomponents.org](https://img.shields.io/badge/webcomponents.org-published-blue.svg)](https://beta.webcomponents.org/element/PolymerElements/paper-tabs) ##<paper-tabs> @@ -24,103 +8,39 @@ Material design: [Tabs](https://www.google.com/design/spec/components/tabs.html) `paper-tabs` makes it easy to explore and switch between different views or functional aspects of an app, or to browse categorized data sets. -Use `selected` property to get or set the selected tab. - -Example: - -```html - - TAB 1 - TAB 2 - TAB 3 - + ```html - - TAB 1 - TAB 2 - TAB 3 + + The first tab + Tab two + The third tab + Fourth tab ``` - -### Styling - -The following custom properties and mixins are available for styling: - -| Custom property | Description | Default | -| --- | --- | --- | -| `--paper-tab-ink` | Ink color | `--paper-yellow-a100` | -| `--paper-tab` | Mixin applied to the tab | `{}` | -| `--paper-tab-content` | Mixin applied to the tab content | `{}` | -| `--paper-tab-content-unselected` | Mixin applied to the tab content when the tab is not selected | `{}` | - -This element applies the mixin `--paper-font-common-base` but does not import `paper-styles/typography.html`. -In order to apply the `Roboto` font to this element, make sure you've imported `paper-styles/typography.html`. - - diff --git a/app/bower_components/paper-tabs/bower.json b/app/bower_components/paper-tabs/bower.json index f61942d..01ed284 100644 --- a/app/bower_components/paper-tabs/bower.json +++ b/app/bower_components/paper-tabs/bower.json @@ -1,6 +1,6 @@ { "name": "paper-tabs", - "version": "1.6.2", + "version": "1.8.0", "license": "http://polymer.github.io/LICENSE.txt", "description": "Material design tabs", "private": true, diff --git a/app/bower_components/paper-tabs/paper-tabs.html b/app/bower_components/paper-tabs/paper-tabs.html index 8b84cf6..bc504e1 100644 --- a/app/bower_components/paper-tabs/paper-tabs.html +++ b/app/bower_components/paper-tabs/paper-tabs.html @@ -88,6 +88,8 @@ `--paper-tabs-selection-bar-color` | Color for the selection bar | `--paper-yellow-a100` `--paper-tabs-selection-bar` | Mixin applied to the selection bar | `{}` `--paper-tabs` | Mixin applied to the tabs | `{}` +`--paper-tabs-content` | Mixin applied to the content container of tabs | `{}` +`--paper-tabs-container` | Mixin applied to the layout container of tabs | `{}` @hero hero.svg @demo demo/index.html @@ -126,6 +128,7 @@ white-space: nowrap; overflow: hidden; @apply(--layout-flex-auto); + @apply(--paper-tabs-container); } #tabsContent { @@ -133,6 +136,7 @@ -moz-flex-basis: auto; -ms-flex-basis: auto; flex-basis: auto; + @apply(--paper-tabs-content); } #tabsContent.scrollable { @@ -174,11 +178,11 @@ #selectionBar { position: absolute; - height: 2px; + height: 0; bottom: 0; left: 0; right: 0; - background-color: var(--paper-tabs-selection-bar-color, --paper-yellow-a100); + border-bottom: 2px solid var(--paper-tabs-selection-bar-color, --paper-yellow-a100); -webkit-transform: scale(0); transform: scale(0); -webkit-transform-origin: left center; diff --git a/app/bower_components/paper-toggle-button/.bower.json b/app/bower_components/paper-toggle-button/.bower.json index 77c711e..a5906e9 100644 --- a/app/bower_components/paper-toggle-button/.bower.json +++ b/app/bower_components/paper-toggle-button/.bower.json @@ -1,6 +1,6 @@ { "name": "paper-toggle-button", - "version": "1.2.0", + "version": "1.3.0", "description": "A material design toggle button control", "authors": [ "The Polymer Authors" @@ -35,11 +35,11 @@ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" }, "main": "paper-toggle-button.html", - "_release": "1.2.0", + "_release": "1.3.0", "_resolution": { "type": "version", - "tag": "v1.2.0", - "commit": "6aab07244c07f9598584e6dbce366574f96072a3" + "tag": "v1.3.0", + "commit": "2f279868a9c8965aba76017c7ee6008ac4879f6a" }, "_source": "git://github.com/PolymerElements/paper-toggle-button.git", "_target": "^1.0.0", diff --git a/app/bower_components/paper-toggle-button/.travis.yml b/app/bower_components/paper-toggle-button/.travis.yml index 6e55c13..9c358a8 100644 --- a/app/bower_components/paper-toggle-button/.travis.yml +++ b/app/bower_components/paper-toggle-button/.travis.yml @@ -1,23 +1,24 @@ language: node_js sudo: required before_script: -- npm install -g bower polylint web-component-tester -- bower install -- polylint + - npm install -g bower polylint web-component-tester + - bower install + - polylint env: global: - - secure: Z9YLaTbrBSMCxoeqWI1cK5WFOfA1Cz4rCUhXo4l1WDnQBVcbVEQn6V7BsF9TByrTD4H4f4Gn2SZT8tKA7u5xVZn1I0djzpotogHzqOJ0zQi5krtNczTWIFe3F/fMnNxouAZxvAtkefdH+hXZJHwqlhoHYaoWw6kE7a9EYlV2x48= - - secure: Gdkk92VJJPn8uZ3TRvzMd3tI2ilaqxcFePIVtgnMLc0SKUyYGgTmUghPJ1MDGXa152ejN4c9ydTrU68Wka9yAYRirR2K1W/i6ma4Lz7vX077IhufBjfuXMasP3X7OPGJhIdvHINkpEVrySO5kcDVjCXXq91utWv+2pRQSNdjNKQ= -node_js: stable + - secure: >- + Z9YLaTbrBSMCxoeqWI1cK5WFOfA1Cz4rCUhXo4l1WDnQBVcbVEQn6V7BsF9TByrTD4H4f4Gn2SZT8tKA7u5xVZn1I0djzpotogHzqOJ0zQi5krtNczTWIFe3F/fMnNxouAZxvAtkefdH+hXZJHwqlhoHYaoWw6kE7a9EYlV2x48= + - secure: >- + Gdkk92VJJPn8uZ3TRvzMd3tI2ilaqxcFePIVtgnMLc0SKUyYGgTmUghPJ1MDGXa152ejN4c9ydTrU68Wka9yAYRirR2K1W/i6ma4Lz7vX077IhufBjfuXMasP3X7OPGJhIdvHINkpEVrySO5kcDVjCXXq91utWv+2pRQSNdjNKQ= +node_js: '6' addons: - firefox: '46.0' + firefox: latest apt: sources: - - google-chrome + - google-chrome packages: - - google-chrome-stable - sauce_connect: true + - google-chrome-stable script: -- xvfb-run wct -- if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then wct -s 'default'; fi + - xvfb-run wct + - 'if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then wct -s ''default''; fi' dist: trusty diff --git a/app/bower_components/paper-toggle-button/README.md b/app/bower_components/paper-toggle-button/README.md index 8fee54f..9741b12 100644 --- a/app/bower_components/paper-toggle-button/README.md +++ b/app/bower_components/paper-toggle-button/README.md @@ -1,22 +1,5 @@ - - - [![Build status](https://travis-ci.org/PolymerElements/paper-toggle-button.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-toggle-button) -_[Demo and API docs](https://elements.polymer-project.org/elements/paper-toggle-button)_ - - ##<paper-toggle-button> Material design: [Switch](https://www.google.com/design/spec/components/selection-controls.html#selection-controls-switch) @@ -24,32 +7,26 @@ Material design: [Switch](https://www.google.com/design/spec/components/selectio `paper-toggle-button` provides a ON/OFF switch that user can toggle the state by tapping or by dragging the switch. -Example: - + ```html - + + ``` - -### Styling - -The following custom properties and mixins are available for styling: - -| Custom property | Description | Default | -| --- | --- | --- | -| `--paper-toggle-button-unchecked-bar-color` | Slider color when the input is not checked | `#000000` | -| `--paper-toggle-button-unchecked-button-color` | Button color when the input is not checked | `--paper-grey-50` | -| `--paper-toggle-button-unchecked-ink-color` | Selected/focus ripple color when the input is not checked | `--dark-primary-color` | -| `--paper-toggle-button-checked-bar-color` | Slider button color when the input is checked | `--primary-color` | -| `--paper-toggle-button-checked-button-color` | Button color when the input is checked | `--primary-color` | -| `--paper-toggle-button-checked-ink-color` | Selected/focus ripple color when the input is checked | `--primary-color` | -| `--paper-toggle-button-unchecked-bar` | Mixin applied to the slider when the input is not checked | `{}` | -| `--paper-toggle-button-unchecked-button` | Mixin applied to the slider button when the input is not checked | `{}` | -| `--paper-toggle-button-checked-bar` | Mixin applied to the slider when the input is checked | `{}` | -| `--paper-toggle-button-checked-button` | Mixin applied to the slider button when the input is checked | `{}` | -| `--paper-toggle-button-label-color` | Label color | `--primary-text-color` | -| `--paper-toggle-button-label-spacing` | Spacing between the label and the button | `8px` | - -This element applies the mixin `--paper-font-common-base` but does not import `paper-styles/typography.html`. -In order to apply the `Roboto` font to this element, make sure you've imported `paper-styles/typography.html`. - - diff --git a/app/bower_components/paper-toggle-button/bower.json b/app/bower_components/paper-toggle-button/bower.json index d29b9a4..8ef0949 100644 --- a/app/bower_components/paper-toggle-button/bower.json +++ b/app/bower_components/paper-toggle-button/bower.json @@ -1,6 +1,6 @@ { "name": "paper-toggle-button", - "version": "1.2.0", + "version": "1.3.0", "description": "A material design toggle button control", "authors": [ "The Polymer Authors" diff --git a/app/bower_components/paper-toggle-button/paper-toggle-button.html b/app/bower_components/paper-toggle-button/paper-toggle-button.html index d9ab5f6..4e533f0 100644 --- a/app/bower_components/paper-toggle-button/paper-toggle-button.html +++ b/app/bower_components/paper-toggle-button/paper-toggle-button.html @@ -41,8 +41,10 @@ `--paper-toggle-button-invalid-ink-color` | Selected/focus ripple color when the input is invalid | `--error-color` `--paper-toggle-button-unchecked-bar` | Mixin applied to the slider when the input is not checked | `{}` `--paper-toggle-button-unchecked-button` | Mixin applied to the slider button when the input is not checked | `{}` +`--paper-toggle-button-unchecked-ink` | Mixin applied to the ripple when the input is not checked | `{}` `--paper-toggle-button-checked-bar` | Mixin applied to the slider when the input is checked | `{}` `--paper-toggle-button-checked-button` | Mixin applied to the slider button when the input is checked | `{}` +`--paper-toggle-button-checked-ink` | Mixin applied to the ripple when the input is checked | `{}` `--paper-toggle-button-label-color` | Label color | `--primary-text-color` `--paper-toggle-button-label-spacing` | Spacing between the label and the button | `8px` @@ -147,10 +149,14 @@ opacity: 0.5; pointer-events: none; color: var(--paper-toggle-button-unchecked-ink-color, --primary-text-color); + + @apply(--paper-toggle-button-unchecked-ink); } :host([checked]) .toggle-ink { color: var(--paper-toggle-button-checked-ink-color, --primary-color); + + @apply(--paper-toggle-button-checked-ink); } .toggle-container { diff --git a/app/bower_components/paper-toolbar/.bower.json b/app/bower_components/paper-toolbar/.bower.json index aabfdbe..aa5c0f4 100644 --- a/app/bower_components/paper-toolbar/.bower.json +++ b/app/bower_components/paper-toolbar/.bower.json @@ -1,6 +1,6 @@ { "name": "paper-toolbar", - "version": "1.1.6", + "version": "1.1.7", "license": "http://polymer.github.io/LICENSE.txt", "description": "A material design toolbar that is easily customizable", "private": true, @@ -35,11 +35,11 @@ }, "ignore": [], "homepage": "https://github.com/PolymerElements/paper-toolbar", - "_release": "1.1.6", + "_release": "1.1.7", "_resolution": { "type": "version", - "tag": "v1.1.6", - "commit": "39b8ad381bd4ba7834ed8f30a938b49810b9204f" + "tag": "v1.1.7", + "commit": "e727b200910c9f4850e9b12d23420aeece018bd8" }, "_source": "git://github.com/PolymerElements/paper-toolbar.git", "_target": "^1.0.0", diff --git a/app/bower_components/paper-toolbar/.travis.yml b/app/bower_components/paper-toolbar/.travis.yml index 5947fe9..b1654f6 100644 --- a/app/bower_components/paper-toolbar/.travis.yml +++ b/app/bower_components/paper-toolbar/.travis.yml @@ -1,23 +1,23 @@ language: node_js sudo: required before_script: - - npm install -g bower polylint web-component-tester - - bower install - - polylint +- npm install -g bower polylint web-component-tester +- bower install +- polylint env: global: - - secure: K2cuhKpShJ9cc0XCnsHbLpw1qCXTRWiJqkn6hFrt3T7L+1bDSsMtzmZvfk7Pp4VbJCgEKmtgMitbr7gdTjxLpIr7qQv7SmErnbcoT+wEyOTfyK96YSkAOCIIafgWHWSHrwiDdqXvFlYe3sP4JPP8yH6kuIjYzphQ2H7k0yXnW04= - - secure: Til0DgFyTBk2pkrG5WrQ64g8ckN6Rbdqxm/F+HGbzG/hVXO6/fHqetlNKxvxotoI3LBb/iYFr7GXuNTgIYaH4qGVeV1MsOj7NUnFDYUJVcx/WhZO66CY+dno7UffBDV0wgd4mpsK8iLG4+Eitf1FcMBbY5esX4mFy3fFM8/6LyE= + - secure: YhDTyZvC5P5rhCWlBTeIhKJx2izTUgaBPbWWCtVE/ukYfXeO0HY49emFYSOBJe3oKLLlipuTFehbtyZ4QPWmfa7QKEtnyYSfyCnOA3mJFzoMDDt/RVqDfWpa+fjpIdVR045ySCQE7NAbD47i8gAVwmlQ10k/yU+BA9uGxVHPSwo= + - secure: GvWTJBajnq7yHfbx+Ud7jmG6ZNXf79U7i3UhTsXkDhotqzJr//MlJGzZFBZjbk2Qsgcx+x4cT10ieZR4oixn/ipiz/NfKvIbHl4+0sLauum+5lDd8TmKspJULzSeDkYcVl8tEVKn2vdCTBaTRQituXvDlipat1drAu4Zx3EtmxI= node_js: stable addons: firefox: '46.0' apt: sources: - - google-chrome + - google-chrome packages: - - google-chrome-stable + - google-chrome-stable sauce_connect: true script: - - xvfb-run wct - - "if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ]; then wct -s 'default'; fi" +- xvfb-run wct +- if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then wct -s 'default'; fi dist: trusty diff --git a/app/bower_components/paper-toolbar/README.md b/app/bower_components/paper-toolbar/README.md index a93e3ae..8626518 100644 --- a/app/bower_components/paper-toolbar/README.md +++ b/app/bower_components/paper-toolbar/README.md @@ -79,8 +79,8 @@ with `bottom`. ``` -When inside a `paper-header-panel` element, the class `.animate` is toggled to animate -the height change in the toolbar. +When inside a `paper-header-panel` element with `mode="waterfall-tall"`, +the class `.animate` is toggled to animate the height change in the toolbar. ### Styling diff --git a/app/bower_components/paper-toolbar/bower.json b/app/bower_components/paper-toolbar/bower.json index 1fc3b4e..7ab13e4 100644 --- a/app/bower_components/paper-toolbar/bower.json +++ b/app/bower_components/paper-toolbar/bower.json @@ -1,6 +1,6 @@ { "name": "paper-toolbar", - "version": "1.1.6", + "version": "1.1.7", "license": "http://polymer.github.io/LICENSE.txt", "description": "A material design toolbar that is easily customizable", "private": true, diff --git a/app/bower_components/paper-toolbar/paper-toolbar.html b/app/bower_components/paper-toolbar/paper-toolbar.html index ff1e2e3..452fbd2 100644 --- a/app/bower_components/paper-toolbar/paper-toolbar.html +++ b/app/bower_components/paper-toolbar/paper-toolbar.html @@ -74,8 +74,8 @@ ``` -When inside a `paper-header-panel` element, the class `.animate` is toggled to animate -the height change in the toolbar. +When inside a `paper-header-panel` element with `mode="waterfall-tall"`, +the class `.animate` is toggled to animate the height change in the toolbar. ### Styling diff --git a/app/bower_components/paper-tooltip/.bower.json b/app/bower_components/paper-tooltip/.bower.json index 3df87bd..c2dc1a9 100644 --- a/app/bower_components/paper-tooltip/.bower.json +++ b/app/bower_components/paper-tooltip/.bower.json @@ -1,6 +1,6 @@ { "name": "paper-tooltip", - "version": "1.1.2", + "version": "1.1.3", "description": "Material design tooltip popup for content", "authors": [ "The Polymer Authors" @@ -33,11 +33,11 @@ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0", "paper-icon-button": "PolymerElements/paper-icon-button#^1.0.0" }, - "_release": "1.1.2", + "_release": "1.1.3", "_resolution": { "type": "version", - "tag": "v1.1.2", - "commit": "6be894127678900f6e506b56fc9622ab768c03aa" + "tag": "v1.1.3", + "commit": "05fe3cfcb0e7e6853fa337344227f74a2ec7e07e" }, "_source": "git://github.com/PolymerElements/paper-tooltip.git", "_target": "^1.0.0", diff --git a/app/bower_components/paper-tooltip/.github/ISSUE_TEMPLATE.md b/app/bower_components/paper-tooltip/.github/ISSUE_TEMPLATE.md new file mode 100644 index 0000000..61136cf --- /dev/null +++ b/app/bower_components/paper-tooltip/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,33 @@ + +### Description + + +### Expected outcome + + + +### Actual outcome + + + +### Live Demo + + +### Steps to reproduce + + + +### Browsers Affected + +- [ ] Chrome +- [ ] Firefox +- [ ] Safari 9 +- [ ] Safari 8 +- [ ] Safari 7 +- [ ] Edge +- [ ] IE 11 +- [ ] IE 10 diff --git a/app/bower_components/paper-tooltip/.travis.yml b/app/bower_components/paper-tooltip/.travis.yml index 0eacffa..017afc8 100644 --- a/app/bower_components/paper-tooltip/.travis.yml +++ b/app/bower_components/paper-tooltip/.travis.yml @@ -1,25 +1,23 @@ language: node_js -sudo: false +sudo: required before_script: - - npm install -g bower polylint web-component-tester - - bower install - - polylint +- npm install -g bower polylint web-component-tester +- bower install +- polylint env: global: - - secure: NudIyPu1Tu0dPOHLbeKEc9GZk3tQt5s285nWES8LJWhhuiRMn7xYqLlU/PDXc89ClURC8YkPt1fQct+inxVNmT/YvFyRh+ZVDRmVYZHZFDl4M3mNfTVCG985pTB7IyYTBQBojoXab01DHbKzR79wRNIb6KypoJxaO1DIvXIOfgFCbam+xyibkayCUuu7S+GVkMuka26SEfllOQ9aHF2tCFuAHKcdLuwmjn/j5ffS/cP73JIulkf2IA1NOolvRd8kXWT8OQ4Hdw1r6DRipDSzlcsCmqur0LdFYfNAm5sZ+xHeuwdocGvKyZSReWMJcUwBuA3F+gXngKqZiTfGFAf0Ygd0rfaJ4WztjW1LkFR/3S8hhUtN2WC5wZYYaY7aQlepA3uecGxbbaVsBp7z1bBtMvllRUf7zs2YAw5mBgA5bD9dYgNb2N0u+IWWvlxBjvwIDfWIVJUJ7QMYM+6rWy4VCR7lfeeQBIXTyzLScLmjskMkbeY3WlvcEaHkAyZd7Y4rRL0eytOqE4jaG8kwpDQgjpKCbdwhl2HHzzktutfjD+JCn2nX8XF1ONw/LimDC/pUlv8zpyf4IByx3B1ObWZ86qO/t52FjLcuv8EtoAT0SFQWxoKZMGI8kNTjCje/jhGWTtT4FMkcksfnJYU68XXfduglLQADbTUQKO58CgICs9Y= - - secure: Bkrv2j17+bp9z+nQvDAQSFTMtk5SgXWHP71vnPsrO6BISUUzq5/3XOgiG8VN17JliNGkkD9d6oZ5izSvmi2ywVtg75+AkEa+4BLrCUQec6XT6I2xE8Sq0R28cAHBScxdm3M53BYekAPgMHJqJCrIVKUKkCbxIbsMJbCCTlXI8YmUP9bM1LNOsDYI1SOsW9YwcTarK4I3WD+G2sHOqQr9Sj4OrtAENUOTdDZlrEfYXi6z4unJKho7cwh4gJDJwEbvdhFLPfih6osqo70lv/Jx0QBwpFEsyOxIbWV7pVFOYzsHPxNgve4YyrfctlXeXYfef2tCD1AAgON+6xL4a9AK05cG9RwC0UN2apoIn5BFrz/XghBJ0arb9lwEePrb7lHLMB33vHn1+oZE3y+EewwQbAXoA3OAKrR0L00vP6TZVqpBeIDS27BMj9fp/l+GOwDwEK7jYGCxO7XUJlClZGMxLTRGNpxP057i2dYcWK5cTZ4e6UQS6hr6NqyvWctSs+BUZoDOHwFuFtCTF3G4ffOZ7VuPurViIRuOLEMLuc3titYd7FOqI+Q5XOGpE7dd1qzLJSh8FK8XUBV4/oyIYwFd/98sh0PwzrYorlxKlOygfXhV7D1FRZqJdPTvv9Qh1OjLIn182PYoctUZKzepfsqO3OdesxBxBYm35Bg9ph573Do= - - CXX=g++-4.8 + - secure: gfWhTNPGzDs8BHzRxw6W2h/Uw8VIs0/ZWHhBkSS3XrpUx3A1ffZguK4PpiuAWMms5TaNCG/0N5f9YKnWVsKV6YAq78DdPh36wSNHZL3AKZaaHoLhcIOZUYLQ7DXlgVpJkGwvooPNUhVVy+NX33eLw4yAnn5IfQ9lAq+WOZH9xSPubzEA1iqB88EO5kPYkZblmmIwghEFP5bVXseb2Rc5VQHbOJPKJr20NXZCLvHvLxJYLO1wQRBJatQm/o5PTsN+Ey/2szsRlwWKSiTnIHMHIRqcvarxxsI5rm8nT7GOXxjzRc+nzZ8cwaWlFGwrDwKhgsjQytBQNPqctDnUwk+CQpTkJtYfxZTk0MfTpmTjtnpgErCiFBPjX+8igZC3L8xChZTAnTGbWHyyMSzs4N0eYJAEAdGksPMlhZ56q+EiP160NFAV8eJcGnpyfyqmrvSVcq5XqclgSLpeirmO49old1RzfdMvjDPbZQVoUievSwgUZDBodilynES+rOswMojQWwpu6bK2stM1qwxNs9JY22ssiWPg2ZN+98BpaLFZ/43yhuoyThOXGaaUVNrWpyGtgvUMtPBTI2J0zEDWAhMhZL4Uh2JWnZpfolLtGESLSMQptU8dz8jTLItEdBzotiCNJniGwiwPDMQrROfjekQaevVSJpqBfr38+1VEzb6ev6g= + - secure: QjFHuOpEtakzECoxcIYl8TeZ6NIcrji6tN/5aWPEZaIUtsMIH7OwM6N7pEsdODEyanU4ay5PQsLjNmupsvVb515mk7sxTK3ZJBm8lk4T61WCQc74slV+WCjZ+jBs9SRwZM5SKECfqVIOfnDn0ZIMomVI4BgIexOAXi8pkc+9+zn6wVxYJGT2ORNu4fRJXHBfs5497Xp6qEtngXRvZHhtvElL796WiVVsMuePEXE/2BT0FoXL3FzhtCnY2xy/+Z8A+XzVVOftpSbMEPkkJJA7t+K6zsJnu5p4BBkf7afGaR1rEacZeoSEywQZ4iMX+BZt/fSkO1vJLXW+4YiCR6xivhpbMpHkvECFhB4g08ydRngdVqIcBOX1M94DeqvWodzHxjUo4fOd8loWEI8Y6eigLf/ex/YVN9q2kLYxySFINsA2vKFthTPjA6RdQZqiAAYZn7HvkGsMbULB2LvtgYksT+oayLQwS+YxgzqAWgfMkaD2kS8ISFbwW5YKa0lxiQf1ZafD/OZDhLBMn+UTnLH6BtRrWHzWgzFQSOoE+CS1OH3dDlah6lLc18U+dhF9WynjiT2F41jGAQuZ5Wqld18Ge5dhJ5e3nqHylS+GZ6pHQs9jFQStZlAT+Pv1PCi9PikaIv8/OPE338buZK3b3WFrWTQATWazCgck+u8230kMTaQ= node_js: stable addons: - firefox: latest + firefox: '46.0' apt: sources: - - google-chrome - - ubuntu-toolchain-r-test + - google-chrome packages: - - google-chrome-stable - - g++-4.8 + - google-chrome-stable sauce_connect: true script: - - xvfb-run wct - - "if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ]; then wct -s 'default'; fi" +- xvfb-run wct +- if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then wct -s 'default'; fi +dist: trusty diff --git a/app/bower_components/paper-tooltip/CONTRIBUTING.md b/app/bower_components/paper-tooltip/CONTRIBUTING.md index f147978..093090d 100644 --- a/app/bower_components/paper-tooltip/CONTRIBUTING.md +++ b/app/bower_components/paper-tooltip/CONTRIBUTING.md @@ -1,4 +1,3 @@ - + # Polymer Elements ## Guide for Contributors diff --git a/app/bower_components/paper-tooltip/bower.json b/app/bower_components/paper-tooltip/bower.json index 423c88f..6f6a827 100644 --- a/app/bower_components/paper-tooltip/bower.json +++ b/app/bower_components/paper-tooltip/bower.json @@ -1,6 +1,6 @@ { "name": "paper-tooltip", - "version": "1.1.2", + "version": "1.1.3", "description": "Material design tooltip popup for content", "authors": [ "The Polymer Authors" diff --git a/app/bower_components/paper-tooltip/demo/index.html b/app/bower_components/paper-tooltip/demo/index.html index 7d7cab8..c0bad5e 100644 --- a/app/bower_components/paper-tooltip/demo/index.html +++ b/app/bower_components/paper-tooltip/demo/index.html @@ -123,7 +123,7 @@

Tooltips can contain rich text (though against the Material Design spec)

- + Rich-text tooltips are doable but against the Material Design spec. diff --git a/app/bower_components/paper-tooltip/paper-tooltip.html b/app/bower_components/paper-tooltip/paper-tooltip.html index d3d5982..4c2f039 100644 --- a/app/bower_components/paper-tooltip/paper-tooltip.html +++ b/app/bower_components/paper-tooltip/paper-tooltip.html @@ -1,4 +1,5 @@ - - - - - <platinum-bluetooth> Demo - - - - - - - - - - - - - - - - - - - - - diff --git a/app/bower_components/platinum-bluetooth/hero.svg b/app/bower_components/platinum-bluetooth/hero.svg deleted file mode 100644 index 7ab9be6..0000000 --- a/app/bower_components/platinum-bluetooth/hero.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/app/bower_components/platinum-bluetooth/index.html b/app/bower_components/platinum-bluetooth/index.html deleted file mode 100644 index 4f13dd8..0000000 --- a/app/bower_components/platinum-bluetooth/index.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/app/bower_components/platinum-bluetooth/platinum-bluetooth-characteristic.html b/app/bower_components/platinum-bluetooth/platinum-bluetooth-characteristic.html deleted file mode 100644 index 7dfe594..0000000 --- a/app/bower_components/platinum-bluetooth/platinum-bluetooth-characteristic.html +++ /dev/null @@ -1,419 +0,0 @@ - - - - diff --git a/app/bower_components/platinum-bluetooth/platinum-bluetooth-device.html b/app/bower_components/platinum-bluetooth/platinum-bluetooth-device.html deleted file mode 100644 index 6ecd734..0000000 --- a/app/bower_components/platinum-bluetooth/platinum-bluetooth-device.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - - - diff --git a/app/bower_components/platinum-bluetooth/platinum-bluetooth-elements.html b/app/bower_components/platinum-bluetooth/platinum-bluetooth-elements.html deleted file mode 100644 index d732a6a..0000000 --- a/app/bower_components/platinum-bluetooth/platinum-bluetooth-elements.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - diff --git a/app/bower_components/platinum-elements/.bower.json b/app/bower_components/platinum-elements/.bower.json deleted file mode 100644 index 251af37..0000000 --- a/app/bower_components/platinum-elements/.bower.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "platinum-elements", - "homepage": "https://github.com/PolymerElements/platinum-elements", - "description": "Elements to turn your web page into a true webapp, with push, offline, bluetooth and more.", - "keywords": [ - "service", - "worker", - "service-worker", - "push", - "bluetooth", - "platinum" - ], - "license": "http://polymer.github.io/LICENSE.txt", - "private": true, - "dependencies": { - "platinum-bluetooth": "PolymerElements/platinum-bluetooth#^1.0.0", - "platinum-https-redirect": "PolymerElements/platinum-https-redirect#^1.0.0", - "platinum-push-messaging": "PolymerElements/platinum-push-messaging#^1.0.0", - "platinum-sw": "PolymerElements/platinum-sw#^1.2.0" - }, - "version": "1.2.0", - "_release": "1.2.0", - "_resolution": { - "type": "version", - "tag": "v1.2.0", - "commit": "9bbc1e249e04819302529fe6ff398f990b20a27c" - }, - "_source": "git://github.com/PolymerElements/platinum-elements.git", - "_target": "^1.1.0", - "_originalSource": "PolymerElements/platinum-elements" -} \ No newline at end of file diff --git a/app/bower_components/platinum-elements/LICENSE b/app/bower_components/platinum-elements/LICENSE deleted file mode 100644 index 8f71f43..0000000 --- a/app/bower_components/platinum-elements/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - diff --git a/app/bower_components/platinum-elements/README.md b/app/bower_components/platinum-elements/README.md deleted file mode 100644 index cbba235..0000000 --- a/app/bower_components/platinum-elements/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# platinum-elements - -Elements that provide features to turn your web page into a true webapp - with things like push notifications, offline usage, bluetooth and more. diff --git a/app/bower_components/platinum-elements/bower.json b/app/bower_components/platinum-elements/bower.json deleted file mode 100644 index 3e75d0c..0000000 --- a/app/bower_components/platinum-elements/bower.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "platinum-elements", - "homepage": "https://github.com/PolymerElements/platinum-elements", - "description": "Elements to turn your web page into a true webapp, with push, offline, bluetooth and more.", - "keywords": [ - "service", - "worker", - "service-worker", - "push", - "bluetooth", - "platinum" - ], - "license": "http://polymer.github.io/LICENSE.txt", - "private": true, - "dependencies": { - "platinum-bluetooth": "PolymerElements/platinum-bluetooth#^1.0.0", - "platinum-https-redirect": "PolymerElements/platinum-https-redirect#^1.0.0", - "platinum-push-messaging": "PolymerElements/platinum-push-messaging#^1.0.0", - "platinum-sw": "PolymerElements/platinum-sw#^1.2.0" - } -} diff --git a/app/bower_components/platinum-https-redirect/.bower.json b/app/bower_components/platinum-https-redirect/.bower.json deleted file mode 100644 index 0d59215..0000000 --- a/app/bower_components/platinum-https-redirect/.bower.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "platinum-https-redirect", - "version": "1.0.2", - "authors": [ - "The Polymer Authors" - ], - "description": "Force a redirect to HTTPS when not on a local web server.", - "license": "http://polymer.github.io/LICENSE.txt", - "homepage": "https://github.com/PolymerElements/platinum-https-redirect", - "keywords": [ - "https", - "polymer", - "web-component", - "web-components" - ], - "main": "platinum-https-redirect.html", - "private": true, - "repository": { - "type": "git", - "url": "git://github.com/PolymerElements/platinum-https-redirect.git" - }, - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "test", - "tests" - ], - "dependencies": { - "polymer": "Polymer/polymer#^1.1.0" - }, - "devDependencies": { - "iron-component-page": "PolymerElements/iron-component-page#^1.0.0", - "web-component-tester": "^4.0.0" - }, - "_release": "1.0.2", - "_resolution": { - "type": "version", - "tag": "v1.0.2", - "commit": "3fa46649197efb242c04f9e91f111b698a5a17a9" - }, - "_source": "git://github.com/PolymerElements/platinum-https-redirect.git", - "_target": "^1.0.0", - "_originalSource": "PolymerElements/platinum-https-redirect" -} \ No newline at end of file diff --git a/app/bower_components/platinum-https-redirect/CONTRIBUTING.md b/app/bower_components/platinum-https-redirect/CONTRIBUTING.md deleted file mode 100644 index f147978..0000000 --- a/app/bower_components/platinum-https-redirect/CONTRIBUTING.md +++ /dev/null @@ -1,77 +0,0 @@ - - -# Polymer Elements -## Guide for Contributors - -Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines: - -### Filing Issues - -**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions: - - 1. **Who will use the feature?** _“As someone filling out a form…”_ - 2. **When will they use the feature?** _“When I enter an invalid value…”_ - 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_ - -**If you are filing an issue to report a bug**, please provide: - - 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug: - - ```markdown - The `paper-foo` element causes the page to turn pink when clicked. - - ## Expected outcome - - The page stays the same color. - - ## Actual outcome - - The page turns pink. - - ## Steps to reproduce - - 1. Put a `paper-foo` element in the page. - 2. Open the page in a web browser. - 3. Click the `paper-foo` element. - ``` - - 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output). - - 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers. - -### Submitting Pull Requests - -**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request. - -When submitting pull requests, please provide: - - 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax: - - ```markdown - (For a single issue) - Fixes #20 - - (For multiple issues) - Fixes #32, fixes #40 - ``` - - 2. **A succinct description of the design** used to fix any related issues. For example: - - ```markdown - This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked. - ``` - - 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered. - -If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that! diff --git a/app/bower_components/platinum-https-redirect/README.md b/app/bower_components/platinum-https-redirect/README.md deleted file mode 100644 index 9e56fc3..0000000 --- a/app/bower_components/platinum-https-redirect/README.md +++ /dev/null @@ -1,46 +0,0 @@ - - - -_[Demo and API docs](https://elements.polymer-project.org/elements/platinum-https-redirect)_ - - -##<platinum-https-redirect> - -The `` element redirects the current page to HTTPS, unless the page is -loaded from a web server running on `localhost`. - -Using [HTTP Strict Transport Security](https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security) -(HSTS) can be used to enforce HTTPS for an entire -[origin](https://html.spec.whatwg.org/multipage/browsers.html#origin), following the first visit to -any page on the origin. Configuring the underlying web server to -[redirect](https://en.wikipedia.org/wiki/HTTP_301) all HTTP requests to their HTTPS equivalents -takes care of enforcing HTTPS on the initial visit as well. -Both options provide a more robust approach to enforcing HTTPS, but require access to the underlying -web server's configuration in order to implement. - -This element provides a client-side option when HSTS and server-enforced redirects aren't possible, -such as when deploying code on a shared-hosting provider like -[GitHub Pages](https://pages.github.com/). - -It comes in handy when used with other `` elements, since those elements use -[features which are restricted to HTTPS](http://www.chromium.org/Home/chromium-security/prefer-secure-origins-for-powerful-new-features), -with an exception to support local web servers. - -It can be used by just adding it to any page, e.g. - -```html - -``` - - diff --git a/app/bower_components/platinum-https-redirect/bower.json b/app/bower_components/platinum-https-redirect/bower.json deleted file mode 100644 index e93596b..0000000 --- a/app/bower_components/platinum-https-redirect/bower.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "platinum-https-redirect", - "version": "1.0.1", - "authors": [ - "The Polymer Authors" - ], - "description": "Force a redirect to HTTPS when not on a local web server.", - "license": "http://polymer.github.io/LICENSE.txt", - "homepage": "https://github.com/PolymerElements/platinum-https-redirect", - "keywords": [ - "https", - "polymer", - "web-component", - "web-components" - ], - "main": "platinum-https-redirect.html", - "private": true, - "repository": { - "type": "git", - "url": "git://github.com/PolymerElements/platinum-https-redirect.git" - }, - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "test", - "tests" - ], - "dependencies": { - "polymer": "Polymer/polymer#^1.1.0" - }, - "devDependencies": { - "iron-component-page": "PolymerElements/iron-component-page#^1.0.0", - "web-component-tester": "^4.0.0" - } -} diff --git a/app/bower_components/platinum-https-redirect/demo/index.html b/app/bower_components/platinum-https-redirect/demo/index.html deleted file mode 100644 index 3e2e414..0000000 --- a/app/bower_components/platinum-https-redirect/demo/index.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - Platinum HTTPS Redirect Demo - - - - - - - - -

- Because this page includes a <platinum-https-redirect> element, it will - automatically redirect to the https: version of this page when the following is - true: -

- -
    -
  • The page is accessed via the http: protocol.
  • -
  • - The page's hostname is not - localhost - or one of its equivalents. -
  • -
- -

- In order to test this functionality, you can visit this page via - http://polymerelements.github.io/platinum-https-redirect/demo/index.html. - Because that URL uses http: and is not on localhost, it will - automatically redirect to - https://polymerelements.github.io/platinum-https-redirect/demo/index.html - instead. -

- - diff --git a/app/bower_components/platinum-https-redirect/platinum-https-redirect.html b/app/bower_components/platinum-https-redirect/platinum-https-redirect.html deleted file mode 100644 index 70f6863..0000000 --- a/app/bower_components/platinum-https-redirect/platinum-https-redirect.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - diff --git a/app/bower_components/platinum-push-messaging/.bower.json b/app/bower_components/platinum-push-messaging/.bower.json deleted file mode 100644 index ec9e525..0000000 --- a/app/bower_components/platinum-push-messaging/.bower.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "platinum-push-messaging", - "private": true, - "license": "http://polymer.github.io/LICENSE.txt", - "authors": [ - "The Polymer Authors" - ], - "description": "Subscribes for push messaging and handles notifications.", - "keywords": [ - "push", - "messaging", - "notification", - "polymer", - "service-worker", - "serviceworker", - "web-component", - "web-components" - ], - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "demo" - ], - "dependencies": { - "polymer": "Polymer/polymer#^1.0.0", - "promise-polyfill": "PolymerLabs/promise-polyfill#^1.0.0" - }, - "devDependencies": { - "iron-component-page": "PolymerElements/iron-component-page#^1.0.2", - "web-component-tester": "Polymer/web-component-tester#^3.1.3", - "paper-styles": "PolymerElements/paper-styles#^1.0.0", - "paper-material": "PolymerElements/paper-material#^1.0.0", - "paper-toggle-button": "PolymerElements/paper-toggle-button#^1.0.0", - "paper-item": "PolymerElements/paper-item#^1.0.0" - }, - "main": "platinum-push-messaging.html", - "homepage": "https://github.com/PolymerElements/platinum-push-messaging", - "version": "1.0.5", - "_release": "1.0.5", - "_resolution": { - "type": "version", - "tag": "v1.0.5", - "commit": "f4400a0e679e4483dcdb268c707ab7a0ac774abc" - }, - "_source": "git://github.com/PolymerElements/platinum-push-messaging.git", - "_target": "^1.0.0", - "_originalSource": "PolymerElements/platinum-push-messaging" -} \ No newline at end of file diff --git a/app/bower_components/platinum-push-messaging/CONTRIBUTING.md b/app/bower_components/platinum-push-messaging/CONTRIBUTING.md deleted file mode 100644 index 7b10141..0000000 --- a/app/bower_components/platinum-push-messaging/CONTRIBUTING.md +++ /dev/null @@ -1,72 +0,0 @@ - - -# Polymer Elements -## Guide for Contributors - -Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines: - -### Filing Issues - -**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions: - - 1. **Who will use the feature?** _“As someone filling out a form…”_ - 2. **When will they use the feature?** _“When I enter an invalid value…”_ - 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_ - -**If you are filing an issue to report a bug**, please provide: - - 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug: - - ```markdown - The `paper-foo` element causes the page to turn pink when clicked. - - ## Expected outcome - - The page stays the same color. - - ## Actual outcome - - The page turns pink. - - ## Steps to reproduce - - 1. Put a `paper-foo` element in the page. - 2. Open the page in a web browser. - 3. Click the `paper-foo` element. - ``` - - 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [http://jsbin.com/cagaye](http://jsbin.com/cagaye/edit?html,output). - - 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers. - -### Submitting Pull Requests - -**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request. - -When submitting pull requests, please provide: - - 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues using the following syntax: - - ```markdown - (For a single issue) - Fixes #20 - - (For multiple issues) - Fixes #32, #40 - ``` - - 2. **A succinct description of the design** used to fix any related issues. For example: - - ```markdown - This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked. - ``` - - 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered. - -If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that! diff --git a/app/bower_components/platinum-push-messaging/README.md b/app/bower_components/platinum-push-messaging/README.md deleted file mode 100644 index d6a57bc..0000000 --- a/app/bower_components/platinum-push-messaging/README.md +++ /dev/null @@ -1,92 +0,0 @@ - - - -[![Build Status](https://travis-ci.org/PolymerElements/platinum-push-messaging.svg?branch=master)](https://travis-ci.org/PolymerElements/platinum-push-messaging) - -_[Demo and API Docs](https://elements.polymer-project.org/elements/platinum-push-messaging)_ - - -##<platinum-push-messaging> - - -`` sets up a [push messaging][1] subscription -and allows you to define what happens when a push message is received. - -The element can be placed anywhere, but should only be used once in a -page. If there are multiple occurrences, only one will be active. - -# Sample - -For a complete sample that uses the element, see the [Cat Push -Notifications][3] project. - -# Requirements -Push messaging is currently only available in Google Chrome, which -requires you to configure Google Cloud Messaging. Chrome will check that -your page links to a manifest file that contains a `gcm_sender_id` field. -You can find full details of how to set all of this up in the [HTML5 -Rocks guide to push notifications][1]. - -# Notification details -The data for how a notification should be displayed can come from one of -three places. - -Firstly, you can specify a URL from which to fetch the message data. -``` - - -``` - -The second way is to send the message data in the body of -the push message from your server. In this case you do not need to -configure anything in your page: -``` - -``` -**Note that this method is not currently supported by any browser**. It -is, however, defined in the -[draft W3C specification](http://w3c.github.io/push-api/#the-push-event) -and this element should use that data when it is implemented in the -future. - -If a message-url is provided then the message body will be ignored in -favor of the first method. - -Thirdly, you can manually define the attributes on the element: -``` - - -``` -These values will also be used as defaults if one of the other methods -does not provide a value for that property. - -# Testing -If you have set up Google Cloud Messaging then you can send push messages -to your browser by following the guide in the [GCM documentation][2]. - -However, for quick client testing there are two options. You can use the -`testPush` method, which allows you to simulate a push message that -includes a payload. - -Or, at a lower level, you can open up chrome://serviceworker-internals in -Chrome and use the 'Push' button for the service worker corresponding to -your app. - -[1]: http://updates.html5rocks.com/2015/03/push-notificatons-on-the-open-web -[2]: https://developer.android.com/google/gcm/http.html -[3]: https://github.com/notwaldorf/caturday-post - - diff --git a/app/bower_components/platinum-push-messaging/bower.json b/app/bower_components/platinum-push-messaging/bower.json deleted file mode 100644 index da36021..0000000 --- a/app/bower_components/platinum-push-messaging/bower.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "platinum-push-messaging", - "private": true, - "license": "http://polymer.github.io/LICENSE.txt", - "authors": [ - "The Polymer Authors" - ], - "description": "Subscribes for push messaging and handles notifications.", - "keywords": [ - "push", - "messaging", - "notification", - "polymer", - "service-worker", - "serviceworker", - "web-component", - "web-components" - ], - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "demo" - ], - "dependencies": { - "polymer": "Polymer/polymer#^1.0.0", - "promise-polyfill": "PolymerLabs/promise-polyfill#^1.0.0" - }, - "devDependencies": { - "iron-component-page": "PolymerElements/iron-component-page#^1.0.2", - "web-component-tester": "Polymer/web-component-tester#^3.1.3", - "paper-styles": "PolymerElements/paper-styles#^1.0.0", - "paper-material": "PolymerElements/paper-material#^1.0.0", - "paper-toggle-button": "PolymerElements/paper-toggle-button#^1.0.0", - "paper-item": "PolymerElements/paper-item#^1.0.0" - }, - "main": "platinum-push-messaging.html" -} diff --git a/app/bower_components/platinum-push-messaging/index.html b/app/bower_components/platinum-push-messaging/index.html deleted file mode 100644 index 849ad6d..0000000 --- a/app/bower_components/platinum-push-messaging/index.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/app/bower_components/platinum-push-messaging/platinum-push-messaging.html b/app/bower_components/platinum-push-messaging/platinum-push-messaging.html deleted file mode 100644 index cbd10eb..0000000 --- a/app/bower_components/platinum-push-messaging/platinum-push-messaging.html +++ /dev/null @@ -1,524 +0,0 @@ - - - - - diff --git a/app/bower_components/platinum-push-messaging/service-worker.js b/app/bower_components/platinum-push-messaging/service-worker.js deleted file mode 100644 index 4ddec4f..0000000 --- a/app/bower_components/platinum-push-messaging/service-worker.js +++ /dev/null @@ -1,160 +0,0 @@ -/* -Copyright (c) 2015 The Polymer Project Authors. All rights reserved. -This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt -The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt -The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt -Code distributed by Google as part of the polymer project is also -subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt -*/ -'use strict'; - -var options = JSON.parse(decodeURIComponent(location.search.substring(1))); - -var DEFAULT_TAG = self.registration.scope; -var DATA_SUPPORT = Notification.prototype.hasOwnProperty('data'); - -self.skipWaiting(); - -/** - * Resolves a URL that is relative to the registering page to an absolute URL - * - * @param url {String} a relative URL - * @return {String} the equivalent absolute URL - */ -var absUrl = function(url) { - if (typeof(url) === 'string') { - return new URL(url, options.baseUrl).href; - } -}; - -var getClientWindows = function() { - return clients.matchAll({ - type: 'window', - includeUncontrolled: true - }).catch(function(error) { - // Couldn't get client list, possibly not yet implemented in the browser - return []; - }); -}; - -var getVisible = function(url) { - return getClientWindows().then(function(clientList) { - for (var client of clientList) { - if (client.url === url && client.focused && - client.visibilityState === 'visible') { - return client; - } - } - return null; - }); -}; - -var messageClient = function(client, message, notificationShown) { - client.postMessage({ - source: self.registration.scope, - message: message, - type: notificationShown ? 'click' : 'push' - }); -}; - -var notify = function(data) { - var messagePromise; - - if (options.messageUrl) { - messagePromise = fetch(absUrl(options.messageUrl)).then(function(response) { - return response.json(); - }); - } else { - messagePromise = data ? data.json() : Promise.resolve({}); - } - - return messagePromise.then(function(message) { - // Not included: body, data, icon, sound, tag - we special case those - var validNotificationOptions = ['dir', 'lang', 'noscreen', 'renotify', - 'silent', 'sticky', 'vibrate']; - - var detail = { - title: message.title || options.title || '', - body: message.message || options.message || '', - tag: message.tag || options.tag || DEFAULT_TAG, - icon: absUrl(message.icon || options.iconUrl), - sound: absUrl(message.sound || options.sound), - data: message - }; - - validNotificationOptions.forEach(function(option) { - detail[option] = message[option] || options[option]; - }); - - var clickUrl = absUrl(message.url || options.clickUrl); - - if (!DATA_SUPPORT) { - // If there is no 'data' property support on the notification then we have - // to pass the link URL (and anything else) some other way. We use the - // hash of the icon URL to store it. - var iconUrl = new URL(detail.icon || 'about:blank'); - iconUrl.hash = encodeURIComponent(JSON.stringify(detail.data)); - detail.icon = iconUrl.href; - } - - return getVisible(clickUrl).then(function(visibleClient) { - if (visibleClient) { - messageClient(visibleClient, message, false); - } else { - return self.registration.showNotification(detail.title, detail); - } - }); - }); -}; - -var clickHandler = function(notification) { - notification.close(); - - var message; - if ('data' in notification) { - message = notification.data; - } else { - message = new URL(notification.icon).hash.substring(1); - message = JSON.parse(decodeURIComponent(message)); - } - - var url = absUrl(message.url || options.clickUrl); - - if (!url) { - return; - } - - return getClientWindows().then(function(clientList) { - for (var client of clientList) { - if (client.url === url && 'focus' in client) { - client.focus(); - return client; - } - } - if ('openWindow' in clients) { - return clients.openWindow(url); - } - }).then(function(client) { - if (client) { - messageClient(client, message, true); - } - }); -}; - -self.addEventListener('push', function(event) { - event.waitUntil(notify(event.data)); -}); - -self.addEventListener('notificationclick', function(event) { - event.waitUntil(clickHandler(event.notification)); -}); - -self.addEventListener('message', function(event) { - if (event.data.type == 'test-push') { - notify({ - json: function() { - return Promise.resolve(event.data.message); - } - }); - } -}); diff --git a/app/bower_components/platinum-push-messaging/test/index.html b/app/bower_components/platinum-push-messaging/test/index.html deleted file mode 100644 index 0ed6720..0000000 --- a/app/bower_components/platinum-push-messaging/test/index.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/app/bower_components/platinum-push-messaging/test/supported.html b/app/bower_components/platinum-push-messaging/test/supported.html deleted file mode 100644 index b6677ca..0000000 --- a/app/bower_components/platinum-push-messaging/test/supported.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/app/bower_components/platinum-push-messaging/test/unsupported.html b/app/bower_components/platinum-push-messaging/test/unsupported.html deleted file mode 100644 index 5050492..0000000 --- a/app/bower_components/platinum-push-messaging/test/unsupported.html +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/app/bower_components/platinum-sw/.bower.json b/app/bower_components/platinum-sw/.bower.json deleted file mode 100644 index 42ac652..0000000 --- a/app/bower_components/platinum-sw/.bower.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "platinum-sw", - "private": true, - "version": "1.3.0", - "license": "http://polymer.github.io/LICENSE.txt", - "authors": [ - "The Polymer Authors" - ], - "description": "Service worker helper elements.", - "main": "platinum-sw-elements.html", - "keywords": [ - "caching", - "offline", - "polymer", - "service-worker", - "serviceworker", - "web-component", - "web-components" - ], - "ignore": [ - "**/.*", - "node_modules", - "bower_components" - ], - "dependencies": { - "polymer": "Polymer/polymer#^1.0.0", - "sw-toolbox": "^3.1.1" - }, - "devDependencies": { - "iron-component-page": "PolymerElements/iron-component-page#^1.0.2", - "marked-element": "PolymerElements/marked-element#^1.0.0", - "web-component-tester": "^4.0.0", - "fetch": "^0.9.0" - }, - "homepage": "https://github.com/PolymerElements/platinum-sw", - "_release": "1.3.0", - "_resolution": { - "type": "version", - "tag": "v1.3.0", - "commit": "11d595b59ffd60a3d7b92275a3646368671c0bd6" - }, - "_source": "git://github.com/PolymerElements/platinum-sw.git", - "_target": "^1.2.0", - "_originalSource": "PolymerElements/platinum-sw" -} \ No newline at end of file diff --git a/app/bower_components/platinum-sw/CONTRIBUTING.md b/app/bower_components/platinum-sw/CONTRIBUTING.md deleted file mode 100644 index f147978..0000000 --- a/app/bower_components/platinum-sw/CONTRIBUTING.md +++ /dev/null @@ -1,77 +0,0 @@ - - -# Polymer Elements -## Guide for Contributors - -Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines: - -### Filing Issues - -**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions: - - 1. **Who will use the feature?** _“As someone filling out a form…”_ - 2. **When will they use the feature?** _“When I enter an invalid value…”_ - 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_ - -**If you are filing an issue to report a bug**, please provide: - - 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug: - - ```markdown - The `paper-foo` element causes the page to turn pink when clicked. - - ## Expected outcome - - The page stays the same color. - - ## Actual outcome - - The page turns pink. - - ## Steps to reproduce - - 1. Put a `paper-foo` element in the page. - 2. Open the page in a web browser. - 3. Click the `paper-foo` element. - ``` - - 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output). - - 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers. - -### Submitting Pull Requests - -**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request. - -When submitting pull requests, please provide: - - 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax: - - ```markdown - (For a single issue) - Fixes #20 - - (For multiple issues) - Fixes #32, fixes #40 - ``` - - 2. **A succinct description of the design** used to fix any related issues. For example: - - ```markdown - This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked. - ``` - - 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered. - -If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that! diff --git a/app/bower_components/platinum-sw/README.md b/app/bower_components/platinum-sw/README.md deleted file mode 100644 index d1b32ef..0000000 --- a/app/bower_components/platinum-sw/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# Platinum Service Worker Elements -A set of Polymer elements that simplify service worker registration and caching, powered by the -[`sw-toolbox` library](https://github.com/googlechrome/sw-toolbox). -Full documentation is available at https://PolymerElements.github.io/platinum-sw/index.html - -# Considerations - -## Top-level `sw-import.js` -While `` abstracts away many of the details of working with service workers, -there is one specific requirement that developers must fulfill: it needs to register a JavaScript file -located at the top-level of your site's web root. (Details behind this requirement can be found in -the service worker specification [issue tracker](https://github.com/slightlyoff/ServiceWorker/issues/468#issuecomment-60276779).) - -In order to use ``, it's recommended that you create a `sw-import.js` file in -your site's web root. The file's only contents should be - - importScripts('bower_components/platinum-sw/service-worker.js'); - -You can adjust the path to `service-worker.js` if your project has its Polymer elements -installed somewhere other than `bower_components/`. - -If you have multiple subdirectories worth of pages on your site, it's recommend that you include the -`` element on a top-level entry page that all visitors will access first; once -they visit the top-level page and the service worker is registered, it will automatically apply to -all sub-pages, which will fall under its -[scope](https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#service-worker-registration-scope). - -## Relative Paths & Vulcanization -If, as part of your web app's build process, you [Vulcanize](https://github.com/polymer/vulcanize) -the platinum-sw elements, you'll likely run into issues due to relative paths to helper/bootstrap -files being incorrect. For example, a few of the elements attempt to import the -`sw-toolbox-setup.js` script via a relative path, and that will fail when the elements are moved by -the Vulcanization process. The recommended approach is to explicitly copy the directory containing -those helper files into the same directory as the Vulcanized output, which maintains the relative -paths. The Polymer Starter Kit's [gulpfile.js](https://github.com/PolymerElements/polymer-starter-kit/blob/ee1b0c5ac5dd26e3ac56b12ec36d607ff02dced4/gulpfile.js#L100) -illustrates one way of doing this. An alternative approach is to use -`` and hardcode a base URI to use. - -## `cacheOnly` & `cacheFirst` `defaultCacheStrategy` Considered Harmful -The [`sw-toolbox` library](https://github.com/googlechrome/sw-toolbox), -which `` is built on, supports a number of -[caching strategies](https://github.com/googlechrome/sw-toolbox#built-in-handlers). -Two of them, `cacheOnly` and `cacheFirst`, are strongly discouraged to be used as the `defaultCacheStrategy` -for ``. With both of those strategies, all HTTP requests, including requests for -the page which contains the `` element, are served directly from the [Cache Storage -API](https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#cache-objects) without -first consulting the network for a fresh copy. Once the copy of the host page is cached, -it's extremely difficult to change the configuration of the service worker (since the configuration -depends on the page's contents), and developers could find themselves deploying sites that can never -update. - -In a future release of ``, using `cacheOnly` and `cacheFirst` as `defaultCacheStrategy` -may lead to an explicit error condition, but for the meantime, please consider a more reasonable default -(like `networkFirst`). diff --git a/app/bower_components/platinum-sw/bootstrap/offline-analytics.js b/app/bower_components/platinum-sw/bootstrap/offline-analytics.js deleted file mode 100644 index c0df85e..0000000 --- a/app/bower_components/platinum-sw/bootstrap/offline-analytics.js +++ /dev/null @@ -1,66 +0,0 @@ -/** - * @license - * Copyright (c) 2015 The Polymer Project Authors. All rights reserved. - * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt - * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt - * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt - * Code distributed by Google as part of the polymer project is also - * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt - */ - -(function(global) { - var OFFLINE_ANALYTICS_DB_NAME = 'offline-analytics'; - var EXPIRATION_TIME_DELTA = 86400000; // One day, in milliseconds. - var ORIGIN = /https?:\/\/((www|ssl)\.)?google-analytics\.com/; - - function replayQueuedAnalyticsRequests() { - global.simpleDB.open(OFFLINE_ANALYTICS_DB_NAME).then(function(db) { - db.forEach(function(url, originalTimestamp) { - var timeDelta = Date.now() - originalTimestamp; - // See https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters#qt - var replayUrl = url + '&qt=' + timeDelta; - - console.log('About to replay:', replayUrl); - global.fetch(replayUrl).then(function(response) { - if (response.status >= 500) { - // This will cause the promise to reject, triggering the .catch() function. - return Response.error(); - } - db.delete(url); - }).catch(function(error) { - if (timeDelta > EXPIRATION_TIME_DELTA) { - // After a while, Google Analytics will no longer accept an old ping with a qt= - // parameter. The advertised time is ~4 hours, but we'll attempt to resend up to 24 - // hours. This logic also prevents the requests from being queued indefinitely. - db.delete(url); - } - }); - }); - }); - } - - function queueFailedAnalyticsRequest(request) { - global.simpleDB.open(OFFLINE_ANALYTICS_DB_NAME).then(function(db) { - db.set(request.url, Date.now()); - }); - } - - function handleAnalyticsCollectionRequest(request) { - return global.fetch(request).then(function(response) { - if (response.status >= 500) { - // This will cause the promise to reject, triggering the .catch() function. - // It will also result in a generic HTTP error being returned to the controlled page. - return Response.error(); - } else { - return response; - } - }).catch(function() { - queueFailedAnalyticsRequest(request); - }); - } - - global.toolbox.router.get('/collect', handleAnalyticsCollectionRequest, {origin: ORIGIN}); - global.toolbox.router.get('/analytics.js', global.toolbox.networkFirst, {origin: ORIGIN}); - - replayQueuedAnalyticsRequests(); -})(self); diff --git a/app/bower_components/platinum-sw/bootstrap/simple-db.js b/app/bower_components/platinum-sw/bootstrap/simple-db.js deleted file mode 100644 index a3499a9..0000000 --- a/app/bower_components/platinum-sw/bootstrap/simple-db.js +++ /dev/null @@ -1,173 +0,0 @@ -/** - * @license - * Copyright (c) 2015 The Polymer Project Authors. All rights reserved. - * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt - * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt - * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt - * Code distributed by Google as part of the polymer project is also - * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt - */ - -// From https://gist.github.com/inexorabletash/c8069c042b734519680c (Joshua Bell) - -(function(global) { - var SECRET = Object.create(null); - var DB_PREFIX = '$SimpleDB$'; - var STORE = 'store'; - - // Chrome iOS has window.indexeDB, but it is null. - if (!(global.indexedDB && indexedDB.open)) { - return; - } - - function SimpleDBFactory(secret) { - if (secret !== SECRET) throw TypeError('Invalid constructor'); - } - SimpleDBFactory.prototype = { - open: function(name) { - return new Promise(function(resolve, reject) { - var request = indexedDB.open(DB_PREFIX + name); - request.onupgradeneeded = function() { - var db = request.result; - db.createObjectStore(STORE); - }; - request.onsuccess = function() { - var db = request.result; - resolve(new SimpleDB(SECRET, name, db)); - }; - request.onerror = function() { - reject(request.error); - }; - }); - }, - delete: function(name) { - return new Promise(function(resolve, reject) { - var request = indexedDB.deleteDatabase(DB_PREFIX + name); - request.onsuccess = function() { - resolve(undefined); - }; - request.onerror = function() { - reject(request.error); - }; - }); - } - }; - - function SimpleDB(secret, name, db) { - if (secret !== SECRET) throw TypeError('Invalid constructor'); - this._name = name; - this._db = db; - } - SimpleDB.cmp = indexedDB.cmp; - SimpleDB.prototype = { - get name() { - return this._name; - }, - get: function(key) { - var that = this; - return new Promise(function(resolve, reject) { - var tx = that._db.transaction(STORE, 'readwrite'); - var store = tx.objectStore(STORE); - var req = store.get(key); - // NOTE: Could also use req.onsuccess/onerror - tx.oncomplete = function() { resolve(req.result); }; - tx.onabort = function() { reject(tx.error); }; - }); - }, - set: function(key, value) { - var that = this; - return new Promise(function(resolve, reject) { - var tx = that._db.transaction(STORE, 'readwrite'); - var store = tx.objectStore(STORE); - var req = store.put(value, key); - tx.oncomplete = function() { resolve(undefined); }; - tx.onabort = function() { reject(tx.error); }; - }); - }, - delete: function(key) { - var that = this; - return new Promise(function(resolve, reject) { - var tx = that._db.transaction(STORE, 'readwrite'); - var store = tx.objectStore(STORE); - var req = store.delete(key); - tx.oncomplete = function() { resolve(undefined); }; - tx.onabort = function() { reject(tx.error); }; - }); - }, - clear: function() { - var that = this; - return new Promise(function(resolve, reject) { - var tx = that._db.transaction(STORE, 'readwrite'); - var store = tx.objectStore(STORE); - var request = store.clear(); - tx.oncomplete = function() { resolve(undefined); }; - tx.onabort = function() { reject(tx.error); }; - }); - }, - forEach: function(callback, options) { - var that = this; - return new Promise(function(resolve, reject) { - options = options || {}; - var tx = that._db.transaction(STORE, 'readwrite'); - var store = tx.objectStore(STORE); - var request = store.openCursor( - options.range, - options.direction === 'reverse' ? 'prev' : 'next'); - request.onsuccess = function() { - var cursor = request.result; - if (!cursor) return; - try { - var terminate = callback(cursor.key, cursor.value); - if (!terminate) cursor.continue(); - } catch (ex) { - tx.abort(); // ??? - } - }; - tx.oncomplete = function() { resolve(undefined); }; - tx.onabort = function() { reject(tx.error); }; - }); - }, - getMany: function(keys) { - var that = this; - return new Promise(function(resolve, reject) { - var tx = that._db.transaction(STORE, 'readwrite'); - var store = tx.objectStore(STORE); - var results = []; - keys.forEach(function(key) { - store.get(key).onsuccess(function(result) { - results.push(result); - }); - }); - tx.oncomplete = function() { resolve(results); }; - tx.onabort = function() { reject(tx.error); }; - }); - }, - setMany: function(entries) { - var that = this; - return new Promise(function(resolve, reject) { - var tx = that._db.transaction(STORE, 'readwrite'); - var store = tx.objectStore(STORE); - entries.forEach(function(entry) { - store.put(entry.value, entry.key); - }); - tx.oncomplete = function() { resolve(undefined); }; - tx.onabort = function() { reject(tx.error); }; - }); - }, - deleteMany: function(keys) { - var that = this; - return new Promise(function(resolve, reject) { - var tx = that._db.transaction(STORE, 'readwrite'); - var store = tx.objectStore(STORE); - keys.forEach(function(key) { - store.delete(key); - }); - tx.oncomplete = function() { resolve(undefined); }; - tx.onabort = function() { reject(tx.error); }; - }); - } - }; - - global.simpleDB = new SimpleDBFactory(SECRET); - global.SimpleDBKeyRange = IDBKeyRange; -}(self)); diff --git a/app/bower_components/platinum-sw/bootstrap/sw-toolbox-setup.js b/app/bower_components/platinum-sw/bootstrap/sw-toolbox-setup.js deleted file mode 100644 index e2420c9..0000000 --- a/app/bower_components/platinum-sw/bootstrap/sw-toolbox-setup.js +++ /dev/null @@ -1,63 +0,0 @@ -/** - * @license - * Copyright (c) 2015 The Polymer Project Authors. All rights reserved. - * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt - * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt - * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt - * Code distributed by Google as part of the polymer project is also - * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt - */ - -(function(global) { - var swToolboxURL = new URL('../sw-toolbox/sw-toolbox.js', global.params.get('baseURI')).href; - importScripts(swToolboxURL); - - var cacheId = global.params.get('cacheId'); - if (cacheId) { - global.toolbox.options.cacheName = cacheId + '$$$' + global.registration.scope; - } - - if (global.params.has('defaultCacheStrategy')) { - var strategy = global.params.get('defaultCacheStrategy'); - global.toolbox.router.default = global.toolbox[strategy] || global[strategy]; - } - - var precachePromise; - // When precacheFingerprint is present inside the cacheConfigFile JSON, its a signal that instead - // of reading the list of URLs to precache from the service worker's URL parameters, we need to - // instead fetch the JSON file and read the list of precache URLs for there. This works around - // the problem that the list of URLs to precache might be longer than the browser-specific limit - // on the size of a service worker's URL. - if (global.params.has('precacheFingerprint') && global.params.has('cacheConfigFile')) { - precachePromise = global.fetch(global.params.get('cacheConfigFile')).then(function(response) { - return response.json(); - }).then(function(json) { - return json.precache || []; - }).catch(function(error) { - return []; - }).then(function(precache) { - return precache.concat(global.params.get('precache')); - }) - } else { - precachePromise = Promise.resolve(global.params.get('precache') || []); - } - - global.toolbox.precache(precachePromise); - - if (global.params.has('route')) { - var setsOfRouteParams = global.params.get('route'); - while (setsOfRouteParams.length > 0) { - var routeParams = setsOfRouteParams.splice(0, 3); - var originParam; - if (routeParams[2]) { - originParam = {origin: new RegExp(routeParams[2])}; - } - var handler = global.toolbox[routeParams[1]] || global[routeParams[1]]; - if (typeof handler === 'function') { - global.toolbox.router.get(routeParams[0], handler, originParam); - } else { - console.error('Unable to register sw-toolbox route: ', routeParams); - } - } - } -})(self); diff --git a/app/bower_components/platinum-sw/bower.json b/app/bower_components/platinum-sw/bower.json deleted file mode 100644 index 5169ca5..0000000 --- a/app/bower_components/platinum-sw/bower.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "platinum-sw", - "private": true, - "version": "1.2.4", - "license": "http://polymer.github.io/LICENSE.txt", - "authors": [ - "The Polymer Authors" - ], - "description": "Service worker helper elements.", - "main": "platinum-sw-elements.html", - "keywords": [ - "caching", - "offline", - "polymer", - "service-worker", - "serviceworker", - "web-component", - "web-components" - ], - "ignore": [ - "**/.*", - "node_modules", - "bower_components" - ], - "dependencies": { - "polymer": "Polymer/polymer#^1.0.0", - "sw-toolbox": "^3.1.1" - }, - "devDependencies": { - "iron-component-page": "PolymerElements/iron-component-page#^1.0.2", - "marked-element": "PolymerElements/marked-element#^1.0.0", - "web-component-tester": "^4.0.0", - "fetch": "^0.9.0" - } -} diff --git a/app/bower_components/platinum-sw/demo/index.html b/app/bower_components/platinum-sw/demo/index.html deleted file mode 100644 index 2eb0db3..0000000 --- a/app/bower_components/platinum-sw/demo/index.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - Platinum Service Worker Elements Demo - - - - - - - - - - - - - diff --git a/app/bower_components/platinum-sw/demo/sw-import.js b/app/bower_components/platinum-sw/demo/sw-import.js deleted file mode 100644 index a4676ae..0000000 --- a/app/bower_components/platinum-sw/demo/sw-import.js +++ /dev/null @@ -1 +0,0 @@ -importScripts('../service-worker.js'); diff --git a/app/bower_components/platinum-sw/index.html b/app/bower_components/platinum-sw/index.html deleted file mode 100644 index 8c4a6f3..0000000 --- a/app/bower_components/platinum-sw/index.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/app/bower_components/platinum-sw/platinum-sw-cache.html b/app/bower_components/platinum-sw/platinum-sw-cache.html deleted file mode 100644 index cc89221..0000000 --- a/app/bower_components/platinum-sw/platinum-sw-cache.html +++ /dev/null @@ -1,188 +0,0 @@ - - - - diff --git a/app/bower_components/platinum-sw/platinum-sw-elements.html b/app/bower_components/platinum-sw/platinum-sw-elements.html deleted file mode 100644 index 97f5f2c..0000000 --- a/app/bower_components/platinum-sw/platinum-sw-elements.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - diff --git a/app/bower_components/platinum-sw/platinum-sw-fetch.html b/app/bower_components/platinum-sw/platinum-sw-fetch.html deleted file mode 100644 index ba5a50d..0000000 --- a/app/bower_components/platinum-sw/platinum-sw-fetch.html +++ /dev/null @@ -1,136 +0,0 @@ - - - - diff --git a/app/bower_components/platinum-sw/platinum-sw-import-script.html b/app/bower_components/platinum-sw/platinum-sw-import-script.html deleted file mode 100644 index 9cb4755..0000000 --- a/app/bower_components/platinum-sw/platinum-sw-import-script.html +++ /dev/null @@ -1,60 +0,0 @@ - - - - diff --git a/app/bower_components/platinum-sw/platinum-sw-offline-analytics.html b/app/bower_components/platinum-sw/platinum-sw-offline-analytics.html deleted file mode 100644 index ef7ac22..0000000 --- a/app/bower_components/platinum-sw/platinum-sw-offline-analytics.html +++ /dev/null @@ -1,55 +0,0 @@ - - - - diff --git a/app/bower_components/platinum-sw/platinum-sw-register.html b/app/bower_components/platinum-sw/platinum-sw-register.html deleted file mode 100644 index 1873231..0000000 --- a/app/bower_components/platinum-sw/platinum-sw-register.html +++ /dev/null @@ -1,383 +0,0 @@ - - - - diff --git a/app/bower_components/platinum-sw/service-worker.js b/app/bower_components/platinum-sw/service-worker.js deleted file mode 100644 index a85f075..0000000 --- a/app/bower_components/platinum-sw/service-worker.js +++ /dev/null @@ -1,54 +0,0 @@ -/** - * @license - * Copyright (c) 2015 The Polymer Project Authors. All rights reserved. - * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt - * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt - * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt - * Code distributed by Google as part of the polymer project is also - * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt - */ - -(function(global) { - var VERSION = '1.0'; - - function deserializeUrlParams(queryString) { - return new Map(queryString.split('&').map(function(keyValuePair) { - var splits = keyValuePair.split('='); - var key = decodeURIComponent(splits[0]); - var value = decodeURIComponent(splits[1]); - if (value.indexOf(',') >= 0) { - value = value.split(','); - } - - return [key, value]; - })); - } - - global.params = deserializeUrlParams(location.search.substring(1)); - - if (global.params.get('version') !== VERSION) { - throw 'The registered script is version ' + VERSION + - ' and cannot be used with version ' + global.params.get('version'); - } - - if (global.params.has('importscript')) { - var scripts = global.params.get('importscript'); - if (Array.isArray(scripts)) { - importScripts.apply(null, scripts); - } else { - importScripts(scripts); - } - } - - if (global.params.get('skipWaiting') === 'true' && global.skipWaiting) { - global.addEventListener('install', function(e) { - e.waitUntil(global.skipWaiting()); - }); - } - - if (global.params.get('clientsClaim') === 'true' && global.clients && global.clients.claim) { - global.addEventListener('activate', function(e) { - e.waitUntil(global.clients.claim()); - }); - } -})(self); diff --git a/app/bower_components/platinum-sw/test/controlled-promise.js b/app/bower_components/platinum-sw/test/controlled-promise.js deleted file mode 100644 index 47404b1..0000000 --- a/app/bower_components/platinum-sw/test/controlled-promise.js +++ /dev/null @@ -1,17 +0,0 @@ -// Provides an equivalent to navigator.serviceWorker.ready that waits for the page to be controlled, -// as opposed to waiting for the active service worker. -// See https://github.com/slightlyoff/ServiceWorker/issues/799 -window._controlledPromise = new Promise(function(resolve) { - // Resolve with the registration, to match the .ready promise's behavior. - var resolveWithRegistration = function() { - navigator.serviceWorker.getRegistration().then(function(registration) { - resolve(registration); - }); - }; - - if (navigator.serviceWorker.controller) { - resolveWithRegistration(); - } else { - navigator.serviceWorker.addEventListener('controllerchange', resolveWithRegistration); - } -}); diff --git a/app/bower_components/platinum-sw/test/index.html b/app/bower_components/platinum-sw/test/index.html deleted file mode 100644 index 46ffc39..0000000 --- a/app/bower_components/platinum-sw/test/index.html +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - diff --git a/app/bower_components/platinum-sw/test/platinum-sw-cache/cache-config.json b/app/bower_components/platinum-sw/test/platinum-sw-cache/cache-config.json deleted file mode 100644 index dbb14f3..0000000 --- a/app/bower_components/platinum-sw/test/platinum-sw-cache/cache-config.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "cacheId": "my-cache-id", - "defaultCacheStrategy": "networkOnly", - "disabled": false, - "precache": ["listed_in_json1.txt", "listed_in_json2.txt"], - "precacheFingerprint": "DUMMY_HASH" -} diff --git a/app/bower_components/platinum-sw/test/platinum-sw-cache/file.html b/app/bower_components/platinum-sw/test/platinum-sw-cache/file.html deleted file mode 100644 index d2f2e9e..0000000 --- a/app/bower_components/platinum-sw/test/platinum-sw-cache/file.html +++ /dev/null @@ -1,9 +0,0 @@ - - - - Dummy File - - - I'm just a file! - - diff --git a/app/bower_components/platinum-sw/test/platinum-sw-cache/file.txt b/app/bower_components/platinum-sw/test/platinum-sw-cache/file.txt deleted file mode 100644 index 91ea702..0000000 --- a/app/bower_components/platinum-sw/test/platinum-sw-cache/file.txt +++ /dev/null @@ -1 +0,0 @@ -I'm just a file! diff --git a/app/bower_components/platinum-sw/test/platinum-sw-cache/index.html b/app/bower_components/platinum-sw/test/platinum-sw-cache/index.html deleted file mode 100644 index ca976e9..0000000 --- a/app/bower_components/platinum-sw/test/platinum-sw-cache/index.html +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/bower_components/platinum-sw/test/platinum-sw-cache/listed_in_json1.txt b/app/bower_components/platinum-sw/test/platinum-sw-cache/listed_in_json1.txt deleted file mode 100644 index 91ea702..0000000 --- a/app/bower_components/platinum-sw/test/platinum-sw-cache/listed_in_json1.txt +++ /dev/null @@ -1 +0,0 @@ -I'm just a file! diff --git a/app/bower_components/platinum-sw/test/platinum-sw-cache/listed_in_json2.txt b/app/bower_components/platinum-sw/test/platinum-sw-cache/listed_in_json2.txt deleted file mode 100644 index 91ea702..0000000 --- a/app/bower_components/platinum-sw/test/platinum-sw-cache/listed_in_json2.txt +++ /dev/null @@ -1 +0,0 @@ -I'm just a file! diff --git a/app/bower_components/platinum-sw/test/platinum-sw-cache/sw-import.js b/app/bower_components/platinum-sw/test/platinum-sw-cache/sw-import.js deleted file mode 100644 index b0a8e66..0000000 --- a/app/bower_components/platinum-sw/test/platinum-sw-cache/sw-import.js +++ /dev/null @@ -1 +0,0 @@ -importScripts('../../service-worker.js'); diff --git a/app/bower_components/platinum-sw/test/platinum-sw-fetch/custom-fetch-handler.js b/app/bower_components/platinum-sw/test/platinum-sw-fetch/custom-fetch-handler.js deleted file mode 100644 index e594fdc..0000000 --- a/app/bower_components/platinum-sw/test/platinum-sw-fetch/custom-fetch-handler.js +++ /dev/null @@ -1,13 +0,0 @@ -self.custom203FetchHandler = function(request) { - return new Response('', { - status: 203, - statusText: 'Via customFetchHandler' - }); -}; - -self.custom410FetchHandler = function(request) { - return new Response('', { - status: 410, - statusText: 'Via customFetchHandler' - }); -}; diff --git a/app/bower_components/platinum-sw/test/platinum-sw-fetch/index.html b/app/bower_components/platinum-sw/test/platinum-sw-fetch/index.html deleted file mode 100644 index 46fb0b3..0000000 --- a/app/bower_components/platinum-sw/test/platinum-sw-fetch/index.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/bower_components/platinum-sw/test/platinum-sw-fetch/sw-import.js b/app/bower_components/platinum-sw/test/platinum-sw-fetch/sw-import.js deleted file mode 100644 index b0a8e66..0000000 --- a/app/bower_components/platinum-sw/test/platinum-sw-fetch/sw-import.js +++ /dev/null @@ -1 +0,0 @@ -importScripts('../../service-worker.js'); diff --git a/app/bower_components/platinum-sw/test/platinum-sw-import-script/index.html b/app/bower_components/platinum-sw/test/platinum-sw-import-script/index.html deleted file mode 100644 index 9d26fa1..0000000 --- a/app/bower_components/platinum-sw/test/platinum-sw-import-script/index.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/bower_components/platinum-sw/test/platinum-sw-import-script/post-message-echo.js b/app/bower_components/platinum-sw/test/platinum-sw-import-script/post-message-echo.js deleted file mode 100644 index 036cf1e..0000000 --- a/app/bower_components/platinum-sw/test/platinum-sw-import-script/post-message-echo.js +++ /dev/null @@ -1,3 +0,0 @@ -self.addEventListener('message', function(event) { - event.ports[0].postMessage(event.data); -}); diff --git a/app/bower_components/platinum-sw/test/platinum-sw-import-script/sw-import.js b/app/bower_components/platinum-sw/test/platinum-sw-import-script/sw-import.js deleted file mode 100644 index b0a8e66..0000000 --- a/app/bower_components/platinum-sw/test/platinum-sw-import-script/sw-import.js +++ /dev/null @@ -1 +0,0 @@ -importScripts('../../service-worker.js'); diff --git a/app/bower_components/platinum-sw/test/platinum-sw-register/index.html b/app/bower_components/platinum-sw/test/platinum-sw-register/index.html deleted file mode 100644 index 833b62f..0000000 --- a/app/bower_components/platinum-sw/test/platinum-sw-register/index.html +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/app/bower_components/platinum-sw/test/platinum-sw-register/sw-import.js b/app/bower_components/platinum-sw/test/platinum-sw-register/sw-import.js deleted file mode 100644 index b0a8e66..0000000 --- a/app/bower_components/platinum-sw/test/platinum-sw-register/sw-import.js +++ /dev/null @@ -1 +0,0 @@ -importScripts('../../service-worker.js'); diff --git a/app/bower_components/platinum-sw/test/platinum-sw-unsupported.html b/app/bower_components/platinum-sw/test/platinum-sw-unsupported.html deleted file mode 100644 index 9be1e7c..0000000 --- a/app/bower_components/platinum-sw/test/platinum-sw-unsupported.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/app/bower_components/polymer/.bower.json b/app/bower_components/polymer/.bower.json index 25eb84c..8f860ea 100644 --- a/app/bower_components/polymer/.bower.json +++ b/app/bower_components/polymer/.bower.json @@ -1,6 +1,6 @@ { "name": "polymer", - "version": "1.6.1", + "version": "1.8.0", "main": [ "polymer.html", "polymer-mini.html", @@ -25,7 +25,7 @@ "url": "https://github.com/Polymer/polymer.git" }, "dependencies": { - "webcomponentsjs": "^0.7.20" + "webcomponentsjs": "^0.7.24" }, "devDependencies": { "web-component-tester": "*", @@ -33,11 +33,11 @@ }, "private": true, "homepage": "https://github.com/polymer/polymer", - "_release": "1.6.1", + "_release": "1.8.0", "_resolution": { "type": "version", - "tag": "v1.6.1", - "commit": "1f197d9d7874b1e5808b2a5c26f34446a7d912fc" + "tag": "v1.8.0", + "commit": "3a2c841469c82376dbd76ad06eefd4b892a4ae5a" }, "_source": "git://github.com/polymer/polymer.git", "_target": "^1.1.0", diff --git a/app/bower_components/polymer/bower.json b/app/bower_components/polymer/bower.json index f0b22f0..c4f36f6 100644 --- a/app/bower_components/polymer/bower.json +++ b/app/bower_components/polymer/bower.json @@ -1,6 +1,6 @@ { "name": "polymer", - "version": "1.6.1", + "version": "1.8.0", "main": [ "polymer.html", "polymer-mini.html", @@ -25,7 +25,7 @@ "url": "https://github.com/Polymer/polymer.git" }, "dependencies": { - "webcomponentsjs": "^0.7.20" + "webcomponentsjs": "^0.7.24" }, "devDependencies": { "web-component-tester": "*", diff --git a/app/bower_components/polymer/build.log b/app/bower_components/polymer/build.log index 149dff6..5fd6529 100644 --- a/app/bower_components/polymer/build.log +++ b/app/bower_components/polymer/build.log @@ -1,562 +1,629 @@ BUILD LOG --------- -Build Time: 2016-08-01T11:30:14-0700 +Build Time: 2017-02-06T16:13:42-0800 NODEJS INFORMATION ================== -nodejs: v6.3.1 -abbrev: 1.0.7 -accepts: 1.3.3 -accessibility-developer-tools: 2.10.0 +nodejs: v6.9.3 +abbrev: 1.0.9 +accessibility-developer-tools: 2.11.0 +acorn: 4.0.3 acorn-jsx: 3.0.1 adm-zip: 0.4.7 -after: 0.8.1 +accepts: 1.3.3 +after: 0.8.2 +ajv: 4.10.0 +ajv-keywords: 1.2.0 agent-base: 2.0.1 -align-text: 0.1.4 -amdefine: 1.0.0 +amdefine: 1.0.1 ansi-cyan: 0.1.1 ansi-escapes: 1.4.0 ansi-red: 0.1.1 ansi-regex: 2.0.0 -ansi-styles: 2.2.0 +ansi-styles: 2.2.1 +align-text: 0.1.4 ansi-wrap: 0.1.0 append-field: 0.1.0 -archiver: 0.14.4 archy: 1.0.0 -argparse: 1.0.7 -arr-diff: 1.1.0 +archiver: 0.14.4 +arr-diff: 2.0.0 +argparse: 1.0.9 arr-flatten: 1.0.1 arr-union: 2.1.0 array-differ: 1.0.0 -array-find-index: 1.0.1 +array-find-index: 1.0.2 array-flatten: 1.1.1 array-slice: 0.2.3 array-union: 1.0.2 -array-uniq: 1.0.2 +array-uniq: 1.0.3 +array-unique: 0.2.1 arraybuffer.slice: 0.0.6 arrify: 1.0.1 -asap: 2.0.3 +asap: 2.0.5 asn1: 0.1.11 assert-plus: 0.1.5 assertion-error: 1.0.2 async: 0.9.2 aws-sign2: 0.5.0 -aws4: 1.4.1 -babel-polyfill: 6.7.2 -babel-regenerator-runtime: 6.5.0 -babel-runtime: 5.8.35 +asynckit: 0.4.0 +aws4: 1.5.0 +babel-polyfill: 6.20.0 +babel-runtime: 6.20.0 backo2: 1.0.2 backoff: 2.5.0 -balanced-match: 0.3.0 -base64-js: 0.0.8 -base64-arraybuffer: 0.1.2 -base64id: 0.1.0 -beeper: 1.1.0 -benchmark: 1.0.0 +babel-code-frame: 6.20.0 +balanced-match: 0.4.2 +base64-arraybuffer: 0.1.5 +base64id: 1.0.0 +base64-js: 1.1.2 +bcrypt-pbkdf: 1.0.0 +beeper: 1.1.1 better-assert: 1.0.2 -binaryextensions: 1.0.0 -bl: 0.9.5 +binaryextensions: 1.0.1 +bluebird: 2.11.0 blob: 0.0.4 -bluebird: 3.4.1 body-parser: 1.15.2 +bl: 0.9.5 boom: 0.4.2 +brace-expansion: 1.1.6 boxen: 0.3.1 -brace-expansion: 1.1.3 +braces: 1.8.5 +buffer-crc32: 0.2.13 browserstack: 1.5.0 -buffer-crc32: 0.2.5 bufferstreams: 1.1.1 +buffer-shims: 1.0.0 +bunyan: 1.8.5 builtin-modules: 1.1.1 busboy: 0.2.13 bytes: 2.4.0 -caller-path: 0.1.0 callsite: 1.0.0 +caller-path: 0.1.0 callsites: 0.2.0 camelcase: 2.1.1 camelcase-keys: 2.1.0 capture-stack-trace: 1.0.0 -caseless: 0.8.0 center-align: 0.1.3 chai: 3.5.0 -chalk: 1.1.1 +chalk: 1.1.3 +caseless: 0.8.0 circular-json: 0.3.1 cleankill: 1.0.3 cli-cursor: 1.0.2 -cli-width: 2.1.0 -cliui: 2.1.0 clone: 1.0.2 clone-stats: 0.0.1 -code-point-at: 1.0.0 -color-convert: 1.0.0 +co: 4.6.0 +code-point-at: 1.1.0 +cliui: 2.1.0 +cli-width: 2.1.0 combined-stream: 0.0.7 commander: 2.3.0 -component-bind: 1.0.0 component-emitter: 1.1.2 component-inherit: 0.0.3 -compress-commons: 0.2.9 +component-bind: 1.0.0 concat-map: 0.0.1 -concat-stream: 1.5.1 -configstore: 2.0.0 +concat-stream: 1.5.2 +compress-commons: 0.2.9 +configstore: 2.1.0 content-disposition: 0.5.1 content-type: 1.0.2 cookie: 0.3.1 cookie-signature: 1.0.6 -core-js: 2.2.0 +core-js: 2.4.1 core-util-is: 1.0.2 crc: 3.2.1 crc32-stream: 0.3.4 -create-error-class: 2.0.1 +create-error-class: 3.0.2 cryptiles: 0.2.2 csv: 0.4.6 csv-generate: 0.0.6 -csv-parse: 1.1.7 csv-stringify: 0.0.8 ctype: 0.5.3 +currently-unhandled: 0.4.1 d: 0.1.1 -dashdash: 1.14.0 -debug: 2.2.0 +dashdash: 1.14.1 +dateformat: 1.0.12 +debug: 2.4.1 debuglog: 1.0.1 -decamelize: 1.2.0 +csv-parse: 1.1.7 deep-eql: 0.1.3 deep-extend: 0.4.1 -deep-is: 0.1.3 +decamelize: 1.2.0 defaults: 1.0.3 -del: 2.2.1 +del: 2.2.2 delayed-stream: 0.0.5 depd: 1.1.0 deprecated: 0.0.1 destroy: 1.0.4 +detect-file: 0.1.0 dezalgo: 1.0.3 dicer: 0.2.5 diff: 1.4.0 -doctrine: 1.2.2 -dom-serializer: 0.1.0 -dom5: 1.3.1 +deep-is: 0.1.3 +doctrine: 1.5.0 +dom5: 1.3.6 domelementtype: 1.3.0 domhandler: 2.3.0 +dom-serializer: 0.1.0 domutils: 1.5.1 -dot-prop: 2.4.0 dtrace-provider: 0.6.0 duplexer: 0.1.1 duplexer2: 0.0.2 -ecc-jsbn: 0.1.1 +dot-prop: 3.0.0 ee-first: 1.1.1 +ecc-jsbn: 0.1.1 encodeurl: 1.0.1 end-of-stream: 0.1.5 -engine.io: 1.6.11 -engine.io-client: 1.6.11 -engine.io-parser: 1.2.4 +engine.io: 1.8.2 +engine.io-parser: 1.3.2 entities: 1.1.1 +engine.io-client: 1.8.2 +es5-ext: 0.10.12 error-ex: 1.3.0 -es5-ext: 0.10.11 -es6-iterator: 2.0.0 es6-map: 0.1.4 es6-promise: 2.3.0 -es6-set: 0.1.4 -es6-symbol: 3.0.2 +es6-iterator: 2.0.0 +es6-symbol: 3.1.0 es6-weak-map: 2.0.1 escape-html: 1.0.3 escape-regexp-component: 1.0.2 escape-string-regexp: 1.0.5 +escodegen: 1.8.1 +es6-set: 0.1.4 escope: 3.6.0 -eslint-plugin-html: 1.5.1 -espree: 3.1.7 -esrecurse: 4.1.0 +eslint: 3.12.1 +eslint-plugin-html: 1.7.0 +espree: 3.3.2 estraverse: 4.2.0 +esrecurse: 4.1.0 esutils: 2.0.2 etag: 1.7.0 event-emitter: 0.3.4 exit-hook: 1.1.1 -express: 4.14.0 -extend: 2.0.1 +esprima: 2.7.3 +expand-brackets: 0.1.5 +expand-range: 1.8.2 +expand-tilde: 1.2.2 +extend: 3.0.0 extend-shallow: 1.1.4 +extglob: 0.3.2 extsprintf: 1.2.0 +express: 4.14.0 fancy-log: 1.2.0 -fast-levenshtein: 1.1.3 fd-slicer: 1.0.1 +fast-levenshtein: 2.0.5 figures: 1.7.0 -file-entry-cache: 1.3.1 +file-entry-cache: 2.0.0 +filename-regex: 2.0.0 +fill-range: 2.2.3 filled-array: 1.1.0 -find-index: 0.1.1 finalhandler: 0.5.0 find-up: 1.1.2 +find-index: 0.1.1 +findup-sync: 0.4.3 first-chunk-stream: 1.0.0 -findup-sync: 0.3.0 -flagged-respawn: 0.3.1 -forever-agent: 0.5.2 +fined: 1.0.2 +for-in: 0.1.6 flat-cache: 1.2.1 -form-data: 0.2.0 +flagged-respawn: 0.3.2 +for-own: 0.1.4 +forever-agent: 0.5.2 formatio: 1.1.1 formidable: 1.0.17 forwarded: 0.1.0 freeport: 1.0.5 fresh: 0.3.0 +fs-exists-sync: 0.1.0 fs.realpath: 1.0.0 gaze: 0.5.2 generate-function: 2.0.0 generate-object-property: 1.2.0 get-stdin: 4.0.1 getpass: 0.1.6 -github-url-from-git: 1.4.0 +github-url-from-git: 1.5.0 github-url-from-username-repo: 1.0.2 -glob: 7.0.5 +glob-base: 0.3.0 +glob: 7.1.1 +glob-parent: 2.0.0 +form-data: 0.2.0 glob-stream: 3.1.18 -glob-watcher: 0.0.6 glob2base: 0.0.12 -globals: 9.9.0 +glob-watcher: 0.0.6 +global-modules: 0.2.3 +globals: 9.14.0 +global-prefix: 0.1.5 globby: 5.0.0 -globule: 0.1.0 glogg: 1.0.0 -got: 5.5.0 -graceful-fs: 4.1.3 +globule: 0.1.0 +got: 5.7.1 +graceful-fs: 4.1.11 graceful-readlink: 1.0.1 growl: 1.9.2 +gulp: 3.9.1 gulp-audit: 1.0.0 -gulp-eslint: 2.1.0 +gulp-eslint: 3.0.1 gulp-rename: 1.2.2 gulp-replace: 0.5.4 gulp-util: 3.0.7 gulp-vulcanize: 6.1.0 gulplog: 1.0.0 -handle-thing: 1.2.4 +handle-thing: 1.2.5 +har-validator: 2.0.6 has-ansi: 2.0.0 has-binary: 0.1.7 has-color: 0.1.7 has-cors: 1.1.0 has-gulplog: 0.1.0 -hoek: 0.9.1 -hpack.js: 2.1.4 -htmlparser2: 3.9.1 -hosted-git-info: 2.1.4 hawk: 1.1.1 +hoek: 0.9.1 +homedir-polyfill: 1.0.1 +hosted-git-info: 2.1.5 +hpack.js: 2.1.6 +htmlparser2: 3.9.2 http-deceiver: 1.2.7 -http-errors: 1.5.0 http-signature: 0.11.0 https-proxy-agent: 1.0.0 -hydrolysis: 1.23.1 +hydrolysis: 1.24.1 iconv-lite: 0.4.13 -ignore: 3.1.3 +ignore: 3.2.0 imurmurhash: 0.1.4 indent-string: 2.1.0 indexof: 0.0.1 -inflight: 1.0.4 -inherits: 2.0.1 +inflight: 1.0.6 +inherits: 2.0.3 ini: 1.3.4 inquirer: 0.12.0 -interpret: 1.0.0 +http-errors: 1.5.1 +interpret: 1.0.1 ipaddr.js: 1.1.1 -is-absolute: 0.1.7 is-arrayish: 0.2.1 -is-buffer: 1.1.3 +is-buffer: 1.1.4 is-builtin-module: 1.0.0 -is-finite: 1.0.1 +is-absolute: 0.2.6 +is-equal-shallow: 0.1.3 +is-extendable: 0.1.1 +is-dotfile: 1.0.2 +is-extglob: 1.0.0 is-fullwidth-code-point: 1.0.0 -is-my-json-valid: 2.13.1 +is-finite: 1.0.2 +is-glob: 2.0.1 +is-my-json-valid: 2.15.0 is-npm: 1.0.0 -is-obj: 1.0.0 +is-obj: 1.0.1 is-path-cwd: 1.0.0 is-path-in-cwd: 1.0.0 is-path-inside: 1.0.0 -is-plain-obj: 1.1.0 +is-posix-bracket: 0.1.1 +is-primitive: 2.0.0 is-property: 1.0.2 +is-number: 2.1.0 is-redirect: 1.0.0 -is-relative: 0.1.3 +is-relative: 0.2.1 is-resolvable: 1.0.0 -is-retry-allowed: 1.0.0 -is-stream: 1.0.1 +is-stream: 1.1.0 is-typedarray: 1.0.0 +is-unc-path: 0.1.2 is-utf8: 0.2.1 +is-retry-allowed: 1.1.0 +is-windows: 0.2.0 isarray: 1.0.0 isexe: 1.1.2 +isobject: 2.1.0 isstream: 0.1.2 istextorbinary: 1.0.2 +jade: 0.26.3 jju: 1.3.0 +js-tokens: 2.0.0 jodid25519: 1.0.2 +js-yaml: 3.7.0 jsbn: 0.1.0 json-parse-helpfulerror: 1.0.3 -json-schema: 0.2.2 +json-schema: 0.2.3 json-stable-stringify: 1.0.1 json-stringify-safe: 5.0.1 -json3: 3.2.6 +json3: 3.3.2 jsonify: 0.0.0 -jsonpointer: 2.0.0 -jsprim: 1.3.0 +jsprim: 1.3.1 +jsonpointer: 4.0.0 keep-alive-agent: 0.0.1 -kind-of: 1.1.0 +kind-of: 3.1.0 latest-version: 2.0.0 -launchpad: 0.5.3 -lazy-cache: 1.0.3 +lazy-cache: 1.0.4 lazypipe: 1.0.1 -lazystream: 0.1.0 levn: 0.3.0 -liftoff: 2.2.0 +liftoff: 2.3.0 load-json-file: 1.1.0 +lazystream: 0.1.0 lodash: 1.0.2 lodash._basecopy: 3.0.1 lodash._basetostring: 3.0.1 lodash._basevalues: 3.0.0 lodash._getnative: 3.9.1 +launchpad: 0.5.4 lodash._isiterateecall: 3.0.9 lodash._reescape: 3.0.0 lodash._reevaluate: 3.0.0 -lodash._reinterpolate: 3.0.0 +lodash.assignwith: 4.2.0 lodash._root: 3.0.1 lodash.escape: 3.2.0 -lodash.isarguments: 3.0.8 +lodash.isarguments: 3.1.0 lodash.isarray: 3.0.4 +lodash.isempty: 4.4.0 +lodash.isplainobject: 4.0.6 +lodash._reinterpolate: 3.0.0 +lodash.isstring: 4.0.1 lodash.keys: 3.1.2 +lodash.mapvalues: 4.6.0 +lodash.pick: 4.4.0 lodash.restparam: 3.6.1 lodash.template: 3.6.2 lodash.templatesettings: 3.1.1 lolex: 1.3.2 longest: 1.0.1 -loud-rejection: 1.3.0 lowercase-keys: 1.0.0 lru-cache: 2.7.3 +map-cache: 0.2.2 map-obj: 1.0.1 -media-typer: 0.3.0 +loud-rejection: 1.6.0 meow: 3.7.0 merge-descriptors: 1.0.1 +media-typer: 0.3.0 methods: 1.1.2 -mime-db: 1.23.0 -mime-types: 2.1.11 +micromatch: 2.3.11 +mime: 1.3.4 +mime-db: 1.25.0 +mime-types: 2.1.13 minimalistic-assert: 1.0.0 -minimatch: 3.0.0 +minimatch: 3.0.3 minimist: 1.2.0 -moment: 2.14.1 -ms: 0.7.1 +mkdirp: 0.5.1 +moment: 2.17.1 +ms: 0.7.2 +mocha: 2.5.3 multipipe: 0.1.2 -multer: 1.1.0 -mute-stream: 0.0.5 +multer: 1.2.1 mv: 2.1.1 +mute-stream: 0.0.5 +natives: 1.1.0 +natural-compare: 1.4.0 nan: 2.4.0 negotiator: 0.6.1 -node-int64: 0.3.3 +ncp: 2.0.0 +node-uuid: 1.4.7 node-status-codes: 1.0.0 +node-int64: 0.3.3 nodegit-promise: 4.0.0 nomnom: 1.8.1 -normalize-package-data: 2.3.5 -number-is-nan: 1.0.0 +nopt: 3.0.6 +normalize-path: 2.0.1 +number-is-nan: 1.0.1 oauth-sign: 0.5.0 -object-assign: 4.0.1 +normalize-package-data: 2.3.5 +object-assign: 4.1.0 object-component: 0.0.3 +object.omit: 2.0.1 obuf: 1.1.1 -on-finished: 2.3.0 -once: 1.3.3 +once: 1.4.0 onetime: 1.1.0 -optionator: 0.8.1 +on-finished: 2.3.0 options: 0.0.6 -orchestrator: 0.3.7 +optionator: 0.8.2 ordered-read-streams: 0.1.0 -os-homedir: 1.0.1 -os-tmpdir: 1.0.1 -osenv: 0.1.3 -package-json: 2.3.1 +orchestrator: 0.3.8 +os-homedir: 1.0.2 +package-json: 2.4.0 +osenv: 0.1.4 +parse-filepath: 1.0.1 +parse-glob: 3.0.4 parse-json: 2.2.0 parse5: 1.5.1 -parsejson: 0.0.1 -parseqs: 0.0.2 -parseuri: 0.0.4 +parse-passwd: 1.0.0 +os-tmpdir: 1.0.2 +parsejson: 0.0.3 +parseqs: 0.0.5 parseurl: 1.3.1 +parseuri: 0.0.5 path-exists: 2.1.0 -path-is-absolute: 1.0.0 -path-is-inside: 1.0.1 +path-is-absolute: 1.0.1 +path-is-inside: 1.0.2 +path-root: 0.1.1 path-posix: 1.0.0 +path-root-regex: 0.1.2 path-to-regexp: 0.1.7 path-type: 1.1.0 -pend: 1.2.0 pify: 2.3.0 +pend: 1.2.0 pinkie: 2.0.4 -pinkie-promise: 2.0.0 -plist: 1.2.0 -plugin-error: 0.1.2 +pinkie-promise: 2.0.1 +plist: 2.0.1 pluralize: 1.2.1 +plugin-error: 0.1.2 polyclean: 1.3.1 precond: 0.2.3 prelude-ls: 1.1.2 -prepend-http: 1.0.3 -pretty-hrtime: 1.0.2 -process-nextick-args: 1.0.6 +pretty-hrtime: 1.0.3 +prepend-http: 1.0.4 +process-nextick-args: 1.0.7 +preserve: 0.2.0 progress: 1.1.8 -promisify-node: 0.4.0 proxy-addr: 1.1.2 +promisify-node: 0.4.0 pseudomap: 1.0.2 +punycode: 1.4.1 q: 1.4.1 +randomatic: 1.1.6 qs: 6.2.0 range-parser: 1.2.0 raw-body: 2.1.7 +rc: 1.1.6 read-all-stream: 3.1.0 read-installed: 3.1.5 read-package-json: 1.3.3 read-pkg: 1.1.0 read-pkg-up: 1.0.1 -readable-stream: 2.0.6 readdir-scoped-modules: 1.0.2 +readable-stream: 2.2.2 readline2: 1.0.1 -rechoir: 0.6.2 redent: 1.0.0 -registry-url: 3.0.3 -repeat-string: 1.5.4 -repeating: 2.0.0 +rechoir: 0.6.2 +regenerator-runtime: 0.10.1 +regex-cache: 0.4.3 +registry-auth-token: 3.1.0 +registry-url: 3.1.0 +repeat-element: 1.1.2 +repeat-string: 1.6.1 +repeating: 2.0.1 replace-ext: 0.0.1 -replacestream: 4.0.0 -request: 2.51.0 -require-uncached: 1.0.2 -resolve: 1.1.7 +replacestream: 4.0.2 +require-uncached: 1.0.3 +resolve: 1.2.0 +resolve-dir: 0.1.1 resolve-from: 1.0.1 restore-cursor: 1.0.1 +restify: 4.3.0 right-align: 0.1.3 -run-async: 0.1.0 +rimraf: 2.5.4 run-sequence: 1.2.2 -safe-json-stringify: 1.0.3 +run-async: 0.1.0 +request: 2.51.0 rx-lite: 3.1.2 +safe-json-stringify: 1.0.3 samsam: 1.1.2 -sauce-connect-launcher: 0.14.0 +sauce-connect-launcher: 1.1.1 +selenium-standalone: 5.9.0 select-hose: 2.0.0 -semver-diff: 2.1.0 +semver: 4.3.6 send: 0.11.1 sequencify: 0.0.7 +semver-diff: 2.1.0 serve-static: 1.11.1 serve-waterfall: 1.1.1 -server-destroy: 1.0.1 -setprototypeof: 1.0.1 +setprototypeof: 1.0.2 +shelljs: 0.7.5 sigmund: 1.0.1 -signal-exit: 2.1.2 -sinon: 1.17.5 +server-destroy: 1.0.1 +signal-exit: 3.0.2 sinon-chai: 2.8.0 slice-ansi: 0.0.4 slide: 1.1.6 +sinon: 1.17.6 sntp: 0.2.4 -socket.io: 1.4.8 -socket.io-adapter: 0.4.0 -socket.io-parser: 2.2.6 +socket.io-adapter: 0.5.0 +socket.io: 1.7.2 +socket.io-client: 1.7.2 +socket.io-parser: 2.3.1 source-map: 0.2.0 sparkles: 1.0.0 spdx-correct: 1.0.2 -spdx-exceptions: 1.0.4 -spdx-expression-parse: 1.0.2 -socket.io-client: 1.4.8 -spdx-license-ids: 1.2.0 -spdy: 3.3.4 -spdy-transport: 2.0.11 +spdx-license-ids: 1.2.2 +spdx-expression-parse: 1.0.4 +spdy-transport: 2.0.18 sprintf-js: 1.0.3 +sshpk: 1.10.1 stacky: 1.3.1 -statuses: 1.3.0 +statuses: 1.3.1 stream-combiner: 0.2.2 stream-consume: 0.1.0 -stream-transform: 0.1.1 +spdy: 3.4.4 streamsearch: 0.1.2 -string-width: 1.0.1 +stream-transform: 0.1.1 +string-width: 1.0.2 string_decoder: 0.10.31 stringstream: 0.0.5 strip-ansi: 3.0.1 strip-bom: 2.0.0 +strip-indent: 1.0.1 +strip-json-comments: 1.0.4 supports-color: 2.0.0 -table: 3.7.8 -tar-stream: 1.1.5 +table: 3.8.3 +tar-stream: 1.5.2 temp: 0.8.3 test-fixture: 1.1.1 text-table: 0.2.0 -textextensions: 1.0.1 +textextensions: 1.0.2 through: 2.3.8 -through2: 2.0.1 -tildify: 1.1.2 -time-stamp: 1.0.0 -timed-out: 2.0.0 +through2: 2.0.3 +tildify: 1.2.0 +time-stamp: 1.0.1 +timed-out: 3.1.0 to-array: 0.1.4 to-iso-string: 0.0.2 -tough-cookie: 2.3.1 +tough-cookie: 2.3.2 trim-newlines: 1.0.0 -tryit: 1.0.2 +tryit: 1.0.3 tunnel-agent: 0.4.3 -tv4: 1.2.7 -tweetnacl: 0.13.3 +tweetnacl: 0.14.5 type-check: 0.3.2 type-detect: 1.0.0 -type-is: 1.6.13 +type-is: 1.6.14 typedarray: 0.0.6 +uglify-js: 2.7.5 uglify-to-browserify: 1.0.2 ultron: 1.0.2 +unc-path-regex: 0.1.2 underscore: 1.6.0 -underscore.string: 3.0.3 unique-stream: 1.0.0 +underscore.string: 3.0.3 unpipe: 1.0.0 -unzip-response: 1.0.0 -update-notifier: 0.6.3 +unzip-response: 1.0.2 urijs: 1.16.1 url-parse-lax: 1.0.0 -utf8: 2.1.0 +user-home: 1.1.1 util: 0.10.3 util-deprecate: 1.0.2 util-extend: 1.0.3 utils-merge: 1.0.0 -uuid: 2.0.1 +update-notifier: 0.6.3 v8flags: 2.0.11 -validate-npm-package-license: 3.0.1 vargs: 0.1.0 vary: 1.1.0 vasync: 1.6.3 -verror: 1.6.1 +verror: 1.9.0 vinyl: 0.5.3 +validate-npm-package-license: 3.0.1 vinyl-fs: 0.3.14 +vulcanize: 1.15.1 +uuid: 2.0.3 wbuf: 1.7.2 -wct-local: 2.0.8 -wct-sauce: 1.8.4 +wct-local: 2.0.13 +wct-sauce: 1.8.6 +wd: 0.3.12 +web-component-tester: 4.3.6 +which: 1.2.12 widest-line: 1.0.0 window-size: 0.1.0 wordwrap: 1.0.0 -wrappy: 1.0.1 +wrappy: 1.0.2 write: 0.2.1 -write-file-atomic: 1.1.4 -ws: 1.1.0 +ws: 1.1.1 +write-file-atomic: 1.2.0 +wtf-8: 1.0.0 xdg-basedir: 2.0.0 -xmlbuilder: 4.0.0 -xmldom: 0.1.22 -xmlhttprequest-ssl: 1.5.1 -xregexp: 3.1.1 +xmlbuilder: 8.2.2 +xmldom: 0.1.27 +xmlhttprequest-ssl: 1.5.3 xtend: 4.0.1 yallist: 2.0.0 yargs: 3.10.0 -yauzl: 2.6.0 +yauzl: 2.7.0 yeast: 0.1.2 zip-stream: 0.5.2 -acorn: 3.3.0 -bunyan: 1.8.1 -dateformat: 1.0.12 -escodegen: 1.8.0 -eslint: 2.13.1 -esprima: 2.7.2 -gulp: 3.9.1 -har-validator: 2.0.6 -jade: 0.26.3 -js-yaml: 3.6.1 -mime: 1.3.4 -mkdirp: 0.5.1 -mocha: 2.5.3 -ncp: 2.0.0 -node-uuid: 1.4.7 -nopt: 3.0.6 -rc: 1.1.6 -restify: 4.1.1 -rimraf: 2.5.4 -selenium-standalone: 5.5.0 -semver: 4.3.6 -shelljs: 0.6.0 -sshpk: 1.9.2 -strip-indent: 1.0.1 -strip-json-comments: 1.0.4 -uglify-js: 2.6.2 -user-home: 1.1.1 -vulcanize: 1.14.7 -wd: 0.3.12 -web-component-tester: 4.3.1 -which: 1.2.10 +@types/chalk: 0.4.31 +@types/clone: 0.1.30 +@types/express: 4.0.34 +@types/mime: 0.0.29 +@types/express-serve-static-core: 4.0.39 +@types/freeport: 1.0.20 +@types/node: 4.0.30 +@types/parse5: 0.0.31 +@types/which: 1.0.28 +@types/serve-static: 1.7.31 REPO REVISIONS ============== -polymer: 4abd53c716e32de2bbac4f87f5b01ce007119f04 +polymer-1.x: ef0174703a1cf850ca4e6f205a8cec108687e85e BUILD HASHES ============ -polymer-mini.html: 7b55678ec0ca21f4a1af9423262f367d87a9b739 -polymer-micro.html: ff9824cb1fb68b011f3fe0de7b54474e65b52da7 -polymer.html: 2df3f2cd58aef56f63fc472e70c61d646adf801e \ No newline at end of file +polymer-mini.html: 37df26412c1452ef3f58a0e4a8720eeab15fd4b2 +polymer-micro.html: 775957d2c4f66b26fe057854ef1d364897906dfc +polymer.html: 4fd2941c2a1a94aa59325a88de5067c3600fd21d \ No newline at end of file diff --git a/app/bower_components/polymer/polymer-micro.html b/app/bower_components/polymer/polymer-micro.html index c101259..263b5aa 100644 --- a/app/bower_components/polymer/polymer-micro.html +++ b/app/bower_components/polymer/polymer-micro.html @@ -6,11 +6,7 @@ The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as part of the polymer project is also subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt ---> - - - - @@ -5335,23 +5431,3 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/app/bower_components/prism-element/.bower.json b/app/bower_components/prism-element/.bower.json index 54ed55e..8443e38 100644 --- a/app/bower_components/prism-element/.bower.json +++ b/app/bower_components/prism-element/.bower.json @@ -1,7 +1,7 @@ { "name": "prism-element", "description": "Prism.js import and syntax highlighting", - "version": "1.1.1", + "version": "1.2.0", "authors": [ "The Polymer Project Authors (https://polymer.github.io/AUTHORS.txt)" ], @@ -32,11 +32,11 @@ "paper-styles": "PolymerElements/paper-styles#^1.0.0", "web-component-tester": "^4.0.0" }, - "_release": "1.1.1", + "_release": "1.2.0", "_resolution": { "type": "version", - "tag": "v1.1.1", - "commit": "5f742212fac3b391f964fb9dd35cf351301bec9b" + "tag": "v1.2.0", + "commit": "20485d411f8823986bf14dd62d9df6b4a938c9d0" }, "_source": "git://github.com/PolymerElements/prism-element.git", "_target": "^1.1.0", diff --git a/app/bower_components/prism-element/bower.json b/app/bower_components/prism-element/bower.json index 7d37077..52db664 100644 --- a/app/bower_components/prism-element/bower.json +++ b/app/bower_components/prism-element/bower.json @@ -1,7 +1,7 @@ { "name": "prism-element", "description": "Prism.js import and syntax highlighting", - "version": "1.1.1", + "version": "1.2.0", "authors": [ "The Polymer Project Authors (https://polymer.github.io/AUTHORS.txt)" ], diff --git a/app/bower_components/prism-element/prism-highlighter.html b/app/bower_components/prism-element/prism-highlighter.html index 0458466..96f9524 100644 --- a/app/bower_components/prism-element/prism-highlighter.html +++ b/app/bower_components/prism-element/prism-highlighter.html @@ -37,6 +37,36 @@ Polymer({ is: 'prism-highlighter', + + properties: { + /** + * Adds languages outside of the core Prism languages. + * + * Prism includes a few languages in the core library: + * - JavaScript + * - Markup + * - CSS + * - C-Like + * Use this property to extend the core set with other Prism + * components and custom languages. + * + * Example: + * ``` + * + * + * + * ``` + * + * @attribute languages + * @type {!Object} + */ + languages: { + type: Object, + value: function() { + return {}; + } + } + }, ready: function() { this._handler = this._highlight.bind(this); @@ -81,7 +111,9 @@ return code.match(/^\s*" when there is no attributes [[`3dc8c9e`](https://github.com/PrismJS/prism/commit/3dc8c9e)] +* Added missing hooks-related tests for AsciiDoc, Groovy, Handlebars, Markup, PHP and Smarty [[`c1a0c1b`](https://github.com/PrismJS/prism/commit/c1a0c1b)] +* Fix issue when using Line numbers plugin and Normalise whitespace plugin together with Handlebars, PHP or Smarty. Fix [#1018](https://github.com/PrismJS/prism/issues/1018), [#997](https://github.com/PrismJS/prism/issues/997), [#935](https://github.com/PrismJS/prism/issues/935). Revert [#998](https://github.com/PrismJS/prism/issues/998). [[`86aa3d2`](https://github.com/PrismJS/prism/commit/86aa3d2)] +* Optimized logo ([#990](https://github.com/PrismJS/prism/issues/990)) ([#1002](https://github.com/PrismJS/prism/issues/1002)) [[`f69e570`](https://github.com/PrismJS/prism/commit/f69e570), [`218fd25`](https://github.com/PrismJS/prism/commit/218fd25)] +* Remove unneeded prefixed CSS ([#989](https://github.com/PrismJS/prism/issues/989)) [[`5e56833`](https://github.com/PrismJS/prism/commit/5e56833)] +* Optimize images ([#1007](https://github.com/PrismJS/prism/issues/1007)) [[`b2fa6d5`](https://github.com/PrismJS/prism/commit/b2fa6d5)] +* Add yarn.lock to .gitignore ([#1035](https://github.com/PrismJS/prism/issues/1035)) [[`03ecf74`](https://github.com/PrismJS/prism/commit/03ecf74)] +* Fix greedy flag bug. Fixes [#1039](https://github.com/PrismJS/prism/issues/1039) [[`32cd99f`](https://github.com/PrismJS/prism/commit/32cd99f)] +* Ruby: Fix test after [#1023](https://github.com/PrismJS/prism/issues/1023) [[`b15d43b`](https://github.com/PrismJS/prism/commit/b15d43b)] +* Ini: Fix test after [#1047](https://github.com/PrismJS/prism/issues/1047) [[`25cdd3f`](https://github.com/PrismJS/prism/commit/25cdd3f)] +* Reduce risk of XSS ([#1051](https://github.com/PrismJS/prism/issues/1051)) [[`17e33bc`](https://github.com/PrismJS/prism/commit/17e33bc)] +* env.code can be modified by before-sanity-check hook even when using language-none. Fix [#1066](https://github.com/PrismJS/prism/issues/1066) [[`83bafbd`](https://github.com/PrismJS/prism/commit/83bafbd)] + + ## 1.5.1 (2016-06-05) ### Updated components * __Normalize Whitespace__: - * FAdd class that disables the normalize whitespace plugin [[`9385c54`](https://github.com/PrismJS/prism/commit/9385c54)] + * Add class that disables the normalize whitespace plugin [[`9385c54`](https://github.com/PrismJS/prism/commit/9385c54)] * __JavaScript Language__: * Rearrange the `string` and `template-string` token in JavaScript [[`1158e46`](https://github.com/PrismJS/prism/commit/1158e46)] * __SQL Language__: @@ -18,7 +107,7 @@ * Allow for asynchronous loading of prism.js ([#959](https://github.com/PrismJS/prism/pull/959)) * Use toLowerCase on language names ([#957](https://github.com/PrismJS/prism/pull/957)) [[`acd9508`](https://github.com/PrismJS/prism/commit/acd9508)] -* link to index for basic usage - fixes #945 ([#946](https://github.com/PrismJS/prism/pull/946)) [[`6c772d8`](https://github.com/PrismJS/prism/commit/6c772d8)] +* link to index for basic usage - fixes [#945](https://github.com/PrismJS/prism/issues/945) ([#946](https://github.com/PrismJS/prism/pull/946)) [[`6c772d8`](https://github.com/PrismJS/prism/commit/6c772d8)] * Fixed monospace typo ([#953](https://github.com/PrismJS/prism/pull/953)) [[`e6c3498`](https://github.com/PrismJS/prism/commit/e6c3498)] ## 1.5.0 (2016-05-01) diff --git a/app/bower_components/prism/components.js b/app/bower_components/prism/components.js index 1a2a881..bb89769 100644 --- a/app/bower_components/prism/components.js +++ b/app/bower_components/prism/components.js @@ -69,6 +69,10 @@ var components = { "require": "javascript", "owner": "Golmote" }, + "ada": { + "title": "Ada", + "owner": "Lucretia" + }, "apacheconf": { "title": "Apache Configuration", "owner": "GuiTeK" @@ -210,6 +214,10 @@ var components = { "require": "clike", "owner": "arnehormann" }, + "graphql": { + "title": "GraphQL", + "owner": "Golmote" + }, "groovy": { "title": "Groovy", "require": "clike", @@ -264,6 +272,11 @@ var components = { "require": "clike", "owner": "sherblot" }, + "jolie": { + "title": "Jolie", + "require": "clike", + "owner": "thesave" + }, "json": { "title": "JSON", "owner": "CupOfTea696" @@ -290,6 +303,10 @@ var components = { "require": "css", "owner": "Golmote" }, + "livescript": { + "title": "LiveScript", + "owner": "Golmote" + }, "lolcode": { "title": "LOLCODE", "owner": "Golmote" @@ -397,6 +414,10 @@ var components = { "title": "Prolog", "owner": "Golmote" }, + "properties": { + "title": ".properties", + "owner": "Golmote" + }, "protobuf": { "title": "Protocol Buffers", "require": "clike", @@ -432,6 +453,11 @@ var components = { "require": ["markup", "javascript"], "owner": "vkbansal" }, + "reason": { + "title": "Reason", + "require": "clike", + "owner": "Golmote" + }, "rest": { "title": "reST (reStructuredText)", "owner": "Golmote" @@ -534,6 +560,10 @@ var components = { "require": "markup", "owner": "Golmote" }, + "xojo": { + "title": "Xojo (REALbasic)", + "owner": "Golmote" + }, "yaml": { "title": "YAML", "owner": "hason" @@ -552,13 +582,19 @@ var components = { "show-invisibles": "Show Invisibles", "autolinker": "Autolinker", "wpd": "WebPlatform Docs", + "custom-class": { + "title": "Custom Class", + "owner": "dvkndn" + }, "file-highlight": { "title": "File Highlight", "noCSS": true }, "show-language": { "title": "Show Language", - "owner": "nauzilus" + "owner": "nauzilus", + "noCSS": true, + "require": "toolbar" }, "jsonp-highlight": { "title": "JSONP Highlight", @@ -625,6 +661,21 @@ var components = { "owner": "zeitgeist87", "after": "unescaped-markup", "noCSS": true + }, + "data-uri-highlight": { + "title": "Data-URI Highlight", + "owner": "Golmote", + "noCSS": true + }, + "toolbar": { + "title": "Toolbar", + "owner": "mAAdhaTTah" + }, + "copy-to-clipboard": { + "title": "Copy to Clipboard Button", + "owner": "mAAdhaTTah", + "require": "toolbar", + "noCSS": true } } }; diff --git a/app/bower_components/prism/components/prism-ada.js b/app/bower_components/prism/components/prism-ada.js new file mode 100644 index 0000000..95ca462 --- /dev/null +++ b/app/bower_components/prism/components/prism-ada.js @@ -0,0 +1,19 @@ +Prism.languages.ada = { + 'comment': /--.*/, + 'string': /"(?:""|[^"\r\f\n])*"/i, + 'number': [ + { + pattern: /\b[0-9](?:_?[0-9])*#[0-9A-F](?:_?[0-9A-F])*(?:\.[0-9A-F](?:_?[0-9A-F])*)?#(?:E[+-]?[0-9](?:_?[0-9])*)?/i + }, + { + pattern: /\b[0-9](?:_?[0-9])*(?:\.[0-9](?:_?[0-9])*)?(?:E[+-]?[0-9](?:_?[0-9])*)?\b/i + } + ], + 'attr-name': /\b'\w+/i, + 'keyword': /\b(?:abort|abs|abstract|accept|access|aliased|all|and|array|at|begin|body|case|constant|declare|delay|delta|digits|do|else|new|return|elsif|end|entry|exception|exit|for|function|generic|goto|if|in|interface|is|limited|loop|mod|not|null|of|others|out|overriding|package|pragma|private|procedure|protected|raise|range|record|rem|renames|requeue|reverse|select|separate|some|subtype|synchronized|tagged|task|terminate|then|type|until|use|when|while|with|xor)\b/i, + 'boolean': /\b(?:true|false)\b/i, + 'operator': /<[=>]?|>=?|=>?|:=|\/=?|\*\*?|[&+-]/, + 'punctuation': /\.\.?|[,;():]/, + 'char': /'.'/, + 'variable': /\b[a-z](?:[_a-z\d])*\b/i +}; \ No newline at end of file diff --git a/app/bower_components/prism/components/prism-ada.min.js b/app/bower_components/prism/components/prism-ada.min.js new file mode 100644 index 0000000..f8c0133 --- /dev/null +++ b/app/bower_components/prism/components/prism-ada.min.js @@ -0,0 +1 @@ +Prism.languages.ada={comment:/--.*/,string:/"(?:""|[^"\r\f\n])*"/i,number:[{pattern:/\b[0-9](?:_?[0-9])*#[0-9A-F](?:_?[0-9A-F])*(?:\.[0-9A-F](?:_?[0-9A-F])*)?#(?:E[+-]?[0-9](?:_?[0-9])*)?/i},{pattern:/\b[0-9](?:_?[0-9])*(?:\.[0-9](?:_?[0-9])*)?(?:E[+-]?[0-9](?:_?[0-9])*)?\b/i}],"attr-name":/\b'\w+/i,keyword:/\b(?:abort|abs|abstract|accept|access|aliased|all|and|array|at|begin|body|case|constant|declare|delay|delta|digits|do|else|new|return|elsif|end|entry|exception|exit|for|function|generic|goto|if|in|interface|is|limited|loop|mod|not|null|of|others|out|overriding|package|pragma|private|procedure|protected|raise|range|record|rem|renames|requeue|reverse|select|separate|some|subtype|synchronized|tagged|task|terminate|then|type|until|use|when|while|with|xor)\b/i,"boolean":/\b(?:true|false)\b/i,operator:/<[=>]?|>=?|=>?|:=|\/=?|\*\*?|[&+-]/,punctuation:/\.\.?|[,;():]/,"char":/'.'/,variable:/\b[a-z](?:[_a-z\d])*\b/i}; \ No newline at end of file diff --git a/app/bower_components/prism/components/prism-apl.js b/app/bower_components/prism/components/prism-apl.js index 9218331..050752b 100644 --- a/app/bower_components/prism/components/prism-apl.js +++ b/app/bower_components/prism/components/prism-apl.js @@ -8,7 +8,7 @@ Prism.languages.apl = { alias: 'function' }, 'constant': /[⍬⌾#⎕⍞]/, - 'function': /[-+×÷⌈⌊∣|⍳?*⍟○!⌹<≤=>≥≠≡≢∊⍷∪∩~∨∧⍱⍲⍴,⍪⌽⊖⍉↑↓⊂⊃⌷⍋⍒⊤⊥⍕⍎⊣⊢⍁⍂≈⍯↗¤→]/, + 'function': /[-+×÷⌈⌊∣|⍳⍸?*⍟○!⌹<≤=>≥≠≡≢∊⍷∪∩~∨∧⍱⍲⍴,⍪⌽⊖⍉↑↓⊂⊃⌷⍋⍒⊤⊥⍕⍎⊣⊢⍁⍂≈⍯↗¤→]/, 'monadic-operator': { pattern: /[\\\/⌿⍀¨⍨⌶&∥]/, alias: 'operator' @@ -26,4 +26,4 @@ Prism.languages.apl = { pattern: /[{}⍺⍵⍶⍹∇⍫:]/, alias: 'builtin' } -}; \ No newline at end of file +}; diff --git a/app/bower_components/prism/components/prism-apl.min.js b/app/bower_components/prism/components/prism-apl.min.js index bfd9dc3..30866c3 100644 --- a/app/bower_components/prism/components/prism-apl.min.js +++ b/app/bower_components/prism/components/prism-apl.min.js @@ -1 +1 @@ -Prism.languages.apl={comment:/(?:⍝|#[! ]).*$/m,string:/'(?:[^'\r\n]|'')*'/,number:/¯?(?:\d*\.?\d+(?:e[+¯]?\d+)?|¯|∞)(?:j¯?(?:\d*\.?\d+(?:e[\+¯]?\d+)?|¯|∞))?/i,statement:/:[A-Z][a-z][A-Za-z]*\b/,"system-function":{pattern:/⎕[A-Z]+/i,alias:"function"},constant:/[⍬⌾#⎕⍞]/,"function":/[-+×÷⌈⌊∣|⍳?*⍟○!⌹<≤=>≥≠≡≢∊⍷∪∩~∨∧⍱⍲⍴,⍪⌽⊖⍉↑↓⊂⊃⌷⍋⍒⊤⊥⍕⍎⊣⊢⍁⍂≈⍯↗¤→]/,"monadic-operator":{pattern:/[\\\/⌿⍀¨⍨⌶&∥]/,alias:"operator"},"dyadic-operator":{pattern:/[.⍣⍠⍤∘⌸]/,alias:"operator"},assignment:{pattern:/←/,alias:"keyword"},punctuation:/[\[;\]()◇⋄]/,dfn:{pattern:/[{}⍺⍵⍶⍹∇⍫:]/,alias:"builtin"}}; \ No newline at end of file +Prism.languages.apl={comment:/(?:⍝|#[! ]).*$/m,string:/'(?:[^'\r\n]|'')*'/,number:/¯?(?:\d*\.?\d+(?:e[+¯]?\d+)?|¯|∞)(?:j¯?(?:\d*\.?\d+(?:e[\+¯]?\d+)?|¯|∞))?/i,statement:/:[A-Z][a-z][A-Za-z]*\b/,"system-function":{pattern:/⎕[A-Z]+/i,alias:"function"},constant:/[⍬⌾#⎕⍞]/,"function":/[-+×÷⌈⌊∣|⍳⍸?*⍟○!⌹<≤=>≥≠≡≢∊⍷∪∩~∨∧⍱⍲⍴,⍪⌽⊖⍉↑↓⊂⊃⌷⍋⍒⊤⊥⍕⍎⊣⊢⍁⍂≈⍯↗¤→]/,"monadic-operator":{pattern:/[\\\/⌿⍀¨⍨⌶&∥]/,alias:"operator"},"dyadic-operator":{pattern:/[.⍣⍠⍤∘⌸]/,alias:"operator"},assignment:{pattern:/←/,alias:"keyword"},punctuation:/[\[;\]()◇⋄]/,dfn:{pattern:/[{}⍺⍵⍶⍹∇⍫:]/,alias:"builtin"}}; \ No newline at end of file diff --git a/app/bower_components/prism/components/prism-asciidoc.js b/app/bower_components/prism/components/prism-asciidoc.js index 55a6330..ec4eddc 100644 --- a/app/bower_components/prism/components/prism-asciidoc.js +++ b/app/bower_components/prism/components/prism-asciidoc.js @@ -27,7 +27,7 @@ }; Prism.languages.asciidoc = { 'comment-block': { - pattern: /^(\/{4,})(?:\r?\n|\r)(?:.*(?:\r?\n|\r))*?\1/m, + pattern: /^(\/{4,})(?:\r?\n|\r)(?:[\s\S]*(?:\r?\n|\r))??\1/m, alias: 'comment' }, 'table': { @@ -46,7 +46,7 @@ }, 'passthrough-block': { - pattern: /^(\+{4,})(?:\r?\n|\r)(?:.*(?:\r?\n|\r))*?\1$/m, + pattern: /^(\+{4,})(?:\r?\n|\r)(?:[\s\S]*(?:\r?\n|\r))??\1$/m, inside: { 'punctuation': /^\++|\++$/ // See rest below @@ -54,7 +54,7 @@ }, // Literal blocks and listing blocks 'literal-block': { - pattern: /^(-{4,}|\.{4,})(?:\r?\n|\r)(?:.*(?:\r?\n|\r))*?\1$/m, + pattern: /^(-{4,}|\.{4,})(?:\r?\n|\r)(?:[\s\S]*(?:\r?\n|\r))??\1$/m, inside: { 'punctuation': /^(?:-+|\.+)|(?:-+|\.+)$/ // See rest below @@ -62,7 +62,7 @@ }, // Sidebar blocks, quote blocks, example blocks and open blocks 'other-block': { - pattern: /^(--|\*{4,}|_{4,}|={4,})(?:\r?\n|\r)(?:.*(?:\r?\n|\r))*?\1$/m, + pattern: /^(--|\*{4,}|_{4,}|={4,})(?:\r?\n|\r)(?:[\s\S]*(?:\r?\n|\r))??\1$/m, inside: { 'punctuation': /^(?:-+|\*+|_+|=+)|(?:-+|\*+|_+|=+)$/ // See rest below diff --git a/app/bower_components/prism/components/prism-asciidoc.min.js b/app/bower_components/prism/components/prism-asciidoc.min.js index 6d6ae17..011d167 100644 --- a/app/bower_components/prism/components/prism-asciidoc.min.js +++ b/app/bower_components/prism/components/prism-asciidoc.min.js @@ -1 +1 @@ -!function(a){var i={pattern:/(^[ \t]*)\[(?!\[)(?:(["'$`])(?:(?!\2)[^\\]|\\.)*\2|\[(?:[^\]\\]|\\.)*\]|[^\]\\]|\\.)*\]/m,lookbehind:!0,inside:{quoted:{pattern:/([$`])(?:(?!\1)[^\\]|\\.)*\1/,inside:{punctuation:/^[$`]|[$`]$/}},interpreted:{pattern:/'(?:[^'\\]|\\.)*'/,inside:{punctuation:/^'|'$/}},string:/"(?:[^"\\]|\\.)*"/,variable:/\w+(?==)/,punctuation:/^\[|\]$|,/,operator:/=/,"attr-value":/(?!^\s+$).+/}};a.languages.asciidoc={"comment-block":{pattern:/^(\/{4,})(?:\r?\n|\r)(?:.*(?:\r?\n|\r))*?\1/m,alias:"comment"},table:{pattern:/^\|={3,}(?:(?:\r?\n|\r).*)*?(?:\r?\n|\r)\|={3,}$/m,inside:{specifiers:{pattern:/(?!\|)(?:(?:(?:\d+(?:\.\d+)?|\.\d+)[+*])?(?:[<^>](?:\.[<^>])?|\.[<^>])?[a-z]*)(?=\|)/,alias:"attr-value"},punctuation:{pattern:/(^|[^\\])[|!]=*/,lookbehind:!0}}},"passthrough-block":{pattern:/^(\+{4,})(?:\r?\n|\r)(?:.*(?:\r?\n|\r))*?\1$/m,inside:{punctuation:/^\++|\++$/}},"literal-block":{pattern:/^(-{4,}|\.{4,})(?:\r?\n|\r)(?:.*(?:\r?\n|\r))*?\1$/m,inside:{punctuation:/^(?:-+|\.+)|(?:-+|\.+)$/}},"other-block":{pattern:/^(--|\*{4,}|_{4,}|={4,})(?:\r?\n|\r)(?:.*(?:\r?\n|\r))*?\1$/m,inside:{punctuation:/^(?:-+|\*+|_+|=+)|(?:-+|\*+|_+|=+)$/}},"list-punctuation":{pattern:/(^[ \t]*)(?:-|\*{1,5}|\.{1,5}|(?:[a-z]|\d+)\.|[xvi]+\))(?= )/im,lookbehind:!0,alias:"punctuation"},"list-label":{pattern:/(^[ \t]*)[a-z\d].+(?::{2,4}|;;)(?=\s)/im,lookbehind:!0,alias:"symbol"},"indented-block":{pattern:/((\r?\n|\r)\2)([ \t]+)\S.*(?:(?:\r?\n|\r)\3.+)*(?=\2{2}|$)/,lookbehind:!0},comment:/^\/\/.*/m,title:{pattern:/^.+(?:\r?\n|\r)(?:={3,}|-{3,}|~{3,}|\^{3,}|\+{3,})$|^={1,5} +.+|^\.(?![\s.]).*/m,alias:"important",inside:{punctuation:/^(?:\.|=+)|(?:=+|-+|~+|\^+|\++)$/}},"attribute-entry":{pattern:/^:[^:\r\n]+:(?: .*?(?: \+(?:\r?\n|\r).*?)*)?$/m,alias:"tag"},attributes:i,hr:{pattern:/^'{3,}$/m,alias:"punctuation"},"page-break":{pattern:/^<{3,}$/m,alias:"punctuation"},admonition:{pattern:/^(?:TIP|NOTE|IMPORTANT|WARNING|CAUTION):/m,alias:"keyword"},callout:[{pattern:/(^[ \t]*)/m,lookbehind:!0,alias:"symbol"},{pattern:/<\d+>/,alias:"symbol"}],macro:{pattern:/\b[a-z\d][a-z\d-]*::?(?:(?:\S+)??\[(?:[^\]\\"]|(["'])(?:(?!\1)[^\\]|\\.)*\1|\\.)*\])/,inside:{"function":/^[a-z\d-]+(?=:)/,punctuation:/^::?/,attributes:{pattern:/(?:\[(?:[^\]\\"]|(["'])(?:(?!\1)[^\\]|\\.)*\1|\\.)*\])/,inside:i.inside}}},inline:{pattern:/(^|[^\\])(?:(?:\B\[(?:[^\]\\"]|(["'])(?:(?!\2)[^\\]|\\.)*\2|\\.)*\])?(?:\b_(?!\s)(?: _|[^_\\\r\n]|\\.)+(?:(?:\r?\n|\r)(?: _|[^_\\\r\n]|\\.)+)*_\b|\B``(?!\s).+?(?:(?:\r?\n|\r).+?)*''\B|\B`(?!\s)(?: ['`]|.)+?(?:(?:\r?\n|\r)(?: ['`]|.)+?)*['`]\B|\B(['*+#])(?!\s)(?: \3|(?!\3)[^\\\r\n]|\\.)+(?:(?:\r?\n|\r)(?: \3|(?!\3)[^\\\r\n]|\\.)+)*\3\B)|(?:\[(?:[^\]\\"]|(["'])(?:(?!\4)[^\\]|\\.)*\4|\\.)*\])?(?:(__|\*\*|\+\+\+?|##|\$\$|[~^]).+?(?:(?:\r?\n|\r).+?)*\5|\{[^}\r\n]+\}|\[\[\[?.+?(?:(?:\r?\n|\r).+?)*\]?\]\]|<<.+?(?:(?:\r?\n|\r).+?)*>>|\(\(\(?.+?(?:(?:\r?\n|\r).+?)*\)?\)\)))/m,lookbehind:!0,inside:{attributes:i,url:{pattern:/^(?:\[\[\[?.+?\]?\]\]|<<.+?>>)$/,inside:{punctuation:/^(?:\[\[\[?|<<)|(?:\]\]\]?|>>)$/}},"attribute-ref":{pattern:/^\{.+\}$/,inside:{variable:{pattern:/(^\{)[a-z\d,+_-]+/,lookbehind:!0},operator:/^[=?!#%@$]|!(?=[:}])/,punctuation:/^\{|\}$|::?/}},italic:{pattern:/^(['_])[\s\S]+\1$/,inside:{punctuation:/^(?:''?|__?)|(?:''?|__?)$/}},bold:{pattern:/^\*[\s\S]+\*$/,inside:{punctuation:/^\*\*?|\*\*?$/}},punctuation:/^(?:``?|\+{1,3}|##?|\$\$|[~^]|\(\(\(?)|(?:''?|\+{1,3}|##?|\$\$|[~^`]|\)?\)\))$/}},replacement:{pattern:/\((?:C|TM|R)\)/,alias:"builtin"},entity:/&#?[\da-z]{1,8};/i,"line-continuation":{pattern:/(^| )\+$/m,lookbehind:!0,alias:"punctuation"}},i.inside.interpreted.inside.rest={macro:a.languages.asciidoc.macro,inline:a.languages.asciidoc.inline,replacement:a.languages.asciidoc.replacement,entity:a.languages.asciidoc.entity},a.languages.asciidoc["passthrough-block"].inside.rest={macro:a.languages.asciidoc.macro},a.languages.asciidoc["literal-block"].inside.rest={callout:a.languages.asciidoc.callout},a.languages.asciidoc.table.inside.rest={"comment-block":a.languages.asciidoc["comment-block"],"passthrough-block":a.languages.asciidoc["passthrough-block"],"literal-block":a.languages.asciidoc["literal-block"],"other-block":a.languages.asciidoc["other-block"],"list-punctuation":a.languages.asciidoc["list-punctuation"],"indented-block":a.languages.asciidoc["indented-block"],comment:a.languages.asciidoc.comment,title:a.languages.asciidoc.title,"attribute-entry":a.languages.asciidoc["attribute-entry"],attributes:a.languages.asciidoc.attributes,hr:a.languages.asciidoc.hr,"page-break":a.languages.asciidoc["page-break"],admonition:a.languages.asciidoc.admonition,"list-label":a.languages.asciidoc["list-label"],callout:a.languages.asciidoc.callout,macro:a.languages.asciidoc.macro,inline:a.languages.asciidoc.inline,replacement:a.languages.asciidoc.replacement,entity:a.languages.asciidoc.entity,"line-continuation":a.languages.asciidoc["line-continuation"]},a.languages.asciidoc["other-block"].inside.rest={table:a.languages.asciidoc.table,"list-punctuation":a.languages.asciidoc["list-punctuation"],"indented-block":a.languages.asciidoc["indented-block"],comment:a.languages.asciidoc.comment,"attribute-entry":a.languages.asciidoc["attribute-entry"],attributes:a.languages.asciidoc.attributes,hr:a.languages.asciidoc.hr,"page-break":a.languages.asciidoc["page-break"],admonition:a.languages.asciidoc.admonition,"list-label":a.languages.asciidoc["list-label"],macro:a.languages.asciidoc.macro,inline:a.languages.asciidoc.inline,replacement:a.languages.asciidoc.replacement,entity:a.languages.asciidoc.entity,"line-continuation":a.languages.asciidoc["line-continuation"]},a.languages.asciidoc.title.inside.rest={macro:a.languages.asciidoc.macro,inline:a.languages.asciidoc.inline,replacement:a.languages.asciidoc.replacement,entity:a.languages.asciidoc.entity},a.hooks.add("wrap",function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))})}(Prism); \ No newline at end of file +!function(a){var i={pattern:/(^[ \t]*)\[(?!\[)(?:(["'$`])(?:(?!\2)[^\\]|\\.)*\2|\[(?:[^\]\\]|\\.)*\]|[^\]\\]|\\.)*\]/m,lookbehind:!0,inside:{quoted:{pattern:/([$`])(?:(?!\1)[^\\]|\\.)*\1/,inside:{punctuation:/^[$`]|[$`]$/}},interpreted:{pattern:/'(?:[^'\\]|\\.)*'/,inside:{punctuation:/^'|'$/}},string:/"(?:[^"\\]|\\.)*"/,variable:/\w+(?==)/,punctuation:/^\[|\]$|,/,operator:/=/,"attr-value":/(?!^\s+$).+/}};a.languages.asciidoc={"comment-block":{pattern:/^(\/{4,})(?:\r?\n|\r)(?:[\s\S]*(?:\r?\n|\r))??\1/m,alias:"comment"},table:{pattern:/^\|={3,}(?:(?:\r?\n|\r).*)*?(?:\r?\n|\r)\|={3,}$/m,inside:{specifiers:{pattern:/(?!\|)(?:(?:(?:\d+(?:\.\d+)?|\.\d+)[+*])?(?:[<^>](?:\.[<^>])?|\.[<^>])?[a-z]*)(?=\|)/,alias:"attr-value"},punctuation:{pattern:/(^|[^\\])[|!]=*/,lookbehind:!0}}},"passthrough-block":{pattern:/^(\+{4,})(?:\r?\n|\r)(?:[\s\S]*(?:\r?\n|\r))??\1$/m,inside:{punctuation:/^\++|\++$/}},"literal-block":{pattern:/^(-{4,}|\.{4,})(?:\r?\n|\r)(?:[\s\S]*(?:\r?\n|\r))??\1$/m,inside:{punctuation:/^(?:-+|\.+)|(?:-+|\.+)$/}},"other-block":{pattern:/^(--|\*{4,}|_{4,}|={4,})(?:\r?\n|\r)(?:[\s\S]*(?:\r?\n|\r))??\1$/m,inside:{punctuation:/^(?:-+|\*+|_+|=+)|(?:-+|\*+|_+|=+)$/}},"list-punctuation":{pattern:/(^[ \t]*)(?:-|\*{1,5}|\.{1,5}|(?:[a-z]|\d+)\.|[xvi]+\))(?= )/im,lookbehind:!0,alias:"punctuation"},"list-label":{pattern:/(^[ \t]*)[a-z\d].+(?::{2,4}|;;)(?=\s)/im,lookbehind:!0,alias:"symbol"},"indented-block":{pattern:/((\r?\n|\r)\2)([ \t]+)\S.*(?:(?:\r?\n|\r)\3.+)*(?=\2{2}|$)/,lookbehind:!0},comment:/^\/\/.*/m,title:{pattern:/^.+(?:\r?\n|\r)(?:={3,}|-{3,}|~{3,}|\^{3,}|\+{3,})$|^={1,5} +.+|^\.(?![\s.]).*/m,alias:"important",inside:{punctuation:/^(?:\.|=+)|(?:=+|-+|~+|\^+|\++)$/}},"attribute-entry":{pattern:/^:[^:\r\n]+:(?: .*?(?: \+(?:\r?\n|\r).*?)*)?$/m,alias:"tag"},attributes:i,hr:{pattern:/^'{3,}$/m,alias:"punctuation"},"page-break":{pattern:/^<{3,}$/m,alias:"punctuation"},admonition:{pattern:/^(?:TIP|NOTE|IMPORTANT|WARNING|CAUTION):/m,alias:"keyword"},callout:[{pattern:/(^[ \t]*)/m,lookbehind:!0,alias:"symbol"},{pattern:/<\d+>/,alias:"symbol"}],macro:{pattern:/\b[a-z\d][a-z\d-]*::?(?:(?:\S+)??\[(?:[^\]\\"]|(["'])(?:(?!\1)[^\\]|\\.)*\1|\\.)*\])/,inside:{"function":/^[a-z\d-]+(?=:)/,punctuation:/^::?/,attributes:{pattern:/(?:\[(?:[^\]\\"]|(["'])(?:(?!\1)[^\\]|\\.)*\1|\\.)*\])/,inside:i.inside}}},inline:{pattern:/(^|[^\\])(?:(?:\B\[(?:[^\]\\"]|(["'])(?:(?!\2)[^\\]|\\.)*\2|\\.)*\])?(?:\b_(?!\s)(?: _|[^_\\\r\n]|\\.)+(?:(?:\r?\n|\r)(?: _|[^_\\\r\n]|\\.)+)*_\b|\B``(?!\s).+?(?:(?:\r?\n|\r).+?)*''\B|\B`(?!\s)(?: ['`]|.)+?(?:(?:\r?\n|\r)(?: ['`]|.)+?)*['`]\B|\B(['*+#])(?!\s)(?: \3|(?!\3)[^\\\r\n]|\\.)+(?:(?:\r?\n|\r)(?: \3|(?!\3)[^\\\r\n]|\\.)+)*\3\B)|(?:\[(?:[^\]\\"]|(["'])(?:(?!\4)[^\\]|\\.)*\4|\\.)*\])?(?:(__|\*\*|\+\+\+?|##|\$\$|[~^]).+?(?:(?:\r?\n|\r).+?)*\5|\{[^}\r\n]+\}|\[\[\[?.+?(?:(?:\r?\n|\r).+?)*\]?\]\]|<<.+?(?:(?:\r?\n|\r).+?)*>>|\(\(\(?.+?(?:(?:\r?\n|\r).+?)*\)?\)\)))/m,lookbehind:!0,inside:{attributes:i,url:{pattern:/^(?:\[\[\[?.+?\]?\]\]|<<.+?>>)$/,inside:{punctuation:/^(?:\[\[\[?|<<)|(?:\]\]\]?|>>)$/}},"attribute-ref":{pattern:/^\{.+\}$/,inside:{variable:{pattern:/(^\{)[a-z\d,+_-]+/,lookbehind:!0},operator:/^[=?!#%@$]|!(?=[:}])/,punctuation:/^\{|\}$|::?/}},italic:{pattern:/^(['_])[\s\S]+\1$/,inside:{punctuation:/^(?:''?|__?)|(?:''?|__?)$/}},bold:{pattern:/^\*[\s\S]+\*$/,inside:{punctuation:/^\*\*?|\*\*?$/}},punctuation:/^(?:``?|\+{1,3}|##?|\$\$|[~^]|\(\(\(?)|(?:''?|\+{1,3}|##?|\$\$|[~^`]|\)?\)\))$/}},replacement:{pattern:/\((?:C|TM|R)\)/,alias:"builtin"},entity:/&#?[\da-z]{1,8};/i,"line-continuation":{pattern:/(^| )\+$/m,lookbehind:!0,alias:"punctuation"}},i.inside.interpreted.inside.rest={macro:a.languages.asciidoc.macro,inline:a.languages.asciidoc.inline,replacement:a.languages.asciidoc.replacement,entity:a.languages.asciidoc.entity},a.languages.asciidoc["passthrough-block"].inside.rest={macro:a.languages.asciidoc.macro},a.languages.asciidoc["literal-block"].inside.rest={callout:a.languages.asciidoc.callout},a.languages.asciidoc.table.inside.rest={"comment-block":a.languages.asciidoc["comment-block"],"passthrough-block":a.languages.asciidoc["passthrough-block"],"literal-block":a.languages.asciidoc["literal-block"],"other-block":a.languages.asciidoc["other-block"],"list-punctuation":a.languages.asciidoc["list-punctuation"],"indented-block":a.languages.asciidoc["indented-block"],comment:a.languages.asciidoc.comment,title:a.languages.asciidoc.title,"attribute-entry":a.languages.asciidoc["attribute-entry"],attributes:a.languages.asciidoc.attributes,hr:a.languages.asciidoc.hr,"page-break":a.languages.asciidoc["page-break"],admonition:a.languages.asciidoc.admonition,"list-label":a.languages.asciidoc["list-label"],callout:a.languages.asciidoc.callout,macro:a.languages.asciidoc.macro,inline:a.languages.asciidoc.inline,replacement:a.languages.asciidoc.replacement,entity:a.languages.asciidoc.entity,"line-continuation":a.languages.asciidoc["line-continuation"]},a.languages.asciidoc["other-block"].inside.rest={table:a.languages.asciidoc.table,"list-punctuation":a.languages.asciidoc["list-punctuation"],"indented-block":a.languages.asciidoc["indented-block"],comment:a.languages.asciidoc.comment,"attribute-entry":a.languages.asciidoc["attribute-entry"],attributes:a.languages.asciidoc.attributes,hr:a.languages.asciidoc.hr,"page-break":a.languages.asciidoc["page-break"],admonition:a.languages.asciidoc.admonition,"list-label":a.languages.asciidoc["list-label"],macro:a.languages.asciidoc.macro,inline:a.languages.asciidoc.inline,replacement:a.languages.asciidoc.replacement,entity:a.languages.asciidoc.entity,"line-continuation":a.languages.asciidoc["line-continuation"]},a.languages.asciidoc.title.inside.rest={macro:a.languages.asciidoc.macro,inline:a.languages.asciidoc.inline,replacement:a.languages.asciidoc.replacement,entity:a.languages.asciidoc.entity},a.hooks.add("wrap",function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))})}(Prism); \ No newline at end of file diff --git a/app/bower_components/prism/components/prism-bash.js b/app/bower_components/prism/components/prism-bash.js index 4c2cf16..d8800dc 100644 --- a/app/bower_components/prism/components/prism-bash.js +++ b/app/bower_components/prism/components/prism-bash.js @@ -56,7 +56,7 @@ 'variable': insideString.variable, // Originally based on http://ss64.com/bash/ 'function': { - pattern: /(^|\s|;|\||&)(?:alias|apropos|apt-get|aptitude|aspell|awk|basename|bash|bc|bg|builtin|bzip2|cal|cat|cd|cfdisk|chgrp|chmod|chown|chroot|chkconfig|cksum|clear|cmp|comm|command|cp|cron|crontab|csplit|cut|date|dc|dd|ddrescue|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|enable|env|ethtool|eval|exec|expand|expect|export|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|getopts|git|grep|groupadd|groupdel|groupmod|groups|gzip|hash|head|help|hg|history|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|jobs|join|kill|killall|less|link|ln|locate|logname|logout|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|make|man|mkdir|mkfifo|mkisofs|mknod|more|most|mount|mtools|mtr|mv|mmv|nano|netstat|nice|nl|nohup|notify-send|nslookup|open|op|passwd|paste|pathchk|ping|pkill|popd|pr|printcap|printenv|printf|ps|pushd|pv|pwd|quota|quotacheck|quotactl|ram|rar|rcp|read|readarray|readonly|reboot|rename|renice|remsync|rev|rm|rmdir|rsync|screen|scp|sdiff|sed|seq|service|sftp|shift|shopt|shutdown|sleep|slocate|sort|source|split|ssh|stat|strace|su|sudo|sum|suspend|sync|tail|tar|tee|test|time|timeout|times|touch|top|traceroute|trap|tr|tsort|tty|type|ulimit|umask|umount|unalias|uname|unexpand|uniq|units|unrar|unshar|uptime|useradd|userdel|usermod|users|uuencode|uudecode|v|vdir|vi|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yes|zip)(?=$|\s|;|\||&)/, + pattern: /(^|\s|;|\||&)(?:alias|apropos|apt-get|aptitude|aspell|awk|basename|bash|bc|bg|builtin|bzip2|cal|cat|cd|cfdisk|chgrp|chmod|chown|chroot|chkconfig|cksum|clear|cmp|comm|command|cp|cron|crontab|csplit|cut|date|dc|dd|ddrescue|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|enable|env|ethtool|eval|exec|expand|expect|export|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|getopts|git|grep|groupadd|groupdel|groupmod|groups|gzip|hash|head|help|hg|history|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|jobs|join|kill|killall|less|link|ln|locate|logname|logout|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|make|man|mkdir|mkfifo|mkisofs|mknod|more|most|mount|mtools|mtr|mv|mmv|nano|netstat|nice|nl|nohup|notify-send|npm|nslookup|open|op|passwd|paste|pathchk|ping|pkill|popd|pr|printcap|printenv|printf|ps|pushd|pv|pwd|quota|quotacheck|quotactl|ram|rar|rcp|read|readarray|readonly|reboot|rename|renice|remsync|rev|rm|rmdir|rsync|screen|scp|sdiff|sed|seq|service|sftp|shift|shopt|shutdown|sleep|slocate|sort|source|split|ssh|stat|strace|su|sudo|sum|suspend|sync|tail|tar|tee|test|time|timeout|times|touch|top|traceroute|trap|tr|tsort|tty|type|ulimit|umask|umount|unalias|uname|unexpand|uniq|units|unrar|unshar|uptime|useradd|userdel|usermod|users|uuencode|uudecode|v|vdir|vi|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yes|zip)(?=$|\s|;|\||&)/, lookbehind: true }, 'keyword': { @@ -77,4 +77,4 @@ inside.boolean = Prism.languages.bash.boolean; inside.operator = Prism.languages.bash.operator; inside.punctuation = Prism.languages.bash.punctuation; -})(Prism); \ No newline at end of file +})(Prism); diff --git a/app/bower_components/prism/components/prism-bash.min.js b/app/bower_components/prism/components/prism-bash.min.js index acda9b8..ff90e9d 100644 --- a/app/bower_components/prism/components/prism-bash.min.js +++ b/app/bower_components/prism/components/prism-bash.min.js @@ -1 +1 @@ -!function(e){var t={variable:[{pattern:/\$?\(\([\w\W]+?\)\)/,inside:{variable:[{pattern:/(^\$\(\([\w\W]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b-?(?:0x[\dA-Fa-f]+|\d*\.?\d+(?:[Ee]-?\d+)?)\b/,operator:/--?|-=|\+\+?|\+=|!=?|~|\*\*?|\*=|\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\([^)]+\)|`[^`]+`/,inside:{variable:/^\$\(|^`|\)$|`$/}},/\$(?:[a-z0-9_#\?\*!@]+|\{[^}]+\})/i]};e.languages.bash={shebang:{pattern:/^#!\s*\/bin\/bash|^#!\s*\/bin\/sh/,alias:"important"},comment:{pattern:/(^|[^"{\\])#.*/,lookbehind:!0},string:[{pattern:/((?:^|[^<])<<\s*)(?:"|')?(\w+?)(?:"|')?\s*\r?\n(?:[\s\S])*?\r?\n\2/g,lookbehind:!0,greedy:!0,inside:t},{pattern:/(["'])(?:\\\\|\\?[^\\])*?\1/g,greedy:!0,inside:t}],variable:t.variable,"function":{pattern:/(^|\s|;|\||&)(?:alias|apropos|apt-get|aptitude|aspell|awk|basename|bash|bc|bg|builtin|bzip2|cal|cat|cd|cfdisk|chgrp|chmod|chown|chroot|chkconfig|cksum|clear|cmp|comm|command|cp|cron|crontab|csplit|cut|date|dc|dd|ddrescue|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|enable|env|ethtool|eval|exec|expand|expect|export|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|getopts|git|grep|groupadd|groupdel|groupmod|groups|gzip|hash|head|help|hg|history|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|jobs|join|kill|killall|less|link|ln|locate|logname|logout|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|make|man|mkdir|mkfifo|mkisofs|mknod|more|most|mount|mtools|mtr|mv|mmv|nano|netstat|nice|nl|nohup|notify-send|nslookup|open|op|passwd|paste|pathchk|ping|pkill|popd|pr|printcap|printenv|printf|ps|pushd|pv|pwd|quota|quotacheck|quotactl|ram|rar|rcp|read|readarray|readonly|reboot|rename|renice|remsync|rev|rm|rmdir|rsync|screen|scp|sdiff|sed|seq|service|sftp|shift|shopt|shutdown|sleep|slocate|sort|source|split|ssh|stat|strace|su|sudo|sum|suspend|sync|tail|tar|tee|test|time|timeout|times|touch|top|traceroute|trap|tr|tsort|tty|type|ulimit|umask|umount|unalias|uname|unexpand|uniq|units|unrar|unshar|uptime|useradd|userdel|usermod|users|uuencode|uudecode|v|vdir|vi|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yes|zip)(?=$|\s|;|\||&)/,lookbehind:!0},keyword:{pattern:/(^|\s|;|\||&)(?:let|:|\.|if|then|else|elif|fi|for|break|continue|while|in|case|function|select|do|done|until|echo|exit|return|set|declare)(?=$|\s|;|\||&)/,lookbehind:!0},"boolean":{pattern:/(^|\s|;|\||&)(?:true|false)(?=$|\s|;|\||&)/,lookbehind:!0},operator:/&&?|\|\|?|==?|!=?|<<>|<=?|>=?|=~/,punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];]/};var a=t.variable[1].inside;a["function"]=e.languages.bash["function"],a.keyword=e.languages.bash.keyword,a.boolean=e.languages.bash.boolean,a.operator=e.languages.bash.operator,a.punctuation=e.languages.bash.punctuation}(Prism); \ No newline at end of file +!function(e){var t={variable:[{pattern:/\$?\(\([\w\W]+?\)\)/,inside:{variable:[{pattern:/(^\$\(\([\w\W]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b-?(?:0x[\dA-Fa-f]+|\d*\.?\d+(?:[Ee]-?\d+)?)\b/,operator:/--?|-=|\+\+?|\+=|!=?|~|\*\*?|\*=|\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\([^)]+\)|`[^`]+`/,inside:{variable:/^\$\(|^`|\)$|`$/}},/\$(?:[a-z0-9_#\?\*!@]+|\{[^}]+\})/i]};e.languages.bash={shebang:{pattern:/^#!\s*\/bin\/bash|^#!\s*\/bin\/sh/,alias:"important"},comment:{pattern:/(^|[^"{\\])#.*/,lookbehind:!0},string:[{pattern:/((?:^|[^<])<<\s*)(?:"|')?(\w+?)(?:"|')?\s*\r?\n(?:[\s\S])*?\r?\n\2/g,lookbehind:!0,greedy:!0,inside:t},{pattern:/(["'])(?:\\\\|\\?[^\\])*?\1/g,greedy:!0,inside:t}],variable:t.variable,"function":{pattern:/(^|\s|;|\||&)(?:alias|apropos|apt-get|aptitude|aspell|awk|basename|bash|bc|bg|builtin|bzip2|cal|cat|cd|cfdisk|chgrp|chmod|chown|chroot|chkconfig|cksum|clear|cmp|comm|command|cp|cron|crontab|csplit|cut|date|dc|dd|ddrescue|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|enable|env|ethtool|eval|exec|expand|expect|export|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|getopts|git|grep|groupadd|groupdel|groupmod|groups|gzip|hash|head|help|hg|history|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|jobs|join|kill|killall|less|link|ln|locate|logname|logout|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|make|man|mkdir|mkfifo|mkisofs|mknod|more|most|mount|mtools|mtr|mv|mmv|nano|netstat|nice|nl|nohup|notify-send|npm|nslookup|open|op|passwd|paste|pathchk|ping|pkill|popd|pr|printcap|printenv|printf|ps|pushd|pv|pwd|quota|quotacheck|quotactl|ram|rar|rcp|read|readarray|readonly|reboot|rename|renice|remsync|rev|rm|rmdir|rsync|screen|scp|sdiff|sed|seq|service|sftp|shift|shopt|shutdown|sleep|slocate|sort|source|split|ssh|stat|strace|su|sudo|sum|suspend|sync|tail|tar|tee|test|time|timeout|times|touch|top|traceroute|trap|tr|tsort|tty|type|ulimit|umask|umount|unalias|uname|unexpand|uniq|units|unrar|unshar|uptime|useradd|userdel|usermod|users|uuencode|uudecode|v|vdir|vi|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yes|zip)(?=$|\s|;|\||&)/,lookbehind:!0},keyword:{pattern:/(^|\s|;|\||&)(?:let|:|\.|if|then|else|elif|fi|for|break|continue|while|in|case|function|select|do|done|until|echo|exit|return|set|declare)(?=$|\s|;|\||&)/,lookbehind:!0},"boolean":{pattern:/(^|\s|;|\||&)(?:true|false)(?=$|\s|;|\||&)/,lookbehind:!0},operator:/&&?|\|\|?|==?|!=?|<<>|<=?|>=?|=~/,punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];]/};var a=t.variable[1].inside;a["function"]=e.languages.bash["function"],a.keyword=e.languages.bash.keyword,a.boolean=e.languages.bash.boolean,a.operator=e.languages.bash.operator,a.punctuation=e.languages.bash.punctuation}(Prism); \ No newline at end of file diff --git a/app/bower_components/prism/components/prism-core.js b/app/bower_components/prism/components/prism-core.js index b7087ca..a5335da 100644 --- a/app/bower_components/prism/components/prism-core.js +++ b/app/bower_components/prism/components/prism-core.js @@ -203,6 +203,9 @@ var _ = _self.Prism = { _.hooks.run('before-sanity-check', env); if (!env.code || !env.grammar) { + if (env.code) { + env.element.textContent = env.code; + } _.hooks.run('complete', env); return; } @@ -280,9 +283,16 @@ var _ = _self.Prism = { lookbehindLength = 0, alias = pattern.alias; + if (greedy && !pattern.pattern.global) { + // Without the global flag, lastIndex won't work + var flags = pattern.pattern.toString().match(/[imuy]*$/)[0]; + pattern.pattern = RegExp(pattern.pattern.source, flags + "g"); + } + pattern = pattern.pattern || pattern; - for (var i=0; i= p) { + ++i; + pos = p; + } } - var from = match.index + (lookbehind ? match[1].length : 0); - // To be a valid candidate, the new match has to start inside of str - if (from >= str.length) { + /* + * If strarr[i] is a Token, then the match starts inside another Token, which is invalid + * If strarr[k - 1] is greedy we are in conflict with another greedy pattern + */ + if (strarr[i] instanceof Token || strarr[k - 1].greedy) { continue; } - var to = match.index + match[0].length, - len = str.length + nextToken.length; // Number of tokens to delete and replace with the new match - delNum = 3; - - if (to <= len) { - if (strarr[i + 1].greedy) { - continue; - } - delNum = 2; - combStr = combStr.slice(0, len); - } - str = combStr; + delNum = k - i; + str = text.slice(pos, p); + match.index -= pos; } if (!match) { @@ -404,7 +412,7 @@ var Token = _.Token = function(type, content, alias, matchedStr, greedy) { this.content = content; this.alias = alias; // Copy of the full string this token was created from - this.matchedStr = matchedStr || null; + this.length = (matchedStr || "").length|0; this.greedy = !!greedy; }; @@ -440,13 +448,11 @@ Token.stringify = function(o, language, parent) { _.hooks.run('wrap', env); - var attributes = ''; + var attributes = Object.keys(env.attributes).map(function(name) { + return name + '="' + (env.attributes[name] || '').replace(/"/g, '"') + '"'; + }).join(' '); - for (var name in env.attributes) { - attributes += (attributes ? ' ' : '') + name + '="' + (env.attributes[name] || '') + '"'; - } - - return '<' + env.tag + ' class="' + env.classes.join(' ') + '" ' + attributes + '>' + env.content + ''; + return '<' + env.tag + ' class="' + env.classes.join(' ') + '"' + (attributes ? ' ' + attributes : '') + '>' + env.content + ''; }; @@ -479,7 +485,11 @@ if (script) { if (document.addEventListener && !script.hasAttribute('data-manual')) { if(document.readyState !== "loading") { - requestAnimationFrame(_.highlightAll, 0); + if (window.requestAnimationFrame) { + window.requestAnimationFrame(_.highlightAll); + } else { + window.setTimeout(_.highlightAll, 16); + } } else { document.addEventListener('DOMContentLoaded', _.highlightAll); diff --git a/app/bower_components/prism/components/prism-core.min.js b/app/bower_components/prism/components/prism-core.min.js index d804000..70fbbfc 100644 --- a/app/bower_components/prism/components/prism-core.min.js +++ b/app/bower_components/prism/components/prism-core.min.js @@ -1 +1 @@ -var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(){var e=/\blang(?:uage)?-(\w+)\b/i,t=0,n=_self.Prism={util:{encode:function(e){return e instanceof a?new a(e.type,n.util.encode(e.content),e.alias):"Array"===n.util.type(e)?e.map(n.util.encode):e.replace(/&/g,"&").replace(/e.length)break e;if(!(m instanceof a)){u.lastIndex=0;var y=u.exec(m),v=1;if(!y&&h&&p!=r.length-1){var b=r[p+1].matchedStr||r[p+1],k=m+b;if(p=m.length)continue;var _=y.index+y[0].length,P=m.length+b.length;if(v=3,P>=_){if(r[p+1].greedy)continue;v=2,k=k.slice(0,P)}m=k}if(y){g&&(f=y[1].length);var w=y.index+f,y=y[0].slice(f),_=w+y.length,S=m.slice(0,w),A=m.slice(_),O=[p,v];S&&O.push(S);var j=new a(i,c?n.tokenize(y,c):y,d,y,h);O.push(j),A&&O.push(A),Array.prototype.splice.apply(r,O)}}}}}return r},hooks:{all:{},add:function(e,t){var a=n.hooks.all;a[e]=a[e]||[],a[e].push(t)},run:function(e,t){var a=n.hooks.all[e];if(a&&a.length)for(var r,l=0;r=a[l++];)r(t)}}},a=n.Token=function(e,t,n,a,r){this.type=e,this.content=t,this.alias=n,this.matchedStr=a||null,this.greedy=!!r};if(a.stringify=function(e,t,r){if("string"==typeof e)return e;if("Array"===n.util.type(e))return e.map(function(n){return a.stringify(n,t,e)}).join("");var l={type:e.type,content:a.stringify(e.content,t,r),tag:"span",classes:["token",e.type],attributes:{},language:t,parent:r};if("comment"==l.type&&(l.attributes.spellcheck="true"),e.alias){var i="Array"===n.util.type(e.alias)?e.alias:[e.alias];Array.prototype.push.apply(l.classes,i)}n.hooks.run("wrap",l);var o="";for(var s in l.attributes)o+=(o?" ":"")+s+'="'+(l.attributes[s]||"")+'"';return"<"+l.tag+' class="'+l.classes.join(" ")+'" '+o+">"+l.content+""},!_self.document)return _self.addEventListener?(_self.addEventListener("message",function(e){var t=JSON.parse(e.data),a=t.language,r=t.code,l=t.immediateClose;_self.postMessage(n.highlight(r,n.languages[a],a)),l&&_self.close()},!1),_self.Prism):_self.Prism;var r=document.currentScript||[].slice.call(document.getElementsByTagName("script")).pop();return r&&(n.filename=r.src,document.addEventListener&&!r.hasAttribute("data-manual")&&("loading"!==document.readyState?requestAnimationFrame(n.highlightAll,0):document.addEventListener("DOMContentLoaded",n.highlightAll))),_self.Prism}();"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism); \ No newline at end of file +var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(){var e=/\blang(?:uage)?-(\w+)\b/i,t=0,n=_self.Prism={util:{encode:function(e){return e instanceof a?new a(e.type,n.util.encode(e.content),e.alias):"Array"===n.util.type(e)?e.map(n.util.encode):e.replace(/&/g,"&").replace(/e.length)break e;if(!(v instanceof a)){u.lastIndex=0;var b=u.exec(v),k=1;if(!b&&h&&m!=r.length-1){if(u.lastIndex=y,b=u.exec(e),!b)break;for(var w=b.index+(c?b[1].length:0),_=b.index+b[0].length,A=m,P=y,j=r.length;j>A&&_>P;++A)P+=r[A].length,w>=P&&(++m,y=P);if(r[m]instanceof a||r[A-1].greedy)continue;k=A-m,v=e.slice(y,P),b.index-=y}if(b){c&&(f=b[1].length);var w=b.index+f,b=b[0].slice(f),_=w+b.length,x=v.slice(0,w),O=v.slice(_),S=[m,k];x&&S.push(x);var N=new a(l,g?n.tokenize(b,g):b,d,b,h);S.push(N),O&&S.push(O),Array.prototype.splice.apply(r,S)}}}}}return r},hooks:{all:{},add:function(e,t){var a=n.hooks.all;a[e]=a[e]||[],a[e].push(t)},run:function(e,t){var a=n.hooks.all[e];if(a&&a.length)for(var r,i=0;r=a[i++];)r(t)}}},a=n.Token=function(e,t,n,a,r){this.type=e,this.content=t,this.alias=n,this.length=0|(a||"").length,this.greedy=!!r};if(a.stringify=function(e,t,r){if("string"==typeof e)return e;if("Array"===n.util.type(e))return e.map(function(n){return a.stringify(n,t,e)}).join("");var i={type:e.type,content:a.stringify(e.content,t,r),tag:"span",classes:["token",e.type],attributes:{},language:t,parent:r};if("comment"==i.type&&(i.attributes.spellcheck="true"),e.alias){var l="Array"===n.util.type(e.alias)?e.alias:[e.alias];Array.prototype.push.apply(i.classes,l)}n.hooks.run("wrap",i);var o=Object.keys(i.attributes).map(function(e){return e+'="'+(i.attributes[e]||"").replace(/"/g,""")+'"'}).join(" ");return"<"+i.tag+' class="'+i.classes.join(" ")+'"'+(o?" "+o:"")+">"+i.content+""},!_self.document)return _self.addEventListener?(_self.addEventListener("message",function(e){var t=JSON.parse(e.data),a=t.language,r=t.code,i=t.immediateClose;_self.postMessage(n.highlight(r,n.languages[a],a)),i&&_self.close()},!1),_self.Prism):_self.Prism;var r=document.currentScript||[].slice.call(document.getElementsByTagName("script")).pop();return r&&(n.filename=r.src,document.addEventListener&&!r.hasAttribute("data-manual")&&("loading"!==document.readyState?window.requestAnimationFrame?window.requestAnimationFrame(n.highlightAll):window.setTimeout(n.highlightAll,16):document.addEventListener("DOMContentLoaded",n.highlightAll))),_self.Prism}();"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism); \ No newline at end of file diff --git a/app/bower_components/prism/components/prism-css-extras.js b/app/bower_components/prism/components/prism-css-extras.js index 766a5b0..1b85714 100644 --- a/app/bower_components/prism/components/prism-css-extras.js +++ b/app/bower_components/prism/components/prism-css-extras.js @@ -4,7 +4,8 @@ Prism.languages.css.selector = { 'pseudo-element': /:(?:after|before|first-letter|first-line|selection)|::[-\w]+/, 'pseudo-class': /:[-\w]+(?:\(.*\))?/, 'class': /\.[-:\.\w]+/, - 'id': /#[-:\.\w]+/ + 'id': /#[-:\.\w]+/, + 'attribute': /\[[^\]]+\]/ } }; diff --git a/app/bower_components/prism/components/prism-css-extras.min.js b/app/bower_components/prism/components/prism-css-extras.min.js index 0a753ea..d5ef4b6 100644 --- a/app/bower_components/prism/components/prism-css-extras.min.js +++ b/app/bower_components/prism/components/prism-css-extras.min.js @@ -1 +1 @@ -Prism.languages.css.selector={pattern:/[^\{\}\s][^\{\}]*(?=\s*\{)/,inside:{"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+(?:\(.*\))?/,"class":/\.[-:\.\w]+/,id:/#[-:\.\w]+/}},Prism.languages.insertBefore("css","function",{hexcode:/#[\da-f]{3,6}/i,entity:/\\[\da-f]{1,8}/i,number:/[\d%\.]+/}); \ No newline at end of file +Prism.languages.css.selector={pattern:/[^\{\}\s][^\{\}]*(?=\s*\{)/,inside:{"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+(?:\(.*\))?/,"class":/\.[-:\.\w]+/,id:/#[-:\.\w]+/,attribute:/\[[^\]]+\]/}},Prism.languages.insertBefore("css","function",{hexcode:/#[\da-f]{3,6}/i,entity:/\\[\da-f]{1,8}/i,number:/[\d%\.]+/}); \ No newline at end of file diff --git a/app/bower_components/prism/components/prism-css.js b/app/bower_components/prism/components/prism-css.js index 3b219a9..171c988 100644 --- a/app/bower_components/prism/components/prism-css.js +++ b/app/bower_components/prism/components/prism-css.js @@ -9,7 +9,10 @@ Prism.languages.css = { }, 'url': /url\((?:(["'])(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1|.*?)\)/i, 'selector': /[^\{\}\s][^\{\};]*?(?=\s*\{)/, - 'string': /("|')(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1/, + 'string': { + pattern: /("|')(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1/, + greedy: true + }, 'property': /(\b|\B)[\w-]+(?=\s*:)/i, 'important': /\B!important\b/i, 'function': /[-a-z0-9]+(?=\()/i, diff --git a/app/bower_components/prism/components/prism-css.min.js b/app/bower_components/prism/components/prism-css.min.js index 5d8be07..59a8198 100644 --- a/app/bower_components/prism/components/prism-css.min.js +++ b/app/bower_components/prism/components/prism-css.min.js @@ -1 +1 @@ -Prism.languages.css={comment:/\/\*[\w\W]*?\*\//,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*\{))/i,inside:{rule:/@[\w-]+/}},url:/url\((?:(["'])(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1|.*?)\)/i,selector:/[^\{\}\s][^\{\};]*?(?=\s*\{)/,string:/("|')(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1/,property:/(\b|\B)[\w-]+(?=\s*:)/i,important:/\B!important\b/i,"function":/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:]/},Prism.languages.css.atrule.inside.rest=Prism.util.clone(Prism.languages.css),Prism.languages.markup&&(Prism.languages.insertBefore("markup","tag",{style:{pattern:/()[\w\W]*?(?=<\/style>)/i,lookbehind:!0,inside:Prism.languages.css,alias:"language-css"}}),Prism.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|').*?\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:Prism.languages.markup.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:Prism.languages.css}},alias:"language-css"}},Prism.languages.markup.tag)); \ No newline at end of file +Prism.languages.css={comment:/\/\*[\w\W]*?\*\//,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*\{))/i,inside:{rule:/@[\w-]+/}},url:/url\((?:(["'])(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1|.*?)\)/i,selector:/[^\{\}\s][^\{\};]*?(?=\s*\{)/,string:{pattern:/("|')(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1/,greedy:!0},property:/(\b|\B)[\w-]+(?=\s*:)/i,important:/\B!important\b/i,"function":/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:]/},Prism.languages.css.atrule.inside.rest=Prism.util.clone(Prism.languages.css),Prism.languages.markup&&(Prism.languages.insertBefore("markup","tag",{style:{pattern:/()[\w\W]*?(?=<\/style>)/i,lookbehind:!0,inside:Prism.languages.css,alias:"language-css"}}),Prism.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|').*?\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:Prism.languages.markup.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:Prism.languages.css}},alias:"language-css"}},Prism.languages.markup.tag)); \ No newline at end of file diff --git a/app/bower_components/prism/components/prism-graphql.js b/app/bower_components/prism/components/prism-graphql.js new file mode 100644 index 0000000..6fbe93b --- /dev/null +++ b/app/bower_components/prism/components/prism-graphql.js @@ -0,0 +1,24 @@ +Prism.languages.graphql = { + 'comment': /#.*/, + 'string': { + pattern: /"(?:\\.|[^\\"])*"/, + greedy: true + }, + 'number': /(?:\B-|\b)\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b/, + 'boolean': /\b(?:true|false)\b/, + 'variable': /\$[a-z_]\w*/i, + 'directive': { + pattern: /@[a-z_]\w*/i, + alias: 'function' + }, + 'attr-name': /[a-z_]\w*(?=\s*:)/i, + 'keyword': [ + { + pattern: /(fragment\s+(?!on)[a-z_]\w*\s+|\.\.\.\s*)on\b/, + lookbehind: true + }, + /\b(?:query|fragment|mutation)\b/ + ], + 'operator': /!|=|\.{3}/, + 'punctuation': /[!(){}\[\]:=,]/ +}; \ No newline at end of file diff --git a/app/bower_components/prism/components/prism-graphql.min.js b/app/bower_components/prism/components/prism-graphql.min.js new file mode 100644 index 0000000..2658c23 --- /dev/null +++ b/app/bower_components/prism/components/prism-graphql.min.js @@ -0,0 +1 @@ +Prism.languages.graphql={comment:/#.*/,string:{pattern:/"(?:\\.|[^\\"])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b/,"boolean":/\b(?:true|false)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":/[a-z_]\w*(?=\s*:)/i,keyword:[{pattern:/(fragment\s+(?!on)[a-z_]\w*\s+|\.\.\.\s*)on\b/,lookbehind:!0},/\b(?:query|fragment|mutation)\b/],operator:/!|=|\.{3}/,punctuation:/[!(){}\[\]:=,]/}; \ No newline at end of file diff --git a/app/bower_components/prism/components/prism-groovy.js b/app/bower_components/prism/components/prism-groovy.js index 7092517..c6f749e 100644 --- a/app/bower_components/prism/components/prism-groovy.js +++ b/app/bower_components/prism/components/prism-groovy.js @@ -8,7 +8,7 @@ Prism.languages.groovy = Prism.languages.extend('clike', { { pattern: /("|'|\/)(?:\\?.)*?\1/, greedy: true - }, + } ], 'number': /\b(?:0b[01_]+|0x[\da-f_]+(?:\.[\da-f_p\-]+)?|[\d_]+(?:\.[\d_]+)?(?:e[+-]?[\d]+)?)[glidf]?\b/i, 'operator': { @@ -48,8 +48,8 @@ Prism.hooks.add('wrap', function(env) { pattern = /([^\$])(\$(\{.*?\}|[\w\.]+))/; } - // To prevent double HTML-ecoding we have to decode env.content first - env.content = env.content.replace(/&/g, '&').replace(/</g, '<'); + // To prevent double HTML-encoding we have to decode env.content first + env.content = env.content.replace(/</g, '<').replace(/&/g, '&'); env.content = Prism.highlight(env.content, { 'expression': { diff --git a/app/bower_components/prism/components/prism-groovy.min.js b/app/bower_components/prism/components/prism-groovy.min.js index ed59332..cb07547 100644 --- a/app/bower_components/prism/components/prism-groovy.min.js +++ b/app/bower_components/prism/components/prism-groovy.min.js @@ -1 +1 @@ -Prism.languages.groovy=Prism.languages.extend("clike",{keyword:/\b(as|def|in|abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|native|new|package|private|protected|public|return|short|static|strictfp|super|switch|synchronized|this|throw|throws|trait|transient|try|void|volatile|while)\b/,string:[{pattern:/("""|''')[\W\w]*?\1|(\$\/)(\$\/\$|[\W\w])*?\/\$/,greedy:!0},{pattern:/("|'|\/)(?:\\?.)*?\1/,greedy:!0}],number:/\b(?:0b[01_]+|0x[\da-f_]+(?:\.[\da-f_p\-]+)?|[\d_]+(?:\.[\d_]+)?(?:e[+-]?[\d]+)?)[glidf]?\b/i,operator:{pattern:/(^|[^.])(~|==?~?|\?[.:]?|\*(?:[.=]|\*=?)?|\.[@&]|\.\.<|\.{1,2}(?!\.)|-[-=>]?|\+[+=]?|!=?|<(?:<=?|=>?)?|>(?:>>?=?|=)?|&[&=]?|\|[|=]?|\/=?|\^=?|%=?)/,lookbehind:!0},punctuation:/\.+|[{}[\];(),:$]/}),Prism.languages.insertBefore("groovy","string",{shebang:{pattern:/#!.+/,alias:"comment"}}),Prism.languages.insertBefore("groovy","punctuation",{"spock-block":/\b(setup|given|when|then|and|cleanup|expect|where):/}),Prism.languages.insertBefore("groovy","function",{annotation:{alias:"punctuation",pattern:/(^|[^.])@\w+/,lookbehind:!0}}),Prism.hooks.add("wrap",function(e){if("groovy"===e.language&&"string"===e.type){var t=e.content[0];if("'"!=t){var n=/([^\\])(\$(\{.*?\}|[\w\.]+))/;"$"===t&&(n=/([^\$])(\$(\{.*?\}|[\w\.]+))/),e.content=e.content.replace(/&/g,"&").replace(/</g,"<"),e.content=Prism.highlight(e.content,{expression:{pattern:n,lookbehind:!0,inside:Prism.languages.groovy}}),e.classes.push("/"===t?"regex":"gstring")}}}); \ No newline at end of file +Prism.languages.groovy=Prism.languages.extend("clike",{keyword:/\b(as|def|in|abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|native|new|package|private|protected|public|return|short|static|strictfp|super|switch|synchronized|this|throw|throws|trait|transient|try|void|volatile|while)\b/,string:[{pattern:/("""|''')[\W\w]*?\1|(\$\/)(\$\/\$|[\W\w])*?\/\$/,greedy:!0},{pattern:/("|'|\/)(?:\\?.)*?\1/,greedy:!0}],number:/\b(?:0b[01_]+|0x[\da-f_]+(?:\.[\da-f_p\-]+)?|[\d_]+(?:\.[\d_]+)?(?:e[+-]?[\d]+)?)[glidf]?\b/i,operator:{pattern:/(^|[^.])(~|==?~?|\?[.:]?|\*(?:[.=]|\*=?)?|\.[@&]|\.\.<|\.{1,2}(?!\.)|-[-=>]?|\+[+=]?|!=?|<(?:<=?|=>?)?|>(?:>>?=?|=)?|&[&=]?|\|[|=]?|\/=?|\^=?|%=?)/,lookbehind:!0},punctuation:/\.+|[{}[\];(),:$]/}),Prism.languages.insertBefore("groovy","string",{shebang:{pattern:/#!.+/,alias:"comment"}}),Prism.languages.insertBefore("groovy","punctuation",{"spock-block":/\b(setup|given|when|then|and|cleanup|expect|where):/}),Prism.languages.insertBefore("groovy","function",{annotation:{alias:"punctuation",pattern:/(^|[^.])@\w+/,lookbehind:!0}}),Prism.hooks.add("wrap",function(e){if("groovy"===e.language&&"string"===e.type){var t=e.content[0];if("'"!=t){var n=/([^\\])(\$(\{.*?\}|[\w\.]+))/;"$"===t&&(n=/([^\$])(\$(\{.*?\}|[\w\.]+))/),e.content=e.content.replace(/</g,"<").replace(/&/g,"&"),e.content=Prism.highlight(e.content,{expression:{pattern:n,lookbehind:!0,inside:Prism.languages.groovy}}),e.classes.push("/"===t?"regex":"gstring")}}}); \ No newline at end of file diff --git a/app/bower_components/prism/components/prism-ini.js b/app/bower_components/prism/components/prism-ini.js index e6a3852..6747ad6 100644 --- a/app/bower_components/prism/components/prism-ini.js +++ b/app/bower_components/prism/components/prism-ini.js @@ -1,6 +1,6 @@ Prism.languages.ini= { 'comment': /^[ \t]*;.*$/m, - 'important': /\[.*?\]/, + 'selector': /^[ \t]*\[.*?\]/m, 'constant': /^[ \t]*[^\s=]+?(?=[ \t]*=)/m, 'attr-value': { pattern: /=.*/, diff --git a/app/bower_components/prism/components/prism-ini.min.js b/app/bower_components/prism/components/prism-ini.min.js index b78bc95..bcc3c46 100644 --- a/app/bower_components/prism/components/prism-ini.min.js +++ b/app/bower_components/prism/components/prism-ini.min.js @@ -1 +1 @@ -Prism.languages.ini={comment:/^[ \t]*;.*$/m,important:/\[.*?\]/,constant:/^[ \t]*[^\s=]+?(?=[ \t]*=)/m,"attr-value":{pattern:/=.*/,inside:{punctuation:/^[=]/}}}; \ No newline at end of file +Prism.languages.ini={comment:/^[ \t]*;.*$/m,selector:/^[ \t]*\[.*?\]/m,constant:/^[ \t]*[^\s=]+?(?=[ \t]*=)/m,"attr-value":{pattern:/=.*/,inside:{punctuation:/^[=]/}}}; \ No newline at end of file diff --git a/app/bower_components/prism/components/prism-javascript.js b/app/bower_components/prism/components/prism-javascript.js index 082846a..f78d994 100644 --- a/app/bower_components/prism/components/prism-javascript.js +++ b/app/bower_components/prism/components/prism-javascript.js @@ -2,7 +2,8 @@ Prism.languages.javascript = Prism.languages.extend('clike', { 'keyword': /\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/, 'number': /\b-?(0x[\dA-Fa-f]+|0b[01]+|0o[0-7]+|\d*\.?\d+([Ee][+-]?\d+)?|NaN|Infinity)\b/, // Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444) - 'function': /[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*(?=\()/i + 'function': /[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*(?=\()/i, + 'operator': /--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*\*?|\/|~|\^|%|\.{3}/ }); Prism.languages.insertBefore('javascript', 'keyword', { diff --git a/app/bower_components/prism/components/prism-javascript.min.js b/app/bower_components/prism/components/prism-javascript.min.js index 63285af..d580216 100644 --- a/app/bower_components/prism/components/prism-javascript.min.js +++ b/app/bower_components/prism/components/prism-javascript.min.js @@ -1 +1 @@ -Prism.languages.javascript=Prism.languages.extend("clike",{keyword:/\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/,number:/\b-?(0x[\dA-Fa-f]+|0b[01]+|0o[0-7]+|\d*\.?\d+([Ee][+-]?\d+)?|NaN|Infinity)\b/,"function":/[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*(?=\()/i}),Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^\/])\/(?!\/)(\[.+?]|\\.|[^\/\\\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})]))/,lookbehind:!0,greedy:!0}}),Prism.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\\\|\\?[^\\])*?`/,greedy:!0,inside:{interpolation:{pattern:/\$\{[^}]+\}/,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}}}),Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{script:{pattern:/()[\w\W]*?(?=<\/script>)/i,lookbehind:!0,inside:Prism.languages.javascript,alias:"language-javascript"}}),Prism.languages.js=Prism.languages.javascript; \ No newline at end of file +Prism.languages.javascript=Prism.languages.extend("clike",{keyword:/\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/,number:/\b-?(0x[\dA-Fa-f]+|0b[01]+|0o[0-7]+|\d*\.?\d+([Ee][+-]?\d+)?|NaN|Infinity)\b/,"function":/[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*(?=\()/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*\*?|\/|~|\^|%|\.{3}/}),Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^\/])\/(?!\/)(\[.+?]|\\.|[^\/\\\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})]))/,lookbehind:!0,greedy:!0}}),Prism.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\\\|\\?[^\\])*?`/,greedy:!0,inside:{interpolation:{pattern:/\$\{[^}]+\}/,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}}}),Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{script:{pattern:/()[\w\W]*?(?=<\/script>)/i,lookbehind:!0,inside:Prism.languages.javascript,alias:"language-javascript"}}),Prism.languages.js=Prism.languages.javascript; \ No newline at end of file diff --git a/app/bower_components/prism/components/prism-jolie.js b/app/bower_components/prism/components/prism-jolie.js new file mode 100644 index 0000000..4c0d430 --- /dev/null +++ b/app/bower_components/prism/components/prism-jolie.js @@ -0,0 +1,56 @@ +Prism.languages.jolie = Prism.languages.extend('clike', { + 'keyword': /\b(?:include|define|is_defined|undef|main|init|outputPort|inputPort|Location|Protocol|Interfaces|RequestResponse|OneWay|type|interface|extender|throws|cset|csets|forward|Aggregates|Redirects|embedded|courier|extender|execution|sequential|concurrent|single|scope|install|throw|comp|cH|default|global|linkIn|linkOut|synchronized|this|new|for|if|else|while|in|Jolie|Java|Javascript|nullProcess|spawn|constants|with|provide|until|exit|foreach|instanceof|over|service)\b/g, + 'builtin': /\b(?:undefined|string|int|void|long|Byte|bool|double|float|char|any)\b/, + 'number': /\b\d*\.?\d+(?:e[+-]?\d+)?l?\b/i, + 'operator': /->|<<|[!+-<>=*]?=|[:<>!?*\/%^]|&&|\|\||--?|\+\+?/g, + 'symbol': /[|;@]/, + 'punctuation': /[,.]/, + 'string': { + pattern: /(["'])(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/, + greedy: true + }, +}); + +delete Prism.languages.jolie['class-name']; +delete Prism.languages.jolie['function']; + +Prism.languages.insertBefore( 'jolie', 'keyword', { + 'function': + { + pattern: /((?:\b(?:outputPort|inputPort|in|service|courier)\b|@)\s*)\w+/, + lookbehind: true + }, + 'aggregates': { + pattern: /(\bAggregates\s*:\s*)(?:\w+(?:\s+with\s+\w+)?\s*,\s*)*\w+(?:\s+with\s+\w+)?/, + lookbehind: true, + inside: { + 'withExtension': { + pattern: /\bwith\s+\w+/, + inside: { + 'keyword' : /\bwith\b/ + } + }, + 'function': { + pattern: /\w+/ + }, + 'punctuation': { + pattern: /,/ + } + } + }, + 'redirects': { + pattern: /(\bRedirects\s*:\s*)(?:\w+\s*=>\s*\w+\s*,\s*)*(?:\w+\s*=>\s*\w+)/, + lookbehind: true, + inside: { + 'punctuation': { + pattern: /,/ + }, + 'function': { + pattern: /\w+/g + }, + 'symbol': { + pattern: /=>/g + } + } + } +}); \ No newline at end of file diff --git a/app/bower_components/prism/components/prism-jolie.min.js b/app/bower_components/prism/components/prism-jolie.min.js new file mode 100644 index 0000000..f5a81ee --- /dev/null +++ b/app/bower_components/prism/components/prism-jolie.min.js @@ -0,0 +1 @@ +Prism.languages.jolie=Prism.languages.extend("clike",{keyword:/\b(?:include|define|is_defined|undef|main|init|outputPort|inputPort|Location|Protocol|Interfaces|RequestResponse|OneWay|type|interface|extender|throws|cset|csets|forward|Aggregates|Redirects|embedded|courier|extender|execution|sequential|concurrent|single|scope|install|throw|comp|cH|default|global|linkIn|linkOut|synchronized|this|new|for|if|else|while|in|Jolie|Java|Javascript|nullProcess|spawn|constants|with|provide|until|exit|foreach|instanceof|over|service)\b/g,builtin:/\b(?:undefined|string|int|void|long|Byte|bool|double|float|char|any)\b/,number:/\b\d*\.?\d+(?:e[+-]?\d+)?l?\b/i,operator:/->|<<|[!+-<>=*]?=|[:<>!?*\/%^]|&&|\|\||--?|\+\+?/g,symbol:/[|;@]/,punctuation:/[,.]/,string:{pattern:/(["'])(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0}}),delete Prism.languages.jolie["class-name"],delete Prism.languages.jolie["function"],Prism.languages.insertBefore("jolie","keyword",{"function":{pattern:/((?:\b(?:outputPort|inputPort|in|service|courier)\b|@)\s*)\w+/,lookbehind:!0},aggregates:{pattern:/(\bAggregates\s*:\s*)(?:\w+(?:\s+with\s+\w+)?\s*,\s*)*\w+(?:\s+with\s+\w+)?/,lookbehind:!0,inside:{withExtension:{pattern:/\bwith\s+\w+/,inside:{keyword:/\bwith\b/}},"function":{pattern:/\w+/},punctuation:{pattern:/,/}}},redirects:{pattern:/(\bRedirects\s*:\s*)(?:\w+\s*=>\s*\w+\s*,\s*)*(?:\w+\s*=>\s*\w+)/,lookbehind:!0,inside:{punctuation:{pattern:/,/},"function":{pattern:/\w+/g},symbol:{pattern:/=>/g}}}}); \ No newline at end of file diff --git a/app/bower_components/prism/components/prism-json.js b/app/bower_components/prism/components/prism-json.js index c7634b1..a7f54f6 100644 --- a/app/bower_components/prism/components/prism-json.js +++ b/app/bower_components/prism/components/prism-json.js @@ -1,11 +1,11 @@ Prism.languages.json = { - 'property': /".*?"(?=\s*:)/ig, - 'string': /"(?!:)(\\?[^"])*?"(?!:)/g, - 'number': /\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?)\b/g, + 'property': /"(?:\\.|[^|"])*"(?=\s*:)/ig, + 'string': /"(?!:)(?:\\.|[^|"])*"(?!:)/g, + 'number': /\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee][+-]?\d+)?)\b/g, 'punctuation': /[{}[\]);,]/g, 'operator': /:/g, 'boolean': /\b(true|false)\b/gi, - 'null': /\bnull\b/gi, + 'null': /\bnull\b/gi }; Prism.languages.jsonp = Prism.languages.json; diff --git a/app/bower_components/prism/components/prism-json.min.js b/app/bower_components/prism/components/prism-json.min.js index adf9403..a437a3e 100644 --- a/app/bower_components/prism/components/prism-json.min.js +++ b/app/bower_components/prism/components/prism-json.min.js @@ -1 +1 @@ -Prism.languages.json={property:/".*?"(?=\s*:)/gi,string:/"(?!:)(\\?[^"])*?"(?!:)/g,number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?)\b/g,punctuation:/[{}[\]);,]/g,operator:/:/g,"boolean":/\b(true|false)\b/gi,"null":/\bnull\b/gi},Prism.languages.jsonp=Prism.languages.json; \ No newline at end of file +Prism.languages.json={property:/"(?:\\.|[^|"])*"(?=\s*:)/gi,string:/"(?!:)(?:\\.|[^|"])*"(?!:)/g,number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee][+-]?\d+)?)\b/g,punctuation:/[{}[\]);,]/g,operator:/:/g,"boolean":/\b(true|false)\b/gi,"null":/\bnull\b/gi},Prism.languages.jsonp=Prism.languages.json; \ No newline at end of file diff --git a/app/bower_components/prism/components/prism-livescript.js b/app/bower_components/prism/components/prism-livescript.js new file mode 100644 index 0000000..97bee4a --- /dev/null +++ b/app/bower_components/prism/components/prism-livescript.js @@ -0,0 +1,118 @@ +Prism.languages.livescript = { + 'interpolated-string': { + pattern: /("""|")(?:\\[\s\S]|(?!\1)[^\\])*\1/, + greedy: true, + inside: { + 'variable': { + pattern: /(^|[^\\])#[a-z_](?:-?[a-z]|\d)*/m, + lookbehind: true + }, + 'interpolation': { + pattern: /(^|[^\\])#\{[^}]+\}/m, + lookbehind: true, + inside: { + 'interpolation-punctuation': { + pattern: /^#\{|\}$/, + alias: 'variable' + } + // See rest below + } + }, + 'string': /[\s\S]+/ + } + }, + 'comment': [ + { + pattern: /(^|[^\\])\/\*[\w\W]*?\*\//, + lookbehind: true, + greedy: true + }, + { + pattern: /(^|[^\\])#.*/, + lookbehind: true, + greedy: true + } + ], + 'string': [ + { + pattern: /('''|')(?:\\[\s\S]|(?!\1)[^\\])*\1/, + greedy: true + }, + { + pattern: /<\[[\s\S]*?\]>/, + greedy: true + }, + /\\[^\s,;\])}]+/ + ], + 'regex': [ + { + pattern: /\/\/(\[.+?]|\\.|(?!\/\/)[^\\])+\/\/[gimyu]{0,5}/, + greedy: true, + inside: { + 'comment': { + pattern: /(^|[^\\])#.*/, + lookbehind: true + } + } + }, + { + pattern: /\/(\[.+?]|\\.|[^/\\\r\n])+\/[gimyu]{0,5}/, + greedy: true + } + ], + 'keyword': { + pattern: /(^|(?!-).)\b(?:break|case|catch|class|const|continue|default|do|else|extends|fallthrough|finally|for(?: ever)?|function|if|implements|it|let|loop|new|null|otherwise|own|return|super|switch|that|then|this|throw|try|unless|until|var|void|when|while|yield)(?!-)\b/m, + lookbehind: true + }, + 'keyword-operator': { + pattern: /(^|[^-])\b(?:(?:delete|require|typeof)!|(?:and|by|delete|export|from|import(?: all)?|in|instanceof|is(?:nt| not)?|not|of|or|til|to|typeof|with|xor)(?!-)\b)/m, + lookbehind: true, + alias: 'operator' + }, + 'boolean': { + pattern: /(^|[^-])\b(?:false|no|off|on|true|yes)(?!-)\b/m, + lookbehind: true + }, + 'argument': { + // Don't match .&. nor && + pattern: /(^|(?!\.&\.)[^&])&(?!&)\d*/m, + lookbehind: true, + alias: 'variable' + }, + 'number': /\b(?:\d+~[\da-z]+|\d[\d_]*(?:\.\d[\d_]*)?(?:[a-z]\w*)?)/i, + 'identifier': /[a-z_](?:-?[a-z]|\d)*/i, + 'operator': [ + // Spaced . + { + pattern: /( )\.(?= )/, + lookbehind: true + }, + // Full list, in order: + // .= .~ .. ... + // .&. .^. .<<. .>>. .>>>. + // := :: ::= + // && + // || |> + // < << <<< <<<< + // <- <-- <-! <--! + // <~ <~~ <~! <~~! + // <| <= >> >= >? + // - -- -> --> + // + ++ + // @ @@ + // % %% + // * ** + // ! != !~= + // !~> !~~> + // !-> !--> + // ~ ~> ~~> ~= + // = == + // ^ ^^ + // / ? + /\.(?:[=~]|\.\.?)|\.(?:[&|^]|<<|>>>?)\.|:(?:=|:=?)|&&|\|[|>]|<(?:<[>=?]?|-(?:->?|>)?|\+\+?|@@?|%%?|\*\*?|!(?:~?=|--?>|~?~>)?|~(?:~?>|=)?|==?|\^\^?|[\/?]/ + ], + 'punctuation': /[(){}\[\]|.,:;`]/ +}; + +Prism.languages.livescript['interpolated-string'].inside['interpolation'].inside.rest = Prism.languages.livescript; \ No newline at end of file diff --git a/app/bower_components/prism/components/prism-livescript.min.js b/app/bower_components/prism/components/prism-livescript.min.js new file mode 100644 index 0000000..b79f815 --- /dev/null +++ b/app/bower_components/prism/components/prism-livescript.min.js @@ -0,0 +1 @@ +Prism.languages.livescript={"interpolated-string":{pattern:/("""|")(?:\\[\s\S]|(?!\1)[^\\])*\1/,greedy:!0,inside:{variable:{pattern:/(^|[^\\])#[a-z_](?:-?[a-z]|\d)*/m,lookbehind:!0},interpolation:{pattern:/(^|[^\\])#\{[^}]+\}/m,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^#\{|\}$/,alias:"variable"}}},string:/[\s\S]+/}},comment:[{pattern:/(^|[^\\])\/\*[\w\W]*?\*\//,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0}],string:[{pattern:/('''|')(?:\\[\s\S]|(?!\1)[^\\])*\1/,greedy:!0},{pattern:/<\[[\s\S]*?\]>/,greedy:!0},/\\[^\s,;\])}]+/],regex:[{pattern:/\/\/(\[.+?]|\\.|(?!\/\/)[^\\])+\/\/[gimyu]{0,5}/,greedy:!0,inside:{comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0}}},{pattern:/\/(\[.+?]|\\.|[^\/\\\r\n])+\/[gimyu]{0,5}/,greedy:!0}],keyword:{pattern:/(^|(?!-).)\b(?:break|case|catch|class|const|continue|default|do|else|extends|fallthrough|finally|for(?: ever)?|function|if|implements|it|let|loop|new|null|otherwise|own|return|super|switch|that|then|this|throw|try|unless|until|var|void|when|while|yield)(?!-)\b/m,lookbehind:!0},"keyword-operator":{pattern:/(^|[^-])\b(?:(?:delete|require|typeof)!|(?:and|by|delete|export|from|import(?: all)?|in|instanceof|is(?:nt| not)?|not|of|or|til|to|typeof|with|xor)(?!-)\b)/m,lookbehind:!0,alias:"operator"},"boolean":{pattern:/(^|[^-])\b(?:false|no|off|on|true|yes)(?!-)\b/m,lookbehind:!0},argument:{pattern:/(^|(?!\.&\.)[^&])&(?!&)\d*/m,lookbehind:!0,alias:"variable"},number:/\b(?:\d+~[\da-z]+|\d[\d_]*(?:\.\d[\d_]*)?(?:[a-z]\w*)?)/i,identifier:/[a-z_](?:-?[a-z]|\d)*/i,operator:[{pattern:/( )\.(?= )/,lookbehind:!0},/\.(?:[=~]|\.\.?)|\.(?:[&|^]|<<|>>>?)\.|:(?:=|:=?)|&&|\|[|>]|<(?:<[>=?]?|-(?:->?|>)?|\+\+?|@@?|%%?|\*\*?|!(?:~?=|--?>|~?~>)?|~(?:~?>|=)?|==?|\^\^?|[\/?]/],punctuation:/[(){}\[\]|.,:;`]/},Prism.languages.livescript["interpolated-string"].inside.interpolation.inside.rest=Prism.languages.livescript; \ No newline at end of file diff --git a/app/bower_components/prism/components/prism-markup.js b/app/bower_components/prism/components/prism-markup.js index 6357155..73fe302 100644 --- a/app/bower_components/prism/components/prism-markup.js +++ b/app/bower_components/prism/components/prism-markup.js @@ -1,10 +1,10 @@ Prism.languages.markup = { 'comment': //, 'prolog': /<\?[\w\W]+?\?>/, - 'doctype': //, + 'doctype': //i, 'cdata': //i, 'tag': { - pattern: /<\/?(?!\d)[^\s>\/=.$<]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i, + pattern: /<\/?(?!\d)[^\s>\/=$<]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i, inside: { 'tag': { pattern: /^<\/?[^\s>\/]+/i, diff --git a/app/bower_components/prism/components/prism-markup.min.js b/app/bower_components/prism/components/prism-markup.min.js index 9615654..edda541 100644 --- a/app/bower_components/prism/components/prism-markup.min.js +++ b/app/bower_components/prism/components/prism-markup.min.js @@ -1 +1 @@ -Prism.languages.markup={comment://,prolog:/<\?[\w\W]+?\?>/,doctype://,cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=.$<]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/i,inside:{punctuation:/[=>"']/}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/&#?[\da-z]{1,8};/i},Prism.hooks.add("wrap",function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))}),Prism.languages.xml=Prism.languages.markup,Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup; \ No newline at end of file +Prism.languages.markup={comment://,prolog:/<\?[\w\W]+?\?>/,doctype://i,cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/i,inside:{punctuation:/[=>"']/}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/&#?[\da-z]{1,8};/i},Prism.hooks.add("wrap",function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))}),Prism.languages.xml=Prism.languages.markup,Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup; \ No newline at end of file diff --git a/app/bower_components/prism/components/prism-nsis.js b/app/bower_components/prism/components/prism-nsis.js index 66de20a..613c2b5 100644 --- a/app/bower_components/prism/components/prism-nsis.js +++ b/app/bower_components/prism/components/prism-nsis.js @@ -1,7 +1,7 @@ /** * Original by Jan T. Sott (http://github.com/idleberg) * - * Includes all commands and plug-ins shipped with NSIS 3.0a2 + * Includes all commands and plug-ins shipped with NSIS 3.0 */ Prism.languages.nsis = { 'comment': { @@ -9,11 +9,18 @@ lookbehind: true }, 'string': /("|')(\\?.)*?\1/, - 'keyword': /\b(Abort|Add(BrandingImage|Size)|AdvSplash|Allow(RootDirInstall|SkipFiles)|AutoCloseWindow|Banner|BG(Font|Gradient|Image)|BrandingText|BringToFront|Call(InstDLL)?|Caption|ChangeUI|CheckBitmap|ClearErrors|CompletedText|ComponentText|CopyFiles|CRCCheck|Create(Directory|Font|ShortCut)|Delete(INISec|INIStr|RegKey|RegValue)?|Detail(Print|sButtonText)|Dialer|Dir(Text|Var|Verify)|EnableWindow|Enum(RegKey|RegValue)|Exch|Exec(Shell|Wait)?|ExpandEnvStrings|File(BufSize|Close|ErrorText|Open|Read|ReadByte|ReadUTF16LE|ReadWord|WriteUTF16LE|Seek|Write|WriteByte|WriteWord)?|Find(Close|First|Next|Window)|FlushINI|Get(CurInstType|CurrentAddress|DlgItem|DLLVersion(Local)?|ErrorLevel|FileTime(Local)?|FullPathName|Function(Address|End)?|InstDirError|LabelAddress|TempFileName)|Goto|HideWindow|Icon|If(Abort|Errors|FileExists|RebootFlag|Silent)|InitPluginsDir|Install(ButtonText|Colors|Dir(RegKey)?)|InstProgressFlags|Inst(Type(GetText|SetText)?)|Int(CmpU?|Fmt|Op)|IsWindow|Lang(DLL|String)|License(BkColor|Data|ForceSelection|LangString|Text)|LoadLanguageFile|LockWindow|Log(Set|Text)|Manifest(DPIAware|SupportedOS)|Math|MessageBox|MiscButtonText|Name|Nop|ns(Dialogs|Exec)|NSISdl|OutFile|Page(Callbacks)?|Pop|Push|Quit|Read(EnvStr|INIStr|RegDWORD|RegStr)|Reboot|RegDLL|Rename|RequestExecutionLevel|ReserveFile|Return|RMDir|SearchPath|Section(End|GetFlags|GetInstTypes|GetSize|GetText|Group|In|SetFlags|SetInstTypes|SetSize|SetText)?|SendMessage|Set(AutoClose|BrandingImage|Compress|Compressor(DictSize)?|CtlColors|CurInstType|DatablockOptimize|DateSave|Details(Print|View)|ErrorLevel|Errors|FileAttributes|Font|OutPath|Overwrite|PluginUnload|RebootFlag|RegView|ShellVarContext|Silent)|Show(InstDetails|UninstDetails|Window)|Silent(Install|UnInstall)|Sleep|SpaceTexts|Splash|StartMenu|Str(CmpS?|Cpy|Len)|SubCaption|System|Unicode|Uninstall(ButtonText|Caption|Icon|SubCaption|Text)|UninstPage|UnRegDLL|UserInfo|Var|VI(AddVersionKey|FileVersion|ProductVersion)|VPatch|WindowIcon|Write(INIStr|RegBin|RegDWORD|RegExpandStr|RegStr|Uninstaller)|XPStyle)\b/, + 'keyword': { + pattern: /(^\s*)(Abort|Add(BrandingImage|Size)|AdvSplash|Allow(RootDirInstall|SkipFiles)|AutoCloseWindow|Banner|BG(Font|Gradient|Image)|BrandingText|BringToFront|Call(InstDLL)?|Caption|ChangeUI|CheckBitmap|ClearErrors|CompletedText|ComponentText|CopyFiles|CRCCheck|Create(Directory|Font|ShortCut)|Delete(INISec|INIStr|RegKey|RegValue)?|Detail(Print|sButtonText)|Dialer|Dir(Text|Var|Verify)|EnableWindow|Enum(RegKey|RegValue)|Exch|Exec(Shell|Wait)?|ExpandEnvStrings|File(BufSize|Close|ErrorText|Open|Read|ReadByte|ReadUTF16LE|ReadWord|WriteUTF16LE|Seek|Write|WriteByte|WriteWord)?|Find(Close|First|Next|Window)|FlushINI|Get(CurInstType|CurrentAddress|DlgItem|DLLVersion(Local)?|ErrorLevel|FileTime(Local)?|FullPathName|Function(Address|End)?|InstDirError|LabelAddress|TempFileName)|Goto|HideWindow|Icon|If(Abort|Errors|FileExists|RebootFlag|Silent)|InitPluginsDir|Install(ButtonText|Colors|Dir(RegKey)?)|InstProgressFlags|Inst(Type(GetText|SetText)?)|Int(CmpU?|Fmt|Op)|IsWindow|Lang(DLL|String)|License(BkColor|Data|ForceSelection|LangString|Text)|LoadLanguageFile|LockWindow|Log(Set|Text)|Manifest(DPIAware|SupportedOS)|Math|MessageBox|MiscButtonText|Name|Nop|ns(Dialogs|Exec)|NSISdl|OutFile|Page(Callbacks)?|Pop|Push|Quit|Read(EnvStr|INIStr|RegDWORD|RegStr)|Reboot|RegDLL|Rename|RequestExecutionLevel|ReserveFile|Return|RMDir|SearchPath|Section(End|GetFlags|GetInstTypes|GetSize|GetText|Group|In|SetFlags|SetInstTypes|SetSize|SetText)?|SendMessage|Set(AutoClose|BrandingImage|Compress|Compressor(DictSize)?|CtlColors|CurInstType|DatablockOptimize|DateSave|Details(Print|View)|ErrorLevel|Errors|FileAttributes|Font|OutPath|Overwrite|PluginUnload|RebootFlag|RegView|ShellVarContext|Silent)|Show(InstDetails|UninstDetails|Window)|Silent(Install|UnInstall)|Sleep|SpaceTexts|Splash|StartMenu|Str(CmpS?|Cpy|Len)|SubCaption|System|Unicode|Uninstall(ButtonText|Caption|Icon|SubCaption|Text)|UninstPage|UnRegDLL|UserInfo|Var|VI(AddVersionKey|FileVersion|ProductVersion)|VPatch|WindowIcon|Write(INIStr|RegBin|RegDWORD|RegExpandStr|RegStr|Uninstaller)|XPStyle)\b/m, + lookbehind: true + }, 'property': /\b(admin|all|auto|both|colored|false|force|hide|highest|lastused|leave|listonly|none|normal|notset|off|on|open|print|show|silent|silentlog|smooth|textonly|true|user|ARCHIVE|FILE_(ATTRIBUTE_ARCHIVE|ATTRIBUTE_NORMAL|ATTRIBUTE_OFFLINE|ATTRIBUTE_READONLY|ATTRIBUTE_SYSTEM|ATTRIBUTE_TEMPORARY)|HK(CR|CU|DD|LM|PD|U)|HKEY_(CLASSES_ROOT|CURRENT_CONFIG|CURRENT_USER|DYN_DATA|LOCAL_MACHINE|PERFORMANCE_DATA|USERS)|ID(ABORT|CANCEL|IGNORE|NO|OK|RETRY|YES)|MB_(ABORTRETRYIGNORE|DEFBUTTON1|DEFBUTTON2|DEFBUTTON3|DEFBUTTON4|ICONEXCLAMATION|ICONINFORMATION|ICONQUESTION|ICONSTOP|OK|OKCANCEL|RETRYCANCEL|RIGHT|RTLREADING|SETFOREGROUND|TOPMOST|USERICON|YESNO)|NORMAL|OFFLINE|READONLY|SHCTX|SHELL_CONTEXT|SYSTEM|TEMPORARY)\b/, - 'variable': /\$[({]?[-_\w]+[)}]?/i, + 'constant': /\${[\w\.:-]+}|\$\([\w\.:-]+\)/i, + 'variable': /\$\w+/i, 'number': /\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?)\b/, 'operator': /--?|\+\+?|<=?|>=?|==?=?|&&?|\|?\||[?*\/~^%]/, 'punctuation': /[{}[\];(),.:]/, - 'important': /!(addincludedir|addplugindir|appendfile|cd|define|delfile|echo|else|endif|error|execute|finalize|getdllversionsystem|ifdef|ifmacrodef|ifmacrondef|ifndef|if|include|insertmacro|macroend|macro|makensis|packhdr|searchparse|searchreplace|tempfile|undef|verbose|warning)\b/i + 'important': { + pattern: /(^\s*)!(addincludedir|addplugindir|appendfile|cd|define|delfile|echo|else|endif|error|execute|finalize|getdllversionsystem|ifdef|ifmacrodef|ifmacrondef|ifndef|if|include|insertmacro|macroend|macro|makensis|packhdr|searchparse|searchreplace|tempfile|undef|verbose|warning)\b/mi, + lookbehind: true + } }; diff --git a/app/bower_components/prism/components/prism-nsis.min.js b/app/bower_components/prism/components/prism-nsis.min.js index bbc510b..e4a0322 100644 --- a/app/bower_components/prism/components/prism-nsis.min.js +++ b/app/bower_components/prism/components/prism-nsis.min.js @@ -1 +1 @@ -Prism.languages.nsis={comment:{pattern:/(^|[^\\])(\/\*[\w\W]*?\*\/|[#;].*)/,lookbehind:!0},string:/("|')(\\?.)*?\1/,keyword:/\b(Abort|Add(BrandingImage|Size)|AdvSplash|Allow(RootDirInstall|SkipFiles)|AutoCloseWindow|Banner|BG(Font|Gradient|Image)|BrandingText|BringToFront|Call(InstDLL)?|Caption|ChangeUI|CheckBitmap|ClearErrors|CompletedText|ComponentText|CopyFiles|CRCCheck|Create(Directory|Font|ShortCut)|Delete(INISec|INIStr|RegKey|RegValue)?|Detail(Print|sButtonText)|Dialer|Dir(Text|Var|Verify)|EnableWindow|Enum(RegKey|RegValue)|Exch|Exec(Shell|Wait)?|ExpandEnvStrings|File(BufSize|Close|ErrorText|Open|Read|ReadByte|ReadUTF16LE|ReadWord|WriteUTF16LE|Seek|Write|WriteByte|WriteWord)?|Find(Close|First|Next|Window)|FlushINI|Get(CurInstType|CurrentAddress|DlgItem|DLLVersion(Local)?|ErrorLevel|FileTime(Local)?|FullPathName|Function(Address|End)?|InstDirError|LabelAddress|TempFileName)|Goto|HideWindow|Icon|If(Abort|Errors|FileExists|RebootFlag|Silent)|InitPluginsDir|Install(ButtonText|Colors|Dir(RegKey)?)|InstProgressFlags|Inst(Type(GetText|SetText)?)|Int(CmpU?|Fmt|Op)|IsWindow|Lang(DLL|String)|License(BkColor|Data|ForceSelection|LangString|Text)|LoadLanguageFile|LockWindow|Log(Set|Text)|Manifest(DPIAware|SupportedOS)|Math|MessageBox|MiscButtonText|Name|Nop|ns(Dialogs|Exec)|NSISdl|OutFile|Page(Callbacks)?|Pop|Push|Quit|Read(EnvStr|INIStr|RegDWORD|RegStr)|Reboot|RegDLL|Rename|RequestExecutionLevel|ReserveFile|Return|RMDir|SearchPath|Section(End|GetFlags|GetInstTypes|GetSize|GetText|Group|In|SetFlags|SetInstTypes|SetSize|SetText)?|SendMessage|Set(AutoClose|BrandingImage|Compress|Compressor(DictSize)?|CtlColors|CurInstType|DatablockOptimize|DateSave|Details(Print|View)|ErrorLevel|Errors|FileAttributes|Font|OutPath|Overwrite|PluginUnload|RebootFlag|RegView|ShellVarContext|Silent)|Show(InstDetails|UninstDetails|Window)|Silent(Install|UnInstall)|Sleep|SpaceTexts|Splash|StartMenu|Str(CmpS?|Cpy|Len)|SubCaption|System|Unicode|Uninstall(ButtonText|Caption|Icon|SubCaption|Text)|UninstPage|UnRegDLL|UserInfo|Var|VI(AddVersionKey|FileVersion|ProductVersion)|VPatch|WindowIcon|Write(INIStr|RegBin|RegDWORD|RegExpandStr|RegStr|Uninstaller)|XPStyle)\b/,property:/\b(admin|all|auto|both|colored|false|force|hide|highest|lastused|leave|listonly|none|normal|notset|off|on|open|print|show|silent|silentlog|smooth|textonly|true|user|ARCHIVE|FILE_(ATTRIBUTE_ARCHIVE|ATTRIBUTE_NORMAL|ATTRIBUTE_OFFLINE|ATTRIBUTE_READONLY|ATTRIBUTE_SYSTEM|ATTRIBUTE_TEMPORARY)|HK(CR|CU|DD|LM|PD|U)|HKEY_(CLASSES_ROOT|CURRENT_CONFIG|CURRENT_USER|DYN_DATA|LOCAL_MACHINE|PERFORMANCE_DATA|USERS)|ID(ABORT|CANCEL|IGNORE|NO|OK|RETRY|YES)|MB_(ABORTRETRYIGNORE|DEFBUTTON1|DEFBUTTON2|DEFBUTTON3|DEFBUTTON4|ICONEXCLAMATION|ICONINFORMATION|ICONQUESTION|ICONSTOP|OK|OKCANCEL|RETRYCANCEL|RIGHT|RTLREADING|SETFOREGROUND|TOPMOST|USERICON|YESNO)|NORMAL|OFFLINE|READONLY|SHCTX|SHELL_CONTEXT|SYSTEM|TEMPORARY)\b/,variable:/\$[({]?[-_\w]+[)}]?/i,number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?)\b/,operator:/--?|\+\+?|<=?|>=?|==?=?|&&?|\|?\||[?*\/~^%]/,punctuation:/[{}[\];(),.:]/,important:/!(addincludedir|addplugindir|appendfile|cd|define|delfile|echo|else|endif|error|execute|finalize|getdllversionsystem|ifdef|ifmacrodef|ifmacrondef|ifndef|if|include|insertmacro|macroend|macro|makensis|packhdr|searchparse|searchreplace|tempfile|undef|verbose|warning)\b/i}; \ No newline at end of file +Prism.languages.nsis={comment:{pattern:/(^|[^\\])(\/\*[\w\W]*?\*\/|[#;].*)/,lookbehind:!0},string:/("|')(\\?.)*?\1/,keyword:{pattern:/(^\s*)(Abort|Add(BrandingImage|Size)|AdvSplash|Allow(RootDirInstall|SkipFiles)|AutoCloseWindow|Banner|BG(Font|Gradient|Image)|BrandingText|BringToFront|Call(InstDLL)?|Caption|ChangeUI|CheckBitmap|ClearErrors|CompletedText|ComponentText|CopyFiles|CRCCheck|Create(Directory|Font|ShortCut)|Delete(INISec|INIStr|RegKey|RegValue)?|Detail(Print|sButtonText)|Dialer|Dir(Text|Var|Verify)|EnableWindow|Enum(RegKey|RegValue)|Exch|Exec(Shell|Wait)?|ExpandEnvStrings|File(BufSize|Close|ErrorText|Open|Read|ReadByte|ReadUTF16LE|ReadWord|WriteUTF16LE|Seek|Write|WriteByte|WriteWord)?|Find(Close|First|Next|Window)|FlushINI|Get(CurInstType|CurrentAddress|DlgItem|DLLVersion(Local)?|ErrorLevel|FileTime(Local)?|FullPathName|Function(Address|End)?|InstDirError|LabelAddress|TempFileName)|Goto|HideWindow|Icon|If(Abort|Errors|FileExists|RebootFlag|Silent)|InitPluginsDir|Install(ButtonText|Colors|Dir(RegKey)?)|InstProgressFlags|Inst(Type(GetText|SetText)?)|Int(CmpU?|Fmt|Op)|IsWindow|Lang(DLL|String)|License(BkColor|Data|ForceSelection|LangString|Text)|LoadLanguageFile|LockWindow|Log(Set|Text)|Manifest(DPIAware|SupportedOS)|Math|MessageBox|MiscButtonText|Name|Nop|ns(Dialogs|Exec)|NSISdl|OutFile|Page(Callbacks)?|Pop|Push|Quit|Read(EnvStr|INIStr|RegDWORD|RegStr)|Reboot|RegDLL|Rename|RequestExecutionLevel|ReserveFile|Return|RMDir|SearchPath|Section(End|GetFlags|GetInstTypes|GetSize|GetText|Group|In|SetFlags|SetInstTypes|SetSize|SetText)?|SendMessage|Set(AutoClose|BrandingImage|Compress|Compressor(DictSize)?|CtlColors|CurInstType|DatablockOptimize|DateSave|Details(Print|View)|ErrorLevel|Errors|FileAttributes|Font|OutPath|Overwrite|PluginUnload|RebootFlag|RegView|ShellVarContext|Silent)|Show(InstDetails|UninstDetails|Window)|Silent(Install|UnInstall)|Sleep|SpaceTexts|Splash|StartMenu|Str(CmpS?|Cpy|Len)|SubCaption|System|Unicode|Uninstall(ButtonText|Caption|Icon|SubCaption|Text)|UninstPage|UnRegDLL|UserInfo|Var|VI(AddVersionKey|FileVersion|ProductVersion)|VPatch|WindowIcon|Write(INIStr|RegBin|RegDWORD|RegExpandStr|RegStr|Uninstaller)|XPStyle)\b/m,lookbehind:!0},property:/\b(admin|all|auto|both|colored|false|force|hide|highest|lastused|leave|listonly|none|normal|notset|off|on|open|print|show|silent|silentlog|smooth|textonly|true|user|ARCHIVE|FILE_(ATTRIBUTE_ARCHIVE|ATTRIBUTE_NORMAL|ATTRIBUTE_OFFLINE|ATTRIBUTE_READONLY|ATTRIBUTE_SYSTEM|ATTRIBUTE_TEMPORARY)|HK(CR|CU|DD|LM|PD|U)|HKEY_(CLASSES_ROOT|CURRENT_CONFIG|CURRENT_USER|DYN_DATA|LOCAL_MACHINE|PERFORMANCE_DATA|USERS)|ID(ABORT|CANCEL|IGNORE|NO|OK|RETRY|YES)|MB_(ABORTRETRYIGNORE|DEFBUTTON1|DEFBUTTON2|DEFBUTTON3|DEFBUTTON4|ICONEXCLAMATION|ICONINFORMATION|ICONQUESTION|ICONSTOP|OK|OKCANCEL|RETRYCANCEL|RIGHT|RTLREADING|SETFOREGROUND|TOPMOST|USERICON|YESNO)|NORMAL|OFFLINE|READONLY|SHCTX|SHELL_CONTEXT|SYSTEM|TEMPORARY)\b/,constant:/\${[\w\.:-]+}|\$\([\w\.:-]+\)/i,variable:/\$\w+/i,number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?)\b/,operator:/--?|\+\+?|<=?|>=?|==?=?|&&?|\|?\||[?*\/~^%]/,punctuation:/[{}[\];(),.:]/,important:{pattern:/(^\s*)!(addincludedir|addplugindir|appendfile|cd|define|delfile|echo|else|endif|error|execute|finalize|getdllversionsystem|ifdef|ifmacrodef|ifmacrondef|ifndef|if|include|insertmacro|macroend|macro|makensis|packhdr|searchparse|searchreplace|tempfile|undef|verbose|warning)\b/im,lookbehind:!0}}; \ No newline at end of file diff --git a/app/bower_components/prism/components/prism-php.js b/app/bower_components/prism/components/prism-php.js index ae1e97e..0e7c895 100644 --- a/app/bower_components/prism/components/prism-php.js +++ b/app/bower_components/prism/components/prism-php.js @@ -16,7 +16,8 @@ Prism.languages.php = Prism.languages.extend('clike', { 'constant': /\b[A-Z0-9_]{2,}\b/, 'comment': { pattern: /(^|[^\\])(?:\/\*[\w\W]*?\*\/|\/\/.*)/, - lookbehind: true + lookbehind: true, + greedy: true } }); diff --git a/app/bower_components/prism/components/prism-php.min.js b/app/bower_components/prism/components/prism-php.min.js index 6bb305a..fc4e0e8 100644 --- a/app/bower_components/prism/components/prism-php.min.js +++ b/app/bower_components/prism/components/prism-php.min.js @@ -1 +1 @@ -Prism.languages.php=Prism.languages.extend("clike",{keyword:/\b(and|or|xor|array|as|break|case|cfunction|class|const|continue|declare|default|die|do|else|elseif|enddeclare|endfor|endforeach|endif|endswitch|endwhile|extends|for|foreach|function|include|include_once|global|if|new|return|static|switch|use|require|require_once|var|while|abstract|interface|public|implements|private|protected|parent|throw|null|echo|print|trait|namespace|final|yield|goto|instanceof|finally|try|catch)\b/i,constant:/\b[A-Z0-9_]{2,}\b/,comment:{pattern:/(^|[^\\])(?:\/\*[\w\W]*?\*\/|\/\/.*)/,lookbehind:!0}}),Prism.languages.insertBefore("php","class-name",{"shell-comment":{pattern:/(^|[^\\])#.*/,lookbehind:!0,alias:"comment"}}),Prism.languages.insertBefore("php","keyword",{delimiter:/\?>|<\?(?:php)?/i,variable:/\$\w+\b/i,"package":{pattern:/(\\|namespace\s+|use\s+)[\w\\]+/,lookbehind:!0,inside:{punctuation:/\\/}}}),Prism.languages.insertBefore("php","operator",{property:{pattern:/(->)[\w]+/,lookbehind:!0}}),Prism.languages.markup&&(Prism.hooks.add("before-highlight",function(e){"php"===e.language&&(e.tokenStack=[],e.backupCode=e.code,e.code=e.code.replace(/(?:<\?php|<\?)[\w\W]*?(?:\?>)/gi,function(a){return e.tokenStack.push(a),"{{{PHP"+e.tokenStack.length+"}}}"}))}),Prism.hooks.add("before-insert",function(e){"php"===e.language&&(e.code=e.backupCode,delete e.backupCode)}),Prism.hooks.add("after-highlight",function(e){if("php"===e.language){for(var a,n=0;a=e.tokenStack[n];n++)e.highlightedCode=e.highlightedCode.replace("{{{PHP"+(n+1)+"}}}",Prism.highlight(a,e.grammar,"php").replace(/\$/g,"$$$$"));e.element.innerHTML=e.highlightedCode}}),Prism.hooks.add("wrap",function(e){"php"===e.language&&"markup"===e.type&&(e.content=e.content.replace(/(\{\{\{PHP[0-9]+\}\}\})/g,'$1'))}),Prism.languages.insertBefore("php","comment",{markup:{pattern:/<[^?]\/?(.*?)>/,inside:Prism.languages.markup},php:/\{\{\{PHP[0-9]+\}\}\}/})); \ No newline at end of file +Prism.languages.php=Prism.languages.extend("clike",{keyword:/\b(and|or|xor|array|as|break|case|cfunction|class|const|continue|declare|default|die|do|else|elseif|enddeclare|endfor|endforeach|endif|endswitch|endwhile|extends|for|foreach|function|include|include_once|global|if|new|return|static|switch|use|require|require_once|var|while|abstract|interface|public|implements|private|protected|parent|throw|null|echo|print|trait|namespace|final|yield|goto|instanceof|finally|try|catch)\b/i,constant:/\b[A-Z0-9_]{2,}\b/,comment:{pattern:/(^|[^\\])(?:\/\*[\w\W]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0}}),Prism.languages.insertBefore("php","class-name",{"shell-comment":{pattern:/(^|[^\\])#.*/,lookbehind:!0,alias:"comment"}}),Prism.languages.insertBefore("php","keyword",{delimiter:/\?>|<\?(?:php)?/i,variable:/\$\w+\b/i,"package":{pattern:/(\\|namespace\s+|use\s+)[\w\\]+/,lookbehind:!0,inside:{punctuation:/\\/}}}),Prism.languages.insertBefore("php","operator",{property:{pattern:/(->)[\w]+/,lookbehind:!0}}),Prism.languages.markup&&(Prism.hooks.add("before-highlight",function(e){"php"===e.language&&(e.tokenStack=[],e.backupCode=e.code,e.code=e.code.replace(/(?:<\?php|<\?)[\w\W]*?(?:\?>)/gi,function(a){return e.tokenStack.push(a),"{{{PHP"+e.tokenStack.length+"}}}"}))}),Prism.hooks.add("before-insert",function(e){"php"===e.language&&(e.code=e.backupCode,delete e.backupCode)}),Prism.hooks.add("after-highlight",function(e){if("php"===e.language){for(var a,n=0;a=e.tokenStack[n];n++)e.highlightedCode=e.highlightedCode.replace("{{{PHP"+(n+1)+"}}}",Prism.highlight(a,e.grammar,"php").replace(/\$/g,"$$$$"));e.element.innerHTML=e.highlightedCode}}),Prism.hooks.add("wrap",function(e){"php"===e.language&&"markup"===e.type&&(e.content=e.content.replace(/(\{\{\{PHP[0-9]+\}\}\})/g,'$1'))}),Prism.languages.insertBefore("php","comment",{markup:{pattern:/<[^?]\/?(.*?)>/,inside:Prism.languages.markup},php:/\{\{\{PHP[0-9]+\}\}\}/})); \ No newline at end of file diff --git a/app/bower_components/prism/components/prism-powershell.js b/app/bower_components/prism/components/prism-powershell.js index 41a21f8..6c24200 100644 --- a/app/bower_components/prism/components/prism-powershell.js +++ b/app/bower_components/prism/components/prism-powershell.js @@ -5,7 +5,7 @@ Prism.languages.powershell = { lookbehind: true }, { - pattern: /(^|[^`])#.+/, + pattern: /(^|[^`])#.*/, lookbehind: true } ], @@ -49,4 +49,4 @@ Prism.languages.powershell = { // Variable interpolation inside strings, and nested expressions Prism.languages.powershell.string[0].inside.boolean = Prism.languages.powershell.boolean; Prism.languages.powershell.string[0].inside.variable = Prism.languages.powershell.variable; -Prism.languages.powershell.string[0].inside.function.inside = Prism.util.clone(Prism.languages.powershell); \ No newline at end of file +Prism.languages.powershell.string[0].inside.function.inside = Prism.util.clone(Prism.languages.powershell); diff --git a/app/bower_components/prism/components/prism-powershell.min.js b/app/bower_components/prism/components/prism-powershell.min.js index e0f5302..13e6e14 100644 --- a/app/bower_components/prism/components/prism-powershell.min.js +++ b/app/bower_components/prism/components/prism-powershell.min.js @@ -1 +1 @@ -Prism.languages.powershell={comment:[{pattern:/(^|[^`])<#[\w\W]*?#>/,lookbehind:!0},{pattern:/(^|[^`])#.+/,lookbehind:!0}],string:[{pattern:/"(`?[\w\W])*?"/,greedy:!0,inside:{"function":{pattern:/[^`]\$\(.*?\)/,inside:{}}}},{pattern:/'([^']|'')*'/,greedy:!0}],namespace:/\[[a-z][\w\W]*?\]/i,"boolean":/\$(true|false)\b/i,variable:/\$\w+\b/i,"function":[/\b(Add-(Computer|Content|History|Member|PSSnapin|Type)|Checkpoint-Computer|Clear-(Content|EventLog|History|Item|ItemProperty|Variable)|Compare-Object|Complete-Transaction|Connect-PSSession|ConvertFrom-(Csv|Json|StringData)|Convert-Path|ConvertTo-(Csv|Html|Json|Xml)|Copy-(Item|ItemProperty)|Debug-Process|Disable-(ComputerRestore|PSBreakpoint|PSRemoting|PSSessionConfiguration)|Disconnect-PSSession|Enable-(ComputerRestore|PSBreakpoint|PSRemoting|PSSessionConfiguration)|Enter-PSSession|Exit-PSSession|Export-(Alias|Clixml|Console|Csv|FormatData|ModuleMember|PSSession)|ForEach-Object|Format-(Custom|List|Table|Wide)|Get-(Alias|ChildItem|Command|ComputerRestorePoint|Content|ControlPanelItem|Culture|Date|Event|EventLog|EventSubscriber|FormatData|Help|History|Host|HotFix|Item|ItemProperty|Job|Location|Member|Module|Process|PSBreakpoint|PSCallStack|PSDrive|PSProvider|PSSession|PSSessionConfiguration|PSSnapin|Random|Service|TraceSource|Transaction|TypeData|UICulture|Unique|Variable|WmiObject)|Group-Object|Import-(Alias|Clixml|Csv|LocalizedData|Module|PSSession)|Invoke-(Command|Expression|History|Item|RestMethod|WebRequest|WmiMethod)|Join-Path|Limit-EventLog|Measure-(Command|Object)|Move-(Item|ItemProperty)|New-(Alias|Event|EventLog|Item|ItemProperty|Module|ModuleManifest|Object|PSDrive|PSSession|PSSessionConfigurationFile|PSSessionOption|PSTransportOption|Service|TimeSpan|Variable|WebServiceProxy)|Out-(Default|File|GridView|Host|Null|Printer|String)|Pop-Location|Push-Location|Read-Host|Receive-(Job|PSSession)|Register-(EngineEvent|ObjectEvent|PSSessionConfiguration|WmiEvent)|Remove-(Computer|Event|EventLog|Item|ItemProperty|Job|Module|PSBreakpoint|PSDrive|PSSession|PSSnapin|TypeData|Variable|WmiObject)|Rename-(Computer|Item|ItemProperty)|Reset-ComputerMachinePassword|Resolve-Path|Restart-(Computer|Service)|Restore-Computer|Resume-(Job|Service)|Save-Help|Select-(Object|String|Xml)|Send-MailMessage|Set-(Alias|Content|Date|Item|ItemProperty|Location|PSBreakpoint|PSDebug|PSSessionConfiguration|Service|StrictMode|TraceSource|Variable|WmiInstance)|Show-(Command|ControlPanelItem|EventLog)|Sort-Object|Split-Path|Start-(Job|Process|Service|Sleep|Transaction)|Stop-(Computer|Job|Process|Service)|Suspend-(Job|Service)|Tee-Object|Test-(ComputerSecureChannel|Connection|ModuleManifest|Path|PSSessionConfigurationFile)|Trace-Command|Unblock-File|Undo-Transaction|Unregister-(Event|PSSessionConfiguration)|Update-(FormatData|Help|List|TypeData)|Use-Transaction|Wait-(Event|Job|Process)|Where-Object|Write-(Debug|Error|EventLog|Host|Output|Progress|Verbose|Warning))\b/i,/\b(ac|cat|chdir|clc|cli|clp|clv|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|ebp|echo|epal|epcsv|epsn|erase|fc|fl|ft|fw|gal|gbp|gc|gci|gcs|gdr|gi|gl|gm|gp|gps|group|gsv|gu|gv|gwmi|iex|ii|ipal|ipcsv|ipsn|irm|iwmi|iwr|kill|lp|ls|measure|mi|mount|move|mp|mv|nal|ndr|ni|nv|ogv|popd|ps|pushd|pwd|rbp|rd|rdr|ren|ri|rm|rmdir|rni|rnp|rp|rv|rvpa|rwmi|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls|sort|sp|spps|spsv|start|sv|swmi|tee|trcm|type|write)\b/i],keyword:/\b(Begin|Break|Catch|Class|Continue|Data|Define|Do|DynamicParam|Else|ElseIf|End|Exit|Filter|Finally|For|ForEach|From|Function|If|InlineScript|Parallel|Param|Process|Return|Sequence|Switch|Throw|Trap|Try|Until|Using|Var|While|Workflow)\b/i,operator:{pattern:/(\W?)(!|-(eq|ne|gt|ge|lt|le|sh[lr]|not|b?(and|x?or)|(Not)?(Like|Match|Contains|In)|Replace|Join|is(Not)?|as)\b|-[-=]?|\+[+=]?|[*\/%]=?)/i,lookbehind:!0},punctuation:/[|{}[\];(),.]/},Prism.languages.powershell.string[0].inside.boolean=Prism.languages.powershell.boolean,Prism.languages.powershell.string[0].inside.variable=Prism.languages.powershell.variable,Prism.languages.powershell.string[0].inside.function.inside=Prism.util.clone(Prism.languages.powershell); \ No newline at end of file +Prism.languages.powershell={comment:[{pattern:/(^|[^`])<#[\w\W]*?#>/,lookbehind:!0},{pattern:/(^|[^`])#.*/,lookbehind:!0}],string:[{pattern:/"(`?[\w\W])*?"/,greedy:!0,inside:{"function":{pattern:/[^`]\$\(.*?\)/,inside:{}}}},{pattern:/'([^']|'')*'/,greedy:!0}],namespace:/\[[a-z][\w\W]*?\]/i,"boolean":/\$(true|false)\b/i,variable:/\$\w+\b/i,"function":[/\b(Add-(Computer|Content|History|Member|PSSnapin|Type)|Checkpoint-Computer|Clear-(Content|EventLog|History|Item|ItemProperty|Variable)|Compare-Object|Complete-Transaction|Connect-PSSession|ConvertFrom-(Csv|Json|StringData)|Convert-Path|ConvertTo-(Csv|Html|Json|Xml)|Copy-(Item|ItemProperty)|Debug-Process|Disable-(ComputerRestore|PSBreakpoint|PSRemoting|PSSessionConfiguration)|Disconnect-PSSession|Enable-(ComputerRestore|PSBreakpoint|PSRemoting|PSSessionConfiguration)|Enter-PSSession|Exit-PSSession|Export-(Alias|Clixml|Console|Csv|FormatData|ModuleMember|PSSession)|ForEach-Object|Format-(Custom|List|Table|Wide)|Get-(Alias|ChildItem|Command|ComputerRestorePoint|Content|ControlPanelItem|Culture|Date|Event|EventLog|EventSubscriber|FormatData|Help|History|Host|HotFix|Item|ItemProperty|Job|Location|Member|Module|Process|PSBreakpoint|PSCallStack|PSDrive|PSProvider|PSSession|PSSessionConfiguration|PSSnapin|Random|Service|TraceSource|Transaction|TypeData|UICulture|Unique|Variable|WmiObject)|Group-Object|Import-(Alias|Clixml|Csv|LocalizedData|Module|PSSession)|Invoke-(Command|Expression|History|Item|RestMethod|WebRequest|WmiMethod)|Join-Path|Limit-EventLog|Measure-(Command|Object)|Move-(Item|ItemProperty)|New-(Alias|Event|EventLog|Item|ItemProperty|Module|ModuleManifest|Object|PSDrive|PSSession|PSSessionConfigurationFile|PSSessionOption|PSTransportOption|Service|TimeSpan|Variable|WebServiceProxy)|Out-(Default|File|GridView|Host|Null|Printer|String)|Pop-Location|Push-Location|Read-Host|Receive-(Job|PSSession)|Register-(EngineEvent|ObjectEvent|PSSessionConfiguration|WmiEvent)|Remove-(Computer|Event|EventLog|Item|ItemProperty|Job|Module|PSBreakpoint|PSDrive|PSSession|PSSnapin|TypeData|Variable|WmiObject)|Rename-(Computer|Item|ItemProperty)|Reset-ComputerMachinePassword|Resolve-Path|Restart-(Computer|Service)|Restore-Computer|Resume-(Job|Service)|Save-Help|Select-(Object|String|Xml)|Send-MailMessage|Set-(Alias|Content|Date|Item|ItemProperty|Location|PSBreakpoint|PSDebug|PSSessionConfiguration|Service|StrictMode|TraceSource|Variable|WmiInstance)|Show-(Command|ControlPanelItem|EventLog)|Sort-Object|Split-Path|Start-(Job|Process|Service|Sleep|Transaction)|Stop-(Computer|Job|Process|Service)|Suspend-(Job|Service)|Tee-Object|Test-(ComputerSecureChannel|Connection|ModuleManifest|Path|PSSessionConfigurationFile)|Trace-Command|Unblock-File|Undo-Transaction|Unregister-(Event|PSSessionConfiguration)|Update-(FormatData|Help|List|TypeData)|Use-Transaction|Wait-(Event|Job|Process)|Where-Object|Write-(Debug|Error|EventLog|Host|Output|Progress|Verbose|Warning))\b/i,/\b(ac|cat|chdir|clc|cli|clp|clv|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|ebp|echo|epal|epcsv|epsn|erase|fc|fl|ft|fw|gal|gbp|gc|gci|gcs|gdr|gi|gl|gm|gp|gps|group|gsv|gu|gv|gwmi|iex|ii|ipal|ipcsv|ipsn|irm|iwmi|iwr|kill|lp|ls|measure|mi|mount|move|mp|mv|nal|ndr|ni|nv|ogv|popd|ps|pushd|pwd|rbp|rd|rdr|ren|ri|rm|rmdir|rni|rnp|rp|rv|rvpa|rwmi|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls|sort|sp|spps|spsv|start|sv|swmi|tee|trcm|type|write)\b/i],keyword:/\b(Begin|Break|Catch|Class|Continue|Data|Define|Do|DynamicParam|Else|ElseIf|End|Exit|Filter|Finally|For|ForEach|From|Function|If|InlineScript|Parallel|Param|Process|Return|Sequence|Switch|Throw|Trap|Try|Until|Using|Var|While|Workflow)\b/i,operator:{pattern:/(\W?)(!|-(eq|ne|gt|ge|lt|le|sh[lr]|not|b?(and|x?or)|(Not)?(Like|Match|Contains|In)|Replace|Join|is(Not)?|as)\b|-[-=]?|\+[+=]?|[*\/%]=?)/i,lookbehind:!0},punctuation:/[|{}[\];(),.]/},Prism.languages.powershell.string[0].inside.boolean=Prism.languages.powershell.boolean,Prism.languages.powershell.string[0].inside.variable=Prism.languages.powershell.variable,Prism.languages.powershell.string[0].inside.function.inside=Prism.util.clone(Prism.languages.powershell); \ No newline at end of file diff --git a/app/bower_components/prism/components/prism-properties.js b/app/bower_components/prism/components/prism-properties.js new file mode 100644 index 0000000..ccba919 --- /dev/null +++ b/app/bower_components/prism/components/prism-properties.js @@ -0,0 +1,9 @@ +Prism.languages.properties = { + 'comment': /^[ \t]*[#!].*$/m, + 'attr-value': { + pattern: /(^[ \t]*(?:\\(?:\r\n|[\s\S])|[^\\\s:=])+?(?: *[=:] *| ))(?:\\(?:\r\n|[\s\S])|.)+/m, + lookbehind: true + }, + 'attr-name': /^[ \t]*(?:\\(?:\r\n|[\s\S])|[^\\\s:=])+?(?= *[ =:]| )/m, + 'punctuation': /[=:]/ +}; \ No newline at end of file diff --git a/app/bower_components/prism/components/prism-properties.min.js b/app/bower_components/prism/components/prism-properties.min.js new file mode 100644 index 0000000..818dc10 --- /dev/null +++ b/app/bower_components/prism/components/prism-properties.min.js @@ -0,0 +1 @@ +Prism.languages.properties={comment:/^[ \t]*[#!].*$/m,"attr-value":{pattern:/(^[ \t]*(?:\\(?:\r\n|[\s\S])|[^\\\s:=])+?(?: *[=:] *| ))(?:\\(?:\r\n|[\s\S])|.)+/m,lookbehind:!0},"attr-name":/^[ \t]*(?:\\(?:\r\n|[\s\S])|[^\\\s:=])+?(?= *[ =:]| )/m,punctuation:/[=:]/}; \ No newline at end of file diff --git a/app/bower_components/prism/components/prism-puppet.js b/app/bower_components/prism/components/prism-puppet.js index 620a60b..7035ad6 100644 --- a/app/bower_components/prism/components/prism-puppet.js +++ b/app/bower_components/prism/components/prism-puppet.js @@ -41,7 +41,7 @@ }, 'regex': { // Must be prefixed with the keyword "node" or a non-word char - pattern: /((?:\bnode\s+|[^\s\w\\]\s*))\/(?:[^\/\\]|\\[\s\S])+\/(?:[imx]+\b|\B)/, + pattern: /((?:\bnode\s+|[~=\(\[\{,]\s*|[=+]>\s*|^\s*))\/(?:[^\/\\]|\\[\s\S])+\/(?:[imx]+\b|\B)/, lookbehind: true, inside: { // Extended regexes must have the x flag. They can contain single-line comments. diff --git a/app/bower_components/prism/components/prism-puppet.min.js b/app/bower_components/prism/components/prism-puppet.min.js index 636e5c1..ee28707 100644 --- a/app/bower_components/prism/components/prism-puppet.min.js +++ b/app/bower_components/prism/components/prism-puppet.min.js @@ -1 +1 @@ -!function(e){e.languages.puppet={heredoc:[{pattern:/(@\("([^"\r\n\/):]+)"(?:\/[nrts$uL]*)?\).*(?:\r?\n|\r))(?:.*(?:\r?\n|\r))*?[ \t]*\|?[ \t]*-?[ \t]*\2/,lookbehind:!0,alias:"string",inside:{punctuation:/(?=\S).*\S(?= *$)/}},{pattern:/(@\(([^"\r\n\/):]+)(?:\/[nrts$uL]*)?\).*(?:\r?\n|\r))(?:.*(?:\r?\n|\r))*?[ \t]*\|?[ \t]*-?[ \t]*\2/,lookbehind:!0,alias:"string",inside:{punctuation:/(?=\S).*\S(?= *$)/}},{pattern:/@\("?(?:[^"\r\n\/):]+)"?(?:\/[nrts$uL]*)?\)/,alias:"string",inside:{punctuation:{pattern:/(\().+?(?=\))/,lookbehind:!0}}}],"multiline-comment":{pattern:/(^|[^\\])\/\*[\s\S]*?\*\//,lookbehind:!0,alias:"comment"},regex:{pattern:/((?:\bnode\s+|[^\s\w\\]\s*))\/(?:[^\/\\]|\\[\s\S])+\/(?:[imx]+\b|\B)/,lookbehind:!0,inside:{"extended-regex":{pattern:/^\/(?:[^\/\\]|\\[\s\S])+\/[im]*x[im]*$/,inside:{comment:/#.*/}}}},comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},string:{pattern:/(["'])(?:\$\{(?:[^'"}]|(["'])(?:(?!\2)[^\\]|\\[\s\S])*\2)+\}|(?!\1)[^\\]|\\[\s\S])*\1/,inside:{"double-quoted":{pattern:/^"[\s\S]*"$/,inside:{}}}},variable:{pattern:/\$(?:::)?\w+(?:::\w+)*/,inside:{punctuation:/::/}},"attr-name":/(?:\w+|\*)(?=\s*=>)/,"function":[{pattern:/(\.)(?!\d)\w+/,lookbehind:!0},/\b(?:contain|debug|err|fail|include|info|notice|realize|require|tag|warning)\b|\b(?!\d)\w+(?=\()/],number:/\b(?:0x[a-f\d]+|\d+(?:\.\d+)?(?:e-?\d+)?)\b/i,"boolean":/\b(?:true|false)\b/,keyword:/\b(?:application|attr|case|class|consumes|default|define|else|elsif|function|if|import|inherits|node|private|produces|type|undef|unless)\b/,datatype:{pattern:/\b(?:Any|Array|Boolean|Callable|Catalogentry|Class|Collection|Data|Default|Enum|Float|Hash|Integer|NotUndef|Numeric|Optional|Pattern|Regexp|Resource|Runtime|Scalar|String|Struct|Tuple|Type|Undef|Variant)\b/,alias:"symbol"},operator:/=[=~>]?|![=~]?|<(?:<\|?|[=~|-])?|>[>=]?|->?|~>|\|>?>?|[*\/%+?]|\b(?:and|in|or)\b/,punctuation:/[\[\]{}().,;]|:+/};var n=[{pattern:/(^|[^\\])\$\{(?:[^'"{}]|\{[^}]*\}|(["'])(?:(?!\2)[^\\]|\\[\s\S])*\2)+\}/,lookbehind:!0,inside:{"short-variable":{pattern:/(^\$\{)(?!\w+\()(?:::)?\w+(?:::\w+)*/,lookbehind:!0,alias:"variable",inside:{punctuation:/::/}},delimiter:{pattern:/^\$/,alias:"variable"},rest:e.util.clone(e.languages.puppet)}},{pattern:/(^|[^\\])\$(?:::)?\w+(?:::\w+)*/,lookbehind:!0,alias:"variable",inside:{punctuation:/::/}}];e.languages.puppet.heredoc[0].inside.interpolation=n,e.languages.puppet.string.inside["double-quoted"].inside.interpolation=n}(Prism); \ No newline at end of file +!function(e){e.languages.puppet={heredoc:[{pattern:/(@\("([^"\r\n\/):]+)"(?:\/[nrts$uL]*)?\).*(?:\r?\n|\r))(?:.*(?:\r?\n|\r))*?[ \t]*\|?[ \t]*-?[ \t]*\2/,lookbehind:!0,alias:"string",inside:{punctuation:/(?=\S).*\S(?= *$)/}},{pattern:/(@\(([^"\r\n\/):]+)(?:\/[nrts$uL]*)?\).*(?:\r?\n|\r))(?:.*(?:\r?\n|\r))*?[ \t]*\|?[ \t]*-?[ \t]*\2/,lookbehind:!0,alias:"string",inside:{punctuation:/(?=\S).*\S(?= *$)/}},{pattern:/@\("?(?:[^"\r\n\/):]+)"?(?:\/[nrts$uL]*)?\)/,alias:"string",inside:{punctuation:{pattern:/(\().+?(?=\))/,lookbehind:!0}}}],"multiline-comment":{pattern:/(^|[^\\])\/\*[\s\S]*?\*\//,lookbehind:!0,alias:"comment"},regex:{pattern:/((?:\bnode\s+|[~=\(\[\{,]\s*|[=+]>\s*|^\s*))\/(?:[^\/\\]|\\[\s\S])+\/(?:[imx]+\b|\B)/,lookbehind:!0,inside:{"extended-regex":{pattern:/^\/(?:[^\/\\]|\\[\s\S])+\/[im]*x[im]*$/,inside:{comment:/#.*/}}}},comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},string:{pattern:/(["'])(?:\$\{(?:[^'"}]|(["'])(?:(?!\2)[^\\]|\\[\s\S])*\2)+\}|(?!\1)[^\\]|\\[\s\S])*\1/,inside:{"double-quoted":{pattern:/^"[\s\S]*"$/,inside:{}}}},variable:{pattern:/\$(?:::)?\w+(?:::\w+)*/,inside:{punctuation:/::/}},"attr-name":/(?:\w+|\*)(?=\s*=>)/,"function":[{pattern:/(\.)(?!\d)\w+/,lookbehind:!0},/\b(?:contain|debug|err|fail|include|info|notice|realize|require|tag|warning)\b|\b(?!\d)\w+(?=\()/],number:/\b(?:0x[a-f\d]+|\d+(?:\.\d+)?(?:e-?\d+)?)\b/i,"boolean":/\b(?:true|false)\b/,keyword:/\b(?:application|attr|case|class|consumes|default|define|else|elsif|function|if|import|inherits|node|private|produces|type|undef|unless)\b/,datatype:{pattern:/\b(?:Any|Array|Boolean|Callable|Catalogentry|Class|Collection|Data|Default|Enum|Float|Hash|Integer|NotUndef|Numeric|Optional|Pattern|Regexp|Resource|Runtime|Scalar|String|Struct|Tuple|Type|Undef|Variant)\b/,alias:"symbol"},operator:/=[=~>]?|![=~]?|<(?:<\|?|[=~|-])?|>[>=]?|->?|~>|\|>?>?|[*\/%+?]|\b(?:and|in|or)\b/,punctuation:/[\[\]{}().,;]|:+/};var n=[{pattern:/(^|[^\\])\$\{(?:[^'"{}]|\{[^}]*\}|(["'])(?:(?!\2)[^\\]|\\[\s\S])*\2)+\}/,lookbehind:!0,inside:{"short-variable":{pattern:/(^\$\{)(?!\w+\()(?:::)?\w+(?:::\w+)*/,lookbehind:!0,alias:"variable",inside:{punctuation:/::/}},delimiter:{pattern:/^\$/,alias:"variable"},rest:e.util.clone(e.languages.puppet)}},{pattern:/(^|[^\\])\$(?:::)?\w+(?:::\w+)*/,lookbehind:!0,alias:"variable",inside:{punctuation:/::/}}];e.languages.puppet.heredoc[0].inside.interpolation=n,e.languages.puppet.string.inside["double-quoted"].inside.interpolation=n}(Prism); \ No newline at end of file diff --git a/app/bower_components/prism/components/prism-reason.js b/app/bower_components/prism/components/prism-reason.js new file mode 100644 index 0000000..eb18100 --- /dev/null +++ b/app/bower_components/prism/components/prism-reason.js @@ -0,0 +1,32 @@ +Prism.languages.reason = Prism.languages.extend('clike', { + 'comment': { + pattern: /(^|[^\\])\/\*[\w\W]*?\*\//, + lookbehind: true + }, + 'string': { + pattern: /"(\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/, + greedy: true + }, + // 'class-name' must be matched *after* 'constructor' defined below + 'class-name': /\b[A-Z]\w*/, + 'keyword': /\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/, + 'operator': /\.{3}|:[:=]|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:mod|land|lor|lxor|lsl|lsr|asr)\b/ +}); +Prism.languages.insertBefore('reason', 'class-name', { + 'character': { + pattern: /'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'])'/, + alias: 'string' + }, + 'constructor': { + // Negative look-ahead prevents from matching things like String.capitalize + pattern: /\b[A-Z]\w*\b(?!\s*\.)/, + alias: 'variable' + }, + 'label': { + pattern: /\b[a-z]\w*(?=::)/, + alias: 'symbol' + } +}); + +// We can't match functions property, so let's not even try. +delete Prism.languages.reason.function; \ No newline at end of file diff --git a/app/bower_components/prism/components/prism-reason.min.js b/app/bower_components/prism/components/prism-reason.min.js new file mode 100644 index 0000000..3833b2a --- /dev/null +++ b/app/bower_components/prism/components/prism-reason.min.js @@ -0,0 +1 @@ +Prism.languages.reason=Prism.languages.extend("clike",{comment:{pattern:/(^|[^\\])\/\*[\w\W]*?\*\//,lookbehind:!0},string:{pattern:/"(\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:mod|land|lor|lxor|lsl|lsr|asr)\b/}),Prism.languages.insertBefore("reason","class-name",{character:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'])'/,alias:"string"},constructor:{pattern:/\b[A-Z]\w*\b(?!\s*\.)/,alias:"variable"},label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete Prism.languages.reason.function; \ No newline at end of file diff --git a/app/bower_components/prism/components/prism-ruby.js b/app/bower_components/prism/components/prism-ruby.js index 10e8b50..dfd0a0f 100644 --- a/app/bower_components/prism/components/prism-ruby.js +++ b/app/bower_components/prism/components/prism-ruby.js @@ -64,19 +64,21 @@ }); Prism.languages.insertBefore('ruby', 'number', { - 'builtin': /\b(Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Stat|File|Fixnum|Fload|Hash|Integer|IO|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|String|Struct|TMS|Symbol|ThreadGroup|Thread|Time|TrueClass)\b/, + 'builtin': /\b(Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Stat|File|Fixnum|Float|Hash|Integer|IO|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|String|Struct|TMS|Symbol|ThreadGroup|Thread|Time|TrueClass)\b/, 'constant': /\b[A-Z][a-zA-Z_0-9]*(?:[?!]|\b)/ }); Prism.languages.ruby.string = [ { pattern: /%[qQiIwWxs]?([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\1/, + greedy: true, inside: { 'interpolation': interpolation } }, { pattern: /%[qQiIwWxs]?\((?:[^()\\]|\\[\s\S])*\)/, + greedy: true, inside: { 'interpolation': interpolation } @@ -84,24 +86,28 @@ { // Here we need to specifically allow interpolation pattern: /%[qQiIwWxs]?\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}/, + greedy: true, inside: { 'interpolation': interpolation } }, { pattern: /%[qQiIwWxs]?\[(?:[^\[\]\\]|\\[\s\S])*\]/, + greedy: true, inside: { 'interpolation': interpolation } }, { pattern: /%[qQiIwWxs]?<(?:[^<>\\]|\\[\s\S])*>/, + greedy: true, inside: { 'interpolation': interpolation } }, { pattern: /("|')(#\{[^}]+\}|\\(?:\r?\n|\r)|\\?.)*?\1/, + greedy: true, inside: { 'interpolation': interpolation } diff --git a/app/bower_components/prism/components/prism-ruby.min.js b/app/bower_components/prism/components/prism-ruby.min.js index 244c4e2..270b779 100644 --- a/app/bower_components/prism/components/prism-ruby.min.js +++ b/app/bower_components/prism/components/prism-ruby.min.js @@ -1 +1 @@ -!function(e){e.languages.ruby=e.languages.extend("clike",{comment:/#(?!\{[^\r\n]*?\}).*/,keyword:/\b(alias|and|BEGIN|begin|break|case|class|def|define_method|defined|do|each|else|elsif|END|end|ensure|false|for|if|in|module|new|next|nil|not|or|raise|redo|require|rescue|retry|return|self|super|then|throw|true|undef|unless|until|when|while|yield)\b/});var n={pattern:/#\{[^}]+\}/,inside:{delimiter:{pattern:/^#\{|\}$/,alias:"tag"},rest:e.util.clone(e.languages.ruby)}};e.languages.insertBefore("ruby","keyword",{regex:[{pattern:/%r([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\1[gim]{0,3}/,inside:{interpolation:n}},{pattern:/%r\((?:[^()\\]|\\[\s\S])*\)[gim]{0,3}/,inside:{interpolation:n}},{pattern:/%r\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}[gim]{0,3}/,inside:{interpolation:n}},{pattern:/%r\[(?:[^\[\]\\]|\\[\s\S])*\][gim]{0,3}/,inside:{interpolation:n}},{pattern:/%r<(?:[^<>\\]|\\[\s\S])*>[gim]{0,3}/,inside:{interpolation:n}},{pattern:/(^|[^\/])\/(?!\/)(\[.+?]|\\.|[^\/\r\n])+\/[gim]{0,3}(?=\s*($|[\r\n,.;})]))/,lookbehind:!0}],variable:/[@$]+[a-zA-Z_][a-zA-Z_0-9]*(?:[?!]|\b)/,symbol:/:[a-zA-Z_][a-zA-Z_0-9]*(?:[?!]|\b)/}),e.languages.insertBefore("ruby","number",{builtin:/\b(Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Stat|File|Fixnum|Fload|Hash|Integer|IO|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|String|Struct|TMS|Symbol|ThreadGroup|Thread|Time|TrueClass)\b/,constant:/\b[A-Z][a-zA-Z_0-9]*(?:[?!]|\b)/}),e.languages.ruby.string=[{pattern:/%[qQiIwWxs]?([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\1/,inside:{interpolation:n}},{pattern:/%[qQiIwWxs]?\((?:[^()\\]|\\[\s\S])*\)/,inside:{interpolation:n}},{pattern:/%[qQiIwWxs]?\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}/,inside:{interpolation:n}},{pattern:/%[qQiIwWxs]?\[(?:[^\[\]\\]|\\[\s\S])*\]/,inside:{interpolation:n}},{pattern:/%[qQiIwWxs]?<(?:[^<>\\]|\\[\s\S])*>/,inside:{interpolation:n}},{pattern:/("|')(#\{[^}]+\}|\\(?:\r?\n|\r)|\\?.)*?\1/,inside:{interpolation:n}}]}(Prism); \ No newline at end of file +!function(e){e.languages.ruby=e.languages.extend("clike",{comment:/#(?!\{[^\r\n]*?\}).*/,keyword:/\b(alias|and|BEGIN|begin|break|case|class|def|define_method|defined|do|each|else|elsif|END|end|ensure|false|for|if|in|module|new|next|nil|not|or|raise|redo|require|rescue|retry|return|self|super|then|throw|true|undef|unless|until|when|while|yield)\b/});var n={pattern:/#\{[^}]+\}/,inside:{delimiter:{pattern:/^#\{|\}$/,alias:"tag"},rest:e.util.clone(e.languages.ruby)}};e.languages.insertBefore("ruby","keyword",{regex:[{pattern:/%r([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\1[gim]{0,3}/,inside:{interpolation:n}},{pattern:/%r\((?:[^()\\]|\\[\s\S])*\)[gim]{0,3}/,inside:{interpolation:n}},{pattern:/%r\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}[gim]{0,3}/,inside:{interpolation:n}},{pattern:/%r\[(?:[^\[\]\\]|\\[\s\S])*\][gim]{0,3}/,inside:{interpolation:n}},{pattern:/%r<(?:[^<>\\]|\\[\s\S])*>[gim]{0,3}/,inside:{interpolation:n}},{pattern:/(^|[^\/])\/(?!\/)(\[.+?]|\\.|[^\/\r\n])+\/[gim]{0,3}(?=\s*($|[\r\n,.;})]))/,lookbehind:!0}],variable:/[@$]+[a-zA-Z_][a-zA-Z_0-9]*(?:[?!]|\b)/,symbol:/:[a-zA-Z_][a-zA-Z_0-9]*(?:[?!]|\b)/}),e.languages.insertBefore("ruby","number",{builtin:/\b(Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Stat|File|Fixnum|Float|Hash|Integer|IO|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|String|Struct|TMS|Symbol|ThreadGroup|Thread|Time|TrueClass)\b/,constant:/\b[A-Z][a-zA-Z_0-9]*(?:[?!]|\b)/}),e.languages.ruby.string=[{pattern:/%[qQiIwWxs]?([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\1/,greedy:!0,inside:{interpolation:n}},{pattern:/%[qQiIwWxs]?\((?:[^()\\]|\\[\s\S])*\)/,greedy:!0,inside:{interpolation:n}},{pattern:/%[qQiIwWxs]?\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}/,greedy:!0,inside:{interpolation:n}},{pattern:/%[qQiIwWxs]?\[(?:[^\[\]\\]|\\[\s\S])*\]/,greedy:!0,inside:{interpolation:n}},{pattern:/%[qQiIwWxs]?<(?:[^<>\\]|\\[\s\S])*>/,greedy:!0,inside:{interpolation:n}},{pattern:/("|')(#\{[^}]+\}|\\(?:\r?\n|\r)|\\?.)*?\1/,greedy:!0,inside:{interpolation:n}}]}(Prism); \ No newline at end of file diff --git a/app/bower_components/prism/components/prism-scss.js b/app/bower_components/prism/components/prism-scss.js index 837844f..a23c4ae 100644 --- a/app/bower_components/prism/components/prism-scss.js +++ b/app/bower_components/prism/components/prism-scss.js @@ -23,7 +23,12 @@ Prism.languages.scss = Prism.languages.extend('css', { // Initial look-ahead is used to prevent matching of blank selectors pattern: /(?=\S)[^@;\{\}\(\)]?([^@;\{\}\(\)]|&|#\{\$[-_\w]+\})+(?=\s*\{(\}|\s|[^\}]+(:|\{)[^\}]+))/m, inside: { - 'placeholder': /%[-_\w]+/ + 'parent': { + pattern: /&/, + alias: 'important' + }, + 'placeholder': /%[-_\w]+/, + 'variable': /\$[-_\w]+|#\{\$[-_\w]+\}/ } } }); @@ -38,7 +43,14 @@ Prism.languages.insertBefore('scss', 'atrule', { ] }); -Prism.languages.insertBefore('scss', 'property', { +Prism.languages.scss.property = { + pattern: /(?:[\w-]|\$[-_\w]+|#\{\$[-_\w]+\})+(?=\s*:)/i, + inside: { + 'variable': /\$[-_\w]+|#\{\$[-_\w]+\}/ + } +}; + +Prism.languages.insertBefore('scss', 'important', { // var and interpolated vars 'variable': /\$[-_\w]+|#\{\$[-_\w]+\}/ }); @@ -48,7 +60,10 @@ Prism.languages.insertBefore('scss', 'function', { pattern: /%[-_\w]+/, alias: 'selector' }, - 'statement': /\B!(?:default|optional)\b/i, + 'statement': { + pattern: /\B!(?:default|optional)\b/i, + alias: 'keyword' + }, 'boolean': /\b(?:true|false)\b/, 'null': /\bnull\b/, 'operator': { diff --git a/app/bower_components/prism/components/prism-scss.min.js b/app/bower_components/prism/components/prism-scss.min.js index 7cf5ad4..467f6ec 100644 --- a/app/bower_components/prism/components/prism-scss.min.js +++ b/app/bower_components/prism/components/prism-scss.min.js @@ -1 +1 @@ -Prism.languages.scss=Prism.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\w\W]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-]+(?:\([^()]+\)|[^(])*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)*url(?=\()/i,selector:{pattern:/(?=\S)[^@;\{\}\(\)]?([^@;\{\}\(\)]|&|#\{\$[-_\w]+\})+(?=\s*\{(\}|\s|[^\}]+(:|\{)[^\}]+))/m,inside:{placeholder:/%[-_\w]+/}}}),Prism.languages.insertBefore("scss","atrule",{keyword:[/@(?:if|else(?: if)?|for|each|while|import|extend|debug|warn|mixin|include|function|return|content)/i,{pattern:/( +)(?:from|through)(?= )/,lookbehind:!0}]}),Prism.languages.insertBefore("scss","property",{variable:/\$[-_\w]+|#\{\$[-_\w]+\}/}),Prism.languages.insertBefore("scss","function",{placeholder:{pattern:/%[-_\w]+/,alias:"selector"},statement:/\B!(?:default|optional)\b/i,"boolean":/\b(?:true|false)\b/,"null":/\bnull\b/,operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|or|not)(?=\s)/,lookbehind:!0}}),Prism.languages.scss.atrule.inside.rest=Prism.util.clone(Prism.languages.scss); \ No newline at end of file +Prism.languages.scss=Prism.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\w\W]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-]+(?:\([^()]+\)|[^(])*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)*url(?=\()/i,selector:{pattern:/(?=\S)[^@;\{\}\(\)]?([^@;\{\}\(\)]|&|#\{\$[-_\w]+\})+(?=\s*\{(\}|\s|[^\}]+(:|\{)[^\}]+))/m,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-_\w]+/,variable:/\$[-_\w]+|#\{\$[-_\w]+\}/}}}),Prism.languages.insertBefore("scss","atrule",{keyword:[/@(?:if|else(?: if)?|for|each|while|import|extend|debug|warn|mixin|include|function|return|content)/i,{pattern:/( +)(?:from|through)(?= )/,lookbehind:!0}]}),Prism.languages.scss.property={pattern:/(?:[\w-]|\$[-_\w]+|#\{\$[-_\w]+\})+(?=\s*:)/i,inside:{variable:/\$[-_\w]+|#\{\$[-_\w]+\}/}},Prism.languages.insertBefore("scss","important",{variable:/\$[-_\w]+|#\{\$[-_\w]+\}/}),Prism.languages.insertBefore("scss","function",{placeholder:{pattern:/%[-_\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},"boolean":/\b(?:true|false)\b/,"null":/\bnull\b/,operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|or|not)(?=\s)/,lookbehind:!0}}),Prism.languages.scss.atrule.inside.rest=Prism.util.clone(Prism.languages.scss); \ No newline at end of file diff --git a/app/bower_components/prism/components/prism-textile.js b/app/bower_components/prism/components/prism-textile.js index 4fa0a11..82d8c2a 100644 --- a/app/bower_components/prism/components/prism-textile.js +++ b/app/bower_components/prism/components/prism-textile.js @@ -236,6 +236,9 @@ 'mark': Prism.util.clone(Prism.languages.textile['phrase'].inside['mark']) }; + // Only allow alpha-numeric HTML tags, not XML tags + Prism.languages.textile.tag.pattern = /<\/?(?!\d)[a-z0-9]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i; + // Allow some nesting Prism.languages.textile['phrase'].inside['inline'].inside['bold'].inside = nestedPatterns; Prism.languages.textile['phrase'].inside['inline'].inside['italic'].inside = nestedPatterns; diff --git a/app/bower_components/prism/components/prism-textile.min.js b/app/bower_components/prism/components/prism-textile.min.js index 1dd8b59..93ad9e0 100644 --- a/app/bower_components/prism/components/prism-textile.min.js +++ b/app/bower_components/prism/components/prism-textile.min.js @@ -1 +1 @@ -!function(e){var i="(?:\\([^|)]+\\)|\\[[^\\]]+\\]|\\{[^}]+\\})+",n={css:{pattern:/\{[^}]+\}/,inside:{rest:e.languages.css}},"class-id":{pattern:/(\()[^)]+(?=\))/,lookbehind:!0,alias:"attr-value"},lang:{pattern:/(\[)[^\]]+(?=\])/,lookbehind:!0,alias:"attr-value"},punctuation:/[\\\/]\d+|\S/};e.languages.textile=e.languages.extend("markup",{phrase:{pattern:/(^|\r|\n)\S[\s\S]*?(?=$|\r?\n\r?\n|\r\r)/,lookbehind:!0,inside:{"block-tag":{pattern:RegExp("^[a-z]\\w*(?:"+i+"|[<>=()])*\\."),inside:{modifier:{pattern:RegExp("(^[a-z]\\w*)(?:"+i+"|[<>=()])+(?=\\.)"),lookbehind:!0,inside:e.util.clone(n)},tag:/^[a-z]\w*/,punctuation:/\.$/}},list:{pattern:RegExp("^[*#]+(?:"+i+")?\\s+.+","m"),inside:{modifier:{pattern:RegExp("(^[*#]+)"+i),lookbehind:!0,inside:e.util.clone(n)},punctuation:/^[*#]+/}},table:{pattern:RegExp("^(?:(?:"+i+"|[<>=()^~])+\\.\\s*)?(?:\\|(?:(?:"+i+"|[<>=()^~_]|[\\\\/]\\d+)+\\.)?[^|]*)+\\|","m"),inside:{modifier:{pattern:RegExp("(^|\\|(?:\\r?\\n|\\r)?)(?:"+i+"|[<>=()^~_]|[\\\\/]\\d+)+(?=\\.)"),lookbehind:!0,inside:e.util.clone(n)},punctuation:/\||^\./}},inline:{pattern:RegExp("(\\*\\*|__|\\?\\?|[*_%@+\\-^~])(?:"+i+")?.+?\\1"),inside:{bold:{pattern:RegExp("((^\\*\\*?)(?:"+i+")?).+?(?=\\2)"),lookbehind:!0},italic:{pattern:RegExp("((^__?)(?:"+i+")?).+?(?=\\2)"),lookbehind:!0},cite:{pattern:RegExp("(^\\?\\?(?:"+i+")?).+?(?=\\?\\?)"),lookbehind:!0,alias:"string"},code:{pattern:RegExp("(^@(?:"+i+")?).+?(?=@)"),lookbehind:!0,alias:"keyword"},inserted:{pattern:RegExp("(^\\+(?:"+i+")?).+?(?=\\+)"),lookbehind:!0},deleted:{pattern:RegExp("(^-(?:"+i+")?).+?(?=-)"),lookbehind:!0},span:{pattern:RegExp("(^%(?:"+i+")?).+?(?=%)"),lookbehind:!0},modifier:{pattern:RegExp("(^\\*\\*|__|\\?\\?|[*_%@+\\-^~])"+i),lookbehind:!0,inside:e.util.clone(n)},punctuation:/[*_%?@+\-^~]+/}},"link-ref":{pattern:/^\[[^\]]+\]\S+$/m,inside:{string:{pattern:/(\[)[^\]]+(?=\])/,lookbehind:!0},url:{pattern:/(\])\S+$/,lookbehind:!0},punctuation:/[\[\]]/}},link:{pattern:RegExp('"(?:'+i+')?[^"]+":.+?(?=[^\\w/]?(?:\\s|$))'),inside:{text:{pattern:RegExp('(^"(?:'+i+')?)[^"]+(?=")'),lookbehind:!0},modifier:{pattern:RegExp('(^")'+i),lookbehind:!0,inside:e.util.clone(n)},url:{pattern:/(:).+/,lookbehind:!0},punctuation:/[":]/}},image:{pattern:RegExp("!(?:"+i+"|[<>=()])*[^!\\s()]+(?:\\([^)]+\\))?!(?::.+?(?=[^\\w/]?(?:\\s|$)))?"),inside:{source:{pattern:RegExp("(^!(?:"+i+"|[<>=()])*)[^!\\s()]+(?:\\([^)]+\\))?(?=!)"),lookbehind:!0,alias:"url"},modifier:{pattern:RegExp("(^!)(?:"+i+"|[<>=()])+"),lookbehind:!0,inside:e.util.clone(n)},url:{pattern:/(:).+/,lookbehind:!0},punctuation:/[!:]/}},footnote:{pattern:/\b\[\d+\]/,alias:"comment",inside:{punctuation:/\[|\]/}},acronym:{pattern:/\b[A-Z\d]+\([^)]+\)/,inside:{comment:{pattern:/(\()[^)]+(?=\))/,lookbehind:!0},punctuation:/[()]/}},mark:{pattern:/\b\((TM|R|C)\)/,alias:"comment",inside:{punctuation:/[()]/}}}}});var t={inline:e.util.clone(e.languages.textile.phrase.inside.inline),link:e.util.clone(e.languages.textile.phrase.inside.link),image:e.util.clone(e.languages.textile.phrase.inside.image),footnote:e.util.clone(e.languages.textile.phrase.inside.footnote),acronym:e.util.clone(e.languages.textile.phrase.inside.acronym),mark:e.util.clone(e.languages.textile.phrase.inside.mark)};e.languages.textile.phrase.inside.inline.inside.bold.inside=t,e.languages.textile.phrase.inside.inline.inside.italic.inside=t,e.languages.textile.phrase.inside.inline.inside.inserted.inside=t,e.languages.textile.phrase.inside.inline.inside.deleted.inside=t,e.languages.textile.phrase.inside.inline.inside.span.inside=t,e.languages.textile.phrase.inside.table.inside.inline=t.inline,e.languages.textile.phrase.inside.table.inside.link=t.link,e.languages.textile.phrase.inside.table.inside.image=t.image,e.languages.textile.phrase.inside.table.inside.footnote=t.footnote,e.languages.textile.phrase.inside.table.inside.acronym=t.acronym,e.languages.textile.phrase.inside.table.inside.mark=t.mark}(Prism); \ No newline at end of file +!function(e){var i="(?:\\([^|)]+\\)|\\[[^\\]]+\\]|\\{[^}]+\\})+",n={css:{pattern:/\{[^}]+\}/,inside:{rest:e.languages.css}},"class-id":{pattern:/(\()[^)]+(?=\))/,lookbehind:!0,alias:"attr-value"},lang:{pattern:/(\[)[^\]]+(?=\])/,lookbehind:!0,alias:"attr-value"},punctuation:/[\\\/]\d+|\S/};e.languages.textile=e.languages.extend("markup",{phrase:{pattern:/(^|\r|\n)\S[\s\S]*?(?=$|\r?\n\r?\n|\r\r)/,lookbehind:!0,inside:{"block-tag":{pattern:RegExp("^[a-z]\\w*(?:"+i+"|[<>=()])*\\."),inside:{modifier:{pattern:RegExp("(^[a-z]\\w*)(?:"+i+"|[<>=()])+(?=\\.)"),lookbehind:!0,inside:e.util.clone(n)},tag:/^[a-z]\w*/,punctuation:/\.$/}},list:{pattern:RegExp("^[*#]+(?:"+i+")?\\s+.+","m"),inside:{modifier:{pattern:RegExp("(^[*#]+)"+i),lookbehind:!0,inside:e.util.clone(n)},punctuation:/^[*#]+/}},table:{pattern:RegExp("^(?:(?:"+i+"|[<>=()^~])+\\.\\s*)?(?:\\|(?:(?:"+i+"|[<>=()^~_]|[\\\\/]\\d+)+\\.)?[^|]*)+\\|","m"),inside:{modifier:{pattern:RegExp("(^|\\|(?:\\r?\\n|\\r)?)(?:"+i+"|[<>=()^~_]|[\\\\/]\\d+)+(?=\\.)"),lookbehind:!0,inside:e.util.clone(n)},punctuation:/\||^\./}},inline:{pattern:RegExp("(\\*\\*|__|\\?\\?|[*_%@+\\-^~])(?:"+i+")?.+?\\1"),inside:{bold:{pattern:RegExp("((^\\*\\*?)(?:"+i+")?).+?(?=\\2)"),lookbehind:!0},italic:{pattern:RegExp("((^__?)(?:"+i+")?).+?(?=\\2)"),lookbehind:!0},cite:{pattern:RegExp("(^\\?\\?(?:"+i+")?).+?(?=\\?\\?)"),lookbehind:!0,alias:"string"},code:{pattern:RegExp("(^@(?:"+i+")?).+?(?=@)"),lookbehind:!0,alias:"keyword"},inserted:{pattern:RegExp("(^\\+(?:"+i+")?).+?(?=\\+)"),lookbehind:!0},deleted:{pattern:RegExp("(^-(?:"+i+")?).+?(?=-)"),lookbehind:!0},span:{pattern:RegExp("(^%(?:"+i+")?).+?(?=%)"),lookbehind:!0},modifier:{pattern:RegExp("(^\\*\\*|__|\\?\\?|[*_%@+\\-^~])"+i),lookbehind:!0,inside:e.util.clone(n)},punctuation:/[*_%?@+\-^~]+/}},"link-ref":{pattern:/^\[[^\]]+\]\S+$/m,inside:{string:{pattern:/(\[)[^\]]+(?=\])/,lookbehind:!0},url:{pattern:/(\])\S+$/,lookbehind:!0},punctuation:/[\[\]]/}},link:{pattern:RegExp('"(?:'+i+')?[^"]+":.+?(?=[^\\w/]?(?:\\s|$))'),inside:{text:{pattern:RegExp('(^"(?:'+i+')?)[^"]+(?=")'),lookbehind:!0},modifier:{pattern:RegExp('(^")'+i),lookbehind:!0,inside:e.util.clone(n)},url:{pattern:/(:).+/,lookbehind:!0},punctuation:/[":]/}},image:{pattern:RegExp("!(?:"+i+"|[<>=()])*[^!\\s()]+(?:\\([^)]+\\))?!(?::.+?(?=[^\\w/]?(?:\\s|$)))?"),inside:{source:{pattern:RegExp("(^!(?:"+i+"|[<>=()])*)[^!\\s()]+(?:\\([^)]+\\))?(?=!)"),lookbehind:!0,alias:"url"},modifier:{pattern:RegExp("(^!)(?:"+i+"|[<>=()])+"),lookbehind:!0,inside:e.util.clone(n)},url:{pattern:/(:).+/,lookbehind:!0},punctuation:/[!:]/}},footnote:{pattern:/\b\[\d+\]/,alias:"comment",inside:{punctuation:/\[|\]/}},acronym:{pattern:/\b[A-Z\d]+\([^)]+\)/,inside:{comment:{pattern:/(\()[^)]+(?=\))/,lookbehind:!0},punctuation:/[()]/}},mark:{pattern:/\b\((TM|R|C)\)/,alias:"comment",inside:{punctuation:/[()]/}}}}});var t={inline:e.util.clone(e.languages.textile.phrase.inside.inline),link:e.util.clone(e.languages.textile.phrase.inside.link),image:e.util.clone(e.languages.textile.phrase.inside.image),footnote:e.util.clone(e.languages.textile.phrase.inside.footnote),acronym:e.util.clone(e.languages.textile.phrase.inside.acronym),mark:e.util.clone(e.languages.textile.phrase.inside.mark)};e.languages.textile.tag.pattern=/<\/?(?!\d)[a-z0-9]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i,e.languages.textile.phrase.inside.inline.inside.bold.inside=t,e.languages.textile.phrase.inside.inline.inside.italic.inside=t,e.languages.textile.phrase.inside.inline.inside.inserted.inside=t,e.languages.textile.phrase.inside.inline.inside.deleted.inside=t,e.languages.textile.phrase.inside.inline.inside.span.inside=t,e.languages.textile.phrase.inside.table.inside.inline=t.inline,e.languages.textile.phrase.inside.table.inside.link=t.link,e.languages.textile.phrase.inside.table.inside.image=t.image,e.languages.textile.phrase.inside.table.inside.footnote=t.footnote,e.languages.textile.phrase.inside.table.inside.acronym=t.acronym,e.languages.textile.phrase.inside.table.inside.mark=t.mark}(Prism); \ No newline at end of file diff --git a/app/bower_components/prism/components/prism-typescript.js b/app/bower_components/prism/components/prism-typescript.js index 7f7b582..dde12ce 100755 --- a/app/bower_components/prism/components/prism-typescript.js +++ b/app/bower_components/prism/components/prism-typescript.js @@ -1,3 +1,5 @@ Prism.languages.typescript = Prism.languages.extend('javascript', { - 'keyword': /\b(break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|function|get|if|implements|import|in|instanceof|interface|let|new|null|package|private|protected|public|return|set|static|super|switch|this|throw|true|try|typeof|var|void|while|with|yield|module|declare|constructor|string|Function|any|number|boolean|Array|enum)\b/ + 'keyword': /\b(break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|package|private|protected|public|return|set|static|super|switch|this|throw|true|try|typeof|var|void|while|with|yield|module|declare|constructor|string|Function|any|number|boolean|Array|enum)\b/ }); + +Prism.languages.ts = Prism.languages.typescript; \ No newline at end of file diff --git a/app/bower_components/prism/components/prism-typescript.min.js b/app/bower_components/prism/components/prism-typescript.min.js index 8b6575e..9a0e4cc 100755 --- a/app/bower_components/prism/components/prism-typescript.min.js +++ b/app/bower_components/prism/components/prism-typescript.min.js @@ -1 +1 @@ -Prism.languages.typescript=Prism.languages.extend("javascript",{keyword:/\b(break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|function|get|if|implements|import|in|instanceof|interface|let|new|null|package|private|protected|public|return|set|static|super|switch|this|throw|true|try|typeof|var|void|while|with|yield|module|declare|constructor|string|Function|any|number|boolean|Array|enum)\b/}); \ No newline at end of file +Prism.languages.typescript=Prism.languages.extend("javascript",{keyword:/\b(break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|package|private|protected|public|return|set|static|super|switch|this|throw|true|try|typeof|var|void|while|with|yield|module|declare|constructor|string|Function|any|number|boolean|Array|enum)\b/}),Prism.languages.ts=Prism.languages.typescript; \ No newline at end of file diff --git a/app/bower_components/prism/components/prism-xojo.js b/app/bower_components/prism/components/prism-xojo.js new file mode 100644 index 0000000..ede0cd0 --- /dev/null +++ b/app/bower_components/prism/components/prism-xojo.js @@ -0,0 +1,20 @@ +Prism.languages.xojo = { + 'comment': { + pattern: /(?:'|\/\/|Rem\b).+/i, + inside: { + 'keyword': /^Rem/i + } + }, + 'string': { + pattern: /"(?:""|[^"])*"/, + greedy: true + }, + 'number': [ + /(?:\b|\B[.-])(?:\d+\.?\d*)(?:E[+-]?\d+)?/i, + /&[bchou][a-z\d]+/i + ], + 'symbol': /#(?:If|Else|ElseIf|Endif|Pragma)\b/i, + 'keyword': /\b(?:AddHandler|App|Array|As(?:signs)?|By(?:Ref|Val)|Break|Call|Case|Catch|Const|Continue|CurrentMethodName|Declare|Dim|Do(?:wnTo)?|Each|Else(?:If)?|End|Exit|Extends|False|Finally|For|Global|If|In|Lib|Loop|Me|Next|Nil|Optional|ParamArray|Raise(?:Event)?|ReDim|Rem|RemoveHandler|Return|Select|Self|Soft|Static|Step|Super|Then|To|True|Try|Ubound|Until|Using|Wend|While)\b/i, + 'operator': /<[=>]?|>=?|[+\-*\/\\^=]|\b(?:AddressOf|And|Ctype|IsA?|Mod|New|Not|Or|Xor|WeakAddressOf)\b/i, + 'punctuation': /[.,;:()]/ +}; \ No newline at end of file diff --git a/app/bower_components/prism/components/prism-xojo.min.js b/app/bower_components/prism/components/prism-xojo.min.js new file mode 100644 index 0000000..8487890 --- /dev/null +++ b/app/bower_components/prism/components/prism-xojo.min.js @@ -0,0 +1 @@ +Prism.languages.xojo={comment:{pattern:/(?:'|\/\/|Rem\b).+/i,inside:{keyword:/^Rem/i}},string:{pattern:/"(?:""|[^"])*"/,greedy:!0},number:[/(?:\b|\B[.-])(?:\d+\.?\d*)(?:E[+-]?\d+)?/i,/&[bchou][a-z\d]+/i],symbol:/#(?:If|Else|ElseIf|Endif|Pragma)\b/i,keyword:/\b(?:AddHandler|App|Array|As(?:signs)?|By(?:Ref|Val)|Break|Call|Case|Catch|Const|Continue|CurrentMethodName|Declare|Dim|Do(?:wnTo)?|Each|Else(?:If)?|End|Exit|Extends|False|Finally|For|Global|If|In|Lib|Loop|Me|Next|Nil|Optional|ParamArray|Raise(?:Event)?|ReDim|Rem|RemoveHandler|Return|Select|Self|Soft|Static|Step|Super|Then|To|True|Try|Ubound|Until|Using|Wend|While)\b/i,operator:/<[=>]?|>=?|[+\-*\/\\^=]|\b(?:AddressOf|And|Ctype|IsA?|Mod|New|Not|Or|Xor|WeakAddressOf)\b/i,punctuation:/[.,;:()]/}; \ No newline at end of file diff --git a/app/bower_components/prism/package.json b/app/bower_components/prism/package.json index 4ae0326..85178c3 100644 --- a/app/bower_components/prism/package.json +++ b/app/bower_components/prism/package.json @@ -1,6 +1,6 @@ { "name": "prismjs", - "version": "1.5.1", + "version": "1.6.0", "description": "Lightweight, robust, elegant syntax highlighting. A spin-off project from Dabblet.", "main": "prism.js", "scripts": { @@ -17,6 +17,9 @@ "author": "Lea Verou", "license": "MIT", "readmeFilename": "README.md", + "optionalDependencies": { + "clipboard": "^1.5.5" + }, "devDependencies": { "chai": "^2.3.0", "gulp": "^3.8.6", diff --git a/app/bower_components/prism/plugins/autolinker/prism-autolinker.js b/app/bower_components/prism/plugins/autolinker/prism-autolinker.js index e56303f..03b6815 100644 --- a/app/bower_components/prism/plugins/autolinker/prism-autolinker.js +++ b/app/bower_components/prism/plugins/autolinker/prism-autolinker.js @@ -14,36 +14,42 @@ var url = /\b([a-z]{3,7}:\/\/|tel:)[\w\-+%~/.:#=?&]+/, // Tokens that may contain URLs and emails candidates = ['comment', 'url', 'attr-value', 'string']; -Prism.hooks.add('before-highlight', function(env) { - // Abort if grammar has already been processed - if (!env.grammar || env.grammar['url-link']) { - return; - } - Prism.languages.DFS(env.grammar, function (key, def, type) { - if (candidates.indexOf(type) > -1 && Prism.util.type(def) !== 'Array') { - if (!def.pattern) { - def = this[key] = { - pattern: def - }; - } +Prism.plugins.autolinker = { + processGrammar: function (grammar) { + // Abort if grammar has already been processed + if (!grammar || grammar['url-link']) { + return; + } + Prism.languages.DFS(grammar, function (key, def, type) { + if (candidates.indexOf(type) > -1 && Prism.util.type(def) !== 'Array') { + if (!def.pattern) { + def = this[key] = { + pattern: def + }; + } - def.inside = def.inside || {}; + def.inside = def.inside || {}; - if (type == 'comment') { - def.inside['md-link'] = linkMd; - } - if (type == 'attr-value') { - Prism.languages.insertBefore('inside', 'punctuation', { 'url-link': url }, def); - } - else { - def.inside['url-link'] = url; + if (type == 'comment') { + def.inside['md-link'] = linkMd; + } + if (type == 'attr-value') { + Prism.languages.insertBefore('inside', 'punctuation', { 'url-link': url }, def); + } + else { + def.inside['url-link'] = url; + } + + def.inside['email-link'] = email; } + }); + grammar['url-link'] = url; + grammar['email-link'] = email; + } +}; - def.inside['email-link'] = email; - } - }); - env.grammar['url-link'] = url; - env.grammar['email-link'] = email; +Prism.hooks.add('before-highlight', function(env) { + Prism.plugins.autolinker.processGrammar(env.grammar); }); Prism.hooks.add('wrap', function(env) { diff --git a/app/bower_components/prism/plugins/autolinker/prism-autolinker.min.js b/app/bower_components/prism/plugins/autolinker/prism-autolinker.min.js index 3e2aece..de389b8 100644 --- a/app/bower_components/prism/plugins/autolinker/prism-autolinker.min.js +++ b/app/bower_components/prism/plugins/autolinker/prism-autolinker.min.js @@ -1 +1 @@ -!function(){if(("undefined"==typeof self||self.Prism)&&("undefined"==typeof global||global.Prism)){var i=/\b([a-z]{3,7}:\/\/|tel:)[\w\-+%~\/.:#=?&]+/,n=/\b\S+@[\w.]+[a-z]{2}/,e=/\[([^\]]+)]\(([^)]+)\)/,t=["comment","url","attr-value","string"];Prism.hooks.add("before-highlight",function(a){a.grammar&&!a.grammar["url-link"]&&(Prism.languages.DFS(a.grammar,function(a,r,l){t.indexOf(l)>-1&&"Array"!==Prism.util.type(r)&&(r.pattern||(r=this[a]={pattern:r}),r.inside=r.inside||{},"comment"==l&&(r.inside["md-link"]=e),"attr-value"==l?Prism.languages.insertBefore("inside","punctuation",{"url-link":i},r):r.inside["url-link"]=i,r.inside["email-link"]=n)}),a.grammar["url-link"]=i,a.grammar["email-link"]=n)}),Prism.hooks.add("wrap",function(i){if(/-link$/.test(i.type)){i.tag="a";var n=i.content;if("email-link"==i.type&&0!=n.indexOf("mailto:"))n="mailto:"+n;else if("md-link"==i.type){var t=i.content.match(e);n=t[2],i.content=t[1]}i.attributes.href=n}})}}(); \ No newline at end of file +!function(){if(("undefined"==typeof self||self.Prism)&&("undefined"==typeof global||global.Prism)){var i=/\b([a-z]{3,7}:\/\/|tel:)[\w\-+%~\/.:#=?&]+/,n=/\b\S+@[\w.]+[a-z]{2}/,e=/\[([^\]]+)]\(([^)]+)\)/,t=["comment","url","attr-value","string"];Prism.plugins.autolinker={processGrammar:function(a){a&&!a["url-link"]&&(Prism.languages.DFS(a,function(a,r,l){t.indexOf(l)>-1&&"Array"!==Prism.util.type(r)&&(r.pattern||(r=this[a]={pattern:r}),r.inside=r.inside||{},"comment"==l&&(r.inside["md-link"]=e),"attr-value"==l?Prism.languages.insertBefore("inside","punctuation",{"url-link":i},r):r.inside["url-link"]=i,r.inside["email-link"]=n)}),a["url-link"]=i,a["email-link"]=n)}},Prism.hooks.add("before-highlight",function(i){Prism.plugins.autolinker.processGrammar(i.grammar)}),Prism.hooks.add("wrap",function(i){if(/-link$/.test(i.type)){i.tag="a";var n=i.content;if("email-link"==i.type&&0!=n.indexOf("mailto:"))n="mailto:"+n;else if("md-link"==i.type){var t=i.content.match(e);n=t[2],i.content=t[1]}i.attributes.href=n}})}}(); \ No newline at end of file diff --git a/app/bower_components/prism/plugins/autoloader/prism-autoloader.js b/app/bower_components/prism/plugins/autoloader/prism-autoloader.js index 849f281..10f6fea 100644 --- a/app/bower_components/prism/plugins/autoloader/prism-autoloader.js +++ b/app/bower_components/prism/plugins/autoloader/prism-autoloader.js @@ -4,10 +4,12 @@ } // The dependencies map is built automatically with gulp - var lang_dependencies = /*languages_placeholder[*/{"javascript":"clike","actionscript":"javascript","aspnet":"markup","bison":"c","c":"clike","csharp":"clike","cpp":"c","coffeescript":"javascript","crystal":"ruby","css-extras":"css","d":"clike","dart":"clike","fsharp":"clike","glsl":"clike","go":"clike","groovy":"clike","haml":"ruby","handlebars":"markup","haxe":"clike","jade":"javascript","java":"clike","kotlin":"clike","less":"css","markdown":"markup","nginx":"clike","objectivec":"c","parser":"markup","php":"clike","php-extras":"php","processing":"clike","protobuf":"clike","qore":"clike","jsx":["markup","javascript"],"ruby":"clike","sass":"css","scss":"css","scala":"java","smarty":"markup","swift":"clike","textile":"markup","twig":"markup","typescript":"javascript","wiki":"markup"}/*]*/; + var lang_dependencies = /*languages_placeholder[*/{"javascript":"clike","actionscript":"javascript","aspnet":"markup","bison":"c","c":"clike","csharp":"clike","cpp":"c","coffeescript":"javascript","crystal":"ruby","css-extras":"css","d":"clike","dart":"clike","fsharp":"clike","glsl":"clike","go":"clike","groovy":"clike","haml":"ruby","handlebars":"markup","haxe":"clike","jade":"javascript","java":"clike","jolie":"clike","kotlin":"clike","less":"css","markdown":"markup","nginx":"clike","objectivec":"c","parser":"markup","php":"clike","php-extras":"php","processing":"clike","protobuf":"clike","qore":"clike","jsx":["markup","javascript"],"reason":"clike","ruby":"clike","sass":"css","scss":"css","scala":"java","smarty":"markup","swift":"clike","textile":"markup","twig":"markup","typescript":"javascript","wiki":"markup"}/*]*/; var lang_data = {}; + var ignored_language = 'none'; + var config = Prism.plugins.autoloader = { languages_path: 'components/', use_minified: true @@ -187,7 +189,9 @@ Prism.hooks.add('complete', function (env) { if (env.element && env.language && !env.grammar) { - registerElement(env.language, env.element); + if (env.language !== ignored_language) { + registerElement(env.language, env.element); + } } }); diff --git a/app/bower_components/prism/plugins/autoloader/prism-autoloader.min.js b/app/bower_components/prism/plugins/autoloader/prism-autoloader.min.js index eade074..5b2d277 100644 --- a/app/bower_components/prism/plugins/autoloader/prism-autoloader.min.js +++ b/app/bower_components/prism/plugins/autoloader/prism-autoloader.min.js @@ -1 +1 @@ -!function(){if("undefined"!=typeof self&&self.Prism&&self.document&&document.createElement){var e={javascript:"clike",actionscript:"javascript",aspnet:"markup",bison:"c",c:"clike",csharp:"clike",cpp:"c",coffeescript:"javascript",crystal:"ruby","css-extras":"css",d:"clike",dart:"clike",fsharp:"clike",glsl:"clike",go:"clike",groovy:"clike",haml:"ruby",handlebars:"markup",haxe:"clike",jade:"javascript",java:"clike",kotlin:"clike",less:"css",markdown:"markup",nginx:"clike",objectivec:"c",parser:"markup",php:"clike","php-extras":"php",processing:"clike",protobuf:"clike",qore:"clike",jsx:["markup","javascript"],ruby:"clike",sass:"css",scss:"css",scala:"java",smarty:"markup",swift:"clike",textile:"markup",twig:"markup",typescript:"javascript",wiki:"markup"},c={},a=Prism.plugins.autoloader={languages_path:"components/",use_minified:!0},s=function(e,c,a){var s=document.createElement("script");s.src=e,s.async=!0,s.onload=function(){document.body.removeChild(s),c&&c()},s.onerror=function(){document.body.removeChild(s),a&&a()},document.body.appendChild(s)},r=function(e){return a.languages_path+"prism-"+e+(a.use_minified?".min":"")+".js"},n=function(e,a){var s=c[e];s||(s=c[e]={});var r=a.getAttribute("data-dependencies");!r&&a.parentNode&&"pre"===a.parentNode.tagName.toLowerCase()&&(r=a.parentNode.getAttribute("data-dependencies")),r=r?r.split(/\s*,\s*/g):[],i(r,function(){t(e,function(){Prism.highlightElement(a)})})},i=function(e,c,a){"string"==typeof e&&(e=[e]);var s=0,r=e.length,n=function(){r>s?t(e[s],function(){s++,n()},function(){a&&a(e[s])}):s===r&&c&&c(e)};n()},t=function(a,n,t){var u=function(){var e=!1;a.indexOf("!")>=0&&(e=!0,a=a.replace("!",""));var i=c[a];if(i||(i=c[a]={}),n&&(i.success_callbacks||(i.success_callbacks=[]),i.success_callbacks.push(n)),t&&(i.error_callbacks||(i.error_callbacks=[]),i.error_callbacks.push(t)),!e&&Prism.languages[a])l(a);else if(!e&&i.error)o(a);else if(e||!i.loading){i.loading=!0;var u=r(a);s(u,function(){i.loading=!1,l(a)},function(){i.loading=!1,i.error=!0,o(a)})}},p=e[a];p&&p.length?i(p,u):u()},l=function(e){c[e]&&c[e].success_callbacks&&c[e].success_callbacks.length&&c[e].success_callbacks.forEach(function(c){c(e)})},o=function(e){c[e]&&c[e].error_callbacks&&c[e].error_callbacks.length&&c[e].error_callbacks.forEach(function(c){c(e)})};Prism.hooks.add("complete",function(e){e.element&&e.language&&!e.grammar&&n(e.language,e.element)})}}(); \ No newline at end of file +!function(){if("undefined"!=typeof self&&self.Prism&&self.document&&document.createElement){var e={javascript:"clike",actionscript:"javascript",aspnet:"markup",bison:"c",c:"clike",csharp:"clike",cpp:"c",coffeescript:"javascript",crystal:"ruby","css-extras":"css",d:"clike",dart:"clike",fsharp:"clike",glsl:"clike",go:"clike",groovy:"clike",haml:"ruby",handlebars:"markup",haxe:"clike",jade:"javascript",java:"clike",jolie:"clike",kotlin:"clike",less:"css",markdown:"markup",nginx:"clike",objectivec:"c",parser:"markup",php:"clike","php-extras":"php",processing:"clike",protobuf:"clike",qore:"clike",jsx:["markup","javascript"],reason:"clike",ruby:"clike",sass:"css",scss:"css",scala:"java",smarty:"markup",swift:"clike",textile:"markup",twig:"markup",typescript:"javascript",wiki:"markup"},c={},a="none",s=Prism.plugins.autoloader={languages_path:"components/",use_minified:!0},n=function(e,c,a){var s=document.createElement("script");s.src=e,s.async=!0,s.onload=function(){document.body.removeChild(s),c&&c()},s.onerror=function(){document.body.removeChild(s),a&&a()},document.body.appendChild(s)},r=function(e){return s.languages_path+"prism-"+e+(s.use_minified?".min":"")+".js"},i=function(e,a){var s=c[e];s||(s=c[e]={});var n=a.getAttribute("data-dependencies");!n&&a.parentNode&&"pre"===a.parentNode.tagName.toLowerCase()&&(n=a.parentNode.getAttribute("data-dependencies")),n=n?n.split(/\s*,\s*/g):[],l(n,function(){t(e,function(){Prism.highlightElement(a)})})},l=function(e,c,a){"string"==typeof e&&(e=[e]);var s=0,n=e.length,r=function(){n>s?t(e[s],function(){s++,r()},function(){a&&a(e[s])}):s===n&&c&&c(e)};r()},t=function(a,s,i){var t=function(){var e=!1;a.indexOf("!")>=0&&(e=!0,a=a.replace("!",""));var l=c[a];if(l||(l=c[a]={}),s&&(l.success_callbacks||(l.success_callbacks=[]),l.success_callbacks.push(s)),i&&(l.error_callbacks||(l.error_callbacks=[]),l.error_callbacks.push(i)),!e&&Prism.languages[a])o(a);else if(!e&&l.error)u(a);else if(e||!l.loading){l.loading=!0;var t=r(a);n(t,function(){l.loading=!1,o(a)},function(){l.loading=!1,l.error=!0,u(a)})}},p=e[a];p&&p.length?l(p,t):t()},o=function(e){c[e]&&c[e].success_callbacks&&c[e].success_callbacks.length&&c[e].success_callbacks.forEach(function(c){c(e)})},u=function(e){c[e]&&c[e].error_callbacks&&c[e].error_callbacks.length&&c[e].error_callbacks.forEach(function(c){c(e)})};Prism.hooks.add("complete",function(e){e.element&&e.language&&!e.grammar&&e.language!==a&&i(e.language,e.element)})}}(); \ No newline at end of file diff --git a/app/bower_components/prism/plugins/command-line/prism-command-line.js b/app/bower_components/prism/plugins/command-line/prism-command-line.js index 9799061..89e3673 100644 --- a/app/bower_components/prism/plugins/command-line/prism-command-line.js +++ b/app/bower_components/prism/plugins/command-line/prism-command-line.js @@ -34,14 +34,18 @@ Prism.hooks.add('complete', function (env) { pre.className += ' command-line'; } + var getAttribute = function(key, defaultValue) { + return (pre.getAttribute(key) || defaultValue).replace(/"/g, '"'); + }; + // Create the "rows" that will become the command-line prompts. -- cwells var lines = new Array(1 + env.code.split('\n').length); - var promptText = pre.getAttribute('data-prompt') || ''; + var promptText = getAttribute('data-prompt', ''); if (promptText !== '') { lines = lines.join(''); } else { - var user = pre.getAttribute('data-user') || 'user'; - var host = pre.getAttribute('data-host') || 'localhost'; + var user = getAttribute('data-user', 'user'); + var host = getAttribute('data-host', 'localhost'); lines = lines.join(''); } diff --git a/app/bower_components/prism/plugins/command-line/prism-command-line.min.js b/app/bower_components/prism/plugins/command-line/prism-command-line.min.js index 23c6bea..6e40c05 100644 --- a/app/bower_components/prism/plugins/command-line/prism-command-line.min.js +++ b/app/bower_components/prism/plugins/command-line/prism-command-line.min.js @@ -1 +1 @@ -!function(){"undefined"!=typeof self&&self.Prism&&self.document&&Prism.hooks.add("complete",function(e){if(e.code){var t=e.element.parentNode,a=/\s*\bcommand-line\b\s*/;if(t&&/pre/i.test(t.nodeName)&&(a.test(t.className)||a.test(e.element.className))&&!e.element.querySelector(".command-line-prompt")){a.test(e.element.className)&&(e.element.className=e.element.className.replace(a,"")),a.test(t.className)||(t.className+=" command-line");var n=new Array(1+e.code.split("\n").length),s=t.getAttribute("data-prompt")||"";if(""!==s)n=n.join('');else{var r=t.getAttribute("data-user")||"user",l=t.getAttribute("data-host")||"localhost";n=n.join('')}var m=document.createElement("span");m.className="command-line-prompt",m.innerHTML=n;var o=t.getAttribute("data-output")||"";o=o.split(",");for(var i=0;i=u&&u<=m.children.length;u++){var N=m.children[u-1];N.removeAttribute("data-user"),N.removeAttribute("data-host"),N.removeAttribute("data-prompt")}}e.element.innerHTML=m.outerHTML+e.element.innerHTML}}})}(); \ No newline at end of file +!function(){"undefined"!=typeof self&&self.Prism&&self.document&&Prism.hooks.add("complete",function(e){if(e.code){var t=e.element.parentNode,a=/\s*\bcommand-line\b\s*/;if(t&&/pre/i.test(t.nodeName)&&(a.test(t.className)||a.test(e.element.className))&&!e.element.querySelector(".command-line-prompt")){a.test(e.element.className)&&(e.element.className=e.element.className.replace(a,"")),a.test(t.className)||(t.className+=" command-line");var n=function(e,a){return(t.getAttribute(e)||a).replace(/"/g,""")},s=new Array(1+e.code.split("\n").length),r=n("data-prompt","");if(""!==r)s=s.join('');else{var l=n("data-user","user"),m=n("data-host","localhost");s=s.join('')}var o=document.createElement("span");o.className="command-line-prompt",o.innerHTML=s;var i=t.getAttribute("data-output")||"";i=i.split(",");for(var c=0;c=f&&f<=o.children.length;f++){var N=o.children[f-1];N.removeAttribute("data-user"),N.removeAttribute("data-host"),N.removeAttribute("data-prompt")}}e.element.innerHTML=o.outerHTML+e.element.innerHTML}}})}(); \ No newline at end of file diff --git a/app/bower_components/prism/plugins/copy-to-clipboard/prism-copy-to-clipboard.js b/app/bower_components/prism/plugins/copy-to-clipboard/prism-copy-to-clipboard.js new file mode 100644 index 0000000..3739766 --- /dev/null +++ b/app/bower_components/prism/plugins/copy-to-clipboard/prism-copy-to-clipboard.js @@ -0,0 +1,75 @@ +(function(){ + if (typeof self === 'undefined' || !self.Prism || !self.document) { + return; + } + + if (!Prism.plugins.toolbar) { + console.warn('Copy to Clipboard plugin loaded before Toolbar plugin.'); + + return; + } + + var Clipboard = window.Clipboard || undefined; + + if (!Clipboard && typeof require === 'function') { + Clipboard = require('clipboard'); + } + + var callbacks = []; + + if (!Clipboard) { + var script = document.createElement('script'); + var head = document.querySelector('head'); + + script.onload = function() { + Clipboard = window.Clipboard; + + if (Clipboard) { + while (callbacks.length) { + callbacks.pop()(); + } + } + }; + + script.src = 'https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.5.8/clipboard.min.js'; + head.appendChild(script); + } + + Prism.plugins.toolbar.registerButton('copy-to-clipboard', function (env) { + var linkCopy = document.createElement('a'); + linkCopy.textContent = 'Copy'; + + if (!Clipboard) { + callbacks.push(registerClipboard); + } else { + registerClipboard(); + } + + return linkCopy; + + function registerClipboard() { + var clip = new Clipboard(linkCopy, { + 'text': function () { + return env.code; + } + }); + + clip.on('success', function() { + linkCopy.textContent = 'Copied!'; + + resetText(); + }); + clip.on('error', function () { + linkCopy.textContent = 'Press Ctrl+C to copy'; + + resetText(); + }); + } + + function resetText() { + setTimeout(function () { + linkCopy.textContent = 'Copy'; + }, 5000); + } + }); +})(); diff --git a/app/bower_components/prism/plugins/copy-to-clipboard/prism-copy-to-clipboard.min.js b/app/bower_components/prism/plugins/copy-to-clipboard/prism-copy-to-clipboard.min.js new file mode 100644 index 0000000..5153ba6 --- /dev/null +++ b/app/bower_components/prism/plugins/copy-to-clipboard/prism-copy-to-clipboard.min.js @@ -0,0 +1 @@ +!function(){if("undefined"!=typeof self&&self.Prism&&self.document){if(!Prism.plugins.toolbar)return console.warn("Copy to Clipboard plugin loaded before Toolbar plugin."),void 0;var o=window.Clipboard||void 0;o||"function"!=typeof require||(o=require("clipboard"));var e=[];if(!o){var t=document.createElement("script"),n=document.querySelector("head");t.onload=function(){if(o=window.Clipboard)for(;e.length;)e.pop()()},t.src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.5.8/clipboard.min.js",n.appendChild(t)}Prism.plugins.toolbar.registerButton("copy-to-clipboard",function(t){function n(){var e=new o(i,{text:function(){return t.code}});e.on("success",function(){i.textContent="Copied!",r()}),e.on("error",function(){i.textContent="Press Ctrl+C to copy",r()})}function r(){setTimeout(function(){i.textContent="Copy"},5e3)}var i=document.createElement("a");return i.textContent="Copy",o?n():e.push(n),i})}}(); \ No newline at end of file diff --git a/app/bower_components/prism/plugins/custom-class/prism-custom-class.js b/app/bower_components/prism/plugins/custom-class/prism-custom-class.js new file mode 100644 index 0000000..e12f847 --- /dev/null +++ b/app/bower_components/prism/plugins/custom-class/prism-custom-class.js @@ -0,0 +1,29 @@ +(function(){ + +if ( + (typeof self === 'undefined' || !self.Prism) && + (typeof global === 'undefined' || !global.Prism) +) { + return; +} + +var options = {}; +Prism.plugins.customClass = { + map: function map(cm) { + options.classMap = cm; + }, + prefix: function prefix(string) { + options.prefixString = string; + } +} + +Prism.hooks.add('wrap', function (env) { + if (!options.classMap && !options.prefixString) { + return; + } + env.classes = env.classes.map(function(c) { + return (options.prefixString || '') + (options.classMap[c] || c); + }); +}); + +})(); diff --git a/app/bower_components/prism/plugins/custom-class/prism-custom-class.min.js b/app/bower_components/prism/plugins/custom-class/prism-custom-class.min.js new file mode 100644 index 0000000..03d34f5 --- /dev/null +++ b/app/bower_components/prism/plugins/custom-class/prism-custom-class.min.js @@ -0,0 +1 @@ +!function(){if("undefined"!=typeof self&&self.Prism||"undefined"!=typeof global&&global.Prism){var s={};Prism.plugins.customClass={map:function(i){s.classMap=i},prefix:function(i){s.prefixString=i}},Prism.hooks.add("wrap",function(i){(s.classMap||s.prefixString)&&(i.classes=i.classes.map(function(i){return(s.prefixString||"")+(s.classMap[i]||i)}))})}}(); \ No newline at end of file diff --git a/app/bower_components/prism/plugins/data-uri-highlight/prism-data-uri-highlight.js b/app/bower_components/prism/plugins/data-uri-highlight/prism-data-uri-highlight.js new file mode 100644 index 0000000..7ff8d1f --- /dev/null +++ b/app/bower_components/prism/plugins/data-uri-highlight/prism-data-uri-highlight.js @@ -0,0 +1,98 @@ +(function () { + + if ( + typeof self !== 'undefined' && !self.Prism || + typeof global !== 'undefined' && !global.Prism + ) { + return; + } + + var autoLinkerProcess = function (grammar) { + if (Prism.plugins.autolinker) { + Prism.plugins.autolinker.processGrammar(grammar); + } + return grammar; + }; + var dataURI = { + pattern: /(.)\bdata:[^\/]+\/[^,]+,(?:(?!\1)[\s\S]|\\\1)+(?=\1)/, + lookbehind: true, + inside: { + 'language-css': { + pattern: /(data:[^\/]+\/(?:[^+,]+\+)?css,)[\s\S]+/, + lookbehind: true + }, + 'language-javascript': { + pattern: /(data:[^\/]+\/(?:[^+,]+\+)?javascript,)[\s\S]+/, + lookbehind: true + }, + 'language-json': { + pattern: /(data:[^\/]+\/(?:[^+,]+\+)?json,)[\s\S]+/, + lookbehind: true + }, + 'language-markup': { + pattern: /(data:[^\/]+\/(?:[^+,]+\+)?(?:html|xml),)[\s\S]+/, + lookbehind: true + } + } + }; + + // Tokens that may contain URLs + var candidates = ['url', 'attr-value', 'string']; + + Prism.plugins.dataURIHighlight = { + processGrammar: function (grammar) { + // Abort if grammar has already been processed + if (!grammar || grammar['data-uri']) { + return; + } + + Prism.languages.DFS(grammar, function (key, def, type) { + if (candidates.indexOf(type) > -1 && Prism.util.type(def) !== 'Array') { + if (!def.pattern) { + def = this[key] = { + pattern: def + }; + } + + def.inside = def.inside || {}; + + if (type == 'attr-value') { + Prism.languages.insertBefore('inside', def.inside['url-link'] ? 'url-link' : 'punctuation', { + 'data-uri': dataURI + }, def); + } + else { + if (def.inside['url-link']) { + Prism.languages.insertBefore('inside', 'url-link', { + 'data-uri': dataURI + }, def); + } else { + def.inside['data-uri'] = dataURI; + } + } + } + }); + grammar['data-uri'] = dataURI; + } + }; + + Prism.hooks.add('before-highlight', function (env) { + // Prepare the needed grammars for this code block + if (dataURI.pattern.test(env.code)) { + for (var p in dataURI.inside) { + if (dataURI.inside.hasOwnProperty(p)) { + if (!dataURI.inside[p].inside && dataURI.inside[p].pattern.test(env.code)) { + var lang = p.match(/^language-(.+)/)[1]; + if (Prism.languages[lang]) { + dataURI.inside[p].inside = { + rest: autoLinkerProcess(Prism.languages[lang]) + }; + } + } + } + } + } + + Prism.plugins.dataURIHighlight.processGrammar(env.grammar); + }); +}()); \ No newline at end of file diff --git a/app/bower_components/prism/plugins/data-uri-highlight/prism-data-uri-highlight.min.js b/app/bower_components/prism/plugins/data-uri-highlight/prism-data-uri-highlight.min.js new file mode 100644 index 0000000..479828d --- /dev/null +++ b/app/bower_components/prism/plugins/data-uri-highlight/prism-data-uri-highlight.min.js @@ -0,0 +1 @@ +!function(){if(("undefined"==typeof self||self.Prism)&&("undefined"==typeof global||global.Prism)){var i=function(i){return Prism.plugins.autolinker&&Prism.plugins.autolinker.processGrammar(i),i},a={pattern:/(.)\bdata:[^\/]+\/[^,]+,(?:(?!\1)[\s\S]|\\\1)+(?=\1)/,lookbehind:!0,inside:{"language-css":{pattern:/(data:[^\/]+\/(?:[^+,]+\+)?css,)[\s\S]+/,lookbehind:!0},"language-javascript":{pattern:/(data:[^\/]+\/(?:[^+,]+\+)?javascript,)[\s\S]+/,lookbehind:!0},"language-json":{pattern:/(data:[^\/]+\/(?:[^+,]+\+)?json,)[\s\S]+/,lookbehind:!0},"language-markup":{pattern:/(data:[^\/]+\/(?:[^+,]+\+)?(?:html|xml),)[\s\S]+/,lookbehind:!0}}},n=["url","attr-value","string"];Prism.plugins.dataURIHighlight={processGrammar:function(i){i&&!i["data-uri"]&&(Prism.languages.DFS(i,function(i,e,r){n.indexOf(r)>-1&&"Array"!==Prism.util.type(e)&&(e.pattern||(e=this[i]={pattern:e}),e.inside=e.inside||{},"attr-value"==r?Prism.languages.insertBefore("inside",e.inside["url-link"]?"url-link":"punctuation",{"data-uri":a},e):e.inside["url-link"]?Prism.languages.insertBefore("inside","url-link",{"data-uri":a},e):e.inside["data-uri"]=a)}),i["data-uri"]=a)}},Prism.hooks.add("before-highlight",function(n){if(a.pattern.test(n.code))for(var e in a.inside)if(a.inside.hasOwnProperty(e)&&!a.inside[e].inside&&a.inside[e].pattern.test(n.code)){var r=e.match(/^language-(.+)/)[1];Prism.languages[r]&&(a.inside[e].inside={rest:i(Prism.languages[r])})}Prism.plugins.dataURIHighlight.processGrammar(n.grammar)})}}(); \ No newline at end of file diff --git a/app/bower_components/prism/plugins/line-highlight/prism-line-highlight.css b/app/bower_components/prism/plugins/line-highlight/prism-line-highlight.css index 9c8a3cc..2ab49ed 100644 --- a/app/bower_components/prism/plugins/line-highlight/prism-line-highlight.css +++ b/app/bower_components/prism/plugins/line-highlight/prism-line-highlight.css @@ -11,9 +11,6 @@ pre[data-line] { margin-top: 1em; /* Same as .prism’s padding-top */ background: hsla(24, 20%, 50%,.08); - background: -moz-linear-gradient(to right, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0)); - background: -webkit-linear-gradient(to right, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0)); - background: -o-linear-gradient(to right, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0)); background: linear-gradient(to right, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0)); pointer-events: none; diff --git a/app/bower_components/prism/plugins/line-highlight/prism-line-highlight.js b/app/bower_components/prism/plugins/line-highlight/prism-line-highlight.js index 3436c3a..e8942f7 100644 --- a/app/bower_components/prism/plugins/line-highlight/prism-line-highlight.js +++ b/app/bower_components/prism/plugins/line-highlight/prism-line-highlight.js @@ -51,26 +51,27 @@ function highlightLines(pre, lines, classes) { var line = document.createElement('div'); line.textContent = Array(end - start + 2).join(' \n'); + line.setAttribute('aria-hidden', 'true'); line.className = (classes || '') + ' line-highlight'; - //if the line-numbers plugin is enabled, then there is no reason for this plugin to display the line numbers - if(!hasClass(pre, 'line-numbers')) { - line.setAttribute('data-start', start); + //if the line-numbers plugin is enabled, then there is no reason for this plugin to display the line numbers + if(!hasClass(pre, 'line-numbers')) { + line.setAttribute('data-start', start); - if(end > start) { - line.setAttribute('data-end', end); - } - } + if(end > start) { + line.setAttribute('data-end', end); + } + } line.style.top = (start - offset - 1) * lineHeight + 'px'; - //allow this to play nicely with the line-numbers plugin - if(hasClass(pre, 'line-numbers')) { - //need to attack to pre as when line-numbers is enabled, the code tag is relatively which screws up the positioning - pre.appendChild(line); - } else { - (pre.querySelector('code') || pre).appendChild(line); - } + //allow this to play nicely with the line-numbers plugin + if(hasClass(pre, 'line-numbers')) { + //need to attack to pre as when line-numbers is enabled, the code tag is relatively which screws up the positioning + pre.appendChild(line); + } else { + (pre.querySelector('code') || pre).appendChild(line); + } } } @@ -90,7 +91,7 @@ function applyHash() { var id = hash.slice(0, hash.lastIndexOf('.')), pre = document.getElementById(id); - + if (!pre) { return; } diff --git a/app/bower_components/prism/plugins/line-highlight/prism-line-highlight.min.js b/app/bower_components/prism/plugins/line-highlight/prism-line-highlight.min.js index aecd63e..894c741 100644 --- a/app/bower_components/prism/plugins/line-highlight/prism-line-highlight.min.js +++ b/app/bower_components/prism/plugins/line-highlight/prism-line-highlight.min.js @@ -1 +1 @@ -!function(){function e(e,t){return Array.prototype.slice.call((t||document).querySelectorAll(e))}function t(e,t){return t=" "+t+" ",(" "+e.className+" ").replace(/[\n\t]/g," ").indexOf(t)>-1}function n(e,n,i){for(var o,a=n.replace(/\s+/g,"").split(","),l=+e.getAttribute("data-line-offset")||0,d=r()?parseInt:parseFloat,c=d(getComputedStyle(e).lineHeight),s=0;o=a[s++];){o=o.split("-");var u=+o[0],m=+o[1]||u,h=document.createElement("div");h.textContent=Array(m-u+2).join(" \n"),h.className=(i||"")+" line-highlight",t(e,"line-numbers")||(h.setAttribute("data-start",u),m>u&&h.setAttribute("data-end",m)),h.style.top=(u-l-1)*c+"px",t(e,"line-numbers")?e.appendChild(h):(e.querySelector("code")||e).appendChild(h)}}function i(){var t=location.hash.slice(1);e(".temporary.line-highlight").forEach(function(e){e.parentNode.removeChild(e)});var i=(t.match(/\.([\d,-]+)$/)||[,""])[1];if(i&&!document.getElementById(t)){var r=t.slice(0,t.lastIndexOf(".")),o=document.getElementById(r);o&&(o.hasAttribute("data-line")||o.setAttribute("data-line",""),n(o,i,"temporary "),document.querySelector(".temporary.line-highlight").scrollIntoView())}}if("undefined"!=typeof self&&self.Prism&&self.document&&document.querySelector){var r=function(){var e;return function(){if("undefined"==typeof e){var t=document.createElement("div");t.style.fontSize="13px",t.style.lineHeight="1.5",t.style.padding=0,t.style.border=0,t.innerHTML=" 
 ",document.body.appendChild(t),e=38===t.offsetHeight,document.body.removeChild(t)}return e}}(),o=0;Prism.hooks.add("complete",function(t){var r=t.element.parentNode,a=r&&r.getAttribute("data-line");r&&a&&/pre/i.test(r.nodeName)&&(clearTimeout(o),e(".line-highlight",r).forEach(function(e){e.parentNode.removeChild(e)}),n(r,a),o=setTimeout(i,1))}),window.addEventListener&&window.addEventListener("hashchange",i)}}(); \ No newline at end of file +!function(){function e(e,t){return Array.prototype.slice.call((t||document).querySelectorAll(e))}function t(e,t){return t=" "+t+" ",(" "+e.className+" ").replace(/[\n\t]/g," ").indexOf(t)>-1}function n(e,n,i){for(var o,a=n.replace(/\s+/g,"").split(","),l=+e.getAttribute("data-line-offset")||0,d=r()?parseInt:parseFloat,c=d(getComputedStyle(e).lineHeight),s=0;o=a[s++];){o=o.split("-");var u=+o[0],m=+o[1]||u,h=document.createElement("div");h.textContent=Array(m-u+2).join(" \n"),h.setAttribute("aria-hidden","true"),h.className=(i||"")+" line-highlight",t(e,"line-numbers")||(h.setAttribute("data-start",u),m>u&&h.setAttribute("data-end",m)),h.style.top=(u-l-1)*c+"px",t(e,"line-numbers")?e.appendChild(h):(e.querySelector("code")||e).appendChild(h)}}function i(){var t=location.hash.slice(1);e(".temporary.line-highlight").forEach(function(e){e.parentNode.removeChild(e)});var i=(t.match(/\.([\d,-]+)$/)||[,""])[1];if(i&&!document.getElementById(t)){var r=t.slice(0,t.lastIndexOf(".")),o=document.getElementById(r);o&&(o.hasAttribute("data-line")||o.setAttribute("data-line",""),n(o,i,"temporary "),document.querySelector(".temporary.line-highlight").scrollIntoView())}}if("undefined"!=typeof self&&self.Prism&&self.document&&document.querySelector){var r=function(){var e;return function(){if("undefined"==typeof e){var t=document.createElement("div");t.style.fontSize="13px",t.style.lineHeight="1.5",t.style.padding=0,t.style.border=0,t.innerHTML=" 
 ",document.body.appendChild(t),e=38===t.offsetHeight,document.body.removeChild(t)}return e}}(),o=0;Prism.hooks.add("complete",function(t){var r=t.element.parentNode,a=r&&r.getAttribute("data-line");r&&a&&/pre/i.test(r.nodeName)&&(clearTimeout(o),e(".line-highlight",r).forEach(function(e){e.parentNode.removeChild(e)}),n(r,a),o=setTimeout(i,1))}),window.addEventListener&&window.addEventListener("hashchange",i)}}(); \ No newline at end of file diff --git a/app/bower_components/prism/plugins/line-numbers/prism-line-numbers.js b/app/bower_components/prism/plugins/line-numbers/prism-line-numbers.js index 8323a43..b01ce6f 100644 --- a/app/bower_components/prism/plugins/line-numbers/prism-line-numbers.js +++ b/app/bower_components/prism/plugins/line-numbers/prism-line-numbers.js @@ -42,6 +42,7 @@ Prism.hooks.add('complete', function (env) { lines = lines.join(''); lineNumbersWrapper = document.createElement('span'); + lineNumbersWrapper.setAttribute('aria-hidden', 'true'); lineNumbersWrapper.className = 'line-numbers-rows'; lineNumbersWrapper.innerHTML = lines; diff --git a/app/bower_components/prism/plugins/line-numbers/prism-line-numbers.min.js b/app/bower_components/prism/plugins/line-numbers/prism-line-numbers.min.js index 7fea325..976f93c 100644 --- a/app/bower_components/prism/plugins/line-numbers/prism-line-numbers.min.js +++ b/app/bower_components/prism/plugins/line-numbers/prism-line-numbers.min.js @@ -1 +1 @@ -!function(){"undefined"!=typeof self&&self.Prism&&self.document&&Prism.hooks.add("complete",function(e){if(e.code){var t=e.element.parentNode,s=/\s*\bline-numbers\b\s*/;if(t&&/pre/i.test(t.nodeName)&&(s.test(t.className)||s.test(e.element.className))&&!e.element.querySelector(".line-numbers-rows")){s.test(e.element.className)&&(e.element.className=e.element.className.replace(s,"")),s.test(t.className)||(t.className+=" line-numbers");var n,a=e.code.match(/\n(?!$)/g),l=a?a.length+1:1,m=new Array(l+1);m=m.join(""),n=document.createElement("span"),n.className="line-numbers-rows",n.innerHTML=m,t.hasAttribute("data-start")&&(t.style.counterReset="linenumber "+(parseInt(t.getAttribute("data-start"),10)-1)),e.element.appendChild(n)}}})}(); \ No newline at end of file +!function(){"undefined"!=typeof self&&self.Prism&&self.document&&Prism.hooks.add("complete",function(e){if(e.code){var t=e.element.parentNode,s=/\s*\bline-numbers\b\s*/;if(t&&/pre/i.test(t.nodeName)&&(s.test(t.className)||s.test(e.element.className))&&!e.element.querySelector(".line-numbers-rows")){s.test(e.element.className)&&(e.element.className=e.element.className.replace(s,"")),s.test(t.className)||(t.className+=" line-numbers");var n,a=e.code.match(/\n(?!$)/g),l=a?a.length+1:1,r=new Array(l+1);r=r.join(""),n=document.createElement("span"),n.setAttribute("aria-hidden","true"),n.className="line-numbers-rows",n.innerHTML=r,t.hasAttribute("data-start")&&(t.style.counterReset="linenumber "+(parseInt(t.getAttribute("data-start"),10)-1)),e.element.appendChild(n)}}})}(); \ No newline at end of file diff --git a/app/bower_components/prism/plugins/normalize-whitespace/prism-normalize-whitespace.js b/app/bower_components/prism/plugins/normalize-whitespace/prism-normalize-whitespace.js index d44f98c..94d4ddd 100644 --- a/app/bower_components/prism/plugins/normalize-whitespace/prism-normalize-whitespace.js +++ b/app/bower_components/prism/plugins/normalize-whitespace/prism-normalize-whitespace.js @@ -126,7 +126,7 @@ Prism.plugins.NormalizeWhitespace = new NormalizeWhitespace({ 'spaces-to-tabs': 4*/ }); -Prism.hooks.add('before-highlight', function (env) { +Prism.hooks.add('before-sanity-check', function (env) { var pre = env.element.parentNode; var clsReg = /\bno-whitespace-normalization\b/; if (!env.code || !pre || pre.nodeName.toLowerCase() !== 'pre' || diff --git a/app/bower_components/prism/plugins/normalize-whitespace/prism-normalize-whitespace.min.js b/app/bower_components/prism/plugins/normalize-whitespace/prism-normalize-whitespace.min.js index 0e00cf9..2e7b5ba 100644 --- a/app/bower_components/prism/plugins/normalize-whitespace/prism-normalize-whitespace.min.js +++ b/app/bower_components/prism/plugins/normalize-whitespace/prism-normalize-whitespace.min.js @@ -1 +1 @@ -!function(){function e(e){this.defaults=r({},e)}function n(e){return e.replace(/-(\w)/g,function(e,n){return n.toUpperCase()})}function t(e){for(var n=0,t=0;tn&&(o[s]="\n"+o[s],a=l)}r[i]=o.join("")}return r.join("\n")}},Prism.plugins.NormalizeWhitespace=new e({"remove-trailing":!0,"remove-indent":!0,"left-trim":!0,"right-trim":!0}),Prism.hooks.add("before-highlight",function(e){var n=e.element.parentNode,t=/\bno-whitespace-normalization\b/;if(!(!e.code||!n||"pre"!==n.nodeName.toLowerCase()||e.settings&&e.settings["whitespace-normalization"]===!1||t.test(n.className)||t.test(e.element.className))){for(var r=n.childNodes,i="",o="",a=!1,s=Prism.plugins.NormalizeWhitespace,l=0;ln&&(o[s]="\n"+o[s],a=l)}r[i]=o.join("")}return r.join("\n")}},Prism.plugins.NormalizeWhitespace=new e({"remove-trailing":!0,"remove-indent":!0,"left-trim":!0,"right-trim":!0}),Prism.hooks.add("before-sanity-check",function(e){var n=e.element.parentNode,t=/\bno-whitespace-normalization\b/;if(!(!e.code||!n||"pre"!==n.nodeName.toLowerCase()||e.settings&&e.settings["whitespace-normalization"]===!1||t.test(n.className)||t.test(e.element.className))){for(var r=n.childNodes,i="",o="",a=!1,s=Prism.plugins.NormalizeWhitespace,l=0;l div.prism-show-language-label { - color: black; - background-color: #CFCFCF; - display: inline-block; - position: absolute; - bottom: auto; - left: auto; - top: 0; - right: 0; - width: auto; - height: auto; - font-size: 0.9em; - border-radius: 0 0 0 5px; - padding: 0 0.5em; - text-shadow: none; - z-index: 1; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; - -webkit-transform: none; - -moz-transform: none; - -ms-transform: none; - -o-transform: none; - transform: none; -} diff --git a/app/bower_components/prism/plugins/show-language/prism-show-language.js b/app/bower_components/prism/plugins/show-language/prism-show-language.js index ec33657..7d9c3d6 100644 --- a/app/bower_components/prism/plugins/show-language/prism-show-language.js +++ b/app/bower_components/prism/plugins/show-language/prism-show-language.js @@ -4,35 +4,25 @@ if (typeof self === 'undefined' || !self.Prism || !self.document) { return; } +if (!Prism.plugins.toolbar) { + console.warn('Show Languages plugin loaded before Toolbar plugin.'); + + return; +} + // The languages map is built automatically with gulp -var Languages = /*languages_placeholder[*/{"html":"HTML","xml":"XML","svg":"SVG","mathml":"MathML","css":"CSS","clike":"C-like","javascript":"JavaScript","abap":"ABAP","actionscript":"ActionScript","apacheconf":"Apache Configuration","apl":"APL","applescript":"AppleScript","asciidoc":"AsciiDoc","aspnet":"ASP.NET (C#)","autoit":"AutoIt","autohotkey":"AutoHotkey","basic":"BASIC","csharp":"C#","cpp":"C++","coffeescript":"CoffeeScript","css-extras":"CSS Extras","fsharp":"F#","glsl":"GLSL","http":"HTTP","inform7":"Inform 7","json":"JSON","latex":"LaTeX","lolcode":"LOLCODE","matlab":"MATLAB","mel":"MEL","nasm":"NASM","nginx":"nginx","nsis":"NSIS","objectivec":"Objective-C","ocaml":"OCaml","parigp":"PARI/GP","php":"PHP","php-extras":"PHP Extras","powershell":"PowerShell","protobuf":"Protocol Buffers","jsx":"React JSX","rest":"reST (reStructuredText)","sas":"SAS","sass":"Sass (Sass)","scss":"Sass (Scss)","sql":"SQL","typescript":"TypeScript","vhdl":"VHDL","vim":"vim","wiki":"Wiki markup","yaml":"YAML"}/*]*/; -Prism.hooks.add('before-highlight', function(env) { +var Languages = /*languages_placeholder[*/{"html":"HTML","xml":"XML","svg":"SVG","mathml":"MathML","css":"CSS","clike":"C-like","javascript":"JavaScript","abap":"ABAP","actionscript":"ActionScript","apacheconf":"Apache Configuration","apl":"APL","applescript":"AppleScript","asciidoc":"AsciiDoc","aspnet":"ASP.NET (C#)","autoit":"AutoIt","autohotkey":"AutoHotkey","basic":"BASIC","csharp":"C#","cpp":"C++","coffeescript":"CoffeeScript","css-extras":"CSS Extras","fsharp":"F#","glsl":"GLSL","graphql":"GraphQL","http":"HTTP","inform7":"Inform 7","json":"JSON","latex":"LaTeX","livescript":"LiveScript","lolcode":"LOLCODE","matlab":"MATLAB","mel":"MEL","nasm":"NASM","nginx":"nginx","nsis":"NSIS","objectivec":"Objective-C","ocaml":"OCaml","parigp":"PARI/GP","php":"PHP","php-extras":"PHP Extras","powershell":"PowerShell","properties":".properties","protobuf":"Protocol Buffers","jsx":"React JSX","rest":"reST (reStructuredText)","sas":"SAS","sass":"Sass (Sass)","scss":"Sass (Scss)","sql":"SQL","typescript":"TypeScript","vhdl":"VHDL","vim":"vim","wiki":"Wiki markup","xojo":"Xojo (REALbasic)","yaml":"YAML"}/*]*/; +Prism.plugins.toolbar.registerButton('show-language', function(env) { var pre = env.element.parentNode; if (!pre || !/pre/i.test(pre.nodeName)) { return; } var language = pre.getAttribute('data-language') || Languages[env.language] || (env.language.substring(0, 1).toUpperCase() + env.language.substring(1)); - /* check if the divs already exist */ - var sib = pre.previousSibling; - var div, div2; - if (sib && /\s*\bprism-show-language\b\s*/.test(sib.className) && - sib.firstChild && - /\s*\bprism-show-language-label\b\s*/.test(sib.firstChild.className)) { - div2 = sib.firstChild; - } else { - div = document.createElement('div'); - div2 = document.createElement('div'); + var element = document.createElement('span'); + element.textContent = language; - div2.className = 'prism-show-language-label'; - - div.className = 'prism-show-language'; - div.appendChild(div2); - - pre.parentNode.insertBefore(div, pre); - } - - div2.innerHTML = language; + return element; }); })(); diff --git a/app/bower_components/prism/plugins/show-language/prism-show-language.min.js b/app/bower_components/prism/plugins/show-language/prism-show-language.min.js index 0123d6b..a42cf7b 100644 --- a/app/bower_components/prism/plugins/show-language/prism-show-language.min.js +++ b/app/bower_components/prism/plugins/show-language/prism-show-language.min.js @@ -1 +1 @@ -!function(){if("undefined"!=typeof self&&self.Prism&&self.document){var e={html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",css:"CSS",clike:"C-like",javascript:"JavaScript",abap:"ABAP",actionscript:"ActionScript",apacheconf:"Apache Configuration",apl:"APL",applescript:"AppleScript",asciidoc:"AsciiDoc",aspnet:"ASP.NET (C#)",autoit:"AutoIt",autohotkey:"AutoHotkey",basic:"BASIC",csharp:"C#",cpp:"C++",coffeescript:"CoffeeScript","css-extras":"CSS Extras",fsharp:"F#",glsl:"GLSL",http:"HTTP",inform7:"Inform 7",json:"JSON",latex:"LaTeX",lolcode:"LOLCODE",matlab:"MATLAB",mel:"MEL",nasm:"NASM",nginx:"nginx",nsis:"NSIS",objectivec:"Objective-C",ocaml:"OCaml",parigp:"PARI/GP",php:"PHP","php-extras":"PHP Extras",powershell:"PowerShell",protobuf:"Protocol Buffers",jsx:"React JSX",rest:"reST (reStructuredText)",sas:"SAS",sass:"Sass (Sass)",scss:"Sass (Scss)",sql:"SQL",typescript:"TypeScript",vhdl:"VHDL",vim:"vim",wiki:"Wiki markup",yaml:"YAML"};Prism.hooks.add("before-highlight",function(s){var a=s.element.parentNode;if(a&&/pre/i.test(a.nodeName)){var t,i,r=a.getAttribute("data-language")||e[s.language]||s.language.substring(0,1).toUpperCase()+s.language.substring(1),l=a.previousSibling;l&&/\s*\bprism-show-language\b\s*/.test(l.className)&&l.firstChild&&/\s*\bprism-show-language-label\b\s*/.test(l.firstChild.className)?i=l.firstChild:(t=document.createElement("div"),i=document.createElement("div"),i.className="prism-show-language-label",t.className="prism-show-language",t.appendChild(i),a.parentNode.insertBefore(t,a)),i.innerHTML=r}})}}(); \ No newline at end of file +!function(){if("undefined"!=typeof self&&self.Prism&&self.document){if(!Prism.plugins.toolbar)return console.warn("Show Languages plugin loaded before Toolbar plugin."),void 0;var e={html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",css:"CSS",clike:"C-like",javascript:"JavaScript",abap:"ABAP",actionscript:"ActionScript",apacheconf:"Apache Configuration",apl:"APL",applescript:"AppleScript",asciidoc:"AsciiDoc",aspnet:"ASP.NET (C#)",autoit:"AutoIt",autohotkey:"AutoHotkey",basic:"BASIC",csharp:"C#",cpp:"C++",coffeescript:"CoffeeScript","css-extras":"CSS Extras",fsharp:"F#",glsl:"GLSL",graphql:"GraphQL",http:"HTTP",inform7:"Inform 7",json:"JSON",latex:"LaTeX",livescript:"LiveScript",lolcode:"LOLCODE",matlab:"MATLAB",mel:"MEL",nasm:"NASM",nginx:"nginx",nsis:"NSIS",objectivec:"Objective-C",ocaml:"OCaml",parigp:"PARI/GP",php:"PHP","php-extras":"PHP Extras",powershell:"PowerShell",properties:".properties",protobuf:"Protocol Buffers",jsx:"React JSX",rest:"reST (reStructuredText)",sas:"SAS",sass:"Sass (Sass)",scss:"Sass (Scss)",sql:"SQL",typescript:"TypeScript",vhdl:"VHDL",vim:"vim",wiki:"Wiki markup",xojo:"Xojo (REALbasic)",yaml:"YAML"};Prism.plugins.toolbar.registerButton("show-language",function(t){var a=t.element.parentNode;if(a&&/pre/i.test(a.nodeName)){var s=a.getAttribute("data-language")||e[t.language]||t.language.substring(0,1).toUpperCase()+t.language.substring(1),r=document.createElement("span");return r.textContent=s,r}})}}(); \ No newline at end of file diff --git a/app/bower_components/prism/plugins/toolbar/prism-toolbar.css b/app/bower_components/prism/plugins/toolbar/prism-toolbar.css new file mode 100644 index 0000000..6d1afb9 --- /dev/null +++ b/app/bower_components/prism/plugins/toolbar/prism-toolbar.css @@ -0,0 +1,58 @@ +pre.code-toolbar { + position: relative; +} + +pre.code-toolbar > .toolbar { + position: absolute; + top: .3em; + right: .2em; + transition: opacity 0.3s ease-in-out; + opacity: 0; +} + +pre.code-toolbar:hover > .toolbar { + opacity: 1; +} + +pre.code-toolbar > .toolbar .toolbar-item { + display: inline-block; +} + +pre.code-toolbar > .toolbar a { + cursor: pointer; +} + +pre.code-toolbar > .toolbar button { + background: none; + border: 0; + color: inherit; + font: inherit; + line-height: normal; + overflow: visible; + padding: 0; + -webkit-user-select: none; /* for button */ + -moz-user-select: none; + -ms-user-select: none; +} + +pre.code-toolbar > .toolbar a, +pre.code-toolbar > .toolbar button, +pre.code-toolbar > .toolbar span { + color: #bbb; + font-size: .8em; + padding: 0 .5em; + background: #f5f2f0; + background: rgba(224, 224, 224, 0.2); + box-shadow: 0 2px 0 0 rgba(0,0,0,0.2); + border-radius: .5em; +} + +pre.code-toolbar > .toolbar a:hover, +pre.code-toolbar > .toolbar a:focus, +pre.code-toolbar > .toolbar button:hover, +pre.code-toolbar > .toolbar button:focus, +pre.code-toolbar > .toolbar span:hover, +pre.code-toolbar > .toolbar span:focus { + color: inherit; + text-decoration: none; +} diff --git a/app/bower_components/prism/plugins/toolbar/prism-toolbar.js b/app/bower_components/prism/plugins/toolbar/prism-toolbar.js new file mode 100644 index 0000000..2da7b8a --- /dev/null +++ b/app/bower_components/prism/plugins/toolbar/prism-toolbar.js @@ -0,0 +1,133 @@ +(function(){ + if (typeof self === 'undefined' || !self.Prism || !self.document) { + return; + } + + var callbacks = []; + var map = {}; + var noop = function() {}; + + Prism.plugins.toolbar = {}; + + /** + * Register a button callback with the toolbar. + * + * @param {string} key + * @param {Object|Function} opts + */ + var registerButton = Prism.plugins.toolbar.registerButton = function (key, opts) { + var callback; + + if (typeof opts === 'function') { + callback = opts; + } else { + callback = function (env) { + var element; + + if (typeof opts.onClick === 'function') { + element = document.createElement('button'); + element.type = 'button'; + element.addEventListener('click', function () { + opts.onClick.call(this, env); + }); + } else if (typeof opts.url === 'string') { + element = document.createElement('a'); + element.href = opts.url; + } else { + element = document.createElement('span'); + } + + element.textContent = opts.text; + + return element; + }; + } + + callbacks.push(map[key] = callback); + }; + + /** + * Post-highlight Prism hook callback. + * + * @param env + */ + var hook = Prism.plugins.toolbar.hook = function (env) { + // Check if inline or actual code block (credit to line-numbers plugin) + var pre = env.element.parentNode; + if (!pre || !/pre/i.test(pre.nodeName)) { + return; + } + + // Autoloader rehighlights, so only do this once. + if (pre.classList.contains('code-toolbar')) { + return; + } + + pre.classList.add('code-toolbar'); + + // Setup the toolbar + var toolbar = document.createElement('div'); + toolbar.classList.add('toolbar'); + + if (document.body.hasAttribute('data-toolbar-order')) { + callbacks = document.body.getAttribute('data-toolbar-order').split(',').map(function(key) { + return map[key] || noop; + }); + } + + callbacks.forEach(function(callback) { + var element = callback(env); + + if (!element) { + return; + } + + var item = document.createElement('div'); + item.classList.add('toolbar-item'); + + item.appendChild(element); + toolbar.appendChild(item); + }); + + // Add our toolbar to the
 tag
+		pre.appendChild(toolbar);
+	};
+
+	registerButton('label', function(env) {
+		var pre = env.element.parentNode;
+		if (!pre || !/pre/i.test(pre.nodeName)) {
+			return;
+		}
+
+		if (!pre.hasAttribute('data-label')) {
+			return;
+		}
+
+		var element, template;
+		var text = pre.getAttribute('data-label');
+		try {
+			// Any normal text will blow up this selector.
+			template = document.querySelector('template#' + text);
+		} catch (e) {}
+
+		if (template) {
+			element = template.content;
+		} else {
+			if (pre.hasAttribute('data-url')) {
+				element = document.createElement('a');
+				element.href = pre.getAttribute('data-url');
+			} else {
+				element = document.createElement('span');
+			}
+
+			element.textContent = text;
+		}
+
+		return element;
+	});
+
+	/**
+	 * Register the toolbar with Prism.
+	 */
+	Prism.hooks.add('complete', hook);
+})();
diff --git a/app/bower_components/prism/plugins/toolbar/prism-toolbar.min.js b/app/bower_components/prism/plugins/toolbar/prism-toolbar.min.js
new file mode 100644
index 0000000..b206b08
--- /dev/null
+++ b/app/bower_components/prism/plugins/toolbar/prism-toolbar.min.js
@@ -0,0 +1 @@
+!function(){if("undefined"!=typeof self&&self.Prism&&self.document){var t=[],e={},n=function(){};Prism.plugins.toolbar={};var a=Prism.plugins.toolbar.registerButton=function(n,a){var o;o="function"==typeof a?a:function(t){var e;return"function"==typeof a.onClick?(e=document.createElement("button"),e.type="button",e.addEventListener("click",function(){a.onClick.call(this,t)})):"string"==typeof a.url?(e=document.createElement("a"),e.href=a.url):e=document.createElement("span"),e.textContent=a.text,e},t.push(e[n]=o)},o=Prism.plugins.toolbar.hook=function(a){var o=a.element.parentNode;if(o&&/pre/i.test(o.nodeName)&&!o.classList.contains("code-toolbar")){o.classList.add("code-toolbar");var r=document.createElement("div");r.classList.add("toolbar"),document.body.hasAttribute("data-toolbar-order")&&(t=document.body.getAttribute("data-toolbar-order").split(",").map(function(t){return e[t]||n})),t.forEach(function(t){var e=t(a);if(e){var n=document.createElement("div");n.classList.add("toolbar-item"),n.appendChild(e),r.appendChild(n)}}),o.appendChild(r)}};a("label",function(t){var e=t.element.parentNode;if(e&&/pre/i.test(e.nodeName)&&e.hasAttribute("data-label")){var n,a,o=e.getAttribute("data-label");try{a=document.querySelector("template#"+o)}catch(r){}return a?n=a.content:(e.hasAttribute("data-url")?(n=document.createElement("a"),n.href=e.getAttribute("data-url")):n=document.createElement("span"),n.textContent=o),n}}),Prism.hooks.add("complete",o)}}();
\ No newline at end of file
diff --git a/app/bower_components/prism/plugins/wpd/prism-wpd.js b/app/bower_components/prism/plugins/wpd/prism-wpd.js
index 7900dd4..595f34c 100644
--- a/app/bower_components/prism/plugins/wpd/prism-wpd.js
+++ b/app/bower_components/prism/plugins/wpd/prism-wpd.js
@@ -8,8 +8,6 @@ if (
 }
 
 if (Prism.languages.css) {
-	Prism.languages.css.atrule.inside['atrule-id'] = /^@[\w-]+/;
-	
 	// check whether the selector is an advanced pattern before extending it
 	if (Prism.languages.css.selector.pattern)
 	{
@@ -57,60 +55,65 @@ var language;
 Prism.hooks.add('wrap', function(env) {
 	if ((env.type == 'tag-id'
 		|| (env.type == 'property' && env.content.indexOf('-') != 0)
-		|| (env.type == 'atrule-id'&& env.content.indexOf('@-') != 0)
+		|| (env.type == 'rule'&& env.content.indexOf('@-') != 0)
 		|| (env.type == 'pseudo-class'&& env.content.indexOf(':-') != 0) 
 		|| (env.type == 'pseudo-element'&& env.content.indexOf('::-') != 0) 
-	    || (env.type == 'attr-name' && env.content.indexOf('data-') != 0)
-	    ) && env.content.indexOf('<') === -1
+        || (env.type == 'attr-name' && env.content.indexOf('data-') != 0)
+		) && env.content.indexOf('<') === -1
 	) {
-		var searchURL = 'w/index.php?fulltext&search=';
+		if (env.language == 'css'
+			|| env.language == 'scss'
+			|| env.language == 'markup'
+		) {
+			var searchURL = 'w/index.php?fulltext&search=';
 
-		env.tag = 'a';
-		
-		var href = 'http://docs.webplatform.org/';
-		
-		if (env.language == 'css' || env.language == 'scss') {
-			href += 'wiki/css/';
-			
-			if (env.type == 'property') {
-				href += 'properties/';
-			}
-			else if (env.type == 'atrule-id') {
-				href += 'atrules/';
-			}
-			else if (env.type == 'pseudo-class') {
-				href += 'selectors/pseudo-classes/';
-			}
-			else if (env.type == 'pseudo-element') {
-				href += 'selectors/pseudo-elements/';
-			}
-		}
-		else if (env.language == 'markup') {
-			if (env.type == 'tag-id') {
-				// Check language
-				language = getLanguage(env.content) || language;
-				
-				if (language) {
-					href += 'wiki/' + language + '/elements/';
+			env.tag = 'a';
+
+			var href = 'http://docs.webplatform.org/';
+
+			if (env.language == 'css' || env.language == 'scss') {
+				href += 'wiki/css/';
+
+				if (env.type == 'property') {
+					href += 'properties/';
+				}
+				else if (env.type == 'rule') {
+					href += 'atrules/';
 				}
-				else {
-					href += searchURL;
+				else if (env.type == 'pseudo-class') {
+					href += 'selectors/pseudo-classes/';
+				}
+				else if (env.type == 'pseudo-element') {
+					href += 'selectors/pseudo-elements/';
 				}
 			}
-			else if (env.type == 'attr-name') {
-				if (language) {
-					href += 'wiki/' + language + '/attributes/';
+			else if (env.language == 'markup') {
+				if (env.type == 'tag-id') {
+					// Check language
+					language = getLanguage(env.content) || language;
+
+					if (language) {
+						href += 'wiki/' + language + '/elements/';
+					}
+					else {
+						href += searchURL;
+					}
 				}
-				else {
-					href += searchURL;
+				else if (env.type == 'attr-name') {
+					if (language) {
+						href += 'wiki/' + language + '/attributes/';
+					}
+					else {
+						href += searchURL;
+					}
 				}
 			}
+
+			href += env.content;
+
+			env.attributes.href = href;
+			env.attributes.target = '_blank';
 		}
-		
-		href += env.content;
-		
-		env.attributes.href = href;
-		env.attributes.target = '_blank';
 	}
 });
 
diff --git a/app/bower_components/prism/plugins/wpd/prism-wpd.min.js b/app/bower_components/prism/plugins/wpd/prism-wpd.min.js
index 445e1a3..d7b2a61 100644
--- a/app/bower_components/prism/plugins/wpd/prism-wpd.min.js
+++ b/app/bower_components/prism/plugins/wpd/prism-wpd.min.js
@@ -1 +1 @@
-!function(){function e(e){var a=e.toLowerCase();if(t.HTML[a])return"html";if(t.SVG[e])return"svg";if(t.MathML[e])return"mathml";if(0!==t.HTML[a]&&"undefined"!=typeof document){var n=(document.createElement(e).toString().match(/\[object HTML(.+)Element\]/)||[])[1];if(n&&"Unknown"!=n)return t.HTML[a]=1,"html"}if(t.HTML[a]=0,0!==t.SVG[e]&&"undefined"!=typeof document){var r=(document.createElementNS("http://www.w3.org/2000/svg",e).toString().match(/\[object SVG(.+)Element\]/)||[])[1];if(r&&"Unknown"!=r)return t.SVG[e]=1,"svg"}return t.SVG[e]=0,0!==t.MathML[e]&&0===e.indexOf("m")?(t.MathML[e]=1,"mathml"):(t.MathML[e]=0,null)}if(("undefined"==typeof self||self.Prism)&&("undefined"==typeof global||global.Prism)){if(Prism.languages.css&&(Prism.languages.css.atrule.inside["atrule-id"]=/^@[\w-]+/,Prism.languages.css.selector.pattern?(Prism.languages.css.selector.inside["pseudo-class"]=/:[\w-]+/,Prism.languages.css.selector.inside["pseudo-element"]=/::[\w-]+/):Prism.languages.css.selector={pattern:Prism.languages.css.selector,inside:{"pseudo-class":/:[\w-]+/,"pseudo-element":/::[\w-]+/}}),Prism.languages.markup){Prism.languages.markup.tag.inside.tag.inside["tag-id"]=/[\w-]+/;var t={HTML:{a:1,abbr:1,acronym:1,b:1,basefont:1,bdo:1,big:1,blink:1,cite:1,code:1,dfn:1,em:1,kbd:1,i:1,rp:1,rt:1,ruby:1,s:1,samp:1,small:1,spacer:1,strike:1,strong:1,sub:1,sup:1,time:1,tt:1,u:1,"var":1,wbr:1,noframes:1,summary:1,command:1,dt:1,dd:1,figure:1,figcaption:1,center:1,section:1,nav:1,article:1,aside:1,hgroup:1,header:1,footer:1,address:1,noscript:1,isIndex:1,main:1,mark:1,marquee:1,meter:1,menu:1},SVG:{animateColor:1,animateMotion:1,animateTransform:1,glyph:1,feBlend:1,feColorMatrix:1,feComponentTransfer:1,feFuncR:1,feFuncG:1,feFuncB:1,feFuncA:1,feComposite:1,feConvolveMatrix:1,feDiffuseLighting:1,feDisplacementMap:1,feFlood:1,feGaussianBlur:1,feImage:1,feMerge:1,feMergeNode:1,feMorphology:1,feOffset:1,feSpecularLighting:1,feTile:1,feTurbulence:1,feDistantLight:1,fePointLight:1,feSpotLight:1,linearGradient:1,radialGradient:1,altGlyph:1,textPath:1,tref:1,altglyph:1,textpath:1,altglyphdef:1,altglyphitem:1,clipPath:1,"color-profile":1,cursor:1,"font-face":1,"font-face-format":1,"font-face-name":1,"font-face-src":1,"font-face-uri":1,foreignObject:1,glyphRef:1,hkern:1,vkern:1},MathML:{}}}var a;Prism.hooks.add("wrap",function(t){if(("tag-id"==t.type||"property"==t.type&&0!=t.content.indexOf("-")||"atrule-id"==t.type&&0!=t.content.indexOf("@-")||"pseudo-class"==t.type&&0!=t.content.indexOf(":-")||"pseudo-element"==t.type&&0!=t.content.indexOf("::-")||"attr-name"==t.type&&0!=t.content.indexOf("data-"))&&-1===t.content.indexOf("<")){var n="w/index.php?fulltext&search=";t.tag="a";var r="http://docs.webplatform.org/";"css"==t.language||"scss"==t.language?(r+="wiki/css/","property"==t.type?r+="properties/":"atrule-id"==t.type?r+="atrules/":"pseudo-class"==t.type?r+="selectors/pseudo-classes/":"pseudo-element"==t.type&&(r+="selectors/pseudo-elements/")):"markup"==t.language&&("tag-id"==t.type?(a=e(t.content)||a,r+=a?"wiki/"+a+"/elements/":n):"attr-name"==t.type&&(r+=a?"wiki/"+a+"/attributes/":n)),r+=t.content,t.attributes.href=r,t.attributes.target="_blank"}})}}();
\ No newline at end of file
+!function(){function e(e){var a=e.toLowerCase();if(t.HTML[a])return"html";if(t.SVG[e])return"svg";if(t.MathML[e])return"mathml";if(0!==t.HTML[a]&&"undefined"!=typeof document){var n=(document.createElement(e).toString().match(/\[object HTML(.+)Element\]/)||[])[1];if(n&&"Unknown"!=n)return t.HTML[a]=1,"html"}if(t.HTML[a]=0,0!==t.SVG[e]&&"undefined"!=typeof document){var s=(document.createElementNS("http://www.w3.org/2000/svg",e).toString().match(/\[object SVG(.+)Element\]/)||[])[1];if(s&&"Unknown"!=s)return t.SVG[e]=1,"svg"}return t.SVG[e]=0,0!==t.MathML[e]&&0===e.indexOf("m")?(t.MathML[e]=1,"mathml"):(t.MathML[e]=0,null)}if(("undefined"==typeof self||self.Prism)&&("undefined"==typeof global||global.Prism)){if(Prism.languages.css&&(Prism.languages.css.selector.pattern?(Prism.languages.css.selector.inside["pseudo-class"]=/:[\w-]+/,Prism.languages.css.selector.inside["pseudo-element"]=/::[\w-]+/):Prism.languages.css.selector={pattern:Prism.languages.css.selector,inside:{"pseudo-class":/:[\w-]+/,"pseudo-element":/::[\w-]+/}}),Prism.languages.markup){Prism.languages.markup.tag.inside.tag.inside["tag-id"]=/[\w-]+/;var t={HTML:{a:1,abbr:1,acronym:1,b:1,basefont:1,bdo:1,big:1,blink:1,cite:1,code:1,dfn:1,em:1,kbd:1,i:1,rp:1,rt:1,ruby:1,s:1,samp:1,small:1,spacer:1,strike:1,strong:1,sub:1,sup:1,time:1,tt:1,u:1,"var":1,wbr:1,noframes:1,summary:1,command:1,dt:1,dd:1,figure:1,figcaption:1,center:1,section:1,nav:1,article:1,aside:1,hgroup:1,header:1,footer:1,address:1,noscript:1,isIndex:1,main:1,mark:1,marquee:1,meter:1,menu:1},SVG:{animateColor:1,animateMotion:1,animateTransform:1,glyph:1,feBlend:1,feColorMatrix:1,feComponentTransfer:1,feFuncR:1,feFuncG:1,feFuncB:1,feFuncA:1,feComposite:1,feConvolveMatrix:1,feDiffuseLighting:1,feDisplacementMap:1,feFlood:1,feGaussianBlur:1,feImage:1,feMerge:1,feMergeNode:1,feMorphology:1,feOffset:1,feSpecularLighting:1,feTile:1,feTurbulence:1,feDistantLight:1,fePointLight:1,feSpotLight:1,linearGradient:1,radialGradient:1,altGlyph:1,textPath:1,tref:1,altglyph:1,textpath:1,altglyphdef:1,altglyphitem:1,clipPath:1,"color-profile":1,cursor:1,"font-face":1,"font-face-format":1,"font-face-name":1,"font-face-src":1,"font-face-uri":1,foreignObject:1,glyphRef:1,hkern:1,vkern:1},MathML:{}}}var a;Prism.hooks.add("wrap",function(t){if(("tag-id"==t.type||"property"==t.type&&0!=t.content.indexOf("-")||"rule"==t.type&&0!=t.content.indexOf("@-")||"pseudo-class"==t.type&&0!=t.content.indexOf(":-")||"pseudo-element"==t.type&&0!=t.content.indexOf("::-")||"attr-name"==t.type&&0!=t.content.indexOf("data-"))&&-1===t.content.indexOf("<")&&("css"==t.language||"scss"==t.language||"markup"==t.language)){var n="w/index.php?fulltext&search=";t.tag="a";var s="http://docs.webplatform.org/";"css"==t.language||"scss"==t.language?(s+="wiki/css/","property"==t.type?s+="properties/":"rule"==t.type?s+="atrules/":"pseudo-class"==t.type?s+="selectors/pseudo-classes/":"pseudo-element"==t.type&&(s+="selectors/pseudo-elements/")):"markup"==t.language&&("tag-id"==t.type?(a=e(t.content)||a,s+=a?"wiki/"+a+"/elements/":n):"attr-name"==t.type&&(s+=a?"wiki/"+a+"/attributes/":n)),s+=t.content,t.attributes.href=s,t.attributes.target="_blank"}})}}();
\ No newline at end of file
diff --git a/app/bower_components/prism/prism.js b/app/bower_components/prism/prism.js
index 8eb46c7..f36644c 100644
--- a/app/bower_components/prism/prism.js
+++ b/app/bower_components/prism/prism.js
@@ -208,6 +208,9 @@ var _ = _self.Prism = {
 		_.hooks.run('before-sanity-check', env);
 
 		if (!env.code || !env.grammar) {
+			if (env.code) {
+				env.element.textContent = env.code;
+			}
 			_.hooks.run('complete', env);
 			return;
 		}
@@ -285,9 +288,16 @@ var _ = _self.Prism = {
 					lookbehindLength = 0,
 					alias = pattern.alias;
 
+				if (greedy && !pattern.pattern.global) {
+					// Without the global flag, lastIndex won't work
+					var flags = pattern.pattern.toString().match(/[imuy]*$/)[0];
+					pattern.pattern = RegExp(pattern.pattern.source, flags + "g");
+				}
+
 				pattern = pattern.pattern || pattern;
 
-				for (var i=0; i= p) {
+								++i;
+								pos = p;
+							}
 						}
 
-						var from = match.index + (lookbehind ? match[1].length : 0);
-						// To be a valid candidate, the new match has to start inside of str
-						if (from >= str.length) {
+						/*
+						 * If strarr[i] is a Token, then the match starts inside another Token, which is invalid
+						 * If strarr[k - 1] is greedy we are in conflict with another greedy pattern
+						 */
+						if (strarr[i] instanceof Token || strarr[k - 1].greedy) {
 							continue;
 						}
-						var to = match.index + match[0].length,
-						    len = str.length + nextToken.length;
 
 						// Number of tokens to delete and replace with the new match
-						delNum = 3;
-
-						if (to <= len) {
-							if (strarr[i + 1].greedy) {
-								continue;
-							}
-							delNum = 2;
-							combStr = combStr.slice(0, len);
-						}
-						str = combStr;
+						delNum = k - i;
+						str = text.slice(pos, p);
+						match.index -= pos;
 					}
 
 					if (!match) {
@@ -409,7 +417,7 @@ var Token = _.Token = function(type, content, alias, matchedStr, greedy) {
 	this.content = content;
 	this.alias = alias;
 	// Copy of the full string this token was created from
-	this.matchedStr = matchedStr || null;
+	this.length = (matchedStr || "").length|0;
 	this.greedy = !!greedy;
 };
 
@@ -445,13 +453,11 @@ Token.stringify = function(o, language, parent) {
 
 	_.hooks.run('wrap', env);
 
-	var attributes = '';
+	var attributes = Object.keys(env.attributes).map(function(name) {
+		return name + '="' + (env.attributes[name] || '').replace(/"/g, '"') + '"';
+	}).join(' ');
 
-	for (var name in env.attributes) {
-		attributes += (attributes ? ' ' : '') + name + '="' + (env.attributes[name] || '') + '"';
-	}
-
-	return '<' + env.tag + ' class="' + env.classes.join(' ') + '" ' + attributes + '>' + env.content + '';
+	return '<' + env.tag + ' class="' + env.classes.join(' ') + '"' + (attributes ? ' ' + attributes : '') + '>' + env.content + '';
 
 };
 
@@ -484,7 +490,11 @@ if (script) {
 
 	if (document.addEventListener && !script.hasAttribute('data-manual')) {
 		if(document.readyState !== "loading") {
-			requestAnimationFrame(_.highlightAll, 0);
+			if (window.requestAnimationFrame) {
+				window.requestAnimationFrame(_.highlightAll);
+			} else {
+				window.setTimeout(_.highlightAll, 16);
+			}
 		}
 		else {
 			document.addEventListener('DOMContentLoaded', _.highlightAll);
@@ -513,10 +523,10 @@ if (typeof global !== 'undefined') {
 Prism.languages.markup = {
 	'comment': //,
 	'prolog': /<\?[\w\W]+?\?>/,
-	'doctype': //,
+	'doctype': //i,
 	'cdata': //i,
 	'tag': {
-		pattern: /<\/?(?!\d)[^\s>\/=.$<]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i,
+		pattern: /<\/?(?!\d)[^\s>\/=$<]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i,
 		inside: {
 			'tag': {
 				pattern: /^<\/?[^\s>\/]+/i,
@@ -573,7 +583,10 @@ Prism.languages.css = {
 	},
 	'url': /url\((?:(["'])(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1|.*?)\)/i,
 	'selector': /[^\{\}\s][^\{\};]*?(?=\s*\{)/,
-	'string': /("|')(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1/,
+	'string': {
+		pattern: /("|')(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1/,
+		greedy: true
+	},
 	'property': /(\b|\B)[\w-]+(?=\s*:)/i,
 	'important': /\B!important\b/i,
 	'function': /[-a-z0-9]+(?=\()/i,
@@ -654,7 +667,8 @@ Prism.languages.javascript = Prism.languages.extend('clike', {
 	'keyword': /\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/,
 	'number': /\b-?(0x[\dA-Fa-f]+|0b[01]+|0o[0-7]+|\d*\.?\d+([Ee][+-]?\d+)?|NaN|Infinity)\b/,
 	// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)
-	'function': /[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*(?=\()/i
+	'function': /[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*(?=\()/i,
+	'operator': /--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*\*?|\/|~|\^|%|\.{3}/
 });
 
 Prism.languages.insertBefore('javascript', 'keyword', {
diff --git a/app/bower_components/prism/themes/prism-coy.css b/app/bower_components/prism/themes/prism-coy.css
index cc871d3..1e6cff7 100644
--- a/app/bower_components/prism/themes/prism-coy.css
+++ b/app/bower_components/prism/themes/prism-coy.css
@@ -30,15 +30,9 @@ pre[class*="language-"] {
 pre[class*="language-"] {
 	position: relative;
 	margin: .5em 0;
-	-webkit-box-shadow: -1px 0px 0px 0px #358ccb, 0px 0px 0px 1px #dfdfdf;
-	-moz-box-shadow: -1px 0px 0px 0px #358ccb, 0px 0px 0px 1px #dfdfdf;
 	box-shadow: -1px 0px 0px 0px #358ccb, 0px 0px 0px 1px #dfdfdf;
 	border-left: 10px solid #358ccb;
 	background-color: #fdfdfd;
-	background-image: -webkit-linear-gradient(transparent 50%, rgba(69, 142, 209, 0.04) 50%);
-	background-image: -moz-linear-gradient(transparent 50%, rgba(69, 142, 209, 0.04) 50%);
-	background-image: -ms-linear-gradient(transparent 50%, rgba(69, 142, 209, 0.04) 50%);
-	background-image: -o-linear-gradient(transparent 50%, rgba(69, 142, 209, 0.04) 50%);
 	background-image: linear-gradient(transparent 50%, rgba(69, 142, 209, 0.04) 50%);
 	background-size: 3em 3em;
 	background-origin: content-box;
@@ -68,10 +62,6 @@ pre[class*="language-"] {
 :not(pre) > code[class*="language-"] {
 	position: relative;
 	padding: .2em;
-	-webkit-border-radius: 0.3em;
-	-moz-border-radius: 0.3em;
-	-ms-border-radius: 0.3em;
-	-o-border-radius: 0.3em;
 	border-radius: 0.3em;
 	color: #c92c2c;
 	border: 1px solid rgba(0, 0, 0, 0.1);
@@ -90,8 +80,6 @@ pre[class*="language-"]:after {
 	width: 40%;
 	height: 20%;
 	max-height: 13em;
-	-webkit-box-shadow: 0px 13px 8px #979797;
-	-moz-box-shadow: 0px 13px 8px #979797;
 	box-shadow: 0px 13px 8px #979797;
 	-webkit-transform: rotate(-2deg);
 	-moz-transform: rotate(-2deg);
@@ -193,8 +181,6 @@ pre[class*="language-"]:after {
 	pre[class*="language-"]:before,
 	pre[class*="language-"]:after {
 		bottom: 14px;
-		-webkit-box-shadow: none;
-		-moz-box-shadow: none;
 		box-shadow: none;
 	}
 
diff --git a/app/bower_components/prism/themes/prism-twilight.css b/app/bower_components/prism/themes/prism-twilight.css
index 0b47413..504ca70 100644
--- a/app/bower_components/prism/themes/prism-twilight.css
+++ b/app/bower_components/prism/themes/prism-twilight.css
@@ -158,9 +158,6 @@ pre[data-line] {
 }
 
 .line-highlight {
-	background: -moz-linear-gradient(to right, hsla(0, 0%, 33%, .1) 70%, hsla(0, 0%, 33%, 0)); /* #545454 */
-	background: -o-linear-gradient(to right, hsla(0, 0%, 33%, .1) 70%, hsla(0, 0%, 33%, 0)); /* #545454 */
-	background: -webkit-linear-gradient(to right, hsla(0, 0%, 33%, .1) 70%, hsla(0, 0%, 33%, 0)); /* #545454 */
 	background: hsla(0, 0%, 33%, 0.25); /* #545454 */
 	background: linear-gradient(to right, hsla(0, 0%, 33%, .1) 70%, hsla(0, 0%, 33%, 0)); /* #545454 */
 	border-bottom: 1px dashed hsl(0, 0%, 33%); /* #545454 */
diff --git a/app/bower_components/prism/vendor/FileSaver.min.js b/app/bower_components/prism/vendor/FileSaver.min.js
new file mode 100644
index 0000000..f46b8c6
--- /dev/null
+++ b/app/bower_components/prism/vendor/FileSaver.min.js
@@ -0,0 +1,2 @@
+/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */
+var saveAs=saveAs||function(e){"use strict";if(typeof e==="undefined"||typeof navigator!=="undefined"&&/MSIE [1-9]\./.test(navigator.userAgent)){return}var t=e.document,n=function(){return e.URL||e.webkitURL||e},r=t.createElementNS("http://www.w3.org/1999/xhtml","a"),o="download"in r,i=function(e){var t=new MouseEvent("click");e.dispatchEvent(t)},a=/constructor/i.test(e.HTMLElement),f=/CriOS\/[\d]+/.test(navigator.userAgent),u=function(t){(e.setImmediate||e.setTimeout)(function(){throw t},0)},d="application/octet-stream",s=1e3*40,c=function(e){var t=function(){if(typeof e==="string"){n().revokeObjectURL(e)}else{e.remove()}};setTimeout(t,s)},l=function(e,t,n){t=[].concat(t);var r=t.length;while(r--){var o=e["on"+t[r]];if(typeof o==="function"){try{o.call(e,n||e)}catch(i){u(i)}}}},p=function(e){if(/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)){return new Blob([String.fromCharCode(65279),e],{type:e.type})}return e},v=function(t,u,s){if(!s){t=p(t)}var v=this,w=t.type,m=w===d,y,h=function(){l(v,"writestart progress write writeend".split(" "))},S=function(){if((f||m&&a)&&e.FileReader){var r=new FileReader;r.onloadend=function(){var t=f?r.result:r.result.replace(/^data:[^;]*;/,"data:attachment/file;");var n=e.open(t,"_blank");if(!n)e.location.href=t;t=undefined;v.readyState=v.DONE;h()};r.readAsDataURL(t);v.readyState=v.INIT;return}if(!y){y=n().createObjectURL(t)}if(m){e.location.href=y}else{var o=e.open(y,"_blank");if(!o){e.location.href=y}}v.readyState=v.DONE;h();c(y)};v.readyState=v.INIT;if(o){y=n().createObjectURL(t);setTimeout(function(){r.href=y;r.download=u;i(r);h();c(y);v.readyState=v.DONE});return}S()},w=v.prototype,m=function(e,t,n){return new v(e,t||e.name||"download",n)};if(typeof navigator!=="undefined"&&navigator.msSaveOrOpenBlob){return function(e,t,n){t=t||e.name||"download";if(!n){e=p(e)}return navigator.msSaveOrOpenBlob(e,t)}}w.abort=function(){};w.readyState=w.INIT=0;w.WRITING=1;w.DONE=2;w.error=w.onwritestart=w.onprogress=w.onwrite=w.onabort=w.onerror=w.onwriteend=null;return m}(typeof self!=="undefined"&&self||typeof window!=="undefined"&&window||this.content);if(typeof module!=="undefined"&&module.exports){module.exports.saveAs=saveAs}else if(typeof define!=="undefined"&&define!==null&&define.amd!==null){define([],function(){return saveAs})}
\ No newline at end of file
diff --git a/app/bower_components/prism/vendor/jszip.min.js b/app/bower_components/prism/vendor/jszip.min.js
new file mode 100644
index 0000000..0c92e34
--- /dev/null
+++ b/app/bower_components/prism/vendor/jszip.min.js
@@ -0,0 +1,15 @@
+/*!
+
+ JSZip - A Javascript class for generating and reading zip files
+ 
+
+ (c) 2009-2014 Stuart Knightley 
+ Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/master/LICENSE.markdown.
+
+ JSZip uses the library pako released under the MIT license :
+ https://github.com/nodeca/pako/blob/master/LICENSE
+ */
+!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.JSZip=a()}}(function(){var a;return function b(a,c,d){function e(g,h){if(!c[g]){if(!a[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};a[g][0].call(k.exports,function(b){var c=a[g][1][b];return e(c?c:b)},k,k.exports,b,a,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;gl?a[l++]:0,e=m>l?a[l++]:0):(b=a.charCodeAt(l++),c=m>l?a.charCodeAt(l++):0,e=m>l?a.charCodeAt(l++):0),g=b>>2,h=(3&b)<<4|c>>4,i=n>1?(15&c)<<2|e>>6:64,j=n>2?63&e:64,k.push(f.charAt(g)+f.charAt(h)+f.charAt(i)+f.charAt(j));return k.join("")},c.decode=function(a){var b,c,d,g,h,i,j,k=0,l=0;a=a.replace(/[^A-Za-z0-9\+\/\=]/g,"");var m=3*a.length/4;a.charAt(a.length-1)===f.charAt(64)&&m--,a.charAt(a.length-2)===f.charAt(64)&&m--;var n;for(n=e.uint8array?new Uint8Array(m):new Array(m);k>4,c=(15&h)<<4|i>>2,d=(3&i)<<6|j,n[l++]=b,64!==i&&(n[l++]=c),64!==j&&(n[l++]=d);return n}},{"./support":27,"./utils":29}],2:[function(a,b,c){"use strict";function d(a,b,c,d,e){this.compressedSize=a,this.uncompressedSize=b,this.crc32=c,this.compression=d,this.compressedContent=e}var e=a("./external"),f=a("./stream/DataWorker"),g=a("./stream/DataLengthProbe"),h=a("./stream/Crc32Probe"),g=a("./stream/DataLengthProbe");d.prototype={getContentWorker:function(){var a=new f(e.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new g("data_length")),b=this;return a.on("end",function(){if(this.streamInfo.data_length!==b.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),a},getCompressedWorker:function(){return new f(e.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},d.createWorkerFrom=function(a,b,c){return a.pipe(new h).pipe(new g("uncompressedSize")).pipe(b.compressWorker(c)).pipe(new g("compressedSize")).withStreamInfo("compression",b)},b.exports=d},{"./external":6,"./stream/Crc32Probe":22,"./stream/DataLengthProbe":23,"./stream/DataWorker":24}],3:[function(a,b,c){"use strict";var d=a("./stream/GenericWorker");c.STORE={magic:"\x00\x00",compressWorker:function(a){return new d("STORE compression")},uncompressWorker:function(){return new d("STORE decompression")}},c.DEFLATE=a("./flate")},{"./flate":7,"./stream/GenericWorker":25}],4:[function(a,b,c){"use strict";function d(){for(var a,b=[],c=0;256>c;c++){a=c;for(var d=0;8>d;d++)a=1&a?3988292384^a>>>1:a>>>1;b[c]=a}return b}function e(a,b,c,d){var e=h,f=d+c;a=-1^a;for(var g=d;f>g;g++)a=a>>>8^e[255&(a^b[g])];return-1^a}function f(a,b,c,d){var e=h,f=d+c;a=-1^a;for(var g=d;f>g;g++)a=a>>>8^e[255&(a^b.charCodeAt(g))];return-1^a}var g=a("./utils"),h=d();b.exports=function(a,b){if("undefined"==typeof a||!a.length)return 0;var c="string"!==g.getTypeOf(a);return c?e(0|b,a,a.length,0):f(0|b,a,a.length,0)}},{"./utils":29}],5:[function(a,b,c){"use strict";c.base64=!1,c.binary=!1,c.dir=!1,c.createFolders=!0,c.date=null,c.compression=null,c.compressionOptions=null,c.comment=null,c.unixPermissions=null,c.dosPermissions=null},{}],6:[function(a,b,c){"use strict";var d=a("es6-promise").Promise;b.exports={Promise:d}},{"es6-promise":37}],7:[function(a,b,c){"use strict";function d(a,b){h.call(this,"FlateWorker/"+a),this._pako=new f[a]({raw:!0,level:b.level||-1}),this.meta={};var c=this;this._pako.onData=function(a){c.push({data:a,meta:c.meta})}}var e="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,f=a("pako"),g=a("./utils"),h=a("./stream/GenericWorker"),i=e?"uint8array":"array";c.magic="\b\x00",g.inherits(d,h),d.prototype.processChunk=function(a){this.meta=a.meta,this._pako.push(g.transformTo(i,a.data),!1)},d.prototype.flush=function(){h.prototype.flush.call(this),this._pako.push([],!0)},d.prototype.cleanUp=function(){h.prototype.cleanUp.call(this),this._pako=null},c.compressWorker=function(a){return new d("Deflate",a)},c.uncompressWorker=function(){return new d("Inflate",{})}},{"./stream/GenericWorker":25,"./utils":29,pako:38}],8:[function(a,b,c){"use strict";function d(a,b,c,d){f.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=b,this.zipPlatform=c,this.encodeFileName=d,this.streamFiles=a,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}var e=a("../utils"),f=a("../stream/GenericWorker"),g=a("../utf8"),h=a("../crc32"),i=a("../signature"),j=function(a,b){var c,d="";for(c=0;b>c;c++)d+=String.fromCharCode(255&a),a>>>=8;return d},k=function(a,b){var c=a;return a||(c=b?16893:33204),(65535&c)<<16},l=function(a,b){return 63&(a||0)},m=function(a,b,c,d,f,m){var n,o,p=a.file,q=a.compression,r=m!==g.utf8encode,s=e.transformTo("string",m(p.name)),t=e.transformTo("string",g.utf8encode(p.name)),u=p.comment,v=e.transformTo("string",m(u)),w=e.transformTo("string",g.utf8encode(u)),x=t.length!==p.name.length,y=w.length!==u.length,z="",A="",B="",C=p.dir,D=p.date,E={crc32:0,compressedSize:0,uncompressedSize:0};b&&!c||(E.crc32=a.crc32,E.compressedSize=a.compressedSize,E.uncompressedSize=a.uncompressedSize);var F=0;b&&(F|=8),r||!x&&!y||(F|=2048);var G=0,H=0;C&&(G|=16),"UNIX"===f?(H=798,G|=k(p.unixPermissions,C)):(H=20,G|=l(p.dosPermissions,C)),n=D.getUTCHours(),n<<=6,n|=D.getUTCMinutes(),n<<=5,n|=D.getUTCSeconds()/2,o=D.getUTCFullYear()-1980,o<<=4,o|=D.getUTCMonth()+1,o<<=5,o|=D.getUTCDate(),x&&(A=j(1,1)+j(h(s),4)+t,z+="up"+j(A.length,2)+A),y&&(B=j(1,1)+j(h(v),4)+w,z+="uc"+j(B.length,2)+B);var I="";I+="\n\x00",I+=j(F,2),I+=q.magic,I+=j(n,2),I+=j(o,2),I+=j(E.crc32,4),I+=j(E.compressedSize,4),I+=j(E.uncompressedSize,4),I+=j(s.length,2),I+=j(z.length,2);var J=i.LOCAL_FILE_HEADER+I+s+z,K=i.CENTRAL_FILE_HEADER+j(H,2)+I+j(v.length,2)+"\x00\x00\x00\x00"+j(G,4)+j(d,4)+s+z+v;return{fileRecord:J,dirRecord:K}},n=function(a,b,c,d,f){var g="",h=e.transformTo("string",f(d));return g=i.CENTRAL_DIRECTORY_END+"\x00\x00\x00\x00"+j(a,2)+j(a,2)+j(b,4)+j(c,4)+j(h.length,2)+h},o=function(a){var b="";return b=i.DATA_DESCRIPTOR+j(a.crc32,4)+j(a.compressedSize,4)+j(a.uncompressedSize,4)};e.inherits(d,f),d.prototype.push=function(a){var b=a.meta.percent||0,c=this.entriesCount,d=this._sources.length;this.accumulate?this.contentBuffer.push(a):(this.bytesWritten+=a.data.length,f.prototype.push.call(this,{data:a.data,meta:{currentFile:this.currentFile,percent:c?(b+100*(c-d-1))/c:100}}))},d.prototype.openedSource=function(a){if(this.currentSourceOffset=this.bytesWritten,this.currentFile=a.file.name,this.streamFiles&&!a.file.dir){var b=m(a,this.streamFiles,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:b.fileRecord,meta:{percent:0}})}else this.accumulate=!0},d.prototype.closedSource=function(a){this.accumulate=!1;var b=m(a,this.streamFiles,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(b.dirRecord),this.streamFiles&&!a.file.dir)this.push({data:o(a),meta:{percent:100}});else for(this.push({data:b.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},d.prototype.flush=function(){for(var a=this.bytesWritten,b=0;b0?a.substring(0,b):""},q=function(a){return"/"!==a.slice(-1)&&(a+="/"),a},r=function(a,b){return b="undefined"!=typeof b?b:i.createFolders,a=q(a),this.files[a]||o.call(this,a,null,{dir:!0,createFolders:b}),this.files[a]},s={load:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},forEach:function(a){var b,c,d;for(b in this.files)this.files.hasOwnProperty(b)&&(d=this.files[b],c=b.slice(this.root.length,b.length),c&&b.slice(0,this.root.length)===this.root&&a(c,d))},filter:function(a){var b=[];return this.forEach(function(c,d){a(c,d)&&b.push(d)}),b},file:function(a,b,c){if(1===arguments.length){if(d(a)){var e=a;return this.filter(function(a,b){return!b.dir&&e.test(a)})}var f=this.files[this.root+a];return f&&!f.dir?f:null}return a=this.root+a,o.call(this,a,b,c),this},folder:function(a){if(!a)return this;if(d(a))return this.filter(function(b,c){return c.dir&&a.test(b)});var b=this.root+a,c=r.call(this,b),e=this.clone();return e.root=c.name,e},remove:function(a){a=this.root+a;var b=this.files[a];if(b||("/"!==a.slice(-1)&&(a+="/"),b=this.files[a]),b&&!b.dir)delete this.files[a];else for(var c=this.filter(function(b,c){return c.name.slice(0,a.length)===a}),d=0;d=0;--f)if(this.data[f]===b&&this.data[f+1]===c&&this.data[f+2]===d&&this.data[f+3]===e)return f-this.zero;return-1},d.prototype.readAndCheckSignature=function(a){var b=a.charCodeAt(0),c=a.charCodeAt(1),d=a.charCodeAt(2),e=a.charCodeAt(3),f=this.readData(4);return b===f[0]&&c===f[1]&&d===f[2]&&e===f[3]},d.prototype.readData=function(a){if(this.checkOffset(a),0===a)return[];var b=this.data.slice(this.zero+this.index,this.zero+this.index+a);return this.index+=a,b},b.exports=d},{"../utils":29,"./DataReader":15}],15:[function(a,b,c){"use strict";function d(a){this.data=a,this.length=a.length,this.index=0,this.zero=0}var e=a("../utils");d.prototype={checkOffset:function(a){this.checkIndex(this.index+a)},checkIndex:function(a){if(this.lengtha)throw new Error("End of data reached (data length = "+this.length+", asked index = "+a+"). Corrupted zip ?")},setIndex:function(a){this.checkIndex(a),this.index=a},skip:function(a){this.setIndex(this.index+a)},byteAt:function(a){},readInt:function(a){var b,c=0;for(this.checkOffset(a),b=this.index+a-1;b>=this.index;b--)c=(c<<8)+this.byteAt(b);return this.index+=a,c},readString:function(a){return e.transformTo("string",this.readData(a))},readData:function(a){},lastIndexOfSignature:function(a){},readAndCheckSignature:function(a){},readDate:function(){var a=this.readInt(4);return new Date(Date.UTC((a>>25&127)+1980,(a>>21&15)-1,a>>16&31,a>>11&31,a>>5&63,(31&a)<<1))}},b.exports=d},{"../utils":29}],16:[function(a,b,c){"use strict";function d(a){e.call(this,a)}var e=a("./Uint8ArrayReader"),f=a("../utils");f.inherits(d,e),d.prototype.readData=function(a){this.checkOffset(a);var b=this.data.slice(this.zero+this.index,this.zero+this.index+a);return this.index+=a,b},b.exports=d},{"../utils":29,"./Uint8ArrayReader":18}],17:[function(a,b,c){"use strict";function d(a){e.call(this,a)}var e=a("./DataReader"),f=a("../utils");f.inherits(d,e),d.prototype.byteAt=function(a){return this.data.charCodeAt(this.zero+a)},d.prototype.lastIndexOfSignature=function(a){return this.data.lastIndexOf(a)-this.zero},d.prototype.readAndCheckSignature=function(a){var b=this.readData(4);return a===b},d.prototype.readData=function(a){this.checkOffset(a);var b=this.data.slice(this.zero+this.index,this.zero+this.index+a);return this.index+=a,b},b.exports=d},{"../utils":29,"./DataReader":15}],18:[function(a,b,c){"use strict";function d(a){e.call(this,a)}var e=a("./ArrayReader"),f=a("../utils");f.inherits(d,e),d.prototype.readData=function(a){if(this.checkOffset(a),0===a)return new Uint8Array(0);var b=this.data.subarray(this.zero+this.index,this.zero+this.index+a);return this.index+=a,b},b.exports=d},{"../utils":29,"./ArrayReader":14}],19:[function(a,b,c){"use strict";var d=a("../utils"),e=a("../support"),f=a("./ArrayReader"),g=a("./StringReader"),h=a("./NodeBufferReader"),i=a("./Uint8ArrayReader");b.exports=function(a){var b=d.getTypeOf(a);return d.checkSupport(b),"string"!==b||e.uint8array?"nodebuffer"===b?new h(a):e.uint8array?new i(d.transformTo("uint8array",a)):new f(d.transformTo("array",a)):new g(a)}},{"../support":27,"../utils":29,"./ArrayReader":14,"./NodeBufferReader":16,"./StringReader":17,"./Uint8ArrayReader":18}],20:[function(a,b,c){"use strict";c.LOCAL_FILE_HEADER="PK",c.CENTRAL_FILE_HEADER="PK",c.CENTRAL_DIRECTORY_END="PK",c.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK",c.ZIP64_CENTRAL_DIRECTORY_END="PK",c.DATA_DESCRIPTOR="PK\b"},{}],21:[function(a,b,c){"use strict";function d(a){e.call(this,"ConvertWorker to "+a),this.destType=a}var e=a("./GenericWorker"),f=a("../utils");f.inherits(d,e),d.prototype.processChunk=function(a){this.push({data:f.transformTo(this.destType,a.data),meta:a.meta})},b.exports=d},{"../utils":29,"./GenericWorker":25}],22:[function(a,b,c){"use strict";function d(){e.call(this,"Crc32Probe")}var e=a("./GenericWorker"),f=a("../crc32"),g=a("../utils");g.inherits(d,e),d.prototype.processChunk=function(a){this.streamInfo.crc32=f(a.data,this.streamInfo.crc32||0),this.push(a)},b.exports=d},{"../crc32":4,"../utils":29,"./GenericWorker":25}],23:[function(a,b,c){"use strict";function d(a){f.call(this,"DataLengthProbe for "+a),this.propName=a,this.withStreamInfo(a,0)}var e=a("../utils"),f=a("./GenericWorker");e.inherits(d,f),d.prototype.processChunk=function(a){if(a){var b=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=b+a.data.length}f.prototype.processChunk.call(this,a)},b.exports=d},{"../utils":29,"./GenericWorker":25}],24:[function(a,b,c){"use strict";function d(a){f.call(this,"DataWorker");var b=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,a.then(function(a){b.dataIsReady=!0,b.data=a,b.max=a&&a.length||0,b.type=e.getTypeOf(a),b.isPaused||b._tickAndRepeat()},function(a){b.error(a)})}var e=a("../utils"),f=a("./GenericWorker"),g=16384;e.inherits(d,f),d.prototype.cleanUp=function(){f.prototype.cleanUp.call(this),this.data=null},d.prototype.resume=function(){return f.prototype.resume.call(this)?(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,e.delay(this._tickAndRepeat,[],this)),!0):!1},d.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(e.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},d.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var a=g,b=null,c=Math.min(this.max,this.index+a);if(this.index>=this.max)return this.end();switch(this.type){case"string":b=this.data.substring(this.index,c);break;case"uint8array":b=this.data.subarray(this.index,c);break;case"array":case"nodebuffer":b=this.data.slice(this.index,c)}return this.index=c,this.push({data:b,meta:{percent:this.max?this.index/this.max*100:0}})},b.exports=d},{"../utils":29,"./GenericWorker":25}],25:[function(a,b,c){"use strict";function d(a){this.name=a||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}d.prototype={push:function(a){this.emit("data",a)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(a){this.emit("error",a)}return!0},error:function(a){return this.isFinished?!1:(this.isPaused?this.generatedError=a:(this.isFinished=!0,this.emit("error",a),this.previous&&this.previous.error(a),this.cleanUp()),!0)},on:function(a,b){return this._listeners[a].push(b),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(a,b){if(this._listeners[a])for(var c=0;c "+a:a}},b.exports=d},{}],26:[function(a,b,c){(function(c){"use strict";function d(a,b,c){switch(a){case"blob":return h.newBlob(h.transformTo("arraybuffer",b),c);case"base64":return k.encode(b);default:return h.transformTo(a,b)}}function e(a,b){var d,e=0,f=null,g=0;for(d=0;dk;k++)j[k]=k>=252?6:k>=248?5:k>=240?4:k>=224?3:k>=192?2:1;j[254]=j[254]=1;var l=function(a){var b,c,d,e,f,h=a.length,i=0;for(e=0;h>e;e++)c=a.charCodeAt(e),55296===(64512&c)&&h>e+1&&(d=a.charCodeAt(e+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),e++)),i+=128>c?1:2048>c?2:65536>c?3:4;for(b=g.uint8array?new Uint8Array(i):new Array(i),f=0,e=0;i>f;e++)c=a.charCodeAt(e),55296===(64512&c)&&h>e+1&&(d=a.charCodeAt(e+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),e++)),128>c?b[f++]=c:2048>c?(b[f++]=192|c>>>6,b[f++]=128|63&c):65536>c?(b[f++]=224|c>>>12,b[f++]=128|c>>>6&63,b[f++]=128|63&c):(b[f++]=240|c>>>18,b[f++]=128|c>>>12&63,b[f++]=128|c>>>6&63,b[f++]=128|63&c);return b},m=function(a,b){var c;for(b=b||a.length,b>a.length&&(b=a.length),c=b-1;c>=0&&128===(192&a[c]);)c--;return 0>c?b:0===c?b:c+j[a[c]]>b?c:b},n=function(a){var b,c,d,e,g=a.length,h=new Array(2*g);for(c=0,b=0;g>b;)if(d=a[b++],128>d)h[c++]=d;else if(e=j[d],e>4)h[c++]=65533,b+=e-1;else{for(d&=2===e?31:3===e?15:7;e>1&&g>b;)d=d<<6|63&a[b++],e--;e>1?h[c++]=65533:65536>d?h[c++]=d:(d-=65536,h[c++]=55296|d>>10&1023,h[c++]=56320|1023&d)}return h.length!==c&&(h.subarray?h=h.subarray(0,c):h.length=c),f.applyFromCharCode(h)};c.utf8encode=function(a){return g.nodebuffer?h.newBuffer(a,"utf-8"):l(a)},c.utf8decode=function(a){return g.nodebuffer?f.transformTo("nodebuffer",a).toString("utf-8"):(a=f.transformTo(g.uint8array?"uint8array":"array",a),n(a))},f.inherits(d,i),d.prototype.processChunk=function(a){var b=f.transformTo(g.uint8array?"uint8array":"array",a.data);if(this.leftOver&&this.leftOver.length){if(g.uint8array){var d=b;b=new Uint8Array(d.length+this.leftOver.length),b.set(this.leftOver,0),b.set(d,this.leftOver.length)}else b=this.leftOver.concat(b);this.leftOver=null}var e=m(b),h=b;e!==b.length&&(g.uint8array?(h=b.subarray(0,e),this.leftOver=b.subarray(e,b.length)):(h=b.slice(0,e),this.leftOver=b.slice(e,b.length))),this.push({data:c.utf8decode(h),meta:a.meta})},d.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:c.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},c.Utf8DecodeWorker=d,f.inherits(e,i),e.prototype.processChunk=function(a){this.push({data:c.utf8encode(a.data),meta:a.meta})},c.Utf8EncodeWorker=e},{"./nodejsUtils":12,"./stream/GenericWorker":25,"./support":27,"./utils":29}],29:[function(a,b,c){"use strict";function d(a){var b=null;return b=i.uint8array?new Uint8Array(a.length):new Array(a.length),f(a,b)}function e(a){return a}function f(a,b){for(var c=0;c1;)try{return n.stringifyByChunk(a,d,b)}catch(f){b=Math.floor(b/2)}return n.stringifyByChar(a)}function h(a,b){for(var c=0;c=f)return String.fromCharCode.apply(null,a);for(;f>e;)"array"===b||"nodebuffer"===b?d.push(String.fromCharCode.apply(null,a.slice(e,Math.min(e+c,f)))):d.push(String.fromCharCode.apply(null,a.subarray(e,Math.min(e+c,f)))),e+=c;return d.join("")},stringifyByChar:function(a){for(var b="",c=0;cb?"0":"")+b.toString(16).toUpperCase();return d},c.delay=function(a,b,c){l(function(){a.apply(c||null,b||[])})},c.inherits=function(a,b){var c=function(){};c.prototype=b.prototype,a.prototype=new c},c.extend=function(){var a,b,c={};for(a=0;ae;)a=this.reader.readInt(2),b=this.reader.readInt(4),c=this.reader.readData(b),this.zip64ExtensibleData[a]={id:a,length:b,value:c}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),this.disksCount>1)throw new Error("Multi-volumes zip are not supported")},readLocalFiles:function(){var a,b;for(a=0;aa){var b=!this.isSignature(0,g.LOCAL_FILE_HEADER);throw b?new Error("Can't find end of central directory : is this a zip file ? If it is, see http://stuk.github.io/jszip/documentation/howto/read_zip.html"):new Error("Corrupted zip : can't find end of central directory")}this.reader.setIndex(a);var c=a;if(this.checkSignature(g.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===f.MAX_VALUE_16BITS||this.diskWithCentralDirStart===f.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===f.MAX_VALUE_16BITS||this.centralDirRecords===f.MAX_VALUE_16BITS||this.centralDirSize===f.MAX_VALUE_32BITS||this.centralDirOffset===f.MAX_VALUE_32BITS){if(this.zip64=!0,a=this.reader.lastIndexOfSignature(g.ZIP64_CENTRAL_DIRECTORY_LOCATOR),0>a)throw new Error("Corrupted zip : can't find the ZIP64 end of central directory locator");if(this.reader.setIndex(a),this.checkSignature(g.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,g.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(g.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error("Corrupted zip : can't find the ZIP64 end of central directory");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(g.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var d=this.centralDirOffset+this.centralDirSize;this.zip64&&(d+=20,d+=12+this.zip64EndOfCentralSize);var e=c-d;if(e>0)this.isSignature(c,g.CENTRAL_FILE_HEADER)||(this.reader.zero=e);else if(0>e)throw new Error("Corrupted zip: missing "+Math.abs(e)+" bytes.")},prepareReader:function(a){this.reader=e(a)},load:function(a){this.prepareReader(a),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},b.exports=d},{"./reader/readerFor":19,"./signature":20,"./support":27,"./utf8":28,"./utils":29,"./zipEntry":31}],31:[function(a,b,c){"use strict";function d(a,b){this.options=a,this.loadOptions=b}var e=a("./reader/readerFor"),f=a("./utils"),g=a("./compressedObject"),h=a("./crc32"),i=a("./utf8"),j=a("./compressions"),k=a("./support"),l=0,m=3,n=function(a){for(var b in j)if(j.hasOwnProperty(b)&&j[b].magic===a)return j[b];return null};d.prototype={isEncrypted:function(){return 1===(1&this.bitFlag)},useUTF8:function(){return 2048===(2048&this.bitFlag)},readLocalPart:function(a){var b,c;if(a.skip(22),this.fileNameLength=a.readInt(2),c=a.readInt(2),this.fileName=a.readData(this.fileNameLength),a.skip(c),-1===this.compressedSize||-1===this.uncompressedSize)throw new Error("Bug or corrupted zip : didn't get enough informations from the central directory (compressedSize === -1 || uncompressedSize === -1)");if(b=n(this.compressionMethod),null===b)throw new Error("Corrupted zip : compression "+f.pretty(this.compressionMethod)+" unknown (inner file : "+f.transformTo("string",this.fileName)+")");this.decompressed=new g(this.compressedSize,this.uncompressedSize,this.crc32,b,a.readData(this.compressedSize))},readCentralPart:function(a){this.versionMadeBy=a.readInt(2),a.skip(2),this.bitFlag=a.readInt(2),this.compressionMethod=a.readString(2),this.date=a.readDate(),this.crc32=a.readInt(4),this.compressedSize=a.readInt(4),this.uncompressedSize=a.readInt(4);var b=a.readInt(2);if(this.extraFieldsLength=a.readInt(2),this.fileCommentLength=a.readInt(2),this.diskNumberStart=a.readInt(2),this.internalFileAttributes=a.readInt(2),this.externalFileAttributes=a.readInt(4),this.localHeaderOffset=a.readInt(4),this.isEncrypted())throw new Error("Encrypted zip are not supported");a.skip(b),this.readExtraFields(a),this.parseZIP64ExtraField(a),this.fileComment=a.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var a=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),a===l&&(this.dosPermissions=63&this.externalFileAttributes),a===m&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||"/"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(a){if(this.extraFields[1]){var b=e(this.extraFields[1].value);this.uncompressedSize===f.MAX_VALUE_32BITS&&(this.uncompressedSize=b.readInt(8)),this.compressedSize===f.MAX_VALUE_32BITS&&(this.compressedSize=b.readInt(8)),this.localHeaderOffset===f.MAX_VALUE_32BITS&&(this.localHeaderOffset=b.readInt(8)),this.diskNumberStart===f.MAX_VALUE_32BITS&&(this.diskNumberStart=b.readInt(4))}},readExtraFields:function(a){var b,c,d,e=a.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});a.indexk){for(var b=0,c=h.length-j;c>b;b++)h[b]=h[b+j];h.length-=j,j=0}}h.length=0,j=0,i=!1}function e(a){var b=1,c=new l(a),d=document.createTextNode("");return c.observe(d,{characterData:!0}),function(){b=-b,d.data=b}}function f(a){return function(){function b(){clearTimeout(c),clearInterval(d),a()}var c=setTimeout(b,0),d=setInterval(b,50)}}b.exports=c;var g,h=[],i=!1,j=0,k=1024,l=a.MutationObserver||a.WebKitMutationObserver;g="function"==typeof l?e(d):f(d),c.requestFlush=g,c.makeRequestCallFromTimer=f}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],35:[function(a,b,c){},{}],36:[function(a,b,c){function d(){k=!1,h.length?j=h.concat(j):l=-1,j.length&&e()}function e(){if(!k){var a=setTimeout(d);k=!0;for(var b=j.length;b;){for(h=j,j=[];++l1)for(var c=1;ca;a+=2){var b=ca[a],c=ca[a+1];b(c),ca[a]=void 0,ca[a+1]=void 0}X=0}function q(){try{var a=b,c=a("vertx");return T=c.runOnLoop||c.runOnContext,l()}catch(d){return o()}}function r(){}function s(){return new TypeError("You cannot resolve a promise with itself")}function t(){return new TypeError("A promises callback cannot return that same promise.")}function u(a){try{return a.then}catch(b){return ga.error=b,ga}}function v(a,b,c,d){try{a.call(b,c,d)}catch(e){return e}}function w(a,b,c){Y(function(a){var d=!1,e=v(c,b,function(c){d||(d=!0,b!==c?z(a,c):B(a,c))},function(b){d||(d=!0,C(a,b))},"Settle: "+(a._label||" unknown promise"));!d&&e&&(d=!0,C(a,e))},a)}function x(a,b){b._state===ea?B(a,b._result):b._state===fa?C(a,b._result):D(b,void 0,function(b){z(a,b)},function(b){C(a,b)})}function y(a,b){if(b.constructor===a.constructor)x(a,b);else{var c=u(b);c===ga?C(a,ga.error):void 0===c?B(a,b):g(c)?w(a,b,c):B(a,b)}}function z(a,b){a===b?C(a,s()):f(b)?y(a,b):B(a,b)}function A(a){a._onerror&&a._onerror(a._result),E(a)}function B(a,b){a._state===da&&(a._result=b,a._state=ea,0!==a._subscribers.length&&Y(E,a))}function C(a,b){a._state===da&&(a._state=fa,a._result=b,Y(A,a))}function D(a,b,c,d){var e=a._subscribers,f=e.length;a._onerror=null,e[f]=b,e[f+ea]=c,e[f+fa]=d,0===f&&a._state&&Y(E,a)}function E(a){var b=a._subscribers,c=a._state;if(0!==b.length){for(var d,e,f=a._result,g=0;gg;g++)D(d.resolve(a[g]),void 0,b,c);return e}function M(a){var b=this;if(a&&"object"==typeof a&&a.constructor===b)return a;var c=new b(r);return z(c,a),c}function N(a){var b=this,c=new b(r);return C(c,a),c}function O(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function P(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function Q(a){this._id=na++,this._state=void 0,this._result=void 0,this._subscribers=[],r!==a&&(g(a)||O(),this instanceof Q||P(),I(this,a))}function R(){var a;if("undefined"!=typeof e)a=e;else if("undefined"!=typeof self)a=self;else try{a=Function("return this")()}catch(b){throw new Error("polyfill failed because global object is unavailable in this environment")}var c=a.Promise;c&&"[object Promise]"===Object.prototype.toString.call(c.resolve())&&!c.cast||(a.Promise=oa)}var S;S=Array.isArray?Array.isArray:function(a){return"[object Array]"===Object.prototype.toString.call(a)};var T,U,V,W=S,X=0,Y=({}.toString,function(a,b){ca[X]=a,ca[X+1]=b,X+=2,2===X&&(U?U(p):V())}),Z="undefined"!=typeof window?window:void 0,$=Z||{},_=$.MutationObserver||$.WebKitMutationObserver,aa="undefined"!=typeof d&&"[object process]"==={}.toString.call(d),ba="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,ca=new Array(1e3);V=aa?k():_?m():ba?n():void 0===Z&&"function"==typeof b?q():o();var da=void 0,ea=1,fa=2,ga=new F,ha=new F;J.prototype._validateInput=function(a){return W(a)},J.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},J.prototype._init=function(){this._result=new Array(this.length)};var ia=J;J.prototype._enumerate=function(){for(var a=this,b=a.length,c=a.promise,d=a._input,e=0;c._state===da&&b>e;e++)a._eachEntry(d[e],e)},J.prototype._eachEntry=function(a,b){var c=this,d=c._instanceConstructor;h(a)?a.constructor===d&&a._state!==da?(a._onerror=null,c._settledAt(a._state,b,a._result)):c._willSettleAt(d.resolve(a),b):(c._remaining--,c._result[b]=a)},J.prototype._settledAt=function(a,b,c){var d=this,e=d.promise;e._state===da&&(d._remaining--,a===fa?C(e,c):d._result[b]=c),0===d._remaining&&B(e,d._result)},J.prototype._willSettleAt=function(a,b){var c=this;D(a,void 0,function(a){c._settledAt(ea,b,a)},function(a){c._settledAt(fa,b,a)})};var ja=K,ka=L,la=M,ma=N,na=0,oa=Q;Q.all=ja,Q.race=ka,Q.resolve=la,Q.reject=ma,Q._setScheduler=i,Q._setAsap=j,Q._asap=Y,Q.prototype={constructor:Q,then:function(a,b){var c=this,d=c._state;if(d===ea&&!a||d===fa&&!b)return this;var e=new this.constructor(r),f=c._result;if(d){var g=arguments[d-1];Y(function(){H(d,e,g,f)})}else D(c,e,a,b);return e},"catch":function(a){return this.then(null,a)}};var pa=R,qa={Promise:oa,polyfill:pa};"function"==typeof a&&a.amd?a(function(){return qa}):"undefined"!=typeof c&&c.exports?c.exports=qa:"undefined"!=typeof this&&(this.ES6Promise=qa),pa()}).call(this)}).call(this,b("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:36}],38:[function(a,b,c){"use strict";var d=a("./lib/utils/common").assign,e=a("./lib/deflate"),f=a("./lib/inflate"),g=a("./lib/zlib/constants"),h={};d(h,e,f,g),b.exports=h},{"./lib/deflate":39,"./lib/inflate":40,"./lib/utils/common":41,"./lib/zlib/constants":44}],39:[function(a,b,c){"use strict";function d(a){if(!(this instanceof d))return new d(a);this.options=i.assign({level:s,method:u,chunkSize:16384,windowBits:15,memLevel:8,strategy:t,to:""},a||{});var b=this.options;b.raw&&b.windowBits>0?b.windowBits=-b.windowBits:b.gzip&&b.windowBits>0&&b.windowBits<16&&(b.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new l,this.strm.avail_out=0;var c=h.deflateInit2(this.strm,b.level,b.method,b.windowBits,b.memLevel,b.strategy);if(c!==p)throw new Error(k[c]);if(b.header&&h.deflateSetHeader(this.strm,b.header),b.dictionary){var e;if(e="string"==typeof b.dictionary?j.string2buf(b.dictionary):"[object ArrayBuffer]"===m.call(b.dictionary)?new Uint8Array(b.dictionary):b.dictionary,c=h.deflateSetDictionary(this.strm,e),c!==p)throw new Error(k[c]);this._dict_set=!0}}function e(a,b){var c=new d(b);if(c.push(a,!0),c.err)throw c.msg;return c.result}function f(a,b){return b=b||{},b.raw=!0,e(a,b)}function g(a,b){return b=b||{},b.gzip=!0,e(a,b)}var h=a("./zlib/deflate"),i=a("./utils/common"),j=a("./utils/strings"),k=a("./zlib/messages"),l=a("./zlib/zstream"),m=Object.prototype.toString,n=0,o=4,p=0,q=1,r=2,s=-1,t=0,u=8;d.prototype.push=function(a,b){var c,d,e=this.strm,f=this.options.chunkSize;if(this.ended)return!1;d=b===~~b?b:b===!0?o:n,"string"==typeof a?e.input=j.string2buf(a):"[object ArrayBuffer]"===m.call(a)?e.input=new Uint8Array(a):e.input=a,e.next_in=0,e.avail_in=e.input.length;do{if(0===e.avail_out&&(e.output=new i.Buf8(f),e.next_out=0,e.avail_out=f),c=h.deflate(e,d),c!==q&&c!==p)return this.onEnd(c),this.ended=!0,!1;0!==e.avail_out&&(0!==e.avail_in||d!==o&&d!==r)||("string"===this.options.to?this.onData(j.buf2binstring(i.shrinkBuf(e.output,e.next_out))):this.onData(i.shrinkBuf(e.output,e.next_out)))}while((e.avail_in>0||0===e.avail_out)&&c!==q);return d===o?(c=h.deflateEnd(this.strm),this.onEnd(c),this.ended=!0,c===p):d===r?(this.onEnd(p),e.avail_out=0,!0):!0},d.prototype.onData=function(a){this.chunks.push(a)},d.prototype.onEnd=function(a){a===p&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=i.flattenChunks(this.chunks)),this.chunks=[],this.err=a,this.msg=this.strm.msg},c.Deflate=d,c.deflate=e,c.deflateRaw=f,c.gzip=g},{"./utils/common":41,"./utils/strings":42,"./zlib/deflate":46,"./zlib/messages":51,"./zlib/zstream":53}],40:[function(a,b,c){"use strict";function d(a){if(!(this instanceof d))return new d(a);this.options=h.assign({chunkSize:16384,windowBits:0,to:""},a||{});var b=this.options;b.raw&&b.windowBits>=0&&b.windowBits<16&&(b.windowBits=-b.windowBits,0===b.windowBits&&(b.windowBits=-15)),!(b.windowBits>=0&&b.windowBits<16)||a&&a.windowBits||(b.windowBits+=32),b.windowBits>15&&b.windowBits<48&&0===(15&b.windowBits)&&(b.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new l,this.strm.avail_out=0;var c=g.inflateInit2(this.strm,b.windowBits);if(c!==j.Z_OK)throw new Error(k[c]);this.header=new m,g.inflateGetHeader(this.strm,this.header)}function e(a,b){var c=new d(b);if(c.push(a,!0),c.err)throw c.msg;return c.result}function f(a,b){return b=b||{},b.raw=!0,e(a,b)}var g=a("./zlib/inflate"),h=a("./utils/common"),i=a("./utils/strings"),j=a("./zlib/constants"),k=a("./zlib/messages"),l=a("./zlib/zstream"),m=a("./zlib/gzheader"),n=Object.prototype.toString;d.prototype.push=function(a,b){var c,d,e,f,k,l,m=this.strm,o=this.options.chunkSize,p=this.options.dictionary,q=!1;if(this.ended)return!1;d=b===~~b?b:b===!0?j.Z_FINISH:j.Z_NO_FLUSH,"string"==typeof a?m.input=i.binstring2buf(a):"[object ArrayBuffer]"===n.call(a)?m.input=new Uint8Array(a):m.input=a,m.next_in=0,m.avail_in=m.input.length;do{if(0===m.avail_out&&(m.output=new h.Buf8(o),m.next_out=0,m.avail_out=o),c=g.inflate(m,j.Z_NO_FLUSH),c===j.Z_NEED_DICT&&p&&(l="string"==typeof p?i.string2buf(p):"[object ArrayBuffer]"===n.call(p)?new Uint8Array(p):p,c=g.inflateSetDictionary(this.strm,l)),c===j.Z_BUF_ERROR&&q===!0&&(c=j.Z_OK,q=!1),c!==j.Z_STREAM_END&&c!==j.Z_OK)return this.onEnd(c),this.ended=!0,!1;m.next_out&&(0!==m.avail_out&&c!==j.Z_STREAM_END&&(0!==m.avail_in||d!==j.Z_FINISH&&d!==j.Z_SYNC_FLUSH)||("string"===this.options.to?(e=i.utf8border(m.output,m.next_out),f=m.next_out-e,k=i.buf2string(m.output,e),m.next_out=f,m.avail_out=o-f,f&&h.arraySet(m.output,m.output,e,f,0),this.onData(k)):this.onData(h.shrinkBuf(m.output,m.next_out)))),0===m.avail_in&&0===m.avail_out&&(q=!0)}while((m.avail_in>0||0===m.avail_out)&&c!==j.Z_STREAM_END);return c===j.Z_STREAM_END&&(d=j.Z_FINISH),d===j.Z_FINISH?(c=g.inflateEnd(this.strm),this.onEnd(c),this.ended=!0,c===j.Z_OK):d===j.Z_SYNC_FLUSH?(this.onEnd(j.Z_OK),m.avail_out=0,!0):!0},d.prototype.onData=function(a){this.chunks.push(a)},d.prototype.onEnd=function(a){a===j.Z_OK&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=h.flattenChunks(this.chunks)),this.chunks=[],this.err=a,this.msg=this.strm.msg},c.Inflate=d,c.inflate=e,c.inflateRaw=f,c.ungzip=e},{"./utils/common":41,"./utils/strings":42,"./zlib/constants":44,"./zlib/gzheader":47,"./zlib/inflate":49,"./zlib/messages":51,"./zlib/zstream":53}],41:[function(a,b,c){"use strict";var d="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;c.assign=function(a){for(var b=Array.prototype.slice.call(arguments,1);b.length;){var c=b.shift();if(c){if("object"!=typeof c)throw new TypeError(c+"must be non-object");for(var d in c)c.hasOwnProperty(d)&&(a[d]=c[d])}}return a},c.shrinkBuf=function(a,b){return a.length===b?a:a.subarray?a.subarray(0,b):(a.length=b,a)};var e={arraySet:function(a,b,c,d,e){if(b.subarray&&a.subarray)return void a.set(b.subarray(c,c+d),e);for(var f=0;d>f;f++)a[e+f]=b[c+f]},flattenChunks:function(a){var b,c,d,e,f,g;for(d=0,b=0,c=a.length;c>b;b++)d+=a[b].length;for(g=new Uint8Array(d),e=0,b=0,c=a.length;c>b;b++)f=a[b],g.set(f,e),e+=f.length;return g}},f={arraySet:function(a,b,c,d,e){for(var f=0;d>f;f++)a[e+f]=b[c+f]},flattenChunks:function(a){return[].concat.apply([],a)}};c.setTyped=function(a){a?(c.Buf8=Uint8Array,c.Buf16=Uint16Array,c.Buf32=Int32Array,c.assign(c,e)):(c.Buf8=Array,c.Buf16=Array,c.Buf32=Array,c.assign(c,f))},c.setTyped(d)},{}],42:[function(a,b,c){"use strict";function d(a,b){if(65537>b&&(a.subarray&&g||!a.subarray&&f))return String.fromCharCode.apply(null,e.shrinkBuf(a,b));for(var c="",d=0;b>d;d++)c+=String.fromCharCode(a[d]);return c}var e=a("./common"),f=!0,g=!0;try{String.fromCharCode.apply(null,[0])}catch(h){f=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(h){g=!1}for(var i=new e.Buf8(256),j=0;256>j;j++)i[j]=j>=252?6:j>=248?5:j>=240?4:j>=224?3:j>=192?2:1;i[254]=i[254]=1,c.string2buf=function(a){var b,c,d,f,g,h=a.length,i=0;for(f=0;h>f;f++)c=a.charCodeAt(f),55296===(64512&c)&&h>f+1&&(d=a.charCodeAt(f+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),f++)),i+=128>c?1:2048>c?2:65536>c?3:4;for(b=new e.Buf8(i),g=0,f=0;i>g;f++)c=a.charCodeAt(f),55296===(64512&c)&&h>f+1&&(d=a.charCodeAt(f+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),f++)),128>c?b[g++]=c:2048>c?(b[g++]=192|c>>>6,b[g++]=128|63&c):65536>c?(b[g++]=224|c>>>12,b[g++]=128|c>>>6&63,b[g++]=128|63&c):(b[g++]=240|c>>>18,b[g++]=128|c>>>12&63,b[g++]=128|c>>>6&63,b[g++]=128|63&c);return b},c.buf2binstring=function(a){return d(a,a.length)},c.binstring2buf=function(a){for(var b=new e.Buf8(a.length),c=0,d=b.length;d>c;c++)b[c]=a.charCodeAt(c);return b},c.buf2string=function(a,b){var c,e,f,g,h=b||a.length,j=new Array(2*h);for(e=0,c=0;h>c;)if(f=a[c++],128>f)j[e++]=f;else if(g=i[f],g>4)j[e++]=65533,c+=g-1;else{for(f&=2===g?31:3===g?15:7;g>1&&h>c;)f=f<<6|63&a[c++],g--;g>1?j[e++]=65533:65536>f?j[e++]=f:(f-=65536,j[e++]=55296|f>>10&1023,j[e++]=56320|1023&f)}return d(j,e)},c.utf8border=function(a,b){var c;for(b=b||a.length,b>a.length&&(b=a.length),c=b-1;c>=0&&128===(192&a[c]);)c--;return 0>c?b:0===c?b:c+i[a[c]]>b?c:b}},{"./common":41}],43:[function(a,b,c){"use strict";function d(a,b,c,d){for(var e=65535&a|0,f=a>>>16&65535|0,g=0;0!==c;){g=c>2e3?2e3:c,c-=g;do e=e+b[d++]|0,f=f+e|0;while(--g);e%=65521,f%=65521}return e|f<<16|0}b.exports=d},{}],44:[function(a,b,c){"use strict";b.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],45:[function(a,b,c){"use strict";function d(){for(var a,b=[],c=0;256>c;c++){a=c;for(var d=0;8>d;d++)a=1&a?3988292384^a>>>1:a>>>1;b[c]=a}return b}function e(a,b,c,d){var e=f,g=d+c;a^=-1;for(var h=d;g>h;h++)a=a>>>8^e[255&(a^b[h])];return-1^a}var f=d();b.exports=e},{}],46:[function(a,b,c){"use strict";function d(a,b){return a.msg=I[b],b}function e(a){return(a<<1)-(a>4?9:0)}function f(a){for(var b=a.length;--b>=0;)a[b]=0}function g(a){var b=a.state,c=b.pending;c>a.avail_out&&(c=a.avail_out),0!==c&&(E.arraySet(a.output,b.pending_buf,b.pending_out,c,a.next_out),a.next_out+=c,b.pending_out+=c,a.total_out+=c,a.avail_out-=c,b.pending-=c,0===b.pending&&(b.pending_out=0))}function h(a,b){F._tr_flush_block(a,a.block_start>=0?a.block_start:-1,a.strstart-a.block_start,b),a.block_start=a.strstart,g(a.strm)}function i(a,b){a.pending_buf[a.pending++]=b}function j(a,b){a.pending_buf[a.pending++]=b>>>8&255,a.pending_buf[a.pending++]=255&b}function k(a,b,c,d){var e=a.avail_in;return e>d&&(e=d),0===e?0:(a.avail_in-=e,E.arraySet(b,a.input,a.next_in,e,c),1===a.state.wrap?a.adler=G(a.adler,b,e,c):2===a.state.wrap&&(a.adler=H(a.adler,b,e,c)),a.next_in+=e,a.total_in+=e,e)}function l(a,b){var c,d,e=a.max_chain_length,f=a.strstart,g=a.prev_length,h=a.nice_match,i=a.strstart>a.w_size-la?a.strstart-(a.w_size-la):0,j=a.window,k=a.w_mask,l=a.prev,m=a.strstart+ka,n=j[f+g-1],o=j[f+g];a.prev_length>=a.good_match&&(e>>=2),h>a.lookahead&&(h=a.lookahead);do if(c=b,j[c+g]===o&&j[c+g-1]===n&&j[c]===j[f]&&j[++c]===j[f+1]){f+=2,c++;do;while(j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&m>f);if(d=ka-(m-f),f=m-ka,d>g){if(a.match_start=b,g=d,d>=h)break;n=j[f+g-1],o=j[f+g]}}while((b=l[b&k])>i&&0!==--e);return g<=a.lookahead?g:a.lookahead}function m(a){var b,c,d,e,f,g=a.w_size;do{if(e=a.window_size-a.lookahead-a.strstart,a.strstart>=g+(g-la)){E.arraySet(a.window,a.window,g,g,0),a.match_start-=g,a.strstart-=g,a.block_start-=g,c=a.hash_size,b=c;do d=a.head[--b],a.head[b]=d>=g?d-g:0;while(--c);c=g,b=c;do d=a.prev[--b],a.prev[b]=d>=g?d-g:0;while(--c);e+=g}if(0===a.strm.avail_in)break;if(c=k(a.strm,a.window,a.strstart+a.lookahead,e),a.lookahead+=c,a.lookahead+a.insert>=ja)for(f=a.strstart-a.insert,a.ins_h=a.window[f],a.ins_h=(a.ins_h<a.pending_buf_size-5&&(c=a.pending_buf_size-5);;){if(a.lookahead<=1){if(m(a),0===a.lookahead&&b===J)return ua;if(0===a.lookahead)break}a.strstart+=a.lookahead,a.lookahead=0;var d=a.block_start+c;if((0===a.strstart||a.strstart>=d)&&(a.lookahead=a.strstart-d,a.strstart=d,h(a,!1),0===a.strm.avail_out))return ua;if(a.strstart-a.block_start>=a.w_size-la&&(h(a,!1),0===a.strm.avail_out))return ua}return a.insert=0,b===M?(h(a,!0),0===a.strm.avail_out?wa:xa):a.strstart>a.block_start&&(h(a,!1),0===a.strm.avail_out)?ua:ua}function o(a,b){for(var c,d;;){if(a.lookahead=ja&&(a.ins_h=(a.ins_h<=ja)if(d=F._tr_tally(a,a.strstart-a.match_start,a.match_length-ja),a.lookahead-=a.match_length,a.match_length<=a.max_lazy_match&&a.lookahead>=ja){a.match_length--;do a.strstart++,a.ins_h=(a.ins_h<=ja&&(a.ins_h=(a.ins_h<4096)&&(a.match_length=ja-1)),a.prev_length>=ja&&a.match_length<=a.prev_length){e=a.strstart+a.lookahead-ja,d=F._tr_tally(a,a.strstart-1-a.prev_match,a.prev_length-ja),a.lookahead-=a.prev_length-1,a.prev_length-=2;do++a.strstart<=e&&(a.ins_h=(a.ins_h<=ja&&a.strstart>0&&(e=a.strstart-1,d=g[e],d===g[++e]&&d===g[++e]&&d===g[++e])){f=a.strstart+ka;do;while(d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&f>e);a.match_length=ka-(f-e),a.match_length>a.lookahead&&(a.match_length=a.lookahead)}if(a.match_length>=ja?(c=F._tr_tally(a,1,a.match_length-ja),a.lookahead-=a.match_length,a.strstart+=a.match_length,a.match_length=0):(c=F._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++),c&&(h(a,!1),0===a.strm.avail_out))return ua}return a.insert=0,b===M?(h(a,!0),0===a.strm.avail_out?wa:xa):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?ua:va}function r(a,b){for(var c;;){if(0===a.lookahead&&(m(a),0===a.lookahead)){if(b===J)return ua;break}if(a.match_length=0,c=F._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++,c&&(h(a,!1),0===a.strm.avail_out))return ua}return a.insert=0,b===M?(h(a,!0),0===a.strm.avail_out?wa:xa):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?ua:va}function s(a,b,c,d,e){this.good_length=a,this.max_lazy=b,this.nice_length=c,this.max_chain=d,this.func=e}function t(a){a.window_size=2*a.w_size,f(a.head),a.max_lazy_match=D[a.level].max_lazy,a.good_match=D[a.level].good_length,a.nice_match=D[a.level].nice_length,a.max_chain_length=D[a.level].max_chain,a.strstart=0,a.block_start=0,a.lookahead=0,a.insert=0,a.match_length=a.prev_length=ja-1,a.match_available=0,a.ins_h=0}function u(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=$,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new E.Buf16(2*ha),this.dyn_dtree=new E.Buf16(2*(2*fa+1)),this.bl_tree=new E.Buf16(2*(2*ga+1)),f(this.dyn_ltree),f(this.dyn_dtree),f(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new E.Buf16(ia+1),this.heap=new E.Buf16(2*ea+1),f(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new E.Buf16(2*ea+1),f(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function v(a){var b;return a&&a.state?(a.total_in=a.total_out=0,a.data_type=Z,b=a.state,b.pending=0,b.pending_out=0,b.wrap<0&&(b.wrap=-b.wrap),b.status=b.wrap?na:sa,a.adler=2===b.wrap?0:1,b.last_flush=J,F._tr_init(b),O):d(a,Q)}function w(a){var b=v(a);return b===O&&t(a.state),b}function x(a,b){return a&&a.state?2!==a.state.wrap?Q:(a.state.gzhead=b,O):Q}function y(a,b,c,e,f,g){if(!a)return Q;var h=1;if(b===T&&(b=6),0>e?(h=0,e=-e):e>15&&(h=2,e-=16),1>f||f>_||c!==$||8>e||e>15||0>b||b>9||0>g||g>X)return d(a,Q);8===e&&(e=9);var i=new u;return a.state=i,i.strm=a,i.wrap=h,i.gzhead=null,i.w_bits=e,i.w_size=1<>1,i.l_buf=3*i.lit_bufsize,i.level=b,i.strategy=g,i.method=c,w(a)}function z(a,b){return y(a,b,$,aa,ba,Y)}function A(a,b){var c,h,k,l;if(!a||!a.state||b>N||0>b)return a?d(a,Q):Q;if(h=a.state,!a.output||!a.input&&0!==a.avail_in||h.status===ta&&b!==M)return d(a,0===a.avail_out?S:Q);if(h.strm=a,c=h.last_flush,h.last_flush=b,h.status===na)if(2===h.wrap)a.adler=0,i(h,31),i(h,139),i(h,8),h.gzhead?(i(h,(h.gzhead.text?1:0)+(h.gzhead.hcrc?2:0)+(h.gzhead.extra?4:0)+(h.gzhead.name?8:0)+(h.gzhead.comment?16:0)),i(h,255&h.gzhead.time),i(h,h.gzhead.time>>8&255),i(h,h.gzhead.time>>16&255),i(h,h.gzhead.time>>24&255),i(h,9===h.level?2:h.strategy>=V||h.level<2?4:0),i(h,255&h.gzhead.os),h.gzhead.extra&&h.gzhead.extra.length&&(i(h,255&h.gzhead.extra.length),i(h,h.gzhead.extra.length>>8&255)),h.gzhead.hcrc&&(a.adler=H(a.adler,h.pending_buf,h.pending,0)),h.gzindex=0,h.status=oa):(i(h,0),i(h,0),i(h,0),i(h,0),i(h,0),i(h,9===h.level?2:h.strategy>=V||h.level<2?4:0),i(h,ya),h.status=sa);else{var m=$+(h.w_bits-8<<4)<<8,n=-1;n=h.strategy>=V||h.level<2?0:h.level<6?1:6===h.level?2:3,m|=n<<6,0!==h.strstart&&(m|=ma),m+=31-m%31,h.status=sa,j(h,m),0!==h.strstart&&(j(h,a.adler>>>16),j(h,65535&a.adler)),a.adler=1}if(h.status===oa)if(h.gzhead.extra){for(k=h.pending;h.gzindex<(65535&h.gzhead.extra.length)&&(h.pending!==h.pending_buf_size||(h.gzhead.hcrc&&h.pending>k&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending!==h.pending_buf_size));)i(h,255&h.gzhead.extra[h.gzindex]),h.gzindex++;h.gzhead.hcrc&&h.pending>k&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),h.gzindex===h.gzhead.extra.length&&(h.gzindex=0,h.status=pa)}else h.status=pa;if(h.status===pa)if(h.gzhead.name){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindexk&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.gzindex=0,h.status=qa)}else h.status=qa;if(h.status===qa)if(h.gzhead.comment){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindexk&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.status=ra)}else h.status=ra;if(h.status===ra&&(h.gzhead.hcrc?(h.pending+2>h.pending_buf_size&&g(a),h.pending+2<=h.pending_buf_size&&(i(h,255&a.adler),i(h,a.adler>>8&255),a.adler=0,h.status=sa)):h.status=sa),0!==h.pending){if(g(a),0===a.avail_out)return h.last_flush=-1,O}else if(0===a.avail_in&&e(b)<=e(c)&&b!==M)return d(a,S);if(h.status===ta&&0!==a.avail_in)return d(a,S);if(0!==a.avail_in||0!==h.lookahead||b!==J&&h.status!==ta){var o=h.strategy===V?r(h,b):h.strategy===W?q(h,b):D[h.level].func(h,b);if(o!==wa&&o!==xa||(h.status=ta),o===ua||o===wa)return 0===a.avail_out&&(h.last_flush=-1),O;if(o===va&&(b===K?F._tr_align(h):b!==N&&(F._tr_stored_block(h,0,0,!1),b===L&&(f(h.head),0===h.lookahead&&(h.strstart=0,h.block_start=0,h.insert=0))),g(a),0===a.avail_out))return h.last_flush=-1,O}return b!==M?O:h.wrap<=0?P:(2===h.wrap?(i(h,255&a.adler),i(h,a.adler>>8&255),i(h,a.adler>>16&255),i(h,a.adler>>24&255),i(h,255&a.total_in),i(h,a.total_in>>8&255),i(h,a.total_in>>16&255),i(h,a.total_in>>24&255)):(j(h,a.adler>>>16),j(h,65535&a.adler)),g(a),h.wrap>0&&(h.wrap=-h.wrap),0!==h.pending?O:P)}function B(a){var b;return a&&a.state?(b=a.state.status,b!==na&&b!==oa&&b!==pa&&b!==qa&&b!==ra&&b!==sa&&b!==ta?d(a,Q):(a.state=null,b===sa?d(a,R):O)):Q}function C(a,b){var c,d,e,g,h,i,j,k,l=b.length;if(!a||!a.state)return Q;if(c=a.state,g=c.wrap,2===g||1===g&&c.status!==na||c.lookahead)return Q;for(1===g&&(a.adler=G(a.adler,b,l,0)),c.wrap=0,l>=c.w_size&&(0===g&&(f(c.head),c.strstart=0,c.block_start=0,c.insert=0),k=new E.Buf8(c.w_size),E.arraySet(k,b,l-c.w_size,c.w_size,0),b=k,l=c.w_size),h=a.avail_in,i=a.next_in,j=a.input,a.avail_in=l,a.next_in=0,a.input=b,m(c);c.lookahead>=ja;){d=c.strstart,e=c.lookahead-(ja-1);do c.ins_h=(c.ins_h<q&&(p+=B[f++]<>>24,p>>>=w,q-=w,w=v>>>16&255,0===w)C[h++]=65535&v;else{if(!(16&w)){if(0===(64&w)){v=r[(65535&v)+(p&(1<q&&(p+=B[f++]<>>=w,q-=w),15>q&&(p+=B[f++]<>>24,p>>>=w,q-=w,w=v>>>16&255,!(16&w)){if(0===(64&w)){v=s[(65535&v)+(p&(1<q&&(p+=B[f++]<q&&(p+=B[f++]<k){a.msg="invalid distance too far back",c.mode=d;break a}if(p>>>=w,q-=w,w=h-i,y>w){if(w=y-w,w>m&&c.sane){a.msg="invalid distance too far back",c.mode=d;break a}if(z=0,A=o,0===n){if(z+=l-w,x>w){x-=w;do C[h++]=o[z++];while(--w);z=h-y,A=C}}else if(w>n){if(z+=l+n-w,w-=n,x>w){x-=w;do C[h++]=o[z++];while(--w);if(z=0,x>n){w=n,x-=w;do C[h++]=o[z++];while(--w);z=h-y,A=C}}}else if(z+=n-w,x>w){x-=w;do C[h++]=o[z++];while(--w);z=h-y,A=C}for(;x>2;)C[h++]=A[z++],C[h++]=A[z++],C[h++]=A[z++],x-=3;x&&(C[h++]=A[z++],x>1&&(C[h++]=A[z++]))}else{z=h-y;do C[h++]=C[z++],C[h++]=C[z++],C[h++]=C[z++],x-=3;while(x>2);x&&(C[h++]=C[z++],x>1&&(C[h++]=C[z++]))}break}}break}}while(g>f&&j>h);x=q>>3,f-=x,q-=x<<3,p&=(1<f?5+(g-f):5-(f-g),a.avail_out=j>h?257+(j-h):257-(h-j),c.hold=p,c.bits=q}},{}],49:[function(a,b,c){"use strict";function d(a){return(a>>>24&255)+(a>>>8&65280)+((65280&a)<<8)+((255&a)<<24)}function e(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new s.Buf16(320),this.work=new s.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function f(a){var b;return a&&a.state?(b=a.state,a.total_in=a.total_out=b.total=0,a.msg="",b.wrap&&(a.adler=1&b.wrap),b.mode=L,b.last=0,b.havedict=0,b.dmax=32768,b.head=null,b.hold=0,b.bits=0,b.lencode=b.lendyn=new s.Buf32(pa),b.distcode=b.distdyn=new s.Buf32(qa),b.sane=1,b.back=-1,D):G}function g(a){var b;return a&&a.state?(b=a.state,b.wsize=0,b.whave=0,b.wnext=0,f(a)):G}function h(a,b){var c,d;return a&&a.state?(d=a.state,0>b?(c=0,b=-b):(c=(b>>4)+1,48>b&&(b&=15)),b&&(8>b||b>15)?G:(null!==d.window&&d.wbits!==b&&(d.window=null),d.wrap=c,d.wbits=b,g(a))):G}function i(a,b){var c,d;return a?(d=new e,a.state=d,d.window=null,c=h(a,b),c!==D&&(a.state=null),c):G}function j(a){return i(a,sa)}function k(a){if(ta){var b;for(q=new s.Buf32(512),r=new s.Buf32(32),b=0;144>b;)a.lens[b++]=8;for(;256>b;)a.lens[b++]=9;for(;280>b;)a.lens[b++]=7;for(;288>b;)a.lens[b++]=8;for(w(y,a.lens,0,288,q,0,a.work,{bits:9}),b=0;32>b;)a.lens[b++]=5;w(z,a.lens,0,32,r,0,a.work,{bits:5}),ta=!1}a.lencode=q,a.lenbits=9,a.distcode=r,a.distbits=5}function l(a,b,c,d){var e,f=a.state;return null===f.window&&(f.wsize=1<=f.wsize?(s.arraySet(f.window,b,c-f.wsize,f.wsize,0),f.wnext=0,f.whave=f.wsize):(e=f.wsize-f.wnext,e>d&&(e=d),s.arraySet(f.window,b,c-d,e,f.wnext),d-=e,d?(s.arraySet(f.window,b,c-d,d,0),f.wnext=d,f.whave=f.wsize):(f.wnext+=e,f.wnext===f.wsize&&(f.wnext=0),f.whaven;){if(0===i)break a;i--,m+=e[g++]<>>8&255,c.check=u(c.check,Ba,2,0),m=0,n=0,c.mode=M;break}if(c.flags=0,c.head&&(c.head.done=!1),!(1&c.wrap)||(((255&m)<<8)+(m>>8))%31){a.msg="incorrect header check",c.mode=ma;break}if((15&m)!==K){a.msg="unknown compression method",c.mode=ma;break}if(m>>>=4,n-=4,wa=(15&m)+8,0===c.wbits)c.wbits=wa;else if(wa>c.wbits){a.msg="invalid window size",c.mode=ma;break}c.dmax=1<n;){if(0===i)break a;i--,m+=e[g++]<>8&1),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=u(c.check,Ba,2,0)),m=0,n=0,c.mode=N;case N:for(;32>n;){if(0===i)break a;i--,m+=e[g++]<>>8&255,Ba[2]=m>>>16&255,Ba[3]=m>>>24&255,c.check=u(c.check,Ba,4,0)),m=0,n=0,c.mode=O;case O:for(;16>n;){if(0===i)break a;i--,m+=e[g++]<>8),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=u(c.check,Ba,2,0)),m=0,n=0,c.mode=P;case P:if(1024&c.flags){for(;16>n;){if(0===i)break a;i--,m+=e[g++]<>>8&255,c.check=u(c.check,Ba,2,0)),m=0,n=0}else c.head&&(c.head.extra=null);c.mode=Q;case Q:if(1024&c.flags&&(q=c.length,q>i&&(q=i),q&&(c.head&&(wa=c.head.extra_len-c.length,c.head.extra||(c.head.extra=new Array(c.head.extra_len)),s.arraySet(c.head.extra,e,g,q,wa)),512&c.flags&&(c.check=u(c.check,e,q,g)),i-=q,g+=q,c.length-=q),c.length))break a;c.length=0,c.mode=R;case R:if(2048&c.flags){if(0===i)break a;q=0;do wa=e[g+q++],c.head&&wa&&c.length<65536&&(c.head.name+=String.fromCharCode(wa));while(wa&&i>q);if(512&c.flags&&(c.check=u(c.check,e,q,g)),i-=q,g+=q,wa)break a}else c.head&&(c.head.name=null);c.length=0,c.mode=S;case S:if(4096&c.flags){if(0===i)break a;q=0;do wa=e[g+q++],c.head&&wa&&c.length<65536&&(c.head.comment+=String.fromCharCode(wa));while(wa&&i>q);if(512&c.flags&&(c.check=u(c.check,e,q,g)),i-=q,g+=q,wa)break a}else c.head&&(c.head.comment=null);c.mode=T;case T:if(512&c.flags){for(;16>n;){if(0===i)break a;i--,m+=e[g++]<>9&1,c.head.done=!0),a.adler=c.check=0,c.mode=W;break;case U:for(;32>n;){if(0===i)break a;i--,m+=e[g++]<>>=7&n,n-=7&n,c.mode=ja;break}for(;3>n;){if(0===i)break a;i--,m+=e[g++]<>>=1,n-=1,3&m){case 0:c.mode=Y;break;case 1:if(k(c),c.mode=ca,b===C){m>>>=2,n-=2;break a}break;case 2:c.mode=_;break;case 3:a.msg="invalid block type",c.mode=ma}m>>>=2,n-=2;break;case Y:for(m>>>=7&n,n-=7&n;32>n;){if(0===i)break a;i--,m+=e[g++]<>>16^65535)){a.msg="invalid stored block lengths",c.mode=ma;break}if(c.length=65535&m,m=0,n=0,c.mode=Z,b===C)break a;case Z:c.mode=$;case $:if(q=c.length){if(q>i&&(q=i),q>j&&(q=j),0===q)break a;s.arraySet(f,e,g,q,h),i-=q,g+=q,j-=q,h+=q,c.length-=q;break}c.mode=W;break;case _:for(;14>n;){if(0===i)break a;i--,m+=e[g++]<>>=5,n-=5,c.ndist=(31&m)+1,m>>>=5,n-=5,c.ncode=(15&m)+4,m>>>=4,n-=4,c.nlen>286||c.ndist>30){a.msg="too many length or distance symbols",c.mode=ma;break}c.have=0,c.mode=aa;case aa:for(;c.haven;){if(0===i)break a;i--,m+=e[g++]<>>=3,n-=3}for(;c.have<19;)c.lens[Ca[c.have++]]=0;if(c.lencode=c.lendyn,c.lenbits=7,ya={bits:c.lenbits},xa=w(x,c.lens,0,19,c.lencode,0,c.work,ya),c.lenbits=ya.bits,xa){a.msg="invalid code lengths set",c.mode=ma;break}c.have=0,c.mode=ba;case ba:for(;c.have>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=qa);){if(0===i)break a;i--,m+=e[g++]<sa)m>>>=qa,n-=qa,c.lens[c.have++]=sa;else{if(16===sa){for(za=qa+2;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=qa,n-=qa,0===c.have){a.msg="invalid bit length repeat",c.mode=ma;break}wa=c.lens[c.have-1],q=3+(3&m),m>>>=2,n-=2}else if(17===sa){for(za=qa+3;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=qa,n-=qa,wa=0,q=3+(7&m),m>>>=3,n-=3}else{for(za=qa+7;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=qa,n-=qa,wa=0,q=11+(127&m),m>>>=7,n-=7}if(c.have+q>c.nlen+c.ndist){a.msg="invalid bit length repeat",c.mode=ma;break}for(;q--;)c.lens[c.have++]=wa}}if(c.mode===ma)break;if(0===c.lens[256]){a.msg="invalid code -- missing end-of-block",c.mode=ma;break}if(c.lenbits=9,ya={bits:c.lenbits},xa=w(y,c.lens,0,c.nlen,c.lencode,0,c.work,ya),c.lenbits=ya.bits,xa){a.msg="invalid literal/lengths set",c.mode=ma;break}if(c.distbits=6,c.distcode=c.distdyn,ya={bits:c.distbits},xa=w(z,c.lens,c.nlen,c.ndist,c.distcode,0,c.work,ya),c.distbits=ya.bits,xa){a.msg="invalid distances set",c.mode=ma;break}if(c.mode=ca,b===C)break a;case ca:c.mode=da;case da:if(i>=6&&j>=258){a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,v(a,p),h=a.next_out,f=a.output,j=a.avail_out,g=a.next_in,e=a.input,i=a.avail_in,m=c.hold,n=c.bits,c.mode===W&&(c.back=-1);break}for(c.back=0;Aa=c.lencode[m&(1<>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=qa);){if(0===i)break a;i--,m+=e[g++]<>ta)],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=ta+qa);){if(0===i)break a;i--,m+=e[g++]<>>=ta,n-=ta,c.back+=ta}if(m>>>=qa,n-=qa,c.back+=qa,c.length=sa,0===ra){c.mode=ia;break}if(32&ra){c.back=-1,c.mode=W;break}if(64&ra){a.msg="invalid literal/length code",c.mode=ma;break}c.extra=15&ra,c.mode=ea;case ea:if(c.extra){for(za=c.extra;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=c.extra,n-=c.extra,c.back+=c.extra}c.was=c.length,c.mode=fa;case fa:for(;Aa=c.distcode[m&(1<>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=qa);){if(0===i)break a;i--,m+=e[g++]<>ta)],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=ta+qa);){if(0===i)break a;i--,m+=e[g++]<>>=ta,n-=ta,c.back+=ta}if(m>>>=qa,n-=qa,c.back+=qa,64&ra){a.msg="invalid distance code",c.mode=ma;break}c.offset=sa,c.extra=15&ra,c.mode=ga;case ga:if(c.extra){for(za=c.extra;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=c.extra,n-=c.extra,c.back+=c.extra}if(c.offset>c.dmax){a.msg="invalid distance too far back",c.mode=ma;break}c.mode=ha;case ha:if(0===j)break a;if(q=p-j,c.offset>q){if(q=c.offset-q,q>c.whave&&c.sane){a.msg="invalid distance too far back",c.mode=ma;break}q>c.wnext?(q-=c.wnext,r=c.wsize-q):r=c.wnext-q,q>c.length&&(q=c.length),pa=c.window}else pa=f,r=h-c.offset,q=c.length;q>j&&(q=j),j-=q,c.length-=q;do f[h++]=pa[r++];while(--q);0===c.length&&(c.mode=da);break;case ia:if(0===j)break a;f[h++]=c.length,j--,c.mode=da;break;case ja:if(c.wrap){for(;32>n;){if(0===i)break a;i--,m|=e[g++]<n;){if(0===i)break a;i--,m+=e[g++]<=D;D++)P[D]=0;for(E=0;o>E;E++)P[b[c+E]]++;for(H=C,G=e;G>=1&&0===P[G];G--);if(H>G&&(H=G),0===G)return p[q++]=20971520,p[q++]=20971520,s.bits=1,0;for(F=1;G>F&&0===P[F];F++);for(F>H&&(H=F),K=1,D=1;e>=D;D++)if(K<<=1,K-=P[D],0>K)return-1;if(K>0&&(a===h||1!==G))return-1;for(Q[1]=0,D=1;e>D;D++)Q[D+1]=Q[D]+P[D];for(E=0;o>E;E++)0!==b[c+E]&&(r[Q[b[c+E]]++]=E);if(a===h?(N=R=r,y=19):a===i?(N=k,O-=257,R=l,S-=257,y=256):(N=m,R=n,y=-1),M=0,E=0,D=F,x=q,I=H,J=0,v=-1,L=1<f||a===j&&L>g)return 1;for(var T=0;;){T++,z=D-J,r[E]y?(A=R[S+r[E]],B=N[O+r[E]]):(A=96,B=0),t=1<>J)+u]=z<<24|A<<16|B|0;while(0!==u);for(t=1<>=1;if(0!==t?(M&=t-1,M+=t):M=0,E++,0===--P[D]){if(D===G)break;D=b[c+r[E]]}if(D>H&&(M&w)!==v){for(0===J&&(J=H),x+=F,I=D-J,K=1<I+J&&(K-=P[I+J],!(0>=K));)I++,K<<=1;if(L+=1<f||a===j&&L>g)return 1;v=M&w,p[v]=H<<24|I<<16|x-q|0}}return 0!==M&&(p[x+M]=D-J<<24|64<<16|0),s.bits=H,0}},{"../utils/common":41}],51:[function(a,b,c){"use strict";b.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],52:[function(a,b,c){"use strict";function d(a){for(var b=a.length;--b>=0;)a[b]=0}function e(a,b,c,d,e){this.static_tree=a,this.extra_bits=b,this.extra_base=c,this.elems=d,this.max_length=e,this.has_stree=a&&a.length}function f(a,b){this.dyn_tree=a,this.max_code=0,this.stat_desc=b}function g(a){return 256>a?ia[a]:ia[256+(a>>>7)]}function h(a,b){a.pending_buf[a.pending++]=255&b,a.pending_buf[a.pending++]=b>>>8&255}function i(a,b,c){a.bi_valid>X-c?(a.bi_buf|=b<>X-a.bi_valid,a.bi_valid+=c-X):(a.bi_buf|=b<>>=1,c<<=1;while(--b>0);return c>>>1}function l(a){16===a.bi_valid?(h(a,a.bi_buf),a.bi_buf=0,a.bi_valid=0):a.bi_valid>=8&&(a.pending_buf[a.pending++]=255&a.bi_buf,a.bi_buf>>=8,a.bi_valid-=8)}function m(a,b){var c,d,e,f,g,h,i=b.dyn_tree,j=b.max_code,k=b.stat_desc.static_tree,l=b.stat_desc.has_stree,m=b.stat_desc.extra_bits,n=b.stat_desc.extra_base,o=b.stat_desc.max_length,p=0;for(f=0;W>=f;f++)a.bl_count[f]=0;for(i[2*a.heap[a.heap_max]+1]=0,c=a.heap_max+1;V>c;c++)d=a.heap[c],f=i[2*i[2*d+1]+1]+1,f>o&&(f=o,p++),i[2*d+1]=f,d>j||(a.bl_count[f]++,g=0,d>=n&&(g=m[d-n]),h=i[2*d],a.opt_len+=h*(f+g),l&&(a.static_len+=h*(k[2*d+1]+g)));if(0!==p){do{for(f=o-1;0===a.bl_count[f];)f--;a.bl_count[f]--,a.bl_count[f+1]+=2,a.bl_count[o]--,p-=2}while(p>0);for(f=o;0!==f;f--)for(d=a.bl_count[f];0!==d;)e=a.heap[--c],e>j||(i[2*e+1]!==f&&(a.opt_len+=(f-i[2*e+1])*i[2*e],i[2*e+1]=f),d--)}}function n(a,b,c){var d,e,f=new Array(W+1),g=0;for(d=1;W>=d;d++)f[d]=g=g+c[d-1]<<1;for(e=0;b>=e;e++){var h=a[2*e+1];0!==h&&(a[2*e]=k(f[h]++,h))}}function o(){var a,b,c,d,f,g=new Array(W+1);for(c=0,d=0;Q-1>d;d++)for(ka[d]=c,a=0;a<1<d;d++)for(la[d]=f,a=0;a<1<>=7;T>d;d++)for(la[d]=f<<7,a=0;a<1<=b;b++)g[b]=0;for(a=0;143>=a;)ga[2*a+1]=8,a++,g[8]++;for(;255>=a;)ga[2*a+1]=9,a++,g[9]++;for(;279>=a;)ga[2*a+1]=7,a++,g[7]++;for(;287>=a;)ga[2*a+1]=8,a++,g[8]++;for(n(ga,S+1,g),a=0;T>a;a++)ha[2*a+1]=5,ha[2*a]=k(a,5);ma=new e(ga,ba,R+1,S,W),na=new e(ha,ca,0,T,W),oa=new e(new Array(0),da,0,U,Y)}function p(a){var b;for(b=0;S>b;b++)a.dyn_ltree[2*b]=0;for(b=0;T>b;b++)a.dyn_dtree[2*b]=0;for(b=0;U>b;b++)a.bl_tree[2*b]=0;a.dyn_ltree[2*Z]=1,a.opt_len=a.static_len=0,a.last_lit=a.matches=0}function q(a){a.bi_valid>8?h(a,a.bi_buf):a.bi_valid>0&&(a.pending_buf[a.pending++]=a.bi_buf),a.bi_buf=0,a.bi_valid=0}function r(a,b,c,d){q(a),d&&(h(a,c),h(a,~c)),G.arraySet(a.pending_buf,a.window,b,c,a.pending),a.pending+=c}function s(a,b,c,d){var e=2*b,f=2*c;return a[e]c;c++)0!==f[2*c]?(a.heap[++a.heap_len]=j=c,a.depth[c]=0):f[2*c+1]=0;for(;a.heap_len<2;)e=a.heap[++a.heap_len]=2>j?++j:0,f[2*e]=1,a.depth[e]=0,a.opt_len--,h&&(a.static_len-=g[2*e+1]);for(b.max_code=j,c=a.heap_len>>1;c>=1;c--)t(a,f,c);e=i;do c=a.heap[1],a.heap[1]=a.heap[a.heap_len--],t(a,f,1),d=a.heap[1],a.heap[--a.heap_max]=c,a.heap[--a.heap_max]=d,f[2*e]=f[2*c]+f[2*d],a.depth[e]=(a.depth[c]>=a.depth[d]?a.depth[c]:a.depth[d])+1,f[2*c+1]=f[2*d+1]=e,a.heap[1]=e++,t(a,f,1);while(a.heap_len>=2);a.heap[--a.heap_max]=a.heap[1],m(a,b),n(f,j,a.bl_count)}function w(a,b,c){var d,e,f=-1,g=b[1],h=0,i=7,j=4;for(0===g&&(i=138,j=3),b[2*(c+1)+1]=65535,d=0;c>=d;d++)e=g,g=b[2*(d+1)+1],
+++hh?a.bl_tree[2*e]+=h:0!==e?(e!==f&&a.bl_tree[2*e]++,a.bl_tree[2*$]++):10>=h?a.bl_tree[2*_]++:a.bl_tree[2*aa]++,h=0,f=e,0===g?(i=138,j=3):e===g?(i=6,j=3):(i=7,j=4))}function x(a,b,c){var d,e,f=-1,g=b[1],h=0,k=7,l=4;for(0===g&&(k=138,l=3),d=0;c>=d;d++)if(e=g,g=b[2*(d+1)+1],!(++hh){do j(a,e,a.bl_tree);while(0!==--h)}else 0!==e?(e!==f&&(j(a,e,a.bl_tree),h--),j(a,$,a.bl_tree),i(a,h-3,2)):10>=h?(j(a,_,a.bl_tree),i(a,h-3,3)):(j(a,aa,a.bl_tree),i(a,h-11,7));h=0,f=e,0===g?(k=138,l=3):e===g?(k=6,l=3):(k=7,l=4)}}function y(a){var b;for(w(a,a.dyn_ltree,a.l_desc.max_code),w(a,a.dyn_dtree,a.d_desc.max_code),v(a,a.bl_desc),b=U-1;b>=3&&0===a.bl_tree[2*ea[b]+1];b--);return a.opt_len+=3*(b+1)+5+5+4,b}function z(a,b,c,d){var e;for(i(a,b-257,5),i(a,c-1,5),i(a,d-4,4),e=0;d>e;e++)i(a,a.bl_tree[2*ea[e]+1],3);x(a,a.dyn_ltree,b-1),x(a,a.dyn_dtree,c-1)}function A(a){var b,c=4093624447;for(b=0;31>=b;b++,c>>>=1)if(1&c&&0!==a.dyn_ltree[2*b])return I;if(0!==a.dyn_ltree[18]||0!==a.dyn_ltree[20]||0!==a.dyn_ltree[26])return J;for(b=32;R>b;b++)if(0!==a.dyn_ltree[2*b])return J;return I}function B(a){pa||(o(),pa=!0),a.l_desc=new f(a.dyn_ltree,ma),a.d_desc=new f(a.dyn_dtree,na),a.bl_desc=new f(a.bl_tree,oa),a.bi_buf=0,a.bi_valid=0,p(a)}function C(a,b,c,d){i(a,(L<<1)+(d?1:0),3),r(a,b,c,!0)}function D(a){i(a,M<<1,3),j(a,Z,ga),l(a)}function E(a,b,c,d){var e,f,g=0;a.level>0?(a.strm.data_type===K&&(a.strm.data_type=A(a)),v(a,a.l_desc),v(a,a.d_desc),g=y(a),e=a.opt_len+3+7>>>3,f=a.static_len+3+7>>>3,e>=f&&(e=f)):e=f=c+5,e>=c+4&&-1!==b?C(a,b,c,d):a.strategy===H||f===e?(i(a,(M<<1)+(d?1:0),3),u(a,ga,ha)):(i(a,(N<<1)+(d?1:0),3),z(a,a.l_desc.max_code+1,a.d_desc.max_code+1,g+1),u(a,a.dyn_ltree,a.dyn_dtree)),p(a),d&&q(a)}function F(a,b,c){return a.pending_buf[a.d_buf+2*a.last_lit]=b>>>8&255,a.pending_buf[a.d_buf+2*a.last_lit+1]=255&b,a.pending_buf[a.l_buf+a.last_lit]=255&c,a.last_lit++,0===b?a.dyn_ltree[2*c]++:(a.matches++,b--,a.dyn_ltree[2*(ja[c]+R+1)]++,a.dyn_dtree[2*g(b)]++),a.last_lit===a.lit_bufsize-1}var G=a("../utils/common"),H=4,I=0,J=1,K=2,L=0,M=1,N=2,O=3,P=258,Q=29,R=256,S=R+1+Q,T=30,U=19,V=2*S+1,W=15,X=16,Y=7,Z=256,$=16,_=17,aa=18,ba=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],ca=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],da=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],ea=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],fa=512,ga=new Array(2*(S+2));d(ga);var ha=new Array(2*T);d(ha);var ia=new Array(fa);d(ia);var ja=new Array(P-O+1);d(ja);var ka=new Array(Q);d(ka);var la=new Array(T);d(la);var ma,na,oa,pa=!1;c._tr_init=B,c._tr_stored_block=C,c._tr_flush_block=E,c._tr_tally=F,c._tr_align=D},{"../utils/common":41}],53:[function(a,b,c){"use strict";function d(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}b.exports=d},{}]},{},[10])(10)});
\ No newline at end of file
diff --git a/app/bower_components/sinon-chai/.bower.json b/app/bower_components/sinon-chai/.bower.json
deleted file mode 100644
index d27e837..0000000
--- a/app/bower_components/sinon-chai/.bower.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
-  "name": "sinon-chai",
-  "homepage": "https://github.com/domenic/sinon-chai",
-  "version": "2.8.0",
-  "_release": "2.8.0",
-  "_resolution": {
-    "type": "version",
-    "tag": "2.8.0",
-    "commit": "3a7740f840087d1c5a3851c394f5f58aff4f2c23"
-  },
-  "_source": "git://github.com/domenic/sinon-chai.git",
-  "_target": "^2.7.0",
-  "_originalSource": "sinon-chai"
-}
\ No newline at end of file
diff --git a/app/bower_components/sinon-chai/.gitignore b/app/bower_components/sinon-chai/.gitignore
deleted file mode 100644
index 159ba20..0000000
--- a/app/bower_components/sinon-chai/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-/node_modules/
-/npm-debug.log
-
-/coverage/
diff --git a/app/bower_components/sinon-chai/.jshintrc b/app/bower_components/sinon-chai/.jshintrc
deleted file mode 100644
index 35f8514..0000000
--- a/app/bower_components/sinon-chai/.jshintrc
+++ /dev/null
@@ -1,25 +0,0 @@
-{
-    "bitwise": true,
-    "camelcase": true,
-    "curly": true,
-    "eqeqeq": true,
-    "globalstrict": true,
-    "immed": true,
-    "indent": 4,
-    "latedef": "nofunc",
-    "maxlen": 120,
-    "newcap": true,
-    "noarg": true,
-    "node": true,
-    "nonew": true,
-    "quotmark": "double",
-    "trailing": true,
-    "undef": true,
-    "unused": true,
-    "white": true,
-
-    "predef": [
-        "define",
-        "chai"
-    ]
-}
diff --git a/app/bower_components/sinon-chai/.travis.yml b/app/bower_components/sinon-chai/.travis.yml
deleted file mode 100644
index 2111676..0000000
--- a/app/bower_components/sinon-chai/.travis.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-language: node_js
-node_js:
-  - "0.10"
-  - iojs
-script:
-  npm run lint && npm test
diff --git a/app/bower_components/sinon-chai/LICENSE.txt b/app/bower_components/sinon-chai/LICENSE.txt
deleted file mode 100644
index a5aa5dc..0000000
--- a/app/bower_components/sinon-chai/LICENSE.txt
+++ /dev/null
@@ -1,49 +0,0 @@
-Dual licensed under WTFPL and BSD:
-
----
-
-Copyright © 2012–2015 Domenic Denicola 
-
-This work is free. You can redistribute it and/or modify it under the
-terms of the Do What The Fuck You Want To Public License, Version 2,
-as published by Sam Hocevar. See below for more details.
-
-        DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
-                    Version 2, December 2004
-
- Copyright (C) 2004 Sam Hocevar 
-
- Everyone is permitted to copy and distribute verbatim or modified
- copies of this license document, and changing it is allowed as long
- as the name is changed.
-
-            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. You just DO WHAT THE FUCK YOU WANT TO.
-
----
-
-Copyright © 2012–2015, Domenic Denicola 
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-1.  Redistributions of source code must retain the above copyright notice,
-    this list of conditions and the following disclaimer.
-
-2.  Redistributions in binary form must reproduce the above copyright notice,
-    this list of conditions and the following disclaimer in the documentation
-    and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/app/bower_components/sinon-chai/README.md b/app/bower_components/sinon-chai/README.md
deleted file mode 100644
index f8ed2b9..0000000
--- a/app/bower_components/sinon-chai/README.md
+++ /dev/null
@@ -1,248 +0,0 @@
-# Sinon.JS Assertions for Chai
-
-**Sinon–Chai** provides a set of custom assertions for using the [Sinon.JS][] spy, stub, and mocking framework with the
-[Chai][] assertion library. You get all the benefits of Chai with all the powerful tools of Sinon.JS.
-
-Instead of using Sinon.JS's assertions:
-
-```javascript
-sinon.assertCalledWith(mySpy, "foo");
-```
-
-or awkwardly trying to use Chai's `should` or `expect` interfaces on spy properties:
-
-```javascript
-mySpy.calledWith("foo").should.be.ok;
-expect(mySpy.calledWith("foo")).to.be.ok;
-```
-
-you can say
-
-```javascript
-mySpy.should.have.been.calledWith("foo");
-expect(mySpy).to.have.been.calledWith("foo");
-```
-
-## Assertions
-
-All of your favorite Sinon.JS assertions made their way into Sinon–Chai. We show the `should` syntax here; the `expect`
-equivalent is also available.
-
-
-    
-        
-            
-            
-        
-    
-    
-        
-            
-            
-        
-        
-            
-            
-        
-        
-            
-            
-        
-        
-            
-            
-        
-        
-            
-            
-        
-        
-            
-            
-        
-        
-            
-            
-        
-        
-            
-            
-        
-        
-            
-            
-        
-        
-            
-            
-        
-        
-            
-            
-        
-        
-            
-            
-        
-        
-            
-            
-        
-        
-            
-            
-        
-        
-            
-            
-        
-        
-            
-            
-        
-        
-            
-            
-        
-        
-            
-            
-        
-        
-            
-            
-        
-        
-            
-            
-        
-        
-            
-            
-        
-    
-
Sinon.JS property/methodSinon–Chai assertion
calledspy.should.have.been.called
callCountspy.should.have.callCount(n)
calledOncespy.should.have.been.calledOnce
calledTwicespy.should.have.been.calledTwice
calledThricespy.should.have.been.calledThrice
calledBeforespy1.should.have.been.calledBefore(spy2)
calledAfterspy1.should.have.been.calledAfter(spy2)
calledWithNewspy.should.have.been.calledWithNew
alwaysCalledWithNewspy.should.always.have.been.calledWithNew
calledOnspy.should.have.been.calledOn(context)
alwaysCalledOnspy.should.always.have.been.calledOn(context)
calledWithspy.should.have.been.calledWith(...args)
alwaysCalledWithspy.should.always.have.been.calledWith(...args)
calledWithExactlyspy.should.have.been.calledWithExactly(...args)
alwaysCalledWithExactlyspy.should.always.have.been.calledWithExactly(...args)
calledWithMatchspy.should.have.been.calledWithMatch(...args)
alwaysCalledWithMatchspy.should.always.have.been.calledWithMatch(...args)
returnedspy.should.have.returned(returnVal)
alwaysReturnedspy.should.have.always.returned(returnVal)
threwspy.should.have.thrown(errorObjOrErrorTypeStringOrNothing)
alwaysThrewspy.should.have.always.thrown(errorObjOrErrorTypeStringOrNothing)
- -For more information on the behavior of each assertion, see -[the documentation for the corresponding spy methods][spymethods]. These of course work on not only spies, but -individual spy calls, stubs, and mocks as well. - -Note that you can negate any assertion with Chai's `.not`. E. g. for `notCalled` use `spy.should.have.not.been.called`. - -For `assert` interface there is no need for this library. You can install [Sinon.JS assertions][sinonassertions] right into Chai's `assert` object with `expose`: - -```javascript -var chai = require("chai"); -var sinon = require("sinon"); - -sinon.assert.expose(chai.assert, { prefix: "" }); -``` - -## Examples - -Using Chai's `should`: - -```javascript -"use strict"; -var chai = require("chai"); -var sinon = require("sinon"); -var sinonChai = require("sinon-chai"); -chai.should(); -chai.use(sinonChai); - -function hello(name, cb) { - cb("hello " + name); -} - -describe("hello", function () { - it("should call callback with correct greeting", function () { - var cb = sinon.spy(); - - hello("foo", cb); - - cb.should.have.been.calledWith("hello foo"); - }); -}); -``` - -Using Chai's `expect`: - -```javascript -"use strict"; -var chai = require("chai"); -var sinon = require("sinon"); -var sinonChai = require("sinon-chai"); -var expect = chai.expect; -chai.use(sinonChai); - -function hello(name, cb) { - cb("hello " + name); -} - -describe("hello", function () { - it("should call callback with correct greeting", function () { - var cb = sinon.spy(); - - hello("foo", cb); - - expect(cb).to.have.been.calledWith("hello foo"); - }); -}); -``` - -## Installation and Usage - -### Node - -Do an `npm install sinon-chai` to get up and running. Then: - -```javascript -var chai = require("chai"); -var sinonChai = require("sinon-chai"); - -chai.use(sinonChai); -``` - -You can of course put this code in a common test fixture file; for an example using [Mocha][], see -[the Sinon–Chai tests themselves][fixturedemo]. - -### AMD - -Sinon–Chai supports being used as an [AMD][] module, registering itself anonymously (just like Chai). So, assuming you -have configured your loader to map the Chai and Sinon–Chai files to the respective module IDs `"chai"` and -`"sinon-chai"`, you can use them as follows: - -```javascript -define(function (require, exports, module) { - var chai = require("chai"); - var sinonChai = require("sinon-chai"); - - chai.use(sinonChai); -}); -``` - -### ` - - -``` - -### Ruby on Rails - -Thanks to [Cymen Vig][], there's now [a Ruby gem][] of Sinon–Chai that integrates it with the Rails asset pipeline! - - -[Sinon.JS]: http://sinonjs.org/ -[Chai]: http://chaijs.com/ -[spymethods]: http://sinonjs.org/docs/#spies-api -[sinonassertions]: http://sinonjs.org/docs/#assertions -[Mocha]: http://visionmedia.github.com/mocha/ -[fixturedemo]: https://github.com/domenic/sinon-chai/tree/master/test/ -[AMD]: https://github.com/amdjs/amdjs-api/wiki/AMD -[Cymen Vig]: https://github.com/cymen -[a Ruby gem]: https://github.com/cymen/sinon-chai-rails diff --git a/app/bower_components/sinon-chai/lib/sinon-chai.js b/app/bower_components/sinon-chai/lib/sinon-chai.js deleted file mode 100644 index 9120ad4..0000000 --- a/app/bower_components/sinon-chai/lib/sinon-chai.js +++ /dev/null @@ -1,131 +0,0 @@ -(function (sinonChai) { - "use strict"; - - // Module systems magic dance. - - /* istanbul ignore else */ - if (typeof require === "function" && typeof exports === "object" && typeof module === "object") { - // NodeJS - module.exports = sinonChai; - } else if (typeof define === "function" && define.amd) { - // AMD - define(function () { - return sinonChai; - }); - } else { - // Other environment (usually -``` - -### Add Service Worker Toolbox to your service worker script - -In your service worker you just need to use `importScripts` to load Service Worker Toolbox - -```javascript -importScripts('bower_components/sw-toolbox/sw-toolbox.js'); // Update path to match your own setup -``` - -### Use the toolbox - -To understand how to use the toolbox read the [usage](https://googlechrome.github.io/sw-toolbox/docs/master/tutorial-usage) and [api](https://googlechrome.github.io/sw-toolbox/docs/master/tutorial-api) documentation. - -## Support - -If you’ve found an error in this library, please file an issue at: https://github.com/GoogleChrome/sw-toolbox/issues. - -Patches are encouraged, and may be submitted by forking this project and submitting a pull request through GitHub. - -## License - -Copyright 2015 Google, Inc. - -Licensed under the [Apache License, Version 2.0](LICENSE) (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. diff --git a/app/bower_components/sw-toolbox/bower.json b/app/bower_components/sw-toolbox/bower.json deleted file mode 100644 index 43bb552..0000000 --- a/app/bower_components/sw-toolbox/bower.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "sw-toolbox", - "main": "sw-toolbox.js", - "moduleType": [ - "globals" - ], - "license": "Apache-2.0", - "ignore": [ - "**/.*", - "lib", - "tests", - "gulpfile.js" - ] -} diff --git a/app/bower_components/sw-toolbox/docs/cache-expiration-options/app.js b/app/bower_components/sw-toolbox/docs/cache-expiration-options/app.js deleted file mode 100644 index 28acc85..0000000 --- a/app/bower_components/sw-toolbox/docs/cache-expiration-options/app.js +++ /dev/null @@ -1,55 +0,0 @@ -/* eslint-env browser */ -'use strict'; - -// Please register for your own YouTube API key! -// https://developers.google.com/youtube/v3/getting-started#before-you-start -const API_KEY = 'AIzaSyC4trKMxwT42TUFHmikCc4xxQTWWxq5S0g'; -const API_URL = 'https://www.googleapis.com/youtube/v3/search'; - -function serializeUrlParams(params) { - return Object.keys(params).map(key => { - return encodeURIComponent(key) + '=' + encodeURIComponent(params[key]); - }).join('&'); -} - -function youtubeSearch(searchTerm, maxResults) { - let params = { - part: 'snippet', - maxResults: maxResults, - order: 'date', - key: API_KEY, - q: searchTerm - }; - - let url = new URL(API_URL); - url.search = serializeUrlParams(params); - - return fetch(url).then(response => { - if (response.ok) { - return response.json(); - } - throw new Error(`${response.status}: ${response.statusText}`); - }).then(function(json) { - return json.items; - }); -} - -document.querySelector('#search').addEventListener('submit', event => { - event.preventDefault(); - - var results = document.querySelector('#results'); - while (results.firstChild) { - results.removeChild(results.firstChild); - } - - let searchTerm = document.querySelector('#searchTerm').value; - let maxResults = document.querySelector('#maxResults').value; - - youtubeSearch(searchTerm, maxResults).then(videos => { - videos.forEach(video => { - let img = document.createElement('img'); - img.src = video.snippet.thumbnails.medium.url; - results.appendChild(img); - }); - }).catch(error => console.warn('YouTube search failed due to', error)); -}); diff --git a/app/bower_components/sw-toolbox/docs/cache-expiration-options/index.html b/app/bower_components/sw-toolbox/docs/cache-expiration-options/index.html deleted file mode 100644 index 8cd56ba..0000000 --- a/app/bower_components/sw-toolbox/docs/cache-expiration-options/index.html +++ /dev/null @@ -1,75 +0,0 @@ - - - Cache Expiration Demo - - - - - - -

Cache Expiration Demo

- -

Background

-

- The service worker in this example - demonstrates using the maxCacheEntries and maxCacheAgeSeconds - options. It uses a dedicated cache to hold YouTube video thumbnails. That - dedicated cache will purge entries once they're older than 30 seconds, and store at most 10 - entries. It uses the cacheFirst strategy, so any responses that are still in the - cache will be used directly, without going against the network. -

- -

- While this example uses both maxCacheEntries and maxCacheAgeSeconds, - it's possible to use each of those options independently. -

- -

- The cache used for YouTube thumbnail URLs is separate from the "default" cache, which is - used for all other requests, like YouTube API responses and this page's CSS, JavaScript, and - HTML. The page doesn't impose any upper limit on the size of that default cache, and we can - use a networkFirst strategy for it. -

- -

- Creating a dedicated cache with expiration options for dynamic, unbounded requests is a useful - pattern to follow. If we just used the default cache without imposing a cache expiration, - then that cache would grow in size as more and more searches were performed, needlessly - consuming disk space for old thumbnails that are likely no longer needed. -

- -

Live Demo

-

- Try increasing the number of thumbnails returned, or changing the search term, and then - observe the cache expirations logged in the developer console. -

- - -
- - - - - diff --git a/app/bower_components/sw-toolbox/docs/cache-expiration-options/service-worker.js b/app/bower_components/sw-toolbox/docs/cache-expiration-options/service-worker.js deleted file mode 100644 index 6da9462..0000000 --- a/app/bower_components/sw-toolbox/docs/cache-expiration-options/service-worker.js +++ /dev/null @@ -1,38 +0,0 @@ -(global => { - 'use strict'; - - // Load the sw-tookbox library. - importScripts('../../sw-toolbox.js'); - - // Turn on debug logging, visible in the Developer Tools' console. - global.toolbox.options.debug = true; - - // Set up a handler for HTTP GET requests: - // - /\.ytimg\.com\// will match any requests whose URL contains 'ytimg.com'. - // A narrower RegExp could be used, but just checking for ytimg.com anywhere - // in the URL should be fine for this sample. - // - toolbox.cacheFirst let us to use the predefined cache strategy for those - // requests. - global.toolbox.router.get(/\.ytimg\.com\//, global.toolbox.cacheFirst, { - // Use a dedicated cache for the responses, separate from the default cache. - cache: { - name: 'youtube-thumbnails', - // Store up to 10 entries in that cache. - maxEntries: 10, - // Expire any entries that are older than 30 seconds. - maxAgeSeconds: 30 - } - }); - - // By default, all requests that don't match our custom handler will use the - // toolbox.networkFirst cache strategy, and their responses will be stored in - // the default cache. - global.toolbox.router.default = global.toolbox.networkFirst; - - // Boilerplate to ensure our service worker takes control of the page as soon - // as possible. - global.addEventListener('install', - event => event.waitUntil(global.skipWaiting())); - global.addEventListener('activate', - event => event.waitUntil(global.clients.claim())); -})(self); diff --git a/app/bower_components/sw-toolbox/docs/cache-expiration-options/styles.css b/app/bower_components/sw-toolbox/docs/cache-expiration-options/styles.css deleted file mode 100644 index 699f63a..0000000 --- a/app/bower_components/sw-toolbox/docs/cache-expiration-options/styles.css +++ /dev/null @@ -1,10 +0,0 @@ -#results { - display: flex; - flex-direction: row; - flex-wrap: wrap; -} - -#results > img { - margin: 4px; - width: 320px; -} diff --git a/app/bower_components/sw-toolbox/docs/fonts/OpenSans-Bold-webfont.eot b/app/bower_components/sw-toolbox/docs/fonts/OpenSans-Bold-webfont.eot deleted file mode 100644 index 5d20d91..0000000 Binary files a/app/bower_components/sw-toolbox/docs/fonts/OpenSans-Bold-webfont.eot and /dev/null differ diff --git a/app/bower_components/sw-toolbox/docs/fonts/OpenSans-Bold-webfont.svg b/app/bower_components/sw-toolbox/docs/fonts/OpenSans-Bold-webfont.svg deleted file mode 100644 index 3ed7be4..0000000 --- a/app/bower_components/sw-toolbox/docs/fonts/OpenSans-Bold-webfont.svg +++ /dev/null @@ -1,1830 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/bower_components/sw-toolbox/docs/fonts/OpenSans-Bold-webfont.woff b/app/bower_components/sw-toolbox/docs/fonts/OpenSans-Bold-webfont.woff deleted file mode 100644 index 1205787..0000000 Binary files a/app/bower_components/sw-toolbox/docs/fonts/OpenSans-Bold-webfont.woff and /dev/null differ diff --git a/app/bower_components/sw-toolbox/docs/fonts/OpenSans-BoldItalic-webfont.eot b/app/bower_components/sw-toolbox/docs/fonts/OpenSans-BoldItalic-webfont.eot deleted file mode 100644 index 1f639a1..0000000 Binary files a/app/bower_components/sw-toolbox/docs/fonts/OpenSans-BoldItalic-webfont.eot and /dev/null differ diff --git a/app/bower_components/sw-toolbox/docs/fonts/OpenSans-BoldItalic-webfont.svg b/app/bower_components/sw-toolbox/docs/fonts/OpenSans-BoldItalic-webfont.svg deleted file mode 100644 index 6a2607b..0000000 --- a/app/bower_components/sw-toolbox/docs/fonts/OpenSans-BoldItalic-webfont.svg +++ /dev/null @@ -1,1830 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/bower_components/sw-toolbox/docs/fonts/OpenSans-BoldItalic-webfont.woff b/app/bower_components/sw-toolbox/docs/fonts/OpenSans-BoldItalic-webfont.woff deleted file mode 100644 index ed760c0..0000000 Binary files a/app/bower_components/sw-toolbox/docs/fonts/OpenSans-BoldItalic-webfont.woff and /dev/null differ diff --git a/app/bower_components/sw-toolbox/docs/fonts/OpenSans-Italic-webfont.eot b/app/bower_components/sw-toolbox/docs/fonts/OpenSans-Italic-webfont.eot deleted file mode 100644 index 0c8a0ae..0000000 Binary files a/app/bower_components/sw-toolbox/docs/fonts/OpenSans-Italic-webfont.eot and /dev/null differ diff --git a/app/bower_components/sw-toolbox/docs/fonts/OpenSans-Italic-webfont.svg b/app/bower_components/sw-toolbox/docs/fonts/OpenSans-Italic-webfont.svg deleted file mode 100644 index e1075dc..0000000 --- a/app/bower_components/sw-toolbox/docs/fonts/OpenSans-Italic-webfont.svg +++ /dev/null @@ -1,1830 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/bower_components/sw-toolbox/docs/fonts/OpenSans-Italic-webfont.woff b/app/bower_components/sw-toolbox/docs/fonts/OpenSans-Italic-webfont.woff deleted file mode 100644 index ff652e6..0000000 Binary files a/app/bower_components/sw-toolbox/docs/fonts/OpenSans-Italic-webfont.woff and /dev/null differ diff --git a/app/bower_components/sw-toolbox/docs/fonts/OpenSans-Light-webfont.eot b/app/bower_components/sw-toolbox/docs/fonts/OpenSans-Light-webfont.eot deleted file mode 100644 index 1486840..0000000 Binary files a/app/bower_components/sw-toolbox/docs/fonts/OpenSans-Light-webfont.eot and /dev/null differ diff --git a/app/bower_components/sw-toolbox/docs/fonts/OpenSans-Light-webfont.svg b/app/bower_components/sw-toolbox/docs/fonts/OpenSans-Light-webfont.svg deleted file mode 100644 index 11a472c..0000000 --- a/app/bower_components/sw-toolbox/docs/fonts/OpenSans-Light-webfont.svg +++ /dev/null @@ -1,1831 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/bower_components/sw-toolbox/docs/fonts/OpenSans-Light-webfont.woff b/app/bower_components/sw-toolbox/docs/fonts/OpenSans-Light-webfont.woff deleted file mode 100644 index e786074..0000000 Binary files a/app/bower_components/sw-toolbox/docs/fonts/OpenSans-Light-webfont.woff and /dev/null differ diff --git a/app/bower_components/sw-toolbox/docs/fonts/OpenSans-LightItalic-webfont.eot b/app/bower_components/sw-toolbox/docs/fonts/OpenSans-LightItalic-webfont.eot deleted file mode 100644 index 8f44592..0000000 Binary files a/app/bower_components/sw-toolbox/docs/fonts/OpenSans-LightItalic-webfont.eot and /dev/null differ diff --git a/app/bower_components/sw-toolbox/docs/fonts/OpenSans-LightItalic-webfont.svg b/app/bower_components/sw-toolbox/docs/fonts/OpenSans-LightItalic-webfont.svg deleted file mode 100644 index 431d7e3..0000000 --- a/app/bower_components/sw-toolbox/docs/fonts/OpenSans-LightItalic-webfont.svg +++ /dev/null @@ -1,1835 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/bower_components/sw-toolbox/docs/fonts/OpenSans-LightItalic-webfont.woff b/app/bower_components/sw-toolbox/docs/fonts/OpenSans-LightItalic-webfont.woff deleted file mode 100644 index 43e8b9e..0000000 Binary files a/app/bower_components/sw-toolbox/docs/fonts/OpenSans-LightItalic-webfont.woff and /dev/null differ diff --git a/app/bower_components/sw-toolbox/docs/fonts/OpenSans-Regular-webfont.eot b/app/bower_components/sw-toolbox/docs/fonts/OpenSans-Regular-webfont.eot deleted file mode 100644 index 6bbc3cf..0000000 Binary files a/app/bower_components/sw-toolbox/docs/fonts/OpenSans-Regular-webfont.eot and /dev/null differ diff --git a/app/bower_components/sw-toolbox/docs/fonts/OpenSans-Regular-webfont.svg b/app/bower_components/sw-toolbox/docs/fonts/OpenSans-Regular-webfont.svg deleted file mode 100644 index 25a3952..0000000 --- a/app/bower_components/sw-toolbox/docs/fonts/OpenSans-Regular-webfont.svg +++ /dev/null @@ -1,1831 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/bower_components/sw-toolbox/docs/fonts/OpenSans-Regular-webfont.woff b/app/bower_components/sw-toolbox/docs/fonts/OpenSans-Regular-webfont.woff deleted file mode 100644 index e231183..0000000 Binary files a/app/bower_components/sw-toolbox/docs/fonts/OpenSans-Regular-webfont.woff and /dev/null differ diff --git a/app/bower_components/sw-toolbox/docs/index.html b/app/bower_components/sw-toolbox/docs/index.html deleted file mode 100644 index 105adb5..0000000 --- a/app/bower_components/sw-toolbox/docs/index.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - JSDoc: Home - - - - - - - - - - -
- -

Home

- - - - - - - - -

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

Service Worker Toolbox

Build Status Dependency Status devDependency Status

-
-

A collection of tools for service workers

-
-

Service Worker Toolbox provides some simple helpers for use in creating your own service workers. Specifically, it provides common caching patterns and an expressive approach to using those strategies for runtime requests. If you're not sure what service workers are or what they are for, start with the explainer doc.

-

Install

Service Worker Toolbox is available through Bower, npm or direct from GitHub:

-

bower install --save sw-toolbox

-

npm install --save sw-toolbox

-

git clone https://github.com/GoogleChrome/sw-toolbox.git

-

Register your service worker

From your registering page, register your service worker in the normal way. For example:

-
navigator.serviceWorker.register('my-service-worker.js');

As implemented in Chrome 40 or later, a service worker must exist at the root of the scope that you intend it to control, or higher. So if you want all of the pages under /myapp/ to be controlled by the worker, the worker script itself must be served from either / or /myapp/. The default scope is the containing path of the service worker script.

-

For even lower friction you can instead include the Service Worker Toolbox companion script in your HTML as shown below. Be aware that this is not customizable. If you need to do anything fancier than registering with a default scope, you'll need to use the standard registration.

-
<script src="/path/to/sw-toolbox/companion.js" data-service-worker="my-service-worker.js"></script>

Add Service Worker Toolbox to your service worker script

In your service worker you just need to use importScripts to load Service Worker Toolbox

-
importScripts('bower_components/sw-toolbox/sw-toolbox.js'); // Update path to match your own setup

Use the toolbox

To understand how to use the toolbox read the usage and api documentation.

-

Support

If you’ve found an error in this library, please file an issue at: https://github.com/GoogleChrome/sw-toolbox/issues.

-

Patches are encouraged, and may be submitted by forking this project and submitting a pull request through GitHub.

-

License

Copyright 2015 Google, Inc.

-

Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. You may -obtain a copy of the License at

-

http://www.apache.org/licenses/LICENSE-2.0

-

Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License.

-
- - - - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.0 on Thu Jun 09 2016 13:34:34 GMT+0100 (BST) -
- - - - - \ No newline at end of file diff --git a/app/bower_components/sw-toolbox/docs/scripts/linenumber.js b/app/bower_components/sw-toolbox/docs/scripts/linenumber.js deleted file mode 100644 index 8d52f7e..0000000 --- a/app/bower_components/sw-toolbox/docs/scripts/linenumber.js +++ /dev/null @@ -1,25 +0,0 @@ -/*global document */ -(function() { - var source = document.getElementsByClassName('prettyprint source linenums'); - var i = 0; - var lineNumber = 0; - var lineId; - var lines; - var totalLines; - var anchorHash; - - if (source && source[0]) { - anchorHash = document.location.hash.substring(1); - lines = source[0].getElementsByTagName('li'); - totalLines = lines.length; - - for (; i < totalLines; i++) { - lineNumber++; - lineId = 'line' + lineNumber; - lines[i].id = lineId; - if (lineId === anchorHash) { - lines[i].className += ' selected'; - } - } - } -})(); diff --git a/app/bower_components/sw-toolbox/docs/scripts/prettify/Apache-License-2.0.txt b/app/bower_components/sw-toolbox/docs/scripts/prettify/Apache-License-2.0.txt deleted file mode 100644 index d645695..0000000 --- a/app/bower_components/sw-toolbox/docs/scripts/prettify/Apache-License-2.0.txt +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/app/bower_components/sw-toolbox/docs/scripts/prettify/lang-css.js b/app/bower_components/sw-toolbox/docs/scripts/prettify/lang-css.js deleted file mode 100644 index 041e1f5..0000000 --- a/app/bower_components/sw-toolbox/docs/scripts/prettify/lang-css.js +++ /dev/null @@ -1,2 +0,0 @@ -PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\f\r ]+/,null," \t\r\n "]],[["str",/^"(?:[^\n\f\r"\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*"/,null],["str",/^'(?:[^\n\f\r'\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*'/,null],["lang-css-str",/^url\(([^"')]*)\)/i],["kwd",/^(?:url|rgb|!important|@import|@page|@media|@charset|inherit)(?=[^\w-]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*)\s*:/i],["com",/^\/\*[^*]*\*+(?:[^*/][^*]*\*+)*\//],["com", -/^(?:<\!--|--\>)/],["lit",/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],["lit",/^#[\da-f]{3,6}/i],["pln",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i],["pun",/^[^\s\w"']+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[["kwd",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[["str",/^[^"')]+/]]),["css-str"]); diff --git a/app/bower_components/sw-toolbox/docs/scripts/prettify/prettify.js b/app/bower_components/sw-toolbox/docs/scripts/prettify/prettify.js deleted file mode 100644 index eef5ad7..0000000 --- a/app/bower_components/sw-toolbox/docs/scripts/prettify/prettify.js +++ /dev/null @@ -1,28 +0,0 @@ -var q=null;window.PR_SHOULD_USE_CONTINUATION=!0; -(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a= -[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;ci[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m), -l=[],p={},d=0,g=e.length;d=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/, -q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/, -q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g, -"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a), -a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e} -for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"], -"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"], -H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"], -J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+ -I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]), -["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css", -/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}), -["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes", -hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p=0){var k=k.match(g),f,b;if(b= -!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p p:first-child, -.props td.description > p:first-child -{ - margin-top: 0; - padding-top: 0; -} - -.params td.description > p:last-child, -.props td.description > p:last-child -{ - margin-bottom: 0; - padding-bottom: 0; -} - -.disabled { - color: #454545; -} diff --git a/app/bower_components/sw-toolbox/docs/styles/prettify-jsdoc.css b/app/bower_components/sw-toolbox/docs/styles/prettify-jsdoc.css deleted file mode 100644 index 5a2526e..0000000 --- a/app/bower_components/sw-toolbox/docs/styles/prettify-jsdoc.css +++ /dev/null @@ -1,111 +0,0 @@ -/* JSDoc prettify.js theme */ - -/* plain text */ -.pln { - color: #000000; - font-weight: normal; - font-style: normal; -} - -/* string content */ -.str { - color: #006400; - font-weight: normal; - font-style: normal; -} - -/* a keyword */ -.kwd { - color: #000000; - font-weight: bold; - font-style: normal; -} - -/* a comment */ -.com { - font-weight: normal; - font-style: italic; -} - -/* a type name */ -.typ { - color: #000000; - font-weight: normal; - font-style: normal; -} - -/* a literal value */ -.lit { - color: #006400; - font-weight: normal; - font-style: normal; -} - -/* punctuation */ -.pun { - color: #000000; - font-weight: bold; - font-style: normal; -} - -/* lisp open bracket */ -.opn { - color: #000000; - font-weight: bold; - font-style: normal; -} - -/* lisp close bracket */ -.clo { - color: #000000; - font-weight: bold; - font-style: normal; -} - -/* a markup tag name */ -.tag { - color: #006400; - font-weight: normal; - font-style: normal; -} - -/* a markup attribute name */ -.atn { - color: #006400; - font-weight: normal; - font-style: normal; -} - -/* a markup attribute value */ -.atv { - color: #006400; - font-weight: normal; - font-style: normal; -} - -/* a declaration */ -.dec { - color: #000000; - font-weight: bold; - font-style: normal; -} - -/* a variable name */ -.var { - color: #000000; - font-weight: normal; - font-style: normal; -} - -/* a function name */ -.fun { - color: #000000; - font-weight: bold; - font-style: normal; -} - -/* Specify class=linenums on a pre to get line numbering */ -ol.linenums { - margin-top: 0; - margin-bottom: 0; -} diff --git a/app/bower_components/sw-toolbox/docs/styles/prettify-tomorrow.css b/app/bower_components/sw-toolbox/docs/styles/prettify-tomorrow.css deleted file mode 100644 index b6f92a7..0000000 --- a/app/bower_components/sw-toolbox/docs/styles/prettify-tomorrow.css +++ /dev/null @@ -1,132 +0,0 @@ -/* Tomorrow Theme */ -/* Original theme - https://github.com/chriskempson/tomorrow-theme */ -/* Pretty printing styles. Used with prettify.js. */ -/* SPAN elements with the classes below are added by prettyprint. */ -/* plain text */ -.pln { - color: #4d4d4c; } - -@media screen { - /* string content */ - .str { - color: #718c00; } - - /* a keyword */ - .kwd { - color: #8959a8; } - - /* a comment */ - .com { - color: #8e908c; } - - /* a type name */ - .typ { - color: #4271ae; } - - /* a literal value */ - .lit { - color: #f5871f; } - - /* punctuation */ - .pun { - color: #4d4d4c; } - - /* lisp open bracket */ - .opn { - color: #4d4d4c; } - - /* lisp close bracket */ - .clo { - color: #4d4d4c; } - - /* a markup tag name */ - .tag { - color: #c82829; } - - /* a markup attribute name */ - .atn { - color: #f5871f; } - - /* a markup attribute value */ - .atv { - color: #3e999f; } - - /* a declaration */ - .dec { - color: #f5871f; } - - /* a variable name */ - .var { - color: #c82829; } - - /* a function name */ - .fun { - color: #4271ae; } } -/* Use higher contrast and text-weight for printable form. */ -@media print, projection { - .str { - color: #060; } - - .kwd { - color: #006; - font-weight: bold; } - - .com { - color: #600; - font-style: italic; } - - .typ { - color: #404; - font-weight: bold; } - - .lit { - color: #044; } - - .pun, .opn, .clo { - color: #440; } - - .tag { - color: #006; - font-weight: bold; } - - .atn { - color: #404; } - - .atv { - color: #060; } } -/* Style */ -/* -pre.prettyprint { - background: white; - font-family: Consolas, Monaco, 'Andale Mono', monospace; - font-size: 12px; - line-height: 1.5; - border: 1px solid #ccc; - padding: 10px; } -*/ - -/* Specify class=linenums on a pre to get line numbering */ -ol.linenums { - margin-top: 0; - margin-bottom: 0; } - -/* IE indents via margin-left */ -li.L0, -li.L1, -li.L2, -li.L3, -li.L4, -li.L5, -li.L6, -li.L7, -li.L8, -li.L9 { - /* */ } - -/* Alternate shading for lines */ -li.L1, -li.L3, -li.L5, -li.L7, -li.L9 { - /* */ } diff --git a/app/bower_components/sw-toolbox/docs/sw-toolbox.js b/app/bower_components/sw-toolbox/docs/sw-toolbox.js deleted file mode 100644 index 528e708..0000000 --- a/app/bower_components/sw-toolbox/docs/sw-toolbox.js +++ /dev/null @@ -1,51 +0,0 @@ -/* - Copyright 2014 Google Inc. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.toolbox = f()}})(function(){var define,module,exports;return (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);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 require=="function"&&require;for(var o=0;or.value[TIMESTAMP_PROPERTY]){var t=r.value[URL_PROPERTY];u.push(t),s["delete"](t),r["continue"]()}},c.oncomplete=function(){t(u)},c.onabort=o}):Promise.resolve([])}function expireExtraEntries(e,r){return r?new Promise(function(n,t){var o=[],i=e.transaction(STORE_NAME,"readwrite"),u=i.objectStore(STORE_NAME),c=u.index(TIMESTAMP_PROPERTY),s=c.count();c.count().onsuccess=function(){var e=s.result;e>r&&(c.openCursor().onsuccess=function(n){var t=n.target.result;if(t){var i=t.value[URL_PROPERTY];o.push(i),u["delete"](i),e-o.length>r&&t["continue"]()}})},i.oncomplete=function(){n(o)},i.onabort=t}):Promise.resolve([])}function expireEntries(e,r,n,t){return expireOldEntries(e,n,t).then(function(n){return expireExtraEntries(e,r).then(function(e){return n.concat(e)})})}var DB_PREFIX="sw-toolbox-",DB_VERSION=1,STORE_NAME="store",URL_PROPERTY="url",TIMESTAMP_PROPERTY="timestamp",cacheNameToDbPromise={};module.exports={getDb:getDb,setTimestampForUrl:setTimestampForUrl,expireEntries:expireEntries}; -},{}],3:[function(require,module,exports){ -"use strict";var scope;scope=self.registration?self.registration.scope:self.scope||new URL("./",self.location).href,module.exports={cache:{name:"$$$toolbox-cache$$$"+scope+"$$$",maxAgeSeconds:null,maxEntries:null},debug:!1,networkTimeoutSeconds:null,preCacheItems:[],successResponses:/^0|([123]\d\d)|(40[14567])|410$/}; -},{}],4:[function(require,module,exports){ -"use strict";var url=new URL("./",self.location),basePath=url.pathname,pathRegexp=require("path-to-regexp"),Route=function(e,t,i,s){t instanceof RegExp?this.fullUrlRegExp=t:(0!==t.indexOf("/")&&(t=basePath+t),this.keys=[],this.regexp=pathRegexp(t,this.keys)),this.method=e,this.options=s,this.handler=i};Route.prototype.makeHandler=function(e){var t;if(this.regexp){var i=this.regexp.exec(e);t={},this.keys.forEach(function(e,s){t[e.name]=i[s+1]})}return function(e){return this.handler(e,t,this.options)}.bind(this)},module.exports=Route; -},{"path-to-regexp":14}],5:[function(require,module,exports){ -"use strict";function regexEscape(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var Route=require("./route"),keyMatch=function(e,t){for(var r=e.entries(),o=r.next(),n=[];!o.done;){var u=new RegExp(o.value[0]);u.test(t)&&n.push(o.value[1]),o=r.next()}return n},Router=function(){this.routes=new Map,this.routes.set(RegExp,new Map),this["default"]=null};["get","post","put","delete","head","any"].forEach(function(e){Router.prototype[e]=function(t,r,o){return this.add(e,t,r,o)}}),Router.prototype.add=function(e,t,r,o){o=o||{};var n;t instanceof RegExp?n=RegExp:(n=o.origin||self.location.origin,n=n instanceof RegExp?n.source:regexEscape(n)),e=e.toLowerCase();var u=new Route(e,t,r,o);this.routes.has(n)||this.routes.set(n,new Map);var a=this.routes.get(n);a.has(e)||a.set(e,new Map);var s=a.get(e),i=u.regexp||u.fullUrlRegExp;s.set(i.source,u)},Router.prototype.matchMethod=function(e,t){var r=new URL(t),o=r.origin,n=r.pathname;return this._match(e,keyMatch(this.routes,o),n)||this._match(e,[this.routes.get(RegExp)],t)},Router.prototype._match=function(e,t,r){if(0===t.length)return null;for(var o=0;o0)return a[0].makeHandler(r)}}return null},Router.prototype.match=function(e){return this.matchMethod(e.method,e.url)||this.matchMethod("any",e.url)},module.exports=new Router; -},{"./route":4}],6:[function(require,module,exports){ -"use strict";function cacheFirst(e,r,t){return helpers.debug("Strategy: cache first ["+e.url+"]",t),helpers.openCache(t).then(function(r){return r.match(e).then(function(r){return r?r:helpers.fetchAndCache(e,t)})})}var helpers=require("../helpers");module.exports=cacheFirst; -},{"../helpers":1}],7:[function(require,module,exports){ -"use strict";function cacheOnly(e,r,c){return helpers.debug("Strategy: cache only ["+e.url+"]",c),helpers.openCache(c).then(function(r){return r.match(e)})}var helpers=require("../helpers");module.exports=cacheOnly; -},{"../helpers":1}],8:[function(require,module,exports){ -"use strict";function fastest(e,n,t){return helpers.debug("Strategy: fastest ["+e.url+"]",t),new Promise(function(r,s){var c=!1,o=[],a=function(e){o.push(e.toString()),c?s(new Error('Both cache and network failed: "'+o.join('", "')+'"')):c=!0},h=function(e){e instanceof Response?r(e):a("No result returned")};helpers.fetchAndCache(e.clone(),t).then(h,a),cacheOnly(e,n,t).then(h,a)})}var helpers=require("../helpers"),cacheOnly=require("./cacheOnly");module.exports=fastest; -},{"../helpers":1,"./cacheOnly":7}],9:[function(require,module,exports){ -module.exports={networkOnly:require("./networkOnly"),networkFirst:require("./networkFirst"),cacheOnly:require("./cacheOnly"),cacheFirst:require("./cacheFirst"),fastest:require("./fastest")}; -},{"./cacheFirst":6,"./cacheOnly":7,"./fastest":8,"./networkFirst":10,"./networkOnly":11}],10:[function(require,module,exports){ -"use strict";function networkFirst(e,r,t){t=t||{};var s=t.successResponses||globalOptions.successResponses,n=t.networkTimeoutSeconds||globalOptions.networkTimeoutSeconds;return helpers.debug("Strategy: network first ["+e.url+"]",t),helpers.openCache(t).then(function(r){var o,u,i=[];if(n){var c=new Promise(function(t){o=setTimeout(function(){r.match(e).then(function(e){e&&t(e)})},1e3*n)});i.push(c)}var a=helpers.fetchAndCache(e,t).then(function(e){if(o&&clearTimeout(o),s.test(e.status))return e;throw helpers.debug("Response was an HTTP error: "+e.statusText,t),u=e,new Error("Bad response")})["catch"](function(s){return helpers.debug("Network or response error, fallback to cache ["+e.url+"]",t),r.match(e).then(function(e){if(e)return e;if(u)return u;throw s})});return i.push(a),Promise.race(i)})}var globalOptions=require("../options"),helpers=require("../helpers");module.exports=networkFirst; -},{"../helpers":1,"../options":3}],11:[function(require,module,exports){ -"use strict";function networkOnly(e,r,t){return helpers.debug("Strategy: network only ["+e.url+"]",t),fetch(e)}var helpers=require("../helpers");module.exports=networkOnly; -},{"../helpers":1}],12:[function(require,module,exports){ -"use strict";function cache(e,t){return helpers.openCache(t).then(function(t){return t.add(e)})}function uncache(e,t){return helpers.openCache(t).then(function(t){return t["delete"](e)})}function precache(e){e instanceof Promise||validatePrecacheInput(e),options.preCacheItems=options.preCacheItems.concat(e)}require("serviceworker-cache-polyfill");var options=require("./options"),router=require("./router"),helpers=require("./helpers"),strategies=require("./strategies");helpers.debug("Service Worker Toolbox is loading");var flatten=function(e){return e.reduce(function(e,t){return e.concat(t)},[])},validatePrecacheInput=function(e){var t=Array.isArray(e);if(t&&e.forEach(function(e){"string"==typeof e||e instanceof Request||(t=!1)}),!t)throw new TypeError("The precache method expects either an array of strings and/or Requests or a Promise that resolves to an array of strings and/or Requests.");return e};self.addEventListener("install",function(e){var t=options.cache.name+"$$$inactive$$$";helpers.debug("install event fired"),helpers.debug("creating cache ["+t+"]"),e.waitUntil(helpers.openCache({cache:{name:t}}).then(function(e){return Promise.all(options.preCacheItems).then(flatten).then(validatePrecacheInput).then(function(t){return helpers.debug("preCache list: "+(t.join(", ")||"(none)")),e.addAll(t)})}))}),self.addEventListener("activate",function(e){helpers.debug("activate event fired");var t=options.cache.name+"$$$inactive$$$";e.waitUntil(helpers.renameCache(t,options.cache.name))}),self.addEventListener("fetch",function(e){var t=router.match(e.request);t?e.respondWith(t(e.request)):router["default"]&&"GET"===e.request.method&&e.respondWith(router["default"](e.request))}),module.exports={networkOnly:strategies.networkOnly,networkFirst:strategies.networkFirst,cacheOnly:strategies.cacheOnly,cacheFirst:strategies.cacheFirst,fastest:strategies.fastest,router:router,options:options,cache:cache,uncache:uncache,precache:precache}; -},{"./helpers":1,"./options":3,"./router":5,"./strategies":9,"serviceworker-cache-polyfill":15}],13:[function(require,module,exports){ -module.exports=Array.isArray||function(r){return"[object Array]"==Object.prototype.toString.call(r)}; -},{}],14:[function(require,module,exports){ -function parse(e){for(var t,r=[],n=0,o=0,a="";null!=(t=PATH_REGEXP.exec(e));){var p=t[0],i=t[1],s=t.index;if(a+=e.slice(o,s),o=s+p.length,i)a+=i[1];else{var c=e[o],u=t[2],l=t[3],f=t[4],g=t[5],x=t[6],h=t[7];a&&(r.push(a),a="");var d=null!=u&&null!=c&&c!==u,y="+"===x||"*"===x,m="?"===x||"*"===x,R=t[2]||"/",T=f||g||(h?".*":"[^"+R+"]+?");r.push({name:l||n++,prefix:u||"",delimiter:R,optional:m,repeat:y,partial:d,asterisk:!!h,pattern:escapeGroup(T)})}}return o=46||"Chrome"===r&&n>=50)||(Cache.prototype.addAll=function(t){function e(t){this.name="NetworkError",this.code=19,this.message=t}var r=this;return e.prototype=Object.create(Error.prototype),Promise.resolve().then(function(){if(arguments.length<1)throw new TypeError;return t=t.map(function(t){return t instanceof Request?t:String(t)}),Promise.all(t.map(function(t){"string"==typeof t&&(t=new Request(t));var r=new URL(t.url).protocol;if("http:"!==r&&"https:"!==r)throw new e("Invalid scheme");return fetch(t.clone())}))}).then(function(n){if(n.some(function(t){return!t.ok}))throw new e("Incorrect response status");return Promise.all(n.map(function(e,n){return r.put(t[n],e)}))}).then(function(){})},Cache.prototype.add=function(t){return this.addAll([t])})}(); -},{}]},{},[12])(12) -}); - - -//# sourceMappingURL=./build/sw-toolbox.map.json \ No newline at end of file diff --git a/app/bower_components/sw-toolbox/docs/tutorial-api.html b/app/bower_components/sw-toolbox/docs/tutorial-api.html deleted file mode 100644 index 1734459..0000000 --- a/app/bower_components/sw-toolbox/docs/tutorial-api.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - JSDoc: Tutorial: API - - - - - - - - - - -
- -

Tutorial: API

- -
- -
- - -

API

-
- -
-

Options

All options can be specified globally via properties of toolbox.options. -Any individual options can be configured on a per-handler basis, via the Object passed as the -third parameter to toolbox.router methods.

-

debug [Boolean]

Determines whether extra information is logged to the browser's console.

-

Default: false

-

networkTimeoutSeconds [Number]

A timeout that applies to the toolbox.networkFirst built-in handler. -If networkTimeoutSeconds is set, then any network requests that take longer than that amount of time -will automatically fall back to the cached response if one exists. When -networkTimeoutSeconds is not set, the browser's native networking timeout logic applies.

-

Default: null

-

cache [Object]

Various properties of cache control the behavior of the default cache when set via -toolbox.options.cache, or the cache used by a specific request handler.

-

cache.name [String]

The name of the Cache -used to store Response objects. Using a unique name -allows you to customize the cache's maximum size and age of entries.

-

Default: Generated at runtime based on the service worker's registration.scope value.

-

cache.maxEntries [Number]

Imposes a least-recently used cache expiration policy -on entries cached via the various built-in handlers. You can use this with a cache that's dedicated -to storing entries for a dynamic set of resources with no natural limit. Setting cache.maxEntries to, e.g., -10 would mean that after the 11th entry is cached, the least-recently used entry would be -automatically deleted. The cache should never end up growing beyond cache.maxEntries entries. -This option will only take effect if cache.name is also set. -It can be used alone or in conjunction with cache.maxAgeSeconds.

-

Default: null

-

cache.maxAgeSeconds [Number]

Imposes a maximum age for cache entries, in seconds. -You can use this with a cache that's dedicated to storing entries for a dynamic set of resources -with no natural limit. Setting cache.maxAgeSeconds to, e.g., 60 * 60 * 24 would mean that any -entries older than a day would automatically be deleted. -This option will only take effect if cache.name is also set. -It can be used alone or in conjunction with cache.maxEntries.

-

Default: null

-

Handlers

There are five built-in handlers to cover the most common network strategies. For more information about offline strategies see the Offline Cookbook.

-

toolbox.networkFirst

Try to handle the request by fetching from the network. If it succeeds, store the response in the cache. Otherwise, try to fulfill the request from the cache. This is the strategy to use for basic read-through caching. It's also good for API requests where you always want the freshest data when it is available but would rather have stale data than no data.

-

toolbox.cacheFirst

If the request matches a cache entry, respond with that. Otherwise try to fetch the resource from the network. If the network request succeeds, update the cache. This option is good for resources that don't change, or have some other update mechanism.

-

toolbox.fastest

Request the resource from both the cache and the network in parallel. Respond with whichever returns first. Usually this will be the cached version, if there is one. On the one hand this strategy will always make a network request, even if the resource is cached. On the other hand, if/when the network request completes the cache is updated, so that future cache reads will be more up-to-date.

-

toolbox.cacheOnly

Resolve the request from the cache, or fail. This option is good for when you need to guarantee that no network request will be made, for example saving battery on mobile.

-

toolbox.networkOnly

Handle the request by trying to fetch the URL from the network. If the fetch fails, fail the request. Essentially the same as not creating a route for the URL at all.

-

Methods

- -

toolbox.router.get(urlPattern, handler, options)

toolbox.router.post(urlPattern, handler, options)

toolbox.router.put(urlPattern, handler, options)

toolbox.router.delete(urlPattern, handler, options)

toolbox.router.head(urlPattern, handler, options)

Create a route that causes requests for URLs matching urlPattern to be resolved by calling handler. Matches requests using the GET, POST, PUT, DELETE or HEAD HTTP methods respectively.

-
    -
  • urlPattern - an Express style route. See the docs for the path-to-regexp module for the full syntax
  • -
  • handler - a request handler, as described above
  • -
  • options - an object containing options for the route. This options object will be passed to the request handler. The origin option is specific to the router methods, and can be either an exact string or a Regexp against which the origin of the Request must match for the route to be used.
  • -
-

toolbox.router.any(urlPattern, handler, options)

Like toolbox.router.get, etc., but matches any HTTP method.

-

toolbox.router.default

Takes a function to use as the request handler for any GET request that does not match a route.

-

toolbox.precache(arrayOfURLs)

Add each URL in arrayOfURLs to the list of resources that should be cached during the service worker install step. Note that this needs to be called before the install event is triggered, so you should do it on the first run of your script.

-

toolbox.cache(url, options)

Causes the resource at url to be added to the cache and returns a Promise that resolves with void. The options parameter supports the debug and cache global options.

-

toolbox.uncache(url, options)

Causes the resource at url to be removed from the cache and returns a Promise that resolves to true if the cache entry is deleted. The options parameter supports the debug and cache global options.

-
- -
- -
- - - -
- -
- Documentation generated by JSDoc 3.4.0 on Thu Jun 09 2016 13:34:34 GMT+0100 (BST) -
- - - - - \ No newline at end of file diff --git a/app/bower_components/sw-toolbox/docs/tutorial-recipes.html b/app/bower_components/sw-toolbox/docs/tutorial-recipes.html deleted file mode 100644 index 0ea6f1e..0000000 --- a/app/bower_components/sw-toolbox/docs/tutorial-recipes.html +++ /dev/null @@ -1,60 +0,0 @@ - - - - - JSDoc: Tutorial: Service Worker Toolbox Recipes - - - - - - - - - - -
- -

Tutorial: Service Worker Toolbox Recipes

- -
- -
- - -

Service Worker Toolbox Recipes

-
- -
-
    -
  • -

    Cache Expiration

    -

    - Demonstrates using the maxEntries and maxAgeSeconds options - to limit the number and age of entries stored in a cache dedicated to images fetched - from an API. -

    -
  • -
-
- -
- -
- - - -
- -
- Documentation generated by JSDoc 3.4.0 on Thu Jun 09 2016 13:34:34 GMT+0100 (BST) -
- - - - - \ No newline at end of file diff --git a/app/bower_components/sw-toolbox/docs/tutorial-usage.html b/app/bower_components/sw-toolbox/docs/tutorial-usage.html deleted file mode 100644 index 2b39fbe..0000000 --- a/app/bower_components/sw-toolbox/docs/tutorial-usage.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - JSDoc: Tutorial: Usage - - - - - - - - - - -
- -

Tutorial: Usage

- -
- -
- - -

Usage

-
- -
-

Basic Routes

A route is a URL pattern and request method associated with a handler. -It defines the behaviour for a section of the site. -Routing is the process of matching an incoming request with the most -appropriate route. To define a route you call the appropriate method on -toolbox.router.

-

For example, to send GET requests for the URL '/myapp/index.html' to the -built-in toolbox.networkFirst handler, you would write the following in your -service worker file:

-

toolbox.router.get('/myapp/index.html', toolbox.networkFirst);

-

If you don't need wildcards in your route, and your route applies to the same -domain as your main site, then you can use a string like '/myapp/index.html'. -However, if you need wildcards (e.g. match any URL that begins with -/myapp/), or if you need to match URLs that belong to different domains (e.g. -match https://othersite.com/api/), sw-toolbox has two options for -configuring your routes.

-

Express-style Routes

For developers familiar with Express routing, -sw-toolbox offers support for similar named wildcards, via the -path-to-regexp library.

-

If you use a String to define your route, it's assumed you're using -Express-style routes.

-

By default, a route will only match URLs on the same origin as the service -worker. If you'd like your Express-style routes to match URLs on different -origins, you need to pass in a value for the origin option. The value could be -either a String (which is checked for an exact match) or a RegExp object. -In both cases, it's matched against the full origin of the URL -(e.g. 'https://example.com').

-

Some examples of using Express-style routing include:

-
// URL patterns are the same syntax as Express routes
-// (http://expressjs.com/guide/routing.html)
-toolbox.router.get(':foo/index.html', function(request, values) {
-  return new Response('Handled a request for ' + request.url +
-      ', where foo is "' + values.foo + '"');
-});
-
-// For requests to other origins, specify the origin as an option
-toolbox.router.post('/(.*)', apiHandler, {origin: 'https://api.example.com'});

Regular Expression Routes

Developers who are more comfortable using regular expressions -can use an alternative syntax to define routes, passing in a RegExp -object as the first parameter. This RegExp will be matched against the full -request URL when determining whether the route applies, including the origin and -path. This can lead to simpler cross-origin routing vs. Express-style routes, -since both the origin and the path are matched simultaneously, without having -to specify a separate origin option.

-

Note that while Express-style routes allow you to name path fragment -parameters that will be passed to your handler (see values.foo in the previous -example), that functionality is not supported while using regular expression -routes.

-

Some examples of using Regular Expression routing include:

-
// Match URLs that end in index.html
-toolbox.router.get(/index.html$/, function(request) {
-  return new Response('Handled a request for ' + request.url);
-});
-
-// Match URLs that begin with https://api.example.com
-toolbox.router.post(/^https://api.example.com\//, apiHandler);

The Default Route

sw-toolbox supports defining an optional "default" route via -toolbox.router.default that is used whenever there is no alternative route for -a given URL. If toolbox.router.default is not set, then sw-toolbox will -just ignore requests for URLs that don't match any alternative routes, and the -requests will potentially be handled by the browser as if there were no -service worker involvement.

-
// Provide a default handler for GET requests
-toolbox.router.default = myDefaultRequestHandler;

Precaching

You can provide a list of resources which will be cached at service worker install time

-
toolbox.precache(['/index.html', '/site.css', '/images/logo.png']);

Defining Request Handlers

A request handler takes three arguments.

-
var myHandler = function(request, values, options) {
-  // ...
-}
    -
  • request - The Request object that triggered the fetch event
  • -
  • values - When using Express-style routing paths, this will be an object -whose keys are the placeholder names in the URL pattern, with the values being -the corresponding part of the request URL. For example, with a URL pattern of -'/images/:size/:name.jpg' and an actual URL of '/images/large/unicorns.jpg', -values would be {size: 'large', name: 'unicorns'}. -When using a RegExp for the path, values will not be set.
  • -
  • options - the options passed to one of the router methods.
  • -
-

The return value should be a Response, or a Promise that resolves with a Response. If another value is returned, or if the returned Promise is rejected, the Request will fail which will appear to be a NetworkError to the page that made the request.

-
- -
- -
- - - -
- -
- Documentation generated by JSDoc 3.4.0 on Thu Jun 09 2016 13:34:34 GMT+0100 (BST) -
- - - - - \ No newline at end of file diff --git a/app/bower_components/sw-toolbox/package.json b/app/bower_components/sw-toolbox/package.json deleted file mode 100644 index 8944e74..0000000 --- a/app/bower_components/sw-toolbox/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "sw-toolbox", - "version": "3.2.1", - "license": "Apache-2.0", - "scripts": { - "publish-release": "./node_modules/sw-testing-helpers/project/publish-release.sh", - "build": "gulp default", - "build-docs": "jsdoc -c jsdoc.json && cp ./build/sw-toolbox.js ./docs/", - "test": "gulp lint && gulp test:automated", - "bundle": "./project/create-release-bundle.sh" - }, - "main": "lib/sw-toolbox.js", - "repository": "https://github.com/GoogleChrome/sw-toolbox", - "dependencies": { - "serviceworker-cache-polyfill": "^4.0.0", - "path-to-regexp": "^1.0.1" - }, - "devDependencies": { - "browserify": "^12.0.1", - "browserify-header": "^0.9.2", - "chai": "^3.4.1", - "chromedriver": "^2.20.0", - "cookie-parser": "^1.4.1", - "eslint": "^1.10.3", - "eslint-config-google": "^0.3.0", - "express": "^4.13.3", - "gulp": "^3.9.0", - "gulp-eslint": "^1.1.1", - "gulp-gh-pages": "^0.5.4", - "gulp-mocha": "^2.2.0", - "jsdoc": "^3.4.0", - "jshint-stylish": "^2.1.0", - "minifyify": "^7.1.0", - "mocha": "^2.3.4", - "qunitjs": "^1.20.0", - "selenium-webdriver": "^2.48.2", - "sw-testing-helpers": "0.0.14", - "temp": "^0.8.3", - "vinyl-source-stream": "^1.1.0", - "which": "^1.2.4" - } -} diff --git a/app/bower_components/sw-toolbox/sw-toolbox.js b/app/bower_components/sw-toolbox/sw-toolbox.js deleted file mode 100644 index 528e708..0000000 --- a/app/bower_components/sw-toolbox/sw-toolbox.js +++ /dev/null @@ -1,51 +0,0 @@ -/* - Copyright 2014 Google Inc. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.toolbox = f()}})(function(){var define,module,exports;return (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);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 require=="function"&&require;for(var o=0;or.value[TIMESTAMP_PROPERTY]){var t=r.value[URL_PROPERTY];u.push(t),s["delete"](t),r["continue"]()}},c.oncomplete=function(){t(u)},c.onabort=o}):Promise.resolve([])}function expireExtraEntries(e,r){return r?new Promise(function(n,t){var o=[],i=e.transaction(STORE_NAME,"readwrite"),u=i.objectStore(STORE_NAME),c=u.index(TIMESTAMP_PROPERTY),s=c.count();c.count().onsuccess=function(){var e=s.result;e>r&&(c.openCursor().onsuccess=function(n){var t=n.target.result;if(t){var i=t.value[URL_PROPERTY];o.push(i),u["delete"](i),e-o.length>r&&t["continue"]()}})},i.oncomplete=function(){n(o)},i.onabort=t}):Promise.resolve([])}function expireEntries(e,r,n,t){return expireOldEntries(e,n,t).then(function(n){return expireExtraEntries(e,r).then(function(e){return n.concat(e)})})}var DB_PREFIX="sw-toolbox-",DB_VERSION=1,STORE_NAME="store",URL_PROPERTY="url",TIMESTAMP_PROPERTY="timestamp",cacheNameToDbPromise={};module.exports={getDb:getDb,setTimestampForUrl:setTimestampForUrl,expireEntries:expireEntries}; -},{}],3:[function(require,module,exports){ -"use strict";var scope;scope=self.registration?self.registration.scope:self.scope||new URL("./",self.location).href,module.exports={cache:{name:"$$$toolbox-cache$$$"+scope+"$$$",maxAgeSeconds:null,maxEntries:null},debug:!1,networkTimeoutSeconds:null,preCacheItems:[],successResponses:/^0|([123]\d\d)|(40[14567])|410$/}; -},{}],4:[function(require,module,exports){ -"use strict";var url=new URL("./",self.location),basePath=url.pathname,pathRegexp=require("path-to-regexp"),Route=function(e,t,i,s){t instanceof RegExp?this.fullUrlRegExp=t:(0!==t.indexOf("/")&&(t=basePath+t),this.keys=[],this.regexp=pathRegexp(t,this.keys)),this.method=e,this.options=s,this.handler=i};Route.prototype.makeHandler=function(e){var t;if(this.regexp){var i=this.regexp.exec(e);t={},this.keys.forEach(function(e,s){t[e.name]=i[s+1]})}return function(e){return this.handler(e,t,this.options)}.bind(this)},module.exports=Route; -},{"path-to-regexp":14}],5:[function(require,module,exports){ -"use strict";function regexEscape(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var Route=require("./route"),keyMatch=function(e,t){for(var r=e.entries(),o=r.next(),n=[];!o.done;){var u=new RegExp(o.value[0]);u.test(t)&&n.push(o.value[1]),o=r.next()}return n},Router=function(){this.routes=new Map,this.routes.set(RegExp,new Map),this["default"]=null};["get","post","put","delete","head","any"].forEach(function(e){Router.prototype[e]=function(t,r,o){return this.add(e,t,r,o)}}),Router.prototype.add=function(e,t,r,o){o=o||{};var n;t instanceof RegExp?n=RegExp:(n=o.origin||self.location.origin,n=n instanceof RegExp?n.source:regexEscape(n)),e=e.toLowerCase();var u=new Route(e,t,r,o);this.routes.has(n)||this.routes.set(n,new Map);var a=this.routes.get(n);a.has(e)||a.set(e,new Map);var s=a.get(e),i=u.regexp||u.fullUrlRegExp;s.set(i.source,u)},Router.prototype.matchMethod=function(e,t){var r=new URL(t),o=r.origin,n=r.pathname;return this._match(e,keyMatch(this.routes,o),n)||this._match(e,[this.routes.get(RegExp)],t)},Router.prototype._match=function(e,t,r){if(0===t.length)return null;for(var o=0;o0)return a[0].makeHandler(r)}}return null},Router.prototype.match=function(e){return this.matchMethod(e.method,e.url)||this.matchMethod("any",e.url)},module.exports=new Router; -},{"./route":4}],6:[function(require,module,exports){ -"use strict";function cacheFirst(e,r,t){return helpers.debug("Strategy: cache first ["+e.url+"]",t),helpers.openCache(t).then(function(r){return r.match(e).then(function(r){return r?r:helpers.fetchAndCache(e,t)})})}var helpers=require("../helpers");module.exports=cacheFirst; -},{"../helpers":1}],7:[function(require,module,exports){ -"use strict";function cacheOnly(e,r,c){return helpers.debug("Strategy: cache only ["+e.url+"]",c),helpers.openCache(c).then(function(r){return r.match(e)})}var helpers=require("../helpers");module.exports=cacheOnly; -},{"../helpers":1}],8:[function(require,module,exports){ -"use strict";function fastest(e,n,t){return helpers.debug("Strategy: fastest ["+e.url+"]",t),new Promise(function(r,s){var c=!1,o=[],a=function(e){o.push(e.toString()),c?s(new Error('Both cache and network failed: "'+o.join('", "')+'"')):c=!0},h=function(e){e instanceof Response?r(e):a("No result returned")};helpers.fetchAndCache(e.clone(),t).then(h,a),cacheOnly(e,n,t).then(h,a)})}var helpers=require("../helpers"),cacheOnly=require("./cacheOnly");module.exports=fastest; -},{"../helpers":1,"./cacheOnly":7}],9:[function(require,module,exports){ -module.exports={networkOnly:require("./networkOnly"),networkFirst:require("./networkFirst"),cacheOnly:require("./cacheOnly"),cacheFirst:require("./cacheFirst"),fastest:require("./fastest")}; -},{"./cacheFirst":6,"./cacheOnly":7,"./fastest":8,"./networkFirst":10,"./networkOnly":11}],10:[function(require,module,exports){ -"use strict";function networkFirst(e,r,t){t=t||{};var s=t.successResponses||globalOptions.successResponses,n=t.networkTimeoutSeconds||globalOptions.networkTimeoutSeconds;return helpers.debug("Strategy: network first ["+e.url+"]",t),helpers.openCache(t).then(function(r){var o,u,i=[];if(n){var c=new Promise(function(t){o=setTimeout(function(){r.match(e).then(function(e){e&&t(e)})},1e3*n)});i.push(c)}var a=helpers.fetchAndCache(e,t).then(function(e){if(o&&clearTimeout(o),s.test(e.status))return e;throw helpers.debug("Response was an HTTP error: "+e.statusText,t),u=e,new Error("Bad response")})["catch"](function(s){return helpers.debug("Network or response error, fallback to cache ["+e.url+"]",t),r.match(e).then(function(e){if(e)return e;if(u)return u;throw s})});return i.push(a),Promise.race(i)})}var globalOptions=require("../options"),helpers=require("../helpers");module.exports=networkFirst; -},{"../helpers":1,"../options":3}],11:[function(require,module,exports){ -"use strict";function networkOnly(e,r,t){return helpers.debug("Strategy: network only ["+e.url+"]",t),fetch(e)}var helpers=require("../helpers");module.exports=networkOnly; -},{"../helpers":1}],12:[function(require,module,exports){ -"use strict";function cache(e,t){return helpers.openCache(t).then(function(t){return t.add(e)})}function uncache(e,t){return helpers.openCache(t).then(function(t){return t["delete"](e)})}function precache(e){e instanceof Promise||validatePrecacheInput(e),options.preCacheItems=options.preCacheItems.concat(e)}require("serviceworker-cache-polyfill");var options=require("./options"),router=require("./router"),helpers=require("./helpers"),strategies=require("./strategies");helpers.debug("Service Worker Toolbox is loading");var flatten=function(e){return e.reduce(function(e,t){return e.concat(t)},[])},validatePrecacheInput=function(e){var t=Array.isArray(e);if(t&&e.forEach(function(e){"string"==typeof e||e instanceof Request||(t=!1)}),!t)throw new TypeError("The precache method expects either an array of strings and/or Requests or a Promise that resolves to an array of strings and/or Requests.");return e};self.addEventListener("install",function(e){var t=options.cache.name+"$$$inactive$$$";helpers.debug("install event fired"),helpers.debug("creating cache ["+t+"]"),e.waitUntil(helpers.openCache({cache:{name:t}}).then(function(e){return Promise.all(options.preCacheItems).then(flatten).then(validatePrecacheInput).then(function(t){return helpers.debug("preCache list: "+(t.join(", ")||"(none)")),e.addAll(t)})}))}),self.addEventListener("activate",function(e){helpers.debug("activate event fired");var t=options.cache.name+"$$$inactive$$$";e.waitUntil(helpers.renameCache(t,options.cache.name))}),self.addEventListener("fetch",function(e){var t=router.match(e.request);t?e.respondWith(t(e.request)):router["default"]&&"GET"===e.request.method&&e.respondWith(router["default"](e.request))}),module.exports={networkOnly:strategies.networkOnly,networkFirst:strategies.networkFirst,cacheOnly:strategies.cacheOnly,cacheFirst:strategies.cacheFirst,fastest:strategies.fastest,router:router,options:options,cache:cache,uncache:uncache,precache:precache}; -},{"./helpers":1,"./options":3,"./router":5,"./strategies":9,"serviceworker-cache-polyfill":15}],13:[function(require,module,exports){ -module.exports=Array.isArray||function(r){return"[object Array]"==Object.prototype.toString.call(r)}; -},{}],14:[function(require,module,exports){ -function parse(e){for(var t,r=[],n=0,o=0,a="";null!=(t=PATH_REGEXP.exec(e));){var p=t[0],i=t[1],s=t.index;if(a+=e.slice(o,s),o=s+p.length,i)a+=i[1];else{var c=e[o],u=t[2],l=t[3],f=t[4],g=t[5],x=t[6],h=t[7];a&&(r.push(a),a="");var d=null!=u&&null!=c&&c!==u,y="+"===x||"*"===x,m="?"===x||"*"===x,R=t[2]||"/",T=f||g||(h?".*":"[^"+R+"]+?");r.push({name:l||n++,prefix:u||"",delimiter:R,optional:m,repeat:y,partial:d,asterisk:!!h,pattern:escapeGroup(T)})}}return o=46||"Chrome"===r&&n>=50)||(Cache.prototype.addAll=function(t){function e(t){this.name="NetworkError",this.code=19,this.message=t}var r=this;return e.prototype=Object.create(Error.prototype),Promise.resolve().then(function(){if(arguments.length<1)throw new TypeError;return t=t.map(function(t){return t instanceof Request?t:String(t)}),Promise.all(t.map(function(t){"string"==typeof t&&(t=new Request(t));var r=new URL(t.url).protocol;if("http:"!==r&&"https:"!==r)throw new e("Invalid scheme");return fetch(t.clone())}))}).then(function(n){if(n.some(function(t){return!t.ok}))throw new e("Incorrect response status");return Promise.all(n.map(function(e,n){return r.put(t[n],e)}))}).then(function(){})},Cache.prototype.add=function(t){return this.addAll([t])})}(); -},{}]},{},[12])(12) -}); - - -//# sourceMappingURL=./build/sw-toolbox.map.json \ No newline at end of file diff --git a/app/bower_components/sw-toolbox/sw-toolbox.map.json b/app/bower_components/sw-toolbox/sw-toolbox.map.json deleted file mode 100644 index b608959..0000000 --- a/app/bower_components/sw-toolbox/sw-toolbox.map.json +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["node_modules/browser-pack/_prelude.js","lib/sw-toolbox.js","lib/options.js","lib/router.js","lib/helpers.js","lib/strategies/index.js","lib/route.js","lib/idb-cache-expiration.js","node_modules/serviceworker-cache-polyfill/index.js","lib/strategies/networkOnly.js","lib/strategies/cacheOnly.js","lib/strategies/networkFirst.js","lib/strategies/cacheFirst.js","lib/strategies/fastest.js","node_modules/path-to-regexp/index.js","node_modules/isarray/index.js"],"names":["cache","url","options","helpers","openCache","then","add","uncache","precache","items","Promise","validatePrecacheInput","preCacheItems","concat","require","router","strategies","debug","flatten","reduce","a","b","isValid","Array","isArray","forEach","item","Request","TypeError","self","addEventListener","event","inactiveCache","name","waitUntil","all","join","addAll","renameCache","handler","match","request","respondWith","method","module","exports","networkOnly","networkFirst","cacheOnly","cacheFirst","fastest","scope","registration","URL","location","href","maxAgeSeconds","maxEntries","networkTimeoutSeconds","successResponses","regexEscape","s","replace","Route","keyMatch","map","string","entriesIterator","entries","next","matches","done","pattern","RegExp","value","test","push","Router","this","routes","Map","set","prototype","path","origin","source","toLowerCase","route","has","methodMap","get","routeMap","regExp","regexp","fullUrlRegExp","matchMethod","urlObject","pathname","_match","methodMaps","pathOrUrl","length","i","makeHandler","message","flag","globalOptions","console","log","cacheName","caches","open","fetchAndCache","fetch","clone","response","status","put","cacheOptions","queueCacheExpiration","cleanup","cleanupCache","bind","cleanupQueue","requestUrl","now","Date","idbCacheExpiration","getDb","db","setTimestampForUrl","expireEntries","urlsToDelete","deletionPromises","urlToDelete","error","destination","results","sourceCache","destCache","keys","requests","basePath","pathRegexp","indexOf","values","exec","key","index","openDb","resolve","reject","indexedDB","DB_PREFIX","DB_VERSION","onupgradeneeded","objectStore","result","createObjectStore","STORE_NAME","keyPath","URL_PROPERTY","createIndex","TIMESTAMP_PROPERTY","unique","onsuccess","onerror","cacheNameToDbPromise","transaction","timestamp","oncomplete","onabort","expireOldEntries","maxAgeMillis","urls","openCursor","cursorEvent","cursor","target","expireExtraEntries","countRequest","count","initialCount","oldUrls","extraUrls","nativeAddAll","Cache","userAgent","navigator","agent","version","parseInt","NetworkError","code","Object","create","Error","arguments","String","scheme","protocol","responses","some","ok","timeoutId","originalResponse","promises","cacheWhenTimedOutPromise","setTimeout","networkPromise","clearTimeout","statusText","race","rejected","reasons","maybeReject","reason","toString","maybeResolve","Response","parse","str","res","tokens","PATH_REGEXP","m","escaped","offset","slice","prefix","capture","group","modifier","asterisk","partial","repeat","optional","delimiter","escapeGroup","substr","compile","tokensToFunction","encodeURIComponentPretty","encodeURI","c","charCodeAt","toUpperCase","encodeAsterisk","obj","opts","data","encode","pretty","encodeURIComponent","token","segment","isarray","JSON","stringify","j","escapeString","attachKeys","re","flags","sensitive","regexpToRegexp","groups","arrayToRegexp","parts","pathToRegexp","stringToRegexp","tokensToRegExp","strict","end","lastToken","endsWithSlash","arr","call"],"mappings":"AAAA;AIeA,YAKA,SAASiB,OAAMuF,EAAStG,GACtBA,EAAUA,KACV,IAAIuG,GAAOvG,EAAQe,OAASyF,cAAczF,KACtCwF,IACFE,QAAQC,IAAI,gBAAkBJ,GAIlC,QAASpG,WAAUF,GACjB,GAAI2G,EAMJ,OALI3G,IAAWA,EAAQF,QACrB6G,EAAY3G,EAAQF,MAAMiC,MAE5B4E,EAAYA,GAAaH,cAAc1G,MAAMiC,KAEtC6E,OAAOC,KAAKF,GAGrB,QAASG,eAAcvE,EAASvC,GAC9BA,EAAUA,KACV,IAAIyD,GAAmBzD,EAAQyD,kBAC3B+C,cAAc/C,gBAElB,OAAOsD,OAAMxE,EAAQyE,SAAS7G,KAAK,SAAS8G,GAwB1C,MAnBuB,QAAnB1E,EAAQE,QAAoBgB,EAAiBgB,KAAKwC,EAASC,SAC7DhH,UAAUF,GAASG,KAAK,SAASL,GAC/BA,EAAMqH,IAAI5E,EAAS0E,GAAU9G,KAAK,WAIhC,GAAIiH,GAAepH,EAAQF,OAAS0G,cAAc1G,OAK7CsH,EAAa7D,YAAc6D,EAAa9D,gBACzC8D,EAAarF,MACfsF,qBAAqB9E,EAASzC,EAAOsH,OAMtCH,EAASD,UAKpB,QAASK,sBAAqB9E,EAASzC,EAAOsH,GAC5C,GAAIE,GAAUC,aAAaC,KAAK,KAAMjF,EAASzC,EAAOsH,EAGpDK,cADEA,aACaA,aAAatH,KAAKmH,GAElBA,IAInB,QAASC,cAAahF,EAASzC,EAAOsH,GACpC,GAAIM,GAAanF,EAAQxC,IACrBuD,EAAgB8D,EAAa9D,cAC7BC,EAAa6D,EAAa7D,WAC1BoD,EAAYS,EAAarF,KAEzB4F,EAAMC,KAAKD,KAIf,OAHA5G,OAAM,0BAA4B2G,EAAa,oBAC7CnE,EAAa,gBAAkBD,GAE1BuE,mBAAmBC,MAAMnB,GAAWxG,KAAK,SAAS4H,GACvD,MAAOF,oBAAmBG,mBAAmBD,EAAIL,EAAYC,KAC5DxH,KAAK,SAAS4H,GACf,MAAOF,oBAAmBI,cAAcF,EAAIxE,EAAYD,EAAeqE,KACtExH,KAAK,SAAS+H,GACfnH,MAAM,4BAEN,IAAIoH,GAAmBD,EAAanE,IAAI,SAASqE,GAC/C,MAAOtI,GAAAA,UAAasI,IAGtB,OAAO5H,SAAQyB,IAAIkG,GAAkBhI,KAAK,WACxCY,MAAM,gCAZH8G,SAcE,SAASQ,GAChBtH,MAAMsH,KAIV,QAASjG,aAAY+C,EAAQmD,EAAatI,GAExC,MADAe,OAAM,oBAAsBoE,EAAS,SAAWmD,EAAc,IAAKtI,GAC5D4G,OAAAA,UAAc0B,GAAanI,KAAK,WACrC,MAAOK,SAAQyB,KACb2E,OAAOC,KAAK1B,GACZyB,OAAOC,KAAKyB,KACXnI,KAAK,SAASoI,GACf,GAAIC,GAAcD,EAAQ,GACtBE,EAAYF,EAAQ,EAExB,OAAOC,GAAYE,OAAOvI,KAAK,SAASwI,GACtC,MAAOnI,SAAQyB,IAAI0G,EAAS5E,IAAI,SAASxB,GACvC,MAAOiG,GAAYlG,MAAMC,GAASpC,KAAK,SAAS8G,GAC9C,MAAOwB,GAAUtB,IAAI5E,EAAS0E,UAGjC9G,KAAK,WACN,MAAOyG,QAAAA,UAAczB,SA/G7B,GAAIqB,eAAgB5F,QAAQ,aACxBiH,mBAAqBjH,QAAQ,0BAqD7B6G,YA+DJ/E,QAAOC,SACL5B,MAAOA,MACP+F,cAAeA,cACf5G,UAAWA,UACXkC,YAAaA;;AG3Hf,YASA,SAAS+G,QAAOxC,GACd,MAAO,IAAInG,SAAQ,SAAS4I,EAASC,GACnC,GAAI9G,GAAU+G,UAAUzC,KAAK0C,UAAY5C,EAAW6C,WAEpDjH,GAAQkH,gBAAkB,WACxB,GAAIC,GAAcnH,EAAQoH,OAAOC,kBAAkBC,YAC9CC,QAASC,cACdL,GAAYM,YAAYC,mBAAoBA,oBACvCC,QAAQ,KAGf3H,EAAQ4H,UAAY,WAClBf,EAAQ7G,EAAQoH,SAGlBpH,EAAQ6H,QAAU,WAChBf,EAAO9G,EAAQ8F,UAKrB,QAASP,OAAMnB,GAKb,MAJMA,KAAa0D,wBACjBA,qBAAqB1D,GAAawC,OAAOxC,IAGpC0D,qBAAqB1D,GAG9B,QAASqB,oBAAmBD,EAAIhI,EAAK4H,GACnC,MAAO,IAAInH,SAAQ,SAAS4I,EAASC,GACnC,GAAIiB,GAAcvC,EAAGuC,YAAYT,WAAY,aACzCH,EAAcY,EAAYZ,YAAYG,WAC1CH,GAAYvC,KAAKpH,IAAKA,EAAKwK,UAAW5C,IAEtC2C,EAAYE,WAAa,WACvBpB,EAAQrB,IAGVuC,EAAYG,QAAU,WACpBpB,EAAOiB,EAAYjC,UAKzB,QAASqC,kBAAiB3C,EAAIzE,EAAeqE,GAG3C,MAAKrE,GAIE,GAAI9C,SAAQ,SAAS4I,EAASC,GACnC,GAAIsB,GAA+B,IAAhBrH,EACfsH,KAEAN,EAAcvC,EAAGuC,YAAYT,WAAY,aACzCH,EAAcY,EAAYZ,YAAYG,YACtCX,EAAQQ,EAAYR,MAAMe,mBAE9Bf,GAAM2B,aAAaV,UAAY,SAASW,GACtC,GAAIC,GAASD,EAAYE,OAAOrB,MAChC,IAAIoB,GACEpD,EAAMgD,EAAeI,EAAOvG,MAAMyF,oBAAqB,CACzD,GAAIlK,GAAMgL,EAAOvG,MAAMuF,aACvBa,GAAKlG,KAAK3E,GACV2J,EAAAA,UAAmB3J,GACnBgL,EAAAA,gBAKNT,EAAYE,WAAa,WACvBpB,EAAQwB,IAGVN,EAAYG,QAAUpB,IA3Bf7I,QAAQ4I,YA+BnB,QAAS6B,oBAAmBlD,EAAIxE,GAG9B,MAAKA,GAIE,GAAI/C,SAAQ,SAAS4I,EAASC,GACnC,GAAIuB,MAEAN,EAAcvC,EAAGuC,YAAYT,WAAY,aACzCH,EAAcY,EAAYZ,YAAYG,YACtCX,EAAQQ,EAAYR,MAAMe,oBAE1BiB,EAAehC,EAAMiC,OACzBjC,GAAMiC,QAAQhB,UAAY,WACxB,GAAIiB,GAAeF,EAAavB,MAE5ByB,GAAe7H,IACjB2F,EAAM2B,aAAaV,UAAY,SAASW,GACtC,GAAIC,GAASD,EAAYE,OAAOrB,MAChC,IAAIoB,EAAQ,CACV,GAAIhL,GAAMgL,EAAOvG,MAAMuF,aACvBa,GAAKlG,KAAK3E,GACV2J,EAAAA,UAAmB3J,GACfqL,EAAeR,EAAKzE,OAAS5C,GAC/BwH,EAAAA,kBAOVT,EAAYE,WAAa,WACvBpB,EAAQwB,IAGVN,EAAYG,QAAUpB,IAjCf7I,QAAQ4I,YAqCnB,QAASnB,eAAcF,EAAIxE,EAAYD,EAAeqE,GACpD,MAAO+C,kBAAiB3C,EAAIzE,EAAeqE,GAAKxH,KAAK,SAASkL,GAC5D,MAAOJ,oBAAmBlD,EAAIxE,GAAYpD,KAAK,SAASmL,GACtD,MAAOD,GAAQ1K,OAAO2K,OAnI5B,GAAI/B,WAAY,cACZC,WAAa,EACbK,WAAa,QACbE,aAAe,MACfE,mBAAqB,YACrBI,uBAmIJ3H,QAAOC,SACLmF,MAAOA,MACPE,mBAAoBA,mBACpBC,cAAeA;;AL7IjB,YAIA,IAAIhF,MAEFA,OADEtB,KAAKuB,aACCvB,KAAKuB,aAAaD,MAElBtB,KAAKsB,OAAS,GAAIE,KAAI,KAAMxB,KAAKyB,UAAUC,KAGrDX,OAAOC,SACL7C,OACEiC,KAAM,sBAAwBkB,MAAQ,MACtCK,cAAe,KACfC,WAAY,MAEdxC,OAAO,EACPyC,sBAAuB,KACvB9C,iBAIA+C,iBAAkB;;AIvBpB,YAGA,IAAI1D,KAAM,GAAIoD,KAAI,KAAMxB,KAAKyB,UACzBwF,SAAW7I,IAAIgG,SACf8C,WAAajI,QAAQ,kBAErBiD,MAAQ,SAASpB,EAAQwC,EAAM5C,EAASrC,GACtCiF,YAAgBV,QAClBK,KAAKgB,cAAgBX,GAOK,IAAtBA,EAAK6D,QAAQ,OACf7D,EAAO2D,SAAW3D,GAGpBL,KAAK8D,QACL9D,KAAKe,OAASkD,WAAW5D,EAAML,KAAK8D,OAGtC9D,KAAKnC,OAASA,EACdmC,KAAK5E,QAAUA,EACf4E,KAAKvC,QAAUA,EAGjBwB,OAAMmB,UAAUqB,YAAc,SAAStG,GACrC,GAAIgJ,EACJ,IAAInE,KAAKe,OAAQ,CACf,GAAIrD,GAAQsC,KAAKe,OAAOqD,KAAKjJ,EAC7BgJ,MACAnE,KAAK8D,KAAKnH,QAAQ,SAAS0H,EAAKC,GAC9BH,EAAOE,EAAIlH,MAAQO,EAAM4G,EAAQ,KAIrC,MAAO,UAAS3G,GACd,MAAOqC,MAAKvC,QAAQE,EAASwG,EAAQnE,KAAK5E,UAC1CwH,KAAK5C,OAGTlC,OAAOC,QAAUkB;;AH5CjB,YAIA,SAASH,aAAYC,GACnB,MAAOA,GAAEC,QAAQ,yBAA0B,QAH7C,GAAIC,OAAQjD,QAAQ,WAMhBkD,SAAW,SAASC,EAAKC,GAM3B,IAHA,GAAIC,GAAkBF,EAAIG,UACtB1C,EAAOyC,EAAgBE,OACvBC,MACI5C,EAAK6C,MAAM,CACjB,GAAIC,GAAU,GAAIC,QAAO/C,EAAKgD,MAAM,GAChCF,GAAQG,KAAKT,IACfI,EAAQM,KAAKlD,EAAKgD,MAAM,IAE1BhD,EAAOyC,EAAgBE,OAEzB,MAAOC,IAGLO,OAAS,WACXC,KAAKC,OAAS,GAAIC,KAElBF,KAAKC,OAAOE,IAAIR,OAAQ,GAAIO,MAC5BF,KAAAA,WAAe,OAGhB,MAAO,OAAQ,MAAO,SAAU,OAAQ,OAAOrD,QAAQ,SAASkB,GAC/DkC,OAAOK,UAAUvC,GAAU,SAASwC,EAAM5C,EAASrC,GACjD,MAAO4E,MAAKxE,IAAIqC,EAAQwC,EAAM5C,EAASrC,MAI3C2E,OAAOK,UAAU5E,IAAM,SAASqC,EAAQwC,EAAM5C,EAASrC,GACrDA,EAAUA,KACV,IAAIkF,EAEAD,aAAgBV,QAIlBW,EAASX,QAETW,EAASlF,EAAQkF,QAAUvD,KAAKyB,SAAS8B,OAEvCA,EADEA,YAAkBX,QACXW,EAAOC,OAEPzB,YAAYwB,IAIzBzC,EAASA,EAAO2C,aAEhB,IAAIC,GAAQ,GAAIxB,OAAMpB,EAAQwC,EAAM5C,EAASrC,EAExC4E,MAAKC,OAAOS,IAAIJ,IACnBN,KAAKC,OAAOE,IAAIG,EAAQ,GAAIJ,KAG9B,IAAIS,GAAYX,KAAKC,OAAOW,IAAIN,EAC3BK,GAAUD,IAAI7C,IACjB8C,EAAUR,IAAItC,EAAQ,GAAIqC,KAG5B,IAAIW,GAAWF,EAAUC,IAAI/C,GACzBiD,EAASL,EAAMM,QAAUN,EAAMO,aACnCH,GAASV,IAAIW,EAAOP,OAAQE,IAG9BV,OAAOK,UAAUa,YAAc,SAASpD,EAAQ1C,GAC9C,GAAI+F,GAAY,GAAI3C,KAAIpD,GACpBmF,EAASY,EAAUZ,OACnBD,EAAOa,EAAUC,QAOrB,OAAOnB,MAAKoB,OAAOvD,EAAQqB,SAASc,KAAKC,OAAQK,GAASD,IACxDL,KAAKoB,OAAOvD,GAASmC,KAAKC,OAAOW,IAAIjB,SAAUxE,IAGnD4E,OAAOK,UAAUgB,OAAS,SAASvD,EAAQwD,EAAYC,GACrD,GAA0B,IAAtBD,EAAWE,OACb,MAAO,KAGT,KAAK,GAAIC,GAAI,EAAGA,EAAIH,EAAWE,OAAQC,IAAK,CAC1C,GAAIb,GAAYU,EAAWG,GACvBX,EAAWF,GAAaA,EAAUC,IAAI/C,EAAO2C,cACjD,IAAIK,EAAU,CACZ,GAAIZ,GAASf,SAAS2B,EAAUS,EAChC,IAAIrB,EAAOsB,OAAS,EAClB,MAAOtB,GAAO,GAAGwB,YAAYH,IAKnC,MAAO,OAGTvB,OAAOK,UAAU1C,MAAQ,SAASC,GAChC,MAAOqC,MAAKiB,YAAYtD,EAAQE,OAAQF,EAAQxC,MAC5C6E,KAAKiB,YAAY,MAAOtD,EAAQxC,MAGtC2C,OAAOC,QAAU,GAAIgC;;AS/GrB,YAGA,SAAS5B,YAAWR,EAASwG,EAAQ/I,GAEnC,MADAC,SAAQc,MAAM,0BAA4BwB,EAAQxC,IAAM,IAAKC,GACtDC,QAAQC,UAAUF,GAASG,KAAK,SAASL,GAC9C,MAAOA,GAAMwC,MAAMC,GAASpC,KAAK,SAAS8G,GACxC,MAAIA,GACKA,EAGFhH,QAAQ6G,cAAcvE,EAASvC,OAV5C,GAAIC,SAAUW,QAAQ,aAetB8B,QAAOC,QAAUI;;AFhBjB,YAGA,SAASD,WAAUP,EAASwG,EAAQ/I,GAElC,MADAC,SAAQc,MAAM,yBAA2BwB,EAAQxC,IAAM,IAAKC,GACrDC,QAAQC,UAAUF,GAASG,KAAK,SAASL,GAC9C,MAAOA,GAAMwC,MAAMC,KALvB,GAAItC,SAAUW,QAAQ,aAStB8B,QAAOC,QAAUG;;AGVjB,YAIA,SAASE,SAAQT,EAASwG,EAAQ/I,GAGhC,MAFAC,SAAQc,MAAM,sBAAwBwB,EAAQxC,IAAM,IAAKC,GAElD,GAAIQ,SAAQ,SAAS4I,EAASC,GACnC,GAAI8D,IAAW,EACXC,KAEAC,EAAc,SAASC,GACzBF,EAAQ1I,KAAK4I,EAAOC,YAChBJ,EACF9D,EAAO,GAAI6C,OAAM,mCACbkB,EAAQlL,KAAK,QAAU,MAE3BiL,GAAW,GAIXK,EAAe,SAAS7D,GACtBA,YAAkB8D,UACpBrE,EAAQO,GAER0D,EAAY,sBAIhBpN,SAAQ6G,cAAcvE,EAAQyE,QAAShH,GACpCG,KAAKqN,EAAcH,GAEtBvK,UAAUP,EAASwG,EAAQ/I,GACxBG,KAAKqN,EAAcH,KAhC1B,GAAIpN,SAAUW,QAAQ,cAClBkC,UAAYlC,QAAQ,cAmCxB8B,QAAOC,QAAUK;;ARrCjBN,OAAOC,SACLC,YAAahC,QAAQ,iBACrBiC,aAAcjC,QAAQ,kBACtBkC,UAAWlC,QAAQ,eACnBmC,WAAYnC,QAAQ,gBACpBoC,QAASpC,QAAQ;;AMLnB,YAIA,SAASiC,cAAaN,EAASwG,EAAQ/I,GACrCA,EAAUA,KACV,IAAIyD,GAAmBzD,EAAQyD,kBAC3B+C,cAAc/C,iBAGdD,EAAwBxD,EAAQwD,uBAChCgD,cAAchD,qBAGlB,OAFAvD,SAAQc,MAAM,4BAA8BwB,EAAQxC,IAAM,IAAKC,GAExDC,QAAQC,UAAUF,GAASG,KAAK,SAASL,GAC9C,GAAI4M,GAEAC,EADAC,IAGJ,IAAIpJ,EAAuB,CACzB,GAAIqJ,GAA2B,GAAIrM,SAAQ,SAAS4I,GAClDsD,EAAYI,WAAW,WACrBhN,EAAMwC,MAAMC,GAASpC,KAAK,SAAS8G,GAC7BA,GAKFmC,EAAQnC,MAGa,IAAxBzD,IAELoJ,GAASlI,KAAKmI,GAGhB,GAAIE,GAAiB9M,QAAQ6G,cAAcvE,EAASvC,GACjDG,KAAK,SAAS8G,GAMb,GAJIyF,GACFM,aAAaN,GAGXjJ,EAAiBgB,KAAKwC,EAASC,QACjC,MAAOD,EAMT,MAHAhH,SAAQc,MAAM,+BAAiCkG,EAASgG,WACpDjN,GACJ2M,EAAmB1F,EACb,GAAIiF,OAAM,kBAdCjM,SAeV,SAASoI,GAGhB,MAFApI,SAAQc,MAAM,iDACVwB,EAAQxC,IAAM,IAAKC,GAChBF,EAAMwC,MAAMC,GAASpC,KAAK,SAAS8G,GAExC,GAAIA,EACF,MAAOA,EAKT,IAAI0F,EACF,MAAOA,EAKT,MAAMtE,MAMZ,OAFAuE,GAASlI,KAAKqI,GAEPvM,QAAQ0M,KAAKN,KAzExB,GAAIpG,eAAgB5F,QAAQ,cACxBX,QAAUW,QAAQ,aA4EtB8B,QAAOC,QAAUE;;AF9EjB,YAGA,SAASD,aAAYL,EAASwG,EAAQ/I,GAEpC,MADAC,SAAQc,MAAM,2BAA6BwB,EAAQxC,IAAM,IAAKC,GACvD+G,MAAMxE,GAJf,GAAItC,SAAUW,QAAQ,aAOtB8B,QAAOC,QAAUC;;ARRjB,YA6EA,SAAS9C,OAAMC,EAAKC,GAClB,MAAOC,SAAQC,UAAUF,GAASG,KAAK,SAASL,GAC9C,MAAOA,GAAMM,IAAIL,KAIrB,QAASM,SAAQN,EAAKC,GACpB,MAAOC,SAAQC,UAAUF,GAASG,KAAK,SAASL,GAC9C,MAAOA,GAAAA,UAAaC,KAIxB,QAASO,UAASC,GACVA,YAAiBC,UACrBC,sBAAsBF,GAGxBP,QAAQU,cAAgBV,QAAQU,cAAcC,OAAOJ,GA5FvDK,QAAQ,+BACR,IAAIZ,SAAUY,QAAQ,aAClBC,OAASD,QAAQ,YACjBX,QAAUW,QAAQ,aAClBE,WAAaF,QAAQ,eAEzBX,SAAQc,MAAM,oCAGd,IAAIC,SAAU,SAAST,GACrB,MAAOA,GAAMU,OAAO,SAASC,EAAGC,GAC9B,MAAOD,GAAEP,OAAOQ,SAIhBV,sBAAwB,SAASF,GACnC,GAAIa,GAAUC,MAAMC,QAAQf,EAS5B,IARIa,GACFb,EAAMgB,QAAQ,SAASC,GACC,gBAATA,IAAsBA,YAAgBC,WACjDL,GAAU,MAKXA,EACH,KAAM,IAAIM,WAAU,4IAKtB,OAAOnB,GAGToB,MAAKC,iBAAiB,UAAW,SAASC,GACxC,GAAIC,GAAgB9B,QAAQF,MAAMiC,KAAO,gBACzC9B,SAAQc,MAAM,uBACdd,QAAQc,MAAM,mBAAqBe,EAAgB,KACnDD,EAAMG,UACJ/B,QAAQC,WAAWJ,OAAQiC,KAAMD,KAChC3B,KAAK,SAASL,GACb,MAAOU,SAAQyB,IAAIjC,QAAQU,eAC1BP,KAAKa,SACLb,KAAKM,uBACLN,KAAK,SAASO,GAGb,MAFAT,SAAQc,MAAM,mBACTL,EAAcwB,KAAK,OAAS,WAC1BpC,EAAMqC,OAAOzB,UAQ5BiB,KAAKC,iBAAiB,WAAY,SAASC,GACzC5B,QAAQc,MAAM,uBACd,IAAIe,GAAgB9B,QAAQF,MAAMiC,KAAO,gBACzCF,GAAMG,UAAU/B,QAAQmC,YAAYN,EAAe9B,QAAQF,MAAMiC,SAKnEJ,KAAKC,iBAAiB,QAAS,SAASC,GACtC,GAAIQ,GAAUxB,OAAOyB,MAAMT,EAAMU,QAE7BF,GACFR,EAAMW,YAAYH,EAAQR,EAAMU,UACvB1B,OAAAA,YAA2C,QAAzBgB,EAAMU,QAAQE,QACzCZ,EAAMW,YAAY3B,OAAAA,WAAegB,EAAMU,YA0B3CG,OAAOC,SACLC,YAAa9B,WAAW8B,YACxBC,aAAc/B,WAAW+B,aACzBC,UAAWhC,WAAWgC,UACtBC,WAAYjC,WAAWiC,WACvBC,QAASlC,WAAWkC,QACpBnC,OAAQA,OACRb,QAASA,QACTF,MAAOA,MACPO,QAASA,QACTC,SAAUA;;Ac1HZoC,OAAOC,QAAUtB,MAAMC,SAAW,SAAU4P,GAC1C,MAA8C,kBAAvClF,OAAOhH,UAAUuI,SAAS4D,KAAKD;;ADkCxC,QAASxD,OAAOC,GAOd,IANA,GAIIC,GAJAC,KACA5E,EAAM,EACNC,EAAQ,EACRjE,EAAO,GAG6B,OAAhC2I,EAAME,YAAY9E,KAAK2E,KAAe,CAC5C,GAAII,GAAIH,EAAI,GACRI,EAAUJ,EAAI,GACdK,EAASL,EAAI1E,KAKjB,IAJAjE,GAAQ0I,EAAIO,MAAMhF,EAAO+E,GACzB/E,EAAQ+E,EAASF,EAAE5H,OAGf6H,EACF/I,GAAQ+I,EAAQ,OADlB,CAKA,GAAI7J,GAAOwJ,EAAIzE,GACXiF,EAASP,EAAI,GACb7L,EAAO6L,EAAI,GACXQ,EAAUR,EAAI,GACdS,EAAQT,EAAI,GACZU,EAAWV,EAAI,GACfW,EAAWX,EAAI,EAGf3I,KACF4I,EAAOnJ,KAAKO,GACZA,EAAO,GAGT,IAAIuJ,GAAoB,MAAVL,GAA0B,MAARhK,GAAgBA,IAASgK,EACrDM,EAAsB,MAAbH,GAAiC,MAAbA,EAC7BI,EAAwB,MAAbJ,GAAiC,MAAbA,EAC/BK,EAAYf,EAAI,IAAM,IACtBtJ,EAAU8J,GAAWC,IAAUE,EAAW,KAAO,KAAOI,EAAY,MAExEd,GAAOnJ,MACL3C,KAAMA,GAAQkH,IACdkF,OAAQA,GAAU,GAClBQ,UAAWA,EACXD,SAAUA,EACVD,OAAQA,EACRD,QAASA,EACTD,WAAYA,EACZjK,QAASsK,YAAYtK,MAczB,MATI4E,GAAQyE,EAAIxH,SACdlB,GAAQ0I,EAAIkB,OAAO3F,IAIjBjE,GACF4I,EAAOnJ,KAAKO,GAGP4I,EAST,QAASiB,SAASnB,GAChB,MAAOoB,kBAAiBrB,MAAMC,IAShC,QAASqB,0BAA0BrB,GACjC,MAAOsB,WAAUtB,GAAK/J,QAAQ,UAAW,SAAUsL,GACjD,MAAO,IAAMA,EAAEC,WAAW,GAAG5B,SAAS,IAAI6B,gBAU9C,QAASC,gBAAgB1B,GACvB,MAAOsB,WAAUtB,GAAK/J,QAAQ,QAAS,SAAUsL,GAC/C,MAAO,IAAMA,EAAEC,WAAW,GAAG5B,SAAS,IAAI6B,gBAO9C,QAASL,kBAAkBlB,GAKzB,IAAK,GAHDzJ,GAAU,GAAI/C,OAAMwM,EAAO1H,QAGtBC,EAAI,EAAGA,EAAIyH,EAAO1H,OAAQC,IACR,gBAAdyH,GAAOzH,KAChBhC,EAAQgC,GAAK,GAAI7B,QAAO,OAASsJ,EAAOzH,GAAG9B,QAAU,MAIzD,OAAO,UAAUgL,EAAKC,GAMpB,IAAK,GALDtK,GAAO,GACPuK,EAAOF,MACPtP,EAAUuP,MACVE,EAASzP,EAAQ0P,OAASV,yBAA2BW,mBAEhDvJ,EAAI,EAAGA,EAAIyH,EAAO1H,OAAQC,IAAK,CACtC,GAAIwJ,GAAQ/B,EAAOzH,EAEnB,IAAqB,gBAAVwJ,GAAX,CAMA,GACIC,GADArL,EAAQgL,EAAKI,EAAM7N,KAGvB,IAAa,MAATyC,EAAe,CACjB,GAAIoL,EAAMlB,SAAU,CAEdkB,EAAMpB,UACRvJ,GAAQ2K,EAAMzB,OAGhB,UAEA,KAAM,IAAIzM,WAAU,aAAekO,EAAM7N,KAAO,mBAIpD,GAAI+N,QAAQtL,GAAZ,CACE,IAAKoL,EAAMnB,OACT,KAAM,IAAI/M,WAAU,aAAekO,EAAM7N,KAAO,kCAAoCgO,KAAKC,UAAUxL,GAAS,IAG9G,IAAqB,IAAjBA,EAAM2B,OAAc,CACtB,GAAIyJ,EAAMlB,SACR,QAEA,MAAM,IAAIhN,WAAU,aAAekO,EAAM7N,KAAO,qBAIpD,IAAK,GAAIkO,GAAI,EAAGA,EAAIzL,EAAM2B,OAAQ8J,IAAK,CAGrC,GAFAJ,EAAUJ,EAAOjL,EAAMyL,KAElB7L,EAAQgC,GAAG3B,KAAKoL,GACnB,KAAM,IAAInO,WAAU,iBAAmBkO,EAAM7N,KAAO,eAAiB6N,EAAMtL,QAAU,oBAAsByL,KAAKC,UAAUH,GAAW,IAGvI5K,KAAe,IAANgL,EAAUL,EAAMzB,OAASyB,EAAMjB,WAAakB,OApBzD,CA4BA,GAFAA,EAAUD,EAAMrB,SAAWc,eAAe7K,GAASiL,EAAOjL,IAErDJ,EAAQgC,GAAG3B,KAAKoL,GACnB,KAAM,IAAInO,WAAU,aAAekO,EAAM7N,KAAO,eAAiB6N,EAAMtL,QAAU,oBAAsBuL,EAAU,IAGnH5K,IAAQ2K,EAAMzB,OAAS0B,OArDrB5K,IAAQ2K,EAwDZ,MAAO3K,IAUX,QAASiL,cAAcvC,GACrB,MAAOA,GAAI/J,QAAQ,2BAA4B,QASjD,QAASgL,aAAaP,GACpB,MAAOA,GAAMzK,QAAQ,gBAAiB,QAUxC,QAASuM,YAAYC,EAAI1H,GAEvB,MADA0H,GAAG1H,KAAOA,EACH0H,EAST,QAASC,OAAOrQ,GACd,MAAOA,GAAQsQ,UAAY,GAAK,IAUlC,QAASC,gBAAgBtL,EAAMyD,GAE7B,GAAI8H,GAASvL,EAAKE,OAAO7C,MAAM,YAE/B,IAAIkO,EACF,IAAK,GAAIpK,GAAI,EAAGA,EAAIoK,EAAOrK,OAAQC,IACjCsC,EAAKhE,MACH3C,KAAMqE,EACN+H,OAAQ,KACRQ,UAAW,KACXD,UAAU,EACVD,QAAQ,EACRD,SAAS,EACTD,UAAU,EACVjK,QAAS,MAKf,OAAO6L,YAAWlL,EAAMyD,GAW1B,QAAS+H,eAAexL,EAAMyD,EAAM1I,GAGlC,IAAK,GAFD0Q,MAEKtK,EAAI,EAAGA,EAAInB,EAAKkB,OAAQC,IAC/BsK,EAAMhM,KAAKiM,aAAa1L,EAAKmB,GAAIsC,EAAM1I,GAASmF,OAGlD,IAAIQ,GAAS,GAAIpB,QAAO,MAAQmM,EAAMxO,KAAK,KAAO,IAAKmO,MAAMrQ,GAE7D,OAAOmQ,YAAWxK,EAAQ+C,GAW5B,QAASkI,gBAAgB3L,EAAMyD,EAAM1I,GAKnC,IAAK,GAJD6N,GAASH,MAAMzI,GACfmL,EAAKS,eAAehD,EAAQ7N,GAGvBoG,EAAI,EAAGA,EAAIyH,EAAO1H,OAAQC,IACR,gBAAdyH,GAAOzH,IAChBsC,EAAKhE,KAAKmJ,EAAOzH,GAIrB,OAAO+J,YAAWC,EAAI1H,GAUxB,QAASmI,gBAAgBhD,EAAQ7N,GAC/BA,EAAUA,KASV,KAAK,GAPD8Q,GAAS9Q,EAAQ8Q,OACjBC,EAAM/Q,EAAQ+Q,OAAQ,EACtB1L,EAAQ,GACR2L,EAAYnD,EAAOA,EAAO1H,OAAS,GACnC8K,EAAqC,gBAAdD,IAA0B,MAAMvM,KAAKuM,GAGvD5K,EAAI,EAAGA,EAAIyH,EAAO1H,OAAQC,IAAK,CACtC,GAAIwJ,GAAQ/B,EAAOzH,EAEnB,IAAqB,gBAAVwJ,GACTvK,GAAS6K,aAAaN,OACjB,CACL,GAAIzB,GAAS+B,aAAaN,EAAMzB,QAC5BC,EAAU,MAAQwB,EAAMtL,QAAU,GAElCsL,GAAMnB,SACRL,GAAW,MAAQD,EAASC,EAAU,MAOpCA,EAJAwB,EAAMlB,SACHkB,EAAMpB,QAGCL,EAAS,IAAMC,EAAU,KAFzB,MAAQD,EAAS,IAAMC,EAAU,MAKnCD,EAAS,IAAMC,EAAU,IAGrC/I,GAAS+I,GAoBb,MAZK0C,KACHzL,GAAS4L,EAAgB5L,EAAM6I,MAAM,EAAG,IAAM7I,GAAS,iBAIvDA,GADE0L,EACO,IAIAD,GAAUG,EAAgB,GAAK,YAGnC,GAAI1M,QAAO,IAAMc,EAAOgL,MAAMrQ,IAevC,QAAS2Q,cAAc1L,EAAMyD,EAAM1I,GAUjC,MATA0I,GAAOA,MAEFoH,QAAQpH,GAGD1I,IACVA,OAHAA,EAAiC,EACjC0I,MAKEzD,YAAgBV,QACXgM,eAAetL,EAA4B,GAGhD6K,QAAQ7K,GACHwL,cAAoC,EAA8B,EAAQzQ,GAG5E4Q,eAAqC,EAA8B,EAAQ5Q,GAxapF,GAAI8P,SAAUlP,QAAQ,UAKtB8B,QAAOC,QAAUgO,aACjBjO,OAAOC,QAAQ+K,MAAQA,MACvBhL,OAAOC,QAAQmM,QAAUA,QACzBpM,OAAOC,QAAQoM,iBAAmBA,iBAClCrM,OAAOC,QAAQkO,eAAiBA,cAOhC,IAAI/C,aAAc,GAAIvJ,SAGpB,UAOA,kGACArC,KAAK,KAAM;;CNVZ,WACC,GAAIqJ,GAAeC,MAAMxG,UAAU7C,OAC/BsJ,EAAYC,UAAUD,UAAUnJ,MAAM,4BAG1C,IAAImJ,EACF,GAAIE,GAAQF,EAAU,GAClBG,EAAUC,SAASJ,EAAU,GAIjCF,MAAkBE,GACL,YAAVE,GAAuBC,GAAW,IACxB,WAAVD,GAAuBC,GAAW,MAMvCJ,MAAMxG,UAAU7C,OAAS,SAAgBwG,GAIvC,QAASmD,GAAaxF,GACpB1B,KAAK7C,KAAO,eACZ6C,KAAKmH,KAAO,GACZnH,KAAK0B,QAAUA,EANjB,GAAIxG,GAAQ8E,IAWZ,OAFAkH,GAAa9G,UAAYgH,OAAOC,OAAOC,MAAMlH,WAEtCxE,QAAQ4I,UAAUjJ,KAAK,WAC5B,GAAIgM,UAAUhG,OAAS,EAAG,KAAM,IAAIzE,UAcpC,OATAiH,GAAWA,EAAS5E,IAAI,SAASxB,GAC/B,MAAIA,aAAmBd,SACdc,EAGA6J,OAAO7J,KAIX/B,QAAQyB,IACb0G,EAAS5E,IAAI,SAASxB,GACG,gBAAZA,KACTA,EAAU,GAAId,SAAQc,GAGxB,IAAI8J,GAAS,GAAIlJ,KAAIZ,EAAQxC,KAAKuM,QAElC,IAAe,UAAXD,GAAiC,WAAXA,EACxB,KAAM,IAAIP,GAAa,iBAGzB,OAAO/E,OAAMxE,EAAQyE,cAGxB7G,KAAK,SAASoM,GAGf,GAAIA,EAAUC,KAAK,SAASvF,GAC1B,OAAQA,EAASwF,KAEjB,KAAM,IAAIX,GAAa,4BAKzB,OAAOtL,SAAQyB,IACbsK,EAAUxI,IAAI,SAASkD,EAAUb,GAC/B,MAAOtG,GAAMqH,IAAIwB,EAASvC,GAAIa,QAGjC9G,KAAK,eAKVqL,MAAMxG,UAAU5E,IAAM,SAAamC,GACjC,MAAOqC,MAAKzC,QAAQI","file":"bundle.js","sourcesContent":["(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);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 require==\"function\"&&require;for(var o=0;o 0) {\n return routes[0].makeHandler(pathOrUrl);\n }\n }\n }\n\n return null;\n};\n\nRouter.prototype.match = function(request) {\n return this.matchMethod(request.method, request.url) ||\n this.matchMethod('any', request.url);\n};\n\nmodule.exports = new Router();\n","/*\n Copyright 2014 Google Inc. All Rights Reserved.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n*/\n'use strict';\n\nvar globalOptions = require('./options');\nvar idbCacheExpiration = require('./idb-cache-expiration');\n\nfunction debug(message, options) {\n options = options || {};\n var flag = options.debug || globalOptions.debug;\n if (flag) {\n console.log('[sw-toolbox] ' + message);\n }\n}\n\nfunction openCache(options) {\n var cacheName;\n if (options && options.cache) {\n cacheName = options.cache.name;\n }\n cacheName = cacheName || globalOptions.cache.name;\n\n return caches.open(cacheName);\n}\n\nfunction fetchAndCache(request, options) {\n options = options || {};\n var successResponses = options.successResponses ||\n globalOptions.successResponses;\n\n return fetch(request.clone()).then(function(response) {\n // Only cache GET requests with successful responses.\n // Since this is not part of the promise chain, it will be done\n // asynchronously and will not block the response from being returned to the\n // page.\n if (request.method === 'GET' && successResponses.test(response.status)) {\n openCache(options).then(function(cache) {\n cache.put(request, response).then(function() {\n // If any of the options are provided in options.cache then use them.\n // Do not fallback to the global options for any that are missing\n // unless they are all missing.\n var cacheOptions = options.cache || globalOptions.cache;\n\n // Only run the cache expiration logic if at least one of the maximums\n // is set, and if we have a name for the cache that the options are\n // being applied to.\n if ((cacheOptions.maxEntries || cacheOptions.maxAgeSeconds) &&\n cacheOptions.name) {\n queueCacheExpiration(request, cache, cacheOptions);\n }\n });\n });\n }\n\n return response.clone();\n });\n}\n\nvar cleanupQueue;\nfunction queueCacheExpiration(request, cache, cacheOptions) {\n var cleanup = cleanupCache.bind(null, request, cache, cacheOptions);\n\n if (cleanupQueue) {\n cleanupQueue = cleanupQueue.then(cleanup);\n } else {\n cleanupQueue = cleanup();\n }\n}\n\nfunction cleanupCache(request, cache, cacheOptions) {\n var requestUrl = request.url;\n var maxAgeSeconds = cacheOptions.maxAgeSeconds;\n var maxEntries = cacheOptions.maxEntries;\n var cacheName = cacheOptions.name;\n\n var now = Date.now();\n debug('Updating LRU order for ' + requestUrl + '. Max entries is ' +\n maxEntries + ', max age is ' + maxAgeSeconds);\n\n return idbCacheExpiration.getDb(cacheName).then(function(db) {\n return idbCacheExpiration.setTimestampForUrl(db, requestUrl, now);\n }).then(function(db) {\n return idbCacheExpiration.expireEntries(db, maxEntries, maxAgeSeconds, now);\n }).then(function(urlsToDelete) {\n debug('Successfully updated IDB.');\n\n var deletionPromises = urlsToDelete.map(function(urlToDelete) {\n return cache.delete(urlToDelete);\n });\n\n return Promise.all(deletionPromises).then(function() {\n debug('Done with cache cleanup.');\n });\n }).catch(function(error) {\n debug(error);\n });\n}\n\nfunction renameCache(source, destination, options) {\n debug('Renaming cache: [' + source + '] to [' + destination + ']', options);\n return caches.delete(destination).then(function() {\n return Promise.all([\n caches.open(source),\n caches.open(destination)\n ]).then(function(results) {\n var sourceCache = results[0];\n var destCache = results[1];\n\n return sourceCache.keys().then(function(requests) {\n return Promise.all(requests.map(function(request) {\n return sourceCache.match(request).then(function(response) {\n return destCache.put(request, response);\n });\n }));\n }).then(function() {\n return caches.delete(source);\n });\n });\n });\n}\n\nmodule.exports = {\n debug: debug,\n fetchAndCache: fetchAndCache,\n openCache: openCache,\n renameCache: renameCache\n};\n","/*\n\tCopyright 2014 Google Inc. All Rights Reserved.\n\n\tLicensed under the Apache License, Version 2.0 (the \"License\");\n\tyou may not use this file except in compliance with the License.\n\tYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n\tUnless required by applicable law or agreed to in writing, software\n\tdistributed under the License is distributed on an \"AS IS\" BASIS,\n\tWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\tSee the License for the specific language governing permissions and\n\tlimitations under the License.\n*/\nmodule.exports = {\n networkOnly: require('./networkOnly'),\n networkFirst: require('./networkFirst'),\n cacheOnly: require('./cacheOnly'),\n cacheFirst: require('./cacheFirst'),\n fastest: require('./fastest')\n};\n","/*\n Copyright 2014 Google Inc. All Rights Reserved.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n*/\n'use strict';\n\n// TODO: Use self.registration.scope instead of self.location\nvar url = new URL('./', self.location);\nvar basePath = url.pathname;\nvar pathRegexp = require('path-to-regexp');\n\nvar Route = function(method, path, handler, options) {\n if (path instanceof RegExp) {\n this.fullUrlRegExp = path;\n } else {\n // The URL() constructor can't parse express-style routes as they are not\n // valid urls. This means we have to manually manipulate relative urls into\n // absolute ones. This check is extremely naive but implementing a tweaked\n // version of the full algorithm seems like overkill\n // (https://url.spec.whatwg.org/#concept-basic-url-parser)\n if (path.indexOf('/') !== 0) {\n path = basePath + path;\n }\n\n this.keys = [];\n this.regexp = pathRegexp(path, this.keys);\n }\n\n this.method = method;\n this.options = options;\n this.handler = handler;\n};\n\nRoute.prototype.makeHandler = function(url) {\n var values;\n if (this.regexp) {\n var match = this.regexp.exec(url);\n values = {};\n this.keys.forEach(function(key, index) {\n values[key.name] = match[index + 1];\n });\n }\n\n return function(request) {\n return this.handler(request, values, this.options);\n }.bind(this);\n};\n\nmodule.exports = Route;\n","/*\n Copyright 2015 Google Inc. All Rights Reserved.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n*/\n'use strict';\n\nvar DB_PREFIX = 'sw-toolbox-';\nvar DB_VERSION = 1;\nvar STORE_NAME = 'store';\nvar URL_PROPERTY = 'url';\nvar TIMESTAMP_PROPERTY = 'timestamp';\nvar cacheNameToDbPromise = {};\n\nfunction openDb(cacheName) {\n return new Promise(function(resolve, reject) {\n var request = indexedDB.open(DB_PREFIX + cacheName, DB_VERSION);\n\n request.onupgradeneeded = function() {\n var objectStore = request.result.createObjectStore(STORE_NAME,\n {keyPath: URL_PROPERTY});\n objectStore.createIndex(TIMESTAMP_PROPERTY, TIMESTAMP_PROPERTY,\n {unique: false});\n };\n\n request.onsuccess = function() {\n resolve(request.result);\n };\n\n request.onerror = function() {\n reject(request.error);\n };\n });\n}\n\nfunction getDb(cacheName) {\n if (!(cacheName in cacheNameToDbPromise)) {\n cacheNameToDbPromise[cacheName] = openDb(cacheName);\n }\n\n return cacheNameToDbPromise[cacheName];\n}\n\nfunction setTimestampForUrl(db, url, now) {\n return new Promise(function(resolve, reject) {\n var transaction = db.transaction(STORE_NAME, 'readwrite');\n var objectStore = transaction.objectStore(STORE_NAME);\n objectStore.put({url: url, timestamp: now});\n\n transaction.oncomplete = function() {\n resolve(db);\n };\n\n transaction.onabort = function() {\n reject(transaction.error);\n };\n });\n}\n\nfunction expireOldEntries(db, maxAgeSeconds, now) {\n // Bail out early by resolving with an empty array if we're not using\n // maxAgeSeconds.\n if (!maxAgeSeconds) {\n return Promise.resolve([]);\n }\n\n return new Promise(function(resolve, reject) {\n var maxAgeMillis = maxAgeSeconds * 1000;\n var urls = [];\n\n var transaction = db.transaction(STORE_NAME, 'readwrite');\n var objectStore = transaction.objectStore(STORE_NAME);\n var index = objectStore.index(TIMESTAMP_PROPERTY);\n\n index.openCursor().onsuccess = function(cursorEvent) {\n var cursor = cursorEvent.target.result;\n if (cursor) {\n if (now - maxAgeMillis > cursor.value[TIMESTAMP_PROPERTY]) {\n var url = cursor.value[URL_PROPERTY];\n urls.push(url);\n objectStore.delete(url);\n cursor.continue();\n }\n }\n };\n\n transaction.oncomplete = function() {\n resolve(urls);\n };\n\n transaction.onabort = reject;\n });\n}\n\nfunction expireExtraEntries(db, maxEntries) {\n // Bail out early by resolving with an empty array if we're not using\n // maxEntries.\n if (!maxEntries) {\n return Promise.resolve([]);\n }\n\n return new Promise(function(resolve, reject) {\n var urls = [];\n\n var transaction = db.transaction(STORE_NAME, 'readwrite');\n var objectStore = transaction.objectStore(STORE_NAME);\n var index = objectStore.index(TIMESTAMP_PROPERTY);\n\n var countRequest = index.count();\n index.count().onsuccess = function() {\n var initialCount = countRequest.result;\n\n if (initialCount > maxEntries) {\n index.openCursor().onsuccess = function(cursorEvent) {\n var cursor = cursorEvent.target.result;\n if (cursor) {\n var url = cursor.value[URL_PROPERTY];\n urls.push(url);\n objectStore.delete(url);\n if (initialCount - urls.length > maxEntries) {\n cursor.continue();\n }\n }\n };\n }\n };\n\n transaction.oncomplete = function() {\n resolve(urls);\n };\n\n transaction.onabort = reject;\n });\n}\n\nfunction expireEntries(db, maxEntries, maxAgeSeconds, now) {\n return expireOldEntries(db, maxAgeSeconds, now).then(function(oldUrls) {\n return expireExtraEntries(db, maxEntries).then(function(extraUrls) {\n return oldUrls.concat(extraUrls);\n });\n });\n}\n\nmodule.exports = {\n getDb: getDb,\n setTimestampForUrl: setTimestampForUrl,\n expireEntries: expireEntries\n};\n","/**\n * Copyright 2015 Google Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n(function() {\n var nativeAddAll = Cache.prototype.addAll;\n var userAgent = navigator.userAgent.match(/(Firefox|Chrome)\\/(\\d+\\.)/);\n\n // Has nice behavior of `var` which everyone hates\n if (userAgent) {\n var agent = userAgent[1];\n var version = parseInt(userAgent[2]);\n }\n\n if (\n nativeAddAll && (!userAgent ||\n (agent === 'Firefox' && version >= 46) ||\n (agent === 'Chrome' && version >= 50)\n )\n ) {\n return;\n }\n\n Cache.prototype.addAll = function addAll(requests) {\n var cache = this;\n\n // Since DOMExceptions are not constructable:\n function NetworkError(message) {\n this.name = 'NetworkError';\n this.code = 19;\n this.message = message;\n }\n\n NetworkError.prototype = Object.create(Error.prototype);\n\n return Promise.resolve().then(function() {\n if (arguments.length < 1) throw new TypeError();\n\n // Simulate sequence<(Request or USVString)> binding:\n var sequence = [];\n\n requests = requests.map(function(request) {\n if (request instanceof Request) {\n return request;\n }\n else {\n return String(request); // may throw TypeError\n }\n });\n\n return Promise.all(\n requests.map(function(request) {\n if (typeof request === 'string') {\n request = new Request(request);\n }\n\n var scheme = new URL(request.url).protocol;\n\n if (scheme !== 'http:' && scheme !== 'https:') {\n throw new NetworkError(\"Invalid scheme\");\n }\n\n return fetch(request.clone());\n })\n );\n }).then(function(responses) {\n // If some of the responses has not OK-eish status,\n // then whole operation should reject\n if (responses.some(function(response) {\n return !response.ok;\n })) {\n throw new NetworkError('Incorrect response status');\n }\n\n // TODO: check that requests don't overwrite one another\n // (don't think this is possible to polyfill due to opaque responses)\n return Promise.all(\n responses.map(function(response, i) {\n return cache.put(requests[i], response);\n })\n );\n }).then(function() {\n return undefined;\n });\n };\n\n Cache.prototype.add = function add(request) {\n return this.addAll([request]);\n };\n}());","/*\n\tCopyright 2014 Google Inc. All Rights Reserved.\n\n\tLicensed under the Apache License, Version 2.0 (the \"License\");\n\tyou may not use this file except in compliance with the License.\n\tYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n\tUnless required by applicable law or agreed to in writing, software\n\tdistributed under the License is distributed on an \"AS IS\" BASIS,\n\tWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\tSee the License for the specific language governing permissions and\n\tlimitations under the License.\n*/\n'use strict';\nvar helpers = require('../helpers');\n\nfunction networkOnly(request, values, options) {\n helpers.debug('Strategy: network only [' + request.url + ']', options);\n return fetch(request);\n}\n\nmodule.exports = networkOnly;\n","/*\n\tCopyright 2014 Google Inc. All Rights Reserved.\n\n\tLicensed under the Apache License, Version 2.0 (the \"License\");\n\tyou may not use this file except in compliance with the License.\n\tYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n\tUnless required by applicable law or agreed to in writing, software\n\tdistributed under the License is distributed on an \"AS IS\" BASIS,\n\tWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\tSee the License for the specific language governing permissions and\n\tlimitations under the License.\n*/\n'use strict';\nvar helpers = require('../helpers');\n\nfunction cacheOnly(request, values, options) {\n helpers.debug('Strategy: cache only [' + request.url + ']', options);\n return helpers.openCache(options).then(function(cache) {\n return cache.match(request);\n });\n}\n\nmodule.exports = cacheOnly;\n","/*\n Copyright 2015 Google Inc. All Rights Reserved.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n*/\n'use strict';\nvar globalOptions = require('../options');\nvar helpers = require('../helpers');\n\nfunction networkFirst(request, values, options) {\n options = options || {};\n var successResponses = options.successResponses ||\n globalOptions.successResponses;\n // This will bypass options.networkTimeout if it's set to a false-y value like\n // 0, but that's the sane thing to do anyway.\n var networkTimeoutSeconds = options.networkTimeoutSeconds ||\n globalOptions.networkTimeoutSeconds;\n helpers.debug('Strategy: network first [' + request.url + ']', options);\n\n return helpers.openCache(options).then(function(cache) {\n var timeoutId;\n var promises = [];\n var originalResponse;\n\n if (networkTimeoutSeconds) {\n var cacheWhenTimedOutPromise = new Promise(function(resolve) {\n timeoutId = setTimeout(function() {\n cache.match(request).then(function(response) {\n if (response) {\n // Only resolve this promise if there's a valid response in the\n // cache. This ensures that we won't time out a network request\n // unless there's a cached entry to fallback on, which is arguably\n // the preferable behavior.\n resolve(response);\n }\n });\n }, networkTimeoutSeconds * 1000);\n });\n promises.push(cacheWhenTimedOutPromise);\n }\n\n var networkPromise = helpers.fetchAndCache(request, options)\n .then(function(response) {\n // We've got a response, so clear the network timeout if there is one.\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n if (successResponses.test(response.status)) {\n return response;\n }\n\n helpers.debug('Response was an HTTP error: ' + response.statusText,\n options);\n originalResponse = response;\n throw new Error('Bad response');\n }).catch(function(error) {\n helpers.debug('Network or response error, fallback to cache [' +\n request.url + ']', options);\n return cache.match(request).then(function(response) {\n // If there's a match in the cache, resolve with that.\n if (response) {\n return response;\n }\n\n // If we have a Response object from the previous fetch, then resolve\n // with that, even though it corresponds to an error status code.\n if (originalResponse) {\n return originalResponse;\n }\n\n // If we don't have a Response object from the previous fetch, likely\n // due to a network failure, then reject with the failure error.\n throw error;\n });\n });\n\n promises.push(networkPromise);\n\n return Promise.race(promises);\n });\n}\n\nmodule.exports = networkFirst;\n","/*\n\tCopyright 2014 Google Inc. All Rights Reserved.\n\n\tLicensed under the Apache License, Version 2.0 (the \"License\");\n\tyou may not use this file except in compliance with the License.\n\tYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n\tUnless required by applicable law or agreed to in writing, software\n\tdistributed under the License is distributed on an \"AS IS\" BASIS,\n\tWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\tSee the License for the specific language governing permissions and\n\tlimitations under the License.\n*/\n'use strict';\nvar helpers = require('../helpers');\n\nfunction cacheFirst(request, values, options) {\n helpers.debug('Strategy: cache first [' + request.url + ']', options);\n return helpers.openCache(options).then(function(cache) {\n return cache.match(request).then(function(response) {\n if (response) {\n return response;\n }\n\n return helpers.fetchAndCache(request, options);\n });\n });\n}\n\nmodule.exports = cacheFirst;\n","/*\n Copyright 2014 Google Inc. All Rights Reserved.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n*/\n'use strict';\nvar helpers = require('../helpers');\nvar cacheOnly = require('./cacheOnly');\n\nfunction fastest(request, values, options) {\n helpers.debug('Strategy: fastest [' + request.url + ']', options);\n\n return new Promise(function(resolve, reject) {\n var rejected = false;\n var reasons = [];\n\n var maybeReject = function(reason) {\n reasons.push(reason.toString());\n if (rejected) {\n reject(new Error('Both cache and network failed: \"' +\n reasons.join('\", \"') + '\"'));\n } else {\n rejected = true;\n }\n };\n\n var maybeResolve = function(result) {\n if (result instanceof Response) {\n resolve(result);\n } else {\n maybeReject('No result returned');\n }\n };\n\n helpers.fetchAndCache(request.clone(), options)\n .then(maybeResolve, maybeReject);\n\n cacheOnly(request, values, options)\n .then(maybeResolve, maybeReject);\n });\n}\n\nmodule.exports = fastest;\n","var isarray = require('isarray')\n\n/**\n * Expose `pathToRegexp`.\n */\nmodule.exports = pathToRegexp\nmodule.exports.parse = parse\nmodule.exports.compile = compile\nmodule.exports.tokensToFunction = tokensToFunction\nmodule.exports.tokensToRegExp = tokensToRegExp\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n // Match escaped characters that would otherwise appear in future matches.\n // This allows the user to escape special characters that won't transform.\n '(\\\\\\\\.)',\n // Match Express-style parameters and un-named parameters with a prefix\n // and optional suffixes. Matches appear as:\n //\n // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n // \"/route(\\\\d+)\" => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n // \"/*\" => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n '([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^()])+)\\\\))([+*?])?|(\\\\*))'\n].join('|'), 'g')\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param {string} str\n * @return {!Array}\n */\nfunction parse (str) {\n var tokens = []\n var key = 0\n var index = 0\n var path = ''\n var res\n\n while ((res = PATH_REGEXP.exec(str)) != null) {\n var m = res[0]\n var escaped = res[1]\n var offset = res.index\n path += str.slice(index, offset)\n index = offset + m.length\n\n // Ignore already escaped sequences.\n if (escaped) {\n path += escaped[1]\n continue\n }\n\n var next = str[index]\n var prefix = res[2]\n var name = res[3]\n var capture = res[4]\n var group = res[5]\n var modifier = res[6]\n var asterisk = res[7]\n\n // Push the current path onto the tokens.\n if (path) {\n tokens.push(path)\n path = ''\n }\n\n var partial = prefix != null && next != null && next !== prefix\n var repeat = modifier === '+' || modifier === '*'\n var optional = modifier === '?' || modifier === '*'\n var delimiter = res[2] || '/'\n var pattern = capture || group || (asterisk ? '.*' : '[^' + delimiter + ']+?')\n\n tokens.push({\n name: name || key++,\n prefix: prefix || '',\n delimiter: delimiter,\n optional: optional,\n repeat: repeat,\n partial: partial,\n asterisk: !!asterisk,\n pattern: escapeGroup(pattern)\n })\n }\n\n // Match any characters still remaining.\n if (index < str.length) {\n path += str.substr(index)\n }\n\n // If the path exists, push it onto the end.\n if (path) {\n tokens.push(path)\n }\n\n return tokens\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param {string} str\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str) {\n return tokensToFunction(parse(str))\n}\n\n/**\n * Prettier encoding of URI path segments.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeURIComponentPretty (str) {\n return encodeURI(str).replace(/[\\/?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeAsterisk (str) {\n return encodeURI(str).replace(/[?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens) {\n // Compile all the tokens into regexps.\n var matches = new Array(tokens.length)\n\n // Compile all the patterns before compilation.\n for (var i = 0; i < tokens.length; i++) {\n if (typeof tokens[i] === 'object') {\n matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$')\n }\n }\n\n return function (obj, opts) {\n var path = ''\n var data = obj || {}\n var options = opts || {}\n var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (typeof token === 'string') {\n path += token\n\n continue\n }\n\n var value = data[token.name]\n var segment\n\n if (value == null) {\n if (token.optional) {\n // Prepend partial segment prefixes.\n if (token.partial) {\n path += token.prefix\n }\n\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to be defined')\n }\n }\n\n if (isarray(value)) {\n if (!token.repeat) {\n throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`')\n }\n\n if (value.length === 0) {\n if (token.optional) {\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n }\n }\n\n for (var j = 0; j < value.length; j++) {\n segment = encode(value[j])\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`')\n }\n\n path += (j === 0 ? token.prefix : token.delimiter) + segment\n }\n\n continue\n }\n\n segment = token.asterisk ? encodeAsterisk(value) : encode(value)\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n }\n\n path += token.prefix + segment\n }\n\n return path\n }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n return str.replace(/([.+*?=^!:${}()[\\]|\\/])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n return group.replace(/([=!:$\\/()])/g, '\\\\$1')\n}\n\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param {!RegExp} re\n * @param {Array} keys\n * @return {!RegExp}\n */\nfunction attachKeys (re, keys) {\n re.keys = keys\n return re\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param {Object} options\n * @return {string}\n */\nfunction flags (options) {\n return options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param {!RegExp} path\n * @param {!Array} keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n // Use a negative lookahead to match only capturing groups.\n var groups = path.source.match(/\\((?!\\?)/g)\n\n if (groups) {\n for (var i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: null,\n delimiter: null,\n optional: false,\n repeat: false,\n partial: false,\n asterisk: false,\n pattern: null\n })\n }\n }\n\n return attachKeys(path, keys)\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param {!Array} path\n * @param {Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n var parts = []\n\n for (var i = 0; i < path.length; i++) {\n parts.push(pathToRegexp(path[i], keys, options).source)\n }\n\n var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options))\n\n return attachKeys(regexp, keys)\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param {string} path\n * @param {!Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n var tokens = parse(path)\n var re = tokensToRegExp(tokens, options)\n\n // Attach keys back to the regexp.\n for (var i = 0; i < tokens.length; i++) {\n if (typeof tokens[i] !== 'string') {\n keys.push(tokens[i])\n }\n }\n\n return attachKeys(re, keys)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param {!Array} tokens\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, options) {\n options = options || {}\n\n var strict = options.strict\n var end = options.end !== false\n var route = ''\n var lastToken = tokens[tokens.length - 1]\n var endsWithSlash = typeof lastToken === 'string' && /\\/$/.test(lastToken)\n\n // Iterate over the tokens and create our regexp string.\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (typeof token === 'string') {\n route += escapeString(token)\n } else {\n var prefix = escapeString(token.prefix)\n var capture = '(?:' + token.pattern + ')'\n\n if (token.repeat) {\n capture += '(?:' + prefix + capture + ')*'\n }\n\n if (token.optional) {\n if (!token.partial) {\n capture = '(?:' + prefix + '(' + capture + '))?'\n } else {\n capture = prefix + '(' + capture + ')?'\n }\n } else {\n capture = prefix + '(' + capture + ')'\n }\n\n route += capture\n }\n }\n\n // In non-strict mode we allow a slash at the end of match. If the path to\n // match already ends with a slash, we remove it for consistency. The slash\n // is valid at the end of a path match, not in the middle. This is important\n // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n if (!strict) {\n route = (endsWithSlash ? route.slice(0, -2) : route) + '(?:\\\\/(?=$))?'\n }\n\n if (end) {\n route += '$'\n } else {\n // In non-ending mode, we need the capturing groups to match as much as\n // possible by using a positive lookahead to the end or next path segment.\n route += strict && endsWithSlash ? '' : '(?=\\\\/|$)'\n }\n\n return new RegExp('^' + route, flags(options))\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param {(string|RegExp|Array)} path\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n keys = keys || []\n\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys)\n keys = []\n } else if (!options) {\n options = {}\n }\n\n if (path instanceof RegExp) {\n return regexpToRegexp(path, /** @type {!Array} */ (keys))\n }\n\n if (isarray(path)) {\n return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)\n }\n\n return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)\n}\n","module.exports = Array.isArray || function (arr) {\n return Object.prototype.toString.call(arr) == '[object Array]';\n};\n"]} \ No newline at end of file diff --git a/app/bower_components/test-fixture/.bower.json b/app/bower_components/test-fixture/.bower.json deleted file mode 100644 index 69eedd7..0000000 --- a/app/bower_components/test-fixture/.bower.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "test-fixture", - "version": "1.1.1", - "license": "http://polymer.github.io/LICENSE.txt", - "description": "A simple element to fixture DOM for tests", - "keywords": [ - "web-components", - "polymer", - "testing" - ], - "devDependencies": { - "web-component-tester": "^4.0.0", - "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" - }, - "main": "test-fixture.html", - "ignore": [], - "homepage": "https://github.com/polymerelements/test-fixture", - "_release": "1.1.1", - "_resolution": { - "type": "version", - "tag": "v1.1.1", - "commit": "a7407b76881a7f214250af17108a8792fddfde89" - }, - "_source": "git://github.com/polymerelements/test-fixture.git", - "_target": "^1.0.0", - "_originalSource": "polymerelements/test-fixture" -} \ No newline at end of file diff --git a/app/bower_components/test-fixture/.gitignore b/app/bower_components/test-fixture/.gitignore deleted file mode 100644 index 6b6df77..0000000 --- a/app/bower_components/test-fixture/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -bower_components -*.swp -.DS_Store diff --git a/app/bower_components/test-fixture/.travis.yml b/app/bower_components/test-fixture/.travis.yml deleted file mode 100644 index 28a89c9..0000000 --- a/app/bower_components/test-fixture/.travis.yml +++ /dev/null @@ -1,25 +0,0 @@ -language: node_js -sudo: false -before_script: - - npm install -g bower polylint web-component-tester - - bower install - - polylint -env: - global: - - secure: RKVKT0Yhqjp617OBwSXbOKMh1ivGExp8P2NB/tfNqksgG1mAlCRDiAW4raOjMh5asUbxlQsRQfMwrrJmOM392skkl4+N4wBCPX00XLG4Dc9BirLa0D5AtkSjYOtEYplWOPkQgeXTXLn8NdZsNnyu4r+FG3lH9WIbhF/QPbYUmB4= - - secure: da6fTrKTSDAtuTp0r8ORY+6UTJIVVwiZ0meqqaR3hKdHiXKjaTbQTUqH1x9Z6wj+zccenHrC+OyKANH7FHHriv0XLwU/GXoZd1rUiUfNrMhGZ32YHSvLJ6P64a/yaBS3432h504TkfSI6m0ZQc+KdxYgXxJBffYf1sfVGFw0osw= - - CXX=g++-4.8 -node_js: stable -addons: - firefox: latest - apt: - sources: - - google-chrome - - ubuntu-toolchain-r-test - packages: - - google-chrome-stable - - g++-4.8 - sauce_connect: true -script: - - xvfb-run wct - - "if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ]; then wct -s 'default'; fi" diff --git a/app/bower_components/test-fixture/README.md b/app/bower_components/test-fixture/README.md deleted file mode 100644 index 594b9c3..0000000 --- a/app/bower_components/test-fixture/README.md +++ /dev/null @@ -1,148 +0,0 @@ - - - -[![Build status](https://travis-ci.org/PolymerElements/test-fixture.svg?branch=master)](https://travis-ci.org/PolymerElements/test-fixture) - - -##<test-fixture> - -The `` element can simplify the exercise of consistently -resetting a test suite's DOM. To use it, wrap the test suite's DOM as a template: - -```html - - - -``` - -Now, the `` element can be used to generate a copy of its -template: - -```html - -``` - -Fixtured elements can be cleaned up by calling `restore` on the ``: - -```javascript - afterEach(function () { - document.getElementById('SomeElementFixture').restore(); - // has been removed - }); -``` - -`` will create fixtures from all of its immediate `