diff --git a/.babelrc b/.babelrc index 6ba0e0dae0..3fb847ad18 100644 --- a/.babelrc +++ b/.babelrc @@ -1,4 +1,21 @@ { - "presets": ["react", "es2015", "es2016"], - "plugins": ["transform-class-properties", "transform-object-rest-spread", "transform-async-to-bluebird", "transform-runtime", "add-module-exports"] + "presets": [ + "react", + "es2015", + "es2016" + ], + "plugins": [ + [ + "transform-builtin-extend", + { + "globals": ["Error"] + } + ], + "transform-class-properties", + "transform-object-rest-spread", + "transform-async-to-bluebird", + "transform-runtime", + "add-module-exports", + "syntax-dynamic-import" + ] } diff --git a/.buildkite/pipeline.yaml b/.buildkite/pipeline.yaml new file mode 100644 index 0000000000..46ec4edc61 --- /dev/null +++ b/.buildkite/pipeline.yaml @@ -0,0 +1,57 @@ +steps: + - label: ":eslint: Lint" + command: + - "yarn install" + - "yarn lint" + plugins: + - docker#v3.0.1: + image: "node:10" + + - label: ":karma: Tests" + agents: + # We use a medium sized instance instead of the normal small ones because + # webpack loves to gorge itself on resources. + queue: "medium" + command: + # Install chrome + - "echo '--- Installing Chrome'" + - "wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -" + - "sh -c 'echo \"deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main\" >> /etc/apt/sources.list.d/google.list'" + - "apt-get update" + - "apt-get install -y google-chrome-stable" + # Run tests + - "echo '--- Fetching Dependencies'" + - "./scripts/fetch-develop.deps.sh --depth 1" + - "yarn install" + - "echo '+++ Running Tests'" + - "yarn test" + env: + CHROME_BIN: "/usr/bin/google-chrome-stable" + plugins: + - docker#v3.0.1: + image: "node:10" + propagate-environment: true + + - label: ":hammer: Package" + command: + - "echo '--- Fetching Dependencies'" + - "./scripts/fetch-develop.deps.sh --depth 1" + - "yarn install" + - "echo '+++ Packaging'" + - "./scripts/ci_package.sh" + branches: "develop" + artifact_paths: "dist/riot-*.tar.gz" + plugins: + - docker#v3.0.1: + image: "node:10" + + - label: "🌐 i18n" + command: + - "echo '--- Fetching Dependencies'" + - "./scripts/fetch-develop.deps.sh --depth 1" + - "yarn install" + - "echo '+++ Testing i18n output'" + - "yarn diff-i18n" + plugins: + - docker#v3.0.1: + image: "node:10" \ No newline at end of file diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000..d4eb9eeb01 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,11 @@ +# Exclude a bunch of stuff which can make the build context a larger than it needs to be +.git/ +test/ +webapp/ +lib/ +node_modules/ +electron_app/ +karma-reports/ +.idea/ +.tmp/ +config.json* diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000000..afc29f0142 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,2 @@ +patreon: matrixdotorg +liberapay: matrixdotorg diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index ba4adf39f0..a2042975e1 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -43,4 +43,4 @@ For the web app: For the desktop app: - **OS**: Windows, macOS, Ubuntu, Arch Linux, etc? -- **Version**: 0.x.y +- **Version**: 1.x.y diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000000..5f472303dd --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,56 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: bug +assignees: '' + +--- + + + + + +### Description + +Describe here the problem that you are experiencing, or the feature you are requesting. + +### Steps to reproduce + +- For bugs, list the steps +- that reproduce the bug +- using hyphens as bullet points + +Describe how what happens differs from what you expected. + + +Logs being sent: yes/no + + + +### Version information + + + +- **Platform**: web (in-browser) or desktop? + +For the web app: + +- **Browser**: Chrome, Safari, Firefox? which version? +- **OS**: Windows, macOS, Ubuntu, Arch Linux, etc? +- **URL**: riot.im/develop / riot.im/app / somewhere else? If a private server, what version of riot-web? + +For the desktop app: + +- **OS**: Windows, macOS, Ubuntu, Arch Linux, etc? +- **Version**: 1.x.y diff --git a/.github/ISSUE_TEMPLATE/suggestion-or-feature-request.md b/.github/ISSUE_TEMPLATE/suggestion-or-feature-request.md new file mode 100644 index 0000000000..b27af8faeb --- /dev/null +++ b/.github/ISSUE_TEMPLATE/suggestion-or-feature-request.md @@ -0,0 +1,20 @@ +--- +name: Suggestion or Feature request +about: Suggest an idea for this project +title: '' +labels: suggestion +assignees: '' + +--- + +**Is your suggestion related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/user-interface-or-usability-bug-report.md b/.github/ISSUE_TEMPLATE/user-interface-or-usability-bug-report.md new file mode 100644 index 0000000000..b3e68ccec9 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/user-interface-or-usability-bug-report.md @@ -0,0 +1,58 @@ +--- +name: User Interface or Usability Bug report +about: Please include screenshots in UI/UX bug reports +title: '' +labels: bug, ui/ux +assignees: '' + +--- + + + + + + + +### Description + +Describe here the problem that you are experiencing, or the feature you are requesting. + +### Steps to reproduce + +- For bugs, list the steps +- that reproduce the bug +- using hyphens as bullet points + +Describe how what happens differs from what you expected. + + +Logs being sent: yes/no + + + +### Version information + + + +- **Platform**: web (in-browser) or desktop? + +For the web app: + +- **Browser**: Chrome, Safari, Firefox? which version? +- **OS**: Windows, macOS, Ubuntu, Arch Linux, etc? +- **URL**: riot.im/develop / riot.im/app / somewhere else? If a private server, what version of riot-web? + +For the desktop app: + +- **OS**: Windows, macOS, Ubuntu, Arch Linux, etc? +- **Version**: 1.x.y diff --git a/.gitignore b/.gitignore index 2ad05012a0..c1a042341a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,19 +1,23 @@ /build /cert.pem /dist -/karma-reports /key.pem /lib /node_modules /electron_app/node_modules /electron_app/dist +/electron_app/pub /packages/ /webapp /.npmrc +/*.log +package-lock.json .DS_Store -npm-debug.log electron/dist electron/pub **/.idea /config.json +/config.json.* +/config.local*.json /src/component-index.js +/.tmp diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index bc3fce38df..0000000000 --- a/.travis.yml +++ /dev/null @@ -1,35 +0,0 @@ -# we need trusty for the chrome addon -dist: trusty - -# we don't need sudo, so can run in a container, which makes startup much -# quicker. -# -# unfortunately we do temporarily require sudo as a workaround for -# https://github.com/travis-ci/travis-ci/issues/8836 -sudo: required - -language: node_js -node_js: - # make sure we work with a range of node versions. - # As of the time of writing: - # - 4.x is still in LTS (until April 2018), but some of our deps (notably - # extract-zip) don't work with it - # - 5.x has been EOLed for nearly a year. - # - 6.x is the active 'LTS' version - # - 7.x is no longer supported - # - 8.x is the current 'current' version (until October 2017) - # - # see: https://github.com/nodejs/LTS/ - # - # anything before 6.3 ships with npm 3.9 or earlier, which had problems - # with symlinks in node_modules (see - # https://github.com/npm/npm/releases/tag/v3.10.0 'FIXES AND REFACTORING'). - - 6.3 - - 6 - - 7 -addons: - chrome: stable -install: - # clone the deps with depth 1: we know we will only ever need that one - # commit. - - scripts/fetch-develop.deps.sh --depth 1 && npm install diff --git a/CHANGELOG.md b/CHANGELOG.md index 6b66e37aa9..5a742a16fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,1457 @@ +Changes in [1.5.0](https://github.com/vector-im/riot-web/releases/tag/v1.5.0) (2019-10-18) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.0-rc.1...v1.5.0) + + * Upgrade to JS SDK v2.4.2 and React SDK v1.7.0 + * Port Windows signing and macOS notarization to release + [\#11158](https://github.com/vector-im/riot-web/pull/11158) + * Sign main Windows executable + [\#11126](https://github.com/vector-im/riot-web/pull/11126) + * Notarise the macOS app + [\#11119](https://github.com/vector-im/riot-web/pull/11119) + +Changes in [1.5.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.5.0-rc.1) (2019-10-09) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.4.2...v1.5.0-rc.1) + + * Update from Weblate + [\#11104](https://github.com/vector-im/riot-web/pull/11104) + * Bump Olm to 3.1.4 for olm_session_describe + [\#11103](https://github.com/vector-im/riot-web/pull/11103) + * Enable Webpack production mode for start:js:prod + [\#11098](https://github.com/vector-im/riot-web/pull/11098) + * add settingDefaults to sample config + [\#9919](https://github.com/vector-im/riot-web/pull/9919) + * Add config.json copy instruction to 'Development' as well + [\#11062](https://github.com/vector-im/riot-web/pull/11062) + * Revert "Run yarn upgrade" + [\#11055](https://github.com/vector-im/riot-web/pull/11055) + * Run yarn upgrade + [\#11050](https://github.com/vector-im/riot-web/pull/11050) + * Request persistent storage on Electron + [\#11052](https://github.com/vector-im/riot-web/pull/11052) + * Remove docs for CIDER feature + [\#11047](https://github.com/vector-im/riot-web/pull/11047) + +Changes in [1.4.2](https://github.com/vector-im/riot-web/releases/tag/v1.4.2) (2019-10-04) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.4.2-rc.1...v1.4.2) + + * Document troubleshooting for memory leaks and getting profiles + [\#11031](https://github.com/vector-im/riot-web/pull/11031) + +Changes in [1.4.2-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.4.2-rc.1) (2019-10-02) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.4.1...v1.4.2-rc.1) + + * Custom themes MVP + [\#11017](https://github.com/vector-im/riot-web/pull/11017) + * Document permalinkPrefix setting + [\#11007](https://github.com/vector-im/riot-web/pull/11007) + +Changes in [1.4.1](https://github.com/vector-im/riot-web/releases/tag/v1.4.1) (2019-10-01) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.4.0...v1.4.1) + + * Upgrade to React SDK 1.6.1 to fix critical + [blank screen issue](https://github.com/vector-im/riot-web/issues/10983) + * Upgrade to JS SDK 2.4.1 to to ignore crypto events with empty content + * Update from Weblate + [\#11010](https://github.com/vector-im/riot-web/pull/11010) + * Update from Weblate + [\#11001](https://github.com/vector-im/riot-web/pull/11001) + * Upgrade deps + [\#10980](https://github.com/vector-im/riot-web/pull/10980) + +Changes in [1.4.0](https://github.com/vector-im/riot-web/releases/tag/v1.4.0) (2019-09-27) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.4.0-rc.2...v1.4.0) + +* Many improvements related to privacy and user control of identity services and integration managers +* Upgrade to React SDK 1.6.0 and JS SDK 2.4.0 + +Changes in [1.4.0-rc.2](https://github.com/vector-im/riot-web/releases/tag/v1.4.0-rc.2) (2019-09-26) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.4.0-rc.1...v1.4.0-rc.2) + + * Upgrade to React SDK 1.6.0-rc.2 + * Work around Yarn confusion with `react-gemini-scrollbar` package + +Changes in [1.4.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.4.0-rc.1) (2019-09-25) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.3.6...v1.4.0-rc.1) + + * Upgrade to React SDK 1.6.0-rc.1 and JS SDK 2.4.0-rc.1 + * Update from Weblate + [\#10961](https://github.com/vector-im/riot-web/pull/10961) + * Don't log query parameters as they may contain secrets + [\#10929](https://github.com/vector-im/riot-web/pull/10929) + * Document more shortcuts + [\#10906](https://github.com/vector-im/riot-web/pull/10906) + * Point to #develop and use the same gemini-scrollbar version as the react-sdk + [\#10893](https://github.com/vector-im/riot-web/pull/10893) + * Tweak lock file to pull in only one React version + [\#10874](https://github.com/vector-im/riot-web/pull/10874) + * document disable_custom_urls + [\#10844](https://github.com/vector-im/riot-web/pull/10844) + * Install guide tweaks + [\#10838](https://github.com/vector-im/riot-web/pull/10838) + * Switch to React 16 + [\#10480](https://github.com/vector-im/riot-web/pull/10480) + * Update install guide + [\#10810](https://github.com/vector-im/riot-web/pull/10810) + * Clarify that HTTPS is not just needed for VoIP + [\#6146](https://github.com/vector-im/riot-web/pull/6146) + * Bump eslint-utils from 1.4.0 to 1.4.2 + [\#10692](https://github.com/vector-im/riot-web/pull/10692) + * Add docs for tabbed integration managers labs flag + [\#10641](https://github.com/vector-im/riot-web/pull/10641) + * Change integrations_widgets_urls default configuration + [\#10656](https://github.com/vector-im/riot-web/pull/10656) + * Add docs for the CIDER composer flag + [\#10638](https://github.com/vector-im/riot-web/pull/10638) + * add cider composer labs flag + [\#10626](https://github.com/vector-im/riot-web/pull/10626) + * Upgrade to Electron 6.0.3 + [\#10601](https://github.com/vector-im/riot-web/pull/10601) + * Upgrade to Electron 6 + [\#10596](https://github.com/vector-im/riot-web/pull/10596) + * Update from Weblate + [\#10591](https://github.com/vector-im/riot-web/pull/10591) + * Upgrade electron-builder to 21.2.0 + [\#10579](https://github.com/vector-im/riot-web/pull/10579) + * Set SUID bit on chrome-sandbox for Debian + [\#10580](https://github.com/vector-im/riot-web/pull/10580) + * Load config.json before loading language so default can apply + [\#10551](https://github.com/vector-im/riot-web/pull/10551) + * Bump matrix-react-test-utils for React 16 compatibility + [\#10543](https://github.com/vector-im/riot-web/pull/10543) + * Add --help to electron app + [\#10530](https://github.com/vector-im/riot-web/pull/10530) + * Allow setting electron autoHideMenuBar and persist it + [\#10503](https://github.com/vector-im/riot-web/pull/10503) + * Upgrade dependencies + [\#10475](https://github.com/vector-im/riot-web/pull/10475) + +Changes in [1.3.6](https://github.com/vector-im/riot-web/releases/tag/v1.3.6) (2019-09-19) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.3.5...v1.3.6) + + * Fix origin migrator for SSO logins + [\#10920](https://github.com/vector-im/riot-web/pull/10920) + +Changes in [1.3.5](https://github.com/vector-im/riot-web/releases/tag/v1.3.5) (2019-09-16) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.3.5-rc.3...v1.3.5) + + * Updated js-sdk and react-sdk for some more minor bugfixes + +Changes in [1.3.5-rc.3](https://github.com/vector-im/riot-web/releases/tag/v1.3.5-rc.3) (2019-09-13) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.3.5-rc.2...v1.3.5-rc.3) + + * js-sdk rc.1 to include report API + +Changes in [1.3.5-rc.2](https://github.com/vector-im/riot-web/releases/tag/v1.3.5-rc.2) (2019-09-13) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.3.5-rc.1...v1.3.5-rc.2) + + * Pull in more fixes from react-sdk rc.2 + +Changes in [1.3.5-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.3.5-rc.1) (2019-09-12) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.3.4...v1.3.5-rc.1) + + * Cosmetic fixes from react-sdk rc.1 + +Changes in [1.3.4](https://github.com/vector-im/riot-web/releases/tag/v1.3.4) (2019-09-12) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.3.4-rc.1...v1.3.4) + + * Updated react-sdk and tweaks to mobile install guide + +Changes in [1.3.4-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.3.4-rc.1) (2019-09-11) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.3.3...v1.3.4-rc.1) + + * Update install guide + [\#10831](https://github.com/vector-im/riot-web/pull/10831) + +Changes in [1.3.3](https://github.com/vector-im/riot-web/releases/tag/v1.3.3) (2019-08-16) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.3.2...v1.3.3) + + * Linux-only release to fix sandboxing with Electron 5 on Debian + [\#10580](https://github.com/vector-im/riot-web/pull/10580) + +Changes in [1.3.2](https://github.com/vector-im/riot-web/releases/tag/v1.3.2) (2019-08-05) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.3.1...v1.3.2) + + * Updated react-sdk for deactivated account error message on login + +Changes in [1.3.1](https://github.com/vector-im/riot-web/releases/tag/v1.3.1) (2019-08-05) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.3.1-rc.1...v1.3.1) + + * Updated js-sdk for notifications fix and react-sdk for registration fix + +Changes in [1.3.1-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.3.1-rc.1) (2019-07-31) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.3.0...v1.3.1-rc.1) + + * Upgrade to JS SDK 2.3.0-rc.1 and React SDK 1.5.0-rc.1 + * Update from Weblate + [\#10436](https://github.com/vector-im/riot-web/pull/10436) + * Describe our existing features better in documentation + [\#10418](https://github.com/vector-im/riot-web/pull/10418) + * Upgrade to Electron 5 + [\#10392](https://github.com/vector-im/riot-web/pull/10392) + * Remove edits and reactions feature flags from docs and config + [\#10363](https://github.com/vector-im/riot-web/pull/10363) + * Cachebust config file requests + [\#10349](https://github.com/vector-im/riot-web/pull/10349) + * Convert install-app-deps to subcommand + [\#10334](https://github.com/vector-im/riot-web/pull/10334) + * Add riot.im configuration files + [\#10327](https://github.com/vector-im/riot-web/pull/10327) + * Require descriptions in mxSendRageshake and remove infinite loop in issue + templates + [\#10321](https://github.com/vector-im/riot-web/pull/10321) + * Remove unused disable_identity_server config flag + [\#10322](https://github.com/vector-im/riot-web/pull/10322) + * Verify i18n in CI + [\#10320](https://github.com/vector-im/riot-web/pull/10320) + +Changes in [1.3.0](https://github.com/vector-im/riot-web/releases/tag/v1.3.0) (2019-07-18) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.3.0-rc.3...v1.3.0) + + * Upgrade to React SDK 1.4.0 and JS SDK 2.2.0 + * Message editing and reactions features enabled + * Remove edits and reactions feature flags from docs and config + [\#10365](https://github.com/vector-im/riot-web/pull/10365) + +Changes in [1.3.0-rc.3](https://github.com/vector-im/riot-web/releases/tag/v1.3.0-rc.3) (2019-07-15) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.3.0-rc.2...v1.3.0-rc.3) + + * Update to react-sdk rc.3 to fix a bug where a room admin could generate a room + that would cause Riot to error, and some stuck notifications. + +Changes in [1.3.0-rc.2](https://github.com/vector-im/riot-web/releases/tag/v1.3.0-rc.2) (2019-07-12) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.3.0-rc.1...v1.3.0-rc.2) + + * Upgrade to React SDK 1.4.0-rc.2 and JS SDK 2.2.0-rc.2 + * Fix regression from Riot 1.3.0-rc.1 when listing devices in user settings + +Changes in [1.3.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.3.0-rc.1) (2019-07-12) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.2.4...v1.3.0-rc.1) + + * Upgrade to React SDK 1.4.0-rc.1 and JS SDK 2.2.0-rc.1 + * Update from Weblate + [\#10328](https://github.com/vector-im/riot-web/pull/10328) + * Upgrade dependencies + [\#10308](https://github.com/vector-im/riot-web/pull/10308) + * Upgrade dependencies + [\#10260](https://github.com/vector-im/riot-web/pull/10260) + +Changes in [1.2.4](https://github.com/vector-im/riot-web/releases/tag/v1.2.4) (2019-07-11) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.2.3...v1.2.4) + + * Upgrade to React SDK 1.3.1 and JS SDK 2.1.1 + * Upgrade lodash dependencies + * JS SDK 2.1.1 includes a fix for ephemeral event processing + * React SDK 1.3.1 includes a fix for account deactivation + +Changes in [1.2.3](https://github.com/vector-im/riot-web/releases/tag/v1.2.3) (2019-07-08) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.2.3-rc.1...v1.2.3) + + * Upgrade to React SDK 1.3.0 and JS SDK 2.1.0 + * JS SDK 2.1.0 includes a fix for an exception whilst syncing + +Changes in [1.2.3-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.2.3-rc.1) (2019-07-03) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.2.2...v1.2.3-rc.1) + + * Change update URL to match new host + [\#10247](https://github.com/vector-im/riot-web/pull/10247) + * Update from Weblate + [\#10219](https://github.com/vector-im/riot-web/pull/10219) + * Extract configuration docs to separate file + [\#10195](https://github.com/vector-im/riot-web/pull/10195) + * Add e2e/warning.svg to preload + [\#10197](https://github.com/vector-im/riot-web/pull/10197) + * Fix Electron vector: links + [\#10196](https://github.com/vector-im/riot-web/pull/10196) + * Display a red box of anger for config syntax errors + [\#10193](https://github.com/vector-im/riot-web/pull/10193) + * Move config-getting to VectorBasePlatform + [\#10181](https://github.com/vector-im/riot-web/pull/10181) + * Update from Weblate + [\#10124](https://github.com/vector-im/riot-web/pull/10124) + * Fix default Electron window and tray icons + [\#10097](https://github.com/vector-im/riot-web/pull/10097) + +Changes in [1.2.2](https://github.com/vector-im/riot-web/releases/tag/v1.2.2) (2019-06-19) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.2.2-rc.2...v1.2.2) + + No changes since rc.2 + +Changes in [1.2.2-rc.2](https://github.com/vector-im/riot-web/releases/tag/v1.2.2-rc.2) (2019-06-18) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.2.2-rc.1...v1.2.2-rc.2) + + * Update to react-sdk and js-sdk rc.2 for registration fixes, + redaction local echo fix and removing unnecessary calls + to the integration manager. + +Changes in [1.2.2-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.2.2-rc.1) (2019-06-12) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.2.1...v1.2.2-rc.1) + + * Update from Weblate + [\#10012](https://github.com/vector-im/riot-web/pull/10012) + * Add funding details for GitHub sponsor button + [\#9982](https://github.com/vector-im/riot-web/pull/9982) + * Do not fail on server liveliness checks during startup + [\#9960](https://github.com/vector-im/riot-web/pull/9960) + * Hide guest functions on the welcome page if not logged in + [\#9957](https://github.com/vector-im/riot-web/pull/9957) + * Add Albanian and West Flemish languages + [\#9953](https://github.com/vector-im/riot-web/pull/9953) + * Update from Weblate + [\#9951](https://github.com/vector-im/riot-web/pull/9951) + * Add docs for defaultCountryCode + [\#9927](https://github.com/vector-im/riot-web/pull/9927) + * Use the user's pre-existing HS when config validation fails + [\#9892](https://github.com/vector-im/riot-web/pull/9892) + * Low bandwidth mode + [\#9909](https://github.com/vector-im/riot-web/pull/9909) + * Fix Twemoji loading on Windows dev machines + [\#9869](https://github.com/vector-im/riot-web/pull/9869) + * Base Docker image on nginx:alpine, not the larger nginx:latest + [\#9848](https://github.com/vector-im/riot-web/pull/9848) + * Validate homeserver configuration prior to loading the app + [\#9779](https://github.com/vector-im/riot-web/pull/9779) + * Show resolved homeserver configuration on the mobile guide + [\#9726](https://github.com/vector-im/riot-web/pull/9726) + * Flag the validated config as the default config + [\#9721](https://github.com/vector-im/riot-web/pull/9721) + * Clarify comment on is_url and hs_url handling + [\#9719](https://github.com/vector-im/riot-web/pull/9719) + * Validate default homeserver config before loading the app + [\#9496](https://github.com/vector-im/riot-web/pull/9496) + +Changes in [1.2.1](https://github.com/vector-im/riot-web/releases/tag/v1.2.1) (2019-05-31) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.2.0...v1.2.1) + + * Upgrade JS SDK to 2.0.0 and React SDK to 1.2.1 to fix key backup and native emoji height + +Changes in [1.2.0](https://github.com/vector-im/riot-web/releases/tag/v1.2.0) (2019-05-29) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.2.0-rc.1...v1.2.0) + + * Upgrade to JS SDK v1.2.0 and React SDK v1.2.0 to fix some regressions + +Changes in [1.2.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.2.0-rc.1) (2019-05-23) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.1.2...v1.2.0-rc.1) + + * Update from Weblate + [\#9802](https://github.com/vector-im/riot-web/pull/9802) + * remove emojione + [\#9766](https://github.com/vector-im/riot-web/pull/9766) + * Make Dockerfile work for develop and other branches + [\#9736](https://github.com/vector-im/riot-web/pull/9736) + * add description of new labs feature for message editing + [\#9728](https://github.com/vector-im/riot-web/pull/9728) + * Remove karma junit output + [\#9628](https://github.com/vector-im/riot-web/pull/9628) + * yarn upgrade + [\#9626](https://github.com/vector-im/riot-web/pull/9626) + * Respond quickly to buildkite pokes + [\#9617](https://github.com/vector-im/riot-web/pull/9617) + * Delay creating the `Favico` instance + [\#9616](https://github.com/vector-im/riot-web/pull/9616) + * Add reactions feature to config sample + [\#9598](https://github.com/vector-im/riot-web/pull/9598) + +Changes in [1.1.2](https://github.com/vector-im/riot-web/releases/tag/v1.1.2) (2019-05-15) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.1.1...v1.1.2) + + * react-sdk v1.1.2 to fix single sign-on and GIF autoplaying + +Changes in [1.1.1](https://github.com/vector-im/riot-web/releases/tag/v1.1.1) (2019-05-14) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.1.0...v1.1.1) + + * react-sdk v1.1.1 to fix regressions with registration + +Changes in [1.1.0](https://github.com/vector-im/riot-web/releases/tag/v1.1.0) (2019-05-07) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.1.0-rc.1...v1.1.0) + + * Add Dockerfile + [\#9632](https://github.com/vector-im/riot-web/pull/9632) + * Add Dockerfile (part 2) + [\#9426](https://github.com/vector-im/riot-web/pull/9426) + * Add new scalar staging url + [\#9601](https://github.com/vector-im/riot-web/pull/9601) + +Changes in [1.1.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.1.0-rc.1) (2019-04-30) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.8...v1.1.0-rc.1) + + * Convert redeploy.py to buildkite + [\#9577](https://github.com/vector-im/riot-web/pull/9577) + * Add package step to buildkite pipeline + [\#9568](https://github.com/vector-im/riot-web/pull/9568) + * Don't fail if there's no local config to remove + [\#9571](https://github.com/vector-im/riot-web/pull/9571) + * Change jenkins script to package script + [\#9567](https://github.com/vector-im/riot-web/pull/9567) + * Remove config.json from package dir + [\#9555](https://github.com/vector-im/riot-web/pull/9555) + * use the release version of olm 3.1.0 + [\#9550](https://github.com/vector-im/riot-web/pull/9550) + * Fix default for --include arg + [\#9517](https://github.com/vector-im/riot-web/pull/9517) + * update installation instructions with new repo + [\#9500](https://github.com/vector-im/riot-web/pull/9500) + * Use packages.matrix.org for Olm + [\#9498](https://github.com/vector-im/riot-web/pull/9498) + * Add separate platform electron build commands + [\#9412](https://github.com/vector-im/riot-web/pull/9412) + * Add support for custom profile directory + [\#9408](https://github.com/vector-im/riot-web/pull/9408) + * Improved mobile install guide + [\#9410](https://github.com/vector-im/riot-web/pull/9410) + * Remove vector-electron-desktop from README + [\#9404](https://github.com/vector-im/riot-web/pull/9404) + * Update from Weblate + [\#9398](https://github.com/vector-im/riot-web/pull/9398) + * bump olm version to 3.1.0-pre3 + [\#9392](https://github.com/vector-im/riot-web/pull/9392) + * Add expiration to mobile guide cookie + [\#9383](https://github.com/vector-im/riot-web/pull/9383) + * Fix autolaunch setting appearing toggled off + [\#9368](https://github.com/vector-im/riot-web/pull/9368) + * Don't try to save files the user didn't want to save + [\#9352](https://github.com/vector-im/riot-web/pull/9352) + * Setup crypto store for restore session tests + [\#9325](https://github.com/vector-im/riot-web/pull/9325) + * Update from Weblate + [\#9333](https://github.com/vector-im/riot-web/pull/9333) + * Add "Save image as..." button to context menu on images + [\#9326](https://github.com/vector-im/riot-web/pull/9326) + * Configure auth footer links through Riot config + [\#9297](https://github.com/vector-im/riot-web/pull/9297) + +Changes in [1.0.8](https://github.com/vector-im/riot-web/releases/tag/v1.0.8) (2019-04-16) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.7...v1.0.8) + + * No changes in this release. This is the same code as v1.0.7 from our new clean-room + packaging and signing infrastructure. + +Changes in [1.0.7](https://github.com/vector-im/riot-web/releases/tag/v1.0.7) (2019-04-08) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.6...v1.0.7) + + * Hotfix: bump js-sdk to 1.0.4, see https://github.com/matrix-org/matrix-js-sdk/releases/tag/v1.0.4 + +Changes in [1.0.6](https://github.com/vector-im/riot-web/releases/tag/v1.0.6) (2019-04-01) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.6-rc.1...v1.0.6) + + * Add "Save image as..." button to context menu on images + [\#9327](https://github.com/vector-im/riot-web/pull/9327) + +Changes in [1.0.6-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.0.6-rc.1) (2019-03-27) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.5...v1.0.6-rc.1) + + * Use `on_logged_in` action in tests + [\#9279](https://github.com/vector-im/riot-web/pull/9279) + * Convert away from `Promise.defer` + [\#9278](https://github.com/vector-im/riot-web/pull/9278) + * update react-sdk version in yarn lockfile + [\#9233](https://github.com/vector-im/riot-web/pull/9233) + * "Render simple counters in room header" details + [\#9154](https://github.com/vector-im/riot-web/pull/9154) + * Use medium agents for the more resource intensive builds + [\#9238](https://github.com/vector-im/riot-web/pull/9238) + * Add log grouping to buildkite + [\#9223](https://github.com/vector-im/riot-web/pull/9223) + * Switch to `git` protocol for CI dependencies + [\#9222](https://github.com/vector-im/riot-web/pull/9222) + * Support CI for matching branches on forks + [\#9212](https://github.com/vector-im/riot-web/pull/9212) + * Update from Weblate + [\#9199](https://github.com/vector-im/riot-web/pull/9199) + * Declare the officially supported browsers in the README + [\#9177](https://github.com/vector-im/riot-web/pull/9177) + * Document some desktop app things + [\#9011](https://github.com/vector-im/riot-web/pull/9011) + * Use Buildkite for CI + [\#9165](https://github.com/vector-im/riot-web/pull/9165) + * Update version number in issue templates + [\#9170](https://github.com/vector-im/riot-web/pull/9170) + * Remove node 8.x from the build matrix + [\#9159](https://github.com/vector-im/riot-web/pull/9159) + * Update Electron help menu link + [\#9157](https://github.com/vector-im/riot-web/pull/9157) + +Changes in [1.0.5](https://github.com/vector-im/riot-web/releases/tag/v1.0.5) (2019-03-21) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.4...v1.0.5) + + * Hotfix for [\#9205](https://github.com/vector-im/riot-web/issues/9205) disabling jump prevention for typing notifications, while we're reworking this functionally to enable it again soon. + +Changes in [1.0.4](https://github.com/vector-im/riot-web/releases/tag/v1.0.4) (2019-03-18) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.4-rc.1...v1.0.4) + + * No changes since rc.1 + +Changes in [1.0.4-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.0.4-rc.1) (2019-03-13) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.3...v1.0.4-rc.1) + + * Update from Weblate + [\#9152](https://github.com/vector-im/riot-web/pull/9152) + * Use modern Yarn version on Travis CI + [\#9151](https://github.com/vector-im/riot-web/pull/9151) + * Switch to `yarn` for dependency management + [\#9132](https://github.com/vector-im/riot-web/pull/9132) + * Update from Weblate + [\#9104](https://github.com/vector-im/riot-web/pull/9104) + * Don't copy the 32 bit linux deb + [\#9075](https://github.com/vector-im/riot-web/pull/9075) + * Change olm dependency to normal dep + [\#9068](https://github.com/vector-im/riot-web/pull/9068) + * Add modular.im hosting link to electron app config + [\#9047](https://github.com/vector-im/riot-web/pull/9047) + * Nudge karma to 3.1.2 + [\#8991](https://github.com/vector-im/riot-web/pull/8991) + * Add support for localConfig at $appData/config.json. + [\#8983](https://github.com/vector-im/riot-web/pull/8983) + +Changes in [1.0.3](https://github.com/vector-im/riot-web/releases/tag/v1.0.3) (2019-03-06) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.2...v1.0.3) + + * react-sdk 1.0.3 to fix ctrl+k shortcut and room list bugs + +Changes in [1.0.2](https://github.com/vector-im/riot-web/releases/tag/v1.0.2) (2019-03-06) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.2-rc.3...v1.0.2) + + * New react-sdk for minor hosting link fixes + +Changes in [1.0.2-rc.3](https://github.com/vector-im/riot-web/releases/tag/v1.0.2-rc.3) (2019-03-05) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.2-rc.2...v1.0.2-rc.3) + + * Add modular.im hosting link to electron app config + [\#9051](https://github.com/vector-im/riot-web/pull/9051) + +Changes in [1.0.2-rc.2](https://github.com/vector-im/riot-web/releases/tag/v1.0.2-rc.2) (2019-03-01) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.2-rc.1...v1.0.2-rc.2) + + * Update to react-sdk rc.3 + +Changes in [1.0.2-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.0.2-rc.1) (2019-03-01) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.1...v1.0.2-rc.1) + + * Set a require alias for the webapp directory + [\#9014](https://github.com/vector-im/riot-web/pull/9014) + * Update from Weblate. + [\#8973](https://github.com/vector-im/riot-web/pull/8973) + * set chrome path for travis CI explicitly + [\#8987](https://github.com/vector-im/riot-web/pull/8987) + * Updated install spinner + [\#8984](https://github.com/vector-im/riot-web/pull/8984) + * Allow disabling update mechanism + [\#8911](https://github.com/vector-im/riot-web/pull/8911) + * Allow configuration of whether closing window closes or minimizes to tray + [\#8908](https://github.com/vector-im/riot-web/pull/8908) + * Fix language file path for Jenkins + [\#8854](https://github.com/vector-im/riot-web/pull/8854) + * Document and recommend `default_server_name` + [\#8832](https://github.com/vector-im/riot-web/pull/8832) + * Cache busting for icons & language files + [\#8710](https://github.com/vector-im/riot-web/pull/8710) + * Remove redesign issue template + [\#8722](https://github.com/vector-im/riot-web/pull/8722) + * Make scripts/make-icons.sh work on linux + [\#8550](https://github.com/vector-im/riot-web/pull/8550) + +Changes in [1.0.1](https://github.com/vector-im/riot-web/releases/tag/v1.0.1) (2019-02-15) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.0...v1.0.1) + + +Changes in [1.0.0](https://github.com/vector-im/riot-web/releases/tag/v1.0.0) (2019-02-14) +========================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.0-rc.2...v1.0.0) + + * Add snipping lines to welcome page without guests + [\#8634](https://github.com/vector-im/riot-web/pull/8634) + * Add home page to fix loading tests + [\#8625](https://github.com/vector-im/riot-web/pull/8625) + +Changes in [1.0.0-rc.2](https://github.com/vector-im/riot-web/releases/tag/v1.0.0-rc.2) (2019-02-14) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.0-rc.1...v1.0.0-rc.2) + + * Update from Weblate. + [\#8615](https://github.com/vector-im/riot-web/pull/8615) + * Replace favicon assets to ones with transparent backgrounds + [\#8600](https://github.com/vector-im/riot-web/pull/8600) + * Refreshed icons + [\#8594](https://github.com/vector-im/riot-web/pull/8594) + * Fix order of fetch-develop-deps / npm install + [\#8566](https://github.com/vector-im/riot-web/pull/8566) + * Revive building dark theme + [\#8540](https://github.com/vector-im/riot-web/pull/8540) + * Update from Weblate. + [\#8546](https://github.com/vector-im/riot-web/pull/8546) + * Repair app loading tests after welcome page + [\#8525](https://github.com/vector-im/riot-web/pull/8525) + * Support configurable welcome background and logo + [\#8528](https://github.com/vector-im/riot-web/pull/8528) + * Update from Weblate. + [\#8518](https://github.com/vector-im/riot-web/pull/8518) + * Document `embeddedPages` configuration + [\#8514](https://github.com/vector-im/riot-web/pull/8514) + * README.md : Syntax Coloring + [\#8502](https://github.com/vector-im/riot-web/pull/8502) + +Changes in [1.0.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.0.0-rc.1) (2019-02-08) +==================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.9...v1.0.0-rc.1) + + * Update from Weblate. + [\#8475](https://github.com/vector-im/riot-web/pull/8475) + * Add configurable welcome page + [\#8466](https://github.com/vector-im/riot-web/pull/8466) + * fix app tests after force enabling lazy loading + removing feature flag + [\#8464](https://github.com/vector-im/riot-web/pull/8464) + * Allow Electron to zoom with CommandOrControl+= + [\#8381](https://github.com/vector-im/riot-web/pull/8381) + * Hide sign in / create account for logged in users + [\#8368](https://github.com/vector-im/riot-web/pull/8368) + * Fix home page link target + [\#8365](https://github.com/vector-im/riot-web/pull/8365) + * Add auth background image and update Riot logo + [\#8364](https://github.com/vector-im/riot-web/pull/8364) + * New homepage + [\#8363](https://github.com/vector-im/riot-web/pull/8363) + * Spell homeserver correctly + [\#8358](https://github.com/vector-im/riot-web/pull/8358) + * Merge redesign into develop + [\#8321](https://github.com/vector-im/riot-web/pull/8321) + * Disable room directory test because it doesn't work + [\#8318](https://github.com/vector-im/riot-web/pull/8318) + * Tweak auth overflow on Windows and Linux + [\#8307](https://github.com/vector-im/riot-web/pull/8307) + * Clean up Custom Server Help dialog + [\#8296](https://github.com/vector-im/riot-web/pull/8296) + * Cache-bust olm.wasm + [\#8283](https://github.com/vector-im/riot-web/pull/8283) + * Completely disable other themes for now (#8277) + [\#8280](https://github.com/vector-im/riot-web/pull/8280) + * Remove support for team servers + [\#8271](https://github.com/vector-im/riot-web/pull/8271) + * Add target="_blank" to footer links + [\#8248](https://github.com/vector-im/riot-web/pull/8248) + * Fix device names on desktop + [\#8241](https://github.com/vector-im/riot-web/pull/8241) + * Fix literal </> in notifications + [\#8238](https://github.com/vector-im/riot-web/pull/8238) + * Fix registration nextLink on desktop + [\#8239](https://github.com/vector-im/riot-web/pull/8239) + * Add returns to fetch-develop-deps + [\#8233](https://github.com/vector-im/riot-web/pull/8233) + * Update electron builder + [\#8231](https://github.com/vector-im/riot-web/pull/8231) + * Try fetching more branches for PRs + [\#8225](https://github.com/vector-im/riot-web/pull/8225) + * Use content hashing for font and image URLs + [\#8159](https://github.com/vector-im/riot-web/pull/8159) + * Develop->Experimental + [\#8156](https://github.com/vector-im/riot-web/pull/8156) + * Update from Weblate. + [\#8150](https://github.com/vector-im/riot-web/pull/8150) + * Correct the copying of e-mail addresses in the electron app + [\#8124](https://github.com/vector-im/riot-web/pull/8124) + * Start documenting keyboard shortcuts + [\#7165](https://github.com/vector-im/riot-web/pull/7165) + * Update issue templates + [\#7948](https://github.com/vector-im/riot-web/pull/7948) + * Added new colour var to all themes + [\#7927](https://github.com/vector-im/riot-web/pull/7927) + * Redesign: apply changes from dharma theme to status theme + [\#7541](https://github.com/vector-im/riot-web/pull/7541) + * Redesign: ignore setting and always show dharma theme for now + [\#7540](https://github.com/vector-im/riot-web/pull/7540) + +Changes in [0.17.9](https://github.com/vector-im/riot-web/releases/tag/v0.17.9) (2019-01-22) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.9-rc.1...v0.17.9) + + * Bugfix in react-sdk for setting DM rooms + +Changes in [0.17.9-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.17.9-rc.1) (2019-01-17) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.8...v0.17.9-rc.1) + + * Merge develop into experimental + [\#8003](https://github.com/vector-im/riot-web/pull/8003) + * Electron: Load app from custom protocol + [\#7943](https://github.com/vector-im/riot-web/pull/7943) + * Fix the IndexedDB worker + [\#7920](https://github.com/vector-im/riot-web/pull/7920) + * Make clear that the Debian package is for desktop + [\#7919](https://github.com/vector-im/riot-web/pull/7919) + * Run the Desktop app in a sandbox + [\#7907](https://github.com/vector-im/riot-web/pull/7907) + * Update to new electron single instance API + [\#7908](https://github.com/vector-im/riot-web/pull/7908) + * Update the tests to match https://github.com/matrix-org/matrix-react- + sdk/pull/2340 + [\#7834](https://github.com/vector-im/riot-web/pull/7834) + +Changes in [0.17.8](https://github.com/vector-im/riot-web/releases/tag/v0.17.8) (2018-12-10) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.8-rc.1...v0.17.8) + + * No changes since rc.1 + +Changes in [0.17.8-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.17.8-rc.1) (2018-12-06) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.7...v0.17.8-rc.1) + + * Update from Weblate. + [\#7784](https://github.com/vector-im/riot-web/pull/7784) + * Add a function to send a rageshake from the console + [\#7755](https://github.com/vector-im/riot-web/pull/7755) + * Re-apply "Run lint on travis builds and use modern node versions" + [\#7738](https://github.com/vector-im/riot-web/pull/7738) + * Revert "Run lint on travis builds and use modern node versions" + [\#7737](https://github.com/vector-im/riot-web/pull/7737) + * Run lint on travis builds and use modern node versions + [\#7490](https://github.com/vector-im/riot-web/pull/7490) + * Fix missing js-sdk logging + [\#7736](https://github.com/vector-im/riot-web/pull/7736) + * Add $accent-color-50pct as a CSS variable to the Status theme + [\#7710](https://github.com/vector-im/riot-web/pull/7710) + +Changes in [0.17.7](https://github.com/vector-im/riot-web/releases/tag/v0.17.7) (2018-11-22) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.6...v0.17.7) + + * Warning when crypto DB is too new to use. + * Fix missing entries from js-sdk in rageshake logs + +Changes in [0.17.6](https://github.com/vector-im/riot-web/releases/tag/v0.17.6) (2018-11-19) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.6-rc.2...v0.17.6) + + * No changes since rc.2 + +Changes in [0.17.6-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.17.6-rc.2) (2018-11-15) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.6-rc.1...v0.17.6-rc.2) + + * Update to js-sdk 0.14 and react-sdk rc.2. rc.1 was broken as it was built against + js-sdk 0.13 which does not use the new Olm 3.0 API. + +Changes in [0.17.6-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.17.6-rc.1) (2018-11-15) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.5...v0.17.6-rc.1) + + * Update from Weblate. + [\#7708](https://github.com/vector-im/riot-web/pull/7708) + * Add Japanese (#7599) + [\#7673](https://github.com/vector-im/riot-web/pull/7673) + * Allow Webpack dev server to listen to all interfaces + [\#7674](https://github.com/vector-im/riot-web/pull/7674) + * Remove the request-only stuff we don't need anymore + [\#7637](https://github.com/vector-im/riot-web/pull/7637) + * Correct the author of the electron app + [\#7615](https://github.com/vector-im/riot-web/pull/7615) + * Mock fs, tls, and net to support request in the browser + [\#7552](https://github.com/vector-im/riot-web/pull/7552) + * Update chokidar to transitively get newer fsevents + [\#7598](https://github.com/vector-im/riot-web/pull/7598) + * Support WebAssembly version of Olm + [\#7385](https://github.com/vector-im/riot-web/pull/7385) + +Changes in [0.17.5](https://github.com/vector-im/riot-web/releases/tag/v0.17.5) (2018-11-13) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.4...v0.17.5) + + * Include change that was supposed to be included in orevious version + +Changes in [0.17.4](https://github.com/vector-im/riot-web/releases/tag/v0.17.4) (2018-11-13) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.3...v0.17.4) + + * Add banner with login/register links for users who aren't logged in + +Changes in [0.17.3](https://github.com/vector-im/riot-web/releases/tag/v0.17.3) (2018-10-29) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.3-rc.1...v0.17.3) + + * Fix for autocompleting text emoji from react-sdk v0.14.2 + +Changes in [0.17.3-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.17.3-rc.1) (2018-10-24) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.2...v0.17.3-rc.1) + + * Update from Weblate. + [\#7549](https://github.com/vector-im/riot-web/pull/7549) + * Don't set tags on notifications + [\#7518](https://github.com/vector-im/riot-web/pull/7518) + * Update to latest electron builder + [\#7498](https://github.com/vector-im/riot-web/pull/7498) + * Fix Tinter.setTheme to not fire using Firefox + [\#6831](https://github.com/vector-im/riot-web/pull/6831) + +Changes in [0.17.2](https://github.com/vector-im/riot-web/releases/tag/v0.17.2) (2018-10-19) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.1...v0.17.2) + + * Update react-sdk version to "Apply the user's tint once the MatrixClientPeg is moderately ready" + * Electron: don't set tags on notifications + [\#7518](https://github.com/vector-im/riot-web/pull/7518) + +Changes in [0.17.1](https://github.com/vector-im/riot-web/releases/tag/v0.17.1) (2018-10-18) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.0...v0.17.1) + + * Stop electron crashing + [\#7517](https://github.com/vector-im/riot-web/pull/7517) + +Changes in [0.17.0](https://github.com/vector-im/riot-web/releases/tag/v0.17.0) (2018-10-16) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.0-rc.1...v0.17.0) + + * Phased rollout of lazyloading + [\#7503](https://github.com/vector-im/riot-web/pull/7503) + * Update to latest electron builder + [\#7501](https://github.com/vector-im/riot-web/pull/7501) + +Changes in [0.17.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.17.0-rc.1) (2018-10-11) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.5...v0.17.0-rc.1) + + * Revert "also commit the lock file when bumping version as it is now + committed to the repo" + [\#7483](https://github.com/vector-im/riot-web/pull/7483) + * Update from Weblate. + [\#7478](https://github.com/vector-im/riot-web/pull/7478) + * Fix riot-web Promise.defer warnings (#7409) + [\#7444](https://github.com/vector-im/riot-web/pull/7444) + * Use HTTPS cloning for riot-web too + [\#7459](https://github.com/vector-im/riot-web/pull/7459) + * Disable webpack-dev-server auto reload + [\#7463](https://github.com/vector-im/riot-web/pull/7463) + * Silence bluebird warnings + [\#7462](https://github.com/vector-im/riot-web/pull/7462) + * Fix reskindex on matrix-react-side not being called if using build script + [\#7443](https://github.com/vector-im/riot-web/pull/7443) + * Fix double-closed tags + [\#7454](https://github.com/vector-im/riot-web/pull/7454) + * Document how to turn off Piwik and bug reports (#6738) + [\#7435](https://github.com/vector-im/riot-web/pull/7435) + * also commit the lock file when bumping version as it is now committed to the + repo + [\#7429](https://github.com/vector-im/riot-web/pull/7429) + * Update a bunch of deps + [\#7393](https://github.com/vector-im/riot-web/pull/7393) + * Don't show mobile guide if deep linking + [\#7415](https://github.com/vector-im/riot-web/pull/7415) + * Don't show custom server bit on matrix.org + [\#7408](https://github.com/vector-im/riot-web/pull/7408) + * Update Webpack to version 4 + [\#6620](https://github.com/vector-im/riot-web/pull/6620) + * Webpack4 + [\#7387](https://github.com/vector-im/riot-web/pull/7387) + +Changes in [0.16.6](https://github.com/vector-im/riot-web/releases/tag/v0.16.6) (2018-10-08) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.5...v0.16.6) + + * Update to matrix-react-sdk v0.13.6 + +Changes in [0.16.5](https://github.com/vector-im/riot-web/releases/tag/v0.16.5) (2018-10-01) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.5-rc.1...v0.16.5) + + * Don't show mobile guide if deep linking + [\#7415](https://github.com/vector-im/riot-web/pull/7415) + * Don't show custom server bit on matrix.org + [\#7408](https://github.com/vector-im/riot-web/pull/7408) + +Changes in [0.16.5-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.16.5-rc.1) (2018-09-27) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.4...v0.16.5-rc.1) + + * Update from Weblate. + [\#7395](https://github.com/vector-im/riot-web/pull/7395) + * Reduce the number of terminals required to build riot-web to 1 + [\#7355](https://github.com/vector-im/riot-web/pull/7355) + * Small typo in release notes v0.16.3 + [\#7274](https://github.com/vector-im/riot-web/pull/7274) + +Changes in [0.16.4](https://github.com/vector-im/riot-web/releases/tag/v0.16.4) (2018-09-10) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.4-rc.1...v0.16.4) + + * No changes since rc.1 + +Changes in [0.16.4-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.16.4-rc.1) (2018-09-07) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.3...v0.16.4-rc.1) + + * Update from Weblate. + [\#7296](https://github.com/vector-im/riot-web/pull/7296) + * Fix config not loading & mobileguide script being loaded in riot + [\#7288](https://github.com/vector-im/riot-web/pull/7288) + * Instructions for installing mobile apps + [\#7272](https://github.com/vector-im/riot-web/pull/7272) + * Tidy up index.js + [\#7265](https://github.com/vector-im/riot-web/pull/7265) + +Changes in [0.16.3](https://github.com/vector-im/riot-web/releases/tag/v0.16.3) (2018-09-03) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.3-rc.2...v0.16.3) + + * SECURITY FIX: This version (and release candidates) pull in an upstream security + fix from electron to fix CVE-2018-15685. Electron users should update as soon as + possible. Riot-web run outside of Electron is unaffected. + +Changes in [0.16.3-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.16.3-rc.2) (2018-08-31) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.3-rc.1...v0.16.3-rc.2) + + * Update js-sdk to fix an exception causing the room list to become unresponsive. + +Changes in [0.16.3-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.16.3-rc.1) (2018-08-30) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.2...v0.16.3-rc.1) + + * Update from Weblate. + [\#7245](https://github.com/vector-im/riot-web/pull/7245) + * Revert "Remove package-lock.json for now" + [\#7128](https://github.com/vector-im/riot-web/pull/7128) + * Remove package-lock.json for now + [\#7115](https://github.com/vector-im/riot-web/pull/7115) + +Changes in [0.16.2](https://github.com/vector-im/riot-web/releases/tag/v0.16.2) (2018-08-23) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.1...v0.16.2) + + * Support new server notices format + +Changes in [0.16.1](https://github.com/vector-im/riot-web/releases/tag/v0.16.1) (2018-08-20) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.1-rc.1...v0.16.1) + + * No changes since rc.1 + +Changes in [0.16.1-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.16.1-rc.1) (2018-08-16) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.0...v0.16.1-rc.1) + + * Update from Weblate. + [\#7178](https://github.com/vector-im/riot-web/pull/7178) + * CSS for MAU warning bar + [\#7152](https://github.com/vector-im/riot-web/pull/7152) + * CSS for user limit error + [\#7139](https://github.com/vector-im/riot-web/pull/7139) + * Unpin sanitize-html + [\#7132](https://github.com/vector-im/riot-web/pull/7132) + * Pin sanitize-html to 0.18.2 + [\#7129](https://github.com/vector-im/riot-web/pull/7129) + +Changes in [0.16.0](https://github.com/vector-im/riot-web/releases/tag/v0.16.0) (2018-07-30) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.0-rc.2...v0.16.0) + +* Update react-sdk version for bugfixes with Jitsi widgets and the new composer + +Changes in [0.16.0-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.16.0-rc.2) (2018-07-24) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.0-rc.1...v0.16.0-rc.2) + + * Update to react-sdk rc.2 to remove Jitsi conference calling from labs + +Changes in [0.16.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.16.0-rc.1) (2018-07-24) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.7...v0.16.0-rc.1) + + * Update from Weblate. + [\#7082](https://github.com/vector-im/riot-web/pull/7082) + * Sample config for jitsi integration URL + [\#7055](https://github.com/vector-im/riot-web/pull/7055) + +Changes in [0.15.7](https://github.com/vector-im/riot-web/releases/tag/v0.15.7) (2018-07-09) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.7-rc.2...v0.15.7) + + * No changes since rc.2 + +Changes in [0.15.7-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.15.7-rc.2) (2018-07-06) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.7-rc.1...v0.15.7-rc.2) + + * Update react-sdk and js-sdk + +Changes in [0.15.7-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.15.7-rc.1) (2018-07-04) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.6...v0.15.7-rc.1) + + * add override for colour of room tile text within memberinfo (unreadable) + [\#6889](https://github.com/vector-im/riot-web/pull/6889) + +Changes in [0.15.6](https://github.com/vector-im/riot-web/releases/tag/v0.15.6) (2018-06-29) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.6-rc.2...v0.15.6) + + * Pull in bug fixes from react-sdk + +Changes in [0.15.6-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.15.6-rc.2) (2018-06-22) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.6-rc.1...v0.15.6-rc.2) + + * Update to react-sdk rc.2 for fix to slash commands + +Changes in [0.15.6-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.15.6-rc.1) (2018-06-21) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.5...v0.15.6-rc.1) + + * Update from Weblate. + [\#6915](https://github.com/vector-im/riot-web/pull/6915) + * [electron] Fix desktop app --hidden flag + [\#6805](https://github.com/vector-im/riot-web/pull/6805) + +Changes in [0.15.5](https://github.com/vector-im/riot-web/releases/tag/v0.15.5) (2018-06-12) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.5-rc.1...v0.15.5) + + * No changes since rc.1 + +Changes in [0.15.5-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.15.5-rc.1) (2018-06-06) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.4...v0.15.5-rc.1) + + * Update from Weblate. + [\#6846](https://github.com/vector-im/riot-web/pull/6846) + +Changes in [0.15.4](https://github.com/vector-im/riot-web/releases/tag/v0.15.4) (2018-05-25) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.4-rc.1...v0.15.4) + + * Add cookie policy link to desktop app config + +Changes in [0.15.4-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.15.4-rc.1) (2018-05-24) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.3...v0.15.4-rc.1) + + * Update from Weblate. + [\#6792](https://github.com/vector-im/riot-web/pull/6792) + * Hide URL options for e2e blob: URL images + [\#6765](https://github.com/vector-im/riot-web/pull/6765) + * Fix right click menu in electron + [\#6763](https://github.com/vector-im/riot-web/pull/6763) + * Update to electron 2.0.1 + [\#6764](https://github.com/vector-im/riot-web/pull/6764) + * Add instructions for changing translated strings + [\#6528](https://github.com/vector-im/riot-web/pull/6528) + +Changes in [0.15.3](https://github.com/vector-im/riot-web/releases/tag/v0.15.3) (2018-05-18) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.2...v0.15.3) + + * Fix right click menu in electron + [\#6763](https://github.com/vector-im/riot-web/pull/6763) + * Update to electron 2.0.1 + [\#6764](https://github.com/vector-im/riot-web/pull/6764) + * Hide URL options for e2e blob: URL images + [\#6765](https://github.com/vector-im/riot-web/pull/6765) + +Changes in [0.15.2](https://github.com/vector-im/riot-web/releases/tag/v0.15.2) (2018-05-17) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.1...v0.15.2) + + * Update to matrix-react-sdk v0.12.5 to fix image size jumps + +Changes in [0.15.1](https://github.com/vector-im/riot-web/releases/tag/v0.15.1) (2018-05-16) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.0...v0.15.1) + + * Fix package-lock.json which was causing errors building the Electron app + * Update Electron version + +Changes in [0.15.0](https://github.com/vector-im/riot-web/releases/tag/v0.15.0) (2018-05-16) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.0-rc.6...v0.15.0) + + * No changes since rc.6 + +Changes in [0.15.0-rc.6](https://github.com/vector-im/riot-web/releases/tag/v0.15.0-rc.6) (2018-05-15) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.0-rc.5...v0.15.0-rc.6) + + * Update to matrix-react-sdk 0.12.4-rc.6 + +Changes in [0.15.0-rc.5](https://github.com/vector-im/riot-web/releases/tag/v0.15.0-rc.5) (2018-05-15) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.0-rc.4...v0.15.0-rc.5) + + * Update to matrix-react-sdk 0.12.4-rc.5 + +Changes in [0.15.0-rc.4](https://github.com/vector-im/riot-web/releases/tag/v0.15.0-rc.4) (2018-05-14) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.0-rc.3...v0.15.0-rc.4) + + * Update from Weblate. + [\#6726](https://github.com/vector-im/riot-web/pull/6726) + * Update to matrix-react-sdk 0.12.4-rc.4 + +Changes in [0.15.0-rc.3](https://github.com/vector-im/riot-web/releases/tag/v0.15.0-rc.3) (2018-05-11) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.0-rc.2...v0.15.0-rc.3) + + * Update to matrix-react-sdk 0.12.4-rc.3 + +Changes in [0.15.0-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.15.0-rc.2) (2018-05-09) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.0-rc.1...v0.15.0-rc.2) + + * Update to matrix-react-sdk 0.12.4-rc.2 + +Changes in [0.15.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.15.0-rc.1) (2018-05-09) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.3-rc.1...v0.15.0-rc.1) + + * No changes since 0.14.3-rc.1 + +Changes in [0.14.3-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.14.3-rc.1) (2018-05-09) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.2...v0.14.3-rc.1) + + * Update from Weblate. + [\#6688](https://github.com/vector-im/riot-web/pull/6688) + * Don't show presence on matrix.org + [\#6638](https://github.com/vector-im/riot-web/pull/6638) + * Enforce loading babel-polyfill first + [\#6625](https://github.com/vector-im/riot-web/pull/6625) + * Update hoek + [\#6624](https://github.com/vector-im/riot-web/pull/6624) + * Fix args in the release wrapper script + [\#6614](https://github.com/vector-im/riot-web/pull/6614) + +Changes in [0.14.2](https://github.com/vector-im/riot-web/releases/tag/v0.14.2) (2018-04-30) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.2-rc.3...v0.14.2) + + * No changes since rc.3 + +Changes in [0.14.2-rc.3](https://github.com/vector-im/riot-web/releases/tag/v0.14.2-rc.3) (2018-04-26) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.2-rc.2...v0.14.2-rc.3) + + * Fix CSS dependency versions to be the same as those in react-sdk to fix + left panel header positions. + +Changes in [0.14.2-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.14.2-rc.2) (2018-04-26) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.2-rc.1...v0.14.2-rc.2) + + * Fix Download of attachments in e2e encrypted rooms in Firefox + +Changes in [0.14.2-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.14.2-rc.1) (2018-04-25) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.1...v0.14.2-rc.1) + + * Update from Weblate. + [\#6602](https://github.com/vector-im/riot-web/pull/6602) + * Add readme bit on cross-origin renderer + [\#6600](https://github.com/vector-im/riot-web/pull/6600) + * Update from Weblate. + [\#6573](https://github.com/vector-im/riot-web/pull/6573) + * Copy media from react-sdk + [\#6588](https://github.com/vector-im/riot-web/pull/6588) + * Fix favicon + [\#6580](https://github.com/vector-im/riot-web/pull/6580) + * Update from Weblate. + [\#6569](https://github.com/vector-im/riot-web/pull/6569) + * move everything not explicitly riot (or status) branded into matrix-react- + sdk + [\#6500](https://github.com/vector-im/riot-web/pull/6500) + * Remove presence management + [\#5881](https://github.com/vector-im/riot-web/pull/5881) + * change vector-web repo to riot-web in changelog + [\#6480](https://github.com/vector-im/riot-web/pull/6480) + * Update from Weblate. + [\#6473](https://github.com/vector-im/riot-web/pull/6473) + * Bump source-map-loader version to avoid bug /w inline base64 maps + [\#6472](https://github.com/vector-im/riot-web/pull/6472) + * Add CSS for new group admin radio button + [\#6415](https://github.com/vector-im/riot-web/pull/6415) + * Rxl881/sticker picker styling + [\#6447](https://github.com/vector-im/riot-web/pull/6447) + * Stickerpacks + [\#6242](https://github.com/vector-im/riot-web/pull/6242) + * Force gemini on HomePage + [\#6368](https://github.com/vector-im/riot-web/pull/6368) + * Rename the Riot-Web Translations Room + [\#6348](https://github.com/vector-im/riot-web/pull/6348) + * Add disable-presence-by-hs option to sample config + [\#6350](https://github.com/vector-im/riot-web/pull/6350) + * Reword the BugReportDialog.js as per @lampholder + [\#6354](https://github.com/vector-im/riot-web/pull/6354) + +Changes in [0.14.1](https://github.com/vector-im/riot-web/releases/tag/v0.14.1) (2018-04-12) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.0...v0.14.1) + + * Remove presence management feature from labs + * Fix an issue where Riot would fail to load at all if certain + extensions were installed on Firefox + * Fix an issue where e2e cryptography could be disabled due to + a migration error. + +Changes in [0.14.0](https://github.com/vector-im/riot-web/releases/tag/v0.14.0) (2018-04-11) +============================================================================================ +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.0-rc.6...v0.14.0) + + * Cosmetic changes for group UI + +Changes in [0.14.0-rc.6](https://github.com/vector-im/riot-web/releases/tag/v0.14.0-rc.6) (2018-04-09) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.0-rc.5...v0.14.0-rc.6) + + * Bump react-sdk to [rc.6](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v0.12.0-rc.6) + +Changes in [0.14.0-rc.5](https://github.com/vector-im/riot-web/releases/tag/v0.14.0-rc.5) (2018-04-09) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.0-rc.4...v0.14.0-rc.5) + +* Add CSS for new control to set group join policy + +Changes in [0.14.0-rc.4](https://github.com/vector-im/riot-web/releases/tag/v0.14.0-rc.4) (2018-03-22) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.0-rc.3...v0.14.0-rc.4) + + * Fix tagging rooms as direct messages + +Changes in [0.14.0-rc.3](https://github.com/vector-im/riot-web/releases/tag/v0.14.0-rc.3) (2018-03-20) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.0-rc.2...v0.14.0-rc.3) + + * Fix a bug where the badge on a room tile would not update + when a room was read from a different device. + +Changes in [0.14.0-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.14.0-rc.2) (2018-03-19) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.0-rc.1...v0.14.0-rc.2) + + * Take TagPanel out of labs + [\#6347](https://github.com/vector-im/riot-web/pull/6347) + * Add languages (czech, galician and serbian) + [\#6343](https://github.com/vector-im/riot-web/pull/6343) + +Changes in [0.14.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.14.0-rc.1) (2018-03-19) +====================================================================================================== +[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.13.5...v0.14.0-rc.1) + + * Force update RoomSubList after reading a room + [\#6342](https://github.com/vector-im/riot-web/pull/6342) + * Ensure entire LeftPanel is faded when settings open + [\#6340](https://github.com/vector-im/riot-web/pull/6340) + * Update from Weblate. + [\#6330](https://github.com/vector-im/riot-web/pull/6330) + * Implement a simple shouldComponentUpdate for DNDRoomTile + [\#6313](https://github.com/vector-im/riot-web/pull/6313) + * Remove og:image with status.im URL + [\#6317](https://github.com/vector-im/riot-web/pull/6317) + * Add change delay warning in GroupView settings + [\#6316](https://github.com/vector-im/riot-web/pull/6316) + * Correctly position mx_TagPanel_clearButton + [\#6289](https://github.com/vector-im/riot-web/pull/6289) + * Fix gap between avatar and border + [\#6290](https://github.com/vector-im/riot-web/pull/6290) + * Fix bug where cannot send group invite on GroupMemberInfo phase + [\#6303](https://github.com/vector-im/riot-web/pull/6303) + * Fix themeing bug with Firefox where "disabled" ignored + [\#6301](https://github.com/vector-im/riot-web/pull/6301) + * Changes for E2E "fudge-button" + [\#6288](https://github.com/vector-im/riot-web/pull/6288) + * Make sure mx_TagPanel_tagTileContainer occupies full height + [\#6286](https://github.com/vector-im/riot-web/pull/6286) + * Add transparent CSS class for RoomTile + [\#6281](https://github.com/vector-im/riot-web/pull/6281) + * Fix crash; fs event received /w langauge file empty + [\#6273](https://github.com/vector-im/riot-web/pull/6273) + * Add setting to disable TagPanel + [\#6269](https://github.com/vector-im/riot-web/pull/6269) + * CSS for my groups microcopy + [\#6257](https://github.com/vector-im/riot-web/pull/6257) + * Add Bulgarian to the list of languages + [\#6246](https://github.com/vector-im/riot-web/pull/6246) + * Make media dropdown wider + [\#6245](https://github.com/vector-im/riot-web/pull/6245) + * Make dropdowns with long options degrade more gracefully + [\#6244](https://github.com/vector-im/riot-web/pull/6244) + * Fix un-tinted "View Community" icon in TagTile context menu + [\#6223](https://github.com/vector-im/riot-web/pull/6223) + * Fix RoomDropTarget and emptySubListTip to have containers + [\#6160](https://github.com/vector-im/riot-web/pull/6160) + * Fix syntax error of wrong use of self-closing HTML tag + [\#6154](https://github.com/vector-im/riot-web/pull/6154) + * Use translucent black for RoomSubList bg to fix tinting + [\#6227](https://github.com/vector-im/riot-web/pull/6227) + * CSS for changing "R" to "X" for clearing group filter + [\#6216](https://github.com/vector-im/riot-web/pull/6216) + * CSS for new global TagPanel filter + [\#6187](https://github.com/vector-im/riot-web/pull/6187) + * Separate the middle panel from the room list + [\#6194](https://github.com/vector-im/riot-web/pull/6194) + * Only use DNDRoomTile for editable sub lists + [\#6176](https://github.com/vector-im/riot-web/pull/6176) + * Adjust CSS to prevent scrollbars on message panel spinner + [\#6131](https://github.com/vector-im/riot-web/pull/6131) + * Implement riot-web side of dragging GroupTile avatars to TagPanel + [\#6143](https://github.com/vector-im/riot-web/pull/6143) + * Fix LeftPanel size being incorrect when TagPanel disabled + [\#6140](https://github.com/vector-im/riot-web/pull/6140) + * Fix TagPanel from collapsing to < 60px when LP collapsed + [\#6134](https://github.com/vector-im/riot-web/pull/6134) + * Temporary hack to constrain LLP container size. + [\#6138](https://github.com/vector-im/riot-web/pull/6138) + * Fix typo + [\#6137](https://github.com/vector-im/riot-web/pull/6137) + * Add context menu to TagPanel + [\#6127](https://github.com/vector-im/riot-web/pull/6127) + * Make room tagging flux-y + [\#6096](https://github.com/vector-im/riot-web/pull/6096) + * Move groups button to TagPanel + [\#6130](https://github.com/vector-im/riot-web/pull/6130) + * Fix long group name pushing settings cog into void + [\#6106](https://github.com/vector-im/riot-web/pull/6106) + * Fix horizontal scrollbar under certain circumstances + [\#6103](https://github.com/vector-im/riot-web/pull/6103) + * Split MImageBody into MFileBody to match JS Classes. + [\#6067](https://github.com/vector-im/riot-web/pull/6067) + * Add Catalan + [\#6040](https://github.com/vector-im/riot-web/pull/6040) + * Update from Weblate. + [\#5777](https://github.com/vector-im/riot-web/pull/5777) + * make FilteredList controlled, such that it can externally persist filter + [\#5718](https://github.com/vector-im/riot-web/pull/5718) + * Linear Rich Quoting + [\#6017](https://github.com/vector-im/riot-web/pull/6017) + * Highlight ViewSource and Devtools ViewSource + [\#5995](https://github.com/vector-im/riot-web/pull/5995) + * default url, not domain + [\#6022](https://github.com/vector-im/riot-web/pull/6022) + * T3chguy/num members tooltip + [\#5929](https://github.com/vector-im/riot-web/pull/5929) + * Swap RoomList to react-beautiful-dnd + [\#6008](https://github.com/vector-im/riot-web/pull/6008) + * CSS required as part of moving TagPanel from react-dnd to react-beautiful- + dnd + [\#5992](https://github.com/vector-im/riot-web/pull/5992) + * fix&refactor DateSeparator and MessageTimestamp + [\#5984](https://github.com/vector-im/riot-web/pull/5984) + * Iterative fixes on Rich Quoting + [\#5978](https://github.com/vector-im/riot-web/pull/5978) + * move piwik whitelists to conf and add piwik config.json info to readme + [\#5653](https://github.com/vector-im/riot-web/pull/5653) + * Implement Rich Quoting/Replies + [\#5804](https://github.com/vector-im/riot-web/pull/5804) + * Change author + [\#5950](https://github.com/vector-im/riot-web/pull/5950) + * Revert "Add a   after timestamp" + [\#5944](https://github.com/vector-im/riot-web/pull/5944) + * Add a   after timestamp + [\#3046](https://github.com/vector-im/riot-web/pull/3046) + * Corrected language name + [\#5938](https://github.com/vector-im/riot-web/pull/5938) + * Hide Options button from copy to clipboard + [\#2892](https://github.com/vector-im/riot-web/pull/2892) + * Fix for `If riot is narrow enough, such that 'Send a message (unecrypted)' + wraps to a second line, the timeline doesn't fit the window.` + [\#5900](https://github.com/vector-im/riot-web/pull/5900) + * Screenshot UI + [\#5849](https://github.com/vector-im/riot-web/pull/5849) + * add missing config.json entry such that scalar-staging widgets work + [\#5855](https://github.com/vector-im/riot-web/pull/5855) + * add dark theme styling to devtools input box + [\#5610](https://github.com/vector-im/riot-web/pull/5610) + * Fixes #1953 by adding oivoodoo as author + [\#5851](https://github.com/vector-im/riot-web/pull/5851) + * Instructions on security issues + [\#5824](https://github.com/vector-im/riot-web/pull/5824) + * Move DND wrapper to top level component + [\#5790](https://github.com/vector-im/riot-web/pull/5790) + * Widget title bar max / min visual cues. + [\#5786](https://github.com/vector-im/riot-web/pull/5786) + * Implement renumeration of ordered tags upon collision + [\#5759](https://github.com/vector-im/riot-web/pull/5759) + * Update imports for accessing KeyCode + [\#5751](https://github.com/vector-im/riot-web/pull/5751) + * Set html lang attribute from language setting + [\#5685](https://github.com/vector-im/riot-web/pull/5685) + * CSS for new TagPanel + [\#5723](https://github.com/vector-im/riot-web/pull/5723) + * getGroupStore no longer needs a matrix client + [\#5707](https://github.com/vector-im/riot-web/pull/5707) + * CSS required for moving group publication toggles to UserSettings + [\#5702](https://github.com/vector-im/riot-web/pull/5702) + * Make sure the SettingsStore is ready to load the theme before loading it + [\#5630](https://github.com/vector-im/riot-web/pull/5630) + * Add some aria-labels to RightPanel + [\#5661](https://github.com/vector-im/riot-web/pull/5661) + * Use badge count format for member count in RightPanel + [\#5657](https://github.com/vector-im/riot-web/pull/5657) + * Exclude the default language on page load + [\#5640](https://github.com/vector-im/riot-web/pull/5640) + * Use SettingsStore to get the default theme + [\#5615](https://github.com/vector-im/riot-web/pull/5615) + * Refactor translations + [\#5613](https://github.com/vector-im/riot-web/pull/5613) + * TintableSvgButton styling + [\#5605](https://github.com/vector-im/riot-web/pull/5605) + * Granular settings + [\#5468](https://github.com/vector-im/riot-web/pull/5468) + * CSS/components for custom presence controls + [\#5286](https://github.com/vector-im/riot-web/pull/5286) + * Set widget tile background colour + [\#5574](https://github.com/vector-im/riot-web/pull/5574) + * Widget styling tweaks + [\#5573](https://github.com/vector-im/riot-web/pull/5573) + * Center mixed content warnings in panel. + [\#5567](https://github.com/vector-im/riot-web/pull/5567) + * Status.im theme + [\#5578](https://github.com/vector-im/riot-web/pull/5578) + Changes in [0.13.5](https://github.com/vector-im/riot-web/releases/tag/v0.13.5) (2018-02-09) ============================================================================================ [Full Changelog](https://github.com/vector-im/riot-web/compare/v0.13.4...v0.13.5) diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index 2a9bab5759..f084b474bd 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -1,4 +1,4 @@ Contributing code to Riot ========================= -Riot follows the same pattern as https://github.com/matrix-org/synapse/blob/master/CONTRIBUTING.rst. +Riot follows the same pattern as https://github.com/matrix-org/matrix-js-sdk/blob/master/CONTRIBUTING.rst. diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000..50760c351b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,31 @@ +# Builder +FROM node:10-alpine as builder + +# Support custom branches of the react-sdk and js-sdk. This also helps us build +# images of riot-web develop. +ARG USE_CUSTOM_SDKS=false +ARG REACT_SDK_REPO="https://github.com/matrix-org/matrix-react-sdk.git" +ARG REACT_SDK_BRANCH="master" +ARG JS_SDK_REPO="https://github.com/matrix-org/matrix-js-sdk.git" +ARG JS_SDK_BRANCH="master" + +RUN apk add --no-cache git dos2unix + +WORKDIR /src + +COPY . /src +RUN dos2unix /src/scripts/docker-link-repos.sh && sh /src/scripts/docker-link-repos.sh +RUN yarn --network-timeout=100000 install +RUN yarn build + +# Copy the config now so that we don't create another layer in the app image +RUN cp /src/config.sample.json /src/webapp/config.json + + +# App +FROM nginx:alpine + +COPY --from=builder /src/webapp /app + +RUN rm -rf /usr/share/nginx/html \ + && ln -s /app /usr/share/nginx/html diff --git a/README.md b/README.md index 708912cf7e..6cbaca3b48 100644 --- a/README.md +++ b/README.md @@ -1,40 +1,41 @@ Riot ==== -Riot (formerly known as Vector) is a Matrix web client built using the Matrix -React SDK (https://github.com/matrix-org/matrix-react-sdk). +Riot (formerly known as Vector) is a Matrix web client built using the [Matrix React SDK](https://github.com/matrix-org/matrix-react-sdk). + +Riot is officially supported on the web in modern versions of Chrome, Firefox, and Safari. Other browsers may work, however +official support is not provided. For accessing Riot on an Android or iOS device, check out [riot-android](https://github.com/vector-im/riot-android) +and [riot-ios](https://github.com/vector-im/riot-ios) - riot-web does not support mobile devices. Getting Started =============== -The easiest way to test Riot is to just use the hosted copy at -https://riot.im/app. The develop branch is continuously deployed by Jenkins at -https://riot.im/develop for those who like living dangerously. +The easiest way to test Riot is to just use the hosted copy at https://riot.im/app. +The `develop` branch is continuously deployed by Jenkins at https://riot.im/develop +for those who like living dangerously. To host your own copy of Riot, the quickest bet is to use a pre-built released version of Riot: 1. Download the latest version from https://github.com/vector-im/riot-web/releases 1. Untar the tarball on your web server -1. Move (or symlink) the riot-x.x.x directory to an appropriate name +1. Move (or symlink) the `riot-x.x.x` directory to an appropriate name 1. If desired, copy `config.sample.json` to `config.json` and edit it - as desired. See below for details. + as desired. See the [configuration docs](docs/config.md) for details. 1. Enter the URL into your browser and log into Riot! -Releases are signed by PGP, and can be checked against the public key -at https://riot.im/packages/keys/riot.asc +Releases are signed using gpg and the OpenPGP standard, and can be checked against the public key located +at https://packages.riot.im/riot-release-key.asc. -Note that Chrome does not allow microphone or webcam access for sites served -over http (except localhost), so for working VoIP you will need to serve Riot -over https. +Note that for the security of your chats will need to serve Riot +over HTTPS. Major browsers also do not allow you to use VoIP/video +chats over HTTP, as WebRTC is only usable over HTTPS. +There are some exceptions like when using localhost, which is +considered a [secure context](https://developer.mozilla.org/docs/Web/Security/Secure_Contexts) +and thus allowed. -### Installation Steps for Debian Stretch -1. Add the repository to your sources.list using either of the following two options: - - Directly to sources.list: `echo "deb https://riot.im/packages/debian/ stretch main" | sudo tee -a /etc/apt/sources.list` - - As a separate entry in sources.list.d: `echo "deb https://riot.im/packages/debian/ stretch main" | sudo tee /etc/apt/sources.list.d/riot.list` -2. Add the gpg signing key for the riot repository: `curl -s https://riot.im/packages/debian/repo-key.asc | sudo apt-key add -` -3. Update your package lists: `sudo apt-get update` -4. Install Riot: `sudo apt-get install riot-web` +To install Riot as a desktop application, see [Running as a desktop +app](#running-as-a-desktop-app) below. Important Security Note ======================= @@ -49,115 +50,81 @@ We have put some coarse mitigations into place to try to protect against this situation, but it's still not good practice to do it in the first place. See https://github.com/vector-im/riot-web/issues/1977 for more details. +The same applies for end-to-end encrypted content, but since this is decrypted +on the client, Riot needs a way to supply the decrypted content from a separate +origin to the one Riot is hosted on. This currently done with a 'cross origin +renderer' which is a small piece of javascript hosted on a different domain. +To avoid all Riot installs needing one of these to be set up, riot.im hosts +one on usercontent.riot.im which is used by default. +https://github.com/vector-im/riot-web/issues/6173 tracks progress on replacing +this with something better. + Building From Source ==================== -Riot is a modular webapp built with modern ES6 and requires a npm build system -to build. +Riot is a modular webapp built with modern ES6 and uses a Node.js build system. +Ensure you have the latest LTS version of Node.js installed. -1. Install or update `node.js` so that your `node` is at least v6.3.0 (and `npm` - is at least v3.10.x). +Using `yarn` instead of `npm` is recommended. Please see the Yarn [install +guide](https://yarnpkg.com/docs/install/) if you do not have it already. + +1. Install or update `node.js` so that your `node` is at least v10.x. +1. Install `yarn` if not present already. 1. Clone the repo: `git clone https://github.com/vector-im/riot-web.git`. 1. Switch to the riot-web directory: `cd riot-web`. -1. If you're using the `develop` branch, install the develop versions of the - dependencies, as the released ones will be too old: - ``` +1. Install the prerequisites: `yarn install`. +1. If you're using the `develop` branch then it is recommended to set up a proper + development environment ("Setting up a dev environment" below) however one can + install the develop versions of the dependencies instead: + ```bash scripts/fetch-develop.deps.sh ``` - Whenever you git pull on riot-web you will also probably need to force an update + Whenever you git pull on `riot-web` you will also probably need to force an update to these dependencies - the simplest way is to re-run the script, but you can also manually update and rebuild them: - ``` + ```bash cd matrix-js-sdk git pull - npm install # re-run to pull in any new dependencies - # Depending on your version of npm, npm run build may happen as part of - # the npm install above (https://docs.npmjs.com/misc/scripts#prepublish-and-prepare) - # If in doubt, run it anyway: - npm run build + yarn install # re-run to pull in any new dependencies cd ../matrix-react-sdk git pull - npm install - npm run build + yarn install ``` - However, we recommend setting up a proper development environment (see "Setting - up a dev environment" below) if you want to run your own copy of the - `develop` branch, as it makes it much easier to keep these dependencies - up-to-date. Or just use https://riot.im/develop - the continuous integration - release of the develop branch. - (Note that we don't reference the develop versions in git directly due to - https://github.com/npm/npm/issues/3055.) -1. Install the prerequisites: `npm install`. + Or just use https://riot.im/develop - the continuous integration release of the + develop branch. (Note that we don't reference the develop versions in git directly + due to https://github.com/npm/npm/issues/3055.) 1. Configure the app by copying `config.sample.json` to `config.json` and - modifying it (see below for details). -1. `npm run dist` to build a tarball to deploy. Untaring this file will give + modifying it. See the [configuration docs](docs/config.md) for details. +1. `yarn dist` to build a tarball to deploy. Untaring this file will give a version-specific directory containing all the files that need to go on your web server. -Note that `npm run dist` is not supported on Windows, so Windows users can run `npm -run build`, which will build all the necessary files into the `webapp` -directory. The version of Riot will not appear in Settings without -using the dist script. You can then mount the `webapp` directory on your -webserver to actually serve up the app, which is entirely static content. - -config.json -=========== - -You can configure the app by copying `config.sample.json` to -`config.json` and customising it: - -1. `default_hs_url` is the default home server url. -1. `default_is_url` is the default identity server url (this is the server used - for verifying third party identifiers like email addresses). If this is blank, - registering with an email address, adding an email address to your account, - or inviting users via email address will not work. Matrix identity servers are - very simple web services which map third party identifiers (currently only email - addresses) to matrix IDs: see http://matrix.org/docs/spec/identity_service/unstable.html - for more details. Currently the only public matrix identity servers are https://matrix.org - and https://vector.im. In future identity servers will be decentralised. -1. `integrations_ui_url`: URL to the web interface for the integrations server. The integrations - server is not Riot and normally not your Home Server either. The integration server settings - may be left blank to disable integrations. -1. `integrations_rest_url`: URL to the REST interface for the integrations server. -1. `roomDirectory`: config for the public room directory. This section is optional. -1. `roomDirectory.servers`: List of other Home Servers' directories to include in the drop - down list. Optional. -1. `update_base_url` (electron app only): HTTPS URL to a web server to download - updates from. This should be the path to the directory containing `macos` - and `win32` (for update packages, not installer packages). -1. `cross_origin_renderer_url`: URL to a static HTML page hosting code to help display - encrypted file attachments. This MUST be hosted on a completely separate domain to - anything else since it is used to isolate the privileges of file attachments to this - domain. Default: `https://usercontent.riot.im/v1.html`. This needs to contain v1.html from - https://github.com/matrix-org/usercontent/blob/master/v1.html -1. `piwik`: an object containing the following properties: - 1. `url`: The URL of the Piwik instance to use for collecting Analytics - 1. `whitelistedHSUrls`: a list of HS URLs to not redact from the Analytics - 1. `whitelistedISUrls`: a list of IS URLs to not redact from the Analytics - 1. `siteId`: The Piwik Site ID to use when sending Analytics to the Piwik server configured above +Note that `yarn dist` is not supported on Windows, so Windows users can run `yarn build`, +which will build all the necessary files into the `webapp` directory. The version of Riot +will not appear in Settings without using the dist script. You can then mount the +`webapp` directory on your webserver to actually serve up the app, which is entirely static content. Running as a Desktop app ======================== -Riot can also be run as a desktop app, wrapped in electron. You can download a -pre-built version from https://riot.im/desktop.html or, if you prefer, -build it yourself. Requires Electron >=1.6.0 +Riot can also be run as a desktop app, wrapped in Electron. You can download a +pre-built version from https://riot.im/download/desktop/ or, if you prefer, +build it yourself. -To run as a desktop app: +To build it yourself, follow the instructions below. 1. Follow the instructions in 'Building From Source' above, but run - `npm run build` instead of `npm run dist` (since we don't need the tarball). -2. Install electron and run it: + `yarn build` instead of `yarn dist` (since we don't need the tarball). +2. Install Electron and run it: - ``` - npm install electron - npm run electron + ```bash + yarn electron ``` -To build packages, use electron-builder. This is configured to output: - * dmg + zip for macOS - * exe + nupkg for Windows - * deb for Linux +To build packages, use `electron-builder`. This is configured to output: + * `dmg` + `zip` for macOS + * `exe` + `nupkg` for Windows + * `deb` for Linux But this can be customised by editing the `build` section of package.json as per https://github.com/electron-userland/electron-builder/wiki/Options @@ -165,59 +132,99 @@ See https://github.com/electron-userland/electron-builder/wiki/Multi-Platform-Bu for dependencies required for building packages for various platforms. The only platform that can build packages for all three platforms is macOS: -``` -brew install wine --without-x11 +```bash brew install mono -brew install gnu-tar -npm install -npm run build:electron +yarn install +yarn build:electron ``` -For other packages, use electron-builder manually. For example, to build a package -for 64 bit Linux: +For other packages, use `electron-builder` manually. For example, to build a +package for 64 bit Linux: 1. Follow the instructions in 'Building From Source' above 2. `node_modules/.bin/build -l --x64` -All electron packages go into `electron/dist/` +All Electron packages go into `electron_app/dist/` -Many thanks to @aviraldg for the initial work on the electron integration. +Many thanks to @aviraldg for the initial work on the Electron integration. Other options for running as a desktop app: - * https://github.com/krisak/vector-electron-desktop * @asdf:matrix.org points out that you can use nativefier and it just works(tm) -``` -sudo npm install nativefier -g +```bash +yarn global add nativefier nativefier https://riot.im/app/ ``` +The [configuration docs](docs/config.md#desktop-app-configuration) show how to +override the desktop app's default settings if desired. + +Running from Docker +=================== + +The Docker image can be used to serve riot-web as a web server. The easiest way to use +it is to use the prebuilt image: +```bash +docker run -p 80:80 vectorim/riot-web +``` + +To supply your own custom `config.json`, map a volume to `/app/config.json`. For example, +if your custom config was located at `/etc/riot-web/config.json` then your Docker command +would be: +```bash +docker run -p 80:80 -v /etc/riot-web/config.json:/app/config.json vectorim/riot-web +``` + +To build the image yourself: +```bash +git clone https://github.com/vector-im/riot-web.git riot-web +cd riot-web +git checkout master +docker build -t vectorim/riot-web . +``` + +If you're building a custom branch, or want to use the develop branch, check out the appropriate +riot-web branch and then run: +```bash +docker build -t vectorim/riot-web:develop \ + --build-arg USE_CUSTOM_SDKS=true \ + --build-arg REACT_SDK_REPO="https://github.com/matrix-org/matrix-react-sdk.git" \ + --build-arg REACT_SDK_BRANCH="develop" \ + --build-arg JS_SDK_REPO="https://github.com/matrix-org/matrix-js-sdk.git" \ + --build-arg JS_SDK_BRANCH="develop" \ + . +``` + +config.json +=========== + +Riot supports a variety of settings to configure default servers, behaviour, themes, etc. +See the [configuration docs](docs/config.md) for more details. + +Labs Features +============= + +Some features of Riot may be enabled by flags in the `Labs` section of the settings. +Some of these features are described in [labs.md](https://github.com/vector-im/riot-web/blob/develop/docs/labs.md). + Development =========== -Before attempting to develop on Riot you **must** read the developer guide -for `matrix-react-sdk` at https://github.com/matrix-org/matrix-react-sdk, which +Before attempting to develop on Riot you **must** read the [developer guide +for `matrix-react-sdk`](https://github.com/matrix-org/matrix-react-sdk), which also defines the design, architecture and style for Riot too. +You should also familiarise yourself with the ["Here be Dragons" guide +](https://docs.google.com/document/d/12jYzvkidrp1h7liEuLIe6BMdU0NUjndUYI971O06ooM) +to the tame & not-so-tame dragons (gotchas) which exist in the codebase. + The idea of Riot is to be a relatively lightweight "skin" of customisations on top of the underlying `matrix-react-sdk`. `matrix-react-sdk` provides both the higher and lower level React components useful for building Matrix communication apps using React. -After creating a new component you must run `npm run reskindex` to regenerate -the `component-index.js` for the app (used in future for skinning) - -**However, as of July 2016 this layering abstraction is broken due to rapid -development on Riot forcing `matrix-react-sdk` to move fast at the expense of -maintaining a clear abstraction between the two.** Hacking on Riot inevitably -means hacking equally on `matrix-react-sdk`, and there are bits of -`matrix-react-sdk` behaviour incorrectly residing in the `riot-web` project -(e.g. matrix-react-sdk specific CSS), and a bunch of Riot specific behaviour -in the `matrix-react-sdk` (grep for `vector` / `riot`). This separation problem will be -solved asap once development on Riot (and thus matrix-react-sdk) has -stabilised. Until then, the two projects should basically be considered as a -single unit. In particular, `matrix-react-sdk` issues are currently filed -against `riot-web` in github. +After creating a new component you must run `yarn reskindex` to regenerate +the `component-index.js` for the app (used in future for skinning). Please note that Riot is intended to run correctly without access to the public internet. So please don't depend on resources (JS libs, CSS, images, fonts) @@ -234,55 +241,67 @@ having to manually rebuild each time. First clone and build `matrix-js-sdk`: -1. `git clone git@github.com:matrix-org/matrix-js-sdk.git` -1. `pushd matrix-js-sdk` -1. `git checkout develop` -1. `npm install` -1. `npm install source-map-loader` # because webpack is made of fail (https://github.com/webpack/webpack/issues/1472) -1. `popd` +``` bash +git clone https://github.com/matrix-org/matrix-js-sdk.git +pushd matrix-js-sdk +git checkout develop +yarn link +yarn install +popd +``` Then similarly with `matrix-react-sdk`: -1. `git clone git@github.com:matrix-org/matrix-react-sdk.git` -1. `pushd matrix-react-sdk` -1. `git checkout develop` -1. `npm install` -1. `rm -r node_modules/matrix-js-sdk; ln -s ../../matrix-js-sdk node_modules/` -1. `popd` +```bash +git clone https://github.com/matrix-org/matrix-react-sdk.git +pushd matrix-react-sdk +git checkout develop +yarn link +yarn link matrix-js-sdk +yarn install +popd +``` Finally, build and start Riot itself: -1. `git clone git@github.com:vector-im/riot-web.git` -1. `cd riot-web` -1. `git checkout develop` -1. `npm install` -1. `rm -r node_modules/matrix-js-sdk; ln -s ../../matrix-js-sdk node_modules/` -1. `rm -r node_modules/matrix-react-sdk; ln -s ../../matrix-react-sdk node_modules/` -1. `npm start` -1. Wait a few seconds for the initial build to finish; you should see something like: - ``` - Hash: b0af76309dd56d7275c8 - Version: webpack 1.12.14 - Time: 14533ms - Asset Size Chunks Chunk Names - bundle.js 4.2 MB 0 [emitted] main - bundle.css 91.5 kB 0 [emitted] main - bundle.js.map 5.29 MB 0 [emitted] main - bundle.css.map 116 kB 0 [emitted] main - + 1013 hidden modules - ``` +```bash +git clone https://github.com/vector-im/riot-web.git +cd riot-web +git checkout develop +yarn link matrix-js-sdk +yarn link matrix-react-sdk +yarn install +yarn start +``` + +Wait a few seconds for the initial build to finish; you should see something like: +``` +Hash: b0af76309dd56d7275c8 +Version: webpack 1.12.14 +Time: 14533ms + Asset Size Chunks Chunk Names + bundle.js 4.2 MB 0 [emitted] main + bundle.css 91.5 kB 0 [emitted] main + bundle.js.map 5.29 MB 0 [emitted] main +bundle.css.map 116 kB 0 [emitted] main + + 1013 hidden modules +``` Remember, the command will not terminate since it runs the web server and rebuilds source files when they change. This development server also disables caching, so do NOT use it in production. -1. Open http://127.0.0.1:8080/ in your browser to see your newly built Riot. -When you make changes to `matrix-react-sdk` or `matrix-js-sdk`, you will need -to run `npm run build` in the relevant directory. You can do this automatically -by instead running `npm start` in the directory, to start a development builder -which will watch for changes to the files and rebuild automatically. +Configure the app by copying `config.sample.json` to `config.json` and +modifying it. See the [configuration docs](docs/config.md) for details. + +Open http://127.0.0.1:8080/ in your browser to see your newly built Riot. + +___ + +When you make changes to `matrix-react-sdk` or `matrix-js-sdk` they should be +automatically picked up by webpack and built. If you add or remove any components from the Riot skin, you will need to rebuild -the skin's index by running, `npm run reskindex`. +the skin's index by running, `yarn reskindex`. If any of these steps error with, `file table overflow`, you are probably on a mac which has a very low limit on max open files. Run `ulimit -Sn 1024` and try again. @@ -298,12 +317,12 @@ are designed to run in a browser instance under the control of * Make sure you have Chrome installed (a recent version, like 59) * Make sure you have `matrix-js-sdk` and `matrix-react-sdk` installed and built, as above -* `npm run test` +* `yarn test` The above will run the tests under Chrome in a `headless` mode. You can also tell karma to run the tests in a loop (every time the source -changes), in an instance of Chrome on your desktop, with `npm run +changes), in an instance of Chrome on your desktop, with `yarn test-multi`. This also gives you the option of running the tests in 'debug' mode, which is useful for stepping through the tests in the developer tools. diff --git a/config.sample.json b/config.sample.json index 6e83cec2d1..ade112e873 100644 --- a/config.sample.json +++ b/config.sample.json @@ -1,6 +1,13 @@ { - "default_hs_url": "https://matrix.org", - "default_is_url": "https://vector.im", + "default_server_config": { + "m.homeserver": { + "base_url": "https://matrix.org", + "server_name": "matrix.org" + }, + "m.identity_server": { + "base_url": "https://vector.im" + } + }, "disable_custom_urls": false, "disable_guests": false, "disable_login_language_selector": false, @@ -8,13 +15,24 @@ "brand": "Riot", "integrations_ui_url": "https://scalar.vector.im/", "integrations_rest_url": "https://scalar.vector.im/api", + "integrations_widgets_urls": [ + "https://scalar.vector.im/_matrix/integrations/v1", + "https://scalar.vector.im/api", + "https://scalar-staging.vector.im/_matrix/integrations/v1", + "https://scalar-staging.vector.im/api", + "https://scalar-staging.riot.im/scalar/api" + ], + "integrations_jitsi_widget_url": "https://scalar.vector.im/api/widgets/jitsi.html", "bug_report_endpoint_url": "https://riot.im/bugreports/submit", + "defaultCountryCode": "GB", + "showLabsSettings": false, "features": { - "feature_groups": "labs", - "feature_pinning": "labs" + "feature_pinning": "labs", + "feature_custom_status": "labs", + "feature_custom_tags": "labs", + "feature_state_counters": "labs" }, "default_federate": true, - "welcomePageUrl": "home.html", "default_theme": "light", "roomDirectory": { "servers": [ @@ -27,5 +45,11 @@ "whitelistedHSUrls": ["https://matrix.org"], "whitelistedISUrls": ["https://vector.im", "https://matrix.org"], "siteId": 1 + }, + "enable_presence_by_hs_url": { + "https://matrix.org": false + }, + "settingDefaults": { + "breadcrumbs": true } } diff --git a/docs/config.md b/docs/config.md new file mode 100644 index 0000000000..821c414997 --- /dev/null +++ b/docs/config.md @@ -0,0 +1,119 @@ +Configuration +============= + +You can configure the app by copying `config.sample.json` to +`config.json` and customising it: + +For a good example, see https://riot.im/develop/config.json. + +1. `default_server_config` sets the default homeserver and identity server URL for + Riot to use. The object is the same as returned by [https:///.well-known/matrix/client](https://matrix.org/docs/spec/client_server/latest.html#get-well-known-matrix-client), + with added support for a `server_name` under the `m.homeserver` section to display + a custom homeserver name. Alternatively, the config can contain a `default_server_name` + instead which is where Riot will go to get that same object, although this option is + deprecated - see the `.well-known` link above for more information on using this option. + Note that the `default_server_name` is used to get a complete server configuration + whereas the `server_name` in the `default_server_config` is for display purposes only. + * *Note*: The URLs can also be individually specified as `default_hs_url` and + `default_is_url`, however these are deprecated. They are maintained for backwards + compatibility with older configurations. `default_is_url` is respected only + if `default_hs_url` is used. + * The identity server is used for verifying third party identifiers like emails + and phone numbers. It is not used to store your password or account information. + If not provided, the identity server defaults to vector.im. Currently the only + two public identity servers are https://matrix.org and https://vector.im, however + in future identity servers will be decentralised. In the future it will be possible + to disable the identity server functionality. + * Riot will fail to load if a mix of `default_server_config`, `default_server_name`, or + `default_hs_url` is specified. When multiple sources are specified, it is unclear + which should take priority and therefore the application cannot continue. +1. `features`: Lookup of optional features that may be `enable`d, `disable`d, or exposed to the user + in the `labs` section of settings. The available optional experimental features vary from + release to release. The available features are described in [labs.md](labs.md). +1. `showLabsSettings`: Shows the "labs" tab of user settings even when no `features` are enabled + or present. Useful for getting at settings which may be otherwise hidden. +1. `brand`: String to pass to your homeserver when configuring email notifications, to let the + homeserver know what email template to use when talking to you. +1. `branding`: Configures various branding and logo details, such as: + 1. `welcomeBackgroundUrl`: An image to use as a wallpaper outside the app + during authentication flows + 1. `authHeaderLogoUrl`: An logo image that is shown in the header during + authentication flows + 1. `authFooterLinks`: a list of links to show in the authentication page footer: + `[{"text": "Link text", "url": "https://link.target"}, {"text": "Other link", ...}]` +1. `integrations_ui_url`: URL to the web interface for the integrations server. The integrations + server is not Riot and normally not your homeserver either. The integration server settings + may be left blank to disable integrations. +1. `integrations_rest_url`: URL to the REST interface for the integrations server. +1. `integrations_widgets_urls`: list of URLs to the REST interface for the widget integrations server. +1. `bug_report_endpoint_url`: endpoint to send bug reports to (must be running a + https://github.com/matrix-org/rageshake server). Bug reports are sent when a user clicks + "Send Logs" within the application. Bug reports can be disabled by leaving the + `bug_report_endpoint_url` out of your config file. +1. `roomDirectory`: config for the public room directory. This section is optional. +1. `roomDirectory.servers`: List of other homeservers' directories to include in the drop + down list. Optional. +1. `default_theme`: name of theme to use by default (e.g. 'light') +1. `update_base_url` (electron app only): HTTPS URL to a web server to download + updates from. This should be the path to the directory containing `macos` + and `win32` (for update packages, not installer packages). +1. `cross_origin_renderer_url`: URL to a static HTML page hosting code to help display + encrypted file attachments. This MUST be hosted on a completely separate domain to + anything else since it is used to isolate the privileges of file attachments to this + domain. Default: `https://usercontent.riot.im/v1.html`. This needs to contain v1.html from + https://github.com/matrix-org/usercontent/blob/master/v1.html +1. `piwik`: Analytics can be disabled by setting `piwik: false` or by leaving the piwik config + option out of your config file. If you want to enable analytics, set `piwik` to be an object + containing the following properties: + 1. `url`: The URL of the Piwik instance to use for collecting analytics + 1. `whitelistedHSUrls`: a list of HS URLs to not redact from the analytics + 1. `whitelistedISUrls`: a list of IS URLs to not redact from the analytics + 1. `siteId`: The Piwik Site ID to use when sending analytics to the Piwik server configured above +1. `welcomeUserId`: the user ID of a bot to invite whenever users register that can give them a tour +1. `embeddedPages`: Configures the pages displayed in portions of Riot that + embed static files, such as: + 1. `welcomeUrl`: Initial content shown on the outside of the app when not + logged in. Defaults to `welcome.html` supplied with Riot. + 1. `homeUrl`: Content shown on the inside of the app when a specific room is + not selected. By default, no home page is configured. If one is set, a + button to access it will be shown in the top left menu. +1. `defaultCountryCode`: The ISO 3166 alpha2 country code to use when showing + country selectors, like the phone number input on the registration page. + Defaults to `GB` if the given code is unknown or not provided. +1. `settingDefaults`: Defaults for settings that support the `config` level, + as an object mapping setting name to value (note that the "theme" setting + is special cased to the `default_theme` in the config file). +1. `disable_custom_urls`: disallow the user to change the + default homeserver when signing up or logging in. +1. `permalinkPrefix`: Used to change the URL that Riot generates permalinks with. + By default, this is "https://matrix.to" to generate matrix.to (spec) permalinks. + Set this to your Riot instance URL if you run an unfederated server (eg: + "https://riot.example.org"). + +Note that `index.html` also has an og:image meta tag that is set to an image +hosted on riot.im. This is the image used if links to your copy of Riot +appear in some websites like Facebook, and indeed Riot itself. This has to be +static in the HTML and an absolute URL (and HTTP rather than HTTPS), so it's +not possible for this to be an option in config.json. If you'd like to change +it, you can build Riot, but run +`RIOT_OG_IMAGE_URL="http://example.com/logo.png" yarn build`. +Alternatively, you can edit the `og:image` meta tag in `index.html` directly +each time you download a new version of Riot. + +Desktop app configuration +========================= + +To run multiple instances of the desktop app for different accounts, you can +launch the executable with the `--profile` argument followed by a unique +identifier, e.g `riot-web --profile Work` for it to run a separate profile and +not interfere with the default one. + +Alternatively, a custom location for the profile data can be specified using the +`--profile-dir` flag followed by the desired path. + ++ `%APPDATA%\$NAME\config.json` on Windows ++ `$XDG_CONFIG_HOME\$NAME\config.json` or `~/.config/$NAME/config.json` on Linux ++ `~Library/Application Support/$NAME/config.json` on macOS + +In the paths above, `$NAME` is typically `Riot`, unless you use `--profile +$PROFILE` in which case it becomes `Riot-$PROFILE`. diff --git a/docs/labs.md b/docs/labs.md new file mode 100644 index 0000000000..ae2c72a488 --- /dev/null +++ b/docs/labs.md @@ -0,0 +1,51 @@ +# Labs features + +Some notes on the features you can enable by going to `Settings->Labs`. Not exhaustive, chat in +[#riot-web:matrix.org](https://matrix.to/#/#riot-web:matrix.org) for more information. + +**Be warned! Labs features are not finalised, they may be fragile, they may change, they may be +dropped. Ask in the room if you are unclear about any details here.** + +## Message pinning (`feature_pinning`) + +Allows you to pin messages in the room. To pin a message, use the 3 dots to the right of the message +and select "Pin". + +## Custom status (`feature_custom_status`) + +An experimental approach for supporting custom status messages across DMs. To set a status, click on +your avatar next to the message composer. + +## Custom tags (`feature_custom_tags`) + +An experimental approach for dealing with custom tags. Custom tags will appear in the bottom portion +of the community filter panel. + +Setting custom tags is not supported by Riot. + +## Render simple counters in room header (`feature_state_counters`) + +Allows rendering of labelled counters above the message list. + +Once enabled, send a custom state event to a room to set values: + +1. In a room, type `/devtools` to bring up the devtools interface +2. Click "Send Custom Event" +3. Toggle from "Event" to "State Event" +4. Set the event type to: `re.jki.counter` and give it a unique key +5. Specify the content in the following format: + +``` +{ + "link": "", + "severity": "normal", + "title": "my counter", + "value": 0 +} +``` + +That's it. Now should see your new counter under the header. + +## Multiple integration managers (`feature_many_integration_managers`) + +Exposes a way to access all the integration managers known to Riot. This is an implementation of [MSC1957](https://github.com/matrix-org/matrix-doc/pull/1957). diff --git a/docs/memory-profiles-and-leaks.md b/docs/memory-profiles-and-leaks.md new file mode 100644 index 0000000000..3f8492d4d1 --- /dev/null +++ b/docs/memory-profiles-and-leaks.md @@ -0,0 +1,53 @@ +## Memory leaks + +Riot usually emits slow behaviour just before it is about to crash. Getting a +memory snapshot (below) just before that happens is ideal in figuring out what +is going wrong. + +Common symptoms are clicking on a room and it feels like the tab froze and scrolling +becoming jumpy/staggered. + +If you receive a white screen (electron) or the chrome crash page, it is likely +run out of memory and it is too late for a memory profile. Please do report when +this happens though so we can try and narrow down what might have gone wrong. + +## Memory profiles/snapshots + +When investigating memory leaks/problems it's usually important to compare snapshots +from different points in the Riot session lifecycle. Most importantly, a snapshot +to establish the baseline or "normal" memory usage is useful. Taking a snapshot +roughly 30-60 minutes after starting Riot is a good time to establish "normal" +memory usage for the app - anything after that is at risk of hiding the memory leak +and anything newer is still in the warmup stages of the app. + +**Memory profiles can contain sensitive information.** If you are submitting a memory +profile to us for debugging purposes, please pick the appropriate Riot developer and +send them over an encrypted private message. *Do not share your memory profile in +public channels or with people you do not trust.* + +### Taking a memory profile (Firefox) + +1. Press CTRL+SHIFT+I (I as in eye). +2. Click the Memory tab. +3. Press the camera icon in the top left of the pane. +4. Wait a bit (coffee is a good option). +5. When the save button appears on the left side of the panel, click it to save the + profile locally. +6. Compress the file (gzip or regular zip) to make the file smaller. +7. Send the compressed file to whoever asked for it (if you trust them). + +While the profile is in progress, the tab might be frozen or unresponsive. + +### Taking a memory profile (Chrome/Desktop) + +1. Press CTRL+SHIFT+I (I as in eye). +2. Click the Memory tab. +3. Select "Heap Snapshot" and the riot.im VM instance (not the indexeddb one). +4. Click "Take Snapshot". +5. Wait a bit (coffee is a good option). +6. When the save button appears on the left side of the panel, click it to save the + profile locally. +7. Compress the file (gzip or regular zip) to make the file smaller. +8. Send the compressed file to whoever asked for it (if you trust them). + +While the profile is in progress, the tab might be frozen or unresponsive. diff --git a/docs/shortcuts.md b/docs/shortcuts.md new file mode 100644 index 0000000000..83e494472d --- /dev/null +++ b/docs/shortcuts.md @@ -0,0 +1,13 @@ +# Keyboard Shortcuts + +The modifier is Ctrl on Windows & Linux and on Mac. + +- Ctrl/+m - toggle markdown +- Ctrl/+d - toggle mic mute +- Ctrl/+e - toggle video on/off +- Ctrl/+k - jump to named room +- / - navigate old messages to edit when the composer is in focus +- / - next/prev room when focus in room list +- Alt+/ - resend previous messages when the composer is in focus +- PageUp/PageDown - scroll timeline up/down +- Ctrl/+Home/End - jump to timeline start/end diff --git a/docs/translating-dev.md b/docs/translating-dev.md index 3209f1e400..ae5735e8af 100644 --- a/docs/translating-dev.md +++ b/docs/translating-dev.md @@ -3,6 +3,8 @@ ## Requirements - A working [Development Setup](../../#setting-up-a-dev-environment) + - Including up-to-date versions of matrix-react-sdk and matrix-js-sdk +- Latest LTS version of Node.js installed - Be able to understand English - Be able to understand the language you want to translate riot-web into @@ -30,9 +32,15 @@ function getColorName(hex) { 1. Check if the import ``import { _t } from 'matrix-react-sdk/lib/languageHandler';`` is present. If not add it to the other import statements. Also import `_td` if needed. 1. Add ``_t()`` to your string. (Don't forget curly braces when you assign an expression to JSX attributes in the render method). If the string is introduced at a point before the translation system has not yet been initialized, use `_td()` instead, and call `_t()` at the appropriate time. - 1. Run `npm run i18n` to update ``src/i18n/strings/en_EN.json`` (if it fails because it can't find the script, your dev environment predates the script, so reinstall/link react-sdk with `npm link ../matrix-react-sdk`). If it segfaults, you may be on Node 6, so try a newer version of node. + 1. Run `yarn i18n` to update ``src/i18n/strings/en_EN.json`` 1. If you added a string with a plural, you can add other English plural variants to ``src/i18n/strings/en_EN.json`` (remeber to edit the one in the same project as the source file containing your new translation). +## Editing existing strings + +1. Edit every occurrence of the string inside `_t()` and `_td()` in the JSX files. +1. Run `yarn i18n` to update `src/i18n/strings/en_EN.json`. (Be sure to run this in the same project as the JSX files you just edited.) +1. Run `yarn prunei18n` to remove the old string from `src/i18n/strings/*.json`. + ## Adding variables inside a string. 1. Extend your ``_t()`` call. Instead of ``_t(STRING)`` use ``_t(STRING, {})`` diff --git a/electron_app/build/icon.icns b/electron_app/build/icon.icns index d74e97e738..eba95ecf4f 100644 Binary files a/electron_app/build/icon.icns and b/electron_app/build/icon.icns differ diff --git a/electron_app/build/icon.ico b/electron_app/build/icon.ico index 8f8ff94eea..1305b7dd9a 100644 Binary files a/electron_app/build/icon.ico and b/electron_app/build/icon.ico differ diff --git a/electron_app/build/icons/128x128.png b/electron_app/build/icons/128x128.png index 54149b1ae2..9c52d6695b 100644 Binary files a/electron_app/build/icons/128x128.png and b/electron_app/build/icons/128x128.png differ diff --git a/electron_app/build/icons/16x16.png b/electron_app/build/icons/16x16.png index def4ec5eee..7435c1b5be 100644 Binary files a/electron_app/build/icons/16x16.png and b/electron_app/build/icons/16x16.png differ diff --git a/electron_app/build/icons/24x24.png b/electron_app/build/icons/24x24.png index 6fe144ea13..f484995e72 100644 Binary files a/electron_app/build/icons/24x24.png and b/electron_app/build/icons/24x24.png differ diff --git a/electron_app/build/icons/256x256.png b/electron_app/build/icons/256x256.png index 563e6d5edc..f52d02c88b 100644 Binary files a/electron_app/build/icons/256x256.png and b/electron_app/build/icons/256x256.png differ diff --git a/electron_app/build/icons/48x48.png b/electron_app/build/icons/48x48.png index 9cd225d402..fcbcbc495f 100644 Binary files a/electron_app/build/icons/48x48.png and b/electron_app/build/icons/48x48.png differ diff --git a/electron_app/build/icons/512x512.png b/electron_app/build/icons/512x512.png index 328a723c97..801e1504db 100644 Binary files a/electron_app/build/icons/512x512.png and b/electron_app/build/icons/512x512.png differ diff --git a/electron_app/build/icons/64x64.png b/electron_app/build/icons/64x64.png index 20a7a6cff3..4a86e56efe 100644 Binary files a/electron_app/build/icons/64x64.png and b/electron_app/build/icons/64x64.png differ diff --git a/electron_app/build/icons/96x96.png b/electron_app/build/icons/96x96.png index eb48c2c91e..8a998989fe 100644 Binary files a/electron_app/build/icons/96x96.png and b/electron_app/build/icons/96x96.png differ diff --git a/electron_app/build/install-spinner.gif b/electron_app/build/install-spinner.gif index c4f832c342..4a685294b6 100644 Binary files a/electron_app/build/install-spinner.gif and b/electron_app/build/install-spinner.gif differ diff --git a/electron_app/build/linux/after-install.tpl b/electron_app/build/linux/after-install.tpl new file mode 100644 index 0000000000..6ee772d219 --- /dev/null +++ b/electron_app/build/linux/after-install.tpl @@ -0,0 +1,14 @@ +#!/bin/bash + +# Link to the binary +ln -sf '/opt/${productFilename}/${executable}' '/usr/bin/${executable}' + +# SUID chrome-sandbox for Electron 5+ +# Remove this entire file (after-install.tpl) and remove the reference in +# package.json once this change has been upstreamed so we go back to the copy +# from upstream. +# https://github.com/electron-userland/electron-builder/pull/4163 +chmod 4755 '/opt/${productFilename}/chrome-sandbox' || true + +update-mime-database /usr/share/mime || true +update-desktop-database /usr/share/applications || true diff --git a/electron_app/img/riot.ico b/electron_app/img/riot.ico index 8f8ff94eea..1305b7dd9a 100644 Binary files a/electron_app/img/riot.ico and b/electron_app/img/riot.ico differ diff --git a/electron_app/img/riot.png b/electron_app/img/riot.png index 85e9f8ca74..f52d02c88b 100644 Binary files a/electron_app/img/riot.png and b/electron_app/img/riot.png differ diff --git a/electron_app/package.json b/electron_app/package.json index 04741bec65..30012970d7 100644 --- a/electron_app/package.json +++ b/electron_app/package.json @@ -2,11 +2,12 @@ "name": "riot-web", "productName": "Riot", "main": "src/electron-main.js", - "version": "0.13.5", + "version": "1.5.0", "description": "A feature-rich client for Matrix.org", - "author": "Vector Creations Ltd.", + "author": "New Vector Ltd.", "dependencies": { "auto-launch": "^5.0.1", + "electron-store": "^2.0.0", "electron-window-state": "^4.1.0", "minimist": "^1.2.0", "png-to-ico": "^1.0.2" diff --git a/electron_app/riot.im/New Vector Ltd.pem b/electron_app/riot.im/New_Vector_Ltd.pem similarity index 100% rename from electron_app/riot.im/New Vector Ltd.pem rename to electron_app/riot.im/New_Vector_Ltd.pem diff --git a/electron_app/riot.im/README b/electron_app/riot.im/README index 09c218740c..8e463c25ec 100644 --- a/electron_app/riot.im/README +++ b/electron_app/riot.im/README @@ -1,4 +1,6 @@ This directory contains the config file for the official riot.im distribution -of Riot Desktop. You probably do not want to build with this config unless -you're building the official riot.im distribution, or you'll find your builds -will replace themselves with the riot.im build. +of Riot Desktop. + +You probably do not want to build with this config unless you're building the +official riot.im distribution, or you'll find your builds will replace +themselves with the riot.im build. diff --git a/electron_app/riot.im/config.json b/electron_app/riot.im/config.json index 5b2fe37ba0..9887e025bc 100644 --- a/electron_app/riot.im/config.json +++ b/electron_app/riot.im/config.json @@ -1,14 +1,17 @@ { - "update_base_url": "https://riot.im/download/desktop/update/", - "default_hs_url": "https://matrix.org", - "default_is_url": "https://vector.im", + "update_base_url": "https://packages.riot.im/desktop/update/", + "default_server_name": "matrix.org", "brand": "Riot", "integrations_ui_url": "https://scalar.vector.im/", "integrations_rest_url": "https://scalar.vector.im/api", "integrations_widgets_urls": [ - "https://scalar-staging.riot.im/scalar/api", - "https://scalar.vector.im/api" + "https://scalar.vector.im/_matrix/integrations/v1", + "https://scalar.vector.im/api", + "https://scalar-staging.vector.im/_matrix/integrations/v1", + "https://scalar-staging.vector.im/api", + "https://scalar-staging.riot.im/scalar/api" ], + "hosting_signup_link": "https://modular.im/?utm_source=riot-web&utm_medium=web", "bug_report_endpoint_url": "https://riot.im/bugreports/submit", "welcomeUserId": "@riot-bot:matrix.org", "roomDirectory": { @@ -18,6 +21,19 @@ }, "piwik": { "url": "https://piwik.riot.im/", - "siteId": 1 + "siteId": 1, + "policyUrl": "https://matrix.org/docs/guides/riot_im_cookie_policy" + }, + "phasedRollOut": { + "feature_lazyloading": { + "offset": 1539684000000, + "period": 604800000 + } + }, + "features": { + "feature_lazyloading": "enable" + }, + "enable_presence_by_hs_url": { + "https://matrix.org": false } } diff --git a/electron_app/riot.im/env.sh b/electron_app/riot.im/env.sh new file mode 100644 index 0000000000..79cb6e4e83 --- /dev/null +++ b/electron_app/riot.im/env.sh @@ -0,0 +1 @@ +export OSSLSIGNCODE_SIGNARGS='-pkcs11module /Library/Frameworks/eToken.framework/Versions/Current/libeToken.dylib -pkcs11engine /usr/local/lib/engines/engine_pkcs11.so -certs electron_app/riot.im/New_Vector_Ltd.pem -key 0a3271cbc1ec0fd8afb37f6bbe0cd65ba08d3b4d -t http://timestamp.comodoca.com -h sha256 -verbose' diff --git a/electron_app/src/electron-main.js b/electron_app/src/electron-main.js index 4ffe211044..f061acd5f9 100644 --- a/electron_app/src/electron-main.js +++ b/electron_app/src/electron-main.js @@ -1,7 +1,8 @@ /* Copyright 2016 Aviral Dasgupta Copyright 2016 OpenMarket Ltd -Copyright 2017 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2018, 2019 New Vector Ltd +Copyright 2017, 2019 Michael Telatynski <7t3chguy@gmail.com> Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -22,19 +23,45 @@ limitations under the License. const checkSquirrelHooks = require('./squirrelhooks'); if (checkSquirrelHooks()) return; -const argv = require('minimist')(process.argv); -const electron = require('electron'); +const argv = require('minimist')(process.argv, { + alias: {help: "h"}, +}); + +const {app, ipcMain, powerSaveBlocker, BrowserWindow, Menu, autoUpdater, protocol} = require('electron'); const AutoLaunch = require('auto-launch'); +const path = require('path'); const tray = require('./tray'); const vectorMenu = require('./vectormenu'); const webContentsHandler = require('./webcontents-handler'); const updater = require('./updater'); +const { migrateFromOldOrigin } = require('./originMigrator'); const windowStateKeeper = require('electron-window-state'); +const Store = require('electron-store'); -if (argv.profile) { - electron.app.setPath('userData', `${electron.app.getPath('userData')}-${argv.profile}`); +if (argv["help"]) { + console.log("Options:"); + console.log(" --profile-dir {path}: Path to where to store the profile."); + console.log(" --profile {name}: Name of alternate profile to use, allows for running multiple accounts."); + console.log(" --devtools: Install and use react-devtools and react-perf."); + console.log(" --no-update: Disable automatic updating."); + console.log(" --hidden: Start the application hidden in the system tray."); + console.log(" --help: Displays this help message."); + console.log("And more such as --proxy, see:" + + "https://github.com/electron/electron/blob/master/docs/api/chrome-command-line-switches.md"); + app.exit(); +} + +// boolean flag set whilst we are doing one-time origin migration +// We only serve the origin migration script while we're actually +// migrating to mitigate any risk of it being used maliciously. +let migratingOrigin = false; + +if (argv['profile-dir']) { + app.setPath('userData', argv['profile-dir']); +} else if (argv['profile']) { + app.setPath('userData', `${app.getPath('userData')}-${argv['profile']}`); } let vectorConfig = {}; @@ -47,8 +74,19 @@ try { // Continue with the defaults (ie. an empty config) } +try { + // Load local config and use it to override values from the one baked with the build + const localConfig = require(path.join(app.getPath('userData'), 'config.json')); + vectorConfig = Object.assign(vectorConfig, localConfig); +} catch (e) { + // Could not load local config, this is expected in most cases. +} + +const store = new Store({ name: "electron-config" }); + let mainWindow = null; global.appQuitting = false; +global.minimizeToTray = store.get('minimizeToTray', true); // handle uncaught errors otherwise it displays @@ -62,14 +100,14 @@ process.on('uncaughtException', function(error) { }); let focusHandlerAttached = false; -electron.ipcMain.on('setBadgeCount', function(ev, count) { - electron.app.setBadgeCount(count); - if (count === 0) { +ipcMain.on('setBadgeCount', function(ev, count) { + app.setBadgeCount(count); + if (count === 0 && mainWindow) { mainWindow.flashFrame(false); } }); -electron.ipcMain.on('loudNotification', function() { +ipcMain.on('loudNotification', function() { if (process.platform === 'win32' && mainWindow && !mainWindow.isFocused() && !focusHandlerAttached) { mainWindow.flashFrame(true); mainWindow.once('focus', () => { @@ -81,39 +119,108 @@ electron.ipcMain.on('loudNotification', function() { }); let powerSaveBlockerId; -electron.ipcMain.on('app_onAction', function(ev, payload) { +ipcMain.on('app_onAction', function(ev, payload) { switch (payload.action) { case 'call_state': - if (powerSaveBlockerId && electron.powerSaveBlocker.isStarted(powerSaveBlockerId)) { + if (powerSaveBlockerId && powerSaveBlocker.isStarted(powerSaveBlockerId)) { if (payload.state === 'ended') { - electron.powerSaveBlocker.stop(powerSaveBlockerId); + powerSaveBlocker.stop(powerSaveBlockerId); } } else { if (payload.state === 'connected') { - powerSaveBlockerId = electron.powerSaveBlocker.start('prevent-display-sleep'); + powerSaveBlockerId = powerSaveBlocker.start('prevent-display-sleep'); } } break; } }); - -electron.app.commandLine.appendSwitch('--enable-usermedia-screen-capturing'); - -const shouldQuit = electron.app.makeSingleInstance((commandLine, workingDirectory) => { - // Someone tried to run a second instance, we should focus our window. - if (mainWindow) { - if (!mainWindow.isVisible()) mainWindow.show(); - if (mainWindow.isMinimized()) mainWindow.restore(); - mainWindow.focus(); - } +autoUpdater.on('update-downloaded', (ev, releaseNotes, releaseName, releaseDate, updateURL) => { + if (!mainWindow) return; + // forward to renderer + mainWindow.webContents.send('update-downloaded', { + releaseNotes, + releaseName, + releaseDate, + updateURL, + }); }); -if (shouldQuit) { - console.log('Other instance detected: exiting'); - electron.app.exit(); -} +ipcMain.on('ipcCall', async function(ev, payload) { + if (!mainWindow) return; + const args = payload.args || []; + let ret; + + switch (payload.name) { + case 'getUpdateFeedUrl': + ret = autoUpdater.getFeedURL(); + break; + case 'getAutoLaunchEnabled': + ret = await launcher.isEnabled(); + break; + case 'setAutoLaunchEnabled': + if (args[0]) { + launcher.enable(); + } else { + launcher.disable(); + } + break; + case 'getMinimizeToTrayEnabled': + ret = global.minimizeToTray; + break; + case 'setMinimizeToTrayEnabled': + store.set('minimizeToTray', global.minimizeToTray = args[0]); + break; + case 'getAutoHideMenuBarEnabled': + ret = global.mainWindow.isMenuBarAutoHide(); + break; + case 'setAutoHideMenuBarEnabled': + store.set('autoHideMenuBar', args[0]); + global.mainWindow.setAutoHideMenuBar(args[0]); + global.mainWindow.setMenuBarVisibility(!args[0]); + break; + case 'getAppVersion': + ret = app.getVersion(); + break; + case 'focusWindow': + if (mainWindow.isMinimized()) { + mainWindow.restore(); + } else if (!mainWindow.isVisible()) { + mainWindow.show(); + } else { + mainWindow.focus(); + } + break; + case 'origin_migrate': + migratingOrigin = true; + await migrateFromOldOrigin(); + migratingOrigin = false; + break; + case 'getConfig': + ret = vectorConfig; + break; + default: + mainWindow.webContents.send('ipcReply', { + id: payload.id, + error: "Unknown IPC Call: " + payload.name, + }); + return; + } + + mainWindow.webContents.send('ipcReply', { + id: payload.id, + reply: ret, + }); +}); + +app.commandLine.appendSwitch('--enable-usermedia-screen-capturing'); + +const gotLock = app.requestSingleInstanceLock(); +if (!gotLock) { + console.log('Other instance detected: exiting'); + app.exit(); +} const launcher = new AutoLaunch({ name: vectorConfig.brand || 'Riot', @@ -123,61 +230,109 @@ const launcher = new AutoLaunch({ }, }); -const settings = { - 'auto-launch': { - get: launcher.isEnabled, - set: function(bool) { - if (bool) { - return launcher.enable(); - } else { - return launcher.disable(); - } - }, +// Register the scheme the app is served from as 'standard' +// which allows things like relative URLs and IndexedDB to +// work. +// Also mark it as secure (ie. accessing resources from this +// protocol and HTTPS won't trigger mixed content warnings). +protocol.registerSchemesAsPrivileged([{ + scheme: 'vector', + privileges: { + standard: true, + secure: true, + supportFetchAPI: true, }, -}; +}]); -electron.ipcMain.on('settings_get', async function(ev) { - const data = {}; - - try { - await Promise.all(Object.keys(settings).map(async function (setting) { - data[setting] = await settings[setting].get(); - })); - - ev.sender.send('settings', data); - } catch(e) { console.error(e); } -}); - -electron.ipcMain.on('settings_set', function(ev, key, value) { - console.log(key, value); - if (settings[key] && settings[key].set) { - settings[key].set(value); - } -}); - -electron.app.on('ready', () => { - - if (argv.devtools) { +app.on('ready', () => { + if (argv['devtools']) { try { - const { default: installExtension, REACT_DEVELOPER_TOOLS, REACT_PERF } = require('electron-devtools-installer'); - installExtension(REACT_DEVELOPER_TOOLS) + const { default: installExt, REACT_DEVELOPER_TOOLS, REACT_PERF } = require('electron-devtools-installer'); + installExt(REACT_DEVELOPER_TOOLS) .then((name) => console.log(`Added Extension: ${name}`)) .catch((err) => console.log('An error occurred: ', err)); - installExtension(REACT_PERF) + installExt(REACT_PERF) .then((name) => console.log(`Added Extension: ${name}`)) .catch((err) => console.log('An error occurred: ', err)); - } catch(e) {console.log(e);} + } catch (e) { + console.log(e); + } } + protocol.registerFileProtocol('vector', (request, callback) => { + if (request.method !== 'GET') { + callback({error: -322}); // METHOD_NOT_SUPPORTED from chromium/src/net/base/net_error_list.h + return null; + } - if (vectorConfig.update_base_url) { - console.log(`Starting auto update with base URL: ${vectorConfig.update_base_url}`); - updater.start(vectorConfig.update_base_url); + const parsedUrl = new URL(request.url); + if (parsedUrl.protocol !== 'vector:') { + callback({error: -302}); // UNKNOWN_URL_SCHEME + return; + } + if (parsedUrl.host !== 'vector') { + callback({error: -105}); // NAME_NOT_RESOLVED + return; + } + + const target = parsedUrl.pathname.split('/'); + + // path starts with a '/' + if (target[0] !== '') { + callback({error: -6}); // FILE_NOT_FOUND + return; + } + + if (target[target.length - 1] == '') { + target[target.length - 1] = 'index.html'; + } + + let baseDir; + // first part of the path determines where we serve from + if (migratingOrigin && target[1] === 'origin_migrator_dest') { + // the origin migrator destination page + // (only the destination script needs to come from the + // custom protocol: the source part is loaded from a + // file:// as that's the origin we're migrating from). + baseDir = __dirname + "/../../origin_migrator/dest"; + } else if (target[1] === 'webapp') { + baseDir = __dirname + "/../../webapp"; + } else { + callback({error: -6}); // FILE_NOT_FOUND + return; + } + + // Normalise the base dir and the target path separately, then make sure + // the target path isn't trying to back out beyond its root + baseDir = path.normalize(baseDir); + + const relTarget = path.normalize(path.join(...target.slice(2))); + if (relTarget.startsWith('..')) { + callback({error: -6}); // FILE_NOT_FOUND + return; + } + const absTarget = path.join(baseDir, relTarget); + + callback({ + path: absTarget, + }); + }, (error) => { + if (error) console.error('Failed to register protocol'); + }); + + if (argv['no-update']) { + console.log('Auto update disabled via command line flag "--no-update"'); + } else if (vectorConfig['update_base_url']) { + console.log(`Starting auto update with base URL: ${vectorConfig['update_base_url']}`); + updater.start(vectorConfig['update_base_url']); } else { console.log('No update_base_url is defined: auto update is disabled'); } - const iconPath = `${__dirname}/../img/riot.${process.platform === 'win32' ? 'ico' : 'png'}`; + // It's important to call `path.join` so we don't end up with the packaged + // asar in the final path. + const iconFile = `riot.${process.platform === 'win32' ? 'ico' : 'png'}`; + const iconPath = path.join(__dirname, "..", "..", "img", iconFile); // Load the previous window state with fallback to defaults const mainWindowState = windowStateKeeper({ @@ -185,18 +340,31 @@ electron.app.on('ready', () => { defaultHeight: 768, }); - mainWindow = global.mainWindow = new electron.BrowserWindow({ + const preloadScript = path.normalize(`${__dirname}/preload.js`); + mainWindow = global.mainWindow = new BrowserWindow({ icon: iconPath, show: false, - autoHideMenuBar: true, + autoHideMenuBar: store.get('autoHideMenuBar', true), x: mainWindowState.x, y: mainWindowState.y, width: mainWindowState.width, height: mainWindowState.height, + webPreferences: { + preload: preloadScript, + nodeIntegration: false, + sandbox: true, + enableRemoteModule: false, + // We don't use this: it's useful for the preload script to + // share a context with the main page so we can give select + // objects to the main page. The sandbox option isolates the + // main page from the background script. + contextIsolation: false, + webgl: false, + }, }); - mainWindow.loadURL(`file://${__dirname}/../../webapp/index.html`); - electron.Menu.setApplicationMenu(vectorMenu); + mainWindow.loadURL('vector://vector/webapp/'); + Menu.setApplicationMenu(vectorMenu); // explicitly hide because setApplicationMenu on Linux otherwise shows... // https://github.com/electron/electron/issues/9621 @@ -208,17 +376,22 @@ electron.app.on('ready', () => { brand: vectorConfig.brand || 'Riot', }); - if (!argv.hidden) { - mainWindow.once('ready-to-show', () => { + mainWindow.once('ready-to-show', () => { + mainWindowState.manage(mainWindow); + + if (!argv['hidden']) { mainWindow.show(); - }); - } + } else { + // hide here explicitly because window manage above sometimes shows it + mainWindow.hide(); + } + }); mainWindow.on('closed', () => { mainWindow = global.mainWindow = null; }); mainWindow.on('close', (e) => { - if (!global.appQuitting && (tray.hasTray() || process.platform === 'darwin')) { + if (global.minimizeToTray && !global.appQuitting && (tray.hasTray() || process.platform === 'darwin')) { // On Mac, closing the window just hides it // (this is generally how single-window Mac apps // behave, eg. Mail.app) @@ -240,26 +413,37 @@ electron.app.on('ready', () => { } webContentsHandler(mainWindow.webContents); - mainWindowState.manage(mainWindow); }); -electron.app.on('window-all-closed', () => { - electron.app.quit(); +app.on('window-all-closed', () => { + app.quit(); }); -electron.app.on('activate', () => { +app.on('activate', () => { mainWindow.show(); }); -electron.app.on('before-quit', () => { +app.on('before-quit', () => { global.appQuitting = true; if (mainWindow) { mainWindow.webContents.send('before-quit'); } }); +app.on('second-instance', (ev, commandLine, workingDirectory) => { + // If other instance launched with --hidden then skip showing window + if (commandLine.includes('--hidden')) return; + + // Someone tried to run a second instance, we should focus our window. + if (mainWindow) { + if (!mainWindow.isVisible()) mainWindow.show(); + if (mainWindow.isMinimized()) mainWindow.restore(); + mainWindow.focus(); + } +}); + // Set the App User Model ID to match what the squirrel // installer uses for the shortcut icon. // This makes notifications work on windows 8.1 (and is // a noop on other platforms). -electron.app.setAppUserModelId('com.squirrel.riot-web.Riot'); +app.setAppUserModelId('com.squirrel.riot-web.Riot'); diff --git a/electron_app/src/originMigrator.js b/electron_app/src/originMigrator.js new file mode 100644 index 0000000000..90a33de108 --- /dev/null +++ b/electron_app/src/originMigrator.js @@ -0,0 +1,72 @@ +/* +Copyright 2018 New Vector Ltd + +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. +*/ + +const { BrowserWindow, ipcMain } = require('electron'); +const path = require('path'); + +async function migrateFromOldOrigin() { + console.log("Attempting to migrate data between origins"); + + // We can use the same preload script: we just need ipcRenderer exposed + const preloadScript = path.normalize(`${__dirname}/preload.js`); + await new Promise(resolve => { + const migrateWindow = new BrowserWindow({ + show: false, + webPreferences: { + preload: preloadScript, + nodeIntegration: false, + sandbox: true, + enableRemoteModule: false, + webgl: false, + }, + }); + const onOriginMigrationComplete = (e, success, sentSummary, storedSummary) => { + // we use once but we'll only get one of these events, + // so remove the listener for the other one + ipcMain.removeListener('origin_migration_nodata', onOriginMigrationNoData); + + if (success) { + console.log("Origin migration completed successfully!"); + } else { + console.error("Origin migration failed!"); + } + console.error("Data sent", sentSummary); + console.error("Data stored", storedSummary); + migrateWindow.close(); + resolve(); + }; + const onOriginMigrationNoData = (e, success, sentSummary, storedSummary) => { + ipcMain.removeListener('origin_migration_complete', onOriginMigrationComplete); + + console.log("No session to migrate from old origin"); + migrateWindow.close(); + resolve(); + }; + + ipcMain.once('origin_migration_complete', onOriginMigrationComplete); + ipcMain.once('origin_migration_nodata', onOriginMigrationNoData); + + // Normalise the path because in the distribution, __dirname will be inside the + // electron asar. + const sourcePagePath = path.normalize(__dirname + '/../../origin_migrator/source.html'); + console.log("Loading path: " + sourcePagePath); + migrateWindow.loadURL('file://' + sourcePagePath); + }); +} + +module.exports = { + migrateFromOldOrigin, +}; diff --git a/src/skins/vector/css/matrix-react-sdk/views/messages/_MTextBody.scss b/electron_app/src/preload.js similarity index 76% rename from src/skins/vector/css/matrix-react-sdk/views/messages/_MTextBody.scss rename to electron_app/src/preload.js index fcf397fd2d..0862ec67a2 100644 --- a/src/skins/vector/css/matrix-react-sdk/views/messages/_MTextBody.scss +++ b/electron_app/src/preload.js @@ -1,5 +1,5 @@ /* -Copyright 2015, 2016 OpenMarket Ltd +Copyright 2018, 2019 New Vector Ltd Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,11 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -.mx_MTextBody { - white-space: pre-wrap; -} +const { ipcRenderer } = require('electron'); -.mx_MTextBody pre{ - overflow-y: auto; - max-height: 30vh; -} +// expose ipcRenderer to the renderer process +window.ipcRenderer = ipcRenderer; diff --git a/electron_app/src/tray.js b/electron_app/src/tray.js index bd07d7d433..61e059723d 100644 --- a/electron_app/src/tray.js +++ b/electron_app/src/tray.js @@ -65,7 +65,7 @@ exports.create = function(config) { global.mainWindow.webContents.on('page-favicon-updated', async function(ev, favicons) { if (!favicons || favicons.length <= 0 || !favicons[0].startsWith('data:')) { if (lastFavicon !== null) { - win.setIcon(defaultIcon); + global.mainWindow.setIcon(defaultIcon); trayIcon.setImage(defaultIcon); lastFavicon = null; } diff --git a/electron_app/src/vectormenu.js b/electron_app/src/vectormenu.js index 14f91a5268..a8f998befc 100644 --- a/electron_app/src/vectormenu.js +++ b/electron_app/src/vectormenu.js @@ -37,7 +37,7 @@ const template = [ submenu: [ { type: 'separator' }, { role: 'resetzoom' }, - { role: 'zoomin' }, + { role: 'zoomin', accelerator: 'CommandOrControl+=' }, { role: 'zoomout' }, { type: 'separator' }, { role: 'togglefullscreen' }, @@ -57,8 +57,8 @@ const template = [ role: 'help', submenu: [ { - label: 'riot.im', - click() { shell.openExternal('https://riot.im/'); }, + label: 'Riot Help', + click() { shell.openExternal('https://about.riot.im/help'); }, }, ], }, diff --git a/electron_app/src/webcontents-handler.js b/electron_app/src/webcontents-handler.js index 37416ebe96..2880cf37cb 100644 --- a/electron_app/src/webcontents-handler.js +++ b/electron_app/src/webcontents-handler.js @@ -1,10 +1,14 @@ -const {clipboard, nativeImage, Menu, MenuItem, shell} = require('electron'); +const {clipboard, nativeImage, Menu, MenuItem, shell, dialog} = require('electron'); const url = require('url'); +const fs = require('fs'); +const request = require('request'); + +const MAILTO_PREFIX = "mailto:"; const PERMITTED_URL_SCHEMES = [ 'http:', 'https:', - 'mailto:', + MAILTO_PREFIX, ]; function safeOpenURL(target) { @@ -32,19 +36,27 @@ function onWindowOrNavigate(ev, target) { } function onLinkContextMenu(ev, params) { - const url = params.linkURL || params.srcURL; + let url = params.linkURL || params.srcURL; + + if (url.startsWith('vector://vector/webapp')) { + url = "https://riot.im/app/" + url.substring(23); + } const popupMenu = new Menu(); - popupMenu.append(new MenuItem({ - label: url, - click() { - safeOpenURL(url); - }, - })); + // No point trying to open blob: URLs in an external browser: it ain't gonna work. + if (!url.startsWith('blob:')) { + popupMenu.append(new MenuItem({ + label: url, + click() { + safeOpenURL(url); + }, + })); + } + let addSaveAs = false; if (params.mediaType && params.mediaType === 'image' && !url.startsWith('file://')) { popupMenu.append(new MenuItem({ - label: 'Copy Image', + label: 'Copy image', click() { if (url.startsWith('data:')) { clipboard.writeImage(nativeImage.createFromDataURL(url)); @@ -53,15 +65,63 @@ function onLinkContextMenu(ev, params) { } }, })); + + // We want the link to be ordered below the copy stuff, but don't want to duplicate + // the `if` statement, so use a flag. + addSaveAs = true; } - popupMenu.append(new MenuItem({ - label: 'Copy Link Address', - click() { - clipboard.writeText(url); - }, - })); - popupMenu.popup(); + // No point offering to copy a blob: URL either + if (!url.startsWith('blob:')) { + // Special-case e-mail URLs to strip the `mailto:` like modern browsers do + if (url.startsWith(MAILTO_PREFIX)) { + popupMenu.append(new MenuItem({ + label: 'Copy email address', + click() { + clipboard.writeText(url.substr(MAILTO_PREFIX.length)); + }, + })); + } else { + popupMenu.append(new MenuItem({ + label: 'Copy link address', + click() { + clipboard.writeText(url); + }, + })); + } + } + + if (addSaveAs) { + popupMenu.append(new MenuItem({ + label: 'Save image as...', + click() { + const targetFileName = params.titleText || "image.png"; + const filePath = dialog.showSaveDialog({ + defaultPath: targetFileName, + }); + + if (!filePath) return; // user cancelled dialog + + try { + if (url.startsWith("data:")) { + fs.writeFileSync(filePath, nativeImage.createFromDataURL(url)); + } else { + request.get(url).pipe(fs.createWriteStream(filePath)); + } + } catch (err) { + console.error(err); + dialog.showMessageBox({ + type: "error", + title: "Failed to save image", + message: "The image failed to save", + }); + } + }, + })); + } + + // popup() requires an options object even for no options + popupMenu.popup({}); ev.preventDefault(); } @@ -88,7 +148,8 @@ function onSelectedContextMenu(ev, params) { const items = _CutCopyPasteSelectContextMenus(params); const popupMenu = Menu.buildFromTemplate(items); - popupMenu.popup(); + // popup() requires an options object even for no options + popupMenu.popup({}); ev.preventDefault(); } @@ -101,13 +162,26 @@ function onEditableContextMenu(ev, params) { const popupMenu = Menu.buildFromTemplate(items); - popupMenu.popup(); + // popup() requires an options object even for no options + popupMenu.popup({}); ev.preventDefault(); } module.exports = (webContents) => { webContents.on('new-window', onWindowOrNavigate); + // XXX: The below now does absolutely nothing because of + // https://github.com/electron/electron/issues/8841 + // Whilst this isn't a security issue since without + // node integration and with the sandbox, it should be + // no worse than opening the site in Chrome, it obviously + // means the user has to restart Riot to make it usable + // again (often unintuitive because it minimises to the + // system tray). We therefore need to be vigilant about + // putting target="_blank" on links in Riot (although + // we should generally be doing this anyway since links + // navigating you away from Riot in the browser is + // also annoying). webContents.on('will-navigate', onWindowOrNavigate); webContents.on('context-menu', function(ev, params) { diff --git a/electron_app/yarn.lock b/electron_app/yarn.lock new file mode 100644 index 0000000000..4723d3e828 --- /dev/null +++ b/electron_app/yarn.lock @@ -0,0 +1,837 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@types/node@^9.4.0": + version "9.6.45" + resolved "https://registry.yarnpkg.com/@types/node/-/node-9.6.45.tgz#a9e5cfd026a3abaaf17e3c0318a470da9f2f178e" + integrity sha512-9scD7xI1kpIoMs3gVFMOWsWDyRIQ1AOZwe56i1CQPE6N/P4POYkn9UtW5F66t8C2AIoPtVfOFycQ2r11t3pcyg== + +ajv@^6.5.5: + version "6.10.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" + integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +applescript@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/applescript/-/applescript-1.0.0.tgz#bb87af568cad034a4e48c4bdaf6067a3a2701317" + integrity sha1-u4evVoytA0pOSMS9r2Bno6JwExc= + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +auto-launch@^5.0.1: + version "5.0.5" + resolved "https://registry.yarnpkg.com/auto-launch/-/auto-launch-5.0.5.tgz#d14bd002b1ef642f85e991a6195ff5300c8ad3c0" + integrity sha512-ppdF4mihhYzMYLuCcx9H/c5TUOCev8uM7en53zWVQhyYAJrurd2bFZx3qQVeJKF2jrc7rsPRNN5cD+i23l6PdA== + dependencies: + applescript "^1.0.0" + mkdirp "^0.5.1" + path-is-absolute "^1.0.0" + untildify "^3.0.2" + winreg "1.2.4" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" + integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +bignumber.js@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-2.4.0.tgz#838a992da9f9d737e0f4b2db0be62bb09dd0c5e8" + integrity sha1-g4qZLan51zfg9LLbC+YrsJ3Qxeg= + +bmp-js@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/bmp-js/-/bmp-js-0.0.3.tgz#64113e9c7cf1202b376ed607bf30626ebe57b18a" + integrity sha1-ZBE+nHzxICs3btYHvzBibr5XsYo= + +buffer-equal@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-0.0.1.tgz#91bc74b11ea405bc916bc6aa908faafa5b4aac4b" + integrity sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs= + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" + integrity sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w== + dependencies: + delayed-stream "~1.0.0" + +conf@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/conf/-/conf-2.2.0.tgz#ee282efafc1450b61e205372041ad7d866802d9a" + integrity sha512-93Kz74FOMo6aWRVpAZsonOdl2I57jKtHrNmxhumehFQw4X8Sk37SohNY11PG7Q8Okta+UnrVaI006WLeyp8/XA== + dependencies: + dot-prop "^4.1.0" + env-paths "^1.0.0" + make-dir "^1.0.0" + pkg-up "^2.0.0" + write-file-atomic "^2.3.0" + +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +deep-equal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" + integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= + +define-properties@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +dom-walk@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" + integrity sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg= + +dot-prop@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" + integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== + dependencies: + is-obj "^1.0.0" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +electron-store@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/electron-store/-/electron-store-2.0.0.tgz#1035cca2a95409d1f54c7466606345852450d64a" + integrity sha512-1WCFYHsYvZBqDsoaS0Relnz0rd81ZkBAI0Fgx7Nq2UWU77rSNs1qxm4S6uH7TCZ0bV3LQpJFk7id/is/ZgoOPA== + dependencies: + conf "^2.0.0" + +electron-window-state@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/electron-window-state/-/electron-window-state-4.1.1.tgz#6b34fdc31b38514dfec8b7c8f7b5d4addb67632d" + integrity sha1-azT9wxs4UU3+yLfI97XUrdtnYy0= + dependencies: + deep-equal "^1.0.1" + jsonfile "^2.2.3" + mkdirp "^0.5.1" + +env-paths@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-1.0.0.tgz#4168133b42bb05c38a35b1ae4397c8298ab369e0" + integrity sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA= + +es-abstract@^1.5.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" + integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== + dependencies: + es-to-primitive "^1.2.0" + function-bind "^1.1.1" + has "^1.0.3" + is-callable "^1.1.4" + is-regex "^1.0.4" + object-keys "^1.0.12" + +es-to-primitive@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" + integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es6-promise@^3.0.2: + version "3.3.1" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" + integrity sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM= + +exif-parser@^0.1.9: + version "0.1.12" + resolved "https://registry.yarnpkg.com/exif-parser/-/exif-parser-0.1.12.tgz#58a9d2d72c02c1f6f02a0ef4a9166272b7760922" + integrity sha1-WKnS1ywCwfbwKg70qRZicrd2CSI= + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= + +file-type@^3.1.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" + integrity sha1-JXoHg4TR24CHvESdEH1SpSZyuek= + +find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +function-bind@^1.0.2, function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +global@~4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" + integrity sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8= + dependencies: + min-document "^2.19.0" + process "~0.5.1" + +graceful-fs@^4.1.11, graceful-fs@^4.1.6: + version "4.1.15" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" + integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.0: + version "5.1.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== + dependencies: + ajv "^6.5.5" + har-schema "^2.0.0" + +has-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" + integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= + +has@^1.0.1, has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +ip-regex@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-1.0.3.tgz#dc589076f659f419c222039a33316f1c7387effd" + integrity sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0= + +is-callable@^1.1.3, is-callable@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" + integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== + +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= + +is-function@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5" + integrity sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU= + +is-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + +is-regex@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= + dependencies: + has "^1.0.1" + +is-symbol@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" + integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== + dependencies: + has-symbols "^1.0.0" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +jimp@^0.2.28: + version "0.2.28" + resolved "https://registry.yarnpkg.com/jimp/-/jimp-0.2.28.tgz#dd529a937190f42957a7937d1acc3a7762996ea2" + integrity sha1-3VKak3GQ9ClXp5N9Gsw6d2KZbqI= + dependencies: + bignumber.js "^2.1.0" + bmp-js "0.0.3" + es6-promise "^3.0.2" + exif-parser "^0.1.9" + file-type "^3.1.0" + jpeg-js "^0.2.0" + load-bmfont "^1.2.3" + mime "^1.3.4" + mkdirp "0.5.1" + pixelmatch "^4.0.0" + pngjs "^3.0.0" + read-chunk "^1.0.1" + request "^2.65.0" + stream-to-buffer "^0.1.0" + tinycolor2 "^1.1.2" + url-regex "^3.0.0" + +jpeg-js@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.2.0.tgz#53e448ec9d263e683266467e9442d2c5a2ef5482" + integrity sha1-U+RI7J0mPmgyZkZ+lELSxaLvVII= + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +jsonfile@^2.2.3: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug= + optionalDependencies: + graceful-fs "^4.1.6" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +load-bmfont@^1.2.3: + version "1.4.0" + resolved "https://registry.yarnpkg.com/load-bmfont/-/load-bmfont-1.4.0.tgz#75f17070b14a8c785fe7f5bee2e6fd4f98093b6b" + integrity sha512-kT63aTAlNhZARowaNYcY29Fn/QYkc52M3l6V1ifRcPewg2lvUZDAj7R6dXjOL9D0sict76op3T5+odumDSF81g== + dependencies: + buffer-equal "0.0.1" + mime "^1.3.4" + parse-bmfont-ascii "^1.0.3" + parse-bmfont-binary "^1.0.5" + parse-bmfont-xml "^1.1.4" + phin "^2.9.1" + xhr "^2.0.1" + xtend "^4.0.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +make-dir@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== + dependencies: + pify "^3.0.0" + +mime-db@~1.38.0: + version "1.38.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.38.0.tgz#1a2aab16da9eb167b49c6e4df2d9c68d63d8e2ad" + integrity sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg== + +mime-types@^2.1.12, mime-types@~2.1.19: + version "2.1.22" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.22.tgz#fe6b355a190926ab7698c9a0556a11199b2199bd" + integrity sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog== + dependencies: + mime-db "~1.38.0" + +mime@^1.3.4: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= + dependencies: + dom-walk "^0.1.0" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + +mkdirp@0.5.1, mkdirp@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-keys@^1.0.12: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.0.tgz#11bd22348dd2e096a045ab06f6c85bcc340fa032" + integrity sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +parse-bmfont-ascii@^1.0.3: + version "1.0.6" + resolved "https://registry.yarnpkg.com/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz#11ac3c3ff58f7c2020ab22769079108d4dfa0285" + integrity sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU= + +parse-bmfont-binary@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz#d038b476d3e9dd9db1e11a0b0e53a22792b69006" + integrity sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY= + +parse-bmfont-xml@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz#015319797e3e12f9e739c4d513872cd2fa35f389" + integrity sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ== + dependencies: + xml-parse-from-string "^1.0.0" + xml2js "^0.4.5" + +parse-headers@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.2.tgz#9545e8a4c1ae5eaea7d24992bca890281ed26e34" + integrity sha512-/LypJhzFmyBIDYP9aDVgeyEb5sQfbfY5mnDq4hVhlQ69js87wXfmEI5V3xI6vvXasqebp0oCytYFLxsBVfCzSg== + dependencies: + for-each "^0.3.3" + string.prototype.trim "^1.1.2" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +phin@^2.9.1: + version "2.9.3" + resolved "https://registry.yarnpkg.com/phin/-/phin-2.9.3.tgz#f9b6ac10a035636fb65dfc576aaaa17b8743125c" + integrity sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA== + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pixelmatch@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-4.0.2.tgz#8f47dcec5011b477b67db03c243bc1f3085e8854" + integrity sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ= + dependencies: + pngjs "^3.0.0" + +pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" + integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= + dependencies: + find-up "^2.1.0" + +png-to-ico@^1.0.2: + version "1.0.7" + resolved "https://registry.yarnpkg.com/png-to-ico/-/png-to-ico-1.0.7.tgz#9346b5f4d6fd7e94cb08fd49eeb585f501c3e5f2" + integrity sha512-heHiZjPFhVgLiuSG4C4wwKN9YPGLpPJvOfXRyI+cEJf0vPutjJ4XDaeI2f/hzTFs+2juihDw3pP8R5JtTuQTGg== + dependencies: + "@types/node" "^9.4.0" + jimp "^0.2.28" + minimist "^1.2.0" + +pngjs@^3.0.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" + integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w== + +process@~0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" + integrity sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8= + +psl@^1.1.24: + version "1.1.31" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184" + integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw== + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +read-chunk@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-chunk/-/read-chunk-1.0.1.tgz#5f68cab307e663f19993527d9b589cace4661194" + integrity sha1-X2jKswfmY/GZk1J9m1icrORmEZQ= + +request@^2.65.0: + version "2.88.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" + integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.0" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.4.3" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +safe-buffer@^5.0.1, safe-buffer@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sax@>=0.6.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +stream-to-buffer@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/stream-to-buffer/-/stream-to-buffer-0.1.0.tgz#26799d903ab2025c9bd550ac47171b00f8dd80a9" + integrity sha1-JnmdkDqyAlyb1VCsRxcbAPjdgKk= + dependencies: + stream-to "~0.2.0" + +stream-to@~0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/stream-to/-/stream-to-0.2.2.tgz#84306098d85fdb990b9fa300b1b3ccf55e8ef01d" + integrity sha1-hDBgmNhf25kLn6MAsbPM9V6O8B0= + +string.prototype.trim@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea" + integrity sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo= + dependencies: + define-properties "^1.1.2" + es-abstract "^1.5.0" + function-bind "^1.0.2" + +tinycolor2@^1.1.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8" + integrity sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g= + +tough-cookie@~2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== + dependencies: + psl "^1.1.24" + punycode "^1.4.1" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +untildify@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/untildify/-/untildify-3.0.3.tgz#1e7b42b140bcfd922b22e70ca1265bfe3634c7c9" + integrity sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA== + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + +url-regex@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/url-regex/-/url-regex-3.2.0.tgz#dbad1e0c9e29e105dd0b1f09f6862f7fdb482724" + integrity sha1-260eDJ4p4QXdCx8J9oYvf9tIJyQ= + dependencies: + ip-regex "^1.0.1" + +uuid@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +winreg@1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/winreg/-/winreg-1.2.4.tgz#ba065629b7a925130e15779108cf540990e98d1b" + integrity sha1-ugZWKbepJRMOFXeRCM9UCZDpjRs= + +write-file-atomic@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.2.tgz#a7181706dfba17855d221140a9c06e15fcdd87b9" + integrity sha512-s0b6vB3xIVRLWywa6X9TOMA7k9zio0TMOsl9ZnDkliA/cfJlpHXAscj0gbHVJiTdIuAYpIyqS5GW91fqm6gG5g== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +xhr@^2.0.1: + version "2.5.0" + resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.5.0.tgz#bed8d1676d5ca36108667692b74b316c496e49dd" + integrity sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ== + dependencies: + global "~4.3.0" + is-function "^1.0.1" + parse-headers "^2.0.0" + xtend "^4.0.0" + +xml-parse-from-string@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz#a9029e929d3dbcded169f3c6e28238d95a5d5a28" + integrity sha1-qQKekp09vN7RafPG4oI42VpdWig= + +xml2js@^0.4.5: + version "0.4.19" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" + integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== + dependencies: + sax ">=0.6.0" + xmlbuilder "~9.0.1" + +xmlbuilder@~9.0.1: + version "9.0.7" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" + integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= + +xtend@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= diff --git a/karma.conf.js b/karma.conf.js index 3b415b1ae6..5c05da4c1a 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -9,7 +9,7 @@ var webpack_config = require('./webpack.config'); * to build everything; however it's the easiest way to load our dependencies * from node_modules. * - * If you run karma in multi-run mode (with `npm run test-multi`), it will watch + * If you run karma in multi-run mode (with `yarn test-multi`), it will watch * the tests for changes, and webpack will rebuild using a cache. This is much quicker * than a clean rebuild. */ @@ -32,9 +32,12 @@ const olm_entry = webpack_config.entry['olm']; // 'preprocessors' config below) delete webpack_config['entry']; +// make sure we're flagged as development to avoid wasting time optimising +webpack_config.mode = 'development'; + // add ./test as a search path for js -webpack_config.module.loaders.unshift({ - test: /\.js$/, loader: "babel", +webpack_config.module.rules.unshift({ + test: /\.js$/, use: "babel-loader", include: [path.resolve('./src'), path.resolve('./test')], }); @@ -46,8 +49,9 @@ webpack_config.module.noParse.push(/sinon\/pkg\/sinon\.js$/); // ? webpack_config.resolve.alias['sinon'] = 'sinon/pkg/sinon.js'; -webpack_config.resolve.root = [ +webpack_config.resolve.modules = [ path.resolve('./test'), + "node_modules" ]; webpack_config.devtool = 'inline-source-map'; @@ -70,14 +74,21 @@ module.exports = function (config) { // This isn't required by any of the tests, but it stops karma // logging warnings when it serves a 404 for them. { - pattern: 'src/skins/vector/img/*', + pattern: 'node_modules/matrix-react-sdk/res/img/*', + watched: false, included: false, served: true, nocache: false, + }, + { + pattern: 'res/**', watched: false, included: false, served: true, nocache: false, }, ], proxies: { // redirect img links to the karma server. See above. - "/img/": "/base/src/skins/vector/img/", + "/img/": "/base/node_modules/matrix-react-sdk/res/img/", + "/themes/": "/base/res/themes/", + "/welcome.html": "/base/res/welcome.html", + "/welcome/": "/base/res/welcome/", }, // preprocess matching files before serving them to the browser @@ -89,7 +100,7 @@ module.exports = function (config) { // test results reporter to use // available reporters: https://npmjs.org/browse/keyword/karma-reporter - reporters: ['logcapture', 'spec', 'junit', 'summary'], + reporters: ['logcapture', 'spec', 'summary'], specReporter: { suppressErrorSummary: false, // do print error summary @@ -127,10 +138,10 @@ module.exports = function (config) { ], customLaunchers: { - 'ChromeHeadless': { + 'VectorChromeHeadless': { base: 'Chrome', flags: [ - // '--no-sandbox', + '--no-sandbox', // See https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md '--headless', '--disable-gpu', @@ -148,10 +159,6 @@ module.exports = function (config) { // how many browser should be started simultaneous concurrency: Infinity, - junitReporter: { - outputDir: 'karma-reports', - }, - webpack: webpack_config, webpackMiddleware: { diff --git a/origin_migrator/dest/browser-matrix.min.js b/origin_migrator/dest/browser-matrix.min.js new file mode 100644 index 0000000000..131dc4afcb --- /dev/null +++ b/origin_migrator/dest/browser-matrix.min.js @@ -0,0 +1,19 @@ +!function(){function e(t,r,n){function o(s,a){if(!r[s]){if(!t[s]){var u="function"==typeof require&&require;if(!a&&u)return u(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var l=r[s]={exports:{}};t[s][0].call(l.exports,function(e){return o(t[s][1][e]||e)},l,l.exports,e,t,r,n)}return r[s].exports}for(var i="function"==typeof require&&require,s=0;s1?r-1:0),o=1;o0&&void 0!==arguments[0]&&arguments[0]&&(this.idBaseUrl.startsWith("http://")||this.idBaseUrl.startsWith("https://"))?this.idBaseUrl.split("://")[1]:this.idBaseUrl},o.prototype.getAccessToken=function(){return this._http.opts.accessToken||null},o.prototype.isLoggedIn=function(){return void 0!==this._http.opts.accessToken},o.prototype.makeTxnId=function(){return"m"+(new Date).getTime()+"."+this._txnCtr++},o.prototype.isUsernameAvailable=function(e){return this._http.authedRequest(void 0,"GET","/register/available",{username:e}).then(function(e){return e.available})},o.prototype.register=function(e,t,r,n,o,i,s){!0===o?o={email:!0}:null!==o&&void 0!==o||(o={}),void 0!==n&&null!==n||(n={}),r&&(n.session=r);var a={auth:n};return void 0!==e&&null!==e&&(a.username=e),void 0!==t&&null!==t&&(a.password=t),o.email&&(a.bind_email=!0),o.msisdn&&(a.bind_msisdn=!0),void 0!==i&&null!==i&&(a.guest_access_token=i),void 0!==t&&null!==t&&(a.x_show_msisdn=!0),this.registerRequest(a,void 0,s)},o.prototype.registerGuest=function(e,t){return e=e||{},e.body=e.body||{},this.registerRequest(e.body,"guest",t)},o.prototype.registerRequest=function(e,t,r){var n={};return t&&(n.kind=t),this._http.request(r,"POST","/register",n,e)},o.prototype.loginFlows=function(e){return this._http.request(e,"GET","/login")},o.prototype.login=function(e,t,r){var n=this,o={type:e};return l.extend(o,t),this._http.authedRequest(function(t,o){"m.login.password"===e&&o&&o.access_token&&o.user_id&&(n._http.opts.accessToken=o.access_token,n.credentials={userId:o.user_id}),r&&r(t,o)},"POST","/login",void 0,o)},o.prototype.loginWithPassword=function(e,t,r){return this.login("m.login.password",{user:e,password:t},r)},o.prototype.loginWithSAML2=function(e,t){return this.login("m.login.saml2",{relay_state:e},t)},o.prototype.getCasLoginUrl=function(e){return this.getSsoLoginUrl(e,"cas")},o.prototype.getSsoLoginUrl=function(e,t){return void 0===t&&(t="sso"),this._http.getUrl("/login/"+t+"/redirect",{redirectUrl:e},c.PREFIX_R0)},o.prototype.loginWithToken=function(e,t){return this.login("m.login.token",{token:e},t)},o.prototype.logout=function(e){return this._http.authedRequest(e,"POST","/logout")},o.prototype.deactivateAccount=function(e,t){if("function"==typeof t)throw new Error("deactivateAccount no longer accepts a callback parameter");var r={};return e&&(r.auth=e),void 0!==t&&(r.erase=t),this._http.authedRequestWithPrefix(void 0,"POST","/account/deactivate",void 0,r,c.PREFIX_R0)},o.prototype.getFallbackAuthUrl=function(e,t){var r=l.encodeUri("/auth/$loginType/fallback/web",{$loginType:e});return this._http.getUrl(r,{session:t},c.PREFIX_R0)},o.prototype.createRoom=function(e,t){return this._http.authedRequest(t,"POST","/createRoom",void 0,e)},o.prototype.roomState=function(e,t){var r=l.encodeUri("/rooms/$roomId/state",{$roomId:e});return this._http.authedRequest(t,"GET",r)},o.prototype.fetchRoomEvent=function(e,t,r){var n=l.encodeUri("/rooms/$roomId/event/$eventId",{$roomId:e,$eventId:t});return this._http.authedRequest(r,"GET",n)},o.prototype.members=function(e,t,r,n,o){var i={};t&&(i.membership=t),r&&(i.not_membership=r),n&&(i.at=n);var s=l.encodeParams(i),a=l.encodeUri("/rooms/$roomId/members?"+s,{$roomId:e});return this._http.authedRequest(o,"GET",a)},o.prototype.upgradeRoom=function(e,t){var r=l.encodeUri("/rooms/$roomId/upgrade",{$roomId:e});return this._http.authedRequest(void 0,"POST",r,void 0,{new_version:t})},o.prototype.getGroupSummary=function(e){var t=l.encodeUri("/groups/$groupId/summary",{$groupId:e});return this._http.authedRequest(void 0,"GET",t)},o.prototype.getGroupProfile=function(e){var t=l.encodeUri("/groups/$groupId/profile",{$groupId:e});return this._http.authedRequest(void 0,"GET",t)},o.prototype.setGroupProfile=function(e,t){var r=l.encodeUri("/groups/$groupId/profile",{$groupId:e});return this._http.authedRequest(void 0,"POST",r,void 0,t)},o.prototype.setGroupJoinPolicy=function(e,t){var r=l.encodeUri("/groups/$groupId/settings/m.join_policy",{$groupId:e});return this._http.authedRequest(void 0,"PUT",r,void 0,{"m.join_policy":t})},o.prototype.getGroupUsers=function(e){var t=l.encodeUri("/groups/$groupId/users",{$groupId:e});return this._http.authedRequest(void 0,"GET",t)},o.prototype.getGroupInvitedUsers=function(e){var t=l.encodeUri("/groups/$groupId/invited_users",{$groupId:e});return this._http.authedRequest(void 0,"GET",t)},o.prototype.getGroupRooms=function(e){var t=l.encodeUri("/groups/$groupId/rooms",{$groupId:e});return this._http.authedRequest(void 0,"GET",t)},o.prototype.inviteUserToGroup=function(e,t){var r=l.encodeUri("/groups/$groupId/admin/users/invite/$userId",{$groupId:e,$userId:t});return this._http.authedRequest(void 0,"PUT",r,void 0,{})},o.prototype.removeUserFromGroup=function(e,t){var r=l.encodeUri("/groups/$groupId/admin/users/remove/$userId",{$groupId:e,$userId:t});return this._http.authedRequest(void 0,"PUT",r,void 0,{})},o.prototype.addUserToGroupSummary=function(e,t,r){var n=l.encodeUri(r?"/groups/$groupId/summary/$roleId/users/$userId":"/groups/$groupId/summary/users/$userId",{$groupId:e,$roleId:r,$userId:t});return this._http.authedRequest(void 0,"PUT",n,void 0,{})},o.prototype.removeUserFromGroupSummary=function(e,t){var r=l.encodeUri("/groups/$groupId/summary/users/$userId",{$groupId:e,$userId:t});return this._http.authedRequest(void 0,"DELETE",r,void 0,{})},o.prototype.addRoomToGroupSummary=function(e,t,r){var n=l.encodeUri(r?"/groups/$groupId/summary/$categoryId/rooms/$roomId":"/groups/$groupId/summary/rooms/$roomId",{$groupId:e,$categoryId:r,$roomId:t});return this._http.authedRequest(void 0,"PUT",n,void 0,{})},o.prototype.removeRoomFromGroupSummary=function(e,t){var r=l.encodeUri("/groups/$groupId/summary/rooms/$roomId",{$groupId:e,$roomId:t});return this._http.authedRequest(void 0,"DELETE",r,void 0,{})},o.prototype.addRoomToGroup=function(e,t,r){void 0===r&&(r=!0);var n=l.encodeUri("/groups/$groupId/admin/rooms/$roomId",{$groupId:e,$roomId:t});return this._http.authedRequest(void 0,"PUT",n,void 0,{"m.visibility":{type:r?"public":"private"}})},o.prototype.updateGroupRoomVisibility=function(e,t,r){var n=l.encodeUri("/groups/$groupId/admin/rooms/$roomId/config/m.visibility",{$groupId:e,$roomId:t});return this._http.authedRequest(void 0,"PUT",n,void 0,{type:r?"public":"private"})},o.prototype.removeRoomFromGroup=function(e,t){var r=l.encodeUri("/groups/$groupId/admin/rooms/$roomId",{$groupId:e,$roomId:t});return this._http.authedRequest(void 0,"DELETE",r,void 0,{})},o.prototype.acceptGroupInvite=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=l.encodeUri("/groups/$groupId/self/accept_invite",{$groupId:e});return this._http.authedRequest(void 0,"PUT",r,void 0,t||{})},o.prototype.joinGroup=function(e){var t=l.encodeUri("/groups/$groupId/self/join",{$groupId:e});return this._http.authedRequest(void 0,"PUT",t,void 0,{})},o.prototype.leaveGroup=function(e){var t=l.encodeUri("/groups/$groupId/self/leave",{$groupId:e});return this._http.authedRequest(void 0,"PUT",t,void 0,{})},o.prototype.getJoinedGroups=function(){var e=l.encodeUri("/joined_groups");return this._http.authedRequest(void 0,"GET",e)},o.prototype.createGroup=function(e){var t=l.encodeUri("/create_group");return this._http.authedRequest(void 0,"POST",t,void 0,e)},o.prototype.getPublicisedGroups=function(e){var t=l.encodeUri("/publicised_groups");return this._http.authedRequest(void 0,"POST",t,void 0,{user_ids:e})},o.prototype.setGroupPublicity=function(e,t){var r=l.encodeUri("/groups/$groupId/self/update_publicity",{$groupId:e});return this._http.authedRequest(void 0,"PUT",r,void 0,{publicise:t})},o.prototype.getStateEvent=function(e,t,r,n){var o={$roomId:e,$eventType:t,$stateKey:r},i=l.encodeUri("/rooms/$roomId/state/$eventType",o);return void 0!==r&&(i=l.encodeUri(i+"/$stateKey",o)),this._http.authedRequest(n,"GET",i)},o.prototype.sendStateEvent=function(e,t,r,n,o){var i={$roomId:e,$eventType:t,$stateKey:n},s=l.encodeUri("/rooms/$roomId/state/$eventType",i);return void 0!==n&&(s=l.encodeUri(s+"/$stateKey",i)),this._http.authedRequest(o,"PUT",s,void 0,r)},o.prototype.redactEvent=function(e,t,r){var n=l.encodeUri("/rooms/$roomId/redact/$eventId",{$roomId:e,$eventId:t});return this._http.authedRequest(r,"POST",n,void 0,{})},o.prototype.roomInitialSync=function(e,t,r){l.isFunction(t)&&(r=t,t=void 0);var n=l.encodeUri("/rooms/$roomId/initialSync",{$roomId:e});return t||(t=30),this._http.authedRequest(r,"GET",n,{limit:t})},o.prototype.setRoomReadMarkersHttpRequest=function(e,t,r){var n=l.encodeUri("/rooms/$roomId/read_markers",{$roomId:e}),o={"m.fully_read":t,"m.read":r};return this._http.authedRequest(void 0,"POST",n,void 0,o)},o.prototype.getJoinedRooms=function(){var e=l.encodeUri("/joined_rooms");return this._http.authedRequest(void 0,"GET",e)},o.prototype.getJoinedRoomMembers=function(e){var t=l.encodeUri("/rooms/$roomId/joined_members",{$roomId:e});return this._http.authedRequest(void 0,"GET",t)},o.prototype.publicRooms=function(e,t){"function"==typeof e&&(t=e,e={}),void 0===e&&(e={});var r={};return e.server&&(r.server=e.server,delete e.server),0===(0,u.default)(e).length&&0===(0,u.default)(r).length?this._http.authedRequest(t,"GET","/publicRooms"):this._http.authedRequest(t,"POST","/publicRooms",r,e)},o.prototype.createAlias=function(e,t,r){var n=l.encodeUri("/directory/room/$alias",{$alias:e}),o={room_id:t};return this._http.authedRequest(r,"PUT",n,void 0,o)},o.prototype.deleteAlias=function(e,t){var r=l.encodeUri("/directory/room/$alias",{$alias:e});return this._http.authedRequest(t,"DELETE",r,void 0,void 0)},o.prototype.getRoomIdForAlias=function(e,t){var r=l.encodeUri("/directory/room/$alias",{$alias:e});return this._http.authedRequest(t,"GET",r)},o.prototype.resolveRoomAlias=function(e,t){var r=l.encodeUri("/directory/room/$alias",{$alias:e});return this._http.request(t,"GET",r)},o.prototype.getRoomDirectoryVisibility=function(e,t){var r=l.encodeUri("/directory/list/room/$roomId",{$roomId:e});return this._http.authedRequest(t,"GET",r)},o.prototype.setRoomDirectoryVisibility=function(e,t,r){var n=l.encodeUri("/directory/list/room/$roomId",{$roomId:e});return this._http.authedRequest(r,"PUT",n,void 0,{visibility:t})},o.prototype.setRoomDirectoryVisibilityAppService=function(e,t,r,n){var o=l.encodeUri("/directory/list/appservice/$networkId/$roomId",{$networkId:e,$roomId:t});return this._http.authedRequest(n,"PUT",o,void 0,{visibility:r})},o.prototype.searchUserDirectory=function(e){var t={search_term:e.term};return void 0!==e.limit&&(t.limit=e.limit),this._http.authedRequest(void 0,"POST","/user_directory/search",void 0,t)},o.prototype.uploadContent=function(e,t){return this._http.uploadContent(e,t)},o.prototype.cancelUpload=function(e){return this._http.cancelUpload(e)},o.prototype.getCurrentUploads=function(){return this._http.getCurrentUploads()},o.prototype.getProfileInfo=function(e,t,r){l.isFunction(t)&&(r=t,t=void 0);var n=t?l.encodeUri("/profile/$userId/$info",{$userId:e,$info:t}):l.encodeUri("/profile/$userId",{$userId:e});return this._http.authedRequest(r,"GET",n)},o.prototype.getThreePids=function(e){return this._http.authedRequest(e,"GET","/account/3pid",void 0,void 0)},o.prototype.addThreePid=function(e,t,r){var n={threePidCreds:e,bind:t};return this._http.authedRequest(r,"POST","/account/3pid",null,n)},o.prototype.deleteThreePid=function(e,t){var r={medium:e,address:t};return this._http.authedRequestWithPrefix(void 0,"POST","/account/3pid/delete",null,r,c.PREFIX_UNSTABLE)},o.prototype.setPassword=function(e,t,r){var n={auth:e,new_password:t};return this._http.authedRequest(r,"POST","/account/password",null,n)},o.prototype.getDevices=function(){return this._http.authedRequestWithPrefix(void 0,"GET","/devices",void 0,void 0,c.PREFIX_UNSTABLE)},o.prototype.setDeviceDetails=function(e,t){var r=l.encodeUri("/devices/$device_id",{$device_id:e});return this._http.authedRequestWithPrefix(void 0,"PUT",r,void 0,t,c.PREFIX_UNSTABLE)},o.prototype.deleteDevice=function(e,t){var r=l.encodeUri("/devices/$device_id",{$device_id:e}),n={};return t&&(n.auth=t),this._http.authedRequestWithPrefix(void 0,"DELETE",r,void 0,n,c.PREFIX_UNSTABLE)},o.prototype.deleteMultipleDevices=function(e,t){var r={devices:e};return t&&(r.auth=t),this._http.authedRequestWithPrefix(void 0,"POST","/delete_devices",void 0,r,c.PREFIX_UNSTABLE)},o.prototype.getPushers=function(e){return this._http.authedRequest(e,"GET","/pushers",void 0,void 0)},o.prototype.setPusher=function(e,t){return this._http.authedRequest(t,"POST","/pushers/set",null,e)},o.prototype.getPushRules=function(e){return this._http.authedRequest(e,"GET","/pushrules/")},o.prototype.addPushRule=function(e,t,r,n,o){var i=l.encodeUri("/pushrules/"+e+"/$kind/$ruleId",{$kind:t,$ruleId:r});return this._http.authedRequest(o,"PUT",i,void 0,n)},o.prototype.deletePushRule=function(e,t,r,n){var o=l.encodeUri("/pushrules/"+e+"/$kind/$ruleId",{$kind:t,$ruleId:r});return this._http.authedRequest(n,"DELETE",o)},o.prototype.setPushRuleEnabled=function(e,t,r,n,o){var i=l.encodeUri("/pushrules/"+e+"/$kind/$ruleId/enabled",{$kind:t,$ruleId:r});return this._http.authedRequest(o,"PUT",i,void 0,{enabled:n})},o.prototype.setPushRuleActions=function(e,t,r,n,o){var i=l.encodeUri("/pushrules/"+e+"/$kind/$ruleId/actions",{$kind:t,$ruleId:r});return this._http.authedRequest(o,"PUT",i,void 0,{actions:n})},o.prototype.search=function(e,t){var r={};return e.next_batch&&(r.next_batch=e.next_batch),this._http.authedRequest(t,"POST","/search",r,e.body)},o.prototype.uploadKeysRequest=function(e,t,r){t=t||{};var n=t.device_id,o=void 0;return o=n?l.encodeUri("/keys/upload/$deviceId",{$deviceId:n}):"/keys/upload",this._http.authedRequestWithPrefix(r,"POST",o,void 0,e,c.PREFIX_UNSTABLE)},o.prototype.downloadKeysForUsers=function(e,t){if(l.isFunction(t))throw new Error("downloadKeysForUsers no longer accepts a callback parameter");t=t||{};var r={device_keys:{}};return"token"in t&&(r.token=t.token),e.forEach(function(e){r.device_keys[e]={}}),this._http.authedRequestWithPrefix(void 0,"POST","/keys/query",void 0,r,c.PREFIX_UNSTABLE)},o.prototype.claimOneTimeKeys=function(e,t){var r={};void 0===t&&(t="signed_curve25519");for(var n=0;n1&&c(t,r,ee.QUEUED),n||(n=l(e,r)),n}).then(function(e){return t&&t.updatePendingEvent(r,ee.SENT,e.event_id),n&&n(null,e),e},function(e){console.error("Error sending event",e.stack||e);try{r.error=e,c(t,r,ee.NOT_SENT),e.event=r,n&&n(e)}catch(t){console.error("Exception in error handler!",t.stack||e)}throw e})}function u(e,t,r){if(t.isEncrypted())return null;if(!e.isRoomEncrypted(t.getRoomId()))return null;if(!e._crypto)throw new Error("This room is configured to use encryption, but your client does not support encryption.");return e._crypto.encryptEvent(t,r)}function c(e,t,r){e?e.updatePendingEvent(t,r):t.status=r}function l(e,t){var r=t._txnId?t._txnId:e.makeTxnId(),n={$roomId:t.getRoomId(),$eventType:t.getWireType(),$stateKey:t.getStateKey(),$txnId:r},o=void 0;if(t.isState()){var i="/rooms/$roomId/state/$eventType";t.getStateKey()&&t.getStateKey().length>0&&(i="/rooms/$roomId/state/$eventType/$stateKey"),o=ie.encodeUri(i,n)}else o=ie.encodeUri("/rooms/$roomId/send/$eventType/$txnId",n);return e._http.authedRequest(void 0,"PUT",o,void 0,t.getWireContent()).then(function(e){return console.log("Event sent to "+t.getRoomId()+" with event id "+e.event_id),e})}function d(e,t,r,n,o,i){ie.isFunction(o)&&(i=o,o=void 0);var s=ie.encodeUri("/rooms/$roomId/state/m.room.member/$userId",{$roomId:t,$userId:r});return e._http.authedRequest(i,"PUT",s,void 0,{membership:n,reason:o})}function f(e,t,r,n,o,i){ie.isFunction(o)&&(i=o,o=void 0);var s=ie.encodeUri("/rooms/$room_id/$membership",{$room_id:t,$membership:n});return e._http.authedRequest(i,"POST",s,void 0,{user_id:r,reason:o})}function p(e,t,r,n){var o=ie.encodeUri("/presence/list/$userId",{$userId:t.credentials.userId});return t._http.authedRequest(e,n,o,void 0,r)}function h(e){function t(e){return 0!==e.getType().indexOf("m.call.")?void((e.isBeingDecrypted()||e.isDecryptionFailure())&&e.once("Event.decrypted",t)):i?void r(e):void o.push(e)}function r(t){var r=t.getContent(),o=r.call_id?e.callList[r.call_id]:void 0,i=void 0;if("m.call.invite"===t.getType()){if(t.getSender()===e.credentials.userId)return;if(t.getAge()>r.lifetime)return;if(o&&"ended"===o.state)return;if(o&&console.log("WARN: Already have a MatrixCall with id %s but got an invite. Clobbering.",r.call_id),!(o=oe.createNewMatrixCall(e,t.getRoomId(),{forceTURN:e._forceTURN})))return void console.log("Incoming call ID "+r.call_id+" but this client doesn't support WebRTC");if(o.callId=r.call_id,o._initWithInvite(t),e.callList[o.callId]=o,n[o.callId])for(i=0;io.callId?(console.log("Glare detected: answering incoming call "+o.callId+" and canceling outgoing call "+s.callId),s._replacedBy(o),o.answer()):(console.log("Glare detected: rejecting incoming call "+o.callId+" and keeping outgoing call "+s.callId),o.hangup()):e.emit("Call.incoming",o)}else if("m.call.answer"===t.getType()){if(!o)return;t.getSender()===e.credentials.userId?"ringing"===o.state&&o._onAnsweredElsewhere(r):o._receivedAnswer(r)}else if("m.call.candidates"===t.getType()){if(t.getSender()===e.credentials.userId)return;if(o)for(i=0;i=0;n--){var s=o[n];"m.call.answer"!==s.getType()&&"m.call.hangup"!==s.getType()||(t[s.getContent().call_id]="yep")}o.forEach(function(e){t[e.getContent().call_id]||r(e)}),o=[]}}),e.on("event",t)}function v(e){e._supportsVoip&&(e.isGuest()||e.turnServer().done(function(t){if(t.uris){console.log("Got TURN URIs: "+t.uris+" refresh in "+t.ttl+" secs");var r={urls:t.uris,username:t.username,credential:t.password};e._turnServers=[r],e._checkTurnServersTimeoutID=setTimeout(function(){v(e)},1e3*(t.ttl||3600)*.9)}},function(t){console.error("Failed to get TURN URIs"),e._checkTurnServersTimeoutID=setTimeout(function(){v(e)},6e4)}))}function m(e,t,r){e&&e(r),t.reject(r)}function y(e,t,r){e&&e(null,r),t.resolve(r)}function _(e){function t(t){var r=new Z(t);return r.isEncrypted()&&(e.reEmitter.reEmit(r,["Event.decrypted"]),r.attemptDecryption(e._crypto)),r}return t}var g=e("babel-runtime/core-js/object/assign"),b=n(g),E=e("babel-runtime/core-js/json/stringify"),w=n(E),S=e("babel-runtime/core-js/set"),k=n(S),T=e("babel-runtime/core-js/object/keys"),x=n(T),R=e("babel-runtime/helpers/typeof"),I=n(R),C=e("bluebird"),j=n(C),O=e("babel-runtime/regenerator"),A=n(O),D=e("babel-runtime/helpers/slicedToArray"),M=n(D),P=e("babel-runtime/core-js/object/entries"),L=n(P),U=e("babel-runtime/core-js/get-iterator"),N=n(U),F=function(){var e=(0,C.coroutine)(A.default.mark(function e(t,r,n,o,i,s){var a;return A.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(t._crypto){e.next=2;break}throw new Error("End-to-End encryption disabled");case 2:return e.next=4,(0,C.resolve)(t._crypto.setDeviceVerification(r,n,o,i,s));case 4:a=e.sent,t.emit("deviceVerificationChanged",r,n,a);case 6:case"end":return e.stop()}},e,this)}));return function(t,r,n,o,i,s){return e.apply(this,arguments)}}(),q=e("./ReEmitter"),B=n(q),K=e("./crypto/RoomList"),G=n(K),$=e("./crypto"),V=n($),W=e("./crypto/recoverykey"),H=e("./crypto/backup_password"),z=e("./randomstring"),Q=e("./pushprocessor"),J=e("events").EventEmitter,Y=e("url"),X=e("./http-api"),Z=e("./models/event").MatrixEvent,ee=e("./models/event").EventStatus,te=e("./models/event-timeline"),re=e("./models/search-result"),ne=e("./store/stub"),oe=e("./webrtc/call"),ie=e("./utils"),se=e("./content-repo"),ae=e("./filter"),ue=e("./sync"),ce=e("./base-apis"),le=X.MatrixError,de=e("./content-helpers"),fe=e("./crypto/olmlib");j.default.config({warnings:!1});var pe=(0,$.isCryptoAvailable)();ie.inherits(s,J),ie.extend(s.prototype,ce.prototype),s.prototype.clearStores=function(){if(this._clientRunning)throw new Error("Cannot clear stores while client is running");var e=[];return e.push(this.store.deleteAllData()),this._cryptoStore&&e.push(this._cryptoStore.deleteAllData()),j.default.all(e)},s.prototype.getUserId=function(){return this.credentials&&this.credentials.userId?this.credentials.userId:null},s.prototype.getDomain=function(){return this.credentials&&this.credentials.userId?this.credentials.userId.replace(/^.*?:/,""):null},s.prototype.getUserIdLocalpart=function(){return this.credentials&&this.credentials.userId?this.credentials.userId.split(":")[0].substring(1):null},s.prototype.getDeviceId=function(){return this.deviceId},s.prototype.supportsVoip=function(){return this._supportsVoip},s.prototype.setForceTURN=function(e){this._forceTURN=e},s.prototype.getSyncState=function(){return this._syncApi?this._syncApi.getSyncState():null},s.prototype.getSyncStateData=function(){return this._syncApi?this._syncApi.getSyncStateData():null},s.prototype.isGuest=function(){return this._isGuest},s.prototype.getScheduler=function(){return this.scheduler},s.prototype.setGuest=function(e){this._isGuest=e},s.prototype.retryImmediately=function(){return this._syncApi.retryImmediately()},s.prototype.getNotifTimelineSet=function(){return this._notifTimelineSet},s.prototype.setNotifTimelineSet=function(e){this._notifTimelineSet=e},s.prototype.initCrypto=(0,C.coroutine)(A.default.mark(function e(){var t,r;return A.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if((0,$.isCryptoAvailable)()){e.next=2;break}throw new Error("End-to-end encryption not supported in this js-sdk build: did you remember to load the olm library?");case 2:if(!this._crypto){e.next=5;break}return console.warn("Attempt to re-initialise e2e encryption on MatrixClient"),e.abrupt("return");case 5:if(this._sessionStore){e.next=7;break}throw new Error("Cannot enable encryption: no sessionStore provided");case 7:if(this._cryptoStore){e.next=9;break}throw new Error("Cannot enable encryption: no cryptoStore provided");case 9:return e.next=11,(0,C.resolve)(this._roomList.init());case 11:if(null!==(t=this.getUserId())){e.next=14;break}throw new Error("Cannot enable encryption on MatrixClient with unknown userId: ensure userId is passed in createClient().");case 14:if(null!==this.deviceId){e.next=16;break}throw new Error("Cannot enable encryption on MatrixClient with unknown deviceId: ensure deviceId is passed in createClient().");case 16:return r=new V.default(this,this._sessionStore,t,this.deviceId,this.store,this._cryptoStore,this._roomList),this.reEmitter.reEmit(r,["crypto.roomKeyRequest","crypto.roomKeyRequestCancellation","crypto.warning"]),e.next=20,(0,C.resolve)(r.init());case 20:this.olmVersion=V.default.getOlmVersion(),r.registerEventHandlers(this),this._crypto=r;case 23:case"end":return e.stop()}},e,this)})),s.prototype.isCryptoEnabled=function(){return null!==this._crypto},s.prototype.getDeviceEd25519Key=function(){return this._crypto?this._crypto.getDeviceEd25519Key():null},s.prototype.uploadKeys=function(){if(null===this._crypto)throw new Error("End-to-end encryption disabled");return this._crypto.uploadDeviceKeys()},s.prototype.downloadKeys=function(e,t){return null===this._crypto?j.default.reject(new Error("End-to-end encryption disabled")):this._crypto.downloadKeys(e,t)},s.prototype.getStoredDevicesForUser=function(){var e=(0,C.method)(function(e){if(null===this._crypto)throw new Error("End-to-end encryption disabled");return this._crypto.getStoredDevicesForUser(e)||[]});return function(t){return e.apply(this,arguments)}}(),s.prototype.getStoredDevice=function(){var e=(0,C.method)(function(e,t){if(null===this._crypto)throw new Error("End-to-end encryption disabled");return this._crypto.getStoredDevice(e,t)||null});return function(t,r){return e.apply(this,arguments)}}(),s.prototype.setDeviceVerified=function(e,t,r){void 0===r&&(r=!0);var n=F(this,e,t,r,null);return e==this.credentials.userId&&this._crypto.checkKeyBackup(),n},s.prototype.setDeviceBlocked=function(e,t,r){return void 0===r&&(r=!0),F(this,e,t,null,r)},s.prototype.setDeviceKnown=function(e,t,r){return void 0===r&&(r=!0),F(this,e,t,null,null,r)},s.prototype.setGlobalBlacklistUnverifiedDevices=function(e){if(null===this._crypto)throw new Error("End-to-end encryption disabled");this._crypto.setGlobalBlacklistUnverifiedDevices(e)},s.prototype.getGlobalBlacklistUnverifiedDevices=function(){if(null===this._crypto)throw new Error("End-to-end encryption disabled");return this._crypto.getGlobalBlacklistUnverifiedDevices()},s.prototype.getEventSenderDeviceInfo=function(){var e=(0,C.method)(function(e){return this._crypto?this._crypto.getEventSenderDeviceInfo(e):null});return function(t){return e.apply(this,arguments)}}(),s.prototype.isEventSenderVerified=function(){var e=(0,C.coroutine)(A.default.mark(function e(t){var r;return A.default.wrap(function(e){ +for(;;)switch(e.prev=e.next){case 0:return e.next=2,(0,C.resolve)(this.getEventSenderDeviceInfo(t));case 2:if(r=e.sent){e.next=5;break}return e.abrupt("return",!1);case 5:return e.abrupt("return",r.isVerified());case 6:case"end":return e.stop()}},e,this)}));return function(t){return e.apply(this,arguments)}}(),s.prototype.cancelAndResendEventRoomKeyRequest=function(e){e.cancelAndResendKeyRequest(this._crypto)},s.prototype.setRoomEncryption=function(e,t){if(!this._crypto)throw new Error("End-to-End encryption disabled");return this._crypto.setRoomEncryption(e,t)},s.prototype.isRoomEncrypted=function(e){var t=this.getRoom(e);return!!t&&(!!t.currentState.getStateEvents("m.room.encryption","")||this._roomList.isRoomEncrypted(e))},s.prototype.forceDiscardSession=function(e){if(!this._crypto)throw new Error("End-to-End encryption disabled");this._crypto.forceDiscardSession(e)},s.prototype.exportRoomKeys=function(){return this._crypto?this._crypto.exportRoomKeys():j.default.reject(new Error("End-to-end encryption disabled"))},s.prototype.importRoomKeys=function(e){if(!this._crypto)throw new Error("End-to-end encryption disabled");return this._crypto.importRoomKeys(e)},s.prototype.getKeyBackupVersion=function(){return this._http.authedRequest(void 0,"GET","/room_keys/version").then(function(e){if(e.algorithm!==fe.MEGOLM_BACKUP_ALGORITHM){var t="Unknown backup algorithm: "+e.algorithm;return j.default.reject(t)}if("object"===(0,I.default)(e.auth_data)&&e.auth_data.public_key)return e;return j.default.reject("Invalid backup data returned")}).catch(function(e){if("M_NOT_FOUND"===e.errcode)return null;throw e})},s.prototype.isKeyBackupTrusted=function(e){return this._crypto.isKeyBackupTrusted(e)},s.prototype.getKeyBackupEnabled=function(){if(null===this._crypto)throw new Error("End-to-end encryption disabled");return Boolean(this._crypto.backupKey)},s.prototype.enableKeyBackup=function(e){if(null===this._crypto)throw new Error("End-to-end encryption disabled");this._crypto.backupInfo=e,this._crypto.backupKey&&this._crypto.backupKey.free(),this._crypto.backupKey=new r.Olm.PkEncryption,this._crypto.backupKey.set_recipient_key(e.auth_data.public_key),this.emit("crypto.keyBackupStatus",!0)},s.prototype.disableKeyBackup=function(){if(null===this._crypto)throw new Error("End-to-end encryption disabled");this._crypto.backupInfo=null,this._crypto.backupKey&&this._crypto.backupKey.free(),this._crypto.backupKey=null,this.emit("crypto.keyBackupStatus",!1)},s.prototype.prepareKeyBackupVersion=function(){var e=(0,C.coroutine)(A.default.mark(function e(t){var n,o,i,s;return A.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(null!==this._crypto){e.next=2;break}throw new Error("End-to-end encryption disabled");case 2:if(n=new r.Olm.PkDecryption,e.prev=3,o=void 0,i={},!t){e.next=15;break}return e.next=9,(0,C.resolve)((0,H.keyForNewBackup)(t));case 9:s=e.sent,o=n.init_with_private_key(s.key),i.private_key_salt=s.salt,i.private_key_iterations=s.iterations,e.next=16;break;case 15:o=n.generate_key();case 16:return i.public_key=o,e.abrupt("return",{algorithm:fe.MEGOLM_BACKUP_ALGORITHM,auth_data:i,recovery_key:(0,W.encodeRecoveryKey)(n.get_private_key())});case 18:return e.prev=18,n.free(),e.finish(18);case 21:case"end":return e.stop()}},e,this,[[3,,18,21]])}));return function(t){return e.apply(this,arguments)}}(),s.prototype.createKeyBackupVersion=function(e){var t=this;if(null===this._crypto)throw new Error("End-to-end encryption disabled");var r={algorithm:e.algorithm,auth_data:e.auth_data};return this._crypto._signObject(r.auth_data).then(function(){return t._http.authedRequest(void 0,"POST","/room_keys/version",void 0,r)}).then(function(r){return t.enableKeyBackup({algorithm:e.algorithm,auth_data:e.auth_data,version:r.version}),r})},s.prototype.deleteKeyBackupVersion=function(e){if(null===this._crypto)throw new Error("End-to-end encryption disabled");this._crypto.backupInfo&&this._crypto.backupInfo.version===e&&this.disableKeyBackup();var t=ie.encodeUri("/room_keys/version/$version",{$version:e});return this._http.authedRequest(void 0,"DELETE",t,void 0,void 0)},s.prototype._makeKeyBackupPath=function(e,t,r){var n=void 0;return n=void 0!==t?ie.encodeUri("/room_keys/keys/$roomId/$sessionId",{$roomId:e,$sessionId:t}):void 0!==e?ie.encodeUri("/room_keys/keys/$roomId",{$roomId:e}):"/room_keys/keys",{path:n,queryData:void 0===r?void 0:{version:r}}},s.prototype.sendKeyBackup=function(e,t,r,n){if(null===this._crypto)throw new Error("End-to-end encryption disabled");var o=this._makeKeyBackupPath(e,t,r);return this._http.authedRequest(void 0,"PUT",o.path,o.queryData,n)},s.prototype.backupAllGroupSessions=function(e){if(null===this._crypto)throw new Error("End-to-end encryption disabled");return this._crypto.backupAllGroupSessions(e)},s.prototype.isValidRecoveryKey=function(e){try{return(0,W.decodeRecoveryKey)(e),!0}catch(e){return!1}},s.prototype.restoreKeyBackupWithPassword=function(){var e=(0,C.coroutine)(A.default.mark(function e(t,r,n,o){var i,s;return A.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,(0,C.resolve)(this.getKeyBackupVersion());case 2:return i=e.sent,e.next=5,(0,C.resolve)((0,H.keyForExistingBackup)(i,t));case 5:return s=e.sent,e.abrupt("return",this._restoreKeyBackup(s,r,n,o));case 7:case"end":return e.stop()}},e,this)}));return function(t,r,n,o){return e.apply(this,arguments)}}(),s.prototype.restoreKeyBackupWithRecoveryKey=function(e,t,r,n){var o=(0,W.decodeRecoveryKey)(e);return this._restoreKeyBackup(o,t,r,n)},s.prototype._restoreKeyBackup=function(e,t,n,s){var a=this;if(null===this._crypto)throw new Error("End-to-end encryption disabled");var u=0,c=[],l=this._makeKeyBackupPath(t,n,s),d=new r.Olm.PkDecryption;try{d.init_with_private_key(e)}catch(e){throw d.free(),e}return this._http.authedRequest(void 0,"GET",l.path,l.queryData).then(function(e){if(e.rooms){var r=!0,s=!1,l=void 0;try{for(var f,p=(0,N.default)((0,L.default)(e.rooms));!(r=(f=p.next()).done);r=!0){var h=(0,M.default)(f.value,2),v=h[0],m=h[1];if(m.sessions){u+=(0,x.default)(m.sessions).length;var y=o(m.sessions,d,v),_=!0,g=!1,b=void 0;try{for(var E,w=(0,N.default)(y);!(_=(E=w.next()).done);_=!0){var S=E.value;S.room_id=v,c.push(S)}}catch(e){g=!0,b=e}finally{try{!_&&w.return&&w.return()}finally{if(g)throw b}}}}}catch(e){s=!0,l=e}finally{try{!r&&p.return&&p.return()}finally{if(s)throw l}}}else if(e.sessions)u=(0,x.default)(e.sessions).length,c=o(e.sessions,d,t);else{u=1;try{var k=i(e,d);k.room_id=t,k.session_id=n,c.push(k)}catch(e){console.log("Failed to decrypt session from backup")}}return a.importRoomKeys(c)}).then(function(){return{total:u,imported:c.length}}).finally(function(){d.free()})},s.prototype.deleteKeysFromBackup=function(e,t,r){if(null===this._crypto)throw new Error("End-to-end encryption disabled");var n=this._makeKeyBackupPath(e,t,r);return this._http.authedRequest(void 0,"DELETE",n.path,n.queryData)},s.prototype.getGroup=function(e){return this.store.getGroup(e)},s.prototype.getGroups=function(){return this.store.getGroups()},s.prototype.getMediaConfig=function(e){return this._http.authedRequestWithPrefix(e,"GET","/config",void 0,void 0,X.PREFIX_MEDIA_R0)},s.prototype.getRoom=function(e){return this.store.getRoom(e)},s.prototype.getRooms=function(){return this.store.getRooms()},s.prototype.getVisibleRooms=function(){var e=this.store.getRooms(),t=new k.default,r=!0,n=!1,o=void 0;try{for(var i,s=(0,N.default)(e);!(r=(i=s.next()).done);r=!0){var a=i.value,u=a.currentState.getStateEvents("m.room.create","");if(u){var c=u.getContent().predecessor;c&&c.room_id&&t.add(c.room_id)}}}catch(e){n=!0,o=e}finally{try{!r&&s.return&&s.return()}finally{if(n)throw o}}return e.filter(function(e){return!e.currentState.getStateEvents("m.room.tombstone","")||!t.has(e.roomId)})},s.prototype.getUser=function(e){return this.store.getUser(e)},s.prototype.getUsers=function(){return this.store.getUsers()},s.prototype.setAccountData=function(e,t,r){var n=ie.encodeUri("/user/$userId/account_data/$type",{$userId:this.credentials.userId,$type:e});return this._http.authedRequest(r,"PUT",n,void 0,t)},s.prototype.getAccountData=function(e){return this.store.getAccountData(e)},s.prototype.getIgnoredUsers=function(){var e=this.getAccountData("m.ignored_user_list");return e&&e.getContent()&&e.getContent().ignored_users?(0,x.default)(e.getContent().ignored_users):[]},s.prototype.setIgnoredUsers=function(e,t){var r={ignored_users:{}};return e.map(function(e){return r.ignored_users[e]={}}),this.setAccountData("m.ignored_user_list",r,t)},s.prototype.isUserIgnored=function(e){return-1!==this.getIgnoredUsers().indexOf(e)},s.prototype.joinRoom=function(e,t,r){if(ie.isFunction(t))throw new Error("Expected 'opts' object, got function.");t=t||{},void 0===t.syncRoom&&(t.syncRoom=!0);var n=this.getRoom(e);if(n&&n.hasMembershipState(this.credentials.userId,"join"))return j.default.resolve(n);var o=j.default.resolve();t.inviteSignUrl&&(o=this._http.requestOtherUrl(void 0,"POST",t.inviteSignUrl,{mxid:this.credentials.userId}));var i={};t.viaServers&&(i.server_name=t.viaServers);var s={qsStringifyOptions:{arrayFormat:"repeat"}},a=j.default.defer(),u=this;return o.then(function(t){var r={};t&&(r.third_party_signed=t);var n=ie.encodeUri("/join/$roomid",{$roomid:e});return u._http.authedRequest(void 0,"POST",n,i,r,s)}).then(function(e){var r=e.room_id,n=new ue(u,u._clientOpts),o=n.createRoom(r);return t.syncRoom,j.default.resolve(o)}).done(function(e){y(r,a,e)},function(e){m(r,a,e)}),a.promise},s.prototype.resendEvent=function(e,t){return c(t,e,ee.SENDING),a(this,t,e)},s.prototype.cancelPendingEvent=function(e){if([ee.QUEUED,ee.NOT_SENT].indexOf(e.status)<0)throw new Error("cannot cancel an event with status "+e.status);this.scheduler&&this.scheduler.removeEventFromQueue(e),c(this.getRoom(e.getRoomId()),e,ee.CANCELLED)},s.prototype.setRoomName=function(e,t,r){return this.sendStateEvent(e,"m.room.name",{name:t},void 0,r)},s.prototype.setRoomTopic=function(e,t,r){return this.sendStateEvent(e,"m.room.topic",{topic:t},void 0,r)},s.prototype.getRoomTags=function(e,t){var r=ie.encodeUri("/user/$userId/rooms/$roomId/tags/",{$userId:this.credentials.userId,$roomId:e});return this._http.authedRequest(t,"GET",r,void 0)},s.prototype.setRoomTag=function(e,t,r,n){var o=ie.encodeUri("/user/$userId/rooms/$roomId/tags/$tag",{$userId:this.credentials.userId,$roomId:e,$tag:t});return this._http.authedRequest(n,"PUT",o,void 0,r)},s.prototype.deleteRoomTag=function(e,t,r){var n=ie.encodeUri("/user/$userId/rooms/$roomId/tags/$tag",{$userId:this.credentials.userId,$roomId:e,$tag:t});return this._http.authedRequest(r,"DELETE",n,void 0,void 0)},s.prototype.setRoomAccountData=function(e,t,r,n){var o=ie.encodeUri("/user/$userId/rooms/$roomId/account_data/$type",{$userId:this.credentials.userId,$roomId:e,$type:t});return this._http.authedRequest(n,"PUT",o,void 0,r)},s.prototype.setPowerLevel=function(e,t,r,n,o){var i={users:{}};n&&"m.room.power_levels"===n.getType()&&(i=ie.deepCopy(n.getContent())),i.users[t]=r;var s=ie.encodeUri("/rooms/$roomId/state/m.room.power_levels",{$roomId:e});return this._http.authedRequest(o,"PUT",s,void 0,i)},s.prototype.sendEvent=function(e,t,r,n,o){ie.isFunction(n)&&(o=n,n=void 0),n||(n=this.makeTxnId()),console.log("sendEvent of type "+t+" in "+e+" with txnId "+n);var i=this.getRoom(e),s=new Z({event_id:"~"+e+":"+n,user_id:this.credentials.userId,room_id:e,type:t,origin_server_ts:(new Date).getTime(),content:r});return s._txnId=n,s.status=ee.SENDING,i&&i.addPendingEvent(s,n),s.status===ee.NOT_SENT?j.default.reject(new Error("Event blocked by other events not yet sent")):a(this,i,s,o)},s.prototype.sendMessage=function(e,t,r,n){return ie.isFunction(r)&&(n=r,r=void 0),this.sendEvent(e,"m.room.message",t,r,n)},s.prototype.sendTextMessage=function(e,t,r,n){var o=de.makeTextMessage(t);return this.sendMessage(e,o,r,n)},s.prototype.sendNotice=function(e,t,r,n){var o=de.makeNotice(t);return this.sendMessage(e,o,r,n)},s.prototype.sendEmoteMessage=function(e,t,r,n){var o=de.makeEmoteMessage(t);return this.sendMessage(e,o,r,n)},s.prototype.sendImageMessage=function(e,t,r,n,o){ie.isFunction(n)&&(o=n,n=void 0),n||(n="Image");var i={msgtype:"m.image",url:t,info:r,body:n};return this.sendMessage(e,i,o)},s.prototype.sendStickerMessage=function(e,t,r,n,o){ie.isFunction(n)&&(o=n,n=void 0),n||(n="Sticker");var i={url:t,info:r,body:n};return this.sendEvent(e,"m.sticker",i,o,void 0)},s.prototype.sendHtmlMessage=function(e,t,r,n){var o=de.makeHtmlMessage(t,r);return this.sendMessage(e,o,n)},s.prototype.sendHtmlNotice=function(e,t,r,n){var o=de.makeHtmlNotice(t,r);return this.sendMessage(e,o,n)},s.prototype.sendHtmlEmote=function(e,t,r,n){var o=de.makeHtmlEmote(t,r);return this.sendMessage(e,o,n)},s.prototype.sendReceipt=function(e,t,r){if(this.isGuest())return j.default.resolve({});var n=ie.encodeUri("/rooms/$roomId/receipt/$receiptType/$eventId",{$roomId:e.getRoomId(),$receiptType:t,$eventId:e.getId()}),o=this._http.authedRequest(r,"POST",n,void 0,{}),i=this.getRoom(e.getRoomId());return i&&i._addLocalEchoReceipt(this.credentials.userId,e,t),o},s.prototype.sendReadReceipt=function(e,t){return this.sendReceipt(e,"m.read",t)},s.prototype.setRoomReadMarkers=function(e,t,r){var n=t,o=void 0;if(r){o=r.getId();var i=this.getRoom(e);i&&i._addLocalEchoReceipt(this.credentials.userId,r,"m.read")}return this.setRoomReadMarkersHttpRequest(e,n,o)},s.prototype.getUrlPreview=function(e,t,r){var n=t+"_"+e,o=this.urlPreviewCache[n];if(o)return j.default.resolve(o);var i=this;return this._http.authedRequestWithPrefix(r,"GET","/preview_url",{url:e,ts:t},void 0,X.PREFIX_MEDIA_R0).then(function(e){return i.urlPreviewCache[n]=e,e})},s.prototype.sendTyping=function(e,t,r,n){if(this.isGuest())return j.default.resolve({});var o=ie.encodeUri("/rooms/$roomId/typing/$userId",{$roomId:e,$userId:this.credentials.userId}),i={typing:t};return t&&(i.timeout=r||2e4),this._http.authedRequest(n,"PUT",o,void 0,i)},s.prototype.invite=function(e,t,r){return f(this,e,t,"invite",void 0,r)},s.prototype.inviteByEmail=function(e,t,r){return this.inviteByThreePid(e,"email",t,r)},s.prototype.inviteByThreePid=function(e,t,r,n){var o=ie.encodeUri("/rooms/$roomId/invite",{$roomId:e}),i=this.getIdentityServerUrl(!0);return i?this._http.authedRequest(n,"POST",o,void 0,{id_server:i,medium:t,address:r}):j.default.reject(new le({error:"No supplied identity server URL",errcode:"ORG.MATRIX.JSSDK_MISSING_PARAM"}))},s.prototype.leave=function(e,t){return f(this,e,void 0,"leave",void 0,t)},s.prototype.ban=function(e,t,r,n){return f(this,e,t,"ban",r,n)},s.prototype.forget=function(e,t,r){void 0===t&&(t=!0);var n=f(this,e,void 0,"forget",void 0,r);if(!t)return n;var o=this;return n.then(function(t){return o.store.removeRoom(e),o.emit("deleteRoom",e),t})},s.prototype.unban=function(e,t,r){var n=ie.encodeUri("/rooms/$roomId/unban",{$roomId:e}),o={user_id:t};return this._http.authedRequest(r,"POST",n,void 0,o)},s.prototype.kick=function(e,t,r,n){return d(this,e,t,"leave",r,n)},s.prototype.getPushActionsForEvent=function(e){return e.getPushActions()||e.setPushActions(this._pushProcessor.actionsForEvent(e)),e.getPushActions()},s.prototype.setProfileInfo=function(e,t,r){var n=ie.encodeUri("/profile/$userId/$info",{$userId:this.credentials.userId,$info:e});return this._http.authedRequest(r,"PUT",n,void 0,t)},s.prototype.setDisplayName=function(e,t){return this.setProfileInfo("displayname",{displayname:e},t)},s.prototype.setAvatarUrl=function(e,t){return this.setProfileInfo("avatar_url",{avatar_url:e},t)},s.prototype.mxcUrlToHttp=function(e,t,r,n,o){return se.getHttpUriForMxc(this.baseUrl,e,t,r,n,o)},s.prototype.setPresence=function(e,t){var r=ie.encodeUri("/presence/$userId/status",{$userId:this.credentials.userId});if("string"==typeof e&&(e={presence:e}),-1==["offline","online","unavailable"].indexOf(e.presence))throw new Error("Bad presence value: "+e.presence);return this._http.authedRequest(t,"PUT",r,void 0,e)},s.prototype.getPresenceList=function(e){return p(e,this,void 0,"GET")},s.prototype.inviteToPresenceList=function(e,t){return p(e,this,{invite:t},"POST")},s.prototype.dropFromPresenceList=function(e,t){return p(e,this,{drop:t},"POST")},s.prototype.scrollback=function(e,t,r){ie.isFunction(t)&&(r=t,t=void 0),t=t||30;var n=0,o=this._ongoingScrollbacks[e.roomId]||{};if(o.promise)return o.promise;if(o.errorTs){var i=Date.now()-o.errorTs;n=Math.max(3e3-i,0)}if(null===e.oldState.paginationToken)return j.default.resolve(e);var s=this.store.scrollback(e,t).length;if(s===t)return j.default.resolve(e);t-=s;var a=j.default.defer();o={promise:a.promise,errorTs:null};var u=this;return j.default.delay(n).then(function(){return u._createMessagesRequest(e.roomId,e.oldState.paginationToken,t,"b")}).done(function(t){var n=ie.map(t.chunk,_(u));if(t.state){var o=ie.map(t.state,_(u));e.currentState.setUnknownStateEvents(o)}e.addEventsToTimeline(n,!0,e.getLiveTimeline()),e.oldState.paginationToken=t.end,0===t.chunk.length&&(e.oldState.paginationToken=null),u.store.storeEvents(e,n,t.end,!0),u._ongoingScrollbacks[e.roomId]=null,y(r,a,e)},function(t){u._ongoingScrollbacks[e.roomId]={errorTs:Date.now()},m(r,a,t)}),this._ongoingScrollbacks[e.roomId]=o,a.promise},s.prototype.getEventTimeline=function(e,t){if(!this.timelineSupport)throw new Error("timeline support is disabled. Set the 'timelineSupport' parameter to true when creating MatrixClient to enable it.");if(e.getTimelineForEvent(t))return j.default.resolve(e.getTimelineForEvent(t));var r=ie.encodeUri("/rooms/$roomId/context/$eventId",{$roomId:e.room.roomId,$eventId:t}),n=void 0;this._clientOpts.lazyLoadMembers&&(n={filter:(0,w.default)(ae.LAZY_LOADING_MESSAGES_FILTER)});var o=this;return o._http.authedRequest(void 0,"GET",r,n).then(function(r){if(!r.event)throw new Error("'event' not in '/context' result - homeserver too old?");if(e.getTimelineForEvent(t))return e.getTimelineForEvent(t);r.events_after.reverse();var n=r.events_after.concat([r.event]).concat(r.events_before),i=ie.map(n,o.getEventMapper()),s=e.getTimelineForEvent(i[0].getId());if(s){var a=ie.map(r.state,o.getEventMapper());s.getState(te.BACKWARDS).setUnknownStateEvents(a)}else s=e.addTimeline(),s.initialiseState(ie.map(r.state,o.getEventMapper())),s.getState(te.FORWARDS).paginationToken=r.end;return e.addEventsToTimeline(i,!0,s,r.start),e.getTimelineForEvent(t)||s})},s.prototype._createMessagesRequest=function(e,t,r,n){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:void 0,i=ie.encodeUri("/rooms/$roomId/messages",{$roomId:e});void 0===r&&(r=30);var s={from:t,limit:r,dir:n},a=null;return this._clientOpts.lazyLoadMembers&&(a=(0,b.default)({},ae.LAZY_LOADING_MESSAGES_FILTER)),o&&(a=a||{},(0,b.default)(a,o.getRoomTimelineFilterComponent())),a&&(s.filter=(0,w.default)(a)),this._http.authedRequest(void 0,"GET",i,s)},s.prototype.paginateEventTimeline=function(e,t){var r=e.getTimelineSet()===this._notifTimelineSet;t=t||{};var n=t.backwards||!1;if(r&&!n)throw new Error("paginateNotifTimeline can only paginate backwards");var o=n?te.BACKWARDS:te.FORWARDS,i=e.getPaginationToken(o);if(!i)return j.default.resolve(!1);var s=e._paginationRequests[o];if(s)return s;var a=void 0,u=void 0,c=void 0,l=this;if(r)a="/notifications",u={limit:"limit"in t?t.limit:30,only:"highlight"},i&&"end"!==i&&(u.from=i),c=this._http.authedRequestWithPrefix(void 0,"GET",a,u,void 0,X.PREFIX_UNSTABLE).then(function(t){for(var r=t.next_token,i=[],s=0;s0&&(u="/_matrix/media/v1/thumbnail/");var l=a.indexOf("#"),d="";return l>=0&&(d=a.substr(l),a=a.substr(0,l)),e+u+a+(0===n.keys(c).length?"":"?"+n.encodeParams(c))+d},getIdenticonUri:function(e,t,r,o){if(!t)return null;r||(r=96),o||(o=96);var i={width:r,height:o};return e+n.encodeUri("/_matrix/media/v1/identicon/$ident",{$ident:t})+(0===n.keys(i).length?"":"?"+n.encodeParams(i))}}},{"./utils":55}],7:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(r,"__esModule",{value:!0});var o=e("babel-runtime/helpers/slicedToArray"),i=n(o),s=e("babel-runtime/core-js/object/entries"),a=n(s),u=e("bluebird"),c=n(u),l=e("babel-runtime/regenerator"),d=n(l),f=e("babel-runtime/core-js/object/keys"),p=n(f),h=e("babel-runtime/core-js/get-iterator"),v=n(h),m=e("babel-runtime/helpers/classCallCheck"),y=n(m),_=e("babel-runtime/helpers/createClass"),g=n(_),b=function(){var e=(0,u.coroutine)(d.default.mark(function e(t,r,n,o){var i,s,a,c;return d.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:i=!1,e.t0=d.default.keys(n);case 2:if((e.t1=e.t0()).done){e.next=9;break}if(s=e.t1.value,n.hasOwnProperty(s)){e.next=6;break}return e.abrupt("continue",2);case 6: +s in o||(S.default.log("Device "+r+":"+s+" has been removed"),delete n[s],i=!0),e.next=2;break;case 9:e.t2=d.default.keys(o);case 10:if((e.t3=e.t2()).done){e.next=27;break}if(a=e.t3.value,o.hasOwnProperty(a)){e.next=14;break}return e.abrupt("continue",10);case 14:if(c=o[a],c.user_id===r){e.next=18;break}return S.default.warn("Mismatched user_id "+c.user_id+" in keys from "+r+":"+a),e.abrupt("continue",10);case 18:if(c.device_id===a){e.next=21;break}return S.default.warn("Mismatched device_id "+c.device_id+" in keys from "+r+":"+a),e.abrupt("continue",10);case 21:return e.next=23,(0,u.resolve)(E(t,n,c));case 23:if(!e.sent){e.next=25;break}i=!0;case 25:e.next=10;break;case 27:return e.abrupt("return",i);case 28:case"end":return e.stop()}},e,this)}));return function(t,r,n,o){return e.apply(this,arguments)}}(),E=function(){var e=(0,u.coroutine)(d.default.mark(function e(t,r,n){var o,i,s,a,c,l;return d.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(n.keys){e.next=2;break}return e.abrupt("return",!1);case 2:if(o=n.device_id,i=n.user_id,s="ed25519:"+o,a=n.keys[s]){e.next=9;break}return S.default.warn("Device "+i+":"+o+" has no ed25519 key"),e.abrupt("return",!1);case 9:return c=n.unsigned||{},e.prev=10,e.next=13,(0,u.resolve)(R.default.verifySignature(t,n,i,o,a));case 13:e.next=19;break;case 15:return e.prev=15,e.t0=e.catch(10),S.default.warn("Unable to verify signature on device "+i+":"+o+":"+e.t0),e.abrupt("return",!1);case 19:if(l=void 0,!(o in r)){e.next=27;break}if(l=r[o],l.getFingerprint()==a){e.next=25;break}return S.default.warn("Ed25519 key for device "+i+":"+o+" has changed"),e.abrupt("return",!1);case 25:e.next=28;break;case 27:r[o]=l=new T.default(o);case 28:return l.keys=n.keys||{},l.algorithms=n.algorithms||[],l.unsigned=c,e.abrupt("return",!0);case 32:case"end":return e.stop()}},e,this,[[10,15]])}));return function(t,r,n){return e.apply(this,arguments)}}(),w=e("../logger"),S=n(w),k=e("./deviceinfo"),T=n(k),x=e("./olmlib"),R=n(x),I=e("./store/indexeddb-crypto-store"),C=n(I),j=function(){function e(t,r,n,o){(0,y.default)(this,e),this._cryptoStore=r,this._sessionStore=n,this._devices={},this._userByIdentityKey={},this._deviceTrackingStatus={},this._syncToken=null,this._serialiser=new O(t,o,this),this._keyDownloadsInProgressByUser={},this._dirty=!1,this._savePromise=null,this._resolveSavePromise=null,this._savePromiseTime=null,this._saveTimer=null}return(0,g.default)(e,[{key:"load",value:function(){function e(){return t.apply(this,arguments)}var t=(0,u.coroutine)(d.default.mark(function e(){var t,r,n,o,i,s,a,c=this;return d.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return t=!1,e.next=3,(0,u.resolve)(this._cryptoStore.doTxn("readwrite",[C.default.STORE_DEVICE_DATA],function(e){c._cryptoStore.getEndToEndDeviceData(e,function(r){null===r?(S.default.log("Migrating e2e device data..."),c._devices=c._sessionStore.getAllEndToEndDevices()||{},c._deviceTrackingStatus=c._sessionStore.getEndToEndDeviceTrackingStatus()||{},c._syncToken=c._sessionStore.getEndToEndDeviceSyncToken(),c._cryptoStore.storeEndToEndDeviceData({devices:c._devices,trackingStatus:c._deviceTrackingStatus,syncToken:c._syncToken},e),t=!0):(c._devices=r?r.devices:{},c._deviceTrackingStatus=r?r.trackingStatus:{},c._syncToken=r?r.syncToken:null),c._userByIdentityKey={};var n=!0,o=!1,i=void 0;try{for(var s,a=(0,v.default)((0,p.default)(c._devices));!(n=(s=a.next()).done);n=!0){var u=s.value,l=c._devices[u],d=!0,f=!1,h=void 0;try{for(var m,y=(0,v.default)((0,p.default)(l));!(d=(m=y.next()).done);d=!0){var _=m.value,g=l[_].keys["curve25519:"+_];void 0!==g&&(c._userByIdentityKey[g]=u)}}catch(e){f=!0,h=e}finally{try{!d&&y.return&&y.return()}finally{if(f)throw h}}}}catch(e){o=!0,i=e}finally{try{!n&&a.return&&a.return()}finally{if(o)throw i}}})}));case 3:for(t&&this._sessionStore.removeEndToEndDeviceData(),r=!0,n=!1,o=void 0,e.prev=7,i=(0,v.default)((0,p.default)(this._deviceTrackingStatus));!(r=(s=i.next()).done);r=!0)a=s.value,2==this._deviceTrackingStatus[a]&&(this._deviceTrackingStatus[a]=1);e.next=15;break;case 11:e.prev=11,e.t0=e.catch(7),n=!0,o=e.t0;case 15:e.prev=15,e.prev=16,!r&&i.return&&i.return();case 18:if(e.prev=18,!n){e.next=21;break}throw o;case 21:return e.finish(18);case 22:return e.finish(15);case 23:case"end":return e.stop()}},e,this,[[7,11,15,23],[16,,18,22]])}));return e}()},{key:"stop",value:function(){null!==this._saveTimer&&clearTimeout(this._saveTimer)}},{key:"saveIfDirty",value:function(){function e(e){return t.apply(this,arguments)}var t=(0,u.method)(function(e){var t=this;if(!this._dirty)return c.default.resolve(!1);void 0===e&&(e=500);var r=Date.now+e;this._savePromiseTime&&rb)throw new Error("Message too long ("+e.length+" bytes). The maximum for an encrypted message is "+b+" bytes.")}function i(e,t){this._sessionStore=e,this._cryptoStore=t,this._pickleKey="DEFAULT_KEY",this.deviceCurve25519Key=null,this.deviceEd25519Key=null,this._maxOneTimeKeys=null,this._outboundGroupSessionStore={},this._inboundGroupSessionMessageIndexes={}}var s=e("babel-runtime/core-js/object/assign"),a=n(s),u=e("babel-runtime/core-js/get-iterator"),c=n(u),l=e("babel-runtime/core-js/object/keys"),d=n(l),f=e("babel-runtime/regenerator"),p=n(f),h=e("bluebird"),v=function(){var e=(0,h.coroutine)(p.default.mark(function e(t,r,n,o){return p.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,(0,h.resolve)(r.doTxn("readwrite",[g.default.STORE_ACCOUNT],function(e){r.getAccount(e,function(t){null!==t?o.unpickle(n,t):(o.create(),t=o.pickle(n),r.storeAccount(e,t))})}));case 2:case"end":return e.stop()}},e,this)}));return function(t,r,n,o){return e.apply(this,arguments)}}(),m=e("../logger"),y=n(m),_=e("./store/indexeddb-crypto-store"),g=n(_),b=49152;i.prototype.init=(0,h.coroutine)(p.default.mark(function e(){var t,n;return p.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,(0,h.resolve)(this._migrateFromSessionStore());case 2:return t=void 0,n=new r.Olm.Account,e.prev=4,e.next=7,(0,h.resolve)(v(this._sessionStore,this._cryptoStore,this._pickleKey,n));case 7:t=JSON.parse(n.identity_keys()),this._maxOneTimeKeys=n.max_number_of_one_time_keys();case 9:return e.prev=9,n.free(),e.finish(9);case 12:this.deviceCurve25519Key=t.curve25519,this.deviceEd25519Key=t.ed25519;case 14:case"end":return e.stop()}},e,this,[[4,,9,12]])})),i.getOlmVersion=function(){return r.Olm.get_library_version()},i.prototype._migrateFromSessionStore=(0,h.coroutine)(p.default.mark(function e(){var t,r,n,o=this;return p.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,(0,h.resolve)(this._cryptoStore.doTxn("readwrite",[g.default.STORE_ACCOUNT],function(e){o._cryptoStore.getAccount(e,function(t){null===t&&null!==(t=o._sessionStore.getEndToEndAccount())&&(y.default.log("Migrating account from session store"),o._cryptoStore.storeAccount(e,t))})}));case 2:if(this._sessionStore.removeEndToEndAccount(),t=this._sessionStore.getAllEndToEndSessions(),!((0,d.default)(t).length>0)){e.next=8;break}return e.next=7,(0,h.resolve)(this._cryptoStore.doTxn("readwrite",[g.default.STORE_SESSIONS],function(e){o._cryptoStore.countEndToEndSessions(e,function(r){if(r)return void y.default.log("Crypto store already has sessions: not migrating");var n=0,i=!0,s=!1,a=void 0;try{for(var u,l=(0,c.default)((0,d.default)(t));!(i=(u=l.next()).done);i=!0){var f=u.value,p=!0,h=!1,v=void 0;try{for(var m,_=(0,c.default)((0,d.default)(t[f]));!(p=(m=_.next()).done);p=!0){var g=m.value;n++,o._cryptoStore.storeEndToEndSession(f,g,t[f][g],e)}}catch(e){h=!0,v=e}finally{try{!p&&_.return&&_.return()}finally{if(h)throw v}}}}catch(e){s=!0,a=e}finally{try{!i&&l.return&&l.return()}finally{if(s)throw a}}y.default.log("Migrating "+n+" sessions from session store")})}));case 7:this._sessionStore.removeAllEndToEndSessions();case 8:if(r=this._sessionStore.getAllEndToEndInboundGroupSessionKeys(),!((0,d.default)(r).length>0)){e.next=14;break}return n=0,e.next=13,(0,h.resolve)(this._cryptoStore.doTxn("readwrite",[g.default.STORE_INBOUND_GROUP_SESSIONS],function(e){var t=!0,i=!1,s=void 0;try{for(var a,u=(0,c.default)(r);!(t=(a=u.next()).done);t=!0){var l=a.value;try{o._cryptoStore.addEndToEndInboundGroupSession(l.senderKey,l.sessionId,JSON.parse(o._sessionStore.getEndToEndInboundGroupSession(l.senderKey,l.sessionId)),e)}catch(e){y.default.warn("Failed to migrate session "+l.senderKey+"/"+l.sessionId+": "+e.stack||e)}++n}}catch(e){i=!0,s=e}finally{try{!t&&u.return&&u.return()}finally{if(i)throw s}}y.default.log("Migrated "+n+" inbound group sessions from session store")}));case 13:this._sessionStore.removeAllEndToEndInboundGroupSessions();case 14:case"end":return e.stop()}},e,this)})),i.prototype._getAccount=function(e,t){var n=this;this._cryptoStore.getAccount(e,function(e){var o=new r.Olm.Account;try{o.unpickle(n._pickleKey,e),t(o)}finally{o.free()}})},i.prototype._storeAccount=function(e,t){this._cryptoStore.storeAccount(e,t.pickle(this._pickleKey))},i.prototype._getSession=function(e,t,r,n){var o=this;this._cryptoStore.getEndToEndSession(e,t,r,function(e){o._unpickleSession(e,n)})},i.prototype._unpickleSession=function(e,t){var n=new r.Olm.Session;try{n.unpickle(this._pickleKey,e.session);t((0,a.default)({},e,{session:n}))}finally{n.free()}},i.prototype._saveSession=function(e,t,r){var n=t.session.session_id(),o=(0,a.default)(t,{session:t.session.pickle(this._pickleKey)});this._cryptoStore.storeEndToEndSession(e,n,o,r)},i.prototype._getUtility=function(e){var t=new r.Olm.Utility;try{return e(t)}finally{t.free()}},i.prototype.sign=function(){var e=(0,h.coroutine)(p.default.mark(function e(t){var r,n=this;return p.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return r=void 0,e.next=3,(0,h.resolve)(this._cryptoStore.doTxn("readonly",[g.default.STORE_ACCOUNT],function(e){n._getAccount(e,function(e){r=e.sign(t)})}));case 3:return e.abrupt("return",r);case 4:case"end":return e.stop()}},e,this)}));return function(t){return e.apply(this,arguments)}}(),i.prototype.getOneTimeKeys=(0,h.coroutine)(p.default.mark(function e(){var t,r=this;return p.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return t=void 0,e.next=3,(0,h.resolve)(this._cryptoStore.doTxn("readonly",[g.default.STORE_ACCOUNT],function(e){r._getAccount(e,function(e){t=JSON.parse(e.one_time_keys())})}));case 3:return e.abrupt("return",t);case 4:case"end":return e.stop()}},e,this)})),i.prototype.maxNumberOfOneTimeKeys=function(){return this._maxOneTimeKeys},i.prototype.markKeysAsPublished=(0,h.coroutine)(p.default.mark(function e(){var t=this;return p.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,(0,h.resolve)(this._cryptoStore.doTxn("readwrite",[g.default.STORE_ACCOUNT],function(e){t._getAccount(e,function(r){r.mark_keys_as_published(),t._storeAccount(e,r)})}));case 2:case"end":return e.stop()}},e,this)})),i.prototype.generateOneTimeKeys=function(e){var t=this;return this._cryptoStore.doTxn("readwrite",[g.default.STORE_ACCOUNT],function(r){t._getAccount(r,function(n){n.generate_one_time_keys(e),t._storeAccount(r,n)})})},i.prototype.createOutboundSession=function(){var e=(0,h.coroutine)(p.default.mark(function e(t,n){var o,i=this;return p.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return o=void 0,e.next=3,(0,h.resolve)(this._cryptoStore.doTxn("readwrite",[g.default.STORE_ACCOUNT,g.default.STORE_SESSIONS],function(e){i._getAccount(e,function(s){var a=new r.Olm.Session;try{a.create_outbound(s,t,n),o=a.session_id(),i._storeAccount(e,s);var u={session:a,lastReceivedMessageTs:Date.now()};i._saveSession(t,u,e)}finally{a.free()}})}));case 3:return e.abrupt("return",o);case 4:case"end":return e.stop()}},e,this)}));return function(t,r){return e.apply(this,arguments)}}(),i.prototype.createInboundSession=function(){var e=(0,h.coroutine)(p.default.mark(function e(t,n,o){var i,s=this;return p.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(0===n){e.next=2;break}throw new Error("Need messageType == 0 to create inbound session");case 2:return i=void 0,e.next=5,(0,h.resolve)(this._cryptoStore.doTxn("readwrite",[g.default.STORE_ACCOUNT,g.default.STORE_SESSIONS],function(e){s._getAccount(e,function(a){var u=new r.Olm.Session;try{u.create_inbound_from(a,t,o),a.remove_one_time_keys(u),s._storeAccount(e,a);var c=u.decrypt(n,o),l={session:u,lastReceivedMessageTs:Date.now()};s._saveSession(t,l,e),i={payload:c,session_id:u.session_id()}}finally{u.free()}})}));case 5:return e.abrupt("return",i);case 6:case"end":return e.stop()}},e,this)}));return function(t,r,n){return e.apply(this,arguments)}}(),i.prototype.getSessionIdsForDevice=function(){var e=(0,h.coroutine)(p.default.mark(function e(t){var r,n=this;return p.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return r=void 0,e.next=3,(0,h.resolve)(this._cryptoStore.doTxn("readonly",[g.default.STORE_SESSIONS],function(e){n._cryptoStore.getEndToEndSessions(t,e,function(e){r=(0,d.default)(e)})}));case 3:return e.abrupt("return",r);case 4:case"end":return e.stop()}},e,this)}));return function(t){return e.apply(this,arguments)}}(),i.prototype.getSessionIdForDevice=function(){var e=(0,h.coroutine)(p.default.mark(function e(t){var r,n,o,i,s,a,u;return p.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,(0,h.resolve)(this.getSessionInfoForDevice(t));case 2:if(r=e.sent,0!==r.length){e.next=5;break}return e.abrupt("return",null);case 5:for(n=0,o=1;ou||s===u&&i.sessionId1&&void 0!==arguments[1]&&arguments[1];return this._cryptoStore.getOutgoingRoomKeyRequest(e).then(function(n){if(n)switch(n.state){case _.CANCELLATION_PENDING:case _.CANCELLATION_PENDING_AND_WILL_RESEND:return;case _.UNSENT:return v.default.log("deleting unnecessary room key request for "+o(e)),t._cryptoStore.deleteOutgoingRoomKeyRequest(n.requestId,_.UNSENT);case _.SENT:var i=r?_.CANCELLATION_PENDING_AND_WILL_RESEND:_.CANCELLATION_PENDING;return t._cryptoStore.updateOutgoingRoomKeyRequest(n.requestId,_.SENT,{state:i,cancellationTxnId:t._baseApis.makeTxnId()}).then(function(n){if(!n)return void v.default.log("Tried to cancel room key request for "+o(e)+" but it was already cancelled in another tab");t._sendOutgoingRoomKeyRequestCancellation(n,r).catch(function(e){v.default.error("Error sending room key request cancellation; will retry later.",e),t._startTimer()}).then(function(){r&&t._startTimer()})});default:throw new Error("unhandled state: "+n.state)}})}},{key:"getOutgoingSentRoomKeyRequest",value:function(e,t){return this._cryptoStore.getOutgoingRoomKeyRequestsByTarget(e,t,[_.SENT])}},{key:"_startTimer",value:function(){var e=this;if(!this._sendOutgoingRoomKeyRequestsTimer){var r=function(){if(e._sendOutgoingRoomKeyRequestsRunning)throw new Error("RoomKeyRequestSend already in progress!");e._sendOutgoingRoomKeyRequestsRunning=!0,e._sendOutgoingRoomKeyRequests().finally(function(){e._sendOutgoingRoomKeyRequestsRunning=!1}).catch(function(e){v.default.warn("error in OutgoingRoomKeyRequestManager: "+e)}).done()};this._sendOutgoingRoomKeyRequestsTimer=t.setTimeout(r,500)}}},{key:"_sendOutgoingRoomKeyRequests",value:function(){var e=this;return this._clientRunning?(v.default.log("Looking for queued outgoing room key requests"),this._cryptoStore.getOutgoingRoomKeyRequestByState([_.CANCELLATION_PENDING,_.CANCELLATION_PENDING_AND_WILL_RESEND,_.UNSENT]).then(function(t){if(!t)return v.default.log("No more outgoing room key requests"),void(e._sendOutgoingRoomKeyRequestsTimer=null);var r=void 0;switch(t.state){case _.UNSENT:r=e._sendOutgoingRoomKeyRequest(t);break;case _.CANCELLATION_PENDING:r=e._sendOutgoingRoomKeyRequestCancellation(t);break;case _.CANCELLATION_PENDING_AND_WILL_RESEND:r=e._sendOutgoingRoomKeyRequestCancellation(t,!0)}return r.then(function(){return e._sendOutgoingRoomKeyRequests()}).catch(function(t){v.default.error("Error sending room key request; will retry later.",t),e._sendOutgoingRoomKeyRequestsTimer=null,e._startTimer()}).done()})):(this._sendOutgoingRoomKeyRequestsTimer=null,p.default.resolve())}},{key:"_sendOutgoingRoomKeyRequest",value:function(e){var t=this;v.default.log("Requesting keys for "+o(e.requestBody)+" from "+i(e.recipients)+"(id "+e.requestId+")");var r={action:"request",requesting_device_id:this._deviceId,request_id:e.requestId,body:e.requestBody};return this._sendMessageToDevices(r,e.recipients,e.requestId).then(function(){return t._cryptoStore.updateOutgoingRoomKeyRequest(e.requestId,_.UNSENT,{state:_.SENT})})}},{key:"_sendOutgoingRoomKeyRequestCancellation",value:function(e,t){var r=this;v.default.log("Sending cancellation for key request for "+o(e.requestBody)+" to "+i(e.recipients)+" (cancellation id "+e.cancellationTxnId+")");var n={action:"request_cancellation",requesting_device_id:this._deviceId,request_id:e.requestId};return this._sendMessageToDevices(n,e.recipients,e.cancellationTxnId).then(function(){return t?r._cryptoStore.updateOutgoingRoomKeyRequest(e.requestId,_.CANCELLATION_PENDING_AND_WILL_RESEND,{state:_.UNSENT}):r._cryptoStore.deleteOutgoingRoomKeyRequest(e.requestId,_.CANCELLATION_PENDING)})}},{key:"_sendMessageToDevices",value:function(e,t,r){var n={},o=!0,i=!1,s=void 0;try{for(var u,c=(0,a.default)(t);!(o=(u=c.next()).done);o=!0){var l=u.value;n[l.userId]||(n[l.userId]={}),n[l.userId][l.deviceId]=e}}catch(e){i=!0,s=e}finally{try{!o&&c.return&&c.return()}finally{if(i)throw s}}return this._baseApis.sendToDevice("m.room_key_request",n,r)}}]),e}();r.default=g}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../logger":29,"../utils":55,"babel-runtime/core-js/get-iterator":58,"babel-runtime/helpers/classCallCheck":79,"babel-runtime/helpers/createClass":80,bluebird:89}],10:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(r,"__esModule",{value:!0});var o=e("babel-runtime/regenerator"),i=n(o),s=e("babel-runtime/core-js/get-iterator"),a=n(s),u=e("babel-runtime/core-js/object/keys"),c=n(u),l=e("bluebird"),d=e("babel-runtime/helpers/classCallCheck"),f=n(d),p=e("babel-runtime/helpers/createClass"),h=n(p),v=e("./store/indexeddb-crypto-store"),m=n(v),y=function(){function e(t,r){(0,f.default)(this,e),this._cryptoStore=t,this._sessionStore=r,this._roomEncryption={}}return(0,h.default)(e,[{key:"init",value:function(){function e(){return t.apply(this,arguments)}var t=(0,l.coroutine)(i.default.mark(function e(){var t,r=this;return i.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return t=!1,e.next=3,(0,l.resolve)(this._cryptoStore.doTxn("readwrite",[m.default.STORE_ROOMS],function(e){r._cryptoStore.getEndToEndRooms(e,function(n){if(null===n||0===(0,c.default)(n).length){var o=r._sessionStore.getAllEndToEndRooms();if(null!==o){var i=!0,s=!1,u=void 0;try{for(var l,d=(0,a.default)((0,c.default)(o));!(i=(l=d.next()).done);i=!0){var f=l.value;r._cryptoStore.storeEndToEndRoom(f,o[f],e)}}catch(e){s=!0,u=e}finally{try{!i&&d.return&&d.return()}finally{if(s)throw u}}}r._roomEncryption=o,t=!0}else r._roomEncryption=n})}));case 3:t&&this._sessionStore.removeAllEndToEndRooms();case 4:case"end":return e.stop()}},e,this)}));return e}()},{key:"getRoomEncryption",value:function(e){return this._roomEncryption[e]||null}},{key:"isRoomEncrypted",value:function(e){return Boolean(this.getRoomEncryption(e))}},{key:"setRoomEncryption",value:function(){function e(e,r){return t.apply(this,arguments)}var t=(0,l.coroutine)(i.default.mark(function e(t,r){var n=this;return i.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return this._roomEncryption[t]=r,e.next=3,(0,l.resolve)(this._cryptoStore.doTxn("readwrite",[m.default.STORE_ROOMS],function(e){n._cryptoStore.storeEndToEndRoom(t,r,e)}));case 3:case"end":return e.stop()}},e,this)}));return e}()}]),e}();r.default=y},{"./store/indexeddb-crypto-store":21,"babel-runtime/core-js/get-iterator":58,"babel-runtime/core-js/object/keys":69,"babel-runtime/helpers/classCallCheck":79,"babel-runtime/helpers/createClass":80,"babel-runtime/regenerator":86,bluebird:89}],11:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function o(e,t){var r=e.name+"[msg: "+e.message;return t&&(r+=", "+(0,a.default)(t).map(function(e){return e+": "+t[e]}).join(", ")),r+="]"}function i(e,t,r){b[e]=t,E[e]=r}Object.defineProperty(r,"__esModule",{value:!0}),r.UnknownDeviceError=r.DecryptionError=r.DecryptionAlgorithm=r.EncryptionAlgorithm=r.DECRYPTION_CLASSES=r.ENCRYPTION_CLASSES=void 0;var s=e("babel-runtime/core-js/object/keys"),a=n(s),u=e("babel-runtime/core-js/object/get-prototype-of"),c=n(u),l=e("babel-runtime/helpers/possibleConstructorReturn"),d=n(l),f=e("babel-runtime/helpers/inherits"),p=n(f),h=e("babel-runtime/helpers/classCallCheck"),v=n(h),m=e("babel-runtime/helpers/createClass"),y=n(m);r.registerAlgorithm=i;var _=e("bluebird"),g=n(_),b=r.ENCRYPTION_CLASSES={},E=r.DECRYPTION_CLASSES={},w=function(){function e(t){(0,v.default)(this,e),this._userId=t.userId,this._deviceId=t.deviceId,this._crypto=t.crypto,this._olmDevice=t.olmDevice,this._baseApis=t.baseApis,this._roomId=t.roomId}return(0,y.default)(e,[{key:"onRoomMembership",value:function(e,t,r){}}]),e}();r.EncryptionAlgorithm=w;var S=function(){function e(t){(0,v.default)(this,e),this._userId=t.userId,this._crypto=t.crypto,this._olmDevice=t.olmDevice,this._baseApis=t.baseApis,this._roomId=t.roomId}return(0,y.default)(e,[{key:"onRoomKeyEvent",value:function(e){}},{key:"importRoomKey",value:function(e){}},{key:"hasKeysForKeyRequest",value:function(e){return g.default.resolve(!1)}},{key:"shareKeysWithDevice",value:function(e){throw new Error("shareKeysWithDevice not supported for this DecryptionAlgorithm")}}]),e}();r.DecryptionAlgorithm=S;var k=function(e){function t(e,r,n){(0,v.default)(this,t);var i=(0,d.default)(this,(t.__proto__||(0,c.default)(t)).call(this,r));return i.code=e,i.name="DecryptionError",i.detailedString=o(i,n),i}return(0,p.default)(t,e),t}(Error);r.DecryptionError=k;r.UnknownDeviceError=function(e){function t(e,r){(0,v.default)(this,t);var n=(0,d.default)(this,(t.__proto__||(0,c.default)(t)).call(this,e));return n.name="UnknownDeviceError",n.devices=r,n}return(0,p.default)(t,e),t}(Error)},{"babel-runtime/core-js/object/get-prototype-of":68,"babel-runtime/core-js/object/keys":69,"babel-runtime/helpers/classCallCheck":79,"babel-runtime/helpers/createClass":80,"babel-runtime/helpers/inherits":82,"babel-runtime/helpers/possibleConstructorReturn":83,bluebird:89}],12:[function(e,t,r){"use strict";var n=e("./base");e("./olm"),e("./megolm"),t.exports.ENCRYPTION_CLASSES=n.ENCRYPTION_CLASSES,t.exports.DECRYPTION_CLASSES=n.DECRYPTION_CLASSES,t.exports.DecryptionError=n.DecryptionError},{"./base":11,"./megolm":13,"./olm":14}],13:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function o(e){this.sessionId=e,this.useCount=0,this.creationTime=(new Date).getTime(),this.sharedWithDevices={}}function i(e){k.EncryptionAlgorithm.call(this,e),this._setupPromise=b.default.resolve(),this._outboundSessions={},this._sessionRotationPeriodMsgs=100,this._sessionRotationPeriodMs=6048e5,void 0!==e.config.rotation_period_ms&&(this._sessionRotationPeriodMs=e.config.rotation_period_ms),void 0!==e.config.rotation_period_msgs&&(this._sessionRotationPeriodMsgs=e.config.rotation_period_msgs)}function s(e){k.DecryptionAlgorithm.call(this,e),this._pendingEvents={},this.olmlib=S}var a=e("babel-runtime/core-js/set"),u=n(a),c=e("babel-runtime/core-js/json/stringify"),l=n(c),d=e("babel-runtime/helpers/defineProperty"),f=n(d),p=e("babel-runtime/core-js/object/keys"),h=n(p),v=e("babel-runtime/core-js/get-iterator"),m=n(v),y=e("babel-runtime/regenerator"),_=n(y),g=e("bluebird"),b=n(g),E=e("../../logger"),w=e("../../utils"),S=e("../olmlib"),k=e("./base");o.prototype.needsRotation=function(e,t){var r=(new Date).getTime()-this.creationTime;return(this.useCount>=e||r>=t)&&(E.log("Rotating megolm session after "+this.useCount+" messages, "+r+"ms"),!0)},o.prototype.markSharedWithDevice=function(e,t,r){this.sharedWithDevices[e]||(this.sharedWithDevices[e]={}),this.sharedWithDevices[e][t]=r},o.prototype.sharedWithTooManyDevices=function(e){for(var t in this.sharedWithDevices)if(this.sharedWithDevices.hasOwnProperty(t)){if(!e.hasOwnProperty(t))return E.log("Starting new session because we shared with "+t),!0;for(var r in this.sharedWithDevices[t])if(this.sharedWithDevices[t].hasOwnProperty(r)&&!e[t].hasOwnProperty(r))return E.log("Starting new session because we shared with "+t+":"+r),!0}},w.inherits(i,k.EncryptionAlgorithm),i.prototype._ensureOutboundSession=function(e){function t(){return o}var r=function(){var t=(0,g.coroutine)(_.default.mark(function t(r){var i,s,a,u,c,l;return _.default.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(o=r,o&&o.needsRotation(n._sessionRotationPeriodMsgs,n._sessionRotationPeriodMs)&&(E.log("Starting new megolm session because we need to rotate."),o=null),o&&o.sharedWithTooManyDevices(e)&&(o=null),o){t.next=9;break}return E.log("Starting new megolm session for room "+n._roomId),t.next=7,(0,g.resolve)(n._prepareNewSession());case 7:o=t.sent,n._outboundSessions[o.sessionId]=o;case 9:i={},t.t0=_.default.keys(e);case 11:if((t.t1=t.t0()).done){t.next=30;break}if(s=t.t1.value,e.hasOwnProperty(s)){t.next=15;break}return t.abrupt("continue",11);case 15:a=e[s],t.t2=_.default.keys(a);case 17:if((t.t3=t.t2()).done){t.next=28;break}if(u=t.t3.value,a.hasOwnProperty(u)){t.next=21;break}return t.abrupt("continue",17);case 21:if(c=a[u],(l=c.getIdentityKey())!=n._olmDevice.deviceCurve25519Key){t.next=25;break}return t.abrupt("continue",17);case 25:o.sharedWithDevices[s]&&void 0!==o.sharedWithDevices[s][u]||(i[s]=i[s]||[],i[s].push(c)),t.next=17;break;case 28:t.next=11;break;case 30:return t.abrupt("return",n._shareKeyWithDevices(o,i));case 31:case"end":return t.stop()}},t,this)}));return function(e){return t.apply(this,arguments)}}(),n=this,o=void 0,i=this._setupPromise.then(r);return this._setupPromise=i.then(t,t),i.then(t)},i.prototype._prepareNewSession=(0,g.coroutine)(_.default.mark(function e(){var t,r;return _.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return t=this._olmDevice.createOutboundGroupSession(),r=this._olmDevice.getOutboundGroupSessionKey(t),e.next=4,(0,g.resolve)(this._olmDevice.addInboundGroupSession(this._roomId,this._olmDevice.deviceCurve25519Key,[],t,r.key,{ed25519:this._olmDevice.deviceEd25519Key}));case 4:return this._crypto.backupInfo&&this._crypto.backupGroupSession(this._roomId,this._olmDevice.deviceCurve25519Key,[],t,r.key).catch(function(e){console.log("Failed to back up group session",e)}),e.abrupt("return",new o(t));case 6:case"end":return e.stop()}},e,this)})),i.prototype._splitUserDeviceMap=function(e,t,r,n){var o=[],i=0,s=0,a=!0,u=!1,c=void 0;try{for(var l,d=(0,m.default)((0,h.default)(n));!(a=(l=d.next()).done);a=!0)for(var f=l.value,p=n[f],v=r[f],y=0;y20&&(s=0,i++),o[i]||(o[i]=[]),o[i].push({userId:f,deviceInfo:_}),s++):e.markSharedWithDevice(f,g,t)}}catch(e){u=!0,c=e}finally{try{!a&&d.return&&d.return()}finally{if(u)throw c}}return o},i.prototype._encryptAndSendKeysToDevices=function(e,t,r,n){for(var o=this,i={algorithm:S.OLM_ALGORITHM,sender_key:this._olmDevice.deviceCurve25519Key,ciphertext:{}},s={},a=[],u=0;u0)return null;var n=this._deviceList.getDeviceByIdentityKey(r,t);if(null===n)return null;var o=e.getClaimedEd25519Key();return o?o!==n.getFingerprint()?(M.warn("Event "+e.getId()+" claims ed25519 key "+o+"but sender device has key "+n.getFingerprint()),null):n:(M.warn("Event "+e.getId()+" claims no ed25519 key: cannot verify sending device"),null)},i.prototype.forceDiscardSession=function(e){var t=this._roomEncryptors[e];if(void 0===t)throw new Error("Room not encrypted");if(void 0===t.forceDiscardSession)throw new Error("Room encryption algorithm doesn't support session discarding");t.forceDiscardSession()},i.prototype.setRoomEncryption=function(){var e=(0,g.coroutine)(x.default.mark(function e(t,r,n){var o,i,s,a,u;return x.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!(o=this._roomList.getRoomEncryption(t))){e.next=5;break}if((0,_.default)(o)==(0,_.default)(r)){e.next=5;break}return M.error("Ignoring m.room.encryption event which requests a change of config in "+t),e.abrupt("return");case 5:if(!(i=this._roomEncryptors[t])){e.next=8;break}return e.abrupt("return");case 8:if(s=null,o||(s=this._roomList.setRoomEncryption(t,r)),a=N.ENCRYPTION_CLASSES[r.algorithm]){e.next=13;break}throw new Error("Unable to encrypt with "+r.algorithm);case 13:if(u=new a({userId:this._userId,deviceId:this._deviceId,crypto:this,olmDevice:this._olmDevice,baseApis:this._baseApis,roomId:t,config:r}),this._roomEncryptors[t]=u,!s){e.next=18;break}return e.next=18,(0,g.resolve)(s);case 18:if(this._lazyLoadMembers){e.next=25;break}return M.log("Enabling encryption in "+t+"; starting to track device lists for all users therein"),e.next=22,(0,g.resolve)(this.trackRoomDevices(t));case 22:this.inhibitDeviceQuery||this._deviceList.refreshOutdatedDeviceLists(),e.next=26;break;case 25:M.log("Enabling encryption in "+t);case 26:case"end":return e.stop()}},e,this)}));return function(t,r,n){return e.apply(this,arguments)}}(),i.prototype.trackRoomDevices=function(e){var t=this,r=function(){var r=(0,g.coroutine)(x.default.mark(function r(){var n,o;return x.default.wrap(function(r){for(;;)switch(r.prev=r.next){case 0:if(t._roomEncryptors[e]){r.next=2;break}return r.abrupt("return");case 2:if(n=t._clientStore.getRoom(e)){r.next=5;break}throw new Error("Unable to start tracking devices in unknown room "+e);case 5:return M.log("Starting to track devices for room "+e+" ..."),r.next=8,(0,g.resolve)(n.getEncryptionTargetMembers());case 8:o=r.sent,o.forEach(function(e){t._deviceList.startTrackingDeviceList(e.userId)});case 10:case"end":return r.stop()}},r,t)}));return function(){return r.apply(this,arguments)}}(),n=this._roomDeviceTrackingState[e];return n||(n=r(),this._roomDeviceTrackingState[e]=n),n},i.prototype.ensureOlmSessionsForUsers=function(e){for(var t={},r=0;rDate.now())){e.next=11;break}return M.debug("New session already forced with device "+n+":"+i+" at "+s+": not forcing another"),e.abrupt("return");case 11:if(a=this._deviceList.getDeviceByIdentityKey(o,i)){e.next=15;break}return M.info("Couldn't find device for identity key "+i+": not re-establishing session"),e.abrupt("return");case 15:return u={},u[n]=[a],e.next=19,(0,g.resolve)(U.ensureOlmSessionsForDevices(this._olmDevice,this._baseApis,u,!0));case 19:return this._lastNewSessionForced[n][i]=Date.now(),c={algorithm:U.OLM_ALGORITHM,sender_key:this._olmDevice.deviceCurve25519Key,ciphertext:{}},e.next=23,(0,g.resolve)(U.encryptMessageForDevice(c.ciphertext,this._userId,this._deviceId,this._olmDevice,n,a,{type:"m.dummy"}));case 23:return e.next=25,(0,g.resolve)(this._baseApis.sendToDevice("m.room.encrypted",(0,l.default)({},n,(0,l.default)({},a.deviceId,c))));case 25:return e.next=27,(0,g.resolve)(this._outgoingRoomKeyRequestManager.getOutgoingSentRoomKeyRequest(n,a.deviceId));case 27:for(d=e.sent,f=!0,p=!1,h=void 0,e.prev=31,v=(0,k.default)(d);!(f=(m=v.next()).done);f=!0)y=m.value,this.cancelRoomKeyRequest(y.requestBody,!0);e.next=39;break;case 35:e.prev=35,e.t0=e.catch(31),p=!0,h=e.t0;case 39:e.prev=39,e.prev=40,!f&&v.return&&v.return();case 42:if(e.prev=42,!p){e.next=45;break}throw h;case 45:return e.finish(42);case 46:return e.finish(39);case 47:case"end":return e.stop()}},e,this,[[31,35,39,47],[40,,42,46]])}));return function(t){return e.apply(this,arguments)}}(),i.prototype._onRoomMembership=function(e,t,r){var n=t.roomId,o=this._roomEncryptors[n];o&&(this._roomDeviceTrackingState[n]&&("join"==t.membership?(M.log("Join event for "+t.userId+" in "+n),this._deviceList.startTrackingDeviceList(t.userId)):"invite"==t.membership&&this._clientStore.getRoom(n).shouldEncryptForInvitedMembers()&&(M.log("Invite event for "+t.userId+" in "+n),this._deviceList.startTrackingDeviceList(t.userId))),o.onRoomMembership(e,t,r))},i.prototype._onRoomKeyRequestEvent=function(e){var t=e.getContent();if("request"===t.action){var r=new K(e);this._receivedRoomKeyRequests.push(r)}else if("request_cancellation"===t.action){var n=new G(e);this._receivedRoomKeyRequestCancellations.push(n)}},i.prototype._processReceivedRoomKeyRequests=(0,g.coroutine)(x.default.mark(function e(){var t,r,n=this;return x.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!this._processingRoomKeyRequests){e.next=2;break}return e.abrupt("return");case 2:return this._processingRoomKeyRequests=!0,e.prev=3,t=this._receivedRoomKeyRequests,this._receivedRoomKeyRequests=[],r=this._receivedRoomKeyRequestCancellations,this._receivedRoomKeyRequestCancellations=[],e.next=10,(0,g.resolve)(b.default.map(t,function(e){return n._processReceivedRoomKeyRequest(e)}));case 10:return e.next=12,(0,g.resolve)(b.default.map(r,function(e){return n._processReceivedRoomKeyRequestCancellation(e)}));case 12:e.next=17;break;case 14:e.prev=14,e.t0=e.catch(3),M.error("Error processing room key requsts: "+e.t0);case 17:return e.prev=17,this._processingRoomKeyRequests=!1,e.finish(17);case 20:case"end":return e.stop()}},e,this,[[3,14,17,20]])})),i.prototype._processReceivedRoomKeyRequest=function(){var e=(0,g.coroutine)(x.default.mark(function e(t){var r,n,o,i,s,a,u,c,l;return x.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(r=t.userId,n=t.deviceId,o=t.requestBody,i=o.room_id,s=o.algorithm,M.log("m.room_key_request from "+r+":"+n+" for "+i+" / "+o.session_id+" (id "+t.requestId+")"),r===this._userId){e.next=24;break}if(this._roomEncryptors[i]){e.next=10;break}return M.debug("room key request for unencrypted room "+i),e.abrupt("return");case 10:if(a=this._roomEncryptors[i],u=this._deviceList.getStoredDevice(r,n)){e.next=15;break}return M.debug("Ignoring keyshare for unknown device "+r+":"+n),e.abrupt("return");case 15:return e.prev=15,e.next=18,(0,g.resolve)(a.reshareKeyWithDevice(o.sender_key,o.session_id,r,u));case 18:e.next=23;break;case 20:e.prev=20, +e.t0=e.catch(15),M.warn("Failed to re-share keys for session "+o.session_id+" with device "+r+":"+u.deviceId,e.t0);case 23:return e.abrupt("return");case 24:if(this._roomDecryptors[i]){e.next=27;break}return M.log("room key request for unencrypted room "+i),e.abrupt("return");case 27:if(c=this._roomDecryptors[i][s]){e.next=31;break}return M.log("room key request for unknown alg "+s+" in room "+i),e.abrupt("return");case 31:return e.next=33,(0,g.resolve)(c.hasKeysForKeyRequest(t));case 33:if(e.sent){e.next=36;break}return M.log("room key request for unknown session "+i+" / "+o.session_id),e.abrupt("return");case 36:if(t.share=function(){c.shareKeysWithDevice(t)},!(l=this._deviceList.getStoredDevice(r,n))||!l.isVerified()){e.next=42;break}return M.log("device is already verified: sharing keys"),t.share(),e.abrupt("return");case 42:this.emit("crypto.roomKeyRequest",t);case 43:case"end":return e.stop()}},e,this,[[15,20]])}));return function(t){return e.apply(this,arguments)}}(),i.prototype._processReceivedRoomKeyRequestCancellation=function(){var e=(0,g.method)(function(e){M.log("m.room_key_request cancellation for "+e.userId+":"+e.deviceId+" (id "+e.requestId+")"),this.emit("crypto.roomKeyRequestCancellation",e)});return function(t){return e.apply(this,arguments)}}(),i.prototype._getRoomDecryptor=function(e,t){var r=void 0,n=void 0;if((e=e||null)&&(r=this._roomDecryptors[e],r||(this._roomDecryptors[e]=r={}),n=r[t]))return n;var o=N.DECRYPTION_CLASSES[t];if(!o)throw new N.DecryptionError("UNKNOWN_ENCRYPTION_ALGORITHM",'Unknown encryption algorithm "'+t+'".');return n=new o({userId:this._userId,crypto:this,olmDevice:this._olmDevice,baseApis:this._baseApis,roomId:e}),r&&(r[t]=n),n},i.prototype._signObject=function(){var e=(0,g.coroutine)(x.default.mark(function e(t){var r;return x.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return r={},r[this._userId]={},e.next=4,(0,g.resolve)(this._olmDevice.sign(D.stringify(t)));case 4:r[this._userId]["ed25519:"+this._deviceId]=e.sent,t.signatures=r;case 6:case"end":return e.stop()}},e,this)}));return function(t){return e.apply(this,arguments)}}();var K=function e(t){(0,u.default)(this,e);var r=t.getContent();this.userId=t.getSender(),this.deviceId=r.requesting_device_id,this.requestId=r.request_id,this.requestBody=r.body||{},this.share=function(){throw new Error("don't know how to share keys for this request yet")}},G=function e(t){(0,u.default)(this,e);var r=t.getContent();this.userId=t.getSender(),this.deviceId=r.requesting_device_id,this.requestId=r.request_id}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../logger":29,"../utils":55,"./DeviceList":7,"./OlmDevice":8,"./OutgoingRoomKeyRequestManager":9,"./algorithms":12,"./deviceinfo":16,"./olmlib":18,"./store/indexeddb-crypto-store":21,"another-json":57,"babel-runtime/core-js/get-iterator":58,"babel-runtime/core-js/json/stringify":60,"babel-runtime/core-js/object/assign":63,"babel-runtime/core-js/object/keys":69,"babel-runtime/core-js/set":76,"babel-runtime/helpers/classCallCheck":79,"babel-runtime/helpers/defineProperty":81,"babel-runtime/helpers/typeof":85,"babel-runtime/regenerator":86,bluebird:89,events:234}],18:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}var o=e("bluebird"),i=n(o),s=e("babel-runtime/regenerator"),a=n(s),u=e("babel-runtime/core-js/json/stringify"),c=n(u),l=function(){var e=(0,o.coroutine)(a.default.mark(function e(t,r,n,i){var s,u;return a.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return s=i.deviceId,e.prev=1,e.next=4,(0,o.resolve)(h(t,r,n,s,i.getFingerprint()));case 4:e.next=10;break;case 6:return e.prev=6,e.t0=e.catch(1),f.error("Unable to verify signature on one-time key for device "+n+":"+s+":",e.t0),e.abrupt("return",null);case 10:return u=void 0,e.prev=11,e.next=14,(0,o.resolve)(t.createOutboundSession(i.getIdentityKey(),r.key));case 14:u=e.sent,e.next=21;break;case 17:return e.prev=17,e.t1=e.catch(11),f.error("Error starting session with device "+n+":"+s+": "+e.t1),e.abrupt("return",null);case 21:return f.log("Started new sessionid "+u+" for device "+n+":"+s),e.abrupt("return",u);case 23:case"end":return e.stop()}},e,this,[[1,6],[11,17]])}));return function(t,r,n,o){return e.apply(this,arguments)}}(),d=e("another-json"),f=e("../logger"),p=e("../utils");t.exports.OLM_ALGORITHM="m.olm.v1.curve25519-aes-sha2",t.exports.MEGOLM_ALGORITHM="m.megolm.v1.aes-sha2",t.exports.MEGOLM_BACKUP_ALGORITHM="m.megolm_backup.v1.curve25519-aes-sha2",t.exports.encryptMessageForDevice=function(){var e=(0,o.coroutine)(a.default.mark(function e(t,r,n,i,s,u,l){var d,h,v;return a.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return d=u.getIdentityKey(),e.next=3,(0,o.resolve)(i.getSessionIdForDevice(d));case 3:if(null!==(h=e.sent)){e.next=6;break}return e.abrupt("return");case 6:return f.log("Using sessionid "+h+" for device "+s+":"+u.deviceId),v={sender:r,sender_device:n,keys:{ed25519:i.deviceEd25519Key},recipient:s,recipient_keys:{ed25519:u.getFingerprint()}},p.extend(v,l),e.next=11,(0,o.resolve)(i.encryptMessage(d,h,(0,c.default)(v)));case 11:t[d]=e.sent;case 12:case"end":return e.stop()}},e,this)}));return function(t,r,n,o,i,s,a){return e.apply(this,arguments)}}(),t.exports.ensureOlmSessionsForDevices=function(){var e=(0,o.coroutine)(a.default.mark(function e(t,r,n,s){var u,c,d,p,h,v,m,y,_,g,b,E,w,S,k,T;return a.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:u=[],c={},e.t0=a.default.keys(n);case 3:if((e.t1=e.t0()).done){e.next=24;break}if(d=e.t1.value,n.hasOwnProperty(d)){e.next=7;break}return e.abrupt("continue",3);case 7:c[d]={},p=n[d],h=0;case 10:if(!(h=e.length)){var s=e[r];o.target.source.openCursor(s).onsuccess=t}}if(0===e.length)return v.default.resolve(null);var r=0,n=void 0,o=this._db.transaction("outgoingRoomKeyRequests","readonly"),i=o.objectStore("outgoingRoomKeyRequests"),s=e[r];return i.index("state").openCursor(s).onsuccess=t,a(o).then(function(){return n})}},{key:"getOutgoingRoomKeyRequestsByTarget",value:function(e,t,r){function n(s){var a=s.target.result;if(a){var u=a.value;u.recipients.includes({userId:e,deviceId:t})&&i.push(u),a.continue()}else{if(++o>=r.length)return;var c=r[o];s.target.source.openCursor(c).onsuccess=n}}var o=0,i=[],s=this._db.transaction("outgoingRoomKeyRequests","readonly"),u=s.objectStore("outgoingRoomKeyRequests"),c=r[o];return u.index("state").openCursor(c).onsuccess=n,a(s).then(function(){return i})}},{key:"updateOutgoingRoomKeyRequest",value:function(e,t,r){function n(e){var n=e.target.result;if(n){var i=n.value;if(i.state!=t)return void y.default.warn("Cannot update room key request from "+t+" as it was already updated to "+i.state);(0,c.default)(i,r),n.update(i),o=i}}var o=null,i=this._db.transaction("outgoingRoomKeyRequests","readwrite");return i.objectStore("outgoingRoomKeyRequests").openCursor(e).onsuccess=n,a(i).then(function(){return o})}},{key:"deleteOutgoingRoomKeyRequest",value:function(e,t){var r=this._db.transaction("outgoingRoomKeyRequests","readwrite");return r.objectStore("outgoingRoomKeyRequests").openCursor(e).onsuccess=function(e){var r=e.target.result;if(r){var n=r.value;if(n.state!=t)return void y.default.warn("Cannot delete room key request in state "+n.state+" (expected "+t+")");r.delete()}},a(r)}},{key:"getAccount",value:function(e,t){var r=e.objectStore("account"),n=r.get("-");n.onsuccess=function(){try{t(n.result||null)}catch(t){s(e,t)}}}},{key:"storeAccount",value:function(e,t){e.objectStore("account").put(t,"-")}},{key:"countEndToEndSessions",value:function(e,t){var r=e.objectStore("sessions"),n=r.count();n.onsuccess=function(){t(n.result)}}},{key:"getEndToEndSessions",value:function(e,t,r){var n=t.objectStore("sessions"),o=n.index("deviceKey"),i=o.openCursor(e),a={};i.onsuccess=function(){var e=i.result;if(e)a[e.value.sessionId]={session:e.value.session,lastReceivedMessageTs:e.value.lastReceivedMessageTs},e.continue();else try{r(a)}catch(e){s(t,e)}}}},{key:"getEndToEndSession",value:function(e,t,r,n){var o=r.objectStore("sessions"),i=o.get([e,t]);i.onsuccess=function(){try{n(i.result?{session:i.result.session,lastReceivedMessageTs:i.result.lastReceivedMessageTs}:null)}catch(e){s(r,e)}}}},{key:"getAllEndToEndSessions",value:function(e,t){var r=e.objectStore("sessions"),n=r.openCursor();n.onsuccess=function(){var r=n.result;if(r)t(r.value),r.continue();else try{t(null)}catch(t){s(e,t)}}}},{key:"storeEndToEndSession",value:function(e,t,r,n){n.objectStore("sessions").put({deviceKey:e,sessionId:t,session:r.session,lastReceivedMessageTs:r.lastReceivedMessageTs})}},{key:"getEndToEndInboundGroupSession",value:function(e,t,r,n){var o=r.objectStore("inbound_group_sessions"),i=o.get([e,t]);i.onsuccess=function(){try{n(i.result?i.result.session:null)}catch(e){s(r,e)}}}},{key:"getAllEndToEndInboundGroupSessions",value:function(e,t){var r=e.objectStore("inbound_group_sessions"),n=r.openCursor();n.onsuccess=function(){var r=n.result;if(r){try{t({senderKey:r.value.senderCurve25519Key,sessionId:r.value.sessionId,sessionData:r.value.session})}catch(t){s(e,t)}r.continue()}else try{t(null)}catch(t){s(e,t)}}}},{key:"addEndToEndInboundGroupSession",value:function(e,t,r,n){var o=n.objectStore("inbound_group_sessions"),i=o.add({senderCurve25519Key:e,sessionId:t,session:r});i.onerror=function(r){"ConstraintError"===i.error.name?(r.stopPropagation(),r.preventDefault(),y.default.log("Ignoring duplicate inbound group session: "+e+" / "+t)):s(n,new Error("Failed to add inbound group session: "+i.error))}}},{key:"storeEndToEndInboundGroupSession",value:function(e,t,r,n){n.objectStore("inbound_group_sessions").put({senderCurve25519Key:e,sessionId:t,session:r})}},{key:"getEndToEndDeviceData",value:function(e,t){var r=e.objectStore("device_data"),n=r.get("-");n.onsuccess=function(){try{t(n.result||null)}catch(t){s(e,t)}}}},{key:"storeEndToEndDeviceData",value:function(e,t){t.objectStore("device_data").put(e,"-")}},{key:"storeEndToEndRoom",value:function(e,t,r){r.objectStore("rooms").put(t,e)}},{key:"getEndToEndRooms",value:function(e,t){var r={},n=e.objectStore("rooms"),o=n.openCursor();o.onsuccess=function(){var n=o.result;if(n)r[n.key]=n.value,n.continue();else try{t(r)}catch(t){s(e,t)}}}},{key:"getSessionsNeedingBackup",value:function(e){var t=this;return new v.default(function(r,n){var o=[],i=t._db.transaction(["sessions_needing_backup","inbound_group_sessions"],"readonly");i.onerror=n,i.oncomplete=function(){r(o)};var s=i.objectStore("sessions_needing_backup"),a=i.objectStore("inbound_group_sessions"),u=s.openCursor();u.onsuccess=function(){var t=u.result;if(t){var r=a.get(t.key);r.onsuccess=function(){o.push({senderKey:r.result.senderCurve25519Key,sessionId:r.result.sessionId,sessionData:r.result.session})},(!e||o.length=e)return"break"}();if("break"===i)break}return I.default.resolve(n)}},{key:"unmarkSessionsNeedingBackup",value:function(e){var t=a(this.store,N)||{},r=!0,n=!1,o=void 0;try{for(var i,s=(0,m.default)(e);!(r=(i=s.next()).done);r=!0){var c=i.value;delete t[c.senderKey+"/"+c.sessionId]}}catch(e){n=!0,o=e}finally{try{!r&&s.return&&s.return()}finally{if(n)throw o}}return u(this.store,N,t),I.default.resolve()}},{key:"markSessionsNeedingBackup",value:function(e){var t=a(this.store,N)||{},r=!0,n=!1,o=void 0;try{for(var i,s=(0,m.default)(e);!(r=(i=s.next()).done);r=!0){var c=i.value;t[c.senderKey+"/"+c.sessionId]=!0}}catch(e){n=!0,o=e}finally{try{!r&&s.return&&s.return()}finally{if(n)throw o}}return u(this.store,N,t),I.default.resolve()}},{key:"deleteAllData",value:function(){return this.store.removeItem(M),I.default.resolve()}},{key:"getAccount",value:function(e,t){t(a(this.store,M))}},{key:"storeAccount",value:function(e,t){u(this.store,M,t)}},{key:"doTxn",value:function(e,t,r){return I.default.resolve(r(null))}}]),t}(A.default);r.default=F},{"../../logger":29,"./memory-crypto-store.js":23,"babel-runtime/core-js/get-iterator":58,"babel-runtime/core-js/json/stringify":60,"babel-runtime/core-js/object/entries":66,"babel-runtime/core-js/object/get-prototype-of":68,"babel-runtime/helpers/classCallCheck":79,"babel-runtime/helpers/createClass":80,"babel-runtime/helpers/inherits":82,"babel-runtime/helpers/possibleConstructorReturn":83,"babel-runtime/helpers/slicedToArray":84,bluebird:89}],23:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(r,"__esModule",{value:!0});var o=e("babel-runtime/core-js/object/keys"),i=n(o),s=e("babel-runtime/core-js/object/assign"),a=n(s),u=e("babel-runtime/core-js/get-iterator"),c=n(u),l=e("babel-runtime/helpers/classCallCheck"),d=n(l),f=e("babel-runtime/helpers/createClass"),p=n(f),h=e("bluebird"),v=n(h),m=e("../../logger"),y=n(m),_=e("../../utils"),g=n(_),b=function(){function e(){(0,d.default)(this,e),this._outgoingRoomKeyRequests=[],this._account=null,this._sessions={},this._inboundGroupSessions={},this._deviceData=null,this._rooms={},this._sessionsNeedingBackup={}}return(0,p.default)(e,[{key:"deleteAllData",value:function(){return v.default.resolve()}},{key:"getOrAddOutgoingRoomKeyRequest",value:function(e){var t=this,r=e.requestBody;return v.default.try(function(){var n=t._getOutgoingRoomKeyRequest(r);return n?(y.default.log("already have key request outstanding for "+r.room_id+" / "+r.session_id+": not sending another"),n):(y.default.log("enqueueing key request for "+r.room_id+" / "+r.session_id),t._outgoingRoomKeyRequests.push(e),e)})}},{key:"getOutgoingRoomKeyRequest",value:function(e){return v.default.resolve(this._getOutgoingRoomKeyRequest(e))}},{key:"_getOutgoingRoomKeyRequest",value:function(e){var t=!0,r=!1,n=void 0;try{for(var o,i=(0,c.default)(this._outgoingRoomKeyRequests);!(t=(o=i.next()).done);t=!0){var s=o.value;if(g.default.deepCompare(s.requestBody,e))return s}}catch(e){r=!0,n=e}finally{try{!t&&i.return&&i.return()}finally{if(r)throw n}}return null}},{key:"getOutgoingRoomKeyRequestByState",value:function(e){var t=!0,r=!1,n=void 0;try{for(var o,i=(0,c.default)(this._outgoingRoomKeyRequests);!(t=(o=i.next()).done);t=!0){var s=o.value,a=!0,u=!1,l=void 0;try{for(var d,f=(0,c.default)(e);!(a=(d=f.next()).done);a=!0){var p=d.value;if(s.state===p)return v.default.resolve(s)}}catch(e){u=!0,l=e}finally{try{!a&&f.return&&f.return()}finally{if(u)throw l}}}}catch(e){r=!0,n=e}finally{try{!t&&i.return&&i.return()}finally{if(r)throw n}}return v.default.resolve(null)}},{key:"getOutgoingRoomKeyRequestsByTarget",value:function(e,t,r){var n=[],o=!0,i=!1,s=void 0;try{for(var a,u=(0,c.default)(this._outgoingRoomKeyRequests);!(o=(a=u.next()).done);o=!0){var l=a.value,d=!0,f=!1,p=void 0;try{for(var h,m=(0,c.default)(r);!(d=(h=m.next()).done);d=!0){var y=h.value;l.state===y&&l.recipients.includes({userId:e,deviceId:t})&&n.push(l)}}catch(e){f=!0,p=e}finally{try{!d&&m.return&&m.return()}finally{if(f)throw p}}}}catch(e){i=!0,s=e}finally{try{!o&&u.return&&u.return()}finally{if(i)throw s}}return v.default.resolve(n)}},{key:"updateOutgoingRoomKeyRequest",value:function(e,t,r){var n=!0,o=!1,i=void 0;try{for(var s,u=(0,c.default)(this._outgoingRoomKeyRequests);!(n=(s=u.next()).done);n=!0){var l=s.value;if(l.requestId===e)return l.state!=t?(y.default.warn("Cannot update room key request from "+t+" as it was already updated to "+l.state),v.default.resolve(null)):((0,a.default)(l,r),v.default.resolve(l))}}catch(e){o=!0,i=e}finally{try{!n&&u.return&&u.return()}finally{if(o)throw i}}return v.default.resolve(null)}},{key:"deleteOutgoingRoomKeyRequest",value:function(e,t){for(var r=0;r=e))break;return v.default.resolve(t)}},{key:"unmarkSessionsNeedingBackup",value:function(e){var t=!0,r=!1,n=void 0;try{for(var o,i=(0,c.default)(e);!(t=(o=i.next()).done);t=!0){var s=o.value,a=s.senderKey+"/"+s.sessionId;delete this._sessionsNeedingBackup[a]}}catch(e){r=!0,n=e}finally{try{!t&&i.return&&i.return()}finally{if(r)throw n}}return v.default.resolve()}},{key:"markSessionsNeedingBackup",value:function(e){var t=!0,r=!1,n=void 0;try{for(var o,i=(0,c.default)(e);!(t=(o=i.next()).done);t=!0){var s=o.value,a=s.senderKey+"/"+s.sessionId;this._sessionsNeedingBackup[a]=!0}}catch(e){r=!0,n=e}finally{try{!t&&i.return&&i.return()}finally{if(r)throw n}}return v.default.resolve()}},{key:"doTxn",value:function(e,t,r){return v.default.resolve(r(null))}}]),e}();r.default=b},{"../../logger":29,"../../utils":55,"babel-runtime/core-js/get-iterator":58,"babel-runtime/core-js/object/assign":63,"babel-runtime/core-js/object/keys":69,"babel-runtime/helpers/classCallCheck":79,"babel-runtime/helpers/createClass":80,bluebird:89}],24:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function o(e,t){var r="Store is invalid because "+e+", please stop the client, delete all data and start the client again",n=(0,p.default)(Error,[r]);return(0,d.default)(n,(0,c.default)(this)),n.reason=e,n.value=t,n}function i(e){var t="Crypto store is invalid because "+e+", please stop the client, delete all data and start the client again",r=(0,p.default)(Error,[t]);return(0,d.default)(r,(0,c.default)(this)),r.reason=e,r.name="InvalidCryptoStoreError",r}Object.defineProperty(r,"__esModule",{value:!0});var s=e("babel-runtime/core-js/object/create"),a=n(s),u=e("babel-runtime/core-js/reflect/get-prototype-of"),c=n(u),l=e("babel-runtime/core-js/reflect/set-prototype-of"),d=n(l),f=e("babel-runtime/core-js/reflect/construct"),p=n(f);r.InvalidStoreError=o,r.InvalidCryptoStoreError=i,o.TOGGLED_LAZY_LOADING="TOGGLED_LAZY_LOADING",o.prototype=(0,a.default)(Error.prototype,{constructor:{value:Error,enumerable:!1,writable:!0,configurable:!0}}),(0,d.default)(o,Error),i.TOO_NEW="TOO_NEW",i.prototype=(0,a.default)(Error.prototype,{constructor:{value:Error,enumerable:!1,writable:!0,configurable:!0}}),(0,d.default)(i,Error)},{"babel-runtime/core-js/object/create":64,"babel-runtime/core-js/reflect/construct":73,"babel-runtime/core-js/reflect/get-prototype-of":74,"babel-runtime/core-js/reflect/set-prototype-of":75}],25:[function(e,t,r){"use strict";function n(e,t){if(t.endsWith("*")){var r=t.slice(0,-1);return e.substr(0,r.length)===r}return e===t}function o(e){this.filter_json=e,this.types=e.types||null,this.not_types=e.not_types||[],this.rooms=e.rooms||null,this.not_rooms=e.not_rooms||[],this.senders=e.senders||null,this.not_senders=e.not_senders||[],this.contains_url=e.contains_url||null}var i=e("babel-runtime/core-js/object/keys"),s=function(e){return e&&e.__esModule?e:{default:e}}(i);o.prototype.check=function(e){return this._checkFields(e.getRoomId(),e.getSender(),e.getType(),!!e.getContent()&&void 0!==e.getContent().url)},o.prototype._checkFields=function(e,t,r,o){for(var i={rooms:function(t){return e===t},senders:function(e){return t===e},types:function(e){return n(r,e)}},a=this,u=0;u<(0,s.default)(i).length;u++){var c=(0,s.default)(i)[u],l=i[c];if(a["not_"+c].filter(l).length>0)return!1;var d=a[c];if(d&&!d.map(l))return!1}var f=this.filter_json.contains_url;return void 0===f||f===o},o.prototype.filter=function(e){return e.filter(this.check,this)},o.prototype.limit=function(){return void 0!==this.filter_json.limit?this.filter_json.limit:10},t.exports=o},{"babel-runtime/core-js/object/keys":69}],26:[function(e,t,r){"use strict";function n(e,t,r){for(var n=t.split("."),o=e,i=0;i0&&(b+="?"+E.join("&")),h.open("POST",b),this.useAuthorizationHeader&&h.setRequestHeader("Authorization","Bearer "+this.opts.accessToken),h.setRequestHeader("Content-Type",o),h.send(s),l=f.promise,l.abort=h.abort.bind(h)}else{var w={};n&&i&&(w.filename=i),l=this.authedRequest(t.callback,"POST","/upload",w,s,{prefix:"/_matrix/media/v1",headers:{"Content-Type":o},json:!1,bodyParser:d})}var S=this,k=l.finally(function(){for(var e=0;e=400?i=o(s,a):n&&(a=n(a))}catch(e){i=new Error("Error parsing server response: "+e)}if(i)e.reject(i),t(i);else{var u={code:s.statusCode,headers:s.headers,data:a};e.resolve(r?a:u),t(null,r?a:u)}}};t.exports.MatrixError=function(e){e=e||{},this.errcode=e.errcode,this.name=e.errcode||"Unknown error code",this.message=e.error||"Unknown message",this.data=e},t.exports.MatrixError.prototype=(0,a.default)(Error.prototype),t.exports.MatrixError.prototype.constructor=t.exports.MatrixError}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./realtime-callbacks":44,"./utils":55,"babel-runtime/core-js/json/stringify":60,"babel-runtime/core-js/object/create":64,"babel-runtime/helpers/typeof":85,bluebird:89,"content-type":94}],28:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function o(e){this._matrixClient=e.matrixClient,this._data=e.authData||{},this._requestCallback=e.doRequest,this._stateUpdatedCallback=e.stateUpdated||e.startAuthStage,this._completionDeferred=null,this._inputs=e.inputs||{},e.sessionId&&(this._data.session=e.sessionId),this._clientSecret=e.clientSecret||this._matrixClient.generateClientSecret(),this._emailSid=e.emailSid,void 0===this._emailSid&&(this._emailSid=null),this._currentStage=null}var i=e("babel-runtime/core-js/get-iterator"),s=n(i),a=e("babel-runtime/core-js/json/stringify"),u=n(a),c=e("bluebird"),l=n(c),d=e("url"),f=e("./utils");o.prototype={attemptAuth:function(){var e=this;return this._completionDeferred=l.default.defer(),l.default.resolve().then(function(){return e._data.flows?e._startNextAuthStage():e._doRequest(e._data),e._completionDeferred.promise})},poll:function(){if(this._data.session){var e={};if("m.login.email.identity"==this._currentStage&&this._emailSid){var t=d.parse(this._matrixClient.getIdentityServerUrl());e={type:"m.login.email.identity",threepid_creds:{sid:this._emailSid,client_secret:this._clientSecret,id_server:t.host}}}this.submitAuthDict(e,!0)}},getSessionId:function(){return this._data?this._data.session:void 0},getClientSecret:function(){return this._clientSecret},getStageParams:function(e){var t={};return this._data&&this._data.params&&(t=this._data.params),t[e]},submitAuthDict:function(e,t){if(!this._completionDeferred)throw new Error("submitAuthDict() called before attemptAuth()");var r={session:this._data.session};f.extend(r,e),this._doRequest(r,t)},getEmailSid:function(){return this._emailSid},setEmailSid:function(e){this._emailSid=e},_doRequest:function(e,t){var r=this,n=this,o=void 0;try{o=this._requestCallback(e,t)}catch(e){o=l.default.reject(e)}o=o.then(function(e){console.log("result from request: ",e),n._completionDeferred.resolve(e)},function(e){var t=e.data?e.data.flows:null,r=Boolean(n._data.flows)||Boolean(t);if(401!==e.httpStatus||!e.data||!r)throw e;e.data.flows||e.data.completed||e.data.session||(e.data.flows=n._data.flows,e.data.completed=n._data.completed,e.data.session=n._data.session),n._data=e.data,n._startNextAuthStage()}),o=t?o.catch(function(e){console.log("Ignoring error from UI auth: "+e)}):o.catch(function(e){r._completionDeferred.reject(e)}),o.done()},_startNextAuthStage:function(){var e=this._chooseStage();if(!e)throw new Error("No incomplete flows from the server");if(this._currentStage=e,"m.login.dummy"==e)return void this.submitAuthDict({type:"m.login.dummy"});if(this._data.errcode||this._data.error)return void this._stateUpdatedCallback(e,{errcode:this._data.errcode||"",error:this._data.error||""});var t={};"m.login.email.identity"==e&&(t.emailSid=this._emailSid),this._stateUpdatedCallback(e,t)},_chooseStage:function(){var e=this._chooseFlow();console.log("Active flow => %s",(0,u.default)(e));var t=this._firstUncompletedStage(e);return console.log("Next stage: %s",t),t},_chooseFlow:function(){var e=this._data.flows||[],t=Boolean(this._inputs.emailAddress)||Boolean(this._emailSid),r=Boolean(this._inputs.phoneCountry)&&Boolean(this._inputs.phoneNumber),n=!0,o=!1,i=void 0;try{for(var a,u=(0,s.default)(e);!(n=(a=u.next()).done);n=!0){var c=a.value,l=!1,d=!1,f=!0,p=!1,h=void 0;try{for(var v,m=(0,s.default)(c.stages);!(f=(v=m.next()).done);f=!0){var y=v.value;"m.login.email.identity"===y?l=!0:"m.login.msisdn"==y&&(d=!0)}}catch(_){p=!0,h=_}finally{try{!f&&m.return&&m.return()}finally{if(p)throw h}}if(l==t&&d==r)return c}}catch(_){o=!0,i=_}finally{try{!n&&u.return&&u.return()}finally{if(o)throw i}}var _=new Error("No appropriate authentication flow found");throw _.name="NoAuthFlowFoundError",_.required_stages=[],t&&_.required_stages.push("m.login.email.identity"),r&&_.required_stages.push("m.login.msisdn"),_.available_flows=e,_},_firstUncompletedStage:function(e){for(var t=(this._data||{}).completed||[],r=0;r0)throw new Error("Cannot initialise state after events are added");var t=!0,r=!1,n=void 0;try{for(var o,i=(0,u.default)(e);!(t=(o=i.next()).done);t=!0){var a=o.value;(0,s.default)(a)}}catch(e){r=!0,n=e}finally{try{!t&&i.return&&i.return()}finally{if(r)throw n}}this._startState.setStateEvents(e),this._endState.setStateEvents(e)},o.prototype.forkLive=function(e){var t=this.getState(e),r=new o(this._eventTimelineSet);return r._startState=t.clone(),r._endState=t,this._endState=t.clone(),r},o.prototype.fork=function(e){var t=this.getState(e),r=new o(this._eventTimelineSet);return r._startState=t.clone(),r._endState=t.clone(),r},o.prototype.getRoomId=function(){return this._roomId},o.prototype.getFilter=function(){return this._eventTimelineSet.getFilter()},o.prototype.getTimelineSet=function(){return this._eventTimelineSet},o.prototype.getBaseIndex=function(){return this._baseIndex},o.prototype.getEvents=function(){return this._events},o.prototype.getState=function(e){if(e==o.BACKWARDS)return this._startState;if(e==o.FORWARDS)return this._endState;throw new Error("Invalid direction '"+e+"'")},o.prototype.getPaginationToken=function(e){return this.getState(e).paginationToken},o.prototype.setPaginationToken=function(e,t){this.getState(t).paginationToken=e},o.prototype.getNeighbouringTimeline=function(e){if(e==o.BACKWARDS)return this._prevTimeline;if(e==o.FORWARDS)return this._nextTimeline;throw new Error("Invalid direction '"+e+"'")},o.prototype.setNeighbouringTimeline=function(e,t){if(this.getNeighbouringTimeline(t))throw new Error("timeline already has a neighbouring timeline - cannot reset neighbour");if(t==o.BACKWARDS)this._prevTimeline=e;else{if(t!=o.FORWARDS)throw new Error("Invalid direction '"+t+"'");this._nextTimeline=e}this.setPaginationToken(null,t)},o.prototype.addEvent=function(e,t){var r=t?this._startState:this._endState,n=this.getTimelineSet();n.room&&n.room.getUnfilteredTimelineSet()===n&&(o.setEventMetadata(e,r,t),e.isState()&&(r.setStateEvents([e]),e.sender&&("m.room.member"!==e.getType()||t)||o.setEventMetadata(e,r,t)));var i=void 0;i=t?0:this._events.length,this._events.splice(i,0,e),t&&this._baseIndex++},o.setEventMetadata=function(e,t,r){e.sender=t.getSentinelMember(e.getSender()),"m.room.member"===e.getType()&&(e.target=t.getSentinelMember(e.getStateKey())),e.isState()&&r&&(e.forwardLooking=!1)},o.prototype.removeEvent=function(e){for(var t=this._events.length-1;t>=0;t--){var r=this._events[t];if(r.getId()==e)return this._events.splice(t,1),t0&&(this.powerLevelNorm=100*this.powerLevel/r),n===this.powerLevel&&o===this.powerLevelNorm||(this._updateModifiedTime(),this.emit("RoomMember.powerLevel",e,this))}},n.prototype.setTypingEvent=function(e){if("m.typing"===e.getType()){var t=this.typing;this.typing=!1;var r=e.getContent().user_ids;a.isArray(r)&&(-1!==r.indexOf(this.userId)&&(this.typing=!0),t!==this.typing&&(this._updateModifiedTime(),this.emit("RoomMember.typing",e,this)))}},n.prototype._updateModifiedTime=function(){this._modified=Date.now()},n.prototype.getLastModifiedTime=function(){return this._modified},n.prototype.isKicked=function(){return"leave"===this.membership&&this.events.member.getSender()!==this.events.member.getStateKey()},n.prototype.getDMInviter=function(){if(this.events.member){var e=this.events.member,t=e.getContent(),r=e.getSender();if("join"===t.membership&&(t=e.getPrevContent(),r=e.getUnsigned().prev_sender),"invite"===t.membership&&t.is_direct)return r}},n.prototype.getAvatarUrl=function(e,t,r,n,o,i){void 0===o&&(o=!0);var a=this.getMxcAvatarUrl();if(!a&&!o)return null;var u=s.getHttpUriForMxc(e,a,t,r,n,i);return u||(o?s.getIdenticonUri(e,this.userId,t,r):null)},n.prototype.getMxcAvatarUrl=function(){return this.events.member?this.events.member.getDirectionalContent().avatar_url:this.user?this.user.avatarUrl:null},t.exports=n},{"../content-repo":6,"../utils":55,events:234}],37:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function o(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;this.roomId=e,this.members={},this.events={},this.paginationToken=null,this._sentinels={},this._updateModifiedTime(),this._displayNameToUserIds={},this._userIdsToDisplayNames={},this._tokenToInvite={},this._joinedMemberCount=null,this._summaryJoinedMemberCount=null,this._invitedMemberCount=null,this._summaryInvitedMemberCount=null,t||(t={status:m}),this._oobMemberFlags=t}function i(e,t){if(t.getContent().third_party_invite){var r=(t.getContent().third_party_invite.signed||{}).token;if(r){e.getStateEvents("m.room.third_party_invite",r)&&(e._tokenToInvite[r]=t)}}}function s(e,t,r){var n=e._userIdsToDisplayNames[t];if(delete e._userIdsToDisplayNames[t],n){var o=h.removeHiddenChars(n),i=e._displayNameToUserIds[o];if(i){var s=i.filter(function(e){return e!==t});e._displayNameToUserIds[o]=s}}e._userIdsToDisplayNames[t]=r;var a=r&&h.removeHiddenChars(r);a&&(e._displayNameToUserIds[a]||(e._displayNameToUserIds[a]=[]),e._displayNameToUserIds[a].push(t))}var a=e("babel-runtime/core-js/number/is-finite"),u=n(a),c=e("babel-runtime/core-js/object/keys"),l=n(c),d=e("babel-runtime/core-js/object/values"),f=n(d),p=e("events").EventEmitter,h=e("../utils"),v=e("./room-member"),m=1;h.inherits(o,p),o.prototype.getJoinedMemberCount=function(){return null!==this._summaryJoinedMemberCount?this._summaryJoinedMemberCount:(null===this._joinedMemberCount&&(this._joinedMemberCount=this.getMembers().reduce(function(e,t){return"join"===t.membership?e+1:e},0)),this._joinedMemberCount)},o.prototype.setJoinedMemberCount=function(e){this._summaryJoinedMemberCount=e},o.prototype.getInvitedMemberCount=function(){return null!==this._summaryInvitedMemberCount?this._summaryInvitedMemberCount:(null===this._invitedMemberCount&&(this._invitedMemberCount=this.getMembers().reduce(function(e,t){return"invite"===t.membership?e+1:e},0)),this._invitedMemberCount)},o.prototype.setInvitedMemberCount=function(e){this._summaryInvitedMemberCount=e},o.prototype.getMembers=function(){return h.values(this.members)},o.prototype.getMember=function(e){return this.members[e]||null},o.prototype.getSentinelMember=function(e){if(!e)return null;var t=this._sentinels[e];if(void 0===t){t=new v(this.roomId,e);var r=this.members[e];r&&t.setMembershipEvent(r.events.member,this),this._sentinels[e]=t}return t},o.prototype.getStateEvents=function(e,t){if(!this.events[e])return void 0===t?[]:null;if(void 0===t)return h.values(this.events[e]);var r=this.events[e][t];return r||null},o.prototype.clone=function(){var e=new o(this.roomId,this._oobMemberFlags),t=this._oobMemberFlags.status;return this._oobMemberFlags.status=m,(0,f.default)(this.events).forEach(function(t){var r=(0,f.default)(t);e.setStateEvents(r)}),this._oobMemberFlags.status=t,null!==this._summaryInvitedMemberCount&&e.setInvitedMemberCount(this.getInvitedMemberCount()),null!==this._summaryJoinedMemberCount&&e.setJoinedMemberCount(this.getJoinedMemberCount()),3==this._oobMemberFlags.status&&this.getMembers().forEach(function(t){if(t.isOutOfBand()){e.getMember(t.userId).markOutOfBand()}}),e},o.prototype.setUnknownStateEvents=function(e){var t=this,r=e.filter(function(e){return void 0===t.events[e.getType()]||void 0===t.events[e.getType()][e.getStateKey()]});this.setStateEvents(r)},o.prototype.setStateEvents=function(e){var t=this;this._updateModifiedTime(),h.forEach(e,function(e){e.getRoomId()===t.roomId&&e.isState()&&(t._setStateEvent(e),"m.room.member"===e.getType()&&(s(t,e.getStateKey(),e.getContent().displayname),i(t,e)),t.emit("RoomState.events",e,t))}),h.forEach(e,function(e){if(e.getRoomId()===t.roomId&&e.isState())if("m.room.member"===e.getType()){var r=e.getStateKey();"leave"!==e.getContent().membership&&"ban"!==e.getContent().membership||(e.getContent().avatar_url=e.getContent().avatar_url||e.getPrevContent().avatar_url,e.getContent().displayname=e.getContent().displayname||e.getPrevContent().displayname);var n=t._getOrCreateMember(r,e);n.setMembershipEvent(e,t),t._updateMember(n),t.emit("RoomState.members",e,t,n)}else if("m.room.power_levels"===e.getType()){var o=h.values(t.members);h.forEach(o,function(r){r.setPowerLevelEvent(e),t.emit("RoomState.members",e,t,r)}),t._sentinels={}}})},o.prototype._getOrCreateMember=function(e,t){var r=this.members[e];return r||(r=new v(this.roomId,e),this.members[e]=r,this.emit("RoomState.newMember",t,this,r)),r},o.prototype._setStateEvent=function(e){void 0===this.events[e.getType()]&&(this.events[e.getType()]={}),this.events[e.getType()][e.getStateKey()]=e},o.prototype._updateMember=function(e){var t=this.getStateEvents("m.room.power_levels","");t&&e.setPowerLevelEvent(t),delete this._sentinels[e.userId],this.members[e.userId]=e,this._joinedMemberCount=null,this._invitedMemberCount=null},o.prototype.needsOutOfBandMembers=function(){return this._oobMemberFlags.status===m},o.prototype.markOutOfBandMembersStarted=function(){this._oobMemberFlags.status===m&&(this._oobMemberFlags.status=2)},o.prototype.markOutOfBandMembersFailed=function(){2===this._oobMemberFlags.status&&(this._oobMemberFlags.status=m)},o.prototype.clearOutOfBandMembers=function(){var e=this,t=0;(0,l.default)(this.members).forEach(function(r){e.members[r].isOutOfBand()&&(++t,delete e.members[r])}),console.log("LL: RoomState removed "+t+" members..."),this._oobMemberFlags.status=m},o.prototype.setOutOfBandMembers=function(e){var t=this;console.log("LL: RoomState about to set "+e.length+" OOB members ..."),2===this._oobMemberFlags.status&&(console.log("LL: RoomState put in OOB_STATUS_FINISHED state ..."),this._oobMemberFlags.status=3,e.forEach(function(e){return t._setOutOfBandMember(e)}))},o.prototype._setOutOfBandMember=function(e){if("m.room.member"===e.getType()){var t=e.getStateKey(),r=this.getMember(t);if(!r||r.isOutOfBand()){var n=this._getOrCreateMember(t,e);n.setMembershipEvent(e,this),n.markOutOfBand(),s(this,n.userId,n.name),this._setStateEvent(e),this._updateMember(n),this.emit("RoomState.members",e,this,n)}}},o.prototype.setTypingEvent=function(e){h.forEach(h.values(this.members),function(t){t.setTypingEvent(e)})},o.prototype.getInviteForThreePidToken=function(e){return this._tokenToInvite[e]||null},o.prototype._updateModifiedTime=function(){this._modified=Date.now()},o.prototype.getLastModifiedTime=function(){return this._modified},o.prototype.getUserIdsWithDisplayName=function(e){return this._displayNameToUserIds[e]||[]},o.prototype.maySendRedactionForEvent=function(e,t){var r=this.getMember(t);if(!r||"leave"===r.membership)return!1;if(e.status||e.isRedacted())return!1;var n=this.maySendEvent("m.room.redaction",t);return e.getSender()===t?n:this._hasSufficientPowerLevelFor("redact",r.powerLevel)},o.prototype._hasSufficientPowerLevelFor=function(e,t){var r=this.getStateEvents("m.room.power_levels",""),n={};r&&(n=r.getContent());var o=50;return h.isNumber(n[e])&&(o=n[e]),t>=o},o.prototype.maySendMessage=function(e){return this._maySendEventOfType("m.room.message",e,!1)},o.prototype.maySendEvent=function(e,t){return this._maySendEventOfType(e,t,!1)},o.prototype.mayClientSendStateEvent=function(e,t){return!t.isGuest()&&this.maySendStateEvent(e,t.credentials.userId)},o.prototype.maySendStateEvent=function(e,t){return this._maySendEventOfType(e,t,!0)},o.prototype._maySendEventOfType=function(e,t,r){var n=this.getStateEvents("m.room.power_levels",""),o=void 0,i={},s=0,a=0,c=0;if(n){o=n.getContent(),i=o.events||{},s=(0,u.default)(o.state_default)?o.state_default:50;var l=o.users&&o.users[t];(0,u.default)(l)?c=l:(0,u.default)(o.users_default)&&(c=o.users_default),(0,u.default)(o.events_default)&&(a=o.events_default)}var d=r?s:a;return(0,u.default)(i[e])&&(d=i[e]),c>=d},o.prototype.mayTriggerNotifOfType=function(e,t){var r=this.getMember(t);if(!r)return!1;var n=this.getStateEvents("m.room.power_levels",""),o=50;return n&&n.getContent()&&n.getContent().notifications&&h.isNumber(n.getContent().notifications[e])&&(o=n.getContent().notifications[e]),r.powerLevel>=o},t.exports=o},{"../utils":55,"./room-member":36,"babel-runtime/core-js/number/is-finite":61,"babel-runtime/core-js/object/keys":69,"babel-runtime/core-js/object/values":71,events:234}],38:[function(e,t,r){"use strict";function n(e,t){this.roomId=e,this.info=t}t.exports=n},{}],39:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function o(e,t,r){var n={content:{},type:"m.receipt",room_id:t.getRoomId()};return n.content[t.getId()]={},n.content[t.getId()][r]={},n.content[t.getId()][r][e]={ts:t.getTs()},new S(n)}function i(e,t,r,n){if(n=n||{},n.pendingEventOrdering=n.pendingEventOrdering||"chronological",this.reEmitter=new _.default(this),-1===["chronological","detached"].indexOf(n.pendingEventOrdering))throw new Error("opts.pendingEventOrdering MUST be either 'chronological' or 'detached'. Got: '"+n.pendingEventOrdering+"'");this.myUserId=r,this.roomId=e,this.name=e,this.tags={},this.accountData={},this.summary=null,this.storageToken=n.storageToken,this._opts=n,this._txnToEvent={},this._receipts={},this._receiptCacheByEventId={},this._realReceipts={},this._notificationCounts={},this._timelineSets=[new R(this,n)],this.reEmitter.reEmit(this.getUnfilteredTimelineSet(),["Room.timeline","Room.timelineReset"]),this._fixUpLegacyTimelineFields(),this._filteredTimelineSets={},"detached"==this._opts.pendingEventOrdering&&(this._pendingEventList=[]),this._blacklistUnverifiedDevices=null,this._selfMembership=null,this._summaryHeroes=null,this._client=t,this._opts.lazyLoadMembers?this._membersPromise=null:this._membersPromise=m.default.resolve()}function s(e,t,r){if(!r){var n=e.currentState.getStateEvents("m.room.name","");if(n&&n.getContent()&&n.getContent().name)return n.getContent().name}var o=e.getCanonicalAlias();if(!o){var i=e.getAliases();i.length&&(o=i[0])}if(o)return o;var s=e.currentState.getJoinedMemberCount(),u=e.currentState.getInvitedMemberCount(),c=s+u-1,l=null;if(e._summaryHeroes)l=e._summaryHeroes.map(function(t){var r=e.getMember(t);return r?r.name:t});else{var d=e.currentState.getMembers().filter(function(e){return e.userId!==t&&("invite"===e.membership||"join"===e.membership)});d.sort(function(e,t){return e.userId.localeCompare(t.userId)}),d=d.slice(0,5),l=d.map(function(e){return e.name})}if(c)return a(l,c);if("join"==e.getMyMembership()){var f=e.currentState.getStateEvents("m.room.third_party_invite");if(f&&f.length)return"Inviting "+a(f.map(function(e){return e.getContent().display_name}))}var p=l;return p.length||(p=e.currentState.getMembers().filter(function(e){return e.userId!==t&&"invite"!==e.membership&&"join"!==e.membership}).map(function(e){return e.name})),p.length?"Empty room (was "+a(p)+")":"Empty room"}function a(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e.length+1,r=t-1;if(e.length){if(1===e.length&&r<=1)return e[0];if(2===e.length&&r<=2)return e[0]+" and "+e[1];return r>1?e[0]+" and "+r+" others":e[0]+" and 1 other"}return"Empty room"}var u=e("babel-runtime/core-js/object/assign"),c=n(u),l=e("babel-runtime/core-js/number/is-integer"),d=n(l),f=e("babel-runtime/regenerator"),p=n(f),h=e("bluebird"),v=e("babel-runtime/core-js/promise"),m=n(v),y=e("../ReEmitter"),_=n(y),g=e("events").EventEmitter,b=e("./event").EventStatus,E=e("./room-summary"),w=e("./room-member"),S=e("./event").MatrixEvent,k=e("../utils"),T=e("../content-repo"),x=e("./event-timeline"),R=e("./event-timeline-set");k.inherits(i,g),i.prototype.getVersion=function(){var e=this.currentState.getStateEvents("m.room.create","");if(!e)return console.warn("Room "+this.room_id+" does not have an m.room.create event"),"1";var t=e.getContent().room_version;return void 0===t?"1":t},i.prototype.shouldUpgradeToVersion=function(){return"1"===this.getVersion()?null:"1"},i.prototype.userMayUpgradeRoom=function(e){return this.currentState.maySendStateEvent("m.room.tombstone",e)},i.prototype.getPendingEvents=function(){if("detached"!==this._opts.pendingEventOrdering)throw new Error("Cannot call getPendingEventList with pendingEventOrdering == "+this._opts.pendingEventOrdering);return this._pendingEventList},i.prototype.getLiveTimeline=function(){return this.getUnfilteredTimelineSet().getLiveTimeline()},i.prototype.getMyMembership=function(){return this._selfMembership},i.prototype.getDMInviter=function(){if(this.myUserId){var e=this.getMember(this.myUserId);if(e)return e.getDMInviter()}if("invite"===this._selfMembership){if(2==this.getInvitedAndJoinedMemberCount()&&this._summaryHeroes.length)return this._summaryHeroes[0]}},i.prototype.guessDMUserId=function(){var e=this,t=this.getMember(this.myUserId);if(t){var r=t.getDMInviter();if(r)return r}if(Array.isArray(this._summaryHeroes)&&this._summaryHeroes.length)return this._summaryHeroes[0];var n=this.currentState.getMembers(),o=n.find(function(t){return t.userId!==e.myUserId});return o?o.userId:this.myUserId},i.prototype.getAvatarFallbackMember=function(){var e=this;if(!(this.getInvitedAndJoinedMemberCount()>2)){var t=Array.isArray(this._summaryHeroes)&&this._summaryHeroes.length;if(t){var r=this._summaryHeroes.map(function(t){return e.getMember(t)}).find(function(e){return!!e});if(r)return r}var n=this.currentState.getMembers();if(n.length<=2){var o=n.find(function(t){return t.userId!==e.myUserId});if(o)return o}if(t){var i=this._summaryHeroes.map(function(t){return e._client.getUser(t)}).find(function(e){return!!e});if(i){var s=new w(this.roomId,i.userId);return s.user=i,s}}}},i.prototype.updateMyMembership=function(e){var t=this._selfMembership;this._selfMembership=e,t!==e&&("leave"===e&&this._cleanupAfterLeaving(),this.emit("Room.myMembership",this,e,t))},i.prototype._loadMembersFromServer=(0,h.coroutine)(p.default.mark(function e(){var t,r,n,o,i;return p.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return t=this._client.store.getSyncToken(),r=k.encodeParams({not_membership:"leave",at:t}),n=k.encodeUri("/rooms/$roomId/members?"+r,{$roomId:this.roomId}),o=this._client._http,e.next=6,(0,h.resolve)(o.authedRequest(void 0,"GET",n));case 6:return i=e.sent,e.abrupt("return",i.chunk);case 8:case"end":return e.stop()}},e,this)})),i.prototype._loadMembers=(0,h.coroutine)(p.default.mark(function e(){var t,r,n;return p.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return t=!1,e.next=3,(0,h.resolve)(this._client.store.getOutOfBandMembers(this.roomId));case 3:if(null!==(r=e.sent)){e.next=10;break}return t=!0,e.next=8,(0,h.resolve)(this._loadMembersFromServer());case 8:r=e.sent,console.log("LL: got "+r.length+" members from server for room "+this.roomId);case 10:return n=r.map(this._client.getEventMapper()),e.abrupt("return",{memberEvents:n,fromServer:t});case 12:case"end":return e.stop()}},e,this)})),i.prototype.loadMembersIfNeeded=function(){var e=this;if(this._membersPromise)return this._membersPromise;this.currentState.markOutOfBandMembersStarted();var t=this._loadMembers().then(function(t){return e.currentState.setOutOfBandMembers(t.memberEvents),e._client.isRoomEncrypted(e.roomId)&&e._client._crypto.trackRoomDevices(e.roomId),t.fromServer}).catch(function(t){throw e._membersPromise=null,e.currentState.markOutOfBandMembersFailed(),t});return t.then(function(t){if(t){var r=e.currentState.getMembers().filter(function(e){return e.isOutOfBand()}).map(function(e){return e.events.member.event});console.log("LL: telling store to write "+r.length+" members for room "+e.roomId);return e._client.store.setOutOfBandMembers(e.roomId,r).catch(function(e){console.log("LL: storing OOB room members failed, oh well",e)})}}).catch(function(e){console.error(e)}),this._membersPromise=t,this._membersPromise},i.prototype.clearLoadedMembersIfNeeded=(0,h.coroutine)(p.default.mark(function e(){return p.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!this._opts.lazyLoadMembers||!this._membersPromise){e.next=7;break}return e.next=3,(0,h.resolve)(this.loadMembersIfNeeded());case 3:return e.next=5,(0,h.resolve)(this._client.store.clearOutOfBandMembers(this.roomId));case 5:this.currentState.clearOutOfBandMembers(),this._membersPromise=null;case 7:case"end":return e.stop()}},e,this)})),i.prototype._cleanupAfterLeaving=function(){var e=this;this.clearLoadedMembersIfNeeded().catch(function(t){console.error("error after clearing loaded members from room "+e.roomId+" after leaving"),console.dir(t)})},i.prototype.resetLiveTimeline=function(e,t){for(var r=0;r-1&&this._timelineSets.splice(r,1)},i.prototype._addLiveEvent=function(e,t){var r=void 0;if("m.room.redaction"===e.getType()){var n=e.event.redacts,i=this.getUnfilteredTimelineSet().findEventById(n);i&&(i.makeRedacted(e),this.emit("Room.redaction",e,this))}if(e.getUnsigned().transaction_id){var s=this._txnToEvent[e.getUnsigned().transaction_id];if(s)return void this._handleRemoteEcho(e,s)}for(r=0;r"+t);if(e.status=t,t==b.SENT){e.event.event_id=r +;for(var s=0;s=0)return}else t[o][i]={};t[o][i]={eventId:n,data:s}})})})},i.prototype._buildReceiptCache=function(e){var t={};return k.keys(e).forEach(function(r){k.keys(e[r]).forEach(function(n){var o=e[r][n];t[o.eventId]||(t[o.eventId]=[]),t[o.eventId].push({userId:n,type:r,data:o.data})})}),t},i.prototype._addLocalEchoReceipt=function(e,t,r){this.addReceipt(o(e,t,r),!0)},i.prototype.addTags=function(e){this.tags=e.getContent().tags||{},this.emit("Room.tags",e,this)},i.prototype.addAccountData=function(e){for(var t=0;t]*)([0-9]*)$/);if(!i)return!1;var s=i[1],a=parseInt(i[2]);if(isNaN(a))return!1;switch(s){case"":case"==":return o==a;case"<":return o":return o>a;case"<=":return o<=a;case">=":return o>=a;default:return!1}},p=function(t,r){var n=r.getContent();if(!n||!n.body||"string"!=typeof n.body)return!1;var o=e.getRoom(r.getRoomId());if(!(o&&o.currentState&&o.currentState.members&&o.currentState.getMember(e.credentials.userId)))return!1;var i=o.currentState.getMember(e.credentials.userId).name,s=new RegExp("(^|\\W)"+(0,d.escapeRegExp)(i)+"(\\W|$)","i");return n.body.search(s)>-1},h=function(e,t){return!1},v=function(e,t){if(!e.key)return!1;var r=y(e.key,t);if(!r||"string"!=typeof r)return!1;if(e.value)return e.value===r;var n=void 0;return n="content.body"==e.key?m("(^|\\W)",e.pattern,"(\\W|$)"):m("^",e.pattern,"$"),!!r.match(n)},m=function(e,t,n){return r[t]?r[t]:(r[t]=new RegExp(e+(0,d.globToRegexp)(t)+n,"i"),r[t])},y=function(e,t){var r=e.split("."),n=void 0,o=r[0];for("content"==o?(n=t.getContent(),r.shift()):"type"==o?(n=t.getType(),r.shift()):n=t.event;r.length>0;){var i=r.shift();if(!n[i])return null;n=n[i]}return n},_=function(t,r){if(!r||!r.device)return null;if(t.getSender()==e.credentials.userId)return null;for(var o=(0,l.default)(r.device),i=0;in)break;t=u.shift(),c("_runCallbacks: popping",t.key),o.push(t)}r();for(var s=0;s>1;t(e[o])>0?n=o:r=o+1}return r}var i=1e3,s=0,a=void 0,u=[],c=function(){};t.exports.setNow=function(e){l=e||Date.now};var l=Date.now;t.exports.setTimeout=function(e,t){(t=t||0)<0&&(t=0);var n=Array.prototype.slice.call(arguments,2),i=l()+t,a=s++;c("setTimeout: scheduling cb",a,"at",i,"(delay",t,")");var d={runAt:i,func:e,params:n,key:a},f=o(u,function(e){return e.runAt-i});return u.splice(f,0,d),r(),a},t.exports.clearTimeout=function(e){if(0!==u.length){var t=void 0;for(t=0;t0}),function(t){e._activeQueues.push(t),u("Spinning up queue: '%s'",t),i(e,t)})}function i(e,t){var r=s(e,t);if(!r){var n=e._activeQueues.indexOf(t);return n>=0&&e._activeQueues.splice(n,1),void u("Stopping queue '%s' as it is now empty",t)}u("Queue '%s' has %s pending events",t,e._queues[t].length),e._procFn(r.event).done(function(n){a(e,t),u("Queue '%s' sent event %s",t,r.event.getId()),r.defer.resolve(n),i(e,t)},function(n){r.attempts+=1;var o=e.retryAlgorithm(r.event,r.attempts,n);u("retry(%s) err=%s event_id=%s waitTime=%s",r.attempts,n,r.event.getId(),o),-1===o?(u("Queue '%s' giving up on event %s",t,r.event.getId()),a(e,t),r.defer.reject(n),i(e,t)):setTimeout(function(){i(e,t)},o)})}function s(e,t){var r=e._queues[t];return d.isArray(r)?r[0]:null}function a(e,t){var r=e._queues[t];return d.isArray(r)?r.shift():null}function u(){if(f){var e;(e=console).log.apply(e,arguments)}}var c=e("bluebird"),l=function(e){return e&&e.__esModule?e:{default:e}}(c),d=e("./utils"),f=!1;n.prototype.getQueueForEvent=function(e){var t=this.queueAlgorithm(e);return t&&this._queues[t]?d.map(this._queues[t],function(e){return e.event}):null},n.prototype.removeEventFromQueue=function(e){var t=this.queueAlgorithm(e);if(!t||!this._queues[t])return!1;var r=!1;return d.removeElement(this._queues[t],function(t){if(t.event.getId()===e.getId())return r=!0,!0}),r},n.prototype.setProcessFunction=function(e){this._procFn=e,o(this)},n.prototype.queueEvent=function(e){var t=this.queueAlgorithm(e);if(!t)return null;this._queues[t]||(this._queues[t]=[]);var r=l.default.defer();return this._queues[t].push({event:e,defer:r,attempts:0}),u("Queue algorithm dumped event %s into queue '%s'",e.getId(),t),o(this),r.promise},n.RETRY_BACKOFF_RATELIMIT=function(e,t,r){if(400===r.httpStatus||403===r.httpStatus||401===r.httpStatus)return-1;if("rejected"===r.cors)return-1;if("M_LIMIT_EXCEEDED"===r.name){var n=r.data.retry_after_ms;if(n)return n}return t>4?-1:1e3*Math.pow(2,t)},n.QUEUE_MESSAGES=function(e){return"m.room.message"===e.getType()?"message":null},t.exports=n},{"./utils":55,bluebird:89}],46:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function o(e){e.createObjectStore("users",{keyPath:["userId"]}),e.createObjectStore("accountData",{keyPath:["type"]}),e.createObjectStore("sync",{keyPath:["clobber"]})}function i(e){e.createObjectStore("oob_membership_events",{keyPath:["room_id","state_key"]}).createIndex("room","room_id")}function s(e){e.createObjectStore("client_options",{keyPath:["clobber"]})}function a(e,t,r){var n=e.openCursor(t);return new y.default(function(e,t){var o=[];n.onerror=function(e){t(new Error("Query failed: "+e.target.errorCode))},n.onsuccess=function(t){var n=t.target.result;if(!n)return void e(o);o.push(r(n)),n.continue()}})}function u(e){return new y.default(function(t,r){e.oncomplete=function(e){t(e)},e.onerror=function(e){r(e.target.error)}})}function c(e){return new y.default(function(t,r){e.onsuccess=function(e){t(e)},e.onerror=function(e){r(e.target.error)}})}function l(e){return new y.default(function(t,r){e.onsuccess=function(){return t(e)},e.onerror=function(e){return r(e)}})}function d(e){return c(e).then(function(e){return e.target.result})}Object.defineProperty(r,"__esModule",{value:!0});var f=e("babel-runtime/core-js/get-iterator"),p=n(f),h=e("babel-runtime/regenerator"),v=n(h),m=e("bluebird"),y=n(m),_=e("babel-runtime/helpers/slicedToArray"),g=n(_),b=e("../sync-accumulator"),E=n(b),w=e("../utils"),S=n(w),k=function(e,t){this.indexedDB=e,this._dbName="matrix-js-sdk:"+(t||"default"),this.db=null,this._disconnected=!0,this._syncAccumulator=new E.default,this._isNewlyCreated=!1};k.prototype={connect:function(){var e=this;if(!this._disconnected)return console.log("LocalIndexedDBStoreBackend.connect: already connected or connecting"),y.default.resolve();this._disconnected=!1,console.log("LocalIndexedDBStoreBackend.connect: connecting...");var t=this.indexedDB.open(this._dbName,3);return t.onupgradeneeded=function(t){var r=t.target.result,n=t.oldVersion;console.log("LocalIndexedDBStoreBackend.connect: upgrading from "+n),n<1&&(e._isNewlyCreated=!0,o(r)),n<2&&i(r),n<3&&s(r)},t.onblocked=function(){console.log("can't yet open LocalIndexedDBStoreBackend because it is open elsewhere")},console.log("LocalIndexedDBStoreBackend.connect: awaiting connection..."),c(t).then(function(t){return console.log("LocalIndexedDBStoreBackend.connect: connected"),e.db=t.target.result,e.db.onversionchange=function(){e.db.close()},e._init()})},isNewlyCreated:function(){return y.default.resolve(this._isNewlyCreated)},_init:function(){var e=this;return y.default.all([this._loadAccountData(),this._loadSyncData()]).then(function(t){var r=(0,g.default)(t,2),n=r[0],o=r[1];console.log("LocalIndexedDBStoreBackend: loaded initial data"),e._syncAccumulator.accumulate({next_batch:o.nextBatch,rooms:o.roomsData,groups:o.groupsData,account_data:{events:n}})})},getOutOfBandMembers:function(e){var t=this;return new y.default(function(r,n){var o=t.db.transaction(["oob_membership_events"],"readonly"),i=o.objectStore("oob_membership_events"),s=i.index("room"),a=IDBKeyRange.only(e),u=s.openCursor(a),c=[],l=!1;u.onsuccess=function(e){var t=e.target.result;if(!t)return r(c.length||l?c:null);var n=t.value;n.oob_written?l=!0:c.push(n),t.continue()},u.onerror=function(e){n(e)}}).then(function(t){return console.log("LL: got "+(t&&t.length)+" membershipEvents from storage for room "+e+" ..."),t})},setOutOfBandMembers:function(){function e(e,r){return t.apply(this,arguments)}var t=(0,m.coroutine)(v.default.mark(function e(t,r){var n,o,i;return v.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return console.log("LL: backend about to store "+r.length+" members for "+t),n=this.db.transaction(["oob_membership_events"],"readwrite"),o=n.objectStore("oob_membership_events"),r.forEach(function(e){o.put(e)}),i={room_id:t,oob_written:!0,state_key:0},o.put(i),e.next=8,(0,m.resolve)(u(n));case 8:console.log("LL: backend done storing for "+t+"!");case 9:case"end":return e.stop()}},e,this)}));return e}(),clearOutOfBandMembers:function(){function e(e){return t.apply(this,arguments)}var t=(0,m.coroutine)(v.default.mark(function e(t){var r,n,o,i,s,a,u,c,f,p,h,_,b;return v.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return r=this.db.transaction(["oob_membership_events"],"readonly"),n=r.objectStore("oob_membership_events"),o=n.index("room"),i=IDBKeyRange.only(t),s=d(o.openKeyCursor(i,"next")).then(function(e){return e&&e.primaryKey[1]}),a=d(o.openKeyCursor(i,"prev")).then(function(e){return e&&e.primaryKey[1]}),e.next=8,(0,m.resolve)(y.default.all([s,a]));case 8:return u=e.sent,c=(0,g.default)(u,2),f=c[0],p=c[1],h=this.db.transaction(["oob_membership_events"],"readwrite"),_=h.objectStore("oob_membership_events"),b=IDBKeyRange.bound([t,f],[t,p]),console.log("LL: Deleting all users + marker in storage for room "+t+", with key range:",[t,f],[t,p]),e.next=18,(0,m.resolve)(l(_.delete(b)));case 18:case"end":return e.stop()}},e,this)}));return e}(),clearDatabase:function(){var e=this;return new y.default(function(t,r){console.log("Removing indexeddb instance: "+e._dbName);var n=e.indexedDB.deleteDatabase(e._dbName);n.onblocked=function(){console.log("can't yet delete indexeddb "+e._dbName+" because it is open elsewhere")},n.onerror=function(e){console.warn("unable to delete js-sdk store indexeddb: "+e.target.error),t()},n.onsuccess=function(){console.log("Removed indexeddb instance: "+e._dbName),t()}})},getSavedSync:function(e){void 0===e&&(e=!0);var t=this._syncAccumulator.getJSON();return t.nextBatch?e?y.default.resolve(S.default.deepCopy(t)):y.default.resolve(t):y.default.resolve(null)},getNextBatchToken:function(){return y.default.resolve(this._syncAccumulator.getNextBatchToken())},setSyncData:function(e){var t=this;return y.default.resolve().then(function(){t._syncAccumulator.accumulate(e)})},syncToDatabase:function(e){var t=this._syncAccumulator.getJSON();return y.default.all([this._persistUserPresenceEvents(e),this._persistAccountData(t.accountData),this._persistSyncData(t.nextBatch,t.roomsData,t.groupsData)])},_persistSyncData:function(e,t,r){var n=this;return console.log("Persisting sync data up to ",e),y.default.try(function(){var o=n.db.transaction(["sync"],"readwrite");return o.objectStore("sync").put({clobber:"-",nextBatch:e,roomsData:t,groupsData:r}),u(o)})},_persistAccountData:function(e){var t=this;return y.default.try(function(){for(var r=t.db.transaction(["accountData"],"readwrite"),n=r.objectStore("accountData"),o=0;o1&&console.warn("loadSyncData: More than 1 sync row found."),e.length>0?e[0]:{}})})},getClientOptions:function(){var e=this;return y.default.resolve().then(function(){return a(e.db.transaction(["client_options"],"readonly").objectStore("client_options"),void 0,function(e){if(e.value&&e.value&&e.value.options)return e.value.options}).then(function(e){return e[0]})})},storeClientOptions:function(){function e(e){return t.apply(this,arguments)}var t=(0,m.coroutine)(v.default.mark(function e(t){var r,n;return v.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return r=this.db.transaction(["client_options"],"readwrite"),n=r.objectStore("client_options"),n.put({clobber:"-",options:t}),e.next=5,(0,m.resolve)(u(r));case 5:case"end":return e.stop()}},e,this)}));return e}()},r.default=k},{"../sync-accumulator":52,"../utils":55,"babel-runtime/core-js/get-iterator":58,"babel-runtime/helpers/slicedToArray":84,"babel-runtime/regenerator":86,bluebird:89}],47:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=e("bluebird"),o=function(e){return e&&e.__esModule?e:{default:e}}(n),i=function(e,t,r){this._workerScript=e,this._dbName=t,this._workerApi=r,this._worker=null,this._nextSeq=0,this._inFlight={},this._startPromise=null};i.prototype={connect:function(){var e=this;return this._ensureStarted().then(function(){return e._doCmd("connect")})},clearDatabase:function(){var e=this;return this._ensureStarted().then(function(){return e._doCmd("clearDatabase")})},isNewlyCreated:function(){return this._doCmd("isNewlyCreated")},getSavedSync:function(){return this._doCmd("getSavedSync")},getNextBatchToken:function(){return this._doCmd("getNextBatchToken")},setSyncData:function(e){return this._doCmd("setSyncData",[e])},syncToDatabase:function(e){return this._doCmd("syncToDatabase",[e])},getOutOfBandMembers:function(e){return this._doCmd("getOutOfBandMembers",[e])},setOutOfBandMembers:function(e,t){return this._doCmd("setOutOfBandMembers",[e,t])},clearOutOfBandMembers:function(e){return this._doCmd("clearOutOfBandMembers",[e])},getClientOptions:function(){return this._doCmd("getClientOptions")},storeClientOptions:function(e){return this._doCmd("storeClientOptions",[e])},getUserPresenceEvents:function(){return this._doCmd("getUserPresenceEvents")},_ensureStarted:function(){return null===this._startPromise&&(this._worker=new this._workerApi(this._workerScript),this._worker.onmessage=this._onWorkerMessage.bind(this),this._startPromise=this._doCmd("_setupWorker",[this._dbName]).then(function(){console.log("IndexedDB worker is ready")})),this._startPromise},_doCmd:function(e,t){var r=this;return o.default.resolve().then(function(){var n=r._nextSeq++,i=o.default.defer();return r._inFlight[n]=i,r._worker.postMessage({command:e,seq:n,args:t}),i.promise})},_onWorkerMessage:function(e){var t=e.data;if("cmd_success"==t.command||"cmd_fail"==t.command){if(void 0===t.seq)return void console.error("Got reply from worker with no seq");var r=this._inFlight[t.seq];if(void 0===r)return void console.error("Got reply for unknown seq "+t.seq);if(delete this._inFlight[t.seq],"cmd_success"==t.command)r.resolve(t.result);else{var n=new Error(t.error.message);n.name=t.error.name,r.reject(n)}}else console.warn("Unrecognised message from worker: "+t)}},r.default=i},{bluebird:89}],48:[function(e,t,r){(function(r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}var o=e("babel-runtime/core-js/get-iterator"),i=n(o),s=e("babel-runtime/helpers/slicedToArray"),a=n(s),u=e("bluebird"),c=n(u),l=e("./memory"),d=e("../utils"),f=n(d),p=e("./indexeddb-local-backend.js"),h=n(p),v=e("./indexeddb-remote-backend.js"),m=n(v),y=e("../models/user"),_=n(y),g=e("../models/event"),b=function(e){if(l.MatrixInMemoryStore.call(this,e),!e.indexedDB)throw new Error("Missing required option: indexedDB");if(e.workerScript){var t=e.workerApi;t||(t=r.Worker),this.backend=new m.default(e.workerScript,e.dbName,t)}else this.backend=new h.default(e.indexedDB,e.dbName);this.startedUp=!1,this._syncTs=0,this._userModifiedMap={}};f.default.inherits(b,l.MatrixInMemoryStore),b.prototype.startup=function(){var e=this;return this.startedUp?(console.log("IndexedDBStore.startup: already started"),c.default.resolve()):(console.log("IndexedDBStore.startup: connecting to backend"),this.backend.connect().then(function(){return console.log("IndexedDBStore.startup: loading presence events"),e.backend.getUserPresenceEvents()}).then(function(t){console.log("IndexedDBStore.startup: processing presence events"),t.forEach(function(t){var r=(0,a.default)(t,2),n=r[0],o=r[1],i=new _.default(n);o&&i.setPresenceEvent(new g.MatrixEvent(o)),e._userModifiedMap[i.userId]=i.getLastModifiedTime(),e.storeUser(i)})}))},b.prototype.getSavedSync=function(){return this.backend.getSavedSync()},b.prototype.isNewlyCreated=function(){return this.backend.isNewlyCreated()},b.prototype.getSavedSyncToken=function(){return this.backend.getNextBatchToken()},b.prototype.deleteAllData=function(){return l.MatrixInMemoryStore.prototype.deleteAllData.call(this),this.backend.clearDatabase().then(function(){console.log("Deleted indexeddb data.")},function(e){throw console.error("Failed to delete indexeddb data: "+e),e})},b.prototype.wantsSave=function(){return Date.now()-this._syncTs>3e5},b.prototype.save=function(){return this.wantsSave()?this._reallySave():c.default.resolve()},b.prototype._reallySave=function(){this._syncTs=Date.now();var e=[],t=!0,r=!1,n=void 0;try{for(var o,s=(0,i.default)(this.getUsers());!(t=(o=s.next()).done);t=!0){var a=o.value;this._userModifiedMap[a.userId]!==a.getLastModifiedTime()&&(a.events.presence&&(e.push([a.userId,a.events.presence.event]),this._userModifiedMap[a.userId]=a.getLastModifiedTime()))}}catch(e){r=!0,n=e}finally{try{!t&&s.return&&s.return()}finally{if(r)throw n}}return this.backend.syncToDatabase(e).catch(function(e){console.error("sync fail:",e)})},b.prototype.setSyncData=function(e){return this.backend.setSyncData(e)},b.prototype.getOutOfBandMembers=function(e){return this.backend.getOutOfBandMembers(e)},b.prototype.setOutOfBandMembers=function(e,t){return this.backend.setOutOfBandMembers(e,t)},b.prototype.clearOutOfBandMembers=function(e){return this.backend.clearOutOfBandMembers(e)},b.prototype.getClientOptions=function(){return this.backend.getClientOptions()},b.prototype.storeClientOptions=function(e){return this.backend.storeClientOptions(e)},t.exports.IndexedDBStore=b}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../models/event":34,"../models/user":41,"../utils":55,"./indexeddb-local-backend.js":46,"./indexeddb-remote-backend.js":47,"./memory":49,"babel-runtime/core-js/get-iterator":58,"babel-runtime/helpers/slicedToArray":84,bluebird:89}],49:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}var o=e("babel-runtime/core-js/object/assign"),i=n(o),s=e("bluebird"),a=n(s),u=e("../utils"),c=e("../models/user");t.exports.MatrixInMemoryStore=function(e){e=e||{},this.rooms={},this.groups={},this.users={},this.syncToken=null,this.filters={},this.accountData={},this.localStorage=e.localStorage,this._oobMembers={},this._clientOptions={}},t.exports.MatrixInMemoryStore.prototype={getSyncToken:function(){return this.syncToken},isNewlyCreated:function(){return a.default.resolve(!0)},setSyncToken:function(e){this.syncToken=e},storeGroup:function(e){this.groups[e.groupId]=e},getGroup:function(e){return this.groups[e]||null},getGroups:function(){return u.values(this.groups)},storeRoom:function(e){this.rooms[e.roomId]=e,e.currentState.on("RoomState.members",this._onRoomMember.bind(this));var t=this;e.currentState.getMembers().forEach(function(r){t._onRoomMember(null,e.currentState,r)})},_onRoomMember:function(e,t,r){if("invite"!==r.membership){var n=this.users[r.userId]||new c(r.userId);r.name&&(n.setDisplayName(r.name),r.events.member&&n.setRawDisplayName(r.events.member.getDirectionalContent().displayname)),r.events.member&&r.events.member.getContent().avatar_url&&n.setAvatarUrl(r.events.member.getContent().avatar_url),this.users[n.userId]=n}},getRoom:function(e){return this.rooms[e]||null},getRooms:function(){return u.values(this.rooms)},removeRoom:function(e){this.rooms[e]&&this.rooms[e].removeListener("RoomState.members",this._onRoomMember),delete this.rooms[e]},getRoomSummaries:function(){return u.map(u.values(this.rooms),function(e){return e.summary})},storeUser:function(e){this.users[e.userId]=e},getUser:function(e){return this.users[e]||null},getUsers:function(){return u.values(this.users)},scrollback:function(e,t){return[]},storeEvents:function(e,t,r,n){},storeFilter:function(e){e&&(this.filters[e.userId]||(this.filters[e.userId]={}),this.filters[e.userId][e.filterId]=e)},getFilter:function(e,t){return this.filters[e]&&this.filters[e][t]?this.filters[e][t]:null},getFilterIdByName:function(e){if(!this.localStorage)return null;try{return this.localStorage.getItem("mxjssdk_memory_filter_"+e)}catch(e){}return null},setFilterIdByName:function(e,t){if(this.localStorage)try{this.localStorage.setItem("mxjssdk_memory_filter_"+e,t)}catch(e){}},storeAccountDataEvents:function(e){var t=this;e.forEach(function(e){t.accountData[e.getType()]=e})},getAccountData:function(e){return this.accountData[e]},setSyncData:function(e){return a.default.resolve()},wantsSave:function(){return!1},save:function(){},startup:function(){return a.default.resolve()},getSavedSync:function(){return a.default.resolve(null)},getSavedSyncToken:function(){ +return a.default.resolve(null)},deleteAllData:function(){return this.rooms={},this.users={},this.syncToken=null,this.filters={},this.accountData={},a.default.resolve()},getOutOfBandMembers:function(e){return a.default.resolve(this._oobMembers[e]||null)},setOutOfBandMembers:function(e,t){return this._oobMembers[e]=t,a.default.resolve()},getClientOptions:function(){return a.default.resolve(this._clientOptions)},storeClientOptions:function(e){return this._clientOptions=(0,i.default)({},e),a.default.resolve()}}},{"../models/user":41,"../utils":55,"babel-runtime/core-js/object/assign":63,bluebird:89}],50:[function(e,t,r){"use strict";function n(e){if(this.store=e,!(h.isFunction(e.getItem)&&h.isFunction(e.setItem)&&h.isFunction(e.removeItem)&&h.isFunction(e.key)&&"number"==typeof e.length))throw new Error("Supplied webStore does not meet the WebStorage API interface")}function o(e){return m+"devices/"+e}function i(e){return m+"sessions/"+e}function s(e,t){return m+"inboundgroupsessions/"+e+"/"+t}function a(e){return m+"rooms/"+e}function u(e,t){try{return JSON.parse(e.getItem(t))}catch(e){d("Failed to get key %s: %s",t,e),d(e.stack)}return null}function c(e,t){for(var r=[],n=0;nthis.opts.maxTimelineEntries)for(var a=r._timeline.length-this.opts.maxTimelineEntries,c=a;c0&&i.ephemeral.events.push(a),n._timeline.forEach(function(e){if(!i.timeline.prev_batch){if(!e.token)return;i.timeline.prev_batch=e.token}i.timeline.events.push(e.event)});for(var c=(0,s.default)(null),l=i.timeline.events.length-1;l>=0;l--){var d=i.timeline.events[l];if(null!==d.state_key&&void 0!==d.state_key){var f=h.default.deepCopy(d);f.unsigned&&(f.unsigned.prev_content&&(f.content=f.unsigned.prev_content),f.unsigned.prev_sender&&(f.sender=f.unsigned.prev_sender)),o(c,f)}}(0,u.default)(n._currentState).forEach(function(e){(0,u.default)(n._currentState[e]).forEach(function(t){var r=n._currentState[e][t];c[e]&&c[e][t]&&(r=c[e][t]),i.state.events.push(r)})}),t.join[r]=i});var r=[];return(0,u.default)(this.accountData).forEach(function(t){r.push(e.accountData[t])}),{nextBatch:this.nextBatch,roomsData:t,groupsData:this.groups,accountData:r}}},{key:"getNextBatchToken",value:function(){return this.nextBatch}}]),e}();t.exports=v},{"./utils":55,"babel-runtime/core-js/object/create":64,"babel-runtime/core-js/object/keys":69,"babel-runtime/helpers/classCallCheck":79,"babel-runtime/helpers/createClass":80}],53:[function(e,t,r){(function(r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function o(e,t){return"FILTER_SYNC_"+e+(t?"_"+t:"")}function i(){var e;T&&(e=console).log.apply(e,arguments)}function s(e,t){this.client=e,t=t||{},t.initialSyncLimit=void 0===t.initialSyncLimit?8:t.initialSyncLimit,t.resolveInvitesToProfiles=t.resolveInvitesToProfiles||!1,t.pollTimeout=t.pollTimeout||3e4,t.pendingEventOrdering=t.pendingEventOrdering||"chronological",t.canResetEntireTimeline||(t.canResetEntireTimeline=function(e){return!1}),this.opts=t,this._peekRoomId=null,this._currentSyncRequest=null,this._syncState=null,this._syncStateData=null,this._catchingUp=!1,this._running=!1,this._keepAliveTimer=null,this._connectionReturnedDefer=null,this._notifEvents=[],this._failedSyncCount=0,this._storeIsInvalid=!1,e.getNotifTimelineSet()&&e.reEmitter.reEmit(e.getNotifTimelineSet(),["Room.timeline","Room.timelineReset"])}function a(e,t){var r=new g(t);return e.reEmitter.reEmit(r,["User.avatarUrl","User.displayName","User.presence","User.currentlyActive","User.lastPresenceTs"]),r}var u=e("babel-runtime/core-js/json/stringify"),c=n(u),l=e("babel-runtime/core-js/object/keys"),d=n(l),f=e("babel-runtime/core-js/get-iterator"),p=n(f),h=e("babel-runtime/regenerator"),v=n(h),m=e("bluebird"),y=n(m),_=e("./errors"),g=e("./models/user"),b=e("./models/room"),E=e("./models/group"),w=e("./utils"),S=e("./filter"),k=e("./models/event-timeline"),T=!0;s.prototype.createRoom=function(e){var t=this.client,r=new b(e,t,t.getUserId(),{lazyLoadMembers:this.opts.lazyLoadMembers,pendingEventOrdering:this.opts.pendingEventOrdering,timelineSupport:t.timelineSupport});return t.reEmitter.reEmit(r,["Room.name","Room.timeline","Room.redaction","Room.receipt","Room.tags","Room.timelineReset","Room.localEchoUpdated","Room.accountData","Room.myMembership"]),this._registerStateListeners(r),r},s.prototype.createGroup=function(e){var t=this.client,r=new E(e);return t.reEmitter.reEmit(r,["Group.profile","Group.myMembership"]),t.store.storeGroup(r),r},s.prototype._registerStateListeners=function(e){var t=this.client;t.reEmitter.reEmit(e.currentState,["RoomState.events","RoomState.members","RoomState.newMember"]),e.currentState.on("RoomState.newMember",function(e,r,n){n.user=t.getUser(n.userId),t.reEmitter.reEmit(n,["RoomMember.name","RoomMember.typing","RoomMember.powerLevel","RoomMember.membership"])})},s.prototype._deregisterStateListeners=function(e){e.currentState.removeAllListeners("RoomState.events"),e.currentState.removeAllListeners("RoomState.members"),e.currentState.removeAllListeners("RoomState.newMember")},s.prototype.syncLeftRooms=function(){var e=this.client,t=this,r=new S(this.client.credentials.userId);r.setTimelineLimit(1),r.setIncludeLeaveRooms(!0);var n=this.opts.pollTimeout+8e4,i={timeout:0};return e.getOrCreateFilter(o(e.credentials.userId,"LEFT_ROOMS"),r).then(function(t){return i.filter=t,e._http.authedRequest(void 0,"GET","/sync",i,void 0,n)}).then(function(r){var n=[];r.rooms&&r.rooms.leave&&(n=t._mapSyncResponseToRoomArray(r.rooms.leave));var o=[];return n.forEach(function(r){var n=r.room;if(o.push(n),r.isBrandNewRoom){r.timeline=r.timeline||{};var i=t._mapSyncEventsFormat(r.timeline,n),s=t._mapSyncEventsFormat(r.state,n);n.getLiveTimeline().setPaginationToken(r.timeline.prev_batch,k.BACKWARDS),t._processRoomEvents(n,s,i),n.recalculate(),e.store.storeRoom(n),e.emit("Room",n),t._processEventsForNotifs(n,i)}}),o})},s.prototype.peek=function(e){var t=this,r=this.client;return this._peekRoomId=e,this.client.roomInitialSync(e,20).then(function(n){n.messages=n.messages||{},n.messages.chunk=n.messages.chunk||[],n.state=n.state||[];var o=t.createRoom(e),i=w.map(w.deepCopy(n.state),r.getEventMapper()),s=w.map(n.state,r.getEventMapper()),u=w.map(n.messages.chunk,r.getEventMapper());return n.presence&&w.isArray(n.presence)&&n.presence.map(r.getEventMapper()).forEach(function(e){var t=r.store.getUser(e.getContent().user_id);t?t.setPresenceEvent(e):(t=a(r,e.getContent().user_id),t.setPresenceEvent(e),r.store.storeUser(t)),r.emit("event",e)}),n.messages.start&&(o.oldState.paginationToken=n.messages.start),o.oldState.setStateEvents(i),o.currentState.setStateEvents(s),t._resolveInvites(o),o.recalculate(),o.addEventsToTimeline(u.reverse(),!0,o.getLiveTimeline(),n.messages.start),r.store.storeRoom(o),r.emit("Room",o),t._peekPoll(o),o})},s.prototype.stopPeeking=function(){this._peekRoomId=null},s.prototype._peekPoll=function(e,t){if(this._peekRoomId!==e.roomId)return void i("Stopped peeking in room %s",e.roomId);var r=this;this.client._http.authedRequest(void 0,"GET","/events",{room_id:e.roomId,timeout:3e4,from:t},void 0,5e4).done(function(t){if(r._peekRoomId!==e.roomId)return void i("Stopped peeking in room %s",e.roomId);t.chunk.filter(function(e){return"m.presence"===e.type}).map(r.client.getEventMapper()).forEach(function(e){var t=r.client.store.getUser(e.getContent().user_id);t?t.setPresenceEvent(e):(t=a(r.client,e.getContent().user_id),t.setPresenceEvent(e),r.client.store.storeUser(t)),r.client.emit("event",e)});var n=t.chunk.filter(function(t){return t.room_id===e.roomId}).map(r.client.getEventMapper());e.addLiveEvents(n),r._peekPoll(e,t.end)},function(n){console.error("[%s] Peek poll failed: %s",e.roomId,n),setTimeout(function(){r._peekPoll(e,t)},3e4)})},s.prototype.getSyncState=function(){return this._syncState},s.prototype.getSyncStateData=function(){return this._syncStateData},s.prototype.recoverFromSyncStartupError=function(){var e=(0,m.coroutine)(v.default.mark(function e(t,r){var n;return v.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,(0,m.resolve)(t);case 2:return n=this._startKeepAlives(),this._updateSyncState("ERROR",{error:r}),e.next=6,(0,m.resolve)(n);case 6:case"end":return e.stop()}},e,this)}));return function(t,r){return e.apply(this,arguments)}}(),s.prototype._wasLazyLoadingToggled=function(){var e=(0,m.coroutine)(v.default.mark(function e(t){var r,n,o;return v.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return t=!!t,r=!1,e.next=4,(0,m.resolve)(this.client.store.isNewlyCreated());case 4:if(n=e.sent){e.next=11;break}return e.next=8,(0,m.resolve)(this.client.store.getClientOptions());case 8:return o=e.sent,o&&(r=!!o.lazyLoadMembers),e.abrupt("return",r!==t);case 11:return e.abrupt("return",!1);case 12:case"end":return e.stop()}},e,this)}));return function(t){return e.apply(this,arguments)}}(),s.prototype.sync=function(){var e=this,t=function(){var e=(0,m.coroutine)(v.default.mark(function e(){var r;return v.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,(0,m.resolve)(s.getPushRules());case 3:r=e.sent,i("Got push rules"),s.pushRules=r,e.next=14;break;case 8:return e.prev=8,e.t0=e.catch(0),e.next=12,(0,m.resolve)(a.recoverFromSyncStartupError(u,e.t0));case 12:return t(),e.abrupt("return");case 14:l();case 15:case"end":return e.stop()}},e,this,[[0,8]])}));return function(){return e.apply(this,arguments)}}(),n=function(){var e=(0,m.coroutine)(v.default.mark(function e(){var t,r;return v.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return t=void 0,a.opts.filter?t=a.opts.filter:(t=new S(s.credentials.userId),t.setTimelineLimit(a.opts.initialSyncLimit)),r=void 0,e.prev=3,e.next=6,(0,m.resolve)(s.getOrCreateFilter(o(s.credentials.userId),t));case 6:r=e.sent,e.next=15;break;case 9:return e.prev=9,e.t0=e.catch(3),e.next=13,(0,m.resolve)(a.recoverFromSyncStartupError(u,e.t0));case 13:return n(),e.abrupt("return");case 15:return s.resetNotifTimelineSet(),null===a._currentSyncRequest&&(console.log("Sending first sync request..."),a._currentSyncRequest=a._doSyncRequest({filterId:r},c)),e.next=19,(0,m.resolve)(u);case 19:a._sync({filterId:r});case 20:case"end":return e.stop()}},e,this,[[3,9]])}));return function(){return e.apply(this,arguments)}}(),s=this.client,a=this;this._running=!0,r.document&&(this._onOnlineBound=this._onOnline.bind(this),r.document.addEventListener("online",this._onOnlineBound,!1));var u=y.default.resolve(),c=null,l=function(){var t=(0,m.coroutine)(v.default.mark(function t(){var r,o,i,a;return v.default.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(e.opts.lazyLoadMembers&&s.isGuest()&&(e.opts.lazyLoadMembers=!1),!e.opts.lazyLoadMembers){t.next=13;break}return t.next=4,(0,m.resolve)(s.doesServerSupportLazyLoading());case 4:if(!(r=t.sent)){t.next=11;break}return t.next=8,(0,m.resolve)(s.createFilter(S.LAZY_LOADING_SYNC_FILTER));case 8:e.opts.filter=t.sent,t.next=13;break;case 11:console.log("LL: lazy loading requested but not supported by server, so disabling"),e.opts.lazyLoadMembers=!1;case 13:return t.next=15,(0,m.resolve)(e._wasLazyLoadingToggled(e.opts.lazyLoadMembers));case 15:if(!(o=t.sent)){t.next=23;break}return e._storeIsInvalid=!0,i=_.InvalidStoreError.TOGGLED_LAZY_LOADING,a=new _.InvalidStoreError(i,!!e.opts.lazyLoadMembers),e._updateSyncState("ERROR",{error:a}),console.warn("InvalidStoreError: store is not usable: stopping sync."),t.abrupt("return");case 23:return e.opts.lazyLoadMembers&&e.opts.crypto&&e.opts.crypto.enableLazyLoading(),t.next=26,(0,m.resolve)(e.client._storeClientOptions());case 26:n();case 27:case"end":return t.stop()}},t,e)}));return function(){return t.apply(this,arguments)}}();s.isGuest()?a._sync({}):(u=s.store.getSavedSyncToken().then(function(e){return c=e,s.store.getSavedSync()}).then(function(e){if(e)return a._syncFromCache(e)}),t())},s.prototype.stop=function(){i("SyncApi.stop"),r.document&&(r.document.removeEventListener("online",this._onOnlineBound,!1),this._onOnlineBound=void 0),this._running=!1,this._currentSyncRequest&&this._currentSyncRequest.abort(),this._keepAliveTimer&&(clearTimeout(this._keepAliveTimer),this._keepAliveTimer=null)},s.prototype.retryImmediately=function(){return!!this._connectionReturnedDefer&&(this._startKeepAlives(0),!0)},s.prototype._syncFromCache=function(){var e=(0,m.coroutine)(v.default.mark(function e(t){var r,n,o;return v.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return i("sync(): not doing HTTP hit, instead returning stored /sync data"),r=t.nextBatch,this.client.store.setSyncToken(r),n={oldSyncToken:null,nextSyncToken:r,catchingUp:!1},o={next_batch:r,rooms:t.roomsData,groups:t.groupsData,account_data:{events:t.accountData}},e.prev=5,e.next=8,(0,m.resolve)(this._processSyncResponse(n,o));case 8:e.next=13;break;case 10:e.prev=10,e.t0=e.catch(5),console.error("Error processing cached sync",e.t0.stack||e.t0);case 13:this._storeIsInvalid||this._updateSyncState("PREPARED",n);case 14:case"end":return e.stop()}},e,this,[[5,10]])}));return function(t){return e.apply(this,arguments)}}(),s.prototype._sync=function(){var e=(0,m.coroutine)(v.default.mark(function e(t){var r,n,o,s;return v.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(r=this.client,this._running){e.next=6;break}return i("Sync no longer running: exiting."),this._connectionReturnedDefer&&(this._connectionReturnedDefer.reject(),this._connectionReturnedDefer=null),this._updateSyncState("STOPPED"),e.abrupt("return");case 6:return n=r.store.getSyncToken(),o=void 0,e.prev=8,null===this._currentSyncRequest&&(this._currentSyncRequest=this._doSyncRequest(t,n)),e.next=12,(0,m.resolve)(this._currentSyncRequest);case 12:o=e.sent,e.next=19;break;case 15:return e.prev=15,e.t0=e.catch(8),this._onSyncError(e.t0,t),e.abrupt("return");case 19:return e.prev=19,this._currentSyncRequest=null,e.finish(19);case 22:return r.store.setSyncToken(o.next_batch),this._failedSyncCount=0,e.next=26,(0,m.resolve)(r.store.setSyncData(o));case 26:if(s={oldSyncToken:n,nextSyncToken:o.next_batch,catchingUp:this._catchingUp},!this.opts.crypto){e.next=30;break}return e.next=30,(0,m.resolve)(this.opts.crypto.onSyncWillProcess(s));case 30:return e.prev=30,e.next=33,(0,m.resolve)(this._processSyncResponse(s,o));case 33:e.next=38;break;case 35:e.prev=35,e.t1=e.catch(30),console.error("Caught /sync error",e.t1.stack||e.t1);case 38:if(s.catchingUp=this._catchingUp,t.hasSyncedBefore||(this._updateSyncState("PREPARED",s),t.hasSyncedBefore=!0),!this.opts.crypto){e.next=43;break}return e.next=43,(0,m.resolve)(this.opts.crypto.onSyncCompleted(s));case 43:if(this._updateSyncState("SYNCING",s),!r.store.wantsSave()){e.next=49;break}if(!this.opts.crypto){e.next=48;break}return e.next=48,(0,m.resolve)(this.opts.crypto.saveDeviceList(0));case 48:r.store.save();case 49:this._sync(t);case 50:case"end":return e.stop()}},e,this,[[8,15,19,22],[30,35]])}));return function(t){return e.apply(this,arguments)}}(),s.prototype._doSyncRequest=function(e,t){var r=this._getSyncParams(e,t);return this.client._http.authedRequest(void 0,"GET","/sync",r,void 0,r.timeout+8e4)},s.prototype._getSyncParams=function(e,t){var r=this.opts.pollTimeout;("SYNCING"!==this.getSyncState()||this._catchingUp)&&(this._catchingUp=!0,r=0);var n=e.filterId;this.client.isGuest()&&!n&&(n=this._getGuestFilter());var o={filter:n,timeout:r};return this.opts.disablePresence&&(o.set_presence="offline"),t?o.since=t:o._cacheBuster=Date.now(),"ERROR"!=this.getSyncState()&&"RECONNECTING"!=this.getSyncState()||(o.timeout=0),o},s.prototype._onSyncError=function(e,t){var r=this;if(!this._running)return i("Sync no longer running: exiting"),this._connectionReturnedDefer&&(this._connectionReturnedDefer.reject(),this._connectionReturnedDefer=null),void this._updateSyncState("STOPPED");console.error("/sync error %s",e),console.error(e),this._failedSyncCount++,console.log("Number of consecutive failed sync requests:",this._failedSyncCount),i("Starting keep-alive"),this._startKeepAlives().then(function(e){e&&"ERROR"===r.getSyncState()&&r._updateSyncState("CATCHUP",{oldSyncToken:null,nextSyncToken:null,catchingUp:!0}),r._sync(t)}),this._currentSyncRequest=null,this._updateSyncState(this._failedSyncCount>=3?"ERROR":"RECONNECTING",{error:e})},s.prototype._processSyncResponse=function(){var e=(0,m.coroutine)(v.default.mark(function e(t,r){var n,o,s,u,c,l,d;return v.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return n=this.client,o=this,r.presence&&w.isArray(r.presence.events)&&r.presence.events.map(n.getEventMapper()).forEach(function(e){var t=n.store.getUser(e.getSender());t?t.setPresenceEvent(e):(t=a(n,e.getSender()),t.setPresenceEvent(e),n.store.storeUser(t)),n.emit("event",e)}),r.account_data&&w.isArray(r.account_data.events)&&(s=r.account_data.events.map(n.getEventMapper()),n.store.storeAccountDataEvents(s),s.forEach(function(e){return"m.push_rules"==e.getType()&&(n.pushRules=e.getContent()),n.emit("accountData",e),e})),r.to_device&&w.isArray(r.to_device.events)&&r.to_device.events.length>0?r.to_device.events.map(n.getEventMapper()).forEach(function(e){var t=e.getContent();if("m.room.message"==e.getType()&&"m.bad.encrypted"==t.msgtype)return void console.log("Ignoring undecryptable to-device event from "+e.getSender());n.emit("toDeviceEvent",e)}):this._catchingUp=!1,r.groups&&(r.groups.invite&&this._processGroupSyncEntry(r.groups.invite,"invite"),r.groups.join&&this._processGroupSyncEntry(r.groups.join,"join"),r.groups.leave&&this._processGroupSyncEntry(r.groups.leave,"leave")),u=[],c=[],l=[],r.rooms&&(r.rooms.invite&&(u=this._mapSyncResponseToRoomArray(r.rooms.invite)),r.rooms.join&&(c=this._mapSyncResponseToRoomArray(r.rooms.join)),r.rooms.leave&&(l=this._mapSyncResponseToRoomArray(r.rooms.leave))),this._notifEvents=[],u.forEach(function(e){var t=e.room,r=o._mapSyncEventsFormat(e.invite_state,t);t.updateMyMembership("invite"),o._processRoomEvents(t,r),e.isBrandNewRoom&&(t.recalculate(),n.store.storeRoom(t),n.emit("Room",t)),r.forEach(function(e){n.emit("event",e)})}),e.next=14,(0,m.resolve)(y.default.mapSeries(c,function(){var e=(0,m.coroutine)(v.default.mark(function e(r){var s,a,u,c,l,d,f,p,h=function(){var e=(0,m.coroutine)(v.default.mark(function e(t){return v.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(n.emit("event",t),!t.isState()||"m.room.encryption"!=t.getType()||!o.opts.crypto){e.next=4;break}return e.next=4,(0,m.resolve)(o.opts.crypto.onCryptoEvent(t));case 4:case"end":return e.stop()}},e,this)}));return function(t){return e.apply(this,arguments)}}();return v.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(s=r.room,a=o._mapSyncEventsFormat(r.state,s),u=o._mapSyncEventsFormat(r.timeline,s),c=o._mapSyncEventsFormat(r.ephemeral),l=o._mapSyncEventsFormat(r.account_data),r.unread_notifications&&(s.setUnreadNotificationCount("total",r.unread_notifications.notification_count),s.setUnreadNotificationCount("highlight",r.unread_notifications.highlight_count)),s.updateMyMembership("join"),r.timeline=r.timeline||{},!r.isBrandNewRoom){e.next=12;break}s.getLiveTimeline().setPaginationToken(r.timeline.prev_batch,k.BACKWARDS),e.next=26;break;case 12:if(!r.timeline.limited){e.next=26;break}d=!0,f=u.length-1;case 15:if(!(f>=0)){e.next=25;break}if(p=u[f].getId(),!s.getTimelineForEvent(p)){e.next=22;break}return i("Already have event "+p+" in limited sync - not resetting"),d=!1,u.splice(0,f),e.abrupt("break",25);case 22:f--,e.next=15;break;case 25:d&&(o._deregisterStateListeners(s),s.resetLiveTimeline(r.timeline.prev_batch,o.opts.canResetEntireTimeline(s.roomId)?null:t.oldSyncToken),n.resetNotifTimelineSet(),o._registerStateListeners(s));case 26:return o._processRoomEvents(s,a,u),r.summary&&s.setSummary(r.summary),s.addLiveEvents(c),s.addAccountData(l),s.recalculate(),r.isBrandNewRoom&&(n.store.storeRoom(s),n.emit("Room",s)),o._processEventsForNotifs(s,u),e.next=35,(0,m.resolve)(y.default.mapSeries(a,h));case 35:return e.next=37,(0,m.resolve)(y.default.mapSeries(u,h));case 37:c.forEach(function(e){n.emit("event",e)}),l.forEach(function(e){n.emit("event",e)});case 39:case"end":return e.stop()}},e,this)}));return function(t){return e.apply(this,arguments)}}()));case 14:if(l.forEach(function(e){var t=e.room,r=o._mapSyncEventsFormat(e.state,t),i=o._mapSyncEventsFormat(e.timeline,t),s=o._mapSyncEventsFormat(e.account_data);t.updateMyMembership("leave"),o._processRoomEvents(t,r,i),t.addAccountData(s),t.recalculate(),e.isBrandNewRoom&&(n.store.storeRoom(t),n.emit("Room",t)),o._processEventsForNotifs(t,i),r.forEach(function(e){n.emit("event",e)}),i.forEach(function(e){n.emit("event",e)}),s.forEach(function(e){n.emit("event",e)})}),t.oldSyncToken&&this._notifEvents.length&&(this._notifEvents.sort(function(e,t){return e.getTs()-t.getTs()}),this._notifEvents.forEach(function(e){n.getNotifTimelineSet().addLiveEvent(e)})),!r.device_lists){e.next=22;break}if(!this.opts.crypto){e.next=22;break}return e.next=20,(0,m.resolve)(this.opts.crypto.handleDeviceListChanges(t,r.device_lists));case 20:e.next=22;break;case 22:this.opts.crypto&&r.device_one_time_keys_count&&(d=r.device_one_time_keys_count.signed_curve25519||0,this.opts.crypto.updateOneTimeKeyCount(d));case 23:case"end":return e.stop()}},e,this)}));return function(t,r){return e.apply(this,arguments)}}(),s.prototype._startKeepAlives=function(e){void 0===e&&(e=2e3+Math.floor(5e3*Math.random())),null!==this._keepAliveTimer&&clearTimeout(this._keepAliveTimer);var t=this;return e>0?t._keepAliveTimer=setTimeout(t._pokeKeepAlive.bind(t),e):t._pokeKeepAlive(),this._connectionReturnedDefer||(this._connectionReturnedDefer=y.default.defer()),this._connectionReturnedDefer.promise},s.prototype._pokeKeepAlive=function(e){function t(){clearTimeout(r._keepAliveTimer),r._connectionReturnedDefer&&(r._connectionReturnedDefer.resolve(e),r._connectionReturnedDefer=null)}void 0===e&&(e=!1);var r=this;this.client._http.request(void 0,"GET","/_matrix/client/versions",void 0,void 0,{prefix:"",localTimeoutMs:15e3}).done(function(){t()},function(n){400==n.httpStatus||404==n.httpStatus?r._keepAliveTimer=setTimeout(t,2e3):(e=!0,r._keepAliveTimer=setTimeout(r._pokeKeepAlive.bind(r,e),5e3+Math.floor(5e3*Math.random())),r._updateSyncState("ERROR",{error:n}))})},s.prototype._processGroupSyncEntry=function(e,t){var r=!0,n=!1,o=void 0;try{for(var i,s=(0,p.default)((0,d.default)(e));!(r=(i=s.next()).done);r=!0){var a=i.value,u=e[a],c=this.client.store.getGroup(a),l=null===c;null===c&&(c=this.createGroup(a)),u.profile&&c.setProfile(u.profile.name,u.profile.avatar_url),u.inviter&&c.setInviter({userId:u.inviter}),c.setMyMembership(t),l&&this.client.emit("Group",c)}}catch(e){n=!0,o=e}finally{try{!r&&s.return&&s.return()}finally{if(n)throw o}}},s.prototype._mapSyncResponseToRoomArray=function(e){var t=this.client,r=this;return w.keys(e).map(function(n){var o=e[n],i=t.store.getRoom(n),s=!1;return i||(i=r.createRoom(n),s=!0),o.room=i,o.isBrandNewRoom=s,o})},s.prototype._mapSyncEventsFormat=function(e,t){if(!e||!w.isArray(e.events))return[];var r=this.client.getEventMapper();return e.events.map(function(e){return t&&(e.room_id=t.roomId),r(e) +})},s.prototype._resolveInvites=function(e){if(e&&this.opts.resolveInvitesToProfiles){var t=this.client;e.getMembersWithMembership("invite").forEach(function(r){if(!r._requestedProfileInfo){r._requestedProfileInfo=!0;var n=t.getUser(r.userId),o=void 0;o=n?y.default.resolve({avatar_url:n.avatarUrl,displayname:n.displayName}):t.getProfileInfo(r.userId),o.done(function(t){var n=r.events.member;"invite"===n.getContent().membership&&(n.getContent().avatar_url=t.avatar_url,n.getContent().displayname=t.displayname,r.setMembershipEvent(n,e.currentState))},function(e){})}})}},s.prototype._processRoomEvents=function(e,t,r){var n=e.getLiveTimeline(),o=0==n.getEvents().length;if(o){var i=!0,s=!1,a=void 0;try{for(var u,c=(0,p.default)(t);!(i=(u=c.next()).done);i=!0){var l=u.value;this.client.getPushActionsForEvent(l)}}catch(e){s=!0,a=e}finally{try{!i&&c.return&&c.return()}finally{if(s)throw a}}n.initialiseState(t)}this._resolveInvites(e),e.recalculate(),o||(e.oldState.setStateEvents(t||[]),e.currentState.setStateEvents(t||[])),e.addLiveEvents(r||[])},s.prototype._processEventsForNotifs=function(e,t){if(this.client.getNotifTimelineSet())for(var r=0;rt.minIndex())return!0}else if(t.index0&&this.unpaginate(c,e!=a.BACKWARDS),s.default.resolve(!0)}if(!r||0===n)return s.default.resolve(!1);if(!o.timeline.getPaginationToken(e))return u("TimelineWindow: no token"),s.default.resolve(!1);u("TimelineWindow: starting request");var l=this,d=this._client.paginateEventTimeline(o.timeline,{backwards:e==a.BACKWARDS,limit:t}).finally(function(){o.pendingPaginate=null}).then(function(r){return u("TimelineWindow: request completed with result "+r),!!r&&l.paginate(e,t,!0,n-1)});return o.pendingPaginate=d,d},n.prototype.unpaginate=function(e,t){var r=t?this._start:this._end;if(e>this._eventCount||e<0)throw new Error("Attemting to unpaginate "+e+" events, but only have "+this._eventCount+" in the timeline");for(;e>0;){var n=t?r.advance(e):r.retreat(e);if(n<=0)throw new Error("Unable to unpaginate any further, but still have "+this._eventCount+" events");e-=n,this._eventCount-=n,u("TimelineWindow.unpaginate: dropped "+n+" (now "+this._eventCount+")")}},n.prototype.getEvents=function(){if(!this._start)return[];for(var e=[],t=this._start.timeline;;){var r=t.getEvents(),n=0,o=r.length;t===this._start.timeline&&(n=this._start.index+t.getBaseIndex()),t===this._end.timeline&&(o=this._end.index+t.getBaseIndex());for(var i=n;i0)return this.index+=t,t;var r=this.timeline.getNeighbouringTimeline(e<0?a.BACKWARDS:a.FORWARDS);return r?(this.timeline=r,this.index=e<0?this.maxIndex():this.minIndex(),u("paginate: switched to new neighbour"),this.advance(e)):0},o.prototype.retreat=function(e){return-1*this.advance(-1*e)},t.exports.TimelineWindow=n,t.exports.TimelineIndex=o},{"./models/event-timeline":33,bluebird:89}],55:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function o(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var i=e("babel-runtime/core-js/object/create"),s=n(i),a=e("babel-runtime/helpers/typeof"),u=n(a),c=e("babel-runtime/core-js/json/stringify"),l=n(c);t.exports.encodeParams=function(e){var t="";for(var r in e)e.hasOwnProperty(r)&&(t+="&"+encodeURIComponent(r)+"="+encodeURIComponent(e[r]));return t.substring(1)},t.exports.encodeUri=function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e=e.replace(r,encodeURIComponent(t[r])));return e},t.exports.map=function(e,t){for(var r=new Array(e.length),n=0;n=0;n--)if(t(e[n],n,e))return e[n]}else for(n=0;n=0;n--)if(t(e[n],n,e))return o=e[n],e.splice(n,1),o}else for(n=0;n>>0;if("function"!=typeof e)throw new TypeError;for(var n=[],o=arguments.length>=2?arguments[1]:void 0,i=0;i>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(r=t);var s=new Array(i);for(n=0;n>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(r=t),n=0;n1){var o=Object(arguments[1]);for(var i in o)t.call(o,i)&&(n[i]=o[i])}return n}}()),e.super_=t,e.prototype=(0,s.default)(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.exports.isNumber=function(e){return"number"==typeof e&&isFinite(e)},t.exports.removeHiddenChars=function(e){return e.normalize("NFD").replace(f,"")};var f=/[\u200B-\u200D\u0300-\u036f\uFEFF\s]/g;t.exports.escapeRegExp=o,t.exports.globToRegexp=function(e,t){t="boolean"!=typeof t||t;var r=o(e);return r=r.replace(/\\\*/g,".*"),r=r.replace(/\?/g,"."),t&&(r=r.replace(/\\\[(!|)(.*)\\]/g,function(e,t,r,n,o){return"["+(t&&"^"||"")+r.replace(/\\\-/,"-")+"]"})),r}},{"babel-runtime/core-js/json/stringify":60,"babel-runtime/core-js/object/create":64,"babel-runtime/helpers/typeof":85}],56:[function(e,t,r){(function(r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function o(e){this.roomId=e.roomId,this.client=e.client,this.webRtc=e.webRtc,this.forceTURN=e.forceTURN,this.URL=e.URL,this.turnServers=e.turnServers||[],0===this.turnServers.length&&this.turnServers.push({urls:[o.FALLBACK_STUN_SERVER]}),l.forEach(this.turnServers,function(e){l.checkObjectHasKeys(e,["urls"])}),this.callId="c"+(new Date).getTime()+Math.random(),this.state="fledgling",this.didConnect=!1,this.candidateSendQueue=[],this.candidateSendTries=0,this.mediaPromises=(0,c.default)(null),this.screenSharingStream=null,this._answerContent=null}var i=e("babel-runtime/regenerator"),s=n(i),a=e("bluebird"),u=e("babel-runtime/core-js/object/create"),c=n(u),l=e("../utils"),d=e("events").EventEmitter;o.CALL_TIMEOUT_MS=6e4,o.FALLBACK_STUN_SERVER="stun:stun.l.google.com:19302",o.ERR_LOCAL_OFFER_FAILED="local_offer_failed",o.ERR_NO_USER_MEDIA="no_user_media",o.ERR_UNKNOWN_DEVICES="unknown_devices",o.ERR_SEND_INVITE="send_invite",o.ERR_SEND_ANSWER="send_answer",l.inherits(o,d),o.prototype.placeVoiceCall=function(){S("placeVoiceCall"),E(this),T(this,I("voice")),this.type="voice"},o.prototype.placeVideoCall=function(e,t){S("placeVideoCall"),E(this),this.localVideoElement=t,this.remoteVideoElement=e,T(this,I("video")),this.type="video",g(this)},o.prototype.placeScreenSharingCall=function(e,t){S("placeScreenSharingCall"),E(this);var r=R(this);if(r){this.localVideoElement=t,this.remoteVideoElement=e;var n=this;this.webRtc.getUserMedia(r,function(e){n.screenSharingStream=e,S("Got screen stream, requesting audio stream...");var t=I("voice");T(n,t)},function(e){n.emit("error",w(o.ERR_NO_USER_MEDIA,"Failed to get screen-sharing stream: "+e))}),this.type="video",g(this)}},o.prototype.playElement=function(e,t){console.log("queuing play on "+t+" and element "+e),this.mediaPromises[t]?this.mediaPromises[t]=this.mediaPromises[t].then(function(){return console.log("previous promise completed for "+t),e.play()},function(){return console.log("previous promise failed for "+t),e.play()}):this.mediaPromises[t]=e.play()},o.prototype.pauseElement=function(e,t){console.log("queuing pause on "+t+" and element "+e),this.mediaPromises[t]?this.mediaPromises[t]=this.mediaPromises[t].then(function(){return console.log("previous promise completed for "+t),e.pause()},function(){return console.log("previous promise failed for "+t),e.pause()}):this.mediaPromises[t]=e.pause()},o.prototype.assignElement=function(e,t,r){console.log("queuing assign on "+r+" element "+e+" for "+t),this.mediaPromises[r]?this.mediaPromises[r]=this.mediaPromises[r].then(function(){console.log("previous promise completed for "+r),e.srcObject=t},function(){console.log("previous promise failed for "+r),e.srcObject=t}):e.srcObject=t},o.prototype.getLocalVideoElement=function(){return this.localVideoElement},o.prototype.getRemoteVideoElement=function(){return this.remoteVideoElement},o.prototype.getRemoteAudioElement=function(){return this.remoteAudioElement},o.prototype.setLocalVideoElement=function(e){if(this.localVideoElement=e,e&&this.localAVStream&&"video"===this.type){e.autoplay=!0,this.assignElement(e,this.localAVStream,"localVideo"),e.muted=!0;var t=this;setTimeout(function(){var e=t.getLocalVideoElement();e.play&&t.playElement(e,"localVideo")},0)}},o.prototype.setRemoteVideoElement=function(e){this.remoteVideoElement=e,g(this)},o.prototype.setRemoteAudioElement=function(e){this.remoteVideoElement.muted=!0,this.remoteAudioElement=e,this.remoteAudioElement.muted=!1,b(this)},o.prototype._initWithInvite=function(e){this.msg=e.getContent(),this.peerConn=x(this);var t=this;this.peerConn&&this.peerConn.setRemoteDescription(new this.webRtc.RtcSessionDescription(this.msg.offer),C(t,t._onSetRemoteDescriptionSuccess),C(t,t._onSetRemoteDescriptionError)),h(this,"ringing"),this.direction="inbound",this.msg.offer&&this.msg.offer.sdp&&this.msg.offer.sdp.indexOf("m=video")>-1?this.type="video":this.type="voice",e.getAge()&&setTimeout(function(){"ringing"==t.state&&(S("Call invite has expired. Hanging up."),t.hangupParty="remote",h(t,"ended"),_(t),"closed"!=t.peerConn.signalingState&&t.peerConn.close(),t.emit("hangup",t))},this.msg.lifetime-e.getAge())},o.prototype._initWithHangup=function(e){this.msg=e.getContent(),h(this,"ended")},o.prototype.answer=function(){S("Answering call %s of type %s",this.callId,this.type);var e=this;if(e._answerContent)return void e._sendAnswer();this.localAVStream||this.waitForLocalAVStream?this.localAVStream?this._maybeGotUserMediaForAnswer(this.localAVStream):this.waitForLocalAVStream&&h(this,"wait_local_media"):(this.webRtc.getUserMedia(I(this.type),C(e,e._maybeGotUserMediaForAnswer),C(e,e._maybeGotUserMediaForAnswer)),h(this,"wait_local_media"))},o.prototype._replacedBy=function(e){S(this.callId+" being replaced by "+e.callId),"wait_local_media"==this.state?(S("Telling new call to wait for local media"),e.waitForLocalAVStream=!0):"create_offer"==this.state?(S("Handing local stream to new call"),e._maybeGotUserMediaForAnswer(this.localAVStream),delete this.localAVStream):"invite_sent"==this.state&&(S("Handing local stream to new call"),e._maybeGotUserMediaForAnswer(this.localAVStream),delete this.localAVStream),e.localVideoElement=this.localVideoElement,e.remoteVideoElement=this.remoteVideoElement,e.remoteAudioElement=this.remoteAudioElement,this.successor=e,this.emit("replaced",e),this.hangup(!0)},o.prototype.hangup=function(e,t){if("ended"!=this.state){S("Ending call "+this.callId),y(this,"local",e,!t);var r={version:0,call_id:this.callId,reason:e};v(this,"m.call.hangup",r)}},o.prototype.setLocalVideoMuted=function(e){this.localAVStream&&f(this.localAVStream.getVideoTracks(),!e)},o.prototype.isLocalVideoMuted=function(){return!!this.localAVStream&&!p(this.localAVStream.getVideoTracks())},o.prototype.setMicrophoneMuted=function(e){this.localAVStream&&f(this.localAVStream.getAudioTracks(),!e)},o.prototype.isMicrophoneMuted=function(){return!!this.localAVStream&&!p(this.localAVStream.getAudioTracks())},o.prototype._maybeGotUserMediaForInvite=function(e){if(this.successor)return void this.successor._maybeGotUserMediaForAnswer(e);if("ended"!=this.state){S("_maybeGotUserMediaForInvite -> "+this.type);var t=this,r=e,n={mandatory:{OfferToReceiveAudio:!0,OfferToReceiveVideo:"video"===t.type}};if(e instanceof MediaStream){var o=this.getLocalVideoElement();o&&"video"==this.type&&(o.autoplay=!0,this.screenSharingStream?(S("Setting screen sharing stream to the local video element"),this.assignElement(o,this.screenSharingStream,"localVideo")):this.assignElement(o,e,"localVideo"),o.muted=!0,setTimeout(function(){var e=t.getLocalVideoElement();e.play&&t.playElement(e,"localVideo")},0)),this.screenSharingStream&&(this.screenSharingStream.addTrack(e.getAudioTracks()[0]),e=this.screenSharingStream),this.localAVStream=e,f(e.getAudioTracks(),!0),this.peerConn=x(this),this.peerConn.addStream(e)}else{if("PermissionDeniedError"!==r.name)return S("Failed to getUserMedia."),void this._getUserMediaFailed(r);S("User denied access to camera/microphone. Or possibly you are using an insecure domain. Receiving only."),this.peerConn=x(this)}this.peerConn.createOffer(C(t,t._gotLocalOffer),C(t,t._getLocalOfferFailed),n),h(t,"create_offer")}},o.prototype._sendAnswer=function(e){var t=this;v(this,"m.call.answer",this._answerContent).then(function(){h(t,"connecting"),k(t)}).catch(function(e){h(t,"ringing"),t.client.cancelPendingEvent(e.event);var r=o.ERR_SEND_ANSWER,n="Failed to send answer";throw"UnknownDeviceError"==e.name&&(r=o.ERR_UNKNOWN_DEVICES,n="Unknown devices present in the room"),t.emit("error",w(r,n)),e})},o.prototype._maybeGotUserMediaForAnswer=function(e){var t=this;if("ended"!=t.state){var r=e;if(e instanceof MediaStream){var n=t.getLocalVideoElement();n&&"video"==t.type&&(n.autoplay=!0,this.assignElement(n,e,"localVideo"),n.muted=!0,setTimeout(function(){var e=t.getLocalVideoElement();e.play&&t.playElement(e,"localVideo")},0)),t.localAVStream=e,f(e.getAudioTracks(),!0),t.peerConn.addStream(e)}else{if("PermissionDeniedError"!==r.name)return S("Failed to getUserMedia."),void this._getUserMediaFailed(r);S("User denied access to camera/microphone. Or possibly you are using an insecure domain. Receiving only.")}var o={mandatory:{OfferToReceiveAudio:!0,OfferToReceiveVideo:"video"===t.type}};t.peerConn.createAnswer(function(e){S("Created answer: "+e),t.peerConn.setLocalDescription(e,function(){t._answerContent={version:0,call_id:t.callId,answer:{sdp:t.peerConn.localDescription.sdp,type:t.peerConn.localDescription.type}},t._sendAnswer()},function(){S("Error setting local description!")},o)},function(e){S("Failed to create answer: "+e)}),h(t,"create_answer")}},o.prototype._gotLocalIceCandidate=function(e){if(e.candidate){if(S("Got local ICE "+e.candidate.sdpMid+" candidate: "+e.candidate.candidate),"ended"==this.state)return;var t={candidate:e.candidate.candidate,sdpMid:e.candidate.sdpMid,sdpMLineIndex:e.candidate.sdpMLineIndex};m(this,t)}},o.prototype._gotRemoteIceCandidate=function(e){"ended"!=this.state&&(S("Got remote ICE "+e.sdpMid+" candidate: "+e.candidate),this.peerConn.addIceCandidate(new this.webRtc.RtcIceCandidate(e),function(){},function(e){}))},o.prototype._receivedAnswer=function(e){if("ended"!=this.state){var t=this;this.peerConn.setRemoteDescription(new this.webRtc.RtcSessionDescription(e.answer),C(t,t._onSetRemoteDescriptionSuccess),C(t,t._onSetRemoteDescriptionError)),h(t,"connecting")}},o.prototype._gotLocalOffer=function(e){var t=this;if(S("Created offer: "+e),"ended"==t.state)return void S("Ignoring newly created offer on call ID "+t.callId+" because the call has ended");t.peerConn.setLocalDescription(e,function(){var e={version:0,call_id:t.callId,offer:{sdp:t.peerConn.localDescription.sdp,type:t.peerConn.localDescription.type},lifetime:o.CALL_TIMEOUT_MS};v(t,"m.call.invite",e).then(function(){h(t,"invite_sent"),setTimeout(function(){"invite_sent"==t.state&&t.hangup("invite_timeout")},o.CALL_TIMEOUT_MS)}).catch(function(e){var r=o.ERR_SEND_INVITE,n="Failed to send invite";throw"UnknownDeviceError"==e.name&&(r=o.ERR_UNKNOWN_DEVICES,n="Unknown devices present in the room"),t.client.cancelPendingEvent(e.event),y(t,"local",r,!1),t.emit("error",w(r,n)),e})},function(){S("Error setting local description!")})},o.prototype._getLocalOfferFailed=function(e){this.emit("error",w(o.ERR_LOCAL_OFFER_FAILED,"Failed to start audio for call!"))},o.prototype._getUserMediaFailed=function(e){y(this,"local","user_media_failed",!1),this.emit("error",w(o.ERR_NO_USER_MEDIA,"Couldn't start capturing media! Is your microphone set up and does this app have permission?"))},o.prototype._onIceConnectionStateChanged=function(){"ended"!=this.state&&(S("Ice connection state changed to: "+this.peerConn.iceConnectionState),"completed"==this.peerConn.iceConnectionState||"connected"==this.peerConn.iceConnectionState?(h(this,"connected"),this.didConnect=!0):"failed"==this.peerConn.iceConnectionState&&this.hangup("ice_failed"))},o.prototype._onSignallingStateChanged=function(){S("call "+this.callId+": Signalling state changed to: "+this.peerConn.signalingState)},o.prototype._onSetRemoteDescriptionSuccess=function(){S("Set remote description")},o.prototype._onSetRemoteDescriptionError=function(e){S("Failed to set remote description"+e)},o.prototype._onAddStream=function(e){S("Stream id "+e.stream.id+" added");var t=e.stream;t.getVideoTracks().length>0?(this.type="video",this.remoteAVStream=t,this.remoteAStream=t):(this.type="voice",this.remoteAStream=t);var r=this;A(t,function(e){S("Track id "+e.id+" added"),e.onstarted=C(r,r._onRemoteStreamTrackStarted)}),void 0!==e.stream.oninactive?e.stream.oninactive=C(r,r._onRemoteStreamEnded):e.stream.onended=C(r,r._onRemoteStreamEnded),e.stream.onstarted=C(r,r._onRemoteStreamStarted),"video"===this.type?(g(this),b(this)):b(this)},o.prototype._onRemoteStreamStarted=function(e){h(this,"connected")},o.prototype._onRemoteStreamEnded=function(e){S("Remote stream ended"),this.hangupParty="remote",h(this,"ended"),_(this),"closed"!=this.peerConn.signalingState&&this.peerConn.close(),this.emit("hangup",this)},o.prototype._onRemoteStreamTrackStarted=function(e){h(this,"connected")},o.prototype._onHangupReceived=function(e){S("Hangup received"),y(this,"remote",e.reason,!0)},o.prototype._onAnsweredElsewhere=function(e){S("Answered elsewhere"),y(this,"remote","answered_elsewhere",!0)};var f=function(e,t){for(var r=0;r5)return S("Failed to send candidates on attempt %s. Giving up for now.",t.candidateSendTries),void(t.candidateSendTries=0);var i=500*Math.pow(2,t.candidateSendTries);++t.candidateSendTries,S("Failed to send candidates. Retrying in "+i+"ms"),setTimeout(function(){e(t)},i)})}},T=function(e,t){e.client.callList[e.callId]=e,e.webRtc.getUserMedia(t,C(e,e._maybeGotUserMediaForInvite),C(e,e._maybeGotUserMediaForInvite)),h(e,"wait_local_media"),e.direction="outbound",e.config=t},x=function(e){var t=e.turnServers;if("mozilla"===e.webRtc.vendor){t=[];for(var r=0;r-1)return!0;return!1};var u=i.navigator.getUserMedia||i.navigator.webkitGetUserMedia||i.navigator.mozGetUserMedia;if(u&&(a.getUserMedia=function(){return u.apply(i.navigator,arguments)}),a.RtcPeerConnection=i.RTCPeerConnection||i.webkitRTCPeerConnection||i.mozRTCPeerConnection,a.RtcSessionDescription=i.RTCSessionDescription||i.webkitRTCSessionDescription||i.mozRTCSessionDescription,a.RtcIceCandidate=i.RTCIceCandidate||i.webkitRTCIceCandidate||i.mozRTCIceCandidate,a.vendor=null,i.mozRTCPeerConnection?a.vendor="mozilla":i.webkitRTCPeerConnection?a.vendor="webkit":i.RTCPeerConnection&&(a.vendor="generic"),!(a.RtcIceCandidate&&a.RtcSessionDescription&&a.RtcPeerConnection&&a.getUserMedia))return null;var c=!!n&&n.forceTURN;return new o({webRtc:a,client:e,URL:i.URL,roomId:t,turnServers:e.getTurnServers(),forceTURN:e._forceTURN||c})}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../utils":55,"babel-runtime/core-js/object/create":64,"babel-runtime/regenerator":86,bluebird:89,events:234}],57:[function(e,t,r){"use strict";function n(e){return a.lastIndex=0,e.replace(a,function(e){return u[e]})}function o(e){switch(typeof e){case"string":return'"'+n(e)+'"';case"number":return isFinite(e)?e:"null";case"boolean":return e;case"object":return null===e?"null":Array.isArray(e)?i(e):s(e);default:throw new Error("Cannot stringify: "+typeof e)}}function i(e){for(var t="[",r="",n=0;n0;)r.push(i%s),i=i/s|0}for(var u="",c=0;0===t[c]&&c=0;--l)u+=e[r[l]];return u}function r(e){if("string"!=typeof e)throw new TypeError("Expected String");if(0===e.length)return n.allocUnsafe(0);for(var t=[0],r=0;r>=8;for(;c>0;)t.push(255&c),c>>=8}for(var l=0;e[l]===a&&l0)throw new Error("Invalid string. Length must be a multiple of 4");var r=e.indexOf("=");return-1===r&&(r=t),[r,r===t?0:4-r%4]}function o(e){var t=n(e),r=t[0],o=t[1];return 3*(r+o)/4-o}function i(e,t,r){return 3*(t+r)/4-r}function s(e){for(var t,r=n(e),o=r[0],s=r[1],a=new f(i(e,o,s)),u=0,c=s>0?o-4:o,l=0;l>16&255,a[u++]=t>>8&255,a[u++]=255&t;return 2===s&&(t=d[e.charCodeAt(l)]<<2|d[e.charCodeAt(l+1)]>>4,a[u++]=255&t),1===s&&(t=d[e.charCodeAt(l)]<<10|d[e.charCodeAt(l+1)]<<4|d[e.charCodeAt(l+2)]>>2,a[u++]=t>>8&255,a[u++]=255&t),a}function a(e){return l[e>>18&63]+l[e>>12&63]+l[e>>6&63]+l[63&e]}function u(e,t,r){for(var n,o=[],i=t;is?s:i+16383));return 1===n?(t=e[r-1],o.push(l[t>>2]+l[t<<4&63]+"==")):2===n&&(t=(e[r-2]<<8)+e[r-1],o.push(l[t>>10]+l[t>>4&63]+l[t<<2&63]+"=")),o.join("")}r.byteLength=o,r.toByteArray=s,r.fromByteArray=c;for(var l=[],d=[],f="undefined"!=typeof Uint8Array?Uint8Array:Array,p="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",h=0,v=p.length;h0;)c(e)}function c(e){var t=e.shift();if("function"!=typeof t)t._settlePromises();else{var r=e.shift(),n=e.shift();t.call(r,n)}}var l;try{throw new Error}catch(e){l=e}var d=t("./schedule"),f=t("./queue"),p=t("./util");o.prototype.setScheduler=function(e){var t=this._schedule;return this._schedule=e,this._customScheduler=!0,t},o.prototype.hasCustomScheduler=function(){return this._customScheduler},o.prototype.enableTrampoline=function(){this._trampolineEnabled=!0},o.prototype.disableTrampolineIfNecessary=function(){p.hasDevTools&&(this._trampolineEnabled=!1)},o.prototype.haveItemsQueued=function(){return this._isTickUsed||this._haveDrainedQueues},o.prototype.fatalError=function(t,r){r?(e.stderr.write("Fatal "+(t instanceof Error?t.stack:t)+"\n"),e.exit(2)):this.throwLater(t)},o.prototype.throwLater=function(e,t){if(1===arguments.length&&(t=e,e=function(){throw t}),"undefined"!=typeof setTimeout)setTimeout(function(){e(t)},0);else try{this._schedule(function(){e(t)})}catch(e){throw new Error("No async scheduler available\n\n See http://goo.gl/MqrFmX\n")}},p.hasDevTools?(o.prototype.invokeLater=function(e,t,r){this._trampolineEnabled?i.call(this,e,t,r):this._schedule(function(){setTimeout(function(){e.call(t,r)},100)})},o.prototype.invoke=function(e,t,r){this._trampolineEnabled?s.call(this,e,t,r):this._schedule(function(){e.call(t,r)})},o.prototype.settlePromises=function(e){this._trampolineEnabled?a.call(this,e):this._schedule(function(){e._settlePromises()})}):(o.prototype.invokeLater=i,o.prototype.invoke=s,o.prototype.settlePromises=a),o.prototype._drainQueues=function(){u(this._normalQueue),this._reset(),this._haveDrainedQueues=!0,u(this._lateQueue)},o.prototype._queueTick=function(){this._isTickUsed||(this._isTickUsed=!0,this._schedule(this.drainQueues))},o.prototype._reset=function(){this._isTickUsed=!1},r.exports=o,r.exports.firstLineError=l},{"./queue":26,"./schedule":29,"./util":36}],3:[function(e,t,r){"use strict";t.exports=function(e,t,r,n){var o=!1,i=function(e,t){this._reject(t)},s=function(e,t){t.promiseRejectionQueued=!0,t.bindingPromise._then(i,i,null,this,e)},a=function(e,t){0==(50397184&this._bitField)&&this._resolveCallback(t.target)},u=function(e,t){t.promiseRejectionQueued||this._reject(e)};e.prototype.bind=function(i){o||(o=!0,e.prototype._propagateFrom=n.propagateFromFunction(),e.prototype._boundValue=n.boundValueFunction());var c=r(i),l=new e(t);l._propagateFrom(this,1);var d=this._target();if(l._setBoundTo(c),c instanceof e){var f={promiseRejectionQueued:!1,promise:l,target:d,bindingPromise:c};d._then(t,s,void 0,l,f),c._then(a,u,void 0,l,f),l._setOnCancel(c)}else l._resolveCallback(d);return l},e.prototype._setBoundTo=function(e){void 0!==e?(this._bitField=2097152|this._bitField,this._boundTo=e):this._bitField=-2097153&this._bitField},e.prototype._isBound=function(){return 2097152==(2097152&this._bitField)},e.bind=function(t,r){return e.resolve(r).bind(t)}}},{}],4:[function(e,t,r){"use strict";function n(){try{Promise===i&&(Promise=o)}catch(e){}return i}var o;"undefined"!=typeof Promise&&(o=Promise);var i=e("./promise")();i.noConflict=n,t.exports=i},{"./promise":22}],5:[function(e,t,r){"use strict";var n=Object.create;if(n){var o=n(null),i=n(null);o[" size"]=i[" size"]=0}t.exports=function(t){function r(e,r){var n;if(null!=e&&(n=e[r]),"function"!=typeof n){var o="Object "+a.classString(e)+" has no method '"+a.toString(r)+"'";throw new t.TypeError(o)}return n}function n(e){return r(e,this.pop()).apply(e,this)}function o(e){return e[this]}function i(e){var t=+this;return t<0&&(t=Math.max(0,t+e.length)),e[t]}var s,a=e("./util"),u=a.canEvaluate;a.isIdentifier;t.prototype.call=function(e){var t=[].slice.call(arguments,1);return t.push(e),this._then(n,void 0,void 0,t,void 0)},t.prototype.get=function(e){var t,r="number"==typeof e;if(r)t=i;else if(u){var n=s(e);t=null!==n?n:o}else t=o;return this._then(t,void 0,void 0,e,void 0)}}},{"./util":36}],6:[function(e,t,r){"use strict";t.exports=function(t,r,n,o){var i=e("./util"),s=i.tryCatch,a=i.errorObj,u=t._async;t.prototype.break=t.prototype.cancel=function(){if(!o.cancellation())return this._warn("cancellation is disabled");for(var e=this,t=e;e._isCancellable();){if(!e._cancelBy(t)){t._isFollowing()?t._followee().cancel():t._cancelBranched();break}var r=e._cancellationParent;if(null==r||!r._isCancellable()){e._isFollowing()?e._followee().cancel():e._cancelBranched();break}e._isFollowing()&&e._followee().cancel(),e._setWillBeCancelled(),t=e,e=r}},t.prototype._branchHasCancelled=function(){this._branchesRemainingToCancel--},t.prototype._enoughBranchesHaveCancelled=function(){return void 0===this._branchesRemainingToCancel||this._branchesRemainingToCancel<=0},t.prototype._cancelBy=function(e){return e===this?(this._branchesRemainingToCancel=0,this._invokeOnCancel(),!0):(this._branchHasCancelled(),!!this._enoughBranchesHaveCancelled()&&(this._invokeOnCancel(),!0))},t.prototype._cancelBranched=function(){this._enoughBranchesHaveCancelled()&&this._cancel()},t.prototype._cancel=function(){this._isCancellable()&&(this._setCancelled(),u.invoke(this._cancelPromises,this,void 0))},t.prototype._cancelPromises=function(){this._length()>0&&this._settlePromises()},t.prototype._unsetOnCancel=function(){this._onCancelField=void 0},t.prototype._isCancellable=function(){return this.isPending()&&!this._isCancelled()},t.prototype.isCancellable=function(){return this.isPending()&&!this.isCancelled()},t.prototype._doInvokeOnCancel=function(e,t){if(i.isArray(e))for(var r=0;r=0)return i[e]}var o=!1,i=[];return e.prototype._promiseCreated=function(){},e.prototype._pushContext=function(){},e.prototype._popContext=function(){return null},e._peekContext=e.prototype._peekContext=function(){},t.prototype._pushContext=function(){void 0!==this._trace&&(this._trace._promiseCreated=null,i.push(this._trace))},t.prototype._popContext=function(){if(void 0!==this._trace){var e=i.pop(),t=e._promiseCreated;return e._promiseCreated=null,t}return null},t.CapturedTrace=null,t.create=r,t.deactivateLongStackTraces=function(){},t.activateLongStackTraces=function(){var r=e.prototype._pushContext,i=e.prototype._popContext,s=e._peekContext,a=e.prototype._peekContext,u=e.prototype._promiseCreated;t.deactivateLongStackTraces=function(){e.prototype._pushContext=r,e.prototype._popContext=i,e._peekContext=s,e.prototype._peekContext=a,e.prototype._promiseCreated=u,o=!1},o=!0,e.prototype._pushContext=t.prototype._pushContext,e.prototype._popContext=t.prototype._popContext,e._peekContext=e.prototype._peekContext=n,e.prototype._promiseCreated=function(){var e=this._peekContext();e&&null==e._promiseCreated&&(e._promiseCreated=this)}},t}},{}],9:[function(t,r,n){"use strict";r.exports=function(r,n){function o(e,t){return{promise:t}}function i(){return!1}function s(e,t,r){var n=this;try{e(t,r,function(e){if("function"!=typeof e)throw new TypeError("onCancel must be a function, got: "+q.toString(e));n._attachCancellationCallback(e)})}catch(e){return e}}function a(e){if(!this._isCancellable())return this;var t=this._onCancel();void 0!==t?q.isArray(t)?t.push(e):this._setOnCancel([t,e]):this._setOnCancel(e)}function u(){return this._onCancelField}function c(e){this._onCancelField=e}function l(){this._cancellationParent=void 0,this._onCancelField=void 0}function d(e,t){if(0!=(1&t)){this._cancellationParent=e;var r=e._branchesRemainingToCancel;void 0===r&&(r=0),e._branchesRemainingToCancel=r+1}0!=(2&t)&&e._isBound()&&this._setBoundTo(e._boundTo)}function f(e,t){0!=(2&t)&&e._isBound()&&this._setBoundTo(e._boundTo)}function p(){var e=this._boundTo;return void 0!==e&&e instanceof r?e.isFulfilled()?e.value():void 0:e}function h(){this._trace=new D(this._peekContext())}function v(e,t){if(K(e)){var r=this._trace;if(void 0!==r&&t&&(r=r._parent),void 0!==r)r.attachExtraTrace(e);else if(!e.__stackCleaned__){var n=T(e);q.notEnumerableProp(e,"stack",n.message+"\n"+n.stack.join("\n")),q.notEnumerableProp(e,"__stackCleaned__",!0)}}}function m(){this._trace=void 0}function y(e,t,r,n,o){if(void 0===e&&null!==t&&X){if(void 0!==o&&o._returnedNonUndefined())return;if(0==(65535&n._bitField))return;r&&(r+=" ");var i="",s="";if(t._trace){for(var a=t._trace.stack.split("\n"),u=S(a),c=u.length-1;c>=0;--c){var l=u[c];if(!$.test(l)){var d=l.match(V);d&&(i="at "+d[1]+":"+d[2]+":"+d[3]+" ");break}}if(u.length>0)for(var f=u[0],c=0;c0&&(s="\n"+a[c-1]);break}}var p="a promise was created in a "+r+"handler "+i+"but was not returned from it, see http://goo.gl/rRqMUw"+s;n._warn(p,!0,t)}}function _(e,t){var r=e+" is deprecated and will be removed in a future version.";return t&&(r+=" Use "+t+" instead."),g(r)}function g(e,t,n){if(ue.warnings){var o,i=new F(e);if(t)n._attachExtraTrace(i);else if(ue.longStackTraces&&(o=r._peekContext()))o.attachExtraTrace(i);else{var s=T(i);i.stack=s.message+"\n"+s.stack.join("\n")}ne("warning",i)||x(i,"",!0)}}function b(e,t){for(var r=0;r=0;--a)if(n[a]===i){s=a;break}for(var a=s;a>=0;--a){var u=n[a];if(t[o]!==u)break;t.pop(),o--}t=n}}function S(e){for(var t=[],r=0;r0&&"SyntaxError"!=e.name&&(t=t.slice(r)),t}function T(e){var t=e.stack,r=e.toString();return t="string"==typeof t&&t.length>0?k(e):[" (No stack trace)"],{message:r,stack:"SyntaxError"==e.name?t:S(t)}}function x(e,t,r){if("undefined"!=typeof console){var n;if(q.isObject(e)){var o=e.stack;n=t+H(o,e)}else n=t+String(e);"function"==typeof L?L(n,r):"function"!=typeof console.log&&"object"!=typeof console.log||console.log(n)}}function R(e,t,r,n){var o=!1;try{"function"==typeof t&&(o=!0,"rejectionHandled"===e?t(n):t(r,n))}catch(e){N.throwLater(e)}"unhandledRejection"===e?ne(e,r,n)||o||x(r,"Unhandled rejection "):ne(e,n)}function I(e){var t;if("function"==typeof e)t="[function "+(e.name||"anonymous")+"]";else{t=e&&"function"==typeof e.toString?e.toString():q.toString(e);if(/\[object [a-zA-Z0-9$_]+\]/.test(t))try{t=JSON.stringify(e)}catch(e){}0===t.length&&(t="(empty array)")}return"(<"+C(t)+">, no stack trace)"}function C(e){return e.length<41?e:e.substr(0,38)+"..."}function j(){return"function"==typeof ae}function O(e){var t=e.match(se);if(t)return{fileName:t[1],line:parseInt(t[2],10)}}function A(e,t){if(j()){for(var r,n,o=e.stack.split("\n"),i=t.stack.split("\n"),s=-1,a=-1,u=0;u=a||(ie=function(e){if(G.test(e))return!0;var t=O(e);return!!(t&&t.fileName===r&&s<=t.line&&t.line<=a)})}}function D(e){this._parent=e,this._promisesCreated=0;var t=this._length=1+(void 0===e?0:e._length);ae(this,D),t>32&&this.uncycle()}var M,P,L,U=r._getDomain,N=r._async,F=t("./errors").Warning,q=t("./util"),B=t("./es5"),K=q.canAttachTrace,G=/[\\\/]bluebird[\\\/]js[\\\/](release|debug|instrumented)/,$=/\((?:timers\.js):\d+:\d+\)/,V=/[\/<\(](.+?):(\d+):(\d+)\)?\s*$/,W=null,H=null,z=!1,Q=!(0==q.env("BLUEBIRD_DEBUG")),J=!(0==q.env("BLUEBIRD_WARNINGS")||!Q&&!q.env("BLUEBIRD_WARNINGS")),Y=!(0==q.env("BLUEBIRD_LONG_STACK_TRACES")||!Q&&!q.env("BLUEBIRD_LONG_STACK_TRACES")),X=0!=q.env("BLUEBIRD_W_FORGOTTEN_RETURN")&&(J||!!q.env("BLUEBIRD_W_FORGOTTEN_RETURN"));r.prototype.suppressUnhandledRejections=function(){var e=this._target();e._bitField=-1048577&e._bitField|524288},r.prototype._ensurePossibleRejectionHandled=function(){if(0==(524288&this._bitField)){this._setRejectionIsUnhandled();var e=this;setTimeout(function(){e._notifyUnhandledRejection()},1)}},r.prototype._notifyUnhandledRejectionIsHandled=function(){R("rejectionHandled",M,void 0,this)},r.prototype._setReturnedNonUndefined=function(){this._bitField=268435456|this._bitField},r.prototype._returnedNonUndefined=function(){return 0!=(268435456&this._bitField)},r.prototype._notifyUnhandledRejection=function(){if(this._isRejectionUnhandled()){var e=this._settledValue();this._setUnhandledRejectionIsNotified(),R("unhandledRejection",P,e,this)}},r.prototype._setUnhandledRejectionIsNotified=function(){this._bitField=262144|this._bitField},r.prototype._unsetUnhandledRejectionIsNotified=function(){this._bitField=-262145&this._bitField},r.prototype._isUnhandledRejectionNotified=function(){return(262144&this._bitField)>0},r.prototype._setRejectionIsUnhandled=function(){this._bitField=1048576|this._bitField},r.prototype._unsetRejectionIsUnhandled=function(){this._bitField=-1048577&this._bitField,this._isUnhandledRejectionNotified()&&(this._unsetUnhandledRejectionIsNotified(),this._notifyUnhandledRejectionIsHandled())},r.prototype._isRejectionUnhandled=function(){return(1048576&this._bitField)>0},r.prototype._warn=function(e,t,r){return g(e,t,r||this)},r.onPossiblyUnhandledRejection=function(e){var t=U();P="function"==typeof e?null===t?e:q.domainBind(t,e):void 0},r.onUnhandledRejectionHandled=function(e){var t=U();M="function"==typeof e?null===t?e:q.domainBind(t,e):void 0};var Z=function(){};r.longStackTraces=function(){if(N.haveItemsQueued()&&!ue.longStackTraces)throw new Error("cannot enable long stack traces after promises have been created\n\n See http://goo.gl/MqrFmX\n");if(!ue.longStackTraces&&j()){var e=r.prototype._captureStackTrace,t=r.prototype._attachExtraTrace,o=r.prototype._dereferenceTrace;ue.longStackTraces=!0,Z=function(){if(N.haveItemsQueued()&&!ue.longStackTraces)throw new Error("cannot enable long stack traces after promises have been created\n\n See http://goo.gl/MqrFmX\n");r.prototype._captureStackTrace=e,r.prototype._attachExtraTrace=t,r.prototype._dereferenceTrace=o,n.deactivateLongStackTraces(),N.enableTrampoline(),ue.longStackTraces=!1},r.prototype._captureStackTrace=h,r.prototype._attachExtraTrace=v,r.prototype._dereferenceTrace=m,n.activateLongStackTraces(),N.disableTrampolineIfNecessary()}},r.hasLongStackTraces=function(){return ue.longStackTraces&&j()};var ee=function(){try{if("function"==typeof CustomEvent){var e=new CustomEvent("CustomEvent");return q.global.dispatchEvent(e),function(e,t){var r={detail:t,cancelable:!0};B.defineProperty(r,"promise",{value:t.promise}),B.defineProperty(r,"reason",{value:t.reason});var n=new CustomEvent(e.toLowerCase(),r);return!q.global.dispatchEvent(n)}}if("function"==typeof Event){var e=new Event("CustomEvent");return q.global.dispatchEvent(e),function(e,t){var r=new Event(e.toLowerCase(),{cancelable:!0});return r.detail=t,B.defineProperty(r,"promise",{value:t.promise}),B.defineProperty(r,"reason",{value:t.reason}),!q.global.dispatchEvent(r)}}var e=document.createEvent("CustomEvent");return e.initCustomEvent("testingtheevent",!1,!0,{}),q.global.dispatchEvent(e),function(e,t){var r=document.createEvent("CustomEvent");return r.initCustomEvent(e.toLowerCase(),!1,!0,t),!q.global.dispatchEvent(r)}}catch(e){}return function(){return!1}}(),te=function(){return q.isNode?function(){return e.emit.apply(e,arguments)}:q.global?function(e){var t="on"+e.toLowerCase(),r=q.global[t];return!!r&&(r.apply(q.global,[].slice.call(arguments,1)),!0)}:function(){return!1}}(),re={promiseCreated:o,promiseFulfilled:o,promiseRejected:o,promiseResolved:o,promiseCancelled:o,promiseChained:function(e,t,r){return{promise:t,child:r}},warning:function(e,t){return{warning:t}},unhandledRejection:function(e,t,r){return{reason:t,promise:r}},rejectionHandled:o},ne=function(e){var t=!1;try{t=te.apply(null,arguments)}catch(e){N.throwLater(e),t=!0}var r=!1;try{r=ee(e,re[e].apply(null,arguments))}catch(e){N.throwLater(e),r=!0}return r||t};r.config=function(e){if(e=Object(e),"longStackTraces"in e&&(e.longStackTraces?r.longStackTraces():!e.longStackTraces&&r.hasLongStackTraces()&&Z()),"warnings"in e){var t=e.warnings;ue.warnings=!!t,X=ue.warnings,q.isObject(t)&&"wForgottenReturn"in t&&(X=!!t.wForgottenReturn)}if("cancellation"in e&&e.cancellation&&!ue.cancellation){if(N.haveItemsQueued())throw new Error("cannot enable cancellation after promises are in use");r.prototype._clearCancellationData=l,r.prototype._propagateFrom=d,r.prototype._onCancel=u,r.prototype._setOnCancel=c,r.prototype._attachCancellationCallback=a,r.prototype._execute=s,oe=d,ue.cancellation=!0}return"monitoring"in e&&(e.monitoring&&!ue.monitoring?(ue.monitoring=!0,r.prototype._fireEvent=ne):!e.monitoring&&ue.monitoring&&(ue.monitoring=!1,r.prototype._fireEvent=i)),r},r.prototype._fireEvent=i,r.prototype._execute=function(e,t,r){try{e(t,r)}catch(e){return e}},r.prototype._onCancel=function(){},r.prototype._setOnCancel=function(e){},r.prototype._attachCancellationCallback=function(e){},r.prototype._captureStackTrace=function(){},r.prototype._attachExtraTrace=function(){},r.prototype._dereferenceTrace=function(){},r.prototype._clearCancellationData=function(){},r.prototype._propagateFrom=function(e,t){};var oe=f,ie=function(){return!1},se=/[\/<\(]([^:\/]+):(\d+):(?:\d+)\)?\s*$/;q.inherits(D,Error),n.CapturedTrace=D,D.prototype.uncycle=function(){var e=this._length;if(!(e<2)){for(var t=[],r={},n=0,o=this;void 0!==o;++n)t.push(o),o=o._parent;e=this._length=n;for(var n=e-1;n>=0;--n){var i=t[n].stack;void 0===r[i]&&(r[i]=n)}for(var n=0;n0&&(t[a-1]._parent=void 0,t[a-1]._length=1),t[n]._parent=void 0,t[n]._length=1;var u=n>0?t[n-1]:this;a=0;--l)t[l]._length=c,c++;return}}}},D.prototype.attachExtraTrace=function(e){if(!e.__stackCleaned__){this.uncycle();for(var t=T(e),r=t.message,n=[t.stack],o=this;void 0!==o;)n.push(S(o.stack.split("\n"))),o=o._parent;w(n),E(n),q.notEnumerableProp(e,"stack",b(r,n)),q.notEnumerableProp(e,"__stackCleaned__",!0)}};var ae=function(){var e=/^\s*at\s*/,t=function(e,t){return"string"==typeof e?e:void 0!==t.name&&void 0!==t.message?t.toString():I(t)};if("number"==typeof Error.stackTraceLimit&&"function"==typeof Error.captureStackTrace){Error.stackTraceLimit+=6,W=e,H=t;var r=Error.captureStackTrace;return ie=function(e){return G.test(e)},function(e,t){Error.stackTraceLimit+=6,r(e,t),Error.stackTraceLimit-=6}}var n=new Error;if("string"==typeof n.stack&&n.stack.split("\n")[0].indexOf("stackDetection@")>=0)return W=/@/,H=t,z=!0,function(e){e.stack=(new Error).stack};var o;try{throw new Error}catch(e){o="stack"in e}return"stack"in n||!o||"number"!=typeof Error.stackTraceLimit?(H=function(e,t){return"string"==typeof e?e:"object"!=typeof t&&"function"!=typeof t||void 0===t.name||void 0===t.message?I(t):t.toString()},null):(W=e,H=t,function(e){Error.stackTraceLimit+=6;try{throw new Error}catch(t){e.stack=t.stack}Error.stackTraceLimit-=6})}();"undefined"!=typeof console&&void 0!==console.warn&&(L=function(e){console.warn(e)},q.isNode&&e.stderr.isTTY?L=function(e,t){var r=t?"":"";console.warn(r+e+"\n")}:q.isNode||"string"!=typeof(new Error).stack||(L=function(e,t){console.warn("%c"+e,t?"color: darkorange":"color: red")}));var ue={warnings:J,longStackTraces:!1,cancellation:!1,monitoring:!1};return Y&&r.longStackTraces(),{longStackTraces:function(){return ue.longStackTraces},warnings:function(){return ue.warnings},cancellation:function(){return ue.cancellation},monitoring:function(){return ue.monitoring},propagateFromFunction:function(){return oe},boundValueFunction:function(){return p},checkForgottenReturns:y,setBounds:A,warn:g,deprecated:_,CapturedTrace:D,fireDomEvent:ee,fireGlobalEvent:te}}},{"./errors":12,"./es5":13,"./util":36}],10:[function(e,t,r){"use strict";t.exports=function(e){function t(){return this.value}function r(){throw this.reason}e.prototype.return=e.prototype.thenReturn=function(r){return r instanceof e&&r.suppressUnhandledRejections(),this._then(t,void 0,void 0,{value:r},void 0)},e.prototype.throw=e.prototype.thenThrow=function(e){return this._then(r,void 0,void 0,{reason:e},void 0)},e.prototype.catchThrow=function(e){if(arguments.length<=1)return this._then(void 0,r,void 0,{reason:e},void 0);var t=arguments[1],n=function(){throw t};return this.caught(e,n)},e.prototype.catchReturn=function(r){if(arguments.length<=1)return r instanceof e&&r.suppressUnhandledRejections(),this._then(void 0,t,void 0,{value:r},void 0);var n=arguments[1];n instanceof e&&n.suppressUnhandledRejections();var o=function(){return n};return this.caught(r,o)}}},{}],11:[function(e,t,r){"use strict";t.exports=function(e,t){function r(){return i(this)}function n(e,r){return o(e,r,t,t)}var o=e.reduce,i=e.all;e.prototype.each=function(e){return o(this,e,t,0)._then(r,void 0,void 0,this,void 0)},e.prototype.mapSeries=function(e){return o(this,e,t,t)},e.each=function(e,n){return o(e,n,t,0)._then(r,void 0,void 0,e,void 0)},e.mapSeries=n}},{}],12:[function(e,t,r){"use strict";function n(e,t){function r(n){if(!(this instanceof r))return new r(n);d(this,"message","string"==typeof n?n:t),d(this,"name",e),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):Error.call(this)}return l(r,Error),r}function o(e){if(!(this instanceof o))return new o(e);d(this,"name","OperationalError"),d(this,"message",e),this.cause=e,this.isOperational=!0, +e instanceof Error?(d(this,"message",e.message),d(this,"stack",e.stack)):Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}var i,s,a=e("./es5"),u=a.freeze,c=e("./util"),l=c.inherits,d=c.notEnumerableProp,f=n("Warning","warning"),p=n("CancellationError","cancellation error"),h=n("TimeoutError","timeout error"),v=n("AggregateError","aggregate error");try{i=TypeError,s=RangeError}catch(e){i=n("TypeError","type error"),s=n("RangeError","range error")}for(var m="join pop push shift unshift slice filter forEach some every map indexOf lastIndexOf reduce reduceRight sort reverse".split(" "),y=0;y1?e.cancelPromise._reject(t):e.cancelPromise._cancel(),e.cancelPromise=null,!0)}function a(){return c.call(this,this.promise._target()._settledValue())}function u(e){if(!s(this,e))return f.e=e,f}function c(e){var o=this.promise,c=this.handler;if(!this.called){this.called=!0;var l=this.isFinallyHandler()?c.call(o._boundValue()):c.call(o._boundValue(),e);if(l===n)return l;if(void 0!==l){o._setReturnedNonUndefined();var p=r(l,o);if(p instanceof t){if(null!=this.cancelPromise){if(p._isCancelled()){var h=new d("late cancellation observer");return o._attachExtraTrace(h),f.e=h,f}p.isPending()&&p._attachCancellationCallback(new i(this))}return p._then(a,u,void 0,this,void 0)}}}return o.isRejected()?(s(this),f.e=e,f):(s(this),e)}var l=e("./util"),d=t.CancellationError,f=l.errorObj,p=e("./catch_filter")(n);return o.prototype.isFinallyHandler=function(){return 0===this.type},i.prototype._resultCancelled=function(){s(this.finallyHandler)},t.prototype._passThrough=function(e,t,r,n){return"function"!=typeof e?this.then():this._then(r,n,void 0,new o(this,t,e),void 0)},t.prototype.lastly=t.prototype.finally=function(e){return this._passThrough(e,0,c,c)},t.prototype.tap=function(e){return this._passThrough(e,1,c)},t.prototype.tapCatch=function(e){var r=arguments.length;if(1===r)return this._passThrough(e,1,void 0,c);var n,o=new Array(r-1),i=0;for(n=0;n0&&"function"==typeof arguments[t]){e=arguments[t];var n}var o=[].slice.call(arguments);e&&o.pop();var n=new r(o).promise();return void 0!==e?n.spread(e):n}}},{"./util":36}],18:[function(e,t,r){"use strict";t.exports=function(t,r,n,o,i,s){function a(e,t,r,n){this.constructor$(e),this._promise._captureStackTrace();var o=c();this._callback=null===o?t:l.domainBind(o,t),this._preservedValues=n===i?new Array(this.length()):null,this._limit=r,this._inFlight=0,this._queue=[],p.invoke(this._asyncInit,this,void 0)}function u(e,r,o,i){if("function"!=typeof r)return n("expecting a function but got "+l.classString(r));var s=0;if(void 0!==o){if("object"!=typeof o||null===o)return t.reject(new TypeError("options argument must be an object but it is "+l.classString(o)));if("number"!=typeof o.concurrency)return t.reject(new TypeError("'concurrency' must be a number but it is "+l.classString(o.concurrency)));s=o.concurrency}return s="number"==typeof s&&isFinite(s)&&s>=1?s:0,new a(e,r,s,i).promise()}var c=t._getDomain,l=e("./util"),d=l.tryCatch,f=l.errorObj,p=t._async;l.inherits(a,r),a.prototype._asyncInit=function(){this._init$(void 0,-2)},a.prototype._init=function(){},a.prototype._promiseFulfilled=function(e,r){var n=this._values,i=this.length(),a=this._preservedValues,u=this._limit;if(r<0){if(r=-1*r-1,n[r]=e,u>=1&&(this._inFlight--,this._drainQueue(),this._isResolved()))return!0}else{if(u>=1&&this._inFlight>=u)return n[r]=e,this._queue.push(r),!1;null!==a&&(a[r]=e);var c=this._promise,l=this._callback,p=c._boundValue();c._pushContext();var h=d(l).call(p,e,r,i),v=c._popContext();if(s.checkForgottenReturns(h,v,null!==a?"Promise.filter":"Promise.map",c),h===f)return this._reject(h.e),!0;var m=o(h,this._promise);if(m instanceof t){m=m._target();var y=m._bitField;if(0==(50397184&y))return u>=1&&this._inFlight++,n[r]=m,m._proxy(this,-1*(r+1)),!1;if(0==(33554432&y))return 0!=(16777216&y)?(this._reject(m._reason()),!0):(this._cancel(),!0);h=m._value()}n[r]=h}return++this._totalResolved>=i&&(null!==a?this._filter(n,a):this._resolve(n),!0)},a.prototype._drainQueue=function(){for(var e=this._queue,t=this._limit,r=this._values;e.length>0&&this._inFlight1){i.deprecated("calling Promise.try with more than 1 argument");var c=arguments[1],l=arguments[2];u=s.isArray(c)?a(e).apply(l,c):a(e).call(l,c)}else u=a(e)();var d=n._popContext();return i.checkForgottenReturns(u,d,"Promise.try",n),n._resolveFromSyncValue(u),n},t.prototype._resolveFromSyncValue=function(e){e===s.errorObj?this._rejectCallback(e.e,!1):this._resolveCallback(e,!0)}}},{"./util":36}],20:[function(e,t,r){"use strict";function n(e){return e instanceof Error&&l.getPrototypeOf(e)===Error.prototype}function o(e){var t;if(n(e)){t=new c(e),t.name=e.name,t.message=e.message,t.stack=e.stack;for(var r=l.keys(e),o=0;o1){var r,n=new Array(t-1),o=0;for(r=0;r0&&"function"!=typeof e&&"function"!=typeof t){var r=".then() only accepts functions but was passed: "+h.classString(e);arguments.length>1&&(r+=", "+h.classString(t)),this._warn(r)}return this._then(e,t,void 0,void 0,void 0)},i.prototype.done=function(e,t){this._then(e,t,void 0,void 0,void 0)._setIsFinal()},i.prototype.spread=function(e){return"function"!=typeof e?f("expecting a function but got "+h.classString(e)):this.all()._then(e,void 0,void 0,w,void 0)},i.prototype.toJSON=function(){var e={isFulfilled:!1,isRejected:!1,fulfillmentValue:void 0,rejectionReason:void 0};return this.isFulfilled()?(e.fulfillmentValue=this.value(),e.isFulfilled=!0):this.isRejected()&&(e.rejectionReason=this.reason(),e.isRejected=!0),e},i.prototype.all=function(){return arguments.length>0&&this._warn(".all() was passed arguments but it does not take any"),new T(this).promise()},i.prototype.error=function(e){return this.caught(h.originatesFromRejection,e)},i.getNewLibraryCopy=r.exports,i.is=function(e){return e instanceof i},i.fromNode=i.fromCallback=function(e){var t=new i(E);t._captureStackTrace();var r=arguments.length>1&&!!Object(arguments[1]).multiArgs,n=D(e)(O(t,r));return n===A&&t._rejectCallback(n.e,!0),t._isFateSealed()||t._setAsyncGuaranteed(),t},i.all=function(e){return new T(e).promise()},i.cast=function(e){var t=k(e);return t instanceof i||(t=new i(E),t._captureStackTrace(),t._setFulfilled(),t._rejectionHandler0=e),t},i.resolve=i.fulfilled=i.cast,i.reject=i.rejected=function(e){var t=new i(E);return t._captureStackTrace(),t._rejectCallback(e,!0),t},i.setScheduler=function(e){if("function"!=typeof e)throw new g("expecting a function but got "+h.classString(e));return y.setScheduler(e)},i.prototype._then=function(e,t,r,n,o){var s=void 0!==o,a=s?o:new i(E),u=this._target(),l=u._bitField;s||(a._propagateFrom(this,3),a._captureStackTrace(),void 0===n&&0!=(2097152&this._bitField)&&(n=0!=(50397184&l)?this._boundValue():u===this?void 0:this._boundTo),this._fireEvent("promiseChained",this,a));var d=c();if(0!=(50397184&l)){var f,p,v=u._settlePromiseCtx;0!=(33554432&l)?(p=u._rejectionHandler0,f=e):0!=(16777216&l)?(p=u._fulfillmentHandler0,f=t,u._unsetRejectionIsUnhandled()):(v=u._settlePromiseLateCancellationObserver,p=new b("late cancellation observer"),u._attachExtraTrace(p),f=t),y.invoke(v,u,{handler:null===d?f:"function"==typeof f&&h.domainBind(d,f),promise:a,receiver:n,value:p})}else u._addCallbacks(e,t,a,n,d);return a},i.prototype._length=function(){return 65535&this._bitField},i.prototype._isFateSealed=function(){return 0!=(117506048&this._bitField)},i.prototype._isFollowing=function(){return 67108864==(67108864&this._bitField)},i.prototype._setLength=function(e){this._bitField=-65536&this._bitField|65535&e},i.prototype._setFulfilled=function(){this._bitField=33554432|this._bitField,this._fireEvent("promiseFulfilled",this)},i.prototype._setRejected=function(){this._bitField=16777216|this._bitField,this._fireEvent("promiseRejected",this)},i.prototype._setFollowing=function(){this._bitField=67108864|this._bitField,this._fireEvent("promiseResolved",this)},i.prototype._setIsFinal=function(){this._bitField=4194304|this._bitField},i.prototype._isFinal=function(){return(4194304&this._bitField)>0},i.prototype._unsetCancelled=function(){this._bitField=-65537&this._bitField},i.prototype._setCancelled=function(){this._bitField=65536|this._bitField,this._fireEvent("promiseCancelled",this)},i.prototype._setWillBeCancelled=function(){this._bitField=8388608|this._bitField},i.prototype._setAsyncGuaranteed=function(){y.hasCustomScheduler()||(this._bitField=134217728|this._bitField)},i.prototype._receiverAt=function(e){var t=0===e?this._receiver0:this[4*e-4+3];if(t!==p)return void 0===t&&this._isBound()?this._boundValue():t},i.prototype._promiseAt=function(e){return this[4*e-4+2]},i.prototype._fulfillmentHandlerAt=function(e){return this[4*e-4+0]},i.prototype._rejectionHandlerAt=function(e){return this[4*e-4+1]},i.prototype._boundValue=function(){},i.prototype._migrateCallback0=function(e){var t=(e._bitField,e._fulfillmentHandler0),r=e._rejectionHandler0,n=e._promise0,o=e._receiverAt(0);void 0===o&&(o=p),this._addCallbacks(t,r,n,o,null)},i.prototype._migrateCallbackAt=function(e,t){var r=e._fulfillmentHandlerAt(t),n=e._rejectionHandlerAt(t),o=e._promiseAt(t),i=e._receiverAt(t);void 0===i&&(i=p),this._addCallbacks(r,n,o,i,null)},i.prototype._addCallbacks=function(e,t,r,n,o){var i=this._length();if(i>=65531&&(i=0,this._setLength(0)),0===i)this._promise0=r,this._receiver0=n,"function"==typeof e&&(this._fulfillmentHandler0=null===o?e:h.domainBind(o,e)),"function"==typeof t&&(this._rejectionHandler0=null===o?t:h.domainBind(o,t));else{var s=4*i-4;this[s+2]=r,this[s+3]=n,"function"==typeof e&&(this[s+0]=null===o?e:h.domainBind(o,e)),"function"==typeof t&&(this[s+1]=null===o?t:h.domainBind(o,t))}return this._setLength(i+1),i},i.prototype._proxy=function(e,t){this._addCallbacks(void 0,void 0,t,e,null)},i.prototype._resolveCallback=function(e,t){if(0==(117506048&this._bitField)){if(e===this)return this._rejectCallback(l(),!1);var r=k(e,this);if(!(r instanceof i))return this._fulfill(e);t&&this._propagateFrom(r,2);var n=r._target();if(n===this)return void this._reject(l());var o=n._bitField;if(0==(50397184&o)){var s=this._length();s>0&&n._migrateCallback0(this);for(var a=1;a>>16)){if(e===this){var r=l();return this._attachExtraTrace(r),this._reject(r)}this._setFulfilled(),this._rejectionHandler0=e,(65535&t)>0&&(0!=(134217728&t)?this._settlePromises():y.settlePromises(this),this._dereferenceTrace())}},i.prototype._reject=function(e){var t=this._bitField;if(!((117506048&t)>>>16)){if(this._setRejected(),this._fulfillmentHandler0=e,this._isFinal())return y.fatalError(e,h.isNode);(65535&t)>0?y.settlePromises(this):this._ensurePossibleRejectionHandled()}},i.prototype._fulfillPromises=function(e,t){for(var r=1;r0){if(0!=(16842752&e)){var r=this._fulfillmentHandler0;this._settlePromise0(this._rejectionHandler0,r,e),this._rejectPromises(t,r)}else{var n=this._rejectionHandler0;this._settlePromise0(this._fulfillmentHandler0,n,e),this._fulfillPromises(t,n)}this._setLength(0)}this._clearCancellationData()},i.prototype._settledValue=function(){var e=this._bitField;return 0!=(33554432&e)?this._rejectionHandler0:0!=(16777216&e)?this._fulfillmentHandler0:void 0},i.defer=i.pending=function(){return I.deprecated("Promise.defer","new Promise"),{promise:new i(E),resolve:s,reject:a}},h.notEnumerableProp(i,"_makeSelfResolutionError",l),t("./method")(i,E,k,f,I),t("./bind")(i,E,k,I),t("./cancel")(i,T,f,I),t("./direct_resolve")(i),t("./synchronous_inspection")(i),t("./join")(i,T,k,E,y,c),i.Promise=i,i.version="3.5.3",t("./map.js")(i,T,f,k,E,I),t("./call_get.js")(i),t("./using.js")(i,f,k,R,E,I),t("./timers.js")(i,E,I),t("./generators.js")(i,f,E,k,n,I),t("./nodeify.js")(i),t("./promisify.js")(i,E),t("./props.js")(i,T,k,f),t("./race.js")(i,E,k,f),t("./reduce.js")(i,T,f,k,E,I),t("./settle.js")(i,T,I),t("./some.js")(i,T,f),t("./filter.js")(i,E),t("./each.js")(i,E),t("./any.js")(i),h.toFastProperties(i),h.toFastProperties(i.prototype),u({a:1}),u({b:2}),u({c:3}),u(1),u(function(){}),u(void 0),u(!1),u(new i(E)),I.setBounds(m.firstLineError,h.lastLineError),i}},{"./any.js":1,"./async":2,"./bind":3,"./call_get.js":5,"./cancel":6,"./catch_filter":7,"./context":8,"./debuggability":9,"./direct_resolve":10,"./each.js":11,"./errors":12,"./es5":13,"./filter.js":14,"./finally":15,"./generators.js":16,"./join":17,"./map.js":18,"./method":19,"./nodeback":20,"./nodeify.js":21,"./promise_array":23,"./promisify.js":24,"./props.js":25,"./race.js":27,"./reduce.js":28,"./settle.js":30,"./some.js":31,"./synchronous_inspection":32,"./thenables":33,"./timers.js":34,"./using.js":35,"./util":36}],23:[function(e,t,r){"use strict";t.exports=function(t,r,n,o,i){function s(e){switch(e){case-2:return[];case-3:return{};case-6:return new Map}}function a(e){var n=this._promise=new t(r);e instanceof t&&n._propagateFrom(e,3),n._setOnCancel(this),this._values=e,this._length=0,this._totalResolved=0,this._init(void 0,-2)}var u=e("./util");u.isArray;return u.inherits(a,i),a.prototype.length=function(){return this._length},a.prototype.promise=function(){return this._promise},a.prototype._init=function e(r,i){var a=n(this._values,this._promise);if(a instanceof t){a=a._target();var c=a._bitField;if(this._values=a,0==(50397184&c))return this._promise._setAsyncGuaranteed(),a._then(e,this._reject,void 0,this,i);if(0==(33554432&c))return 0!=(16777216&c)?this._reject(a._reason()):this._cancel();a=a._value()}if(null===(a=u.asArray(a))){var l=o("expecting an array or an iterable object but got "+u.classString(a)).reason();return void this._promise._rejectCallback(l,!1)}if(0===a.length)return void(-5===i?this._resolveEmptyArray():this._resolve(s(i)));this._iterate(a)},a.prototype._iterate=function(e){var r=this.getActualLength(e.length);this._length=r,this._values=this.shouldCopyValues()?new Array(r):this._values;for(var o=this._promise,i=!1,s=null,a=0;a=this._length&&(this._resolve(this._values),!0)},a.prototype._promiseCancelled=function(){return this._cancel(),!0},a.prototype._promiseRejected=function(e){return this._totalResolved++,this._reject(e),!0},a.prototype._resultCancelled=function(){if(!this._isResolved()){var e=this._values;if(this._cancel(),e instanceof t)e.cancel();else for(var r=0;r=this._length){var r;if(this._isMap)r=f(this._values);else{r={};for(var n=this.length(),o=0,i=this.length();o>1},t.prototype.props=function(){return s(this)},t.props=function(e){return s(e)}}},{"./es5":13,"./util":36}],26:[function(e,t,r){"use strict";function n(e,t,r,n,o){for(var i=0;i=this._length&&(this._resolve(this._values),!0)},o.prototype._promiseFulfilled=function(e,t){var r=new i;return r._bitField=33554432,r._settledValueField=e,this._promiseResolved(t,r)},o.prototype._promiseRejected=function(e,t){var r=new i;return r._bitField=16777216,r._settledValueField=e,this._promiseResolved(t,r)},t.settle=function(e){return n.deprecated(".settle()",".reflect()"),new o(e).promise()},t.prototype.settle=function(){return t.settle(this)}}},{"./util":36}],31:[function(e,t,r){"use strict";t.exports=function(t,r,n){function o(e){this.constructor$(e),this._howMany=0,this._unwrap=!1,this._initialized=!1}function i(e,t){if((0|t)!==t||t<0)return n("expecting a positive integer\n\n See http://goo.gl/MqrFmX\n");var r=new o(e),i=r.promise();return r.setHowMany(t),r.init(),i}var s=e("./util"),a=e("./errors").RangeError,u=e("./errors").AggregateError,c=s.isArray,l={};s.inherits(o,r),o.prototype._init=function(){if(this._initialized){if(0===this._howMany)return void this._resolve([]);this._init$(void 0,-5);var e=c(this._values);!this._isResolved()&&e&&this._howMany>this._canPossiblyFulfill()&&this._reject(this._getRangeError(this.length()))}},o.prototype.init=function(){this._initialized=!0,this._init()},o.prototype.setUnwrap=function(){this._unwrap=!0},o.prototype.howMany=function(){return this._howMany},o.prototype.setHowMany=function(e){this._howMany=e},o.prototype._promiseFulfilled=function(e){return this._addFulfilled(e),this._fulfilled()===this.howMany()&&(this._values.length=this.howMany(),1===this.howMany()&&this._unwrap?this._resolve(this._values[0]):this._resolve(this._values),!0)},o.prototype._promiseRejected=function(e){return this._addRejected(e),this._checkOutcome()},o.prototype._promiseCancelled=function(){return this._values instanceof t||null==this._values?this._cancel():(this._addRejected(l),this._checkOutcome())},o.prototype._checkOutcome=function(){if(this.howMany()>this._canPossiblyFulfill()){for(var e=new u,t=this.length();t0?this._reject(e):this._cancel(),!0}return!1},o.prototype._fulfilled=function(){return this._totalResolved},o.prototype._rejected=function(){return this._values.length-this.length()},o.prototype._addRejected=function(e){this._values.push(e)},o.prototype._addFulfilled=function(e){this._values[this._totalResolved++]=e},o.prototype._canPossiblyFulfill=function(){return this.length()-this._rejected()},o.prototype._getRangeError=function(e){var t="Input array must contain at least "+this._howMany+" items but contains only "+e+" items";return new a(t)},o.prototype._resolveEmptyArray=function(){this._reject(this._getRangeError(0))},t.some=function(e,t){return i(e,t)},t.prototype.some=function(e){return i(this,e)},t._SomePromiseArray=o}},{"./errors":12,"./util":36}],32:[function(e,t,r){"use strict";t.exports=function(e){function t(e){void 0!==e?(e=e._target(),this._bitField=e._bitField,this._settledValueField=e._isFateSealed()?e._settledValue():void 0):(this._bitField=0,this._settledValueField=void 0)}t.prototype._settledValue=function(){return this._settledValueField};var r=t.prototype.value=function(){if(!this.isFulfilled())throw new TypeError("cannot get fulfillment value of a non-fulfilled promise\n\n See http://goo.gl/MqrFmX\n");return this._settledValue()},n=t.prototype.error=t.prototype.reason=function(){if(!this.isRejected())throw new TypeError("cannot get rejection reason of a non-rejected promise\n\n See http://goo.gl/MqrFmX\n");return this._settledValue()},o=t.prototype.isFulfilled=function(){return 0!=(33554432&this._bitField)},i=t.prototype.isRejected=function(){return 0!=(16777216&this._bitField)},s=t.prototype.isPending=function(){return 0==(50397184&this._bitField)},a=t.prototype.isResolved=function(){return 0!=(50331648&this._bitField)};t.prototype.isCancelled=function(){return 0!=(8454144&this._bitField)},e.prototype.__isCancelled=function(){return 65536==(65536&this._bitField)},e.prototype._isCancelled=function(){return this._target().__isCancelled()},e.prototype.isCancelled=function(){return 0!=(8454144&this._target()._bitField)},e.prototype.isPending=function(){return s.call(this._target())},e.prototype.isRejected=function(){return i.call(this._target())},e.prototype.isFulfilled=function(){return o.call(this._target())},e.prototype.isResolved=function(){return a.call(this._target())},e.prototype.value=function(){return r.call(this._target())},e.prototype.reason=function(){var e=this._target();return e._unsetRejectionIsUnhandled(),n.call(e)},e.prototype._value=function(){return this._settledValue()},e.prototype._reason=function(){return this._unsetRejectionIsUnhandled(),this._settledValue()},e.PromiseInspection=t}},{}],33:[function(e,t,r){"use strict";t.exports=function(t,r){function n(e,n){if(l(e)){if(e instanceof t)return e;var o=i(e);if(o===c){n&&n._pushContext();var u=t.reject(o.e);return n&&n._popContext(),u}if("function"==typeof o){if(s(e)){var u=new t(r);return e._then(u._fulfill,u._reject,void 0,u,null),u}return a(e,o,n)}}return e}function o(e){return e.then}function i(e){try{return o(e)}catch(e){return c.e=e,c}}function s(e){try{return d.call(e,"_promise0")}catch(e){return!1}}function a(e,n,o){function i(e){a&&(a._resolveCallback(e),a=null)}function s(e){a&&(a._rejectCallback(e,d,!0),a=null)}var a=new t(r),l=a;o&&o._pushContext(),a._captureStackTrace(),o&&o._popContext();var d=!0,f=u.tryCatch(n).call(e,i,s);return d=!1,a&&f===c&&(a._rejectCallback(f.e,!0,!0),a=null),l}var u=e("./util"),c=u.errorObj,l=u.isObject,d={}.hasOwnProperty;return n}},{"./util":36}],34:[function(e,t,r){"use strict";t.exports=function(t,r,n){function o(e){this.handle=e}function i(e){return clearTimeout(this.handle),e}function s(e){throw clearTimeout(this.handle),e}var a=e("./util"),u=t.TimeoutError;o.prototype._resultCancelled=function(){clearTimeout(this.handle)};var c=function(e){return l(+this).thenReturn(e)},l=t.delay=function(e,i){var s,a;return void 0!==i?(s=t.resolve(i)._then(c,null,null,e,void 0),n.cancellation()&&i instanceof t&&s._setOnCancel(i)):(s=new t(r),a=setTimeout(function(){s._fulfill()},+e),n.cancellation()&&s._setOnCancel(new o(a)),s._captureStackTrace()),s._setAsyncGuaranteed(),s};t.prototype.delay=function(e){return l(e,this)};var d=function(e,t,r){var n;n="string"!=typeof t?t instanceof Error?t:new u("operation timed out"):new u(t),a.markAsOriginatingFromRejection(n),e._attachExtraTrace(n),e._reject(n),null!=r&&r.cancel()};t.prototype.timeout=function(e,t){e=+e;var r,a,u=new o(setTimeout(function(){r.isPending()&&d(r,t,a)},e));return n.cancellation()?(a=this.then(),r=a._then(i,s,void 0,u,void 0),r._setOnCancel(u)):r=this._then(i,s,void 0,u,void 0),r}}},{"./util":36}],35:[function(e,t,r){"use strict";t.exports=function(t,r,n,o,i,s){function a(e){setTimeout(function(){throw e},0)}function u(e){var t=n(e);return t!==e&&"function"==typeof e._isDisposable&&"function"==typeof e._getDisposer&&e._isDisposable()&&t._setDisposable(e._getDisposer()),t}function c(e,r){function o(){if(s>=c)return l._fulfill();var i=u(e[s++]);if(i instanceof t&&i._isDisposable()){try{i=n(i._getDisposer().tryDispose(r),e.promise)}catch(e){return a(e)}if(i instanceof t)return i._then(o,a,null,null,null)}o()}var s=0,c=e.length,l=new t(i);return o(),l}function l(e,t,r){this._data=e,this._promise=t,this._context=r}function d(e,t,r){this.constructor$(e,t,r)}function f(e){return l.isDisposer(e)?(this.resources[this.index]._setDisposable(e),e.promise()):e}function p(e){this.length=e,this.promise=null,this[e-1]=null}var h=e("./util"),v=e("./errors").TypeError,m=e("./util").inherits,y=h.errorObj,_=h.tryCatch,g={};l.prototype.data=function(){return this._data},l.prototype.promise=function(){return this._promise},l.prototype.resource=function(){return this.promise().isFulfilled()?this.promise().value():g},l.prototype.tryDispose=function(e){var t=this.resource(),r=this._context;void 0!==r&&r._pushContext();var n=t!==g?this.doDispose(t,e):null;return void 0!==r&&r._popContext(),this._promise._unsetDisposable(),this._data=null,n},l.isDisposer=function(e){return null!=e&&"function"==typeof e.resource&&"function"==typeof e.tryDispose},m(d,l),d.prototype.doDispose=function(e,t){return this.data().call(e,e,t)},p.prototype._resultCancelled=function(){for(var e=this.length,r=0;r0},t.prototype._getDisposer=function(){return this._disposer},t.prototype._unsetDisposable=function(){this._bitField=-131073&this._bitField,this._disposer=void 0},t.prototype.disposer=function(e){if("function"==typeof e)return new d(e,this,o());throw new v}}},{"./errors":12,"./util":36}],36:[function(t,r,o){"use strict";function i(){try{var e=O;return O=null,e.apply(this,arguments)}catch(e){return j.e=e,j}}function s(e){return O=e,i}function a(e){return null==e||!0===e||!1===e||"string"==typeof e||"number"==typeof e}function u(e){return"function"==typeof e||"object"==typeof e&&null!==e}function c(e){return a(e)?new Error(_(e)):e}function l(e,t){var r,n=e.length,o=new Array(n+1);for(r=0;r1,n=t.length>0&&!(1===t.length&&"constructor"===t[0]),o=P.test(e+"")&&I.names(e).length>0;if(r||n||o)return!0}return!1}catch(e){return!1}}function v(e){function t(){}function r(){return typeof n.foo}t.prototype=e;var n=new t;return r(),r(),e}function m(e){return L.test(e)}function y(e,t,r){for(var n=new Array(e),o=0;o10||t[0]>0}(),K.isNode&&K.toFastProperties(e);try{throw new Error}catch(e){K.lastLineError=e}r.exports=K},{"./es5":13}]},{},[4])(4)}),"undefined"!=typeof window&&null!==window?window.P=window.Promise:"undefined"!=typeof self&&null!==self&&(self.P=self.Promise)}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("timers").setImmediate)},{_process:237,timers:249}],90:[function(e,t,r){!function(e,n){"function"==typeof define&&define.amd?define([],n):"object"==typeof r?t.exports=n():e.returnExports=n()}(this,function(){function e(o,i){if("function"!=typeof i)throw new Error("Bad callback given: "+i);if(!o)throw new Error("No options given");var a=o.onResponse;if(o="string"==typeof o?{uri:o}:JSON.parse(JSON.stringify(o)),o.onResponse=a,o.verbose&&(e.log=n()),o.url&&(o.uri=o.url,delete o.url),!o.uri&&""!==o.uri)throw new Error("options.uri is a required argument");if("string"!=typeof o.uri)throw new Error("options.uri must be a string");for(var u=["proxy","_redirectsFollowed","maxRedirects","followRedirect"],c=0;c>18&63,i=u>>12&63,s=u>>6&63,a=63&u,p[d++]=c.charAt(o)+c.charAt(i)+c.charAt(s)+c.charAt(a)}while(l299)&&r.error){e=new Error("CouchDB error: "+(r.error.reason||r.error.error));for(var o in r)e[o]=r[o];return n(e,t,r)}return n(e,t,r)}return"string"==typeof t&&(t={uri:t}),t.json=!0,t.body&&(t.json=t.body),delete t.body,n=n||r,e(t,o)},e})},{}],91:[function(e,t,r){(function(e){!function(n){function o(e){throw new RangeError(D[e])}function i(e,t){for(var r=e.length,n=[];r--;)n[r]=t(e[r]);return n}function s(e,t){var r=e.split("@"),n="";return r.length>1&&(n=r[0]+"@",e=r[1]),e=e.replace(A,"."),n+i(e.split("."),t).join(".")}function a(e){for(var t,r,n=[],o=0,i=e.length;o=55296&&t<=56319&&o65535&&(e-=65536,t+=L(e>>>10&1023|55296),e=56320|1023&e),t+=L(e)}).join("")}function c(e){return e-48<10?e-22:e-65<26?e-65:e-97<26?e-97:w}function l(e,t){return e+22+75*(e<26)-((0!=t)<<5)}function d(e,t,r){var n=0;for(e=r?P(e/x):e>>1,e+=P(e/t);e>M*k>>1;n+=w)e=P(e/M);return P(n+(M+1)*e/(e+T))}function f(e){var t,r,n,i,s,a,l,f,p,h,v=[],m=e.length,y=0,_=I,g=R;for(r=e.lastIndexOf(C),r<0&&(r=0),n=0;n=128&&o("not-basic"),v.push(e.charCodeAt(n));for(i=r>0?r+1:0;i=m&&o("invalid-input"),f=c(e.charCodeAt(i++)),(f>=w||f>P((E-y)/a))&&o("overflow"),y+=f*a,p=l<=g?S:l>=g+k?k:l-g,!(fP(E/h)&&o("overflow"),a*=h;t=v.length+1,g=d(y-s,t,0==s),P(y/t)>E-_&&o("overflow"),_+=P(y/t),y%=t,v.splice(y++,0,_)}return u(v)}function p(e){var t,r,n,i,s,u,c,f,p,h,v,m,y,_,g,b=[];for(e=a(e),m=e.length,t=I,r=0,s=R,u=0;u=t&&vP((E-r)/y)&&o("overflow"),r+=(c-t)*y,t=c,u=0;uE&&o("overflow"),v==t){for(f=r,p=w;h=p<=s?S:p>=s+k?k:p-s,!(f= 0x80 (not a basic code point)","invalid-input":"Invalid input"},M=w-S,P=Math.floor,L=String.fromCharCode;if(g={version:"1.4.1",ucs2:{decode:a,encode:u},decode:f,encode:p,toASCII:v,toUnicode:h},"function"==typeof define&&"object"==typeof define.amd&&define.amd)define("punycode",function(){return g});else if(m&&y)if(t.exports==m)y.exports=g;else for(b in g)g.hasOwnProperty(b)&&(m[b]=g[b]);else n.punycode=g}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],92:[function(e,t,r){var n=e("base-x");t.exports=n("123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz")},{"base-x":87}],93:[function(e,t,r){"use strict";function n(e){if(e>Q)throw new RangeError('The value "'+e+'" is invalid for option "size"');var t=new Uint8Array(e);return t.__proto__=o.prototype,t}function o(e,t,r){if("number"==typeof e){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return u(e)}return i(e,t,r)}function i(e,t,r){if("string"==typeof e)return c(e,t);if(ArrayBuffer.isView(e))return l(e);if(null==e)throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(V(e,ArrayBuffer)||e&&V(e.buffer,ArrayBuffer))return d(e,t,r);if("number"==typeof e)throw new TypeError('The "value" argument must not be of type number. Received type number');var n=e.valueOf&&e.valueOf();if(null!=n&&n!==e)return o.from(n,t,r);var i=f(e);if(i)return i;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof e[Symbol.toPrimitive])return o.from(e[Symbol.toPrimitive]("string"),t,r) +;throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}function s(e){if("number"!=typeof e)throw new TypeError('"size" argument must be of type number');if(e<0)throw new RangeError('The value "'+e+'" is invalid for option "size"')}function a(e,t,r){return s(e),e<=0?n(e):void 0!==t?"string"==typeof r?n(e).fill(t,r):n(e).fill(t):n(e)}function u(e){return s(e),n(e<0?0:0|p(e))}function c(e,t){if("string"==typeof t&&""!==t||(t="utf8"),!o.isEncoding(t))throw new TypeError("Unknown encoding: "+t);var r=0|v(e,t),i=n(r),s=i.write(e,t);return s!==r&&(i=i.slice(0,s)),i}function l(e){for(var t=e.length<0?0:0|p(e.length),r=n(t),o=0;o=Q)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+Q.toString(16)+" bytes");return 0|e}function h(e){return+e!=e&&(e=0),o.alloc(+e)}function v(e,t){if(o.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||V(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);var r=e.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;for(var i=!1;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return q(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return G(e).length;default:if(i)return n?-1:q(e).length;t=(""+t).toLowerCase(),i=!0}}function m(e,t,r){var n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if(r>>>=0,t>>>=0,r<=t)return"";for(e||(e="utf8");;)switch(e){case"hex":return O(this,t,r);case"utf8":case"utf-8":return R(this,t,r);case"ascii":return C(this,t,r);case"latin1":case"binary":return j(this,t,r);case"base64":return x(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return A(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function y(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function _(e,t,r,n,i){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,W(r)&&(r=i?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(i)return-1;r=e.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof t&&(t=o.from(t,n)),o.isBuffer(t))return 0===t.length?-1:g(e,t,r,n,i);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):g(e,[t],r,n,i);throw new TypeError("val must be string, number or Buffer")}function g(e,t,r,n,o){function i(e,t){return 1===s?e[t]:e.readUInt16BE(t*s)}var s=1,a=e.length,u=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;s=2,a/=2,u/=2,r/=2}var c;if(o){var l=-1;for(c=r;ca&&(r=a-u),c=r;c>=0;c--){for(var d=!0,f=0;fo&&(n=o):n=o;var i=t.length;n>i/2&&(n=i/2);for(var s=0;s239?4:i>223?3:i>191?2:1;if(o+a<=r){var u,c,l,d;switch(a){case 1:i<128&&(s=i);break;case 2:u=e[o+1],128==(192&u)&&(d=(31&i)<<6|63&u)>127&&(s=d);break;case 3:u=e[o+1],c=e[o+2],128==(192&u)&&128==(192&c)&&(d=(15&i)<<12|(63&u)<<6|63&c)>2047&&(d<55296||d>57343)&&(s=d);break;case 4:u=e[o+1],c=e[o+2],l=e[o+3],128==(192&u)&&128==(192&c)&&128==(192&l)&&(d=(15&i)<<18|(63&u)<<12|(63&c)<<6|63&l)>65535&&d<1114112&&(s=d)}}null===s?(s=65533,a=1):s>65535&&(s-=65536,n.push(s>>>10&1023|55296),s=56320|1023&s),n.push(s),o+=a}return I(n)}function I(e){var t=e.length;if(t<=J)return String.fromCharCode.apply(String,e);for(var r="",n=0;nn)&&(r=n);for(var o="",i=t;ir)throw new RangeError("Trying to access beyond buffer length")}function M(e,t,r,n,i,s){if(!o.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||te.length)throw new RangeError("Index out of range")}function P(e,t,r,n,o,i){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function L(e,t,r,n,o){return t=+t,r>>>=0,o||P(e,t,r,4,3.4028234663852886e38,-3.4028234663852886e38),z.write(e,t,r,n,23,4),r+4}function U(e,t,r,n,o){return t=+t,r>>>=0,o||P(e,t,r,8,1.7976931348623157e308,-1.7976931348623157e308),z.write(e,t,r,n,52,8),r+8}function N(e){if(e=e.split("=")[0],e=e.trim().replace(Y,""),e.length<2)return"";for(;e.length%4!=0;)e+="=";return e}function F(e){return e<16?"0"+e.toString(16):e.toString(16)}function q(e,t){t=t||1/0;for(var r,n=e.length,o=null,i=[],s=0;s55295&&r<57344){if(!o){if(r>56319){(t-=3)>-1&&i.push(239,191,189);continue}if(s+1===n){(t-=3)>-1&&i.push(239,191,189);continue}o=r;continue}if(r<56320){(t-=3)>-1&&i.push(239,191,189),o=r;continue}r=65536+(o-55296<<10|r-56320)}else o&&(t-=3)>-1&&i.push(239,191,189);if(o=null,r<128){if((t-=1)<0)break;i.push(r)}else if(r<2048){if((t-=2)<0)break;i.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;i.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return i}function B(e){for(var t=[],r=0;r>8,o=r%256,i.push(o),i.push(n);return i}function G(e){return H.toByteArray(N(e))}function $(e,t,r,n){for(var o=0;o=t.length||o>=e.length);++o)t[o+r]=e[o];return o}function V(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function W(e){return e!==e}var H=e("base64-js"),z=e("ieee754");r.Buffer=o,r.SlowBuffer=h,r.INSPECT_MAX_BYTES=50;var Q=2147483647;r.kMaxLength=Q,o.TYPED_ARRAY_SUPPORT=function(){try{var e=new Uint8Array(1);return e.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===e.foo()}catch(e){return!1}}(),o.TYPED_ARRAY_SUPPORT||"undefined"==typeof console||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(o.prototype,"parent",{enumerable:!0,get:function(){if(o.isBuffer(this))return this.buffer}}),Object.defineProperty(o.prototype,"offset",{enumerable:!0,get:function(){if(o.isBuffer(this))return this.byteOffset}}),"undefined"!=typeof Symbol&&null!=Symbol.species&&o[Symbol.species]===o&&Object.defineProperty(o,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1}),o.poolSize=8192,o.from=function(e,t,r){return i(e,t,r)},o.prototype.__proto__=Uint8Array.prototype,o.__proto__=Uint8Array,o.alloc=function(e,t,r){return a(e,t,r)},o.allocUnsafe=function(e){return u(e)},o.allocUnsafeSlow=function(e){return u(e)},o.isBuffer=function(e){return null!=e&&!0===e._isBuffer&&e!==o.prototype},o.compare=function(e,t){if(V(e,Uint8Array)&&(e=o.from(e,e.offset,e.byteLength)),V(t,Uint8Array)&&(t=o.from(t,t.offset,t.byteLength)),!o.isBuffer(e)||!o.isBuffer(t))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(e===t)return 0;for(var r=e.length,n=t.length,i=0,s=Math.min(r,n);it&&(e+=" ... "),""},o.prototype.compare=function(e,t,r,n,i){if(V(e,Uint8Array)&&(e=o.from(e,e.offset,e.byteLength)),!o.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),t<0||r>e.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&t>=r)return 0;if(n>=i)return-1;if(t>=r)return 1;if(t>>>=0,r>>>=0,n>>>=0,i>>>=0,this===e)return 0;for(var s=i-n,a=r-t,u=Math.min(s,a),c=this.slice(n,i),l=e.slice(t,r),d=0;d>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}var o=this.length-t;if((void 0===r||r>o)&&(r=o),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var i=!1;;)switch(n){case"hex":return b(this,e,t,r);case"utf8":case"utf-8":return E(this,e,t,r);case"ascii":return w(this,e,t,r);case"latin1":case"binary":return S(this,e,t,r);case"base64":return k(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return T(this,e,t,r);default:if(i)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),i=!0}},o.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var J=4096;o.prototype.slice=function(e,t){var r=this.length;e=~~e,t=void 0===t?r:~~t,e<0?(e+=r)<0&&(e=0):e>r&&(e=r),t<0?(t+=r)<0&&(t=0):t>r&&(t=r),t>>=0,t>>>=0,r||D(e,t,this.length);for(var n=this[e],o=1,i=0;++i>>=0,t>>>=0,r||D(e,t,this.length);for(var n=this[e+--t],o=1;t>0&&(o*=256);)n+=this[e+--t]*o;return n},o.prototype.readUInt8=function(e,t){return e>>>=0,t||D(e,1,this.length),this[e]},o.prototype.readUInt16LE=function(e,t){return e>>>=0,t||D(e,2,this.length),this[e]|this[e+1]<<8},o.prototype.readUInt16BE=function(e,t){return e>>>=0,t||D(e,2,this.length),this[e]<<8|this[e+1]},o.prototype.readUInt32LE=function(e,t){return e>>>=0,t||D(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},o.prototype.readUInt32BE=function(e,t){return e>>>=0,t||D(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},o.prototype.readIntLE=function(e,t,r){e>>>=0,t>>>=0,r||D(e,t,this.length);for(var n=this[e],o=1,i=0;++i=o&&(n-=Math.pow(2,8*t)),n},o.prototype.readIntBE=function(e,t,r){e>>>=0,t>>>=0,r||D(e,t,this.length);for(var n=t,o=1,i=this[e+--n];n>0&&(o*=256);)i+=this[e+--n]*o;return o*=128,i>=o&&(i-=Math.pow(2,8*t)),i},o.prototype.readInt8=function(e,t){return e>>>=0,t||D(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},o.prototype.readInt16LE=function(e,t){e>>>=0,t||D(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},o.prototype.readInt16BE=function(e,t){e>>>=0,t||D(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},o.prototype.readInt32LE=function(e,t){return e>>>=0,t||D(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},o.prototype.readInt32BE=function(e,t){return e>>>=0,t||D(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},o.prototype.readFloatLE=function(e,t){return e>>>=0,t||D(e,4,this.length),z.read(this,e,!0,23,4)},o.prototype.readFloatBE=function(e,t){return e>>>=0,t||D(e,4,this.length),z.read(this,e,!1,23,4)},o.prototype.readDoubleLE=function(e,t){return e>>>=0,t||D(e,8,this.length),z.read(this,e,!0,52,8)},o.prototype.readDoubleBE=function(e,t){return e>>>=0,t||D(e,8,this.length),z.read(this,e,!1,52,8)},o.prototype.writeUIntLE=function(e,t,r,n){if(e=+e,t>>>=0,r>>>=0,!n){M(this,e,t,r,Math.pow(2,8*r)-1,0)}var o=1,i=0;for(this[t]=255&e;++i>>=0,r>>>=0,!n){M(this,e,t,r,Math.pow(2,8*r)-1,0)}var o=r-1,i=1;for(this[t+o]=255&e;--o>=0&&(i*=256);)this[t+o]=e/i&255;return t+r},o.prototype.writeUInt8=function(e,t,r){return e=+e,t>>>=0,r||M(this,e,t,1,255,0),this[t]=255&e,t+1},o.prototype.writeUInt16LE=function(e,t,r){return e=+e,t>>>=0,r||M(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},o.prototype.writeUInt16BE=function(e,t,r){return e=+e,t>>>=0,r||M(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},o.prototype.writeUInt32LE=function(e,t,r){return e=+e,t>>>=0,r||M(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},o.prototype.writeUInt32BE=function(e,t,r){return e=+e,t>>>=0,r||M(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},o.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var o=Math.pow(2,8*r-1);M(this,e,t,r,o-1,-o)}var i=0,s=1,a=0;for(this[t]=255&e;++i>0)-a&255;return t+r},o.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var o=Math.pow(2,8*r-1);M(this,e,t,r,o-1,-o)}var i=r-1,s=1,a=0;for(this[t+i]=255&e;--i>=0&&(s*=256);)e<0&&0===a&&0!==this[t+i+1]&&(a=1),this[t+i]=(e/s>>0)-a&255;return t+r},o.prototype.writeInt8=function(e,t,r){return e=+e,t>>>=0,r||M(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},o.prototype.writeInt16LE=function(e,t,r){return e=+e,t>>>=0,r||M(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},o.prototype.writeInt16BE=function(e,t,r){return e=+e,t>>>=0,r||M(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},o.prototype.writeInt32LE=function(e,t,r){return e=+e,t>>>=0,r||M(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},o.prototype.writeInt32BE=function(e,t,r){return e=+e,t>>>=0,r||M(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},o.prototype.writeFloatLE=function(e,t,r){return L(this,e,t,!0,r)},o.prototype.writeFloatBE=function(e,t,r){return L(this,e,t,!1,r)},o.prototype.writeDoubleLE=function(e,t,r){return U(this,e,t,!0,r)},o.prototype.writeDoubleBE=function(e,t,r){return U(this,e,t,!1,r)},o.prototype.copy=function(e,t,r,n){if(!o.isBuffer(e))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t=0;--s)e[s+t]=this[s+r];else Uint8Array.prototype.set.call(e,this.subarray(r,n),t);return i},o.prototype.fill=function(e,t,r,n){if("string"==typeof e){if("string"==typeof t?(n=t,t=0,r=this.length):"string"==typeof r&&(n=r,r=this.length),void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!o.isEncoding(n))throw new TypeError("Unknown encoding: "+n);if(1===e.length){var i=e.charCodeAt(0);("utf8"===n&&i<128||"latin1"===n)&&(e=i)}}else"number"==typeof e&&(e&=255);if(t<0||this.length>>=0,r=void 0===r?this.length:r>>>0,e||(e=0);var s;if("number"==typeof e)for(s=t;s0&&!c.test(t))throw new TypeError("invalid parameter value");return'"'+t.replace(f,"\\$1")+'"'}function a(e){this.parameters=Object.create(null),this.type=e}var u=/; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *("(?:[\u000b\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\u000b\u0020-\u00ff])*"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g,c=/^[\u000b\u0020-\u007e\u0080-\u00ff]+$/,l=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,d=/\\([\u000b\u0020-\u00ff])/g,f=/([\\"])/g,p=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;r.format=n,r.parse=o},{}],95:[function(e,t,r){e("../modules/web.dom.iterable"),e("../modules/es6.string.iterator"),t.exports=e("../modules/core.get-iterator")},{"../modules/core.get-iterator":204,"../modules/es6.string.iterator":222,"../modules/web.dom.iterable":233}],96:[function(e,t,r){e("../modules/web.dom.iterable"),e("../modules/es6.string.iterator"),t.exports=e("../modules/core.is-iterable")},{"../modules/core.is-iterable":205,"../modules/es6.string.iterator":222,"../modules/web.dom.iterable":233}],97:[function(e,t,r){var n=e("../../modules/_core"),o=n.JSON||(n.JSON={stringify:JSON.stringify});t.exports=function(e){return o.stringify.apply(o,arguments)}},{"../../modules/_core":131}],98:[function(e,t,r){e("../../modules/es6.number.is-finite"),t.exports=e("../../modules/_core").Number.isFinite},{"../../modules/_core":131,"../../modules/es6.number.is-finite":207}],99:[function(e,t,r){e("../../modules/es6.number.is-integer"),t.exports=e("../../modules/_core").Number.isInteger},{"../../modules/_core":131,"../../modules/es6.number.is-integer":208}],100:[function(e,t,r){e("../../modules/es6.object.assign"),t.exports=e("../../modules/_core").Object.assign},{"../../modules/_core":131,"../../modules/es6.object.assign":209}],101:[function(e,t,r){e("../../modules/es6.object.create");var n=e("../../modules/_core").Object;t.exports=function(e,t){return n.create(e,t)}},{"../../modules/_core":131,"../../modules/es6.object.create":210}],102:[function(e,t,r){e("../../modules/es6.object.define-property");var n=e("../../modules/_core").Object;t.exports=function(e,t,r){return n.defineProperty(e,t,r)}},{"../../modules/_core":131,"../../modules/es6.object.define-property":211}],103:[function(e,t,r){e("../../modules/es7.object.entries"),t.exports=e("../../modules/_core").Object.entries},{"../../modules/_core":131,"../../modules/es7.object.entries":224}],104:[function(e,t,r){e("../../modules/es6.object.freeze"),t.exports=e("../../modules/_core").Object.freeze},{"../../modules/_core":131,"../../modules/es6.object.freeze":212}],105:[function(e,t,r){e("../../modules/es6.object.get-prototype-of"),t.exports=e("../../modules/_core").Object.getPrototypeOf},{"../../modules/_core":131,"../../modules/es6.object.get-prototype-of":213}],106:[function(e,t,r){e("../../modules/es6.object.keys"),t.exports=e("../../modules/_core").Object.keys},{"../../modules/_core":131,"../../modules/es6.object.keys":214}],107:[function(e,t,r){e("../../modules/es6.object.set-prototype-of"),t.exports=e("../../modules/_core").Object.setPrototypeOf},{"../../modules/_core":131,"../../modules/es6.object.set-prototype-of":215}],108:[function(e,t,r){e("../../modules/es7.object.values"),t.exports=e("../../modules/_core").Object.values},{"../../modules/_core":131,"../../modules/es7.object.values":225}],109:[function(e,t,r){e("../modules/es6.object.to-string"),e("../modules/es6.string.iterator"),e("../modules/web.dom.iterable"),e("../modules/es6.promise"),e("../modules/es7.promise.finally"),e("../modules/es7.promise.try"),t.exports=e("../modules/_core").Promise},{"../modules/_core":131,"../modules/es6.object.to-string":216,"../modules/es6.promise":217,"../modules/es6.string.iterator":222,"../modules/es7.promise.finally":226,"../modules/es7.promise.try":227,"../modules/web.dom.iterable":233}],110:[function(e,t,r){e("../../modules/es6.reflect.construct"),t.exports=e("../../modules/_core").Reflect.construct},{"../../modules/_core":131,"../../modules/es6.reflect.construct":218}],111:[function(e,t,r){e("../../modules/es6.reflect.get-prototype-of"),t.exports=e("../../modules/_core").Reflect.getPrototypeOf},{"../../modules/_core":131,"../../modules/es6.reflect.get-prototype-of":219}],112:[function(e,t,r){e("../../modules/es6.reflect.set-prototype-of"),t.exports=e("../../modules/_core").Reflect.setPrototypeOf},{"../../modules/_core":131,"../../modules/es6.reflect.set-prototype-of":220}],113:[function(e,t,r){e("../modules/es6.object.to-string"),e("../modules/es6.string.iterator"),e("../modules/web.dom.iterable"),e("../modules/es6.set"),e("../modules/es7.set.to-json"),e("../modules/es7.set.of"),e("../modules/es7.set.from"),t.exports=e("../modules/_core").Set},{"../modules/_core":131,"../modules/es6.object.to-string":216,"../modules/es6.set":221,"../modules/es6.string.iterator":222,"../modules/es7.set.from":228,"../modules/es7.set.of":229,"../modules/es7.set.to-json":230,"../modules/web.dom.iterable":233}],114:[function(e,t,r){e("../../modules/es6.symbol"),e("../../modules/es6.object.to-string"),e("../../modules/es7.symbol.async-iterator"),e("../../modules/es7.symbol.observable"),t.exports=e("../../modules/_core").Symbol},{"../../modules/_core":131,"../../modules/es6.object.to-string":216,"../../modules/es6.symbol":223,"../../modules/es7.symbol.async-iterator":231,"../../modules/es7.symbol.observable":232}],115:[function(e,t,r){e("../../modules/es6.string.iterator"),e("../../modules/web.dom.iterable"),t.exports=e("../../modules/_wks-ext").f("iterator")},{"../../modules/_wks-ext":201,"../../modules/es6.string.iterator":222,"../../modules/web.dom.iterable":233}],116:[function(e,t,r){t.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},{}],117:[function(e,t,r){t.exports=function(){}},{}],118:[function(e,t,r){t.exports=function(e,t,r,n){if(!(e instanceof t)||void 0!==n&&n in e)throw TypeError(r+": incorrect invocation!");return e}},{}],119:[function(e,t,r){var n=e("./_is-object");t.exports=function(e){if(!n(e))throw TypeError(e+" is not an object!");return e}},{"./_is-object":151}],120:[function(e,t,r){var n=e("./_for-of");t.exports=function(e,t){var r=[];return n(e,!1,r.push,r,t),r}},{"./_for-of":140}],121:[function(e,t,r){var n=e("./_to-iobject"),o=e("./_to-length"),i=e("./_to-absolute-index");t.exports=function(e){return function(t,r,s){var a,u=n(t),c=o(u.length),l=i(s,c);if(e&&r!=r){for(;c>l;)if((a=u[l++])!=a)return!0}else for(;c>l;l++)if((e||l in u)&&u[l]===r)return e||l||0;return!e&&-1}}},{"./_to-absolute-index":191,"./_to-iobject":193,"./_to-length":194}],122:[function(e,t,r){var n=e("./_ctx"),o=e("./_iobject"),i=e("./_to-object"),s=e("./_to-length"),a=e("./_array-species-create");t.exports=function(e,t){var r=1==e,u=2==e,c=3==e,l=4==e,d=6==e,f=5==e||d,p=t||a;return function(t,a,h){for(var v,m,y=i(t),_=o(y),g=n(a,h,3),b=s(_.length),E=0,w=r?p(t,b):u?p(t,0):void 0;b>E;E++)if((f||E in _)&&(v=_[E],m=g(v,E,y),e))if(r)w[E]=m;else if(m)switch(e){case 3:return!0;case 5:return v;case 6:return E;case 2:w.push(v)}else if(l)return!1;return d?-1:c||l?l:w}}},{"./_array-species-create":124,"./_ctx":132,"./_iobject":147,"./_to-length":194,"./_to-object":195}],123:[function(e,t,r){var n=e("./_is-object"),o=e("./_is-array"),i=e("./_wks")("species");t.exports=function(e){var t;return o(e)&&(t=e.constructor,"function"!=typeof t||t!==Array&&!o(t.prototype)||(t=void 0),n(t)&&null===(t=t[i])&&(t=void 0)),void 0===t?Array:t}},{"./_is-array":149,"./_is-object":151,"./_wks":202}],124:[function(e,t,r){var n=e("./_array-species-constructor");t.exports=function(e,t){return new(n(e))(t)}},{"./_array-species-constructor":123}],125:[function(e,t,r){"use strict";var n=e("./_a-function"),o=e("./_is-object"),i=e("./_invoke"),s=[].slice,a={},u=function(e,t,r){if(!(t in a)){for(var n=[],o=0;o1?arguments[1]:void 0,3);r=r?r.n:this._f;)for(n(r.v,r.k,this);r&&r.r;)r=r.p},has:function(e){return!!m(h(this,t),e)}}),f&&n(l.prototype,"size",{get:function(){return h(this,t)[v]}}),l},def:function(e,t,r){var n,o,i=m(e,t);return i?i.v=r:(e._l=i={i:o=p(t,!0),k:t,v:r,p:n=e._l,n:void 0,r:!1},e._f||(e._f=i),n&&(n.n=i),e[v]++,"F"!==o&&(e._i[o]=i)),e},getEntry:m,setStrong:function(e,t,r){c(e,t,function(e,r){this._t=h(e,t),this._k=r,this._l=void 0},function(){for(var e=this,t=e._k,r=e._l;r&&r.r;)r=r.p;return e._t&&(e._l=r=r?r.n:e._t._f)?"keys"==t?l(0,r.k):"values"==t?l(0,r.v):l(0,[r.k,r.v]):(e._t=void 0,l(1))},r?"entries":"values",!r,!0),d(t)}}},{"./_an-instance":118,"./_ctx":132,"./_descriptors":134,"./_for-of":140,"./_iter-define":154,"./_iter-step":156,"./_meta":159,"./_object-create":163,"./_object-dp":164,"./_redefine-all":179,"./_set-species":184,"./_validate-collection":199}],129:[function(e,t,r){var n=e("./_classof"),o=e("./_array-from-iterable");t.exports=function(e){return function(){if(n(this)!=e)throw TypeError(e+"#toJSON isn't generic");return o(this)}}},{"./_array-from-iterable":120,"./_classof":126}],130:[function(e,t,r){"use strict";var n=e("./_global"),o=e("./_export"),i=e("./_meta"),s=e("./_fails"),a=e("./_hide"),u=e("./_redefine-all"),c=e("./_for-of"),l=e("./_an-instance"),d=e("./_is-object"),f=e("./_set-to-string-tag"),p=e("./_object-dp").f,h=e("./_array-methods")(0),v=e("./_descriptors");t.exports=function(e,t,r,m,y,_){var g=n[e],b=g,E=y?"set":"add",w=b&&b.prototype,S={};return v&&"function"==typeof b&&(_||w.forEach&&!s(function(){(new b).entries().next()}))?(b=t(function(t,r){l(t,b,e,"_c"),t._c=new g,void 0!=r&&c(r,y,t[E],t)}), +h("add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON".split(","),function(e){var t="add"==e||"set"==e;e in w&&(!_||"clear"!=e)&&a(b.prototype,e,function(r,n){if(l(this,b,e),!t&&_&&!d(r))return"get"==e&&void 0;var o=this._c[e](0===r?0:r,n);return t?this:o})}),_||p(b.prototype,"size",{get:function(){return this._c.size}})):(b=m.getConstructor(t,e,y,E),u(b.prototype,r),i.NEED=!0),f(b,e),S[e]=b,o(o.G+o.W+o.F,S),_||m.setStrong(b,e,y),b}},{"./_an-instance":118,"./_array-methods":122,"./_descriptors":134,"./_export":138,"./_fails":139,"./_for-of":140,"./_global":141,"./_hide":143,"./_is-object":151,"./_meta":159,"./_object-dp":164,"./_redefine-all":179,"./_set-to-string-tag":185}],131:[function(e,t,r){var n=t.exports={version:"2.5.7"};"number"==typeof __e&&(__e=n)},{}],132:[function(e,t,r){var n=e("./_a-function");t.exports=function(e,t,r){if(n(e),void 0===t)return e;switch(r){case 1:return function(r){return e.call(t,r)};case 2:return function(r,n){return e.call(t,r,n)};case 3:return function(r,n,o){return e.call(t,r,n,o)}}return function(){return e.apply(t,arguments)}}},{"./_a-function":116}],133:[function(e,t,r){t.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},{}],134:[function(e,t,r){t.exports=!e("./_fails")(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},{"./_fails":139}],135:[function(e,t,r){var n=e("./_is-object"),o=e("./_global").document,i=n(o)&&n(o.createElement);t.exports=function(e){return i?o.createElement(e):{}}},{"./_global":141,"./_is-object":151}],136:[function(e,t,r){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},{}],137:[function(e,t,r){var n=e("./_object-keys"),o=e("./_object-gops"),i=e("./_object-pie");t.exports=function(e){var t=n(e),r=o.f;if(r)for(var s,a=r(e),u=i.f,c=0;a.length>c;)u.call(e,s=a[c++])&&t.push(s);return t}},{"./_object-gops":169,"./_object-keys":172,"./_object-pie":173}],138:[function(e,t,r){var n=e("./_global"),o=e("./_core"),i=e("./_ctx"),s=e("./_hide"),a=e("./_has"),u=function(e,t,r){var c,l,d,f=e&u.F,p=e&u.G,h=e&u.S,v=e&u.P,m=e&u.B,y=e&u.W,_=p?o:o[t]||(o[t]={}),g=_.prototype,b=p?n:h?n[t]:(n[t]||{}).prototype;p&&(r=t);for(c in r)(l=!f&&b&&void 0!==b[c])&&a(_,c)||(d=l?b[c]:r[c],_[c]=p&&"function"!=typeof b[c]?r[c]:m&&l?i(d,n):y&&b[c]==d?function(e){var t=function(t,r,n){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,r)}return new e(t,r,n)}return e.apply(this,arguments)};return t.prototype=e.prototype,t}(d):v&&"function"==typeof d?i(Function.call,d):d,v&&((_.virtual||(_.virtual={}))[c]=d,e&u.R&&g&&!g[c]&&s(g,c,d)))};u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,t.exports=u},{"./_core":131,"./_ctx":132,"./_global":141,"./_has":142,"./_hide":143}],139:[function(e,t,r){t.exports=function(e){try{return!!e()}catch(e){return!0}}},{}],140:[function(e,t,r){var n=e("./_ctx"),o=e("./_iter-call"),i=e("./_is-array-iter"),s=e("./_an-object"),a=e("./_to-length"),u=e("./core.get-iterator-method"),c={},l={},r=t.exports=function(e,t,r,d,f){var p,h,v,m,y=f?function(){return e}:u(e),_=n(r,d,t?2:1),g=0;if("function"!=typeof y)throw TypeError(e+" is not iterable!");if(i(y)){for(p=a(e.length);p>g;g++)if((m=t?_(s(h=e[g])[0],h[1]):_(e[g]))===c||m===l)return m}else for(v=y.call(e);!(h=v.next()).done;)if((m=o(v,_,h.value,t))===c||m===l)return m};r.BREAK=c,r.RETURN=l},{"./_an-object":119,"./_ctx":132,"./_is-array-iter":148,"./_iter-call":152,"./_to-length":194,"./core.get-iterator-method":203}],141:[function(e,t,r){var n=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},{}],142:[function(e,t,r){var n={}.hasOwnProperty;t.exports=function(e,t){return n.call(e,t)}},{}],143:[function(e,t,r){var n=e("./_object-dp"),o=e("./_property-desc");t.exports=e("./_descriptors")?function(e,t,r){return n.f(e,t,o(1,r))}:function(e,t,r){return e[t]=r,e}},{"./_descriptors":134,"./_object-dp":164,"./_property-desc":178}],144:[function(e,t,r){var n=e("./_global").document;t.exports=n&&n.documentElement},{"./_global":141}],145:[function(e,t,r){t.exports=!e("./_descriptors")&&!e("./_fails")(function(){return 7!=Object.defineProperty(e("./_dom-create")("div"),"a",{get:function(){return 7}}).a})},{"./_descriptors":134,"./_dom-create":135,"./_fails":139}],146:[function(e,t,r){t.exports=function(e,t,r){var n=void 0===r;switch(t.length){case 0:return n?e():e.call(r);case 1:return n?e(t[0]):e.call(r,t[0]);case 2:return n?e(t[0],t[1]):e.call(r,t[0],t[1]);case 3:return n?e(t[0],t[1],t[2]):e.call(r,t[0],t[1],t[2]);case 4:return n?e(t[0],t[1],t[2],t[3]):e.call(r,t[0],t[1],t[2],t[3])}return e.apply(r,t)}},{}],147:[function(e,t,r){var n=e("./_cof");t.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==n(e)?e.split(""):Object(e)}},{"./_cof":127}],148:[function(e,t,r){var n=e("./_iterators"),o=e("./_wks")("iterator"),i=Array.prototype;t.exports=function(e){return void 0!==e&&(n.Array===e||i[o]===e)}},{"./_iterators":157,"./_wks":202}],149:[function(e,t,r){var n=e("./_cof");t.exports=Array.isArray||function(e){return"Array"==n(e)}},{"./_cof":127}],150:[function(e,t,r){var n=e("./_is-object"),o=Math.floor;t.exports=function(e){return!n(e)&&isFinite(e)&&o(e)===e}},{"./_is-object":151}],151:[function(e,t,r){t.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},{}],152:[function(e,t,r){var n=e("./_an-object");t.exports=function(e,t,r,o){try{return o?t(n(r)[0],r[1]):t(r)}catch(t){var i=e.return;throw void 0!==i&&n(i.call(e)),t}}},{"./_an-object":119}],153:[function(e,t,r){"use strict";var n=e("./_object-create"),o=e("./_property-desc"),i=e("./_set-to-string-tag"),s={};e("./_hide")(s,e("./_wks")("iterator"),function(){return this}),t.exports=function(e,t,r){e.prototype=n(s,{next:o(1,r)}),i(e,t+" Iterator")}},{"./_hide":143,"./_object-create":163,"./_property-desc":178,"./_set-to-string-tag":185,"./_wks":202}],154:[function(e,t,r){"use strict";var n=e("./_library"),o=e("./_export"),i=e("./_redefine"),s=e("./_hide"),a=e("./_iterators"),u=e("./_iter-create"),c=e("./_set-to-string-tag"),l=e("./_object-gpo"),d=e("./_wks")("iterator"),f=!([].keys&&"next"in[].keys()),p=function(){return this};t.exports=function(e,t,r,h,v,m,y){u(r,t,h);var _,g,b,E=function(e){if(!f&&e in T)return T[e];switch(e){case"keys":case"values":return function(){return new r(this,e)}}return function(){return new r(this,e)}},w=t+" Iterator",S="values"==v,k=!1,T=e.prototype,x=T[d]||T["@@iterator"]||v&&T[v],R=x||E(v),I=v?S?E("entries"):R:void 0,C="Array"==t?T.entries||x:x;if(C&&(b=l(C.call(new e)))!==Object.prototype&&b.next&&(c(b,w,!0),n||"function"==typeof b[d]||s(b,d,p)),S&&x&&"values"!==x.name&&(k=!0,R=function(){return x.call(this)}),n&&!y||!f&&!k&&T[d]||s(T,d,R),a[t]=R,a[w]=p,v)if(_={values:S?R:E("values"),keys:m?R:E("keys"),entries:I},y)for(g in _)g in T||i(T,g,_[g]);else o(o.P+o.F*(f||k),t,_);return _}},{"./_export":138,"./_hide":143,"./_iter-create":153,"./_iterators":157,"./_library":158,"./_object-gpo":170,"./_redefine":180,"./_set-to-string-tag":185,"./_wks":202}],155:[function(e,t,r){var n=e("./_wks")("iterator"),o=!1;try{var i=[7][n]();i.return=function(){o=!0},Array.from(i,function(){throw 2})}catch(e){}t.exports=function(e,t){if(!t&&!o)return!1;var r=!1;try{var i=[7],s=i[n]();s.next=function(){return{done:r=!0}},i[n]=function(){return s},e(i)}catch(e){}return r}},{"./_wks":202}],156:[function(e,t,r){t.exports=function(e,t){return{value:t,done:!!e}}},{}],157:[function(e,t,r){t.exports={}},{}],158:[function(e,t,r){t.exports=!0},{}],159:[function(e,t,r){var n=e("./_uid")("meta"),o=e("./_is-object"),i=e("./_has"),s=e("./_object-dp").f,a=0,u=Object.isExtensible||function(){return!0},c=!e("./_fails")(function(){return u(Object.preventExtensions({}))}),l=function(e){s(e,n,{value:{i:"O"+ ++a,w:{}}})},d=function(e,t){if(!o(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!i(e,n)){if(!u(e))return"F";if(!t)return"E";l(e)}return e[n].i},f=function(e,t){if(!i(e,n)){if(!u(e))return!0;if(!t)return!1;l(e)}return e[n].w},p=function(e){return c&&h.NEED&&u(e)&&!i(e,n)&&l(e),e},h=t.exports={KEY:n,NEED:!1,fastKey:d,getWeak:f,onFreeze:p}},{"./_fails":139,"./_has":142,"./_is-object":151,"./_object-dp":164,"./_uid":197}],160:[function(e,t,r){var n=e("./_global"),o=e("./_task").set,i=n.MutationObserver||n.WebKitMutationObserver,s=n.process,a=n.Promise,u="process"==e("./_cof")(s);t.exports=function(){var e,t,r,c=function(){var n,o;for(u&&(n=s.domain)&&n.exit();e;){o=e.fn,e=e.next;try{o()}catch(n){throw e?r():t=void 0,n}}t=void 0,n&&n.enter()};if(u)r=function(){s.nextTick(c)};else if(!i||n.navigator&&n.navigator.standalone)if(a&&a.resolve){var l=a.resolve(void 0);r=function(){l.then(c)}}else r=function(){o.call(n,c)};else{var d=!0,f=document.createTextNode("");new i(c).observe(f,{characterData:!0}),r=function(){f.data=d=!d}}return function(n){var o={fn:n,next:void 0};t&&(t.next=o),e||(e=o,r()),t=o}}},{"./_cof":127,"./_global":141,"./_task":190}],161:[function(e,t,r){"use strict";function n(e){var t,r;this.promise=new e(function(e,n){if(void 0!==t||void 0!==r)throw TypeError("Bad Promise constructor");t=e,r=n}),this.resolve=o(t),this.reject=o(r)}var o=e("./_a-function");t.exports.f=function(e){return new n(e)}},{"./_a-function":116}],162:[function(e,t,r){"use strict";var n=e("./_object-keys"),o=e("./_object-gops"),i=e("./_object-pie"),s=e("./_to-object"),a=e("./_iobject"),u=Object.assign;t.exports=!u||e("./_fails")(function(){var e={},t={},r=Symbol(),n="abcdefghijklmnopqrst";return e[r]=7,n.split("").forEach(function(e){t[e]=e}),7!=u({},e)[r]||Object.keys(u({},t)).join("")!=n})?function(e,t){for(var r=s(e),u=arguments.length,c=1,l=o.f,d=i.f;u>c;)for(var f,p=a(arguments[c++]),h=l?n(p).concat(l(p)):n(p),v=h.length,m=0;v>m;)d.call(p,f=h[m++])&&(r[f]=p[f]);return r}:u},{"./_fails":139,"./_iobject":147,"./_object-gops":169,"./_object-keys":172,"./_object-pie":173,"./_to-object":195}],163:[function(e,t,r){var n=e("./_an-object"),o=e("./_object-dps"),i=e("./_enum-bug-keys"),s=e("./_shared-key")("IE_PROTO"),a=function(){},u=function(){var t,r=e("./_dom-create")("iframe"),n=i.length;for(r.style.display="none",e("./_html").appendChild(r),r.src="javascript:",t=r.contentWindow.document,t.open(),t.write(" + + + diff --git a/origin_migrator/dest/dest.js b/origin_migrator/dest/dest.js new file mode 100644 index 0000000000..d5ffd42b85 --- /dev/null +++ b/origin_migrator/dest/dest.js @@ -0,0 +1,125 @@ +/* +Copyright 2018 New Vector Ltd + +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. +*/ + +const SOURCE_ORIGIN = 'file://'; + +const IndexedDBCryptoStore = window.matrixcs.IndexedDBCryptoStore; +const cryptoStore = new IndexedDBCryptoStore(window.indexedDB, 'matrix-js-sdk:crypto'); + +let accountStored = 0; +let sessionsStored = 0; +let inboundGroupSessionsStored = 0; +let deviceDataStored = 0; +let roomsStored = 0; +let localStorageKeysStored = 0; + +const promises = []; + +async function onMessage(e) { + if (e.origin !== SOURCE_ORIGIN) return; + + const data = e.data.data; // bleh, naming clash + switch (e.data.cmd) { + case 'init': + // start with clean stores before we migrate data in + window.localStorage.clear(); + await cryptoStore.deleteAllData(); + + e.source.postMessage({ + cmd: 'initOK', + }, SOURCE_ORIGIN); + break; + case 'storeAccount': + promises.push(cryptoStore.doTxn( + 'readwrite', [IndexedDBCryptoStore.STORE_ACCOUNT], + (txn) => { + cryptoStore.storeAccount(txn, data); + }, + ).then(() => { + ++accountStored; + })); + break; + case 'storeSessions': + promises.push(cryptoStore.doTxn( + 'readwrite', [IndexedDBCryptoStore.STORE_SESSIONS], + (txn) => { + for (const sess of data) { + cryptoStore.storeEndToEndSession(sess.deviceKey, sess.sessionId, sess, txn); + } + }, + ).then(() => { + sessionsStored += data.length; + })); + break; + case 'storeInboundGroupSessions': + promises.push(cryptoStore.doTxn( + 'readwrite', [IndexedDBCryptoStore.STORE_INBOUND_GROUP_SESSIONS], + (txn) => { + for (const sess of data) { + cryptoStore.addEndToEndInboundGroupSession( + sess.senderKey, sess.sessionId, sess.sessionData, txn, + ); + } + }, + ).then(() => { + inboundGroupSessionsStored += data.length; + })); + break; + case 'storeDeviceData': + promises.push(cryptoStore.doTxn( + 'readwrite', [IndexedDBCryptoStore.STORE_DEVICE_DATA], + (txn) => { + cryptoStore.storeEndToEndDeviceData(data, txn); + }, + ).then(() => { + ++deviceDataStored; + })); + break; + case 'storeRooms': + promises.push(cryptoStore.doTxn( + 'readwrite', [IndexedDBCryptoStore.STORE_ROOMS], + (txn) => { + for (const [roomId, roomInfo] of Object.entries(data)) { + cryptoStore.storeEndToEndRoom(roomId, roomInfo, txn); + } + }, + ).then(() => { + ++roomsStored; + })); + break; + case 'storeLocalStorage': + window.localStorage.setItem(data.key, data.val); + ++localStorageKeysStored; + break; + case 'getSummary': + await Promise.all(promises); + e.source.postMessage({ + cmd: 'summary', + data: { + accountStored, + sessionsStored, + inboundGroupSessionsStored, + deviceDataStored, + roomsStored, + localStorageKeysStored, + }, + }, SOURCE_ORIGIN); + break; + } +} + +window.addEventListener('message', onMessage); + diff --git a/origin_migrator/source.html b/origin_migrator/source.html new file mode 100644 index 0000000000..ade265c777 --- /dev/null +++ b/origin_migrator/source.html @@ -0,0 +1,7 @@ + + + + + + + diff --git a/origin_migrator/source.js b/origin_migrator/source.js new file mode 100644 index 0000000000..0cbee89f94 --- /dev/null +++ b/origin_migrator/source.js @@ -0,0 +1,210 @@ +/* +Copyright 2018 New Vector Ltd + +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. +*/ + +const TARGET_ORIGIN = 'vector://vector'; +const BATCH_SIZE = 500; +let destFrame; + +let initResolver = null; +let getSummaryResolver = null; + +function onMessage(e) { + if (e.origin !== TARGET_ORIGIN) return; + + if (e.data.cmd === 'initOK' && initResolver) { + initResolver(); + initResolver = null; + } else if (e.data.cmd === 'summary' && getSummaryResolver) { + getSummaryResolver(e.data.data); + getSummaryResolver = null; + } +} + +async function initDestFrame() { + return new Promise(resolve => { + initResolver = resolve; + destFrame.postMessage({ + cmd: 'init', + }, TARGET_ORIGIN); + }); +} + +async function getSummary() { + return new Promise(resolve => { + getSummaryResolver = resolve; + destFrame.postMessage({ + cmd: 'getSummary', + }, TARGET_ORIGIN); + }); +} + +async function doMigrate() { + let accountSent = 0; + let sessionsSent = 0; + let inboundGroupSessionsSent = 0; + let deviceDataSent = 0; + let roomsSent = 0; + let localStorageKeysSent = 0; + + if (!window.ipcRenderer) { + console.error("ipcRenderer not found"); + return; + } + + if (window.localStorage.getItem('mx_user_id') === null) { + window.ipcRenderer.send("origin_migration_nodata"); + return; + } + + destFrame = window.parent.frames.dest; + + await initDestFrame(); + + const IndexedDBCryptoStore = window.matrixcs.IndexedDBCryptoStore; + + const cryptoStore = new IndexedDBCryptoStore(window.indexedDB, 'matrix-js-sdk:crypto'); + + await cryptoStore.doTxn( + 'readonly', [IndexedDBCryptoStore.STORE_ACCOUNT], + (txn) => { + cryptoStore.getAccount(txn, (account) => { + destFrame.postMessage({ + cmd: 'storeAccount', + data: account, + }, TARGET_ORIGIN); + ++accountSent; + }); + }, + ); + + await cryptoStore.doTxn( + 'readonly', [IndexedDBCryptoStore.STORE_SESSIONS], + (txn) => { + let sessBatch = []; + cryptoStore.getAllEndToEndSessions(txn, (sessInfo) => { + if (sessInfo) { + ++sessionsSent; + sessBatch.push(sessInfo); + } + if (sessBatch.length >= BATCH_SIZE || sessInfo === null) { + destFrame.postMessage({ + cmd: 'storeSessions', + data: sessBatch, + }, TARGET_ORIGIN); + sessBatch = []; + } + }); + }, + ); + + await cryptoStore.doTxn( + 'readonly', [IndexedDBCryptoStore.STORE_INBOUND_GROUP_SESSIONS], + (txn) => { + let sessBatch = []; + cryptoStore.getAllEndToEndInboundGroupSessions(txn, (sessInfo) => { + if (sessInfo) { + ++inboundGroupSessionsSent; + sessBatch.push(sessInfo); + } + if (sessBatch.length >= BATCH_SIZE || sessInfo === null) { + destFrame.postMessage({ + cmd: 'storeInboundGroupSessions', + data: sessBatch, + }, TARGET_ORIGIN); + sessBatch = []; + } + }); + }, + ); + + await cryptoStore.doTxn( + 'readonly', [IndexedDBCryptoStore.STORE_DEVICE_DATA], + (txn) => { + cryptoStore.getEndToEndDeviceData(txn, (deviceData) => { + destFrame.postMessage({ + cmd: 'storeDeviceData', + data: deviceData, + }, TARGET_ORIGIN); + ++deviceDataSent; + }); + }, + ); + + await cryptoStore.doTxn( + 'readonly', [IndexedDBCryptoStore.STORE_ROOMS], + (txn) => { + cryptoStore.getEndToEndRooms(txn, (rooms) => { + destFrame.postMessage({ + cmd: 'storeRooms', + data: rooms, + }, TARGET_ORIGIN); + ++roomsSent; + }); + }, + ); + + // we don't bother migrating; + // * sync data (we can just initialsync again) + // * logs + // * key requests (worst case they'll just be re-sent) + // * sessions needing backup (feature isn't available on Electron) + + for (let i = 0; i < window.localStorage.length; ++i) { + const key = window.localStorage.key(i); + const val = window.localStorage.getItem(key); + + destFrame.postMessage({ + cmd: 'storeLocalStorage', + data: { key, val }, + }, TARGET_ORIGIN); + ++localStorageKeysSent; + } + + const summary = await getSummary(); + let success = false; + if ( + summary.accountStored === accountSent && + summary.sessionsStored === sessionsSent && + summary.inboundGroupSessionsStored === inboundGroupSessionsSent && + summary.deviceDataStored === deviceDataSent && + summary.roomsStored === roomsSent && + summary.localStorageKeysStored === localStorageKeysSent + ) { + success = true; + window.localStorage.clear(); + await cryptoStore.deleteAllData(); + + // we don't bother migrating them, but also blow away the sync & logs db, + // otherwise they'll just hang about taking up space + await new Promise(resolve => { + const req = window.indexedDB.deleteDatabase('matrix-js-sdk:riot-web-sync'); + req.onsuccess = resolve; + req.onerror = resolve; + }); + await new Promise(resolve => { + const req = window.indexedDB.deleteDatabase('logs'); + req.onsuccess = resolve; + req.onerror = resolve; + }); + } + + window.ipcRenderer.send("origin_migration_complete", success, { + accountSent, sessionsSent, inboundGroupSessionsSent, + deviceDataSent, roomsSent, localStorageKeysSent, + }, summary); +} + +window.addEventListener('message', onMessage); diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 64e2e49aef..0000000000 --- a/package-lock.json +++ /dev/null @@ -1,9512 +0,0 @@ -{ - "name": "riot-web", - "version": "0.12.2", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "7zip": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/7zip/-/7zip-0.0.6.tgz", - "integrity": "sha1-nK+xca+CMpSQNTtIFvAzR6oVCjA=", - "dev": true - }, - "7zip-bin": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-2.2.7.tgz", - "integrity": "sha512-+rr4OgeTNrLuJAf09o3USdttEYiXvZshWMkhD6wR9v1ieXH0JM1Q2yT41/cJuJcqiPpSXlM/g3aR+Y5MWQdr0Q==", - "dev": true, - "requires": { - "7zip-bin-mac": "1.0.1" - } - }, - "7zip-bin-mac": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/7zip-bin-mac/-/7zip-bin-mac-1.0.1.tgz", - "integrity": "sha1-Pmh3i78JJq3GgVlCcHRQXUdVXAI=", - "dev": true, - "optional": true - }, - "accepts": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", - "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", - "dev": true, - "requires": { - "mime-types": "2.1.17", - "negotiator": "0.6.1" - } - }, - "acorn": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.1.2.tgz", - "integrity": "sha512-o96FZLJBPY1lvTuJylGA9Bk3t/GKPPJG8H0ydQQl01crzwJgspa4AEIq/pVTXigmK0PHVQhiAtn8WMBLL9D2WA==", - "dev": true - }, - "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", - "dev": true, - "requires": { - "acorn": "3.3.0" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true - } - } - }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", - "dev": true - }, - "ajv": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.2.3.tgz", - "integrity": "sha1-wG9Zh3jETGsWGrr+NGa4GtGBTtI=", - "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.0.0", - "json-schema-traverse": "0.3.1", - "json-stable-stringify": "1.0.1" - } - }, - "ajv-keywords": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", - "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", - "dev": true - }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "dev": true, - "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, - "another-json": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/another-json/-/another-json-0.2.0.tgz", - "integrity": "sha1-tfQBnJc7bdXGUGotk0acttMq7tw=" - }, - "ansi-align": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-1.1.0.tgz", - "integrity": "sha1-LwwWWIKXOa3V67FeawxuNCPwFro=", - "dev": true, - "requires": { - "string-width": "1.0.2" - } - }, - "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "any-promise": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-0.1.0.tgz", - "integrity": "sha1-gwtoCqflbzNFHUsEnzvYBESY7ic=", - "dev": true - }, - "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "dev": true, - "requires": { - "micromatch": "2.3.11", - "normalize-path": "2.1.1" - } - }, - "archiver": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-1.3.0.tgz", - "integrity": "sha1-TyGU1tj5nfP1MeaIHxTxXVX6ryI=", - "dev": true, - "requires": { - "archiver-utils": "1.3.0", - "async": "2.5.0", - "buffer-crc32": "0.2.13", - "glob": "7.1.2", - "lodash": "4.17.4", - "readable-stream": "2.3.3", - "tar-stream": "1.5.4", - "walkdir": "0.0.11", - "zip-stream": "1.2.0" - }, - "dependencies": { - "async": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", - "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", - "dev": true, - "requires": { - "lodash": "4.17.4" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } - } - }, - "archiver-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz", - "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=", - "dev": true, - "requires": { - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "lazystream": "1.0.0", - "lodash": "4.17.4", - "normalize-path": "2.1.1", - "readable-stream": "2.3.3" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } - } - }, - "argparse": { - "version": "0.1.16", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz", - "integrity": "sha1-z9AeD7uj1srtBJ+9dY1A9lGW9Xw=", - "requires": { - "underscore": "1.7.0", - "underscore.string": "2.4.0" - } - }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "1.1.0" - } - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "array-filter": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", - "dev": true - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "array-map": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", - "dev": true - }, - "array-reduce": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", - "dev": true - }, - "array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", - "dev": true - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "1.0.3" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "array.prototype.find": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.0.4.tgz", - "integrity": "sha1-VWpcU2LAhkgyPdrrnenRS8GGTJA=", - "dev": true, - "requires": { - "define-properties": "1.1.2", - "es-abstract": "1.9.0" - } - }, - "arraybuffer.slice": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", - "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" - }, - "asar-electron-builder": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/asar-electron-builder/-/asar-electron-builder-0.13.5.tgz", - "integrity": "sha1-TM1NEf18nTs8/8eC/ePe7Z75GvY=", - "dev": true, - "requires": { - "chromium-pickle-js": "0.2.0", - "commander": "2.11.0", - "cuint": "0.2.2", - "minimatch": "3.0.4", - "mkdirp": "0.5.1" - } - }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" - }, - "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", - "dev": true, - "requires": { - "util": "0.10.3" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" - }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "autolinker": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-0.15.3.tgz", - "integrity": "sha1-NCQX2PLzRhsUzwkIjV7fh5HcmDI=" - }, - "autoprefixer": { - "version": "6.7.7", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", - "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", - "dev": true, - "requires": { - "browserslist": "1.7.7", - "caniuse-db": "1.0.30000748", - "normalize-range": "0.1.2", - "num2fraction": "1.2.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" - } - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" - }, - "babel-cli": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz", - "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=", - "dev": true, - "requires": { - "babel-core": "6.26.0", - "babel-polyfill": "6.26.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "chokidar": "1.7.0", - "commander": "2.11.0", - "convert-source-map": "1.5.0", - "fs-readdir-recursive": "1.0.0", - "glob": "7.1.2", - "lodash": "4.17.4", - "output-file-sync": "1.1.2", - "path-is-absolute": "1.0.1", - "slash": "1.0.0", - "source-map": "0.5.7", - "v8flags": "2.1.1" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } - } - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - } - }, - "babel-core": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", - "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "babel-generator": "6.26.0", - "babel-helpers": "6.24.1", - "babel-messages": "6.23.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "convert-source-map": "1.5.0", - "debug": "2.6.9", - "json5": "0.5.1", - "lodash": "4.17.4", - "minimatch": "3.0.4", - "path-is-absolute": "1.0.1", - "private": "0.1.8", - "slash": "1.0.0", - "source-map": "0.5.7" - } - }, - "babel-eslint": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-6.1.2.tgz", - "integrity": "sha1-UpNBn+NnLWZZjTJ9qWlFZ7pqXy8=", - "dev": true, - "requires": { - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash.assign": "4.2.0", - "lodash.pickby": "4.6.0" - } - }, - "babel-generator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", - "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", - "dev": true, - "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.4", - "source-map": "0.5.7", - "trim-right": "1.0.1" - } - }, - "babel-helper-bindify-decorators": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz", - "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-builder-binary-assignment-operator-visitor": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", - "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", - "dev": true, - "requires": { - "babel-helper-explode-assignable-expression": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-builder-react-jsx": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz", - "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "esutils": "2.0.2" - } - }, - "babel-helper-call-delegate": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", - "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-define-map": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", - "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.4" - } - }, - "babel-helper-explode-assignable-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", - "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-explode-class": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz", - "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", - "dev": true, - "requires": { - "babel-helper-bindify-decorators": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "dev": true, - "requires": { - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-hoist-variables": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", - "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-optimise-call-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", - "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-regex": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", - "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.4" - } - }, - "babel-helper-remap-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", - "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-replace-supers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", - "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", - "dev": true, - "requires": { - "babel-helper-optimise-call-expression": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-loader": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-6.4.1.tgz", - "integrity": "sha1-CzQRLVsHSKjc2/Uaz2+b1C1QuMo=", - "dev": true, - "requires": { - "find-cache-dir": "0.1.1", - "loader-utils": "0.2.17", - "mkdirp": "0.5.1", - "object-assign": "4.1.1" - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-add-module-exports": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-0.2.1.tgz", - "integrity": "sha1-mumh9KjcZ/DN7E9K7aHkOl/2XiU=", - "dev": true - }, - "babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", - "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-syntax-async-functions": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", - "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", - "dev": true - }, - "babel-plugin-syntax-async-generators": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", - "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=", - "dev": true - }, - "babel-plugin-syntax-class-properties": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", - "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=", - "dev": true - }, - "babel-plugin-syntax-decorators": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", - "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", - "dev": true - }, - "babel-plugin-syntax-dynamic-import": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", - "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=", - "dev": true - }, - "babel-plugin-syntax-exponentiation-operator": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", - "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", - "dev": true - }, - "babel-plugin-syntax-flow": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", - "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=", - "dev": true - }, - "babel-plugin-syntax-jsx": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", - "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=", - "dev": true - }, - "babel-plugin-syntax-object-rest-spread": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", - "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", - "dev": true - }, - "babel-plugin-syntax-trailing-function-commas": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", - "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", - "dev": true - }, - "babel-plugin-transform-async-generator-functions": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz", - "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", - "dev": true, - "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-generators": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-async-to-bluebird": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-bluebird/-/babel-plugin-transform-async-to-bluebird-1.1.1.tgz", - "integrity": "sha1-Ruo+fFr2KXgqyfHtG3zTj4Qlr9Q=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-plugin-syntax-async-functions": "6.13.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0" - } - }, - "babel-plugin-transform-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", - "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", - "dev": true, - "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-functions": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-class-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", - "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-plugin-syntax-class-properties": "6.13.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-decorators": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz", - "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", - "dev": true, - "requires": { - "babel-helper-explode-class": "6.24.1", - "babel-plugin-syntax-decorators": "6.13.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", - "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", - "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-block-scoping": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", - "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.4" - } - }, - "babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", - "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", - "dev": true, - "requires": { - "babel-helper-define-map": "6.26.0", - "babel-helper-function-name": "6.24.1", - "babel-helper-optimise-call-expression": "6.24.1", - "babel-helper-replace-supers": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", - "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", - "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", - "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", - "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", - "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", - "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", - "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", - "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", - "dev": true, - "requires": { - "babel-plugin-transform-strict-mode": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", - "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", - "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", - "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", - "dev": true, - "requires": { - "babel-helper-replace-supers": "6.24.1", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", - "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", - "dev": true, - "requires": { - "babel-helper-call-delegate": "6.24.1", - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", - "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", - "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", - "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", - "dev": true, - "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", - "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", - "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", - "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", - "dev": true, - "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "regexpu-core": "2.0.0" - } - }, - "babel-plugin-transform-exponentiation-operator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", - "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", - "dev": true, - "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", - "babel-plugin-syntax-exponentiation-operator": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-flow-strip-types": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", - "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", - "dev": true, - "requires": { - "babel-plugin-syntax-flow": "6.18.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-object-rest-spread": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", - "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", - "dev": true, - "requires": { - "babel-plugin-syntax-object-rest-spread": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-react-display-name": { - "version": "6.25.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz", - "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-react-jsx": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz", - "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=", - "dev": true, - "requires": { - "babel-helper-builder-react-jsx": "6.26.0", - "babel-plugin-syntax-jsx": "6.18.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-react-jsx-self": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz", - "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=", - "dev": true, - "requires": { - "babel-plugin-syntax-jsx": "6.18.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-react-jsx-source": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz", - "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=", - "dev": true, - "requires": { - "babel-plugin-syntax-jsx": "6.18.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-regenerator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", - "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", - "dev": true, - "requires": { - "regenerator-transform": "0.10.1" - } - }, - "babel-plugin-transform-runtime": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz", - "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", - "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-polyfill": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", - "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", - "requires": { - "babel-runtime": "6.26.0", - "core-js": "2.5.1", - "regenerator-runtime": "0.10.5" - } - }, - "babel-preset-es2015": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", - "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", - "dev": true, - "requires": { - "babel-plugin-check-es2015-constants": "6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoping": "6.26.0", - "babel-plugin-transform-es2015-classes": "6.24.1", - "babel-plugin-transform-es2015-computed-properties": "6.24.1", - "babel-plugin-transform-es2015-destructuring": "6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", - "babel-plugin-transform-es2015-for-of": "6.23.0", - "babel-plugin-transform-es2015-function-name": "6.24.1", - "babel-plugin-transform-es2015-literals": "6.22.0", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", - "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", - "babel-plugin-transform-es2015-modules-umd": "6.24.1", - "babel-plugin-transform-es2015-object-super": "6.24.1", - "babel-plugin-transform-es2015-parameters": "6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", - "babel-plugin-transform-es2015-spread": "6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "6.24.1", - "babel-plugin-transform-es2015-template-literals": "6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "6.24.1", - "babel-plugin-transform-regenerator": "6.26.0" - } - }, - "babel-preset-es2016": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-es2016/-/babel-preset-es2016-6.24.1.tgz", - "integrity": "sha1-+QC/k+LrwNJ235uKtZck6/2Vn4s=", - "dev": true, - "requires": { - "babel-plugin-transform-exponentiation-operator": "6.24.1" - } - }, - "babel-preset-es2017": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-es2017/-/babel-preset-es2017-6.24.1.tgz", - "integrity": "sha1-WXvq37n38gi8/YoS6bKym4svFNE=", - "dev": true, - "requires": { - "babel-plugin-syntax-trailing-function-commas": "6.22.0", - "babel-plugin-transform-async-to-generator": "6.24.1" - } - }, - "babel-preset-flow": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz", - "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=", - "dev": true, - "requires": { - "babel-plugin-transform-flow-strip-types": "6.22.0" - } - }, - "babel-preset-react": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz", - "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=", - "dev": true, - "requires": { - "babel-plugin-syntax-jsx": "6.18.0", - "babel-plugin-transform-react-display-name": "6.25.0", - "babel-plugin-transform-react-jsx": "6.24.1", - "babel-plugin-transform-react-jsx-self": "6.22.0", - "babel-plugin-transform-react-jsx-source": "6.22.0", - "babel-preset-flow": "6.23.0" - } - }, - "babel-preset-stage-2": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz", - "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", - "dev": true, - "requires": { - "babel-plugin-syntax-dynamic-import": "6.18.0", - "babel-plugin-transform-class-properties": "6.24.1", - "babel-plugin-transform-decorators": "6.24.1", - "babel-preset-stage-3": "6.24.1" - } - }, - "babel-preset-stage-3": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz", - "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", - "dev": true, - "requires": { - "babel-plugin-syntax-trailing-function-commas": "6.22.0", - "babel-plugin-transform-async-generator-functions": "6.24.1", - "babel-plugin-transform-async-to-generator": "6.24.1", - "babel-plugin-transform-exponentiation-operator": "6.24.1", - "babel-plugin-transform-object-rest-spread": "6.26.0" - } - }, - "babel-register": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", - "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", - "dev": true, - "requires": { - "babel-core": "6.26.0", - "babel-runtime": "6.26.0", - "core-js": "2.5.1", - "home-or-tmp": "2.0.0", - "lodash": "4.17.4", - "mkdirp": "0.5.1", - "source-map-support": "0.4.18" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "requires": { - "core-js": "2.5.1", - "regenerator-runtime": "0.11.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", - "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==" - } - } - }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.4" - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.9", - "globals": "9.18.0", - "invariant": "2.2.2", - "lodash": "4.17.4" - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.4", - "to-fast-properties": "1.0.3" - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", - "dev": true - }, - "base64-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.0.tgz", - "integrity": "sha1-o5mS1yNYSBGYK+XikLtqU9hnAPE=", - "dev": true - }, - "base64id": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", - "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", - "dev": true - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "better-assert": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", - "dev": true, - "requires": { - "callsite": "1.0.0" - } - }, - "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==" - }, - "binary-extensions": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.10.0.tgz", - "integrity": "sha1-muuabF6IY4qtFx4Wf1kAq+JINdA=", - "dev": true - }, - "bl": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz", - "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=", - "dev": true, - "requires": { - "readable-stream": "2.3.3" - } - }, - "blob": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", - "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", - "dev": true - }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" - }, - "bluebird-lst-c": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/bluebird-lst-c/-/bluebird-lst-c-1.0.6.tgz", - "integrity": "sha1-gfiB0T+d9wD2fVd/E0gLwy2Eu6k=", - "dev": true, - "requires": { - "bluebird": "3.5.1" - } - }, - "blueimp-canvas-to-blob": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/blueimp-canvas-to-blob/-/blueimp-canvas-to-blob-3.14.0.tgz", - "integrity": "sha512-i6I2CiX1VR8YwUNYBo+dM8tg89ns4TTHxSpWjaDeHKcYS3yFalpLCwDaY21/EsJMufLy2tnG4j0JN5L8OVNkKQ==" - }, - "body-parser": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", - "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", - "dev": true, - "requires": { - "bytes": "3.0.0", - "content-type": "1.0.4", - "debug": "2.6.9", - "depd": "1.1.1", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", - "on-finished": "2.3.0", - "qs": "6.5.1", - "raw-body": "2.3.2", - "type-is": "1.6.15" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "boom": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", - "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", - "requires": { - "hoek": "4.2.0" - } - }, - "boxen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-0.6.0.tgz", - "integrity": "sha1-g2TUJIrDT/DvGy8r9JpsYM4NgbY=", - "dev": true, - "requires": { - "ansi-align": "1.1.0", - "camelcase": "2.1.1", - "chalk": "1.1.3", - "cli-boxes": "1.0.0", - "filled-array": "1.1.0", - "object-assign": "4.1.1", - "repeating": "2.0.1", - "string-width": "1.0.2", - "widest-line": "1.0.0" - }, - "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - } - } - }, - "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" - } - }, - "browser-encrypt-attachment": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/browser-encrypt-attachment/-/browser-encrypt-attachment-0.3.0.tgz", - "integrity": "sha1-IFqUyq3w3H6BQTlBgS9lW9GQ/xw=" - }, - "browser-request": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/browser-request/-/browser-request-0.3.3.tgz", - "integrity": "sha1-ns5bWsqJopkyJC4Yv5M975h2zBc=" - }, - "browserify-aes": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-0.4.0.tgz", - "integrity": "sha1-BnFJtmjfMcS1hTPgLQHoBthgjiw=", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "browserify-zlib": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", - "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", - "dev": true, - "requires": { - "pako": "0.2.9" - }, - "dependencies": { - "pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", - "dev": true - } - } - }, - "browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "dev": true, - "requires": { - "caniuse-db": "1.0.30000748", - "electron-to-chromium": "1.3.27" - } - }, - "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "dev": true, - "requires": { - "base64-js": "1.2.0", - "ieee754": "1.1.8", - "isarray": "1.0.0" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true - }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, - "requires": { - "callsites": "0.2.0" - } - }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", - "dev": true - }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true - }, - "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", - "dev": true, - "requires": { - "no-case": "2.3.2", - "upper-case": "1.1.3" - } - }, - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" - }, - "camelcase-css": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-1.0.1.tgz", - "integrity": "sha1-FXxCOCZfXPlKHf/ehkRlUsvz9wU=", - "dev": true - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, - "requires": { - "camelcase": "2.1.1", - "map-obj": "1.0.1" - }, - "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - } - } - }, - "caniuse-db": { - "version": "1.0.30000748", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000748.tgz", - "integrity": "sha1-eF2e381kW/eVxv887TPEXVgMSKA=", - "dev": true - }, - "capture-stack-trace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", - "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true, - "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" - } - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "dev": true, - "requires": { - "anymatch": "1.3.2", - "async-each": "1.0.1", - "fsevents": "1.1.2", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" - } - }, - "chromium-pickle-js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", - "integrity": "sha1-BKEGZywYsIWrd02YPfo+oTjyIgU=", - "dev": true - }, - "ci-info": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.1.tgz", - "integrity": "sha512-vHDDF/bP9RYpTWtUhpJRhCFdvvp3iDWvEbuDbWgvjUrNGV1MXJrE0MPcwGtEled04m61iwdBLUIHZtDgzWS4ZQ==", - "dev": true - }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true - }, - "classnames": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.5.tgz", - "integrity": "sha1-+zgB1FNGdknvNgPH1hoCvRKb3m0=" - }, - "clean-css": { - "version": "3.4.28", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz", - "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=", - "dev": true, - "requires": { - "commander": "2.8.1", - "source-map": "0.4.4" - }, - "dependencies": { - "commander": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", - "dev": true, - "requires": { - "graceful-readlink": "1.0.1" - } - }, - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", - "dev": true - }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dev": true, - "requires": { - "restore-cursor": "1.0.1" - } - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - } - }, - "clone": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", - "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=", - "dev": true - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, - "color-convert": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-0.5.3.tgz", - "integrity": "sha1-vbbGnOZg+t/+CwAHzER+G59ygr0=", - "dev": true - }, - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true - }, - "combine-lists": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", - "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", - "dev": true, - "requires": { - "lodash": "4.17.4" - } - }, - "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", - "requires": { - "delayed-stream": "1.0.0" - } - }, - "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "commonmark": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/commonmark/-/commonmark-0.27.0.tgz", - "integrity": "sha1-2GwmK5YoIelIPGnFR7xYhAwEezQ=", - "requires": { - "entities": "1.1.1", - "mdurl": "1.0.1", - "minimist": "1.2.0", - "string.prototype.repeat": "0.2.0" - } - }, - "compare-version": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", - "integrity": "sha1-AWLsLZNR9d3VmpICy6k1NmpyUIA=", - "dev": true - }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", - "dev": true - }, - "component-emitter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", - "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=", - "dev": true - }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", - "dev": true - }, - "compress-commons": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.2.tgz", - "integrity": "sha1-UkqfEJA/OoEzibAiXSfEi7dRiQ8=", - "dev": true, - "requires": { - "buffer-crc32": "0.2.13", - "crc32-stream": "2.0.0", - "normalize-path": "2.1.1", - "readable-stream": "2.3.3" - } - }, - "compressible": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.11.tgz", - "integrity": "sha1-FnGKdd4oPtjmBAQWJaIGRYZ5fYo=", - "dev": true, - "requires": { - "mime-db": "1.30.0" - } - }, - "compression": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.1.tgz", - "integrity": "sha1-7/JgPvwuIs+G810uuTWJ+YdTc9s=", - "dev": true, - "requires": { - "accepts": "1.3.4", - "bytes": "3.0.0", - "compressible": "2.0.11", - "debug": "2.6.9", - "on-headers": "1.0.1", - "safe-buffer": "5.1.1", - "vary": "1.1.2" - }, - "dependencies": { - "accepts": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", - "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", - "dev": true, - "requires": { - "mime-types": "2.1.17", - "negotiator": "0.6.1" - } - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "typedarray": "0.0.6" - } - }, - "configstore": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-2.1.0.tgz", - "integrity": "sha1-c3o6cDbpiGECqmCZ5HuzOrGroaE=", - "dev": true, - "requires": { - "dot-prop": "3.0.0", - "graceful-fs": "4.1.11", - "mkdirp": "0.5.1", - "object-assign": "4.1.1", - "os-tmpdir": "1.0.2", - "osenv": "0.1.4", - "uuid": "2.0.3", - "write-file-atomic": "1.3.4", - "xdg-basedir": "2.0.0" - }, - "dependencies": { - "uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", - "dev": true - } - } - }, - "connect": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.5.tgz", - "integrity": "sha1-+43ee6B2OHfQ7J352sC0tA5yx9o=", - "dev": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.0.6", - "parseurl": "1.3.2", - "utils-merge": "1.0.1" - } - }, - "connect-history-api-fallback": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.4.0.tgz", - "integrity": "sha1-PbJPlz9LkjsOgvYZzg3wJBHKYj0=", - "dev": true - }, - "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true, - "requires": { - "date-now": "0.1.4" - } - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", - "dev": true - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "convert-source-map": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", - "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=", - "dev": true - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "core-js": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", - "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cosmiconfig": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", - "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", - "dev": true, - "requires": { - "is-directory": "0.3.1", - "js-yaml": "3.10.0", - "minimist": "1.2.0", - "object-assign": "4.1.1", - "os-homedir": "1.0.2", - "parse-json": "2.2.0", - "require-from-string": "1.2.1" - } - }, - "counterpart": { - "version": "0.18.3", - "resolved": "https://registry.npmjs.org/counterpart/-/counterpart-0.18.3.tgz", - "integrity": "sha512-tli4qPAFeYB34LvvCc/1xYRLCWjf4WsUt6sXfpggDfGDKoI8rhnabz0SljDoBpAK8z1u8GBCg0YDkbvWb16uUQ==", - "requires": { - "date-names": "0.1.10", - "except": "0.1.3", - "extend": "3.0.1", - "pluralizers": "0.1.6", - "sprintf-js": "1.1.1" - } - }, - "cpx": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/cpx/-/cpx-1.5.0.tgz", - "integrity": "sha1-GFvgGFEdhycN7czCkxceN2VauI8=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "chokidar": "1.7.0", - "duplexer": "0.1.1", - "glob": "7.1.2", - "glob2base": "0.0.12", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "resolve": "1.4.0", - "safe-buffer": "5.1.1", - "shell-quote": "1.6.1", - "subarg": "1.0.0" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } - } - }, - "crc": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.5.0.tgz", - "integrity": "sha1-mLi6fUiWZbo5efWbITgTdBAaGWQ=", - "dev": true - }, - "crc32-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz", - "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=", - "dev": true, - "requires": { - "crc": "3.5.0", - "readable-stream": "2.3.3" - } - }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "dev": true, - "requires": { - "capture-stack-trace": "1.0.0" - } - }, - "create-react-class": { - "version": "15.6.2", - "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.2.tgz", - "integrity": "sha1-zx7RXxKq1/FO9fLf4F5sQvke8Co=", - "requires": { - "fbjs": "0.8.16", - "loose-envify": "1.3.1", - "object-assign": "4.1.1" - } - }, - "cross-env": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-4.0.0.tgz", - "integrity": "sha1-Fgg4YtCCdaRiiwskOxIb7apV3YA=", - "dev": true, - "requires": { - "cross-spawn": "5.1.0", - "is-windows": "1.0.1" - } - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "4.1.1", - "shebang-command": "1.2.0", - "which": "1.3.0" - } - }, - "cross-unzip": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/cross-unzip/-/cross-unzip-0.0.2.tgz", - "integrity": "sha1-UYO8R6CVWb78+YzEZXlkmZNZNy8=", - "dev": true - }, - "cryptiles": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", - "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", - "requires": { - "boom": "5.2.0" - }, - "dependencies": { - "boom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", - "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", - "requires": { - "hoek": "4.2.0" - } - } - } - }, - "crypto-browserify": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.3.0.tgz", - "integrity": "sha1-ufx1u0oO1h3PHNXa6W6zDJw+UGw=", - "dev": true, - "requires": { - "browserify-aes": "0.4.0", - "pbkdf2-compat": "2.0.1", - "ripemd160": "0.2.0", - "sha.js": "2.2.6" - } - }, - "css-raw-loader": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/css-raw-loader/-/css-raw-loader-0.1.2.tgz", - "integrity": "sha1-NC5tP1VRwIjGO0eg6rZ5HDCFBhw=", - "dev": true, - "requires": { - "clean-css": "3.4.28", - "loader-utils": "0.2.17", - "source-list-map": "0.1.8" - } - }, - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true, - "requires": { - "boolbase": "1.0.0", - "css-what": "2.1.0", - "domutils": "1.5.1", - "nth-check": "1.0.1" - }, - "dependencies": { - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0.1.0", - "domelementtype": "1.3.0" - } - } - } - }, - "css-what": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", - "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", - "dev": true - }, - "cuint": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", - "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=", - "dev": true - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "requires": { - "array-find-index": "1.0.2" - } - }, - "custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", - "dev": true - }, - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true, - "requires": { - "es5-ext": "0.10.35" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "1.0.0" - } - }, - "date-names": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/date-names/-/date-names-0.1.10.tgz", - "integrity": "sha1-YvjZMyKVBEZX8852FtijQCH47ys=" - }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - }, - "deep-extend": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", - "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "define-properties": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", - "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", - "dev": true, - "requires": { - "foreach": "2.0.5", - "object-keys": "1.0.11" - }, - "dependencies": { - "object-keys": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", - "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", - "dev": true - } - } - }, - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "dev": true, - "requires": { - "globby": "5.0.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.6.2" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", - "dev": true - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "requires": { - "repeating": "2.0.1" - } - }, - "di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", - "dev": true - }, - "diff": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", - "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", - "dev": true - }, - "disposables": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/disposables/-/disposables-1.0.1.tgz", - "integrity": "sha1-BkcnoltU9QK9griaot+4358bOeM=" - }, - "dnd-core": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/dnd-core/-/dnd-core-2.5.4.tgz", - "integrity": "sha512-BcI782MfTm3wCxeIS5c7tAutyTwEIANtuu3W6/xkoJRwiqhRXKX3BbGlycUxxyzMsKdvvoavxgrC3EMPFNYL9A==", - "requires": { - "asap": "2.0.6", - "invariant": "2.2.2", - "lodash": "4.17.4", - "redux": "3.7.2" - } - }, - "doctrine": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.2.3.tgz", - "integrity": "sha1-auxrvWLPid1JjK5wwO2fSdqHOmo=", - "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" - } - }, - "dom-converter": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.1.4.tgz", - "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=", - "dev": true, - "requires": { - "utila": "0.3.3" - }, - "dependencies": { - "utila": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", - "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", - "dev": true - } - } - }, - "dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", - "dev": true, - "requires": { - "custom-event": "1.0.1", - "ent": "2.2.0", - "extend": "3.0.1", - "void-elements": "2.0.1" - } - }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", - "requires": { - "domelementtype": "1.1.3", - "entities": "1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=" - } - } - }, - "domain-browser": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", - "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", - "dev": true - }, - "domelementtype": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=" - }, - "domhandler": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.1.tgz", - "integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=", - "requires": { - "domelementtype": "1.3.0" - } - }, - "domutils": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.6.2.tgz", - "integrity": "sha1-GVjMC0yUJuntNn+xyOhUiRsPo/8=", - "requires": { - "dom-serializer": "0.1.0", - "domelementtype": "1.3.0" - } - }, - "dot-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", - "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", - "dev": true, - "requires": { - "is-obj": "1.0.1" - } - }, - "draft-js": { - "version": "0.11.0-alpha", - "resolved": "https://registry.npmjs.org/draft-js/-/draft-js-0.11.0-alpha.tgz", - "integrity": "sha1-MtshCPkn6bhEbaH3nkR1wrf4aK4=", - "requires": { - "fbjs": "0.8.16", - "immutable": "3.7.6", - "object-assign": "4.1.1" - } - }, - "draft-js-export-html": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/draft-js-export-html/-/draft-js-export-html-0.6.0.tgz", - "integrity": "sha1-zIDwVExD0Kf+28U8DLCRToCQ92k=", - "requires": { - "draft-js-utils": "1.2.0" - } - }, - "draft-js-export-markdown": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/draft-js-export-markdown/-/draft-js-export-markdown-0.3.0.tgz", - "integrity": "sha1-hjkOA86vHTR/xhaGerf1Net2v0I=", - "requires": { - "draft-js-utils": "1.2.0" - } - }, - "draft-js-utils": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/draft-js-utils/-/draft-js-utils-1.2.0.tgz", - "integrity": "sha1-9csj6xZzJf/tPXmIL9wxdyHS/RI=" - }, - "duplexer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", - "dev": true - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "dev": true, - "requires": { - "readable-stream": "2.3.3" - } - }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "electron-builder": { - "version": "11.7.0", - "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-11.7.0.tgz", - "integrity": "sha1-1SkS9uhKxSoGXeGXqS3vkxvZ3CU=", - "dev": true, - "requires": { - "7zip-bin": "2.2.7", - "asar-electron-builder": "0.13.5", - "bluebird-lst-c": "1.0.6", - "chalk": "1.1.3", - "chromium-pickle-js": "0.2.0", - "cuint": "0.2.2", - "electron-builder-core": "11.2.1", - "electron-builder-http": "11.5.0", - "electron-builder-util": "11.6.1", - "electron-download-tf": "3.1.0", - "electron-macos-sign": "1.5.0", - "fs-extra-p": "3.1.0", - "hosted-git-info": "2.5.0", - "ini": "1.3.4", - "is-ci": "1.0.10", - "isbinaryfile": "3.0.2", - "js-yaml": "3.10.0", - "mime": "1.4.1", - "minimatch": "3.0.4", - "normalize-package-data": "2.4.0", - "parse-color": "1.0.0", - "plist": "2.1.0", - "progress": "1.1.8", - "sanitize-filename": "1.6.1", - "semver": "5.4.1", - "tunnel-agent": "0.4.3", - "update-notifier": "1.0.3", - "uuid-1345": "0.99.6", - "yargs": "6.6.0" - }, - "dependencies": { - "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", - "dev": true - }, - "yargs": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", - "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", - "dev": true, - "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "y18n": "3.2.1", - "yargs-parser": "4.2.1" - } - }, - "yargs-parser": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", - "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", - "dev": true, - "requires": { - "camelcase": "3.0.0" - } - } - } - }, - "electron-builder-core": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/electron-builder-core/-/electron-builder-core-11.2.1.tgz", - "integrity": "sha1-HcqMGhzui1F1C3cIoEkTrv+s+Kg=", - "dev": true - }, - "electron-builder-http": { - "version": "11.5.0", - "resolved": "https://registry.npmjs.org/electron-builder-http/-/electron-builder-http-11.5.0.tgz", - "integrity": "sha1-t3OWY0kDREMp7aO7zQIyFEDgYDg=", - "dev": true, - "requires": { - "debug": "2.6.0", - "fs-extra-p": "3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.0.tgz", - "integrity": "sha1-vFlryr52F/Edn6FTYe3tVgi4SZs=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - } - } - }, - "electron-builder-squirrel-windows": { - "version": "11.6.1", - "resolved": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-11.6.1.tgz", - "integrity": "sha1-pRYS0oiDuesK8IQuPrJoRM9aalI=", - "dev": true, - "requires": { - "archiver": "1.3.0", - "bluebird-lst-c": "1.0.6", - "electron-builder-core": "11.2.1", - "electron-builder-util": "11.6.1", - "fs-extra-p": "3.1.0" - } - }, - "electron-builder-util": { - "version": "11.6.1", - "resolved": "https://registry.npmjs.org/electron-builder-util/-/electron-builder-util-11.6.1.tgz", - "integrity": "sha1-D1VvZ6cOTI11GFVp7yp1ZtsBXsw=", - "dev": true, - "requires": { - "7zip-bin": "2.2.7", - "bluebird-lst-c": "1.0.6", - "chalk": "1.1.3", - "debug": "2.6.0", - "electron-builder-http": "11.5.0", - "fs-extra-p": "3.1.0", - "is-ci": "1.0.10", - "node-emoji": "1.8.1", - "source-map-support": "0.4.18", - "stat-mode": "0.2.2" - }, - "dependencies": { - "debug": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.0.tgz", - "integrity": "sha1-vFlryr52F/Edn6FTYe3tVgi4SZs=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - } - } - }, - "electron-devtools-installer": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/electron-devtools-installer/-/electron-devtools-installer-2.2.1.tgz", - "integrity": "sha1-C+tzzL9ly8TQnnBs69pjj4ObjFU=", - "dev": true, - "requires": { - "7zip": "0.0.6", - "cross-unzip": "0.0.2", - "rimraf": "2.6.2", - "semver": "5.4.1" - } - }, - "electron-download-tf": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/electron-download-tf/-/electron-download-tf-3.1.0.tgz", - "integrity": "sha1-xtYsDgpMY7ZylfV7a2ZRTBO47Y0=", - "dev": true, - "requires": { - "debug": "2.6.9", - "fs-extra": "1.0.0", - "minimist": "1.2.0", - "nugget": "2.0.1", - "path-exists": "3.0.0", - "rc": "1.2.2", - "semver": "5.4.1", - "sumchecker": "1.3.1" - }, - "dependencies": { - "fs-extra": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", - "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "2.4.0", - "klaw": "1.3.1" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, - "electron-macos-sign": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/electron-macos-sign/-/electron-macos-sign-1.5.0.tgz", - "integrity": "sha1-/jqKy3VbX1aPH+FE6eZs7kQBlEg=", - "dev": true, - "requires": { - "bluebird": "3.5.1", - "compare-version": "0.1.2", - "debug": "2.6.9", - "isbinaryfile": "3.0.2", - "plist": "2.1.0" - } - }, - "electron-to-chromium": { - "version": "1.3.27", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz", - "integrity": "sha1-eOy4o5kGYYe7N07t412ccFZagD0=", - "dev": true - }, - "emojione": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/emojione/-/emojione-2.2.7.tgz", - "integrity": "sha1-RkV89rmy+NoTroouTlR94G7hXpY=" - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" - }, - "encodeurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", - "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=", - "dev": true - }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "requires": { - "iconv-lite": "0.4.19" - } - }, - "end-of-stream": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", - "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", - "dev": true, - "requires": { - "once": "1.4.0" - } - }, - "engine.io": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.3.tgz", - "integrity": "sha1-jef5eJXSDTm4X4ju7nd7K9QrE9Q=", - "dev": true, - "requires": { - "accepts": "1.3.3", - "base64id": "1.0.0", - "cookie": "0.3.1", - "debug": "2.3.3", - "engine.io-parser": "1.3.2", - "ws": "1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - } - } - }, - "engine.io-client": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.3.tgz", - "integrity": "sha1-F5jtk0USRkU9TG9jXXogH+lA1as=", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "2.3.3", - "engine.io-parser": "1.3.2", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parsejson": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "1.1.2", - "xmlhttprequest-ssl": "1.5.3", - "yeast": "0.1.2" - }, - "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - } - } - }, - "engine.io-parser": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", - "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", - "dev": true, - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "0.0.6", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.4", - "has-binary": "0.1.7", - "wtf-8": "1.0.0" - } - }, - "enhanced-resolve": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz", - "integrity": "sha1-TW5omzcl+GCQknzMhs2fFjW4ni4=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "memory-fs": "0.2.0", - "tapable": "0.1.10" - }, - "dependencies": { - "memory-fs": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.2.0.tgz", - "integrity": "sha1-8rslNovBIeORwlIN6Slpyu4KApA=", - "dev": true - } - } - }, - "ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", - "dev": true - }, - "entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=" - }, - "errno": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", - "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", - "dev": true, - "requires": { - "prr": "0.0.0" - } - }, - "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", - "requires": { - "is-arrayish": "0.2.1" - } - }, - "es-abstract": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.9.0.tgz", - "integrity": "sha512-kk3IJoKo7A3pWJc0OV8yZ/VEX2oSUytfekrJiqoxBlKJMFAJVJVpGdHClCCTdv+Fn2zHfpDHHIelMFhZVfef3Q==", - "dev": true, - "requires": { - "es-to-primitive": "1.1.1", - "function-bind": "1.1.1", - "has": "1.0.1", - "is-callable": "1.1.3", - "is-regex": "1.0.4" - } - }, - "es-to-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", - "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", - "dev": true, - "requires": { - "is-callable": "1.1.3", - "is-date-object": "1.0.1", - "is-symbol": "1.0.1" - } - }, - "es5-ext": { - "version": "0.10.35", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.35.tgz", - "integrity": "sha1-GO6FjOajxFx9eekcFfzKnsVoSU8=", - "dev": true, - "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.35", - "es6-symbol": "3.1.1" - } - }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.35", - "es6-iterator": "2.0.3", - "es6-set": "0.1.5", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" - } - }, - "es6-promise": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.1.1.tgz", - "integrity": "sha512-OaU1hHjgJf+b0NzsxCg7NdIYERD6Hy/PEmFLTjw+b65scuisG3Kt4QoTvJ66BBkPZ581gr0kpoVzKnxniM8nng==", - "dev": true - }, - "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.35", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" - } - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.35" - } - }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.35", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", - "dev": true, - "requires": { - "es6-map": "0.1.5", - "es6-weak-map": "2.0.2", - "esrecurse": "4.2.0", - "estraverse": "4.2.0" - } - }, - "eslint": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz", - "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "chalk": "1.1.3", - "concat-stream": "1.6.0", - "debug": "2.6.9", - "doctrine": "2.0.0", - "escope": "3.6.0", - "espree": "3.5.1", - "esquery": "1.0.0", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "file-entry-cache": "2.0.0", - "glob": "7.1.2", - "globals": "9.18.0", - "ignore": "3.3.5", - "imurmurhash": "0.1.4", - "inquirer": "0.12.0", - "is-my-json-valid": "2.16.1", - "is-resolvable": "1.0.0", - "js-yaml": "3.10.0", - "json-stable-stringify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.4", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "optionator": "0.8.2", - "path-is-inside": "1.0.2", - "pluralize": "1.2.1", - "progress": "1.1.8", - "require-uncached": "1.0.3", - "shelljs": "0.7.8", - "strip-bom": "3.0.0", - "strip-json-comments": "2.0.1", - "table": "3.8.3", - "text-table": "0.2.0", - "user-home": "2.0.0" - }, - "dependencies": { - "doctrine": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz", - "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=", - "dev": true, - "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "user-home": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", - "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", - "dev": true, - "requires": { - "os-homedir": "1.0.2" - } - } - } - }, - "eslint-config-google": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.7.1.tgz", - "integrity": "sha1-VZj4SY6eB4Qg80uASVuNlZ9lH7I=", - "dev": true - }, - "eslint-plugin-babel": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-babel/-/eslint-plugin-babel-4.1.2.tgz", - "integrity": "sha1-eSAqDjV1fdkngJGbIzbx+i/lPB4=", - "dev": true - }, - "eslint-plugin-flowtype": { - "version": "2.39.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.39.1.tgz", - "integrity": "sha512-RiQv+7Z9QDJuzt+NO8sYgkLGT+h+WeCrxP7y8lI7wpU41x3x/2o3PGtHk9ck8QnA9/mlbNcy/hG0eKvmd7npaA==", - "dev": true, - "requires": { - "lodash": "4.17.4" - } - }, - "eslint-plugin-react": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz", - "integrity": "sha1-xUNb6wZ3ThLH2y9qut3L+QDNP3g=", - "dev": true, - "requires": { - "array.prototype.find": "2.0.4", - "doctrine": "1.2.3", - "has": "1.0.1", - "jsx-ast-utils": "1.4.1", - "object.assign": "4.0.4" - } - }, - "espree": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.1.tgz", - "integrity": "sha1-DJiLirRttTEAoZVK5LqZXd0n2H4=", - "dev": true, - "requires": { - "acorn": "5.1.2", - "acorn-jsx": "3.0.1" - } - }, - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", - "dev": true - }, - "esquery": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", - "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", - "dev": true, - "requires": { - "estraverse": "4.2.0" - } - }, - "esrecurse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", - "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", - "dev": true, - "requires": { - "estraverse": "4.2.0", - "object-assign": "4.1.1" - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.35" - } - }, - "eventemitter3": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", - "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", - "dev": true - }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", - "dev": true - }, - "eventsource": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", - "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", - "dev": true, - "requires": { - "original": "1.0.0" - } - }, - "except": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/except/-/except-0.1.3.tgz", - "integrity": "sha1-mCYckZWFUVNrREgiOOl4P7c9KSo=", - "requires": { - "indexof": "0.0.1" - } - }, - "exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", - "dev": true - }, - "expand-braces": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", - "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", - "dev": true, - "requires": { - "array-slice": "0.2.3", - "array-unique": "0.2.1", - "braces": "0.1.5" - }, - "dependencies": { - "braces": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", - "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", - "dev": true, - "requires": { - "expand-range": "0.1.1" - } - }, - "expand-range": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", - "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", - "dev": true, - "requires": { - "is-number": "0.1.1", - "repeat-string": "0.2.2" - } - }, - "is-number": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", - "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", - "dev": true - }, - "repeat-string": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", - "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", - "dev": true - } - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "0.1.1" - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "requires": { - "fill-range": "2.2.3" - } - }, - "expect": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-1.20.2.tgz", - "integrity": "sha1-1Fj+TFYAQDa64yMkFqP2Nh8E+WU=", - "dev": true, - "requires": { - "define-properties": "1.1.2", - "has": "1.0.1", - "is-equal": "1.5.5", - "is-regex": "1.0.4", - "object-inspect": "1.3.0", - "object-keys": "1.0.11", - "tmatch": "2.0.1" - }, - "dependencies": { - "object-keys": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", - "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", - "dev": true - } - } - }, - "express": { - "version": "4.16.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", - "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", - "dev": true, - "requires": { - "accepts": "1.3.4", - "array-flatten": "1.1.1", - "body-parser": "1.18.2", - "content-disposition": "0.5.2", - "content-type": "1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "1.1.1", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "etag": "1.8.1", - "finalhandler": "1.1.0", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.2", - "qs": "6.5.1", - "range-parser": "1.2.0", - "safe-buffer": "5.1.1", - "send": "0.16.1", - "serve-static": "1.13.1", - "setprototypeof": "1.1.0", - "statuses": "1.3.1", - "type-is": "1.6.15", - "utils-merge": "1.0.1", - "vary": "1.1.2" - }, - "dependencies": { - "accepts": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", - "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", - "dev": true, - "requires": { - "mime-types": "2.1.17", - "negotiator": "0.6.1" - } - }, - "finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.3.1", - "unpipe": "1.0.0" - } - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - } - } - }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "extract-text-webpack-plugin": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-0.9.1.tgz", - "integrity": "sha1-723FCMs17Q3PikAJq76FP3p2IrU=", - "requires": { - "async": "1.5.2", - "loader-utils": "0.2.17" - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fast-deep-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "favico.js": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/favico.js/-/favico.js-0.3.10.tgz", - "integrity": "sha1-gFhuJ6EX8kqNUcGKmb3HFNQzkwE=" - }, - "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "dev": true, - "requires": { - "websocket-driver": "0.7.0" - } - }, - "fbemitter": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-2.1.1.tgz", - "integrity": "sha1-Uj4U/a9SSIBbsC9i78M75wP1GGU=", - "requires": { - "fbjs": "0.8.16" - } - }, - "fbjs": { - "version": "0.8.16", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz", - "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=", - "requires": { - "core-js": "1.2.7", - "isomorphic-fetch": "2.2.1", - "loose-envify": "1.3.1", - "object-assign": "4.1.1", - "promise": "7.3.1", - "setimmediate": "1.0.5", - "ua-parser-js": "0.7.17" - }, - "dependencies": { - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" - } - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" - } - }, - "file": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/file/-/file-0.2.2.tgz", - "integrity": "sha1-w9/Y+M81Na5FXCtCPC5SY112tNM=" - }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true, - "requires": { - "flat-cache": "1.3.0", - "object-assign": "4.1.1" - } - }, - "file-saver": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-1.3.3.tgz", - "integrity": "sha1-zdTETTqiZOrC9o7BZbx5HDSvEjI=" - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true - }, - "filesize": { - "version": "3.5.6", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.5.6.tgz", - "integrity": "sha1-X9mPPqyU7JUW747VeC+thKAaCho=" - }, - "fill-range": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", - "dev": true, - "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.7", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" - } - }, - "filled-array": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/filled-array/-/filled-array-1.1.0.tgz", - "integrity": "sha1-w8T2xmO5I0WamqKZEtLQMfFQf4Q=", - "dev": true - }, - "finalhandler": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.6.tgz", - "integrity": "sha1-AHrqM9Gk0+QgF/YkhIrVjSEvgU8=", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.3.1", - "unpipe": "1.0.0" - } - }, - "find-cache-dir": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", - "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", - "dev": true, - "requires": { - "commondir": "1.0.1", - "mkdirp": "0.5.1", - "pkg-dir": "1.0.0" - } - }, - "find-index": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz", - "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=", - "dev": true - }, - "find-parent-dir": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz", - "integrity": "sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=" - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - } - }, - "flat-cache": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", - "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", - "dev": true, - "requires": { - "circular-json": "0.3.3", - "del": "2.2.2", - "graceful-fs": "4.1.11", - "write": "0.2.1" - } - }, - "flux": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/flux/-/flux-2.1.1.tgz", - "integrity": "sha1-LGrGUtQzdIiWhInGWG86/yajjqQ=", - "requires": { - "fbemitter": "2.1.1", - "fbjs": "0.1.0-alpha.7", - "immutable": "3.7.6" - }, - "dependencies": { - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" - }, - "fbjs": { - "version": "0.1.0-alpha.7", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.1.0-alpha.7.tgz", - "integrity": "sha1-rUMIuPIy+zxzYDNJ6nJdHpw5Mjw=", - "requires": { - "core-js": "1.2.7", - "promise": "7.3.1", - "whatwg-fetch": "0.9.0" - } - }, - "whatwg-fetch": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-0.9.0.tgz", - "integrity": "sha1-DjaExsuZlbQ+/J3wPkw2XZX9nMA=" - } - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "1.0.2" - } - }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", - "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "fs-access": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", - "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", - "dev": true, - "requires": { - "null-check": "1.0.0" - } - }, - "fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "2.4.0", - "klaw": "1.3.1", - "path-is-absolute": "1.0.1", - "rimraf": "2.6.2" - } - }, - "fs-extra-p": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fs-extra-p/-/fs-extra-p-3.1.0.tgz", - "integrity": "sha1-7d97uNk4XXkBTeyyH0Wx0MV5ANM=", - "dev": true, - "requires": { - "bluebird-lst-c": "1.0.6", - "fs-extra": "2.1.2" - }, - "dependencies": { - "fs-extra": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz", - "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "2.4.0" - } - } - } - }, - "fs-readdir-recursive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz", - "integrity": "sha1-jNF0XItPiinIyuw5JHaSG6GV9WA=", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", - "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", - "dev": true, - "optional": true, - "requires": { - "nan": "2.7.0", - "node-pre-gyp": "0.6.36" - }, - "dependencies": { - "abbrev": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "ajv": { - "version": "4.11.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "aproba": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" - } - }, - "asn1": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws4": { - "version": "1.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "balanced-match": { - "version": "0.4.2", - "bundled": true, - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "block-stream": { - "version": "0.0.9", - "bundled": true, - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "boom": { - "version": "2.10.1", - "bundled": true, - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "brace-expansion": { - "version": "1.1.7", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "0.4.2", - "concat-map": "0.0.1" - } - }, - "buffer-shims": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "caseless": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true - }, - "co": { - "version": "4.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "combined-stream": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "cryptiles": { - "version": "2.0.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "boom": "2.10.1" - } - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "debug": { - "version": "2.6.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.4.2", - "bundled": true, - "dev": true, - "optional": true - }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "extend": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "bundled": true, - "dev": true, - "optional": true - }, - "form-data": { - "version": "2.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "fstream": { - "version": "1.0.11", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" - } - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } - }, - "getpass": { - "version": "0.1.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true, - "dev": true - }, - "har-schema": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "hawk": { - "version": "3.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "hoek": { - "version": "2.16.3", - "bundled": true, - "dev": true - }, - "http-signature": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "ini": { - "version": "1.3.4", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "isstream": { - "version": "0.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "jodid25519": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "jsonify": { - "version": "0.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "jsprim": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "mime-db": { - "version": "1.27.0", - "bundled": true, - "dev": true - }, - "mime-types": { - "version": "2.1.15", - "bundled": true, - "dev": true, - "requires": { - "mime-db": "1.27.0" - } - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "node-pre-gyp": { - "version": "0.6.36", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" - } - }, - "npmlog": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "performance-now": { - "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "1.0.7", - "bundled": true, - "dev": true - }, - "punycode": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true - }, - "qs": { - "version": "6.4.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.2.9", - "bundled": true, - "dev": true, - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" - } - }, - "request": { - "version": "2.81.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" - } - }, - "rimraf": { - "version": "2.6.1", - "bundled": true, - "dev": true, - "requires": { - "glob": "7.1.2" - } - }, - "safe-buffer": { - "version": "5.0.1", - "bundled": true, - "dev": true - }, - "semver": { - "version": "5.3.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sntp": { - "version": "1.0.9", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "hoek": "2.16.3" - } - }, - "sshpk": { - "version": "1.13.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string_decoder": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "stringstream": { - "version": "0.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "2.2.1", - "bundled": true, - "dev": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-pack": { - "version": "3.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", - "rimraf": "2.6.1", - "tar": "2.2.1", - "uid-number": "0.0.6" - } - }, - "tough-cookie": { - "version": "2.3.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true, - "dev": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "bundled": true, - "dev": true, - "optional": true - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "uuid": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "verror": { - "version": "1.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "extsprintf": "1.0.2" - } - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "fuse.js": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-2.7.4.tgz", - "integrity": "sha1-luQg/efvARrEnCWKYhMU/ldlNvk=" - }, - "gemini-scrollbar": { - "version": "github:matrix-org/gemini-scrollbar#b302279810d05319ac5ff1bd34910bff32325c7b" - }, - "generate-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", - "dev": true - }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true, - "requires": { - "is-property": "1.0.2" - } - }, - "get-caller-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=" - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "1.0.0" - } - }, - "gfm.css": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/gfm.css/-/gfm.css-1.1.1.tgz", - "integrity": "sha1-FrDvCGN/JJW2bITFAkWT1x6+rEY=" - }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "2.0.1" - } - }, - "glob2base": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", - "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", - "dev": true, - "requires": { - "find-index": "0.1.1" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true, - "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } - } - }, - "got": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz", - "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=", - "dev": true, - "requires": { - "create-error-class": "3.0.2", - "duplexer2": "0.1.4", - "is-redirect": "1.0.0", - "is-retry-allowed": "1.1.0", - "is-stream": "1.1.0", - "lowercase-keys": "1.0.0", - "node-status-codes": "1.0.0", - "object-assign": "4.1.1", - "parse-json": "2.2.0", - "pinkie-promise": "2.0.1", - "read-all-stream": "3.1.0", - "readable-stream": "2.3.3", - "timed-out": "3.1.3", - "unzip-response": "1.0.2", - "url-parse-lax": "1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" - }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true - }, - "growl": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", - "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", - "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", - "requires": { - "ajv": "5.2.3", - "har-schema": "2.0.0" - } - }, - "has": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", - "dev": true, - "requires": { - "function-bind": "1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "has-binary": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", - "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", - "dev": true, - "requires": { - "isarray": "0.0.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - } - } - }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", - "dev": true - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "hawk": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", - "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", - "requires": { - "boom": "4.3.1", - "cryptiles": "3.1.2", - "hoek": "4.2.0", - "sntp": "2.0.2" - } - }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, - "highlight.js": { - "version": "9.12.0", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.12.0.tgz", - "integrity": "sha1-5tnb5Xy+/mB1HwKvM2GVhwyQwB4=" - }, - "hoek": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", - "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" - }, - "hoist-non-react-statics": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.3.1.tgz", - "integrity": "sha1-ND24TGAYxlB3iJgkATWhQg7iLOA=" - }, - "home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "hosted-git-info": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", - "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==" - }, - "html-minifier": { - "version": "3.5.6", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.6.tgz", - "integrity": "sha512-88FjtKrlak2XjczhxrBomgzV4jmGzM3UnHRBScRkJcmcRum0kb+IwhVAETJ8AVp7j0p3xugjSaw9L+RmI5/QOA==", - "dev": true, - "requires": { - "camel-case": "3.0.0", - "clean-css": "4.1.9", - "commander": "2.11.0", - "he": "1.1.1", - "ncname": "1.0.0", - "param-case": "2.1.1", - "relateurl": "0.2.7", - "uglify-js": "3.1.4" - }, - "dependencies": { - "clean-css": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.9.tgz", - "integrity": "sha1-Nc7ornaHpJuYA09w3gDE7dOCYwE=", - "dev": true, - "requires": { - "source-map": "0.5.7" - } - } - } - }, - "html-webpack-plugin": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz", - "integrity": "sha1-f5xCG36pHsRg9WUn1430hO51N9U=", - "dev": true, - "requires": { - "bluebird": "3.5.1", - "html-minifier": "3.5.6", - "loader-utils": "0.2.17", - "lodash": "4.17.4", - "pretty-error": "2.1.1", - "toposort": "1.0.6" - } - }, - "htmlparser2": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", - "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", - "requires": { - "domelementtype": "1.3.0", - "domhandler": "2.4.1", - "domutils": "1.6.2", - "entities": "1.1.1", - "inherits": "2.0.3", - "readable-stream": "2.3.3" - } - }, - "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", - "dev": true, - "requires": { - "depd": "1.1.1", - "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": "1.3.1" - } - }, - "http-parser-js": { - "version": "0.4.9", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.9.tgz", - "integrity": "sha1-6hoE+2St/wJC6ZdPKX3Uw8rSceE=", - "dev": true - }, - "http-proxy": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", - "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", - "dev": true, - "requires": { - "eventemitter3": "1.2.0", - "requires-port": "1.0.0" - } - }, - "http-proxy-middleware": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", - "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", - "dev": true, - "requires": { - "http-proxy": "1.16.2", - "is-glob": "3.1.0", - "lodash": "4.17.4", - "micromatch": "2.3.11" - }, - "dependencies": { - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - } - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" - } - }, - "https-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", - "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=", - "dev": true - }, - "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" - }, - "ieee754": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", - "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", - "dev": true - }, - "ignore": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.5.tgz", - "integrity": "sha512-JLH93mL8amZQhh/p6mfQgVBH3M6epNq3DfsXsTSuSrInVjwyYlFE1nv2AgfRCC8PoOhM0jwQ5v8s9LgbK7yGDw==", - "dev": true - }, - "immutable": { - "version": "3.7.6", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.7.6.tgz", - "integrity": "sha1-E7TTyxK++hVIKib+Gy665kAHHks=" - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "requires": { - "repeating": "2.0.1" - } - }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ini": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", - "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", - "dev": true - }, - "inquirer": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", - "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", - "dev": true, - "requires": { - "ansi-escapes": "1.4.0", - "ansi-regex": "2.1.1", - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "cli-width": "2.2.0", - "figures": "1.7.0", - "lodash": "4.17.4", - "readline2": "1.0.1", - "run-async": "0.1.0", - "rx-lite": "3.1.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "through": "2.3.8" - } - }, - "interpret": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.4.tgz", - "integrity": "sha1-ggzdWIuGj/sZGoCVBtbJyPISsbA=", - "dev": true - }, - "invariant": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", - "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", - "requires": { - "loose-envify": "1.3.1" - } - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" - }, - "ipaddr.js": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz", - "integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A=", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, - "is-arrow-function": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-arrow-function/-/is-arrow-function-2.0.3.tgz", - "integrity": "sha1-Kb4sLY2UUIUri7r7Y1unuNjofsI=", - "dev": true, - "requires": { - "is-callable": "1.1.3" - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "1.10.0" - } - }, - "is-boolean-object": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.0.tgz", - "integrity": "sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M=", - "dev": true - }, - "is-buffer": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", - "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", - "dev": true - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "requires": { - "builtin-modules": "1.1.1" - } - }, - "is-callable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", - "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", - "dev": true - }, - "is-ci": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.0.10.tgz", - "integrity": "sha1-9zkzayYyNlBhqdSCcM1WrjNpMY4=", - "dev": true, - "requires": { - "ci-info": "1.1.1" - } - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true - }, - "is-equal": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/is-equal/-/is-equal-1.5.5.tgz", - "integrity": "sha1-XoXxlX4FKIMkf+s4aWWju6Ffuz0=", - "dev": true, - "requires": { - "has": "1.0.1", - "is-arrow-function": "2.0.3", - "is-boolean-object": "1.0.0", - "is-callable": "1.1.3", - "is-date-object": "1.0.1", - "is-generator-function": "1.0.6", - "is-number-object": "1.0.3", - "is-regex": "1.0.4", - "is-string": "1.0.4", - "is-symbol": "1.0.1", - "object.entries": "1.0.4" - } - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, - "requires": { - "is-primitive": "2.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-generator-function": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.6.tgz", - "integrity": "sha1-nnFlPNFf/zQcecQVFGChMdMen8Q=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "is-my-json-valid": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz", - "integrity": "sha512-ochPsqWS1WXj8ZnMIV0vnNXooaMhp7cyL4FMSIPKTtnV0Ha/T19G2b9kkhcNsabV9bxYkze7/aLZJb/bYuFduQ==", - "dev": true, - "requires": { - "generate-function": "2.0.0", - "generate-object-property": "1.2.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" - } - }, - "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", - "dev": true - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "is-number-object": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.3.tgz", - "integrity": "sha1-8mWrian0RQNO9q/xWo8AsA9VF5k=", - "dev": true - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", - "dev": true, - "requires": { - "is-path-inside": "1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", - "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", - "dev": true, - "requires": { - "path-is-inside": "1.0.2" - } - }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true - }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", - "dev": true - }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", - "dev": true - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, - "requires": { - "has": "1.0.1" - } - }, - "is-resolvable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz", - "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=", - "dev": true, - "requires": { - "tryit": "1.0.3" - } - }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-string": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.4.tgz", - "integrity": "sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=", - "dev": true - }, - "is-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", - "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" - }, - "is-windows": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.1.tgz", - "integrity": "sha1-MQ23D3QtJZoWo2kgK1GvhCMzENk=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isbinaryfile": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz", - "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "requires": { - "node-fetch": "1.7.3", - "whatwg-fetch": "2.0.3" - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "jade": { - "version": "0.26.3", - "resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz", - "integrity": "sha1-jxDXl32NefL2/4YqgbBRPMslaGw=", - "dev": true, - "requires": { - "commander": "0.6.1", - "mkdirp": "0.3.0" - }, - "dependencies": { - "commander": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz", - "integrity": "sha1-+mihT2qUXVTbvlDYzbMyDp47GgY=", - "dev": true - }, - "mkdirp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", - "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=", - "dev": true - } - } - }, - "jquery": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.2.1.tgz", - "integrity": "sha1-XE2d5lKvbNCncBVKYxu6ErAVx4c=" - }, - "js-base64": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.3.2.tgz", - "integrity": "sha512-Y2/+DnfJJXT1/FCwUebUhLWb3QihxiSC42+ctHLGogmW2jPY6LCapMdFZXRvVP2z6qyKW7s6qncE/9gSqZiArw==", - "dev": true - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" - }, - "js-yaml": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", - "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", - "dev": true, - "requires": { - "argparse": "1.0.9", - "esprima": "4.0.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", - "dev": true, - "requires": { - "sprintf-js": "1.0.3" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - } - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "optional": true - }, - "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true - }, - "json-loader": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", - "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11" - } - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" - }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "jsx-ast-utils": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz", - "integrity": "sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE=", - "dev": true - }, - "karma": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/karma/-/karma-1.7.1.tgz", - "integrity": "sha512-k5pBjHDhmkdaUccnC7gE3mBzZjcxyxYsYVaqiL2G5AqlfLyBO5nw2VdNK+O16cveEPd/gIOWULH7gkiYYwVNHg==", - "dev": true, - "requires": { - "bluebird": "3.5.1", - "body-parser": "1.18.2", - "chokidar": "1.7.0", - "colors": "1.1.2", - "combine-lists": "1.0.1", - "connect": "3.6.5", - "core-js": "2.5.1", - "di": "0.0.1", - "dom-serialize": "2.2.1", - "expand-braces": "0.1.2", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "http-proxy": "1.16.2", - "isbinaryfile": "3.0.2", - "lodash": "3.10.1", - "log4js": "0.6.38", - "mime": "1.4.1", - "minimatch": "3.0.4", - "optimist": "0.6.1", - "qjobs": "1.1.5", - "range-parser": "1.2.0", - "rimraf": "2.6.2", - "safe-buffer": "5.1.1", - "socket.io": "1.7.3", - "source-map": "0.5.7", - "tmp": "0.0.31", - "useragent": "2.2.1" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - } - } - }, - "karma-chrome-launcher": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-0.2.3.tgz", - "integrity": "sha1-TG1wDRY6nTTGGO/YeRi+SeekqMk=", - "dev": true, - "requires": { - "fs-access": "1.0.1", - "which": "1.3.0" - } - }, - "karma-cli": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/karma-cli/-/karma-cli-0.1.2.tgz", - "integrity": "sha1-ys6oQ3Hs4Zh2JlyPoQLru5/uSow=", - "dev": true, - "requires": { - "resolve": "1.4.0" - } - }, - "karma-junit-reporter": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/karma-junit-reporter/-/karma-junit-reporter-0.4.2.tgz", - "integrity": "sha1-SSojZyj+TJKqz0GfzQEQpDJ+nX8=", - "dev": true, - "requires": { - "path-is-absolute": "1.0.1", - "xmlbuilder": "3.1.0" - }, - "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - }, - "xmlbuilder": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-3.1.0.tgz", - "integrity": "sha1-LIaIjy1OrehQ+jjKf3Ij9yCVFuE=", - "dev": true, - "requires": { - "lodash": "3.10.1" - } - } - } - }, - "karma-logcapture-reporter": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/karma-logcapture-reporter/-/karma-logcapture-reporter-0.0.1.tgz", - "integrity": "sha1-vxsLHJFeDeKVoV/i8BedQoG6zdw=", - "dev": true - }, - "karma-mocha": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-0.2.2.tgz", - "integrity": "sha1-OI7ZF9oV3LGW0bkVwZNO+AMZP44=", - "dev": true - }, - "karma-sourcemap-loader": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz", - "integrity": "sha1-kTIsd/jxPUb+0GKwQuEAnUxFBdg=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11" - } - }, - "karma-spec-reporter": { - "version": "0.0.31", - "resolved": "https://registry.npmjs.org/karma-spec-reporter/-/karma-spec-reporter-0.0.31.tgz", - "integrity": "sha1-SDDccUihVcfXoYbmMjOaDYD63sM=", - "dev": true, - "requires": { - "colors": "1.1.2" - } - }, - "karma-summary-reporter": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/karma-summary-reporter/-/karma-summary-reporter-1.3.3.tgz", - "integrity": "sha1-nHQKJLYL+RNes59acylsTM0Q2Zs=", - "dev": true, - "requires": { - "chalk": "1.1.3" - } - }, - "karma-webpack": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/karma-webpack/-/karma-webpack-1.8.1.tgz", - "integrity": "sha1-OdX9Lt7qPMPvW0BZibN9Ww5qO04=", - "dev": true, - "requires": { - "async": "0.9.2", - "loader-utils": "0.2.17", - "lodash": "3.10.1", - "source-map": "0.1.43", - "webpack-dev-middleware": "1.12.0" - }, - "dependencies": { - "async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", - "dev": true - }, - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - }, - "source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.5" - } - }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11" - } - }, - "latest-version": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-2.0.0.tgz", - "integrity": "sha1-VvjWE5YghHuAF/jx9NeOIRMkFos=", - "dev": true, - "requires": { - "package-json": "2.4.0" - } - }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true - }, - "lazy-req": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/lazy-req/-/lazy-req-1.1.0.tgz", - "integrity": "sha1-va6+rTD42CQDnODOFJ1Nqge6H6w=", - "dev": true - }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "requires": { - "readable-stream": "2.3.3" - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "requires": { - "invert-kv": "1.0.0" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" - } - }, - "linkifyjs": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-2.1.5.tgz", - "integrity": "sha512-8FqxPXQDLjI2nNHlM7eGewxE6DHvMbtiW0AiXzm0s4RkTwVZYRDTeVXkiRxLHTd4CuRBQY/JPtvtqJWdS7gHyA==", - "requires": { - "jquery": "3.2.1", - "react": "15.6.2", - "react-dom": "15.6.2" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" - } - }, - "loader-utils": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1", - "object-assign": "4.1.1" - } - }, - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" - }, - "lodash-es": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.4.tgz", - "integrity": "sha1-3MHXVS4VCgZABzupyzHXDwMpUOc=" - }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", - "dev": true - }, - "lodash.pickby": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.pickby/-/lodash.pickby-4.6.0.tgz", - "integrity": "sha1-feoh2MGNdwOifHBMFdO4SmfjOv8=", - "dev": true - }, - "lodash.toarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", - "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=", - "dev": true - }, - "log4js": { - "version": "0.6.38", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", - "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", - "dev": true, - "requires": { - "readable-stream": "1.0.34", - "semver": "4.3.6" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", - "dev": true - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true - }, - "loose-envify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", - "requires": { - "js-tokens": "3.0.2" - } - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, - "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" - } - }, - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", - "dev": true - }, - "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", - "dev": true - }, - "lru-cache": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", - "dev": true, - "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" - } - }, - "macaddress": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.8.tgz", - "integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI=", - "dev": true - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, - "matrix-js-sdk": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/matrix-js-sdk/-/matrix-js-sdk-0.8.2.tgz", - "integrity": "sha1-e7mrVoXrNCFLOFlMiDn++pY2ViE=", - "requires": { - "another-json": "0.2.0", - "bluebird": "3.5.1", - "browser-request": "0.3.3", - "content-type": "1.0.4", - "request": "2.83.0" - } - }, - "matrix-mock-request": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/matrix-mock-request/-/matrix-mock-request-1.2.1.tgz", - "integrity": "sha1-2aWrqNPYJG6I/3YyWYuZwUE/QjI=", - "dev": true, - "requires": { - "bluebird": "3.5.1", - "expect": "1.20.2" - } - }, - "matrix-react-sdk": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/matrix-react-sdk/-/matrix-react-sdk-0.10.2.tgz", - "integrity": "sha1-TNSwkN1P4Jsl4Yh5Z/XOE17U8q4=", - "requires": { - "babel-runtime": "6.26.0", - "bluebird": "3.5.1", - "blueimp-canvas-to-blob": "3.14.0", - "browser-encrypt-attachment": "0.3.0", - "browser-request": "0.3.3", - "classnames": "2.2.5", - "commonmark": "0.27.0", - "counterpart": "0.18.3", - "draft-js": "0.11.0-alpha", - "draft-js-export-html": "0.6.0", - "draft-js-export-markdown": "0.3.0", - "emojione": "2.2.7", - "file-saver": "1.3.3", - "filesize": "3.5.6", - "flux": "2.1.1", - "fuse.js": "2.7.4", - "glob": "5.0.15", - "highlight.js": "8.9.1", - "isomorphic-fetch": "2.2.1", - "linkifyjs": "2.1.5", - "lodash": "4.17.4", - "matrix-js-sdk": "0.8.2", - "optimist": "0.6.1", - "prop-types": "15.6.0", - "react": "15.6.2", - "react-addons-css-transition-group": "15.3.2", - "react-dom": "15.6.2", - "react-gemini-scrollbar": "github:matrix-org/react-gemini-scrollbar#5e97aef7e034efc8db1431f4b0efe3b26e249ae9", - "sanitize-html": "1.14.1", - "text-encoding-utf-8": "1.0.1", - "url": "0.11.0", - "velocity-vector": "github:vector-im/velocity#059e3b2348f1110888d033974d3109fd5a3af00f", - "whatwg-fetch": "1.1.1" - }, - "dependencies": { - "highlight.js": { - "version": "8.9.1", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-8.9.1.tgz", - "integrity": "sha1-uKnFSTISqTkvAiK2SclhFJfr+4g=" - }, - "whatwg-fetch": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-1.1.1.tgz", - "integrity": "sha1-rDydOfMgxtzlM5lp0FTvQ90zMxk=" - } - } - }, - "matrix-react-test-utils": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/matrix-react-test-utils/-/matrix-react-test-utils-0.2.1.tgz", - "integrity": "sha1-i2xRAzK54K+XwCuinnMbKdCxF7s=", - "dev": true, - "requires": { - "react": "15.6.2", - "react-dom": "15.6.2" - } - }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "0.1.4", - "readable-stream": "2.3.3" - } - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "2.1.0", - "decamelize": "1.2.0", - "loud-rejection": "1.6.0", - "map-obj": "1.0.1", - "minimist": "1.2.0", - "normalize-package-data": "2.4.0", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "redent": "1.0.0", - "trim-newlines": "1.0.0" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" - } - }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", - "dev": true - }, - "mime-db": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" - }, - "mime-types": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", - "requires": { - "mime-db": "1.30.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "1.1.8" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - } - } - }, - "mocha": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-2.5.3.tgz", - "integrity": "sha1-FhvlvetJZ3HrmzV0UFC2IrWu/Fg=", - "dev": true, - "requires": { - "commander": "2.3.0", - "debug": "2.2.0", - "diff": "1.4.0", - "escape-string-regexp": "1.0.2", - "glob": "3.2.11", - "growl": "1.9.2", - "jade": "0.26.3", - "mkdirp": "0.5.1", - "supports-color": "1.2.0", - "to-iso-string": "0.0.2" - }, - "dependencies": { - "commander": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.3.0.tgz", - "integrity": "sha1-/UMOiJgy7DU7ms0d4hfBHLPu+HM=", - "dev": true - }, - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true, - "requires": { - "ms": "0.7.1" - } - }, - "escape-string-regexp": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz", - "integrity": "sha1-Tbwv5nTnGUnK8/smlc5/LcHZqNE=", - "dev": true - }, - "glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "minimatch": "0.3.0" - } - }, - "lru-cache": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", - "dev": true - }, - "minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", - "dev": true, - "requires": { - "lru-cache": "2.7.3", - "sigmund": "1.0.1" - } - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", - "dev": true - }, - "supports-color": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.2.0.tgz", - "integrity": "sha1-/x7R5hFp0Gs88tWI4YixjYhH4X4=", - "dev": true - } - } - }, - "modernizr": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/modernizr/-/modernizr-3.5.0.tgz", - "integrity": "sha1-OWoCIxvcVGKLveLAgTqOiEx+gGA=", - "requires": { - "doctrine": "1.2.3", - "file": "0.2.2", - "find-parent-dir": "0.3.0", - "lodash": "4.17.4", - "mkdirp": "0.5.1", - "remarkable": "1.7.1", - "requirejs": "2.1.22", - "yargs": "7.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "mute-stream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", - "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", - "dev": true - }, - "nan": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz", - "integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY=", - "dev": true, - "optional": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "ncname": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz", - "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=", - "dev": true, - "requires": { - "xml-char-classes": "1.0.0" - } - }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", - "dev": true - }, - "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", - "dev": true, - "requires": { - "lower-case": "1.1.4" - } - }, - "node-emoji": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.8.1.tgz", - "integrity": "sha512-+ktMAh1Jwas+TnGodfCfjUbJKoANqPaJFN0z0iqh41eqD8dvguNzcitVSBSVK1pidz0AqGbLKcoVuVLRVZ/aVg==", - "dev": true, - "requires": { - "lodash.toarray": "4.4.0" - } - }, - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "requires": { - "encoding": "0.1.12", - "is-stream": "1.1.0" - } - }, - "node-libs-browser": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-0.7.0.tgz", - "integrity": "sha1-PicsCBnjCJNeJmdECNevDhSRuDs=", - "dev": true, - "requires": { - "assert": "1.4.1", - "browserify-zlib": "0.1.4", - "buffer": "4.9.1", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.3.0", - "domain-browser": "1.1.7", - "events": "1.1.1", - "https-browserify": "0.0.1", - "os-browserify": "0.2.1", - "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.3", - "stream-browserify": "2.0.1", - "stream-http": "2.7.2", - "string_decoder": "0.10.31", - "timers-browserify": "2.0.4", - "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.3", - "vm-browserify": "0.0.4" - }, - "dependencies": { - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "node-status-codes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz", - "integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8=", - "dev": true - }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "requires": { - "hosted-git-info": "2.5.0", - "is-builtin-module": "1.0.0", - "semver": "5.4.1", - "validate-npm-package-license": "3.0.1" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "1.1.0" - } - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true - }, - "nth-check": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", - "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", - "dev": true, - "requires": { - "boolbase": "1.0.0" - } - }, - "nugget": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nugget/-/nugget-2.0.1.tgz", - "integrity": "sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA=", - "dev": true, - "requires": { - "debug": "2.6.9", - "minimist": "1.2.0", - "pretty-bytes": "1.0.4", - "progress-stream": "1.2.0", - "request": "2.83.0", - "single-line-log": "1.1.2", - "throttleit": "0.0.2" - } - }, - "null-check": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", - "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", - "dev": true - }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", - "dev": true - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-component": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", - "dev": true - }, - "object-inspect": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.3.0.tgz", - "integrity": "sha512-OHHnLgLNXpM++GnJRyyhbr2bwl3pPVm4YvaraHrRvDt/N3r+s/gDVHciA7EJBTkijKXj61ssgSAikq1fb0IBRg==", - "dev": true - }, - "object-keys": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", - "dev": true - }, - "object.assign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.0.4.tgz", - "integrity": "sha1-scnMBE7xuf5jYG/BQau7MuFHMMw=", - "dev": true, - "requires": { - "define-properties": "1.1.2", - "function-bind": "1.1.1", - "object-keys": "1.0.11" - }, - "dependencies": { - "object-keys": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", - "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", - "dev": true - } - } - }, - "object.entries": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.0.4.tgz", - "integrity": "sha1-G/mk3SKI9bM/Opk9JXZh8F0WGl8=", - "dev": true, - "requires": { - "define-properties": "1.1.2", - "es-abstract": "1.9.0", - "function-bind": "1.1.1", - "has": "1.0.1" - } - }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, - "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" - } - }, - "olm": { - "version": "https://matrix.org/packages/npm/olm/olm-2.2.1.tgz", - "integrity": "sha1-Xl21DQoUK3x6BlDZs9isw9N+aXs=", - "optional": true - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1.0.2" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, - "open": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/open/-/open-0.0.5.tgz", - "integrity": "sha1-QsPhjslUZra/DcQvOilFw/DK2Pw=", - "dev": true - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "requires": { - "minimist": "0.0.10", - "wordwrap": "0.0.3" - }, - "dependencies": { - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" - } - } - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" - }, - "dependencies": { - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - } - } - }, - "options": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", - "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", - "dev": true - }, - "original": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.0.tgz", - "integrity": "sha1-kUf5P6FpbQS+YeAb1QuurKZWvTs=", - "dev": true, - "requires": { - "url-parse": "1.0.5" - }, - "dependencies": { - "url-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.0.5.tgz", - "integrity": "sha1-CFSGBCKv3P7+tsllxmLUgAFpkns=", - "dev": true, - "requires": { - "querystringify": "0.0.4", - "requires-port": "1.0.0" - } - } - } - }, - "os-browserify": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.2.1.tgz", - "integrity": "sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=", - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "requires": { - "lcid": "1.0.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "osenv": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", - "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", - "dev": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "output-file-sync": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", - "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "mkdirp": "0.5.1", - "object-assign": "4.1.1" - } - }, - "package-json": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-2.4.0.tgz", - "integrity": "sha1-DRW9Z9HLvduyyiIv8u24a8sxqLs=", - "dev": true, - "requires": { - "got": "5.7.1", - "registry-auth-token": "3.3.1", - "registry-url": "3.1.0", - "semver": "5.4.1" - } - }, - "pako": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", - "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==" - }, - "parallelshell": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/parallelshell/-/parallelshell-3.0.2.tgz", - "integrity": "sha512-aW73W8tmYiFZtQi41pweV3WWT6o/EvSxAVQHbumOhN53H47OuWQwrRc11xQ2i44GFvR5AjtzhD92r8Kv9X+7Iw==", - "dev": true - }, - "param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", - "dev": true, - "requires": { - "no-case": "2.3.2" - } - }, - "parse-color": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-color/-/parse-color-1.0.0.tgz", - "integrity": "sha1-e3SLlag/A/FqlPU15S1/PZRlhhk=", - "dev": true, - "requires": { - "color-convert": "0.5.3" - } - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "requires": { - "error-ex": "1.3.1" - } - }, - "parsejson": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", - "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", - "dev": true, - "requires": { - "better-assert": "1.0.2" - } - }, - "parseqs": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", - "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", - "dev": true, - "requires": { - "better-assert": "1.0.2" - } - }, - "parseuri": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", - "dev": true, - "requires": { - "better-assert": "1.0.2" - } - }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", - "dev": true - }, - "path-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", - "dev": true - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "requires": { - "pinkie-promise": "2.0.1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "pbkdf2-compat": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz", - "integrity": "sha1-tuDI+plJTZTgURV1gCpZpcFC8og=", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { - "pinkie": "2.0.4" - } - }, - "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "dev": true, - "requires": { - "find-up": "1.1.2" - } - }, - "plist": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/plist/-/plist-2.1.0.tgz", - "integrity": "sha1-V8zbeggh3yGDEhejytVOPhRqECU=", - "dev": true, - "requires": { - "base64-js": "1.2.0", - "xmlbuilder": "8.2.2", - "xmldom": "0.1.27" - } - }, - "pluralize": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", - "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", - "dev": true - }, - "pluralizers": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/pluralizers/-/pluralizers-0.1.6.tgz", - "integrity": "sha1-GrOLbnYOb5f5hGElCXuGK8l0yB4=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.3.2", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "postcss-extend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/postcss-extend/-/postcss-extend-1.0.5.tgz", - "integrity": "sha1-XqmL94e6PKz030YJdD+AqDOx0Oc=", - "dev": true, - "requires": { - "postcss": "5.2.18" - } - }, - "postcss-import": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-9.1.0.tgz", - "integrity": "sha1-lf6YdqHnmvSfvcNYnwH+WqfMHoA=", - "dev": true, - "requires": { - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0", - "promise-each": "2.2.0", - "read-cache": "1.0.0", - "resolve": "1.4.0" - } - }, - "postcss-js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-0.2.0.tgz", - "integrity": "sha1-VubbDNkQpt/+w9+zRGJpOscuOII=", - "dev": true, - "requires": { - "camelcase-css": "1.0.1", - "postcss": "5.2.18" - } - }, - "postcss-load-config": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz", - "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=", - "dev": true, - "requires": { - "cosmiconfig": "2.2.2", - "object-assign": "4.1.1", - "postcss-load-options": "1.2.0", - "postcss-load-plugins": "2.3.0" - } - }, - "postcss-load-options": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz", - "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=", - "dev": true, - "requires": { - "cosmiconfig": "2.2.2", - "object-assign": "4.1.1" - } - }, - "postcss-load-plugins": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz", - "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=", - "dev": true, - "requires": { - "cosmiconfig": "2.2.2", - "object-assign": "4.1.1" - } - }, - "postcss-loader": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-1.3.3.tgz", - "integrity": "sha1-piHqH6KQYqg5cqRvVEhncTAZFus=", - "dev": true, - "requires": { - "loader-utils": "1.1.0", - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-load-config": "1.2.0" - }, - "dependencies": { - "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true, - "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1" - } - } - } - }, - "postcss-mixins": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/postcss-mixins/-/postcss-mixins-5.4.1.tgz", - "integrity": "sha1-AEwKzFQyi4a7yzRx+es7Uu1w9Kg=", - "dev": true, - "requires": { - "globby": "6.1.0", - "postcss": "5.2.18", - "postcss-js": "0.2.0", - "postcss-simple-vars": "3.1.0", - "sugarss": "0.2.0" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "1.0.2", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - } - } - }, - "postcss-nested": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-1.0.1.tgz", - "integrity": "sha1-kfKPTm4j1WckGsFUVYoM+rTMDY8=", - "dev": true, - "requires": { - "postcss": "5.2.18" - } - }, - "postcss-scss": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-0.4.1.tgz", - "integrity": "sha1-rXcbgfD3L19IRdCKpg+TVXZT1Uw=", - "dev": true, - "requires": { - "postcss": "5.2.18" - } - }, - "postcss-simple-vars": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/postcss-simple-vars/-/postcss-simple-vars-3.1.0.tgz", - "integrity": "sha1-YsBlchTvH0OjxYk63oneQU8xtv8=", - "dev": true, - "requires": { - "postcss": "5.2.18" - } - }, - "postcss-strip-inline-comments": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/postcss-strip-inline-comments/-/postcss-strip-inline-comments-0.1.5.tgz", - "integrity": "sha1-f/a83BTmM+1M36AguuPt2tT4S5A=", - "dev": true, - "requires": { - "postcss": "5.2.18" - } - }, - "postcss-value-parser": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", - "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true - }, - "pretty-bytes": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", - "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", - "dev": true, - "requires": { - "get-stdin": "4.0.1", - "meow": "3.7.0" - } - }, - "pretty-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", - "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", - "dev": true, - "requires": { - "renderkid": "2.0.1", - "utila": "0.4.0" - } - }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" - }, - "progress": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", - "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", - "dev": true - }, - "progress-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz", - "integrity": "sha1-LNPP6jO6OonJwSHsM0er6asSX3c=", - "dev": true, - "requires": { - "speedometer": "0.1.4", - "through2": "0.2.3" - } - }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "requires": { - "asap": "2.0.6" - } - }, - "promise-each": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/promise-each/-/promise-each-2.2.0.tgz", - "integrity": "sha1-M1MXTv8mlEgQN+BOAfd6oPttG2A=", - "dev": true, - "requires": { - "any-promise": "0.1.0" - } - }, - "prop-types": { - "version": "15.6.0", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.0.tgz", - "integrity": "sha1-zq8IMCL8RrSjX2nhPvda7Q1jmFY=", - "requires": { - "fbjs": "0.8.16", - "loose-envify": "1.3.1", - "object-assign": "4.1.1" - } - }, - "proxy-addr": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz", - "integrity": "sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=", - "dev": true, - "requires": { - "forwarded": "0.1.2", - "ipaddr.js": "1.5.2" - } - }, - "prr": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", - "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "qjobs": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.1.5.tgz", - "integrity": "sha1-ZZ3p8s+NzCehSBJ28gU3cnI4LnM=", - "dev": true - }, - "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, - "querystringify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-0.0.4.tgz", - "integrity": "sha1-DPf4T5Rj/wrlHExLFC2VvjdyTZw=", - "dev": true - }, - "randomatic": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", - "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", - "dev": true, - "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "1.1.5" - } - } - } - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", - "dev": true - }, - "raw-body": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", - "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", - "dev": true, - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", - "unpipe": "1.0.0" - } - }, - "rc": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.2.tgz", - "integrity": "sha1-2M6ctX6NZNnHut2YdsfDTL48cHc=", - "dev": true, - "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - } - }, - "react": { - "version": "15.6.2", - "resolved": "https://registry.npmjs.org/react/-/react-15.6.2.tgz", - "integrity": "sha1-26BDSrQ5z+gvEI8PURZjkIF5qnI=", - "requires": { - "create-react-class": "15.6.2", - "fbjs": "0.8.16", - "loose-envify": "1.3.1", - "object-assign": "4.1.1", - "prop-types": "15.6.0" - } - }, - "react-addons-css-transition-group": { - "version": "15.3.2", - "resolved": "https://registry.npmjs.org/react-addons-css-transition-group/-/react-addons-css-transition-group-15.3.2.tgz", - "integrity": "sha1-2PpSvsm7Yb396LnkZSuAKXy/9mc=" - }, - "react-addons-perf": { - "version": "15.4.2", - "resolved": "https://registry.npmjs.org/react-addons-perf/-/react-addons-perf-15.4.2.tgz", - "integrity": "sha1-EQvc9cRZxPd8uF7WNLzTOXU2ODs=", - "dev": true, - "requires": { - "fbjs": "0.8.16", - "object-assign": "4.1.1" - } - }, - "react-addons-test-utils": { - "version": "15.6.2", - "resolved": "https://registry.npmjs.org/react-addons-test-utils/-/react-addons-test-utils-15.6.2.tgz", - "integrity": "sha1-wStu/cIkfBDae4dw0YUICnsEcVY=", - "dev": true - }, - "react-dnd": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/react-dnd/-/react-dnd-2.5.4.tgz", - "integrity": "sha512-y9YmnusURc+3KPgvhYKvZ9oCucj51MSZWODyaeV0KFU0cquzA7dCD1g/OIYUKtNoZ+MXtacDngkdud2TklMSjw==", - "requires": { - "disposables": "1.0.1", - "dnd-core": "2.5.4", - "hoist-non-react-statics": "2.3.1", - "invariant": "2.2.2", - "lodash": "4.17.4", - "prop-types": "15.6.0" - } - }, - "react-dnd-html5-backend": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/react-dnd-html5-backend/-/react-dnd-html5-backend-2.5.4.tgz", - "integrity": "sha512-jDqAkm/hI8Tl4HcsbhkBgB6HgpJR1e+ML1SbfxaegXYiuMxEVQm0FOwEH5WxUoo6fmIG4N+H0rSm59POuZOCaA==", - "requires": { - "lodash": "4.17.4" - } - }, - "react-dom": { - "version": "15.6.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-15.6.2.tgz", - "integrity": "sha1-Qc+t9pO3V/rycIRDodH9WgK+9zA=", - "requires": { - "fbjs": "0.8.16", - "loose-envify": "1.3.1", - "object-assign": "4.1.1", - "prop-types": "15.6.0" - } - }, - "react-gemini-scrollbar": { - "version": "github:matrix-org/react-gemini-scrollbar#5e97aef7e034efc8db1431f4b0efe3b26e249ae9", - "requires": { - "gemini-scrollbar": "github:matrix-org/gemini-scrollbar#b302279810d05319ac5ff1bd34910bff32325c7b" - } - }, - "read-all-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", - "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=", - "dev": true, - "requires": { - "pinkie-promise": "2.0.1", - "readable-stream": "2.3.3" - } - }, - "read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", - "dev": true, - "requires": { - "pify": "2.3.0" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" - } - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "readdirp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", - "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "readable-stream": "2.3.3", - "set-immediate-shim": "1.0.1" - } - }, - "readline2": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", - "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "mute-stream": "0.0.5" - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "1.4.0" - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "requires": { - "indent-string": "2.1.0", - "strip-indent": "1.0.1" - } - }, - "redux": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz", - "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==", - "requires": { - "lodash": "4.17.4", - "lodash-es": "4.17.4", - "loose-envify": "1.3.1", - "symbol-observable": "1.0.4" - } - }, - "regenerate": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", - "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==", - "dev": true - }, - "regenerator-runtime": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", - "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=" - }, - "regenerator-transform": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", - "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "private": "0.1.8" - } - }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true, - "requires": { - "is-equal-shallow": "0.1.3" - } - }, - "regexp-quote": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/regexp-quote/-/regexp-quote-0.0.0.tgz", - "integrity": "sha1-Hg9GUMhi3L/tVP1CsUjpuxch/PI=" - }, - "regexpu-core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", - "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", - "dev": true, - "requires": { - "regenerate": "1.3.3", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" - } - }, - "registry-auth-token": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.1.tgz", - "integrity": "sha1-+w0yie4Nmtosu1KvXf5mywcNMAY=", - "dev": true, - "requires": { - "rc": "1.2.2", - "safe-buffer": "5.1.1" - } - }, - "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "dev": true, - "requires": { - "rc": "1.2.2" - } - }, - "regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", - "dev": true - }, - "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "dev": true, - "requires": { - "jsesc": "0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", - "dev": true - }, - "remarkable": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/remarkable/-/remarkable-1.7.1.tgz", - "integrity": "sha1-qspJchALZqZCpjoQIcpLrBvjv/Y=", - "requires": { - "argparse": "0.1.16", - "autolinker": "0.15.3" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "renderkid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.1.tgz", - "integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=", - "dev": true, - "requires": { - "css-select": "1.2.0", - "dom-converter": "0.1.4", - "htmlparser2": "3.3.0", - "strip-ansi": "3.0.1", - "utila": "0.3.3" - }, - "dependencies": { - "domhandler": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz", - "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", - "dev": true, - "requires": { - "domelementtype": "1.3.0" - } - }, - "domutils": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz", - "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", - "dev": true, - "requires": { - "domelementtype": "1.3.0" - } - }, - "htmlparser2": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", - "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", - "dev": true, - "requires": { - "domelementtype": "1.3.0", - "domhandler": "2.1.0", - "domutils": "1.1.6", - "readable-stream": "1.0.34" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "utila": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", - "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", - "dev": true - } - } - }, - "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "1.0.2" - } - }, - "request": { - "version": "2.83.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", - "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", - "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.3.1", - "har-validator": "5.0.3", - "hawk": "6.0.2", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "oauth-sign": "0.8.2", - "performance-now": "2.1.0", - "qs": "6.5.1", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.6.0", - "uuid": "3.1.0" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" - }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "requires": { - "caller-path": "0.1.0", - "resolve-from": "1.0.1" - } - }, - "requirejs": { - "version": "2.1.22", - "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.1.22.tgz", - "integrity": "sha1-3Xj9LTQYDA1ixyS1uK68BmTgNm8=" - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "resolve": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.4.0.tgz", - "integrity": "sha512-aW7sVKPufyHqOmyyLzg/J+8606v5nevBgaliIlV7nUpVMsDnoBGV/cbSLNjZAg9q0Cfd/+easKVKQ8vOu8fn1Q==", - "dev": true, - "requires": { - "path-parse": "1.0.5" - } - }, - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "dev": true, - "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" - } - }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true, - "requires": { - "align-text": "0.1.4" - } - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "7.1.2" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } - } - }, - "ripemd160": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-0.2.0.tgz", - "integrity": "sha1-K/GYveFnys+lHAqSjoS2i74XH84=", - "dev": true - }, - "run-async": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", - "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", - "dev": true, - "requires": { - "once": "1.4.0" - } - }, - "rx-lite": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", - "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", - "dev": true - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" - }, - "sanitize-filename": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.1.tgz", - "integrity": "sha1-YS2hyWRz+gLczaktzVtKsWSmdyo=", - "dev": true, - "requires": { - "truncate-utf8-bytes": "1.0.2" - } - }, - "sanitize-html": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-1.14.1.tgz", - "integrity": "sha1-cw/6Ikm98YMz7/5FsoYXPJxa0Lg=", - "requires": { - "htmlparser2": "3.9.2", - "regexp-quote": "0.0.0", - "xtend": "4.0.1" - } - }, - "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" - }, - "semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "dev": true, - "requires": { - "semver": "5.4.1" - } - }, - "send": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", - "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "1.1.1", - "destroy": "1.0.4", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "etag": "1.8.1", - "fresh": "0.5.2", - "http-errors": "1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.3.1" - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "dev": true, - "requires": { - "accepts": "1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "1.0.3", - "http-errors": "1.6.2", - "mime-types": "2.1.17", - "parseurl": "1.3.2" - }, - "dependencies": { - "accepts": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", - "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", - "dev": true, - "requires": { - "mime-types": "2.1.17", - "negotiator": "0.6.1" - } - } - } - }, - "serve-static": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", - "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", - "dev": true, - "requires": { - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "parseurl": "1.3.2", - "send": "0.16.1" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", - "dev": true - }, - "sha.js": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.2.6.tgz", - "integrity": "sha1-F93t3F9yL7ZlAWWIlUYZd4ZzFbo=", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "dev": true, - "requires": { - "array-filter": "0.0.1", - "array-map": "0.0.0", - "array-reduce": "0.0.0", - "jsonify": "0.0.0" - } - }, - "shelljs": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", - "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", - "dev": true, - "requires": { - "glob": "7.1.2", - "interpret": "1.0.4", - "rechoir": "0.6.2" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } - } - }, - "sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "single-line-log": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-1.1.2.tgz", - "integrity": "sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q=", - "dev": true, - "requires": { - "string-width": "1.0.2" - } - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - }, - "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", - "dev": true - }, - "slide": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", - "dev": true - }, - "sntp": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.0.2.tgz", - "integrity": "sha1-UGQRDwr4X3z9t9a2ekACjOUrSys=", - "requires": { - "hoek": "4.2.0" - } - }, - "socket.io": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.3.tgz", - "integrity": "sha1-uK+cq6AJSeVo42nxMn6pvp6iRhs=", - "dev": true, - "requires": { - "debug": "2.3.3", - "engine.io": "1.8.3", - "has-binary": "0.1.7", - "object-assign": "4.1.0", - "socket.io-adapter": "0.5.0", - "socket.io-client": "1.7.3", - "socket.io-parser": "2.3.1" - }, - "dependencies": { - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - }, - "object-assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", - "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", - "dev": true - } - } - }, - "socket.io-adapter": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", - "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", - "dev": true, - "requires": { - "debug": "2.3.3", - "socket.io-parser": "2.3.1" - }, - "dependencies": { - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - } - } - }, - "socket.io-client": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.3.tgz", - "integrity": "sha1-sw6GqhDV7zVGYBwJzeR2Xjgdo3c=", - "dev": true, - "requires": { - "backo2": "1.0.2", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "2.3.3", - "engine.io-client": "1.8.3", - "has-binary": "0.1.7", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseuri": "0.0.5", - "socket.io-parser": "2.3.1", - "to-array": "0.1.4" - }, - "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - } - } - }, - "socket.io-parser": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", - "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", - "dev": true, - "requires": { - "component-emitter": "1.1.2", - "debug": "2.2.0", - "isarray": "0.0.1", - "json3": "3.3.2" - }, - "dependencies": { - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true, - "requires": { - "ms": "0.7.1" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", - "dev": true - } - } - }, - "sockjs": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", - "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", - "dev": true, - "requires": { - "faye-websocket": "0.10.0", - "uuid": "3.1.0" - } - }, - "sockjs-client": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz", - "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=", - "dev": true, - "requires": { - "debug": "2.6.9", - "eventsource": "0.1.6", - "faye-websocket": "0.11.1", - "inherits": "2.0.3", - "json3": "3.3.2", - "url-parse": "1.1.9" - }, - "dependencies": { - "faye-websocket": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", - "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", - "dev": true, - "requires": { - "websocket-driver": "0.7.0" - } - } - } - }, - "source-list-map": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-0.1.8.tgz", - "integrity": "sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY=", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-loader": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-0.1.6.tgz", - "integrity": "sha1-wJkD2m1zueU7ftjuUkVZcFHpjpE=", - "dev": true, - "requires": { - "async": "0.9.2", - "loader-utils": "0.2.17", - "source-map": "0.1.43" - }, - "dependencies": { - "async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", - "dev": true - }, - "source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, - "requires": { - "source-map": "0.5.7" - } - }, - "spdx-correct": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", - "requires": { - "spdx-license-ids": "1.2.2" - } - }, - "spdx-expression-parse": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", - "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=" - }, - "spdx-license-ids": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", - "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=" - }, - "speedometer": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz", - "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=", - "dev": true - }, - "sprintf-js": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.1.tgz", - "integrity": "sha1-Nr54Mgr+WAH2zqPueLblqrlA6gw=" - }, - "sshpk": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - } - }, - "stat-mode": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.2.2.tgz", - "integrity": "sha1-5sgLYjEj19gM8TLOU480YokHJQI=", - "dev": true - }, - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", - "dev": true - }, - "stream-browserify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", - "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3" - } - }, - "stream-cache": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/stream-cache/-/stream-cache-0.0.2.tgz", - "integrity": "sha1-GsWtaDJCjKVWZ9ve45Xa1ObbEY8=", - "dev": true - }, - "stream-http": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", - "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", - "dev": true, - "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string.prototype.repeat": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-0.2.0.tgz", - "integrity": "sha1-q6Nt4I3O5qWjN9SbLqHaGyj8Ds8=" - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "requires": { - "safe-buffer": "5.1.1" - } - }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "requires": { - "is-utf8": "0.2.1" - } - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "requires": { - "get-stdin": "4.0.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "subarg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", - "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", - "dev": true, - "requires": { - "minimist": "1.2.0" - } - }, - "sugarss": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-0.2.0.tgz", - "integrity": "sha1-rDQjdWMyfG/4l7ZHQr9q7BkK054=", - "dev": true, - "requires": { - "postcss": "5.2.18" - } - }, - "sumchecker": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-1.3.1.tgz", - "integrity": "sha1-ebs7RFbdBPGOvbwNcDodHa7FEF0=", - "dev": true, - "requires": { - "debug": "2.6.9", - "es6-promise": "4.1.1" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - }, - "symbol-observable": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.4.tgz", - "integrity": "sha1-Kb9hXUqnEhvdiYsi1LP5vE4qoD0=" - }, - "table": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", - "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", - "dev": true, - "requires": { - "ajv": "4.11.8", - "ajv-keywords": "1.5.1", - "chalk": "1.1.3", - "lodash": "4.17.4", - "slice-ansi": "0.0.4", - "string-width": "2.1.1" - }, - "dependencies": { - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - } - } - }, - "tapable": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.1.10.tgz", - "integrity": "sha1-KcNXB8K3DlDQdIK10gLo7URtr9Q=", - "dev": true - }, - "tar-stream": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.4.tgz", - "integrity": "sha1-NlSc8E7RrumyowwBQyUiONr5QBY=", - "dev": true, - "requires": { - "bl": "1.2.1", - "end-of-stream": "1.4.0", - "readable-stream": "2.3.3", - "xtend": "4.0.1" - } - }, - "text-encoding-utf-8": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.1.tgz", - "integrity": "sha1-Uepsen6y+09nRnt2NzVmH1YDSS0=" - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "throttleit": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", - "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz", - "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=", - "dev": true, - "requires": { - "readable-stream": "1.1.14", - "xtend": "2.1.2" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "xtend": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", - "dev": true, - "requires": { - "object-keys": "0.4.0" - } - } - } - }, - "time-stamp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz", - "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=", - "dev": true - }, - "timed-out": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz", - "integrity": "sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc=", - "dev": true - }, - "timers-browserify": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.4.tgz", - "integrity": "sha512-uZYhyU3EX8O7HQP+J9fTVYwsq90Vr68xPEFo7yrVImIxYvHgukBEgOB/SgGoorWVTzGM/3Z+wUNnboA4M8jWrg==", - "dev": true, - "requires": { - "setimmediate": "1.0.5" - } - }, - "tmatch": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/tmatch/-/tmatch-2.0.1.tgz", - "integrity": "sha1-DFYkbzPzDaG409colauvFmYPOM8=", - "dev": true - }, - "tmp": { - "version": "0.0.31", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", - "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2" - } - }, - "to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", - "dev": true - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true - }, - "to-iso-string": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/to-iso-string/-/to-iso-string-0.0.2.tgz", - "integrity": "sha1-TcGeZk38y+Jb2NtQiwDG2hWCVdE=", - "dev": true - }, - "toposort": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.6.tgz", - "integrity": "sha1-wxdI5V0hDv/AD9zcfW5o19e7nOw=", - "dev": true - }, - "tough-cookie": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", - "requires": { - "punycode": "1.4.1" - } - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "truncate-utf8-bytes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=", - "dev": true, - "requires": { - "utf8-byte-length": "1.0.4" - } - }, - "tryit": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz", - "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=", - "dev": true - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "5.1.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "optional": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "1.1.2" - } - }, - "type-is": { - "version": "1.6.15", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", - "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "2.1.17" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "ua-parser-js": { - "version": "0.7.17", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz", - "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==" - }, - "uglify-js": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.1.4.tgz", - "integrity": "sha512-DcbkPg11Lw2lAWpwCmQDX+qoR4JiII6ypsQmF6tscZtlxGPFAmSRUGuMoVT3/0EHqypVik/TpkH4ITiMJeQqQA==", - "dev": true, - "requires": { - "commander": "2.11.0", - "source-map": "0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "dev": true - }, - "ultron": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", - "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", - "dev": true - }, - "underscore": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", - "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=" - }, - "underscore.string": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz", - "integrity": "sha1-jN2PusTi0uoefi6Al8QvRCKA+Fs=" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "unzip-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", - "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=", - "dev": true - }, - "update-notifier": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-1.0.3.tgz", - "integrity": "sha1-j5LFFUgr1oMbfJMBPnD4dVLHz1o=", - "dev": true, - "requires": { - "boxen": "0.6.0", - "chalk": "1.1.3", - "configstore": "2.1.0", - "is-npm": "1.0.0", - "latest-version": "2.0.0", - "lazy-req": "1.1.0", - "semver-diff": "2.1.0", - "xdg-basedir": "2.0.0" - } - }, - "upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - } - } - }, - "url-parse": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.1.9.tgz", - "integrity": "sha1-xn8dd11R8KGJEd17P/rSe7nlvRk=", - "dev": true, - "requires": { - "querystringify": "1.0.0", - "requires-port": "1.0.0" - }, - "dependencies": { - "querystringify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-1.0.0.tgz", - "integrity": "sha1-YoYkIRLFtxL6ZU5SZlK/ahP/Bcs=", - "dev": true - } - } - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "dev": true, - "requires": { - "prepend-http": "1.0.4" - } - }, - "user-home": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", - "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", - "dev": true - }, - "useragent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz", - "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=", - "dev": true, - "requires": { - "lru-cache": "2.2.4", - "tmp": "0.0.31" - }, - "dependencies": { - "lru-cache": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz", - "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=", - "dev": true - } - } - }, - "utf8-byte-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" - }, - "uuid-1345": { - "version": "0.99.6", - "resolved": "https://registry.npmjs.org/uuid-1345/-/uuid-1345-0.99.6.tgz", - "integrity": "sha1-sScK4BWnchx63sbEbsFpxgmK7UA=", - "dev": true, - "requires": { - "macaddress": "0.2.8" - } - }, - "v8flags": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", - "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", - "dev": true, - "requires": { - "user-home": "1.1.1" - } - }, - "validate-npm-package-license": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", - "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", - "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true - }, - "velocity-vector": { - "version": "github:vector-im/velocity#059e3b2348f1110888d033974d3109fd5a3af00f", - "requires": { - "jquery": "3.2.1" - } - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "1.3.0" - } - }, - "vm-browserify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "dev": true, - "requires": { - "indexof": "0.0.1" - } - }, - "void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", - "dev": true - }, - "walkdir": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.0.11.tgz", - "integrity": "sha1-oW0CXrkxvQO1LzCMrtD0D86+lTI=", - "dev": true - }, - "watchpack": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-0.2.9.tgz", - "integrity": "sha1-Yuqkq15bo1/fwBgnVibjwPXj+ws=", - "dev": true, - "requires": { - "async": "0.9.2", - "chokidar": "1.7.0", - "graceful-fs": "4.1.11" - }, - "dependencies": { - "async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", - "dev": true - } - } - }, - "webpack": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-1.15.0.tgz", - "integrity": "sha1-T/MfU9sDM55VFkqdRo7gMklo/pg=", - "dev": true, - "requires": { - "acorn": "3.3.0", - "async": "1.5.2", - "clone": "1.0.2", - "enhanced-resolve": "0.9.1", - "interpret": "0.6.6", - "loader-utils": "0.2.17", - "memory-fs": "0.3.0", - "mkdirp": "0.5.1", - "node-libs-browser": "0.7.0", - "optimist": "0.6.1", - "supports-color": "3.2.3", - "tapable": "0.1.10", - "uglify-js": "2.7.5", - "watchpack": "0.2.9", - "webpack-core": "0.6.9" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true - }, - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true - }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", - "wordwrap": "0.0.2" - } - }, - "interpret": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-0.6.6.tgz", - "integrity": "sha1-/s16GOfOXKar+5U+H4YhOknxYls=", - "dev": true - }, - "memory-fs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.3.0.tgz", - "integrity": "sha1-e8xrYp46Q+hx1+Kaymrop/FcuyA=", - "dev": true, - "requires": { - "errno": "0.1.4", - "readable-stream": "2.3.3" - } - }, - "uglify-js": { - "version": "2.7.5", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.7.5.tgz", - "integrity": "sha1-RhLAx7qu4rp8SH3kkErhIgefLKg=", - "dev": true, - "requires": { - "async": "0.2.10", - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" - }, - "dependencies": { - "async": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", - "dev": true - } - } - }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true - }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "window-size": "0.1.0" - } - } - } - }, - "webpack-core": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/webpack-core/-/webpack-core-0.6.9.tgz", - "integrity": "sha1-/FcViMhVjad76e+23r3Fo7FyvcI=", - "dev": true, - "requires": { - "source-list-map": "0.1.8", - "source-map": "0.4.4" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "webpack-dev-middleware": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.0.tgz", - "integrity": "sha1-007++y7dp+HTtdvgcolRMhllFwk=", - "dev": true, - "requires": { - "memory-fs": "0.4.1", - "mime": "1.4.1", - "path-is-absolute": "1.0.1", - "range-parser": "1.2.0", - "time-stamp": "2.0.0" - } - }, - "webpack-dev-server": { - "version": "1.16.5", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-1.16.5.tgz", - "integrity": "sha1-DL1fLSrI1OWTqs1clwLnu9XlmJI=", - "dev": true, - "requires": { - "compression": "1.7.1", - "connect-history-api-fallback": "1.4.0", - "express": "4.16.2", - "http-proxy-middleware": "0.17.4", - "open": "0.0.5", - "optimist": "0.6.1", - "serve-index": "1.9.1", - "sockjs": "0.3.19", - "sockjs-client": "1.1.4", - "stream-cache": "0.0.2", - "strip-ansi": "3.0.1", - "supports-color": "3.2.3", - "webpack-dev-middleware": "1.12.0" - } - }, - "websocket-driver": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", - "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", - "dev": true, - "requires": { - "http-parser-js": "0.4.9", - "websocket-extensions": "0.1.2" - } - }, - "websocket-extensions": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.2.tgz", - "integrity": "sha1-Dhh4HeYpoYMIzhSBZQ9n/6JpOl0=", - "dev": true - }, - "whatwg-fetch": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz", - "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ=" - }, - "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", - "dev": true, - "requires": { - "isexe": "2.0.0" - } - }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" - }, - "widest-line": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-1.0.0.tgz", - "integrity": "sha1-DAnIXCqUaD0Nfq+O4JfVZL8OEFw=", - "dev": true, - "requires": { - "string-width": "1.0.2" - } - }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "dev": true - }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true, - "requires": { - "mkdirp": "0.5.1" - } - }, - "write-file-atomic": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", - "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "imurmurhash": "0.1.4", - "slide": "1.1.6" - } - }, - "ws": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz", - "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=", - "dev": true, - "requires": { - "options": "0.0.6", - "ultron": "1.0.2" - } - }, - "wtf-8": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", - "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=", - "dev": true - }, - "xdg-basedir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz", - "integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=", - "dev": true, - "requires": { - "os-homedir": "1.0.2" - } - }, - "xml-char-classes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz", - "integrity": "sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0=", - "dev": true - }, - "xmlbuilder": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz", - "integrity": "sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M=", - "dev": true - }, - "xmldom": { - "version": "0.1.27", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", - "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=", - "dev": true - }, - "xmlhttprequest-ssl": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", - "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=", - "dev": true - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "yargs": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.0.2.tgz", - "integrity": "sha1-EVuX3xMhgj6Lhkjolox4JSEiH2c=", - "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "y18n": "3.2.1", - "yargs-parser": "5.0.0" - } - }, - "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "requires": { - "camelcase": "3.0.0" - } - }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", - "dev": true - }, - "zip-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz", - "integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=", - "dev": true, - "requires": { - "archiver-utils": "1.3.0", - "compress-commons": "1.2.2", - "lodash": "4.17.4", - "readable-stream": "2.3.3" - } - } - } -} diff --git a/package.json b/package.json index 80d8d93c26..05c4d9b3dc 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "riot-web", "productName": "Riot", "main": "electron_app/src/electron-main.js", - "version": "0.13.5", + "version": "1.5.0", "description": "A feature-rich client for Matrix.org", "author": "New Vector Ltd.", "repository": { @@ -30,141 +30,142 @@ "reskindex:watch": "reskindex -h src/header -w", "i18n": "matrix-gen-i18n", "prunei18n": "matrix-prune-i18n", + "diff-i18n": "cp src/i18n/strings/en_EN.json src/i18n/strings/en_EN_orig.json && yarn i18n && node scripts/compare-file.js src/i18n/strings/en_EN_orig.json src/i18n/strings/en_EN.json", "build:res": "node scripts/copy-res.js", "build:modernizr": "modernizr -c .modernizr.json -d src/vector/modernizr.js", - "build:compile": "npm run reskindex && babel --source-maps -d lib src", - "build:bundle": "cross-env NODE_ENV=production webpack -p --progress --bail", - "build:bundle:dev": "webpack --optimize-occurence-order --progress --bail", - "build:electron": "npm run clean && npm run build && npm run install:electron && build -wml --ia32 --x64", - "build": "npm run reskindex && npm run build:res && npm run build:bundle", - "build:dev": "npm run reskindex && npm run build:res && npm run build:bundle:dev", + "build:compile": "yarn reskindex && babel --source-maps -d lib src", + "build:bundle": "cross-env NODE_ENV=production webpack -p --progress --bail --mode production", + "build:bundle:dev": "webpack --progress --bail --mode development", + "build:electron": "yarn clean && yarn build && yarn install:electron && electron-builder -wml --ia32 --x64", + "build:electron:linux": "yarn build && electron-builder -l --x64", + "build:electron:macos": "yarn build && electron-builder -m --x64", + "build:electron:windows": "yarn build && electron-builder -w --ia32 --x64", + "build:react-sdk": "node scripts/yarn-sub.js matrix-react-sdk build", + "build:js-sdk": "node scripts/yarn-sub.js matrix-js-sdk start:init", + "build": "yarn build:js-sdk && yarn build:react-sdk && yarn reskindex && yarn build:res && yarn build:bundle", + "build:dev": "yarn build:js-sdk && yarn build:react-sdk && yarn reskindex && yarn build:res && yarn build:bundle:dev", "dist": "scripts/package.sh", - "install:electron": "install-app-deps", - "electron": "npm run install:electron && electron .", + "install:electron": "electron-builder install-app-deps", + "electron": "yarn install:electron && electron .", "start:res": "node scripts/copy-res.js -w", - "start:js": "webpack-dev-server --output-filename=bundles/_dev_/[name].js --output-chunk-file=bundles/_dev_/[name].js -w --progress", - "start:js:prod": "cross-env NODE_ENV=production webpack-dev-server -w --progress", - "start": "parallelshell \"npm run reskindex:watch\" \"npm run start:res\" \"npm run start:js\"", - "start:prod": "parallelshell \"npm run reskindex:watch\" \"npm run start:res\" \"npm run start:js:prod\"", + "start:js": "webpack-dev-server --host=0.0.0.0 --output-filename=bundles/_dev_/[name].js --output-chunk-filename=bundles/_dev_/[name].js -w --progress --mode development", + "start:js:prod": "cross-env NODE_ENV=production webpack-dev-server -w --progress --mode production", + "start:js-sdk": "node scripts/yarn-sub.js matrix-js-sdk start:watch", + "start:js-sdk:prod": "cross-env NODE_ENV=production node scripts/yarn-sub.js matrix-js-sdk start:watch", + "start:react-sdk": "node scripts/yarn-sub.js matrix-react-sdk start:all", + "start:react-sdk:prod": "cross-env NODE_ENV=production node scripts/yarn-sub.js matrix-react-sdk start:all", + "start": "yarn build:js-sdk && yarn build:react-sdk && concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n js-sdk,react-sdk,reskindex,res,riot-js \"yarn start:js-sdk\" \"yarn start:react-sdk\" \"yarn reskindex:watch\" \"yarn start:res\" \"yarn start:js\"", + "start:prod": "yarn build:js-sdk && yarn build:react-sdk && concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n js-sdk,react-sdk,reskindex,res,riot-js \"yarn start:js-sdk:prod\" \"yarn start:react-sdk:prod\" \"yarn reskindex:watch\" \"yarn start:res\" \"yarn start:js:prod\"", "lint": "eslint src/", "lintall": "eslint src/ test/", "clean": "rimraf lib webapp electron_app/dist", - "prepublish": "npm run clean && npm run build:compile", - "test": "karma start --single-run=true --autoWatch=false --browsers ChromeHeadless", + "prepare": "yarn clean && yarn build:compile", + "test": "karma start --single-run=true --autoWatch=false --browsers VectorChromeHeadless", "test-multi": "karma start" }, "dependencies": { - "babel-polyfill": "^6.5.0", - "babel-runtime": "^6.11.6", - "bluebird": "^3.5.0", + "babel-polyfill": "^6.26.0", + "babel-runtime": "^6.26.0", + "bluebird": "^3.5.2", "browser-request": "^0.3.3", - "classnames": "^2.1.2", "draft-js": "^0.11.0-alpha", - "extract-text-webpack-plugin": "^0.9.1", + "extract-text-webpack-plugin": "^4.0.0-beta.0", "favico.js": "^0.3.10", - "filesize": "3.5.6", - "flux": "2.1.1", - "gemini-scrollbar": "matrix-org/gemini-scrollbar#b302279", - "gfm.css": "^1.1.1", - "highlight.js": "^9.0.0", - "linkifyjs": "^2.1.3", - "matrix-js-sdk": "0.9.2", - "matrix-react-sdk": "0.11.4", - "modernizr": "^3.1.0", - "pako": "^1.0.5", - "prop-types": "^15.5.10", - "react": "^15.6.0", - "react-beautiful-dnd": "^4.0.1", - "react-dom": "^15.6.0", - "react-gemini-scrollbar": "matrix-org/react-gemini-scrollbar#5e97aef", - "sanitize-html": "^1.11.1", - "text-encoding-utf-8": "^1.0.1", - "ua-parser-js": "^0.7.10", - "url": "^0.11.0", - "velocity-vector": "vector-im/velocity#059e3b2" + "gemini-scrollbar": "github:matrix-org/gemini-scrollbar#91e1e566", + "gfm.css": "^1.1.2", + "highlight.js": "^9.13.1", + "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#develop", + "matrix-react-sdk": "github:matrix-org/matrix-react-sdk#develop", + "modernizr": "^3.6.0", + "olm": "https://packages.matrix.org/npm/olm/olm-3.1.4.tgz", + "prop-types": "^15.7.2", + "react": "^16.9.0", + "react-dom": "^16.9.0", + "sanitize-html": "^1.19.1", + "ua-parser-js": "^0.7.19", + "url": "^0.11.0" }, "devDependencies": { "autoprefixer": "^6.6.0", - "babel-cli": "^6.5.2", - "babel-core": "^6.14.0", - "babel-eslint": "^6.1.0", - "babel-loader": "^6.2.5", + "babel-cli": "^6.26.0", + "babel-core": "^6.26.3", + "babel-eslint": "^8.1.1", + "babel-loader": "^7.1.5", "babel-plugin-add-module-exports": "^0.2.1", + "babel-plugin-syntax-dynamic-import": "^6.18.0", "babel-plugin-transform-async-to-bluebird": "^1.1.1", - "babel-plugin-transform-class-properties": "^6.16.0", - "babel-plugin-transform-object-rest-spread": "^6.16.0", - "babel-plugin-transform-runtime": "^6.15.0", - "babel-preset-es2015": "^6.16.0", - "babel-preset-es2016": "^6.16.0", - "babel-preset-es2017": "^6.16.0", - "babel-preset-react": "^6.16.0", - "babel-preset-stage-2": "^6.17.0", - "chokidar": "^1.6.1", + "babel-plugin-transform-builtin-extend": "^1.1.2", + "babel-plugin-transform-class-properties": "^6.24.1", + "babel-plugin-transform-object-rest-spread": "^6.26.0", + "babel-plugin-transform-runtime": "^6.23.0", + "babel-preset-es2015": "^6.24.1", + "babel-preset-es2016": "^6.24.1", + "babel-preset-es2017": "^6.24.1", + "babel-preset-react": "^6.24.1", + "babel-preset-stage-2": "^6.24.1", + "chokidar": "^2.0.4", + "concurrently": "^4.0.1", "cpx": "^1.3.2", "cross-env": "^4.0.0", - "css-raw-loader": "^0.1.1", - "electron-builder": "^11.2.4", - "electron-builder-squirrel-windows": "^11.2.1", - "electron-devtools-installer": "^2.2.0", - "emojione": "^2.2.7", - "eslint": "^3.14.0", + "css-loader": "^2.1.0", + "electron-builder": "^21.2.0", + "electron-builder-squirrel-windows": "^21.2.0", + "electron-devtools-installer": "^2.2.4", + "electron-notarize": "^0.1.1", + "eslint": "^5.8.0", "eslint-config-google": "^0.7.1", - "eslint-plugin-babel": "^4.1.1", - "eslint-plugin-flowtype": "^2.30.0", - "eslint-plugin-react": "^7.4.0", + "eslint-plugin-babel": "^4.1.2", + "eslint-plugin-flowtype": "^2.50.3", + "eslint-plugin-react": "^7.11.1", "expect": "^1.16.0", + "file-loader": "^3.0.1", "fs-extra": "^0.30.0", - "html-webpack-plugin": "^2.24.0", + "html-webpack-plugin": "^3.2.0", "json-loader": "^0.5.3", - "karma": "^1.7.0", - "karma-chrome-launcher": "^0.2.3", - "karma-cli": "^0.1.2", - "karma-junit-reporter": "^0.4.1", + "karma": "^3.1.2", + "karma-chrome-launcher": "^2.2.0", + "karma-cli": "^1.0.1", "karma-logcapture-reporter": "0.0.1", - "karma-mocha": "^0.2.2", + "karma-mocha": "^1.3.0", "karma-sourcemap-loader": "^0.3.7", "karma-spec-reporter": "0.0.31", - "karma-summary-reporter": "^1.3.3", - "karma-webpack": "^1.7.0", - "matrix-mock-request": "^1.2.0", - "matrix-react-test-utils": "^0.2.0", + "karma-summary-reporter": "^1.5.1", + "karma-webpack": "4.0.0-beta.0", + "loader-utils": "^1.2.3", + "matrix-mock-request": "^1.2.3", + "matrix-react-test-utils": "^0.2.2", "minimist": "^1.2.0", "mkdirp": "^0.5.1", - "mocha": "^2.4.5", - "parallelshell": "^3.0.2", + "mocha": "^5.2.0", "postcss-extend": "^1.0.5", - "postcss-import": "^9.0.0", - "postcss-loader": "^1.2.2", - "postcss-mixins": "^5.4.1", - "postcss-nested": "^1.0.0", - "postcss-scss": "^0.4.0", - "postcss-simple-vars": "^3.0.0", + "postcss-import": "^11.1.0", + "postcss-loader": "^2.1.6", + "postcss-mixins": "^6.2.0", + "postcss-nested": "^3.0.0", + "postcss-scss": "^1.0.6", + "postcss-simple-vars": "^4.1.0", "postcss-strip-inline-comments": "^0.1.5", - "react-addons-perf": "^15.4.0", - "react-addons-test-utils": "^15.6.0", "rimraf": "^2.4.3", - "source-map-loader": "^0.1.5", - "webpack": "^1.12.14", - "webpack-dev-server": "^1.16.2" - }, - "optionalDependencies": { - "olm": "https://matrix.org/packages/npm/olm/olm-2.2.1.tgz" + "shell-escape": "^0.2.0", + "source-map-loader": "^0.2.4", + "webpack": "^4.23.1", + "webpack-cli": "^3.1.2", + "webpack-dev-server": "^3.1.11" }, "build": { "appId": "im.riot.app", - "category": "Network", - "electronVersion": "1.7.9", - "//asar=false": "https://github.com/electron-userland/electron-builder/issues/675", - "asar": false, - "dereference": true, - "//files": "We bundle everything, so we only need to include webapp/", + "electronVersion": "6.0.11", "files": [ "node_modules/**", - "src/**", - "img/**" + "src/**" ], "extraResources": [ - "webapp/**/*" + { + "from": "electron_app/img", + "to": "img" + }, + "webapp/**/*", + "origin_migrator/**/*" ], "linux": { "target": "deb", @@ -174,13 +175,23 @@ "StartupWMClass": "riot" } }, + "deb": { + "afterInstall": "electron_app/build/linux/after-install.tpl" + }, + "mac": { + "category": "public.app-category.social-networking", + "darkModeSupport": true + }, "win": { - "target": "squirrel" + "target": { + "target": "squirrel" + } }, "directories": { "buildResources": "electron_app/build", "output": "electron_app/dist", "app": "electron_app" - } + }, + "afterSign": "scripts/electron_afterSign.js" } } diff --git a/release.sh b/release.sh index 136750181e..33b3676f1b 100755 --- a/release.sh +++ b/release.sh @@ -1,18 +1,27 @@ #!/bin/bash # -# Script to perform a release of vector-web. +# Script to perform a release of riot-web. # # Requires github-changelog-generator; to install, do # pip install git+https://github.com/matrix-org/github-changelog-generator.git set -e +orig_args=$@ + +# chomp any args starting with '-' as these need to go +# through to the release script and otherwise we'll get +# confused about what the version arg is. +while [[ "$1" == -* ]]; do + shift +done + cd `dirname $0` for i in matrix-js-sdk matrix-react-sdk do depver=`cat package.json | jq -r .dependencies[\"$i\"]` - latestver=`npm show $i version` + latestver=`yarn info -s $i version` if [ "$depver" != "$latestver" ] then echo "The latest version of $i is $latestver but package.json depends on $depver" @@ -29,13 +38,12 @@ done # bump Electron's package.json first release="${1#v}" tag="v${release}" -echo "electron npm version" +echo "electron yarn version" cd electron_app -npm version --no-git-tag-version "$release" +yarn version --no-git-tag-version --new-version "$release" git commit package.json -m "$tag" - cd .. -exec ./node_modules/matrix-js-sdk/release.sh -z "$@" +exec ./node_modules/matrix-js-sdk/release.sh -u vector-im -z "$orig_args" diff --git a/release_config.yaml b/release_config.yaml index 2be2a0def5..49d7ccd519 100644 --- a/release_config.yaml +++ b/release_config.yaml @@ -1 +1 @@ -signing_id: packages@riot.im +signing_id: releases@riot.im diff --git a/res/flags/AD.png b/res/flags/AD.png deleted file mode 100644 index d5d59645fe..0000000000 Binary files a/res/flags/AD.png and /dev/null differ diff --git a/res/flags/AE.png b/res/flags/AE.png deleted file mode 100644 index 05c7418aa4..0000000000 Binary files a/res/flags/AE.png and /dev/null differ diff --git a/res/flags/AF.png b/res/flags/AF.png deleted file mode 100644 index bc7cef0916..0000000000 Binary files a/res/flags/AF.png and /dev/null differ diff --git a/res/flags/AG.png b/res/flags/AG.png deleted file mode 100644 index d48facad47..0000000000 Binary files a/res/flags/AG.png and /dev/null differ diff --git a/res/flags/AI.png b/res/flags/AI.png deleted file mode 100644 index 8fd27cd39e..0000000000 Binary files a/res/flags/AI.png and /dev/null differ diff --git a/res/flags/AL.png b/res/flags/AL.png deleted file mode 100644 index 883835ffb3..0000000000 Binary files a/res/flags/AL.png and /dev/null differ diff --git a/res/flags/AM.png b/res/flags/AM.png deleted file mode 100644 index b1bb36b987..0000000000 Binary files a/res/flags/AM.png and /dev/null differ diff --git a/res/flags/AO.png b/res/flags/AO.png deleted file mode 100644 index ae68b12c44..0000000000 Binary files a/res/flags/AO.png and /dev/null differ diff --git a/res/flags/AQ.png b/res/flags/AQ.png deleted file mode 100644 index 146e9c0a04..0000000000 Binary files a/res/flags/AQ.png and /dev/null differ diff --git a/res/flags/AR.png b/res/flags/AR.png deleted file mode 100644 index 8142adfc83..0000000000 Binary files a/res/flags/AR.png and /dev/null differ diff --git a/res/flags/AS.png b/res/flags/AS.png deleted file mode 100644 index cc5bf30daf..0000000000 Binary files a/res/flags/AS.png and /dev/null differ diff --git a/res/flags/AT.png b/res/flags/AT.png deleted file mode 100644 index e32414bd6a..0000000000 Binary files a/res/flags/AT.png and /dev/null differ diff --git a/res/flags/AU.png b/res/flags/AU.png deleted file mode 100644 index 8d1e143791..0000000000 Binary files a/res/flags/AU.png and /dev/null differ diff --git a/res/flags/AW.png b/res/flags/AW.png deleted file mode 100644 index 6ec178847e..0000000000 Binary files a/res/flags/AW.png and /dev/null differ diff --git a/res/flags/AX.png b/res/flags/AX.png deleted file mode 100644 index ba269c0453..0000000000 Binary files a/res/flags/AX.png and /dev/null differ diff --git a/res/flags/AZ.png b/res/flags/AZ.png deleted file mode 100644 index 2bf3c746e7..0000000000 Binary files a/res/flags/AZ.png and /dev/null differ diff --git a/res/flags/BA.png b/res/flags/BA.png deleted file mode 100644 index 3e3ec3fc76..0000000000 Binary files a/res/flags/BA.png and /dev/null differ diff --git a/res/flags/BB.png b/res/flags/BB.png deleted file mode 100644 index 694050ca46..0000000000 Binary files a/res/flags/BB.png and /dev/null differ diff --git a/res/flags/BD.png b/res/flags/BD.png deleted file mode 100644 index 6de2cde85b..0000000000 Binary files a/res/flags/BD.png and /dev/null differ diff --git a/res/flags/BE.png b/res/flags/BE.png deleted file mode 100644 index 742ba9231f..0000000000 Binary files a/res/flags/BE.png and /dev/null differ diff --git a/res/flags/BF.png b/res/flags/BF.png deleted file mode 100644 index 17f9f67d26..0000000000 Binary files a/res/flags/BF.png and /dev/null differ diff --git a/res/flags/BG.png b/res/flags/BG.png deleted file mode 100644 index b01d3ff57b..0000000000 Binary files a/res/flags/BG.png and /dev/null differ diff --git a/res/flags/BH.png b/res/flags/BH.png deleted file mode 100644 index d0f82e8285..0000000000 Binary files a/res/flags/BH.png and /dev/null differ diff --git a/res/flags/BI.png b/res/flags/BI.png deleted file mode 100644 index 21865ac720..0000000000 Binary files a/res/flags/BI.png and /dev/null differ diff --git a/res/flags/BJ.png b/res/flags/BJ.png deleted file mode 100644 index a7c6091434..0000000000 Binary files a/res/flags/BJ.png and /dev/null differ diff --git a/res/flags/BL.png b/res/flags/BL.png deleted file mode 100644 index 6d50a0f544..0000000000 Binary files a/res/flags/BL.png and /dev/null differ diff --git a/res/flags/BM.png b/res/flags/BM.png deleted file mode 100644 index 310a25ea23..0000000000 Binary files a/res/flags/BM.png and /dev/null differ diff --git a/res/flags/BN.png b/res/flags/BN.png deleted file mode 100644 index bc4da8d9a6..0000000000 Binary files a/res/flags/BN.png and /dev/null differ diff --git a/res/flags/BO.png b/res/flags/BO.png deleted file mode 100644 index 144b8d32db..0000000000 Binary files a/res/flags/BO.png and /dev/null differ diff --git a/res/flags/BQ.png b/res/flags/BQ.png deleted file mode 100644 index 0897943760..0000000000 Binary files a/res/flags/BQ.png and /dev/null differ diff --git a/res/flags/BR.png b/res/flags/BR.png deleted file mode 100644 index 0278492592..0000000000 Binary files a/res/flags/BR.png and /dev/null differ diff --git a/res/flags/BS.png b/res/flags/BS.png deleted file mode 100644 index 2b05a8fc7c..0000000000 Binary files a/res/flags/BS.png and /dev/null differ diff --git a/res/flags/BT.png b/res/flags/BT.png deleted file mode 100644 index 1f031df071..0000000000 Binary files a/res/flags/BT.png and /dev/null differ diff --git a/res/flags/BV.png b/res/flags/BV.png deleted file mode 100644 index aafb0f1776..0000000000 Binary files a/res/flags/BV.png and /dev/null differ diff --git a/res/flags/BW.png b/res/flags/BW.png deleted file mode 100644 index 3084016718..0000000000 Binary files a/res/flags/BW.png and /dev/null differ diff --git a/res/flags/BY.png b/res/flags/BY.png deleted file mode 100644 index ce9de9c9c7..0000000000 Binary files a/res/flags/BY.png and /dev/null differ diff --git a/res/flags/BZ.png b/res/flags/BZ.png deleted file mode 100644 index 33620c3f31..0000000000 Binary files a/res/flags/BZ.png and /dev/null differ diff --git a/res/flags/CA.png b/res/flags/CA.png deleted file mode 100644 index 4bbf8b1169..0000000000 Binary files a/res/flags/CA.png and /dev/null differ diff --git a/res/flags/CC.png b/res/flags/CC.png deleted file mode 100644 index fd40fc8a78..0000000000 Binary files a/res/flags/CC.png and /dev/null differ diff --git a/res/flags/CD.png b/res/flags/CD.png deleted file mode 100644 index 230aacd454..0000000000 Binary files a/res/flags/CD.png and /dev/null differ diff --git a/res/flags/CF.png b/res/flags/CF.png deleted file mode 100644 index c58ed4f7b2..0000000000 Binary files a/res/flags/CF.png and /dev/null differ diff --git a/res/flags/CG.png b/res/flags/CG.png deleted file mode 100644 index 6c2441e3e0..0000000000 Binary files a/res/flags/CG.png and /dev/null differ diff --git a/res/flags/CH.png b/res/flags/CH.png deleted file mode 100644 index 9fd87167df..0000000000 Binary files a/res/flags/CH.png and /dev/null differ diff --git a/res/flags/CI.png b/res/flags/CI.png deleted file mode 100644 index 9741b9b11f..0000000000 Binary files a/res/flags/CI.png and /dev/null differ diff --git a/res/flags/CK.png b/res/flags/CK.png deleted file mode 100644 index 6cca35967c..0000000000 Binary files a/res/flags/CK.png and /dev/null differ diff --git a/res/flags/CL.png b/res/flags/CL.png deleted file mode 100644 index 13b993d15d..0000000000 Binary files a/res/flags/CL.png and /dev/null differ diff --git a/res/flags/CM.png b/res/flags/CM.png deleted file mode 100644 index bca5730fb5..0000000000 Binary files a/res/flags/CM.png and /dev/null differ diff --git a/res/flags/CN.png b/res/flags/CN.png deleted file mode 100644 index e086855c73..0000000000 Binary files a/res/flags/CN.png and /dev/null differ diff --git a/res/flags/CO.png b/res/flags/CO.png deleted file mode 100644 index 65c0aba447..0000000000 Binary files a/res/flags/CO.png and /dev/null differ diff --git a/res/flags/CR.png b/res/flags/CR.png deleted file mode 100644 index b351c67a53..0000000000 Binary files a/res/flags/CR.png and /dev/null differ diff --git a/res/flags/CU.png b/res/flags/CU.png deleted file mode 100644 index e7a25c60b3..0000000000 Binary files a/res/flags/CU.png and /dev/null differ diff --git a/res/flags/CV.png b/res/flags/CV.png deleted file mode 100644 index f249bbaa46..0000000000 Binary files a/res/flags/CV.png and /dev/null differ diff --git a/res/flags/CW.png b/res/flags/CW.png deleted file mode 100644 index e02cacd3dd..0000000000 Binary files a/res/flags/CW.png and /dev/null differ diff --git a/res/flags/CX.png b/res/flags/CX.png deleted file mode 100644 index 3ea21422f0..0000000000 Binary files a/res/flags/CX.png and /dev/null differ diff --git a/res/flags/CY.png b/res/flags/CY.png deleted file mode 100644 index 3182f48bd2..0000000000 Binary files a/res/flags/CY.png and /dev/null differ diff --git a/res/flags/CZ.png b/res/flags/CZ.png deleted file mode 100644 index 5462334638..0000000000 Binary files a/res/flags/CZ.png and /dev/null differ diff --git a/res/flags/DE.png b/res/flags/DE.png deleted file mode 100644 index 93e269166b..0000000000 Binary files a/res/flags/DE.png and /dev/null differ diff --git a/res/flags/DJ.png b/res/flags/DJ.png deleted file mode 100644 index 243bb7390d..0000000000 Binary files a/res/flags/DJ.png and /dev/null differ diff --git a/res/flags/DK.png b/res/flags/DK.png deleted file mode 100644 index fc74cc396c..0000000000 Binary files a/res/flags/DK.png and /dev/null differ diff --git a/res/flags/DM.png b/res/flags/DM.png deleted file mode 100644 index c3a0e9d102..0000000000 Binary files a/res/flags/DM.png and /dev/null differ diff --git a/res/flags/DO.png b/res/flags/DO.png deleted file mode 100644 index 5c4a004fef..0000000000 Binary files a/res/flags/DO.png and /dev/null differ diff --git a/res/flags/DZ.png b/res/flags/DZ.png deleted file mode 100644 index 1589d0cc40..0000000000 Binary files a/res/flags/DZ.png and /dev/null differ diff --git a/res/flags/EC.png b/res/flags/EC.png deleted file mode 100644 index 4c53dead1c..0000000000 Binary files a/res/flags/EC.png and /dev/null differ diff --git a/res/flags/EE.png b/res/flags/EE.png deleted file mode 100644 index 3668de7919..0000000000 Binary files a/res/flags/EE.png and /dev/null differ diff --git a/res/flags/EG.png b/res/flags/EG.png deleted file mode 100644 index 66ec709df7..0000000000 Binary files a/res/flags/EG.png and /dev/null differ diff --git a/res/flags/EH.png b/res/flags/EH.png deleted file mode 100644 index 148be93c08..0000000000 Binary files a/res/flags/EH.png and /dev/null differ diff --git a/res/flags/ER.png b/res/flags/ER.png deleted file mode 100644 index 7cb8441514..0000000000 Binary files a/res/flags/ER.png and /dev/null differ diff --git a/res/flags/ES.png b/res/flags/ES.png deleted file mode 100644 index aae73b6fcb..0000000000 Binary files a/res/flags/ES.png and /dev/null differ diff --git a/res/flags/ET.png b/res/flags/ET.png deleted file mode 100644 index 7b420f02f4..0000000000 Binary files a/res/flags/ET.png and /dev/null differ diff --git a/res/flags/FI.png b/res/flags/FI.png deleted file mode 100644 index 42f64bf360..0000000000 Binary files a/res/flags/FI.png and /dev/null differ diff --git a/res/flags/FJ.png b/res/flags/FJ.png deleted file mode 100644 index cecc683c9c..0000000000 Binary files a/res/flags/FJ.png and /dev/null differ diff --git a/res/flags/FK.png b/res/flags/FK.png deleted file mode 100644 index 6074fea09c..0000000000 Binary files a/res/flags/FK.png and /dev/null differ diff --git a/res/flags/FM.png b/res/flags/FM.png deleted file mode 100644 index 45fdb66426..0000000000 Binary files a/res/flags/FM.png and /dev/null differ diff --git a/res/flags/FO.png b/res/flags/FO.png deleted file mode 100644 index d8fd75c638..0000000000 Binary files a/res/flags/FO.png and /dev/null differ diff --git a/res/flags/FR.png b/res/flags/FR.png deleted file mode 100644 index 6d50a0f544..0000000000 Binary files a/res/flags/FR.png and /dev/null differ diff --git a/res/flags/GA.png b/res/flags/GA.png deleted file mode 100644 index 3808a61f1d..0000000000 Binary files a/res/flags/GA.png and /dev/null differ diff --git a/res/flags/GB.png b/res/flags/GB.png deleted file mode 100644 index 589be70063..0000000000 Binary files a/res/flags/GB.png and /dev/null differ diff --git a/res/flags/GD.png b/res/flags/GD.png deleted file mode 100644 index babe1e4cc6..0000000000 Binary files a/res/flags/GD.png and /dev/null differ diff --git a/res/flags/GE.png b/res/flags/GE.png deleted file mode 100644 index d34cddeca9..0000000000 Binary files a/res/flags/GE.png and /dev/null differ diff --git a/res/flags/GF.png b/res/flags/GF.png deleted file mode 100644 index 98828a5906..0000000000 Binary files a/res/flags/GF.png and /dev/null differ diff --git a/res/flags/GG.png b/res/flags/GG.png deleted file mode 100644 index aec8969b28..0000000000 Binary files a/res/flags/GG.png and /dev/null differ diff --git a/res/flags/GH.png b/res/flags/GH.png deleted file mode 100644 index 70b1a623de..0000000000 Binary files a/res/flags/GH.png and /dev/null differ diff --git a/res/flags/GI.png b/res/flags/GI.png deleted file mode 100644 index 9aa58327e3..0000000000 Binary files a/res/flags/GI.png and /dev/null differ diff --git a/res/flags/GL.png b/res/flags/GL.png deleted file mode 100644 index cf1645c2b5..0000000000 Binary files a/res/flags/GL.png and /dev/null differ diff --git a/res/flags/GM.png b/res/flags/GM.png deleted file mode 100644 index ec374fb3c3..0000000000 Binary files a/res/flags/GM.png and /dev/null differ diff --git a/res/flags/GN.png b/res/flags/GN.png deleted file mode 100644 index 46874b4d98..0000000000 Binary files a/res/flags/GN.png and /dev/null differ diff --git a/res/flags/GP.png b/res/flags/GP.png deleted file mode 100644 index 81b7abdf0e..0000000000 Binary files a/res/flags/GP.png and /dev/null differ diff --git a/res/flags/GQ.png b/res/flags/GQ.png deleted file mode 100644 index 7fd1015e8b..0000000000 Binary files a/res/flags/GQ.png and /dev/null differ diff --git a/res/flags/GR.png b/res/flags/GR.png deleted file mode 100644 index 101de51eab..0000000000 Binary files a/res/flags/GR.png and /dev/null differ diff --git a/res/flags/GS.png b/res/flags/GS.png deleted file mode 100644 index 772c2cbe6d..0000000000 Binary files a/res/flags/GS.png and /dev/null differ diff --git a/res/flags/GT.png b/res/flags/GT.png deleted file mode 100644 index d5bd8c1e46..0000000000 Binary files a/res/flags/GT.png and /dev/null differ diff --git a/res/flags/GU.png b/res/flags/GU.png deleted file mode 100644 index 8923085d5a..0000000000 Binary files a/res/flags/GU.png and /dev/null differ diff --git a/res/flags/GW.png b/res/flags/GW.png deleted file mode 100644 index 20c268ce06..0000000000 Binary files a/res/flags/GW.png and /dev/null differ diff --git a/res/flags/GY.png b/res/flags/GY.png deleted file mode 100644 index 86f56635ef..0000000000 Binary files a/res/flags/GY.png and /dev/null differ diff --git a/res/flags/HK.png b/res/flags/HK.png deleted file mode 100644 index 907dc59624..0000000000 Binary files a/res/flags/HK.png and /dev/null differ diff --git a/res/flags/HM.png b/res/flags/HM.png deleted file mode 100644 index 8d1e143791..0000000000 Binary files a/res/flags/HM.png and /dev/null differ diff --git a/res/flags/HN.png b/res/flags/HN.png deleted file mode 100644 index 4cf8c3112c..0000000000 Binary files a/res/flags/HN.png and /dev/null differ diff --git a/res/flags/HR.png b/res/flags/HR.png deleted file mode 100644 index 413ceb1586..0000000000 Binary files a/res/flags/HR.png and /dev/null differ diff --git a/res/flags/HT.png b/res/flags/HT.png deleted file mode 100644 index 097abeb434..0000000000 Binary files a/res/flags/HT.png and /dev/null differ diff --git a/res/flags/HU.png b/res/flags/HU.png deleted file mode 100644 index 23499bf63c..0000000000 Binary files a/res/flags/HU.png and /dev/null differ diff --git a/res/flags/ID.png b/res/flags/ID.png deleted file mode 100644 index 80200657c6..0000000000 Binary files a/res/flags/ID.png and /dev/null differ diff --git a/res/flags/IE.png b/res/flags/IE.png deleted file mode 100644 index 63f2220118..0000000000 Binary files a/res/flags/IE.png and /dev/null differ diff --git a/res/flags/IL.png b/res/flags/IL.png deleted file mode 100644 index 0268826321..0000000000 Binary files a/res/flags/IL.png and /dev/null differ diff --git a/res/flags/IM.png b/res/flags/IM.png deleted file mode 100644 index c777acc490..0000000000 Binary files a/res/flags/IM.png and /dev/null differ diff --git a/res/flags/IN.png b/res/flags/IN.png deleted file mode 100644 index 85fa9bfe72..0000000000 Binary files a/res/flags/IN.png and /dev/null differ diff --git a/res/flags/IO.png b/res/flags/IO.png deleted file mode 100644 index 1675d8e7db..0000000000 Binary files a/res/flags/IO.png and /dev/null differ diff --git a/res/flags/IQ.png b/res/flags/IQ.png deleted file mode 100644 index f2c21f7260..0000000000 Binary files a/res/flags/IQ.png and /dev/null differ diff --git a/res/flags/IR.png b/res/flags/IR.png deleted file mode 100644 index 0b8e67506c..0000000000 Binary files a/res/flags/IR.png and /dev/null differ diff --git a/res/flags/IS.png b/res/flags/IS.png deleted file mode 100644 index 5ee3e63c5c..0000000000 Binary files a/res/flags/IS.png and /dev/null differ diff --git a/res/flags/IT.png b/res/flags/IT.png deleted file mode 100644 index 53b967be99..0000000000 Binary files a/res/flags/IT.png and /dev/null differ diff --git a/res/flags/JE.png b/res/flags/JE.png deleted file mode 100644 index a1437aba78..0000000000 Binary files a/res/flags/JE.png and /dev/null differ diff --git a/res/flags/JM.png b/res/flags/JM.png deleted file mode 100644 index 0d462fa3ae..0000000000 Binary files a/res/flags/JM.png and /dev/null differ diff --git a/res/flags/JO.png b/res/flags/JO.png deleted file mode 100644 index 8934db7eca..0000000000 Binary files a/res/flags/JO.png and /dev/null differ diff --git a/res/flags/JP.png b/res/flags/JP.png deleted file mode 100644 index 6f92d52365..0000000000 Binary files a/res/flags/JP.png and /dev/null differ diff --git a/res/flags/KE.png b/res/flags/KE.png deleted file mode 100644 index 866b3f15dc..0000000000 Binary files a/res/flags/KE.png and /dev/null differ diff --git a/res/flags/KG.png b/res/flags/KG.png deleted file mode 100644 index 56b433c756..0000000000 Binary files a/res/flags/KG.png and /dev/null differ diff --git a/res/flags/KH.png b/res/flags/KH.png deleted file mode 100644 index e1ddd5f84c..0000000000 Binary files a/res/flags/KH.png and /dev/null differ diff --git a/res/flags/KI.png b/res/flags/KI.png deleted file mode 100644 index 8b7c54bc0f..0000000000 Binary files a/res/flags/KI.png and /dev/null differ diff --git a/res/flags/KM.png b/res/flags/KM.png deleted file mode 100644 index 227a3b3396..0000000000 Binary files a/res/flags/KM.png and /dev/null differ diff --git a/res/flags/KN.png b/res/flags/KN.png deleted file mode 100644 index bc6189bed1..0000000000 Binary files a/res/flags/KN.png and /dev/null differ diff --git a/res/flags/KP.png b/res/flags/KP.png deleted file mode 100644 index c92248b910..0000000000 Binary files a/res/flags/KP.png and /dev/null differ diff --git a/res/flags/KR.png b/res/flags/KR.png deleted file mode 100644 index ab1cb94943..0000000000 Binary files a/res/flags/KR.png and /dev/null differ diff --git a/res/flags/KW.png b/res/flags/KW.png deleted file mode 100644 index 0b41c7a532..0000000000 Binary files a/res/flags/KW.png and /dev/null differ diff --git a/res/flags/KY.png b/res/flags/KY.png deleted file mode 100644 index 7af5290d31..0000000000 Binary files a/res/flags/KY.png and /dev/null differ diff --git a/res/flags/KZ.png b/res/flags/KZ.png deleted file mode 100644 index e10a1255a0..0000000000 Binary files a/res/flags/KZ.png and /dev/null differ diff --git a/res/flags/LA.png b/res/flags/LA.png deleted file mode 100644 index 6ad67d4255..0000000000 Binary files a/res/flags/LA.png and /dev/null differ diff --git a/res/flags/LB.png b/res/flags/LB.png deleted file mode 100644 index 865df57a42..0000000000 Binary files a/res/flags/LB.png and /dev/null differ diff --git a/res/flags/LC.png b/res/flags/LC.png deleted file mode 100644 index e83a2d08bc..0000000000 Binary files a/res/flags/LC.png and /dev/null differ diff --git a/res/flags/LI.png b/res/flags/LI.png deleted file mode 100644 index 57034d367c..0000000000 Binary files a/res/flags/LI.png and /dev/null differ diff --git a/res/flags/LK.png b/res/flags/LK.png deleted file mode 100644 index 6e7ad58254..0000000000 Binary files a/res/flags/LK.png and /dev/null differ diff --git a/res/flags/LR.png b/res/flags/LR.png deleted file mode 100644 index 46c3b84a92..0000000000 Binary files a/res/flags/LR.png and /dev/null differ diff --git a/res/flags/LS.png b/res/flags/LS.png deleted file mode 100644 index 79b505d490..0000000000 Binary files a/res/flags/LS.png and /dev/null differ diff --git a/res/flags/LT.png b/res/flags/LT.png deleted file mode 100644 index 7740cdc0a0..0000000000 Binary files a/res/flags/LT.png and /dev/null differ diff --git a/res/flags/LU.png b/res/flags/LU.png deleted file mode 100644 index 8f383e674e..0000000000 Binary files a/res/flags/LU.png and /dev/null differ diff --git a/res/flags/LV.png b/res/flags/LV.png deleted file mode 100644 index a0f36d89c4..0000000000 Binary files a/res/flags/LV.png and /dev/null differ diff --git a/res/flags/LY.png b/res/flags/LY.png deleted file mode 100644 index 2884c4c0a9..0000000000 Binary files a/res/flags/LY.png and /dev/null differ diff --git a/res/flags/MA.png b/res/flags/MA.png deleted file mode 100644 index 1f76cfc9bd..0000000000 Binary files a/res/flags/MA.png and /dev/null differ diff --git a/res/flags/MC.png b/res/flags/MC.png deleted file mode 100644 index 06fc2ad166..0000000000 Binary files a/res/flags/MC.png and /dev/null differ diff --git a/res/flags/MD.png b/res/flags/MD.png deleted file mode 100644 index 8e54c2b815..0000000000 Binary files a/res/flags/MD.png and /dev/null differ diff --git a/res/flags/ME.png b/res/flags/ME.png deleted file mode 100644 index 97424d4ec2..0000000000 Binary files a/res/flags/ME.png and /dev/null differ diff --git a/res/flags/MF.png b/res/flags/MF.png deleted file mode 100644 index 6d50a0f544..0000000000 Binary files a/res/flags/MF.png and /dev/null differ diff --git a/res/flags/MG.png b/res/flags/MG.png deleted file mode 100644 index 28bfccc9e8..0000000000 Binary files a/res/flags/MG.png and /dev/null differ diff --git a/res/flags/MH.png b/res/flags/MH.png deleted file mode 100644 index e482a65924..0000000000 Binary files a/res/flags/MH.png and /dev/null differ diff --git a/res/flags/MK.png b/res/flags/MK.png deleted file mode 100644 index 84e2e65e76..0000000000 Binary files a/res/flags/MK.png and /dev/null differ diff --git a/res/flags/ML.png b/res/flags/ML.png deleted file mode 100644 index 38fec34796..0000000000 Binary files a/res/flags/ML.png and /dev/null differ diff --git a/res/flags/MM.png b/res/flags/MM.png deleted file mode 100644 index 70a03c6b14..0000000000 Binary files a/res/flags/MM.png and /dev/null differ diff --git a/res/flags/MN.png b/res/flags/MN.png deleted file mode 100644 index 1e1bbe6089..0000000000 Binary files a/res/flags/MN.png and /dev/null differ diff --git a/res/flags/MO.png b/res/flags/MO.png deleted file mode 100644 index 3833d683e7..0000000000 Binary files a/res/flags/MO.png and /dev/null differ diff --git a/res/flags/MP.png b/res/flags/MP.png deleted file mode 100644 index 63119096b0..0000000000 Binary files a/res/flags/MP.png and /dev/null differ diff --git a/res/flags/MQ.png b/res/flags/MQ.png deleted file mode 100644 index 9cab441aec..0000000000 Binary files a/res/flags/MQ.png and /dev/null differ diff --git a/res/flags/MR.png b/res/flags/MR.png deleted file mode 100644 index c144de17f7..0000000000 Binary files a/res/flags/MR.png and /dev/null differ diff --git a/res/flags/MS.png b/res/flags/MS.png deleted file mode 100644 index 1221707042..0000000000 Binary files a/res/flags/MS.png and /dev/null differ diff --git a/res/flags/MT.png b/res/flags/MT.png deleted file mode 100644 index 7963aa618a..0000000000 Binary files a/res/flags/MT.png and /dev/null differ diff --git a/res/flags/MU.png b/res/flags/MU.png deleted file mode 100644 index d5d4d4008d..0000000000 Binary files a/res/flags/MU.png and /dev/null differ diff --git a/res/flags/MV.png b/res/flags/MV.png deleted file mode 100644 index 0f2ecb4389..0000000000 Binary files a/res/flags/MV.png and /dev/null differ diff --git a/res/flags/MW.png b/res/flags/MW.png deleted file mode 100644 index d0a5d24f55..0000000000 Binary files a/res/flags/MW.png and /dev/null differ diff --git a/res/flags/MX.png b/res/flags/MX.png deleted file mode 100644 index 096cb1111f..0000000000 Binary files a/res/flags/MX.png and /dev/null differ diff --git a/res/flags/MY.png b/res/flags/MY.png deleted file mode 100644 index 17f18ac519..0000000000 Binary files a/res/flags/MY.png and /dev/null differ diff --git a/res/flags/MZ.png b/res/flags/MZ.png deleted file mode 100644 index 66be6563c6..0000000000 Binary files a/res/flags/MZ.png and /dev/null differ diff --git a/res/flags/NA.png b/res/flags/NA.png deleted file mode 100644 index 7ecfd317c7..0000000000 Binary files a/res/flags/NA.png and /dev/null differ diff --git a/res/flags/NC.png b/res/flags/NC.png deleted file mode 100644 index 11126ade77..0000000000 Binary files a/res/flags/NC.png and /dev/null differ diff --git a/res/flags/NE.png b/res/flags/NE.png deleted file mode 100644 index d584fa8429..0000000000 Binary files a/res/flags/NE.png and /dev/null differ diff --git a/res/flags/NF.png b/res/flags/NF.png deleted file mode 100644 index c054042591..0000000000 Binary files a/res/flags/NF.png and /dev/null differ diff --git a/res/flags/NG.png b/res/flags/NG.png deleted file mode 100644 index 73aee15b3f..0000000000 Binary files a/res/flags/NG.png and /dev/null differ diff --git a/res/flags/NI.png b/res/flags/NI.png deleted file mode 100644 index fd044933e4..0000000000 Binary files a/res/flags/NI.png and /dev/null differ diff --git a/res/flags/NL.png b/res/flags/NL.png deleted file mode 100644 index 0897943760..0000000000 Binary files a/res/flags/NL.png and /dev/null differ diff --git a/res/flags/NO.png b/res/flags/NO.png deleted file mode 100644 index aafb0f1776..0000000000 Binary files a/res/flags/NO.png and /dev/null differ diff --git a/res/flags/NP.png b/res/flags/NP.png deleted file mode 100644 index 744458e17e..0000000000 Binary files a/res/flags/NP.png and /dev/null differ diff --git a/res/flags/NR.png b/res/flags/NR.png deleted file mode 100644 index 58c2afb228..0000000000 Binary files a/res/flags/NR.png and /dev/null differ diff --git a/res/flags/NU.png b/res/flags/NU.png deleted file mode 100644 index 007c99eca5..0000000000 Binary files a/res/flags/NU.png and /dev/null differ diff --git a/res/flags/NZ.png b/res/flags/NZ.png deleted file mode 100644 index 839368dd7b..0000000000 Binary files a/res/flags/NZ.png and /dev/null differ diff --git a/res/flags/OM.png b/res/flags/OM.png deleted file mode 100644 index 63a893367f..0000000000 Binary files a/res/flags/OM.png and /dev/null differ diff --git a/res/flags/PA.png b/res/flags/PA.png deleted file mode 100644 index 3515d95d37..0000000000 Binary files a/res/flags/PA.png and /dev/null differ diff --git a/res/flags/PE.png b/res/flags/PE.png deleted file mode 100644 index 58f70b8d18..0000000000 Binary files a/res/flags/PE.png and /dev/null differ diff --git a/res/flags/PF.png b/res/flags/PF.png deleted file mode 100644 index 2f33f2574f..0000000000 Binary files a/res/flags/PF.png and /dev/null differ diff --git a/res/flags/PG.png b/res/flags/PG.png deleted file mode 100644 index c796f587c6..0000000000 Binary files a/res/flags/PG.png and /dev/null differ diff --git a/res/flags/PH.png b/res/flags/PH.png deleted file mode 100644 index 0d98de0386..0000000000 Binary files a/res/flags/PH.png and /dev/null differ diff --git a/res/flags/PK.png b/res/flags/PK.png deleted file mode 100644 index 87f4e2f492..0000000000 Binary files a/res/flags/PK.png and /dev/null differ diff --git a/res/flags/PL.png b/res/flags/PL.png deleted file mode 100644 index 273869dfc6..0000000000 Binary files a/res/flags/PL.png and /dev/null differ diff --git a/res/flags/PM.png b/res/flags/PM.png deleted file mode 100644 index b74c396d92..0000000000 Binary files a/res/flags/PM.png and /dev/null differ diff --git a/res/flags/PN.png b/res/flags/PN.png deleted file mode 100644 index e34c62d598..0000000000 Binary files a/res/flags/PN.png and /dev/null differ diff --git a/res/flags/PR.png b/res/flags/PR.png deleted file mode 100644 index 8efdb91252..0000000000 Binary files a/res/flags/PR.png and /dev/null differ diff --git a/res/flags/PS.png b/res/flags/PS.png deleted file mode 100644 index 7a0cceec00..0000000000 Binary files a/res/flags/PS.png and /dev/null differ diff --git a/res/flags/PT.png b/res/flags/PT.png deleted file mode 100644 index 49e290827c..0000000000 Binary files a/res/flags/PT.png and /dev/null differ diff --git a/res/flags/PW.png b/res/flags/PW.png deleted file mode 100644 index 6cb2e1e70d..0000000000 Binary files a/res/flags/PW.png and /dev/null differ diff --git a/res/flags/PY.png b/res/flags/PY.png deleted file mode 100644 index a61c42c423..0000000000 Binary files a/res/flags/PY.png and /dev/null differ diff --git a/res/flags/QA.png b/res/flags/QA.png deleted file mode 100644 index bb091cc88c..0000000000 Binary files a/res/flags/QA.png and /dev/null differ diff --git a/res/flags/RE.png b/res/flags/RE.png deleted file mode 100644 index 6d50a0f544..0000000000 Binary files a/res/flags/RE.png and /dev/null differ diff --git a/res/flags/RO.png b/res/flags/RO.png deleted file mode 100644 index 4495d29eb0..0000000000 Binary files a/res/flags/RO.png and /dev/null differ diff --git a/res/flags/RS.png b/res/flags/RS.png deleted file mode 100644 index ebb0f28a7b..0000000000 Binary files a/res/flags/RS.png and /dev/null differ diff --git a/res/flags/RU.png b/res/flags/RU.png deleted file mode 100644 index 64532ffa58..0000000000 Binary files a/res/flags/RU.png and /dev/null differ diff --git a/res/flags/RW.png b/res/flags/RW.png deleted file mode 100644 index 64b3cfff04..0000000000 Binary files a/res/flags/RW.png and /dev/null differ diff --git a/res/flags/SA.png b/res/flags/SA.png deleted file mode 100644 index 250de6f6f5..0000000000 Binary files a/res/flags/SA.png and /dev/null differ diff --git a/res/flags/SB.png b/res/flags/SB.png deleted file mode 100644 index 5833c130eb..0000000000 Binary files a/res/flags/SB.png and /dev/null differ diff --git a/res/flags/SC.png b/res/flags/SC.png deleted file mode 100644 index ce5248f434..0000000000 Binary files a/res/flags/SC.png and /dev/null differ diff --git a/res/flags/SD.png b/res/flags/SD.png deleted file mode 100644 index d8711a83d6..0000000000 Binary files a/res/flags/SD.png and /dev/null differ diff --git a/res/flags/SE.png b/res/flags/SE.png deleted file mode 100644 index 81880931f3..0000000000 Binary files a/res/flags/SE.png and /dev/null differ diff --git a/res/flags/SG.png b/res/flags/SG.png deleted file mode 100644 index 6f00e57923..0000000000 Binary files a/res/flags/SG.png and /dev/null differ diff --git a/res/flags/SH.png b/res/flags/SH.png deleted file mode 100644 index 055dde68bc..0000000000 Binary files a/res/flags/SH.png and /dev/null differ diff --git a/res/flags/SI.png b/res/flags/SI.png deleted file mode 100644 index 9635983406..0000000000 Binary files a/res/flags/SI.png and /dev/null differ diff --git a/res/flags/SJ.png b/res/flags/SJ.png deleted file mode 100644 index aafb0f1776..0000000000 Binary files a/res/flags/SJ.png and /dev/null differ diff --git a/res/flags/SK.png b/res/flags/SK.png deleted file mode 100644 index 84c7021f0a..0000000000 Binary files a/res/flags/SK.png and /dev/null differ diff --git a/res/flags/SL.png b/res/flags/SL.png deleted file mode 100644 index c5ed199141..0000000000 Binary files a/res/flags/SL.png and /dev/null differ diff --git a/res/flags/SM.png b/res/flags/SM.png deleted file mode 100644 index 1af1ca284f..0000000000 Binary files a/res/flags/SM.png and /dev/null differ diff --git a/res/flags/SN.png b/res/flags/SN.png deleted file mode 100644 index d0b1843561..0000000000 Binary files a/res/flags/SN.png and /dev/null differ diff --git a/res/flags/SO.png b/res/flags/SO.png deleted file mode 100644 index 64e2970b9d..0000000000 Binary files a/res/flags/SO.png and /dev/null differ diff --git a/res/flags/SR.png b/res/flags/SR.png deleted file mode 100644 index b072dda835..0000000000 Binary files a/res/flags/SR.png and /dev/null differ diff --git a/res/flags/SS.png b/res/flags/SS.png deleted file mode 100644 index 83933d4521..0000000000 Binary files a/res/flags/SS.png and /dev/null differ diff --git a/res/flags/ST.png b/res/flags/ST.png deleted file mode 100644 index c102721a86..0000000000 Binary files a/res/flags/ST.png and /dev/null differ diff --git a/res/flags/SV.png b/res/flags/SV.png deleted file mode 100644 index 80de92e556..0000000000 Binary files a/res/flags/SV.png and /dev/null differ diff --git a/res/flags/SX.png b/res/flags/SX.png deleted file mode 100644 index dd52215c5d..0000000000 Binary files a/res/flags/SX.png and /dev/null differ diff --git a/res/flags/SY.png b/res/flags/SY.png deleted file mode 100644 index 78f45b7c0b..0000000000 Binary files a/res/flags/SY.png and /dev/null differ diff --git a/res/flags/SZ.png b/res/flags/SZ.png deleted file mode 100644 index 2182f4ff93..0000000000 Binary files a/res/flags/SZ.png and /dev/null differ diff --git a/res/flags/TC.png b/res/flags/TC.png deleted file mode 100644 index 3e3e19d4b3..0000000000 Binary files a/res/flags/TC.png and /dev/null differ diff --git a/res/flags/TD.png b/res/flags/TD.png deleted file mode 100644 index 753bec22b0..0000000000 Binary files a/res/flags/TD.png and /dev/null differ diff --git a/res/flags/TF.png b/res/flags/TF.png deleted file mode 100644 index 6d50a0f544..0000000000 Binary files a/res/flags/TF.png and /dev/null differ diff --git a/res/flags/TG.png b/res/flags/TG.png deleted file mode 100644 index 8501ada655..0000000000 Binary files a/res/flags/TG.png and /dev/null differ diff --git a/res/flags/TH.png b/res/flags/TH.png deleted file mode 100644 index 0c884c329e..0000000000 Binary files a/res/flags/TH.png and /dev/null differ diff --git a/res/flags/TJ.png b/res/flags/TJ.png deleted file mode 100644 index 3c9026fa0f..0000000000 Binary files a/res/flags/TJ.png and /dev/null differ diff --git a/res/flags/TK.png b/res/flags/TK.png deleted file mode 100644 index fd605749ea..0000000000 Binary files a/res/flags/TK.png and /dev/null differ diff --git a/res/flags/TL.png b/res/flags/TL.png deleted file mode 100644 index b4c834b1d6..0000000000 Binary files a/res/flags/TL.png and /dev/null differ diff --git a/res/flags/TM.png b/res/flags/TM.png deleted file mode 100644 index d18cb939a9..0000000000 Binary files a/res/flags/TM.png and /dev/null differ diff --git a/res/flags/TN.png b/res/flags/TN.png deleted file mode 100644 index 21c4b98be7..0000000000 Binary files a/res/flags/TN.png and /dev/null differ diff --git a/res/flags/TO.png b/res/flags/TO.png deleted file mode 100644 index c828206e35..0000000000 Binary files a/res/flags/TO.png and /dev/null differ diff --git a/res/flags/TR.png b/res/flags/TR.png deleted file mode 100644 index f2a5bd22c8..0000000000 Binary files a/res/flags/TR.png and /dev/null differ diff --git a/res/flags/TT.png b/res/flags/TT.png deleted file mode 100644 index 66d698334b..0000000000 Binary files a/res/flags/TT.png and /dev/null differ diff --git a/res/flags/TV.png b/res/flags/TV.png deleted file mode 100644 index 7a127f51ae..0000000000 Binary files a/res/flags/TV.png and /dev/null differ diff --git a/res/flags/TW.png b/res/flags/TW.png deleted file mode 100644 index 2353ba1b0a..0000000000 Binary files a/res/flags/TW.png and /dev/null differ diff --git a/res/flags/TZ.png b/res/flags/TZ.png deleted file mode 100644 index 7949f65d8a..0000000000 Binary files a/res/flags/TZ.png and /dev/null differ diff --git a/res/flags/UA.png b/res/flags/UA.png deleted file mode 100644 index 687e305294..0000000000 Binary files a/res/flags/UA.png and /dev/null differ diff --git a/res/flags/UG.png b/res/flags/UG.png deleted file mode 100644 index 0a21ad15c3..0000000000 Binary files a/res/flags/UG.png and /dev/null differ diff --git a/res/flags/US.png b/res/flags/US.png deleted file mode 100644 index c3a245b767..0000000000 Binary files a/res/flags/US.png and /dev/null differ diff --git a/res/flags/UY.png b/res/flags/UY.png deleted file mode 100644 index 21a347c6fc..0000000000 Binary files a/res/flags/UY.png and /dev/null differ diff --git a/res/flags/UZ.png b/res/flags/UZ.png deleted file mode 100644 index 643b6ae0cf..0000000000 Binary files a/res/flags/UZ.png and /dev/null differ diff --git a/res/flags/VA.png b/res/flags/VA.png deleted file mode 100644 index 63a13c0e81..0000000000 Binary files a/res/flags/VA.png and /dev/null differ diff --git a/res/flags/VC.png b/res/flags/VC.png deleted file mode 100644 index da991a9344..0000000000 Binary files a/res/flags/VC.png and /dev/null differ diff --git a/res/flags/VE.png b/res/flags/VE.png deleted file mode 100644 index e75e17c9f0..0000000000 Binary files a/res/flags/VE.png and /dev/null differ diff --git a/res/flags/VG.png b/res/flags/VG.png deleted file mode 100644 index 46f93cad1e..0000000000 Binary files a/res/flags/VG.png and /dev/null differ diff --git a/res/flags/VI.png b/res/flags/VI.png deleted file mode 100644 index 8c849a733e..0000000000 Binary files a/res/flags/VI.png and /dev/null differ diff --git a/res/flags/VN.png b/res/flags/VN.png deleted file mode 100644 index 6ea2122f9d..0000000000 Binary files a/res/flags/VN.png and /dev/null differ diff --git a/res/flags/VU.png b/res/flags/VU.png deleted file mode 100644 index bad3ba4d46..0000000000 Binary files a/res/flags/VU.png and /dev/null differ diff --git a/res/flags/WF.png b/res/flags/WF.png deleted file mode 100644 index d94359dcc4..0000000000 Binary files a/res/flags/WF.png and /dev/null differ diff --git a/res/flags/WS.png b/res/flags/WS.png deleted file mode 100644 index f8b80e5ba9..0000000000 Binary files a/res/flags/WS.png and /dev/null differ diff --git a/res/flags/YE.png b/res/flags/YE.png deleted file mode 100644 index 8b9bbd8942..0000000000 Binary files a/res/flags/YE.png and /dev/null differ diff --git a/res/flags/YT.png b/res/flags/YT.png deleted file mode 100644 index 328879361e..0000000000 Binary files a/res/flags/YT.png and /dev/null differ diff --git a/res/flags/ZA.png b/res/flags/ZA.png deleted file mode 100644 index 7f0a52d3b2..0000000000 Binary files a/res/flags/ZA.png and /dev/null differ diff --git a/res/flags/ZM.png b/res/flags/ZM.png deleted file mode 100644 index 87adc3afaa..0000000000 Binary files a/res/flags/ZM.png and /dev/null differ diff --git a/res/flags/ZW.png b/res/flags/ZW.png deleted file mode 100644 index 742c9f7e71..0000000000 Binary files a/res/flags/ZW.png and /dev/null differ diff --git a/res/home-status.html b/res/home-status.html deleted file mode 100644 index 7d50470a22..0000000000 --- a/res/home-status.html +++ /dev/null @@ -1,192 +0,0 @@ - - -
-
-
-

Welcome to Status Community Chat, powered by Riot.

-

For contributors, developers and Ethereum-enthusiasts who care about the movement for decentralization.

-
-
- -
-

Our rooms

-

Please abide by the channels discussion categories and remain on topic to the specific category details listed.

-

Before posting please refer to our Code of Conduct

-
- - -
- - #announcements - Company wide announcements. - Join -
-
- - #introductions - Newcomer introductions. - Join -
-
- - #general - General discussions of Status. - Join -
-
- - #dev-status - Contributing to our codebase? Building a DApp or a chatbot? We're here to help. - Join -
-
- - #news-articles - Share news, articles related to Ethereum or projects you're excited about - Join -
-
-

- Interested in market and cryptocurrency type discussions? -

- Join Telegram -
-
diff --git a/res/home.html b/res/home.html deleted file mode 100644 index 4b8da3daaf..0000000000 --- a/res/home.html +++ /dev/null @@ -1,292 +0,0 @@ - - -
-
- -
-

_t("Welcome to Riot.im")

-

_t("Decentralised, encrypted chat & collaboration powered by [matrix]")

-
-
-
-
-
-

_t("Search the room directory")

- - - - - _t("Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!") - -
-
-
-
-

_t("Chat with Riot Bot")

- - - - - _t("Get started with some tips from Riot Bot!") - -
-
-
- -

_t("General discussion about Matrix and Riot")

- -
-
- - - Matrix HQ - - _t("Discussion of all things Matrix!") -
-
- - - Riot - - _t("Riot/Web & Desktop chat") -
-
- - - #riot-ios - - _t("Riot/iOS & matrix-ios-sdk chat") -
-
- - - #riot-android - - _t("Riot/Android & matrix-android-sdk chat") -
-
- -

_t("Matrix technical discussions")

-

_t("Running Matrix services")

- -
-
- - - Synapse Support Community - - _t("Community-run support for Synapse") -
-
- - - #dendrite:matrix.org - - _t("Admin support for Dendrite") -
-
- - - Synapse Homeowners - - _t("Announcements about Synapse releases") -
-
- - - IRC Matrix Bridges - - _t("Support for those using and running matrix-appservice-irc") -
-
- -

_t("Building services on Matrix")

- -
-
- - - #matrix-dev:matrix.org - - _t("Support for those using the Matrix spec") -
-
- - - End-to-end crypto in Matrix - - _t("Design and implementation of E2E in Matrix") -
-
- - - #vr:matrix.org - - _t("Implementing VR services with Matrix") -
-
- - - #webrtc:matrix.org - - _t("Implementing VoIP services with Matrix") -
-
- - - Matrix Identity - - _t("Discussion of the Identity Service API") -
-
- - - Matrix Bridging - - _t("Support for those using, running and writing other bridges") -
-
- -

_t("Contributing code to Matrix and Riot")

- -
-
- - - #riot-dev - - _t("Dev chat for the Riot/Web dev team") -
-
- - - #dendrite-dev - - _t("Dev chat for the Dendrite dev team") -
-
- - - Riot-Web Translations - - _t("Co-ordination for Riot/Web translators") -
-
-
diff --git a/res/home/images/logo.svg b/res/home/images/logo.svg deleted file mode 100644 index a5f70e5e4c..0000000000 --- a/res/home/images/logo.svg +++ /dev/null @@ -1,76 +0,0 @@ - - - - -New_logo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/res/home/rooms/bridging.png b/res/home/rooms/bridging.png deleted file mode 100644 index 6b3a55e7bb..0000000000 Binary files a/res/home/rooms/bridging.png and /dev/null differ diff --git a/res/home/rooms/dendrite-dev.png b/res/home/rooms/dendrite-dev.png deleted file mode 100644 index 1d96bd84a7..0000000000 Binary files a/res/home/rooms/dendrite-dev.png and /dev/null differ diff --git a/res/home/rooms/dendrite.png b/res/home/rooms/dendrite.png deleted file mode 100644 index 1d96bd84a7..0000000000 Binary files a/res/home/rooms/dendrite.png and /dev/null differ diff --git a/res/home/rooms/e2e.png b/res/home/rooms/e2e.png deleted file mode 100644 index a2bda4bc68..0000000000 Binary files a/res/home/rooms/e2e.png and /dev/null differ diff --git a/res/home/rooms/homeowners.png b/res/home/rooms/homeowners.png deleted file mode 100644 index ed45f11ceb..0000000000 Binary files a/res/home/rooms/homeowners.png and /dev/null differ diff --git a/res/home/rooms/identity.jpg b/res/home/rooms/identity.jpg deleted file mode 100644 index f2e1505634..0000000000 Binary files a/res/home/rooms/identity.jpg and /dev/null differ diff --git a/res/home/rooms/identity.png b/res/home/rooms/identity.png deleted file mode 100644 index de1ea60d54..0000000000 Binary files a/res/home/rooms/identity.png and /dev/null differ diff --git a/res/home/rooms/irc.png b/res/home/rooms/irc.png deleted file mode 100644 index 5f611d12a4..0000000000 Binary files a/res/home/rooms/irc.png and /dev/null differ diff --git a/res/home/rooms/matrix-dev.png b/res/home/rooms/matrix-dev.png deleted file mode 100644 index fa54f00cb2..0000000000 Binary files a/res/home/rooms/matrix-dev.png and /dev/null differ diff --git a/res/home/rooms/matrix.png b/res/home/rooms/matrix.png deleted file mode 100644 index fa54f00cb2..0000000000 Binary files a/res/home/rooms/matrix.png and /dev/null differ diff --git a/res/home/rooms/riot-android.png b/res/home/rooms/riot-android.png deleted file mode 100644 index fa2bec8e3e..0000000000 Binary files a/res/home/rooms/riot-android.png and /dev/null differ diff --git a/res/home/rooms/riot-bot.png b/res/home/rooms/riot-bot.png deleted file mode 100644 index 9efd4a3c21..0000000000 Binary files a/res/home/rooms/riot-bot.png and /dev/null differ diff --git a/res/home/rooms/riot-dev.png b/res/home/rooms/riot-dev.png deleted file mode 100644 index ff8b21ad1a..0000000000 Binary files a/res/home/rooms/riot-dev.png and /dev/null differ diff --git a/res/home/rooms/riot-ios.png b/res/home/rooms/riot-ios.png deleted file mode 100644 index 6a0c598fe5..0000000000 Binary files a/res/home/rooms/riot-ios.png and /dev/null differ diff --git a/res/home/rooms/riot-translations.png b/res/home/rooms/riot-translations.png deleted file mode 100644 index 2ae95836e7..0000000000 Binary files a/res/home/rooms/riot-translations.png and /dev/null differ diff --git a/res/home/rooms/riot.png b/res/home/rooms/riot.png deleted file mode 100644 index 4daa2e4ef7..0000000000 Binary files a/res/home/rooms/riot.png and /dev/null differ diff --git a/res/home/rooms/synapse.png b/res/home/rooms/synapse.png deleted file mode 100644 index ee0f855895..0000000000 Binary files a/res/home/rooms/synapse.png and /dev/null differ diff --git a/res/home/rooms/vr.png b/res/home/rooms/vr.png deleted file mode 100644 index 98b77802df..0000000000 Binary files a/res/home/rooms/vr.png and /dev/null differ diff --git a/res/home/rooms/webrtc.png b/res/home/rooms/webrtc.png deleted file mode 100644 index 98b790f9ae..0000000000 Binary files a/res/home/rooms/webrtc.png and /dev/null differ diff --git a/res/media/busy.mp3 b/res/media/busy.mp3 deleted file mode 100644 index fec27ba4c5..0000000000 Binary files a/res/media/busy.mp3 and /dev/null differ diff --git a/res/media/busy.ogg b/res/media/busy.ogg deleted file mode 100644 index 5d64a7d0d9..0000000000 Binary files a/res/media/busy.ogg and /dev/null differ diff --git a/res/media/callend.mp3 b/res/media/callend.mp3 deleted file mode 100644 index 50c34e5640..0000000000 Binary files a/res/media/callend.mp3 and /dev/null differ diff --git a/res/media/callend.ogg b/res/media/callend.ogg deleted file mode 100644 index 927ce1f634..0000000000 Binary files a/res/media/callend.ogg and /dev/null differ diff --git a/res/media/message.mp3 b/res/media/message.mp3 deleted file mode 100644 index b87eeda7c2..0000000000 Binary files a/res/media/message.mp3 and /dev/null differ diff --git a/res/media/message.ogg b/res/media/message.ogg deleted file mode 100644 index adc74437d0..0000000000 Binary files a/res/media/message.ogg and /dev/null differ diff --git a/res/media/ring.mp3 b/res/media/ring.mp3 deleted file mode 100644 index 36200cd89d..0000000000 Binary files a/res/media/ring.mp3 and /dev/null differ diff --git a/res/media/ring.ogg b/res/media/ring.ogg deleted file mode 100644 index 708213bfac..0000000000 Binary files a/res/media/ring.ogg and /dev/null differ diff --git a/res/media/ringback.mp3 b/res/media/ringback.mp3 deleted file mode 100644 index 6ee34bf395..0000000000 Binary files a/res/media/ringback.mp3 and /dev/null differ diff --git a/res/media/ringback.ogg b/res/media/ringback.ogg deleted file mode 100644 index 7dbfdcd017..0000000000 Binary files a/res/media/ringback.ogg and /dev/null differ diff --git a/res/themes/riot/img/backgrounds/valley.jpg b/res/themes/riot/img/backgrounds/valley.jpg new file mode 100644 index 0000000000..4779c9d7cf Binary files /dev/null and b/res/themes/riot/img/backgrounds/valley.jpg differ diff --git a/res/themes/riot/img/logos/riot-im-logo-black-text.png b/res/themes/riot/img/logos/riot-im-logo-black-text.png new file mode 100644 index 0000000000..2b4334616e Binary files /dev/null and b/res/themes/riot/img/logos/riot-im-logo-black-text.png differ diff --git a/res/themes/riot/img/logos/riot-im-logo-black-text.svg b/res/themes/riot/img/logos/riot-im-logo-black-text.svg new file mode 100644 index 0000000000..ce50d65d49 --- /dev/null +++ b/res/themes/riot/img/logos/riot-im-logo-black-text.svg @@ -0,0 +1,17 @@ + + + + alt black logotype + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff --git a/res/themes/riot/img/logos/riot-im-logo.png b/res/themes/riot/img/logos/riot-im-logo.png new file mode 100644 index 0000000000..66651582de Binary files /dev/null and b/res/themes/riot/img/logos/riot-im-logo.png differ diff --git a/res/themes/riot/img/logos/riot-im-logo.svg b/res/themes/riot/img/logos/riot-im-logo.svg new file mode 100644 index 0000000000..8a7956cc65 --- /dev/null +++ b/res/themes/riot/img/logos/riot-im-logo.svg @@ -0,0 +1,17 @@ + + + + animatedLogo-0 + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff --git a/res/vector-icons/android-chrome-144x144.png b/res/vector-icons/android-chrome-144x144.png index 30c8cf18dc..5dbbd0ff11 100644 Binary files a/res/vector-icons/android-chrome-144x144.png and b/res/vector-icons/android-chrome-144x144.png differ diff --git a/res/vector-icons/android-chrome-192x192.png b/res/vector-icons/android-chrome-192x192.png index 560e20ad8c..93a4e9c8ad 100644 Binary files a/res/vector-icons/android-chrome-192x192.png and b/res/vector-icons/android-chrome-192x192.png differ diff --git a/res/vector-icons/android-chrome-36x36.png b/res/vector-icons/android-chrome-36x36.png index ee41772f4d..344157fe50 100644 Binary files a/res/vector-icons/android-chrome-36x36.png and b/res/vector-icons/android-chrome-36x36.png differ diff --git a/res/vector-icons/android-chrome-48x48.png b/res/vector-icons/android-chrome-48x48.png index 9cd225d402..70115c65c1 100644 Binary files a/res/vector-icons/android-chrome-48x48.png and b/res/vector-icons/android-chrome-48x48.png differ diff --git a/res/vector-icons/android-chrome-72x72.png b/res/vector-icons/android-chrome-72x72.png index d9de0c5715..e61b36e248 100644 Binary files a/res/vector-icons/android-chrome-72x72.png and b/res/vector-icons/android-chrome-72x72.png differ diff --git a/res/vector-icons/android-chrome-96x96.png b/res/vector-icons/android-chrome-96x96.png index eb48c2c91e..3a32b6c839 100644 Binary files a/res/vector-icons/android-chrome-96x96.png and b/res/vector-icons/android-chrome-96x96.png differ diff --git a/res/vector-icons/apple-touch-icon-114x114.png b/res/vector-icons/apple-touch-icon-114x114.png index e07fa43752..019780fd95 100644 Binary files a/res/vector-icons/apple-touch-icon-114x114.png and b/res/vector-icons/apple-touch-icon-114x114.png differ diff --git a/res/vector-icons/apple-touch-icon-120x120.png b/res/vector-icons/apple-touch-icon-120x120.png index 8265091318..4979a63e4e 100644 Binary files a/res/vector-icons/apple-touch-icon-120x120.png and b/res/vector-icons/apple-touch-icon-120x120.png differ diff --git a/res/vector-icons/apple-touch-icon-144x144.png b/res/vector-icons/apple-touch-icon-144x144.png index 30c8cf18dc..5dbbd0ff11 100644 Binary files a/res/vector-icons/apple-touch-icon-144x144.png and b/res/vector-icons/apple-touch-icon-144x144.png differ diff --git a/res/vector-icons/apple-touch-icon-152x152.png b/res/vector-icons/apple-touch-icon-152x152.png index 5bc63546c8..6aac26012f 100644 Binary files a/res/vector-icons/apple-touch-icon-152x152.png and b/res/vector-icons/apple-touch-icon-152x152.png differ diff --git a/res/vector-icons/apple-touch-icon-180x180.png b/res/vector-icons/apple-touch-icon-180x180.png index 85e9f8ca74..aacfc1a8a5 100644 Binary files a/res/vector-icons/apple-touch-icon-180x180.png and b/res/vector-icons/apple-touch-icon-180x180.png differ diff --git a/res/vector-icons/apple-touch-icon-57x57.png b/res/vector-icons/apple-touch-icon-57x57.png index 253c3db70a..e52c99c609 100644 Binary files a/res/vector-icons/apple-touch-icon-57x57.png and b/res/vector-icons/apple-touch-icon-57x57.png differ diff --git a/res/vector-icons/apple-touch-icon-60x60.png b/res/vector-icons/apple-touch-icon-60x60.png index 192a34675b..edaecda6b6 100644 Binary files a/res/vector-icons/apple-touch-icon-60x60.png and b/res/vector-icons/apple-touch-icon-60x60.png differ diff --git a/res/vector-icons/apple-touch-icon-72x72.png b/res/vector-icons/apple-touch-icon-72x72.png index d9de0c5715..e61b36e248 100644 Binary files a/res/vector-icons/apple-touch-icon-72x72.png and b/res/vector-icons/apple-touch-icon-72x72.png differ diff --git a/res/vector-icons/apple-touch-icon-76x76.png b/res/vector-icons/apple-touch-icon-76x76.png index b94716457b..1432fee38f 100644 Binary files a/res/vector-icons/apple-touch-icon-76x76.png and b/res/vector-icons/apple-touch-icon-76x76.png differ diff --git a/res/vector-icons/apple-touch-icon-precomposed.png b/res/vector-icons/apple-touch-icon-precomposed.png index 85e9f8ca74..aacfc1a8a5 100644 Binary files a/res/vector-icons/apple-touch-icon-precomposed.png and b/res/vector-icons/apple-touch-icon-precomposed.png differ diff --git a/res/vector-icons/apple-touch-icon.png b/res/vector-icons/apple-touch-icon.png index 85e9f8ca74..aacfc1a8a5 100644 Binary files a/res/vector-icons/apple-touch-icon.png and b/res/vector-icons/apple-touch-icon.png differ diff --git a/res/vector-icons/favicon-16x16.png b/res/vector-icons/favicon-16x16.png index def4ec5eee..c9b0f23e29 100644 Binary files a/res/vector-icons/favicon-16x16.png and b/res/vector-icons/favicon-16x16.png differ diff --git a/res/vector-icons/favicon-32x32.png b/res/vector-icons/favicon-32x32.png index c999923ac1..48bf1dc890 100644 Binary files a/res/vector-icons/favicon-32x32.png and b/res/vector-icons/favicon-32x32.png differ diff --git a/res/vector-icons/favicon-96x96.png b/res/vector-icons/favicon-96x96.png index eb48c2c91e..ea21306c0d 100644 Binary files a/res/vector-icons/favicon-96x96.png and b/res/vector-icons/favicon-96x96.png differ diff --git a/res/vector-icons/favicon.ico b/res/vector-icons/favicon.ico index 8f8ff94eea..619b51aaad 100644 Binary files a/res/vector-icons/favicon.ico and b/res/vector-icons/favicon.ico differ diff --git a/res/vector-icons/mstile-144x144.png b/res/vector-icons/mstile-144x144.png index 30c8cf18dc..5dbbd0ff11 100644 Binary files a/res/vector-icons/mstile-144x144.png and b/res/vector-icons/mstile-144x144.png differ diff --git a/res/vector-icons/mstile-150x150.png b/res/vector-icons/mstile-150x150.png index 5b8fca8a48..da0c101c94 100644 Binary files a/res/vector-icons/mstile-150x150.png and b/res/vector-icons/mstile-150x150.png differ diff --git a/res/vector-icons/mstile-310x150.png b/res/vector-icons/mstile-310x150.png index d809f00a05..c627adc2a1 100644 Binary files a/res/vector-icons/mstile-310x150.png and b/res/vector-icons/mstile-310x150.png differ diff --git a/res/vector-icons/mstile-310x310.png b/res/vector-icons/mstile-310x310.png index ec62f8ee9d..e96300293e 100644 Binary files a/res/vector-icons/mstile-310x310.png and b/res/vector-icons/mstile-310x310.png differ diff --git a/res/vector-icons/mstile-70x70.png b/res/vector-icons/mstile-70x70.png index 820a909e21..c4f306c5ff 100644 Binary files a/res/vector-icons/mstile-70x70.png and b/res/vector-icons/mstile-70x70.png differ diff --git a/res/welcome.html b/res/welcome.html new file mode 100644 index 0000000000..5331a934f0 --- /dev/null +++ b/res/welcome.html @@ -0,0 +1,199 @@ + + +
+ + + +

_t("Welcome to Riot.im")

+

_t("Decentralised, encrypted chat & collaboration powered by [matrix]")

+
+ + + +
+
+
_t("Need help?")
+ +
_t("Chat with Riot Bot")
+
+
+
+
_t("Explore rooms")
+ +
_t("Room Directory")
+
+
+
+ +
+
diff --git a/res/welcome/images/icon-create-account.svg b/res/welcome/images/icon-create-account.svg new file mode 100644 index 0000000000..c9d25f2fa9 --- /dev/null +++ b/res/welcome/images/icon-create-account.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/res/welcome/images/icon-help.svg b/res/welcome/images/icon-help.svg new file mode 100644 index 0000000000..dc96f8e0cf --- /dev/null +++ b/res/welcome/images/icon-help.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/res/welcome/images/icon-room-directory.svg b/res/welcome/images/icon-room-directory.svg new file mode 100644 index 0000000000..6f888611f1 --- /dev/null +++ b/res/welcome/images/icon-room-directory.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/res/welcome/images/icon-sign-in.svg b/res/welcome/images/icon-sign-in.svg new file mode 100644 index 0000000000..584b2f0add --- /dev/null +++ b/res/welcome/images/icon-sign-in.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/res/welcome/images/logo.svg b/res/welcome/images/logo.svg new file mode 100644 index 0000000000..79039b70d0 --- /dev/null +++ b/res/welcome/images/logo.svg @@ -0,0 +1,16 @@ + + + + + + + + + + diff --git a/res/home/images/matrix.svg b/res/welcome/images/matrix.svg similarity index 99% rename from res/home/images/matrix.svg rename to res/welcome/images/matrix.svg index 5c7dfbb5e3..13adcab25a 100644 --- a/res/home/images/matrix.svg +++ b/res/welcome/images/matrix.svg @@ -1,153 +1,153 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/riot.im/README b/riot.im/README new file mode 100644 index 0000000000..2186e48dee --- /dev/null +++ b/riot.im/README @@ -0,0 +1,11 @@ +This directory contains the config files and deployment scripts for the official +riot.im distribution of Riot Web at https://riot.im. + +You probably do not want to build with this config unless you're building the +official riot.im distribution, but these files may be useful if you want to +inspect the configuration used there. + +Riot Desktop uses a separate config (see electron_app/riot.im/config.json). + +Deployment scripts (such as app/deploy.py) are meant to be run on the web server +hosting the Riot installation. diff --git a/riot.im/app/config.json b/riot.im/app/config.json new file mode 100644 index 0000000000..70ecddfdac --- /dev/null +++ b/riot.im/app/config.json @@ -0,0 +1,49 @@ +{ + "default_server_name": "matrix.org", + "brand": "Riot", + "integrations_ui_url": "https://scalar.vector.im/", + "integrations_rest_url": "https://scalar.vector.im/api", + "integrations_widgets_urls": [ + "https://scalar.vector.im/_matrix/integrations/v1", + "https://scalar.vector.im/api", + "https://scalar-staging.vector.im/_matrix/integrations/v1", + "https://scalar-staging.vector.im/api", + "https://scalar-staging.riot.im/scalar/api" + ], + "hosting_signup_link": "https://modular.im/?utm_source=riot-web&utm_medium=web", + "bug_report_endpoint_url": "https://riot.im/bugreports/submit", + "welcomeUserId": "@riot-bot:matrix.org", + "piwik": { + "url": "https://piwik.riot.im/", + "siteId": 1, + "policyUrl": "https://matrix.org/docs/guides/riot_im_cookie_policy" + }, + "phasedRollOut": { + "feature_lazyloading": { + "offset": 1539684000000, + "period": 604800000 + } + }, + "features": { + "feature_lazyloading": "enable", + "feature_room_breadcrumbs": "labs" + }, + "roomDirectory": { + "servers": [ + "matrix.org" + ] + }, + "enable_presence_by_hs_url": { + "https://matrix.org": false + }, + "terms_and_conditions_links": [ + { + "url": "https://riot.im/privacy", + "text": "Privacy Policy" + }, + { + "url": "https://matrix.org/docs/guides/riot_im_cookie_policy", + "text": "Cookie Policy" + } + ] +} diff --git a/riot.im/app/deploy.py b/riot.im/app/deploy.py new file mode 100755 index 0000000000..33aa0af017 --- /dev/null +++ b/riot.im/app/deploy.py @@ -0,0 +1,191 @@ +#!/usr/bin/env python +# +# download and unpack a riot-web tarball. +# +# Allows `bundles` to be extracted to a common directory, and a link to +# config.json to be added. + +from __future__ import print_function + +import argparse +import os +import os.path +import subprocess +import sys +import tarfile +import shutil +import glob + +try: + # python3 + from urllib.request import urlretrieve +except ImportError: + # python2 + from urllib import urlretrieve + +class DeployException(Exception): + pass + +def create_relative_symlink(linkname, target): + relpath = os.path.relpath(target, os.path.dirname(linkname)) + print ("Symlink %s -> %s" % (linkname, relpath)) + os.symlink(relpath, linkname) + + +def move_bundles(source, dest): + """Move the contents of the 'bundles' directory to a common dir + + We check that we will not be overwriting anything before we proceed. + + Args: + source (str): path to 'bundles' within the extracted tarball + dest (str): target common directory + """ + + if not os.path.isdir(dest): + os.mkdir(dest) + + # build a map from source to destination, checking for non-existence as we go. + renames = {} + for f in os.listdir(source): + dst = os.path.join(dest, f) + if os.path.exists(dst): + print ( + "Skipping bundle. The bundle includes '%s' which we have previously deployed." + % f + ) + else: + renames[os.path.join(source, f)] = dst + + for (src, dst) in renames.iteritems(): + print ("Move %s -> %s" % (src, dst)) + os.rename(src, dst) + +class Deployer: + def __init__(self): + self.packages_path = "." + self.bundles_path = None + self.should_clean = False + # filename -> symlink path e.g 'config.localhost.json' => '../localhost/config.json' + self.symlink_paths = {} + self.verify_signature = True + + def deploy(self, tarball, extract_path): + """Download a tarball if necessary, and unpack it + + Returns: + (str) the path to the unpacked deployment + """ + print("Deploying %s to %s" % (tarball, extract_path)) + + name_str = os.path.basename(tarball).replace(".tar.gz", "") + extracted_dir = os.path.join(extract_path, name_str) + if os.path.exists(extracted_dir): + raise DeployException('Cannot unpack %s: %s already exists' % ( + tarball, extracted_dir)) + + downloaded = False + if tarball.startswith("http://") or tarball.startswith("https://"): + tarball = self.download_and_verify(tarball) + print("Downloaded file: %s" % tarball) + downloaded = True + + try: + with tarfile.open(tarball) as tar: + tar.extractall(extract_path) + finally: + if self.should_clean and downloaded: + os.remove(tarball) + + print ("Extracted into: %s" % extracted_dir) + + if self.symlink_paths: + for link_path, file_path in self.symlink_paths.iteritems(): + create_relative_symlink( + target=file_path, + linkname=os.path.join(extracted_dir, link_path) + ) + + if self.bundles_path: + extracted_bundles = os.path.join(extracted_dir, 'bundles') + move_bundles(source=extracted_bundles, dest=self.bundles_path) + + # replace the extracted_bundles dir (which may not be empty if some + # bundles were skipped) with a symlink to the common dir. + shutil.rmtree(extracted_bundles) + create_relative_symlink( + target=self.bundles_path, + linkname=extracted_bundles, + ) + return extracted_dir + + def download_and_verify(self, url): + tarball = self.download_file(url) + + if self.verify_signature: + sigfile = self.download_file(url + ".asc") + subprocess.check_call(["gpg", "--verify", sigfile, tarball]) + + return tarball + + def download_file(self, url): + if not os.path.isdir(self.packages_path): + os.mkdir(self.packages_path) + local_filename = os.path.join(self.packages_path, + url.split('/')[-1]) + sys.stdout.write("Downloading %s -> %s..." % (url, local_filename)) + sys.stdout.flush() + urlretrieve(url, local_filename) + print ("Done") + return local_filename + +if __name__ == "__main__": + parser = argparse.ArgumentParser("Deploy a Riot build on a web server.") + parser.add_argument( + "-p", "--packages-dir", default="./packages", help=( + "The directory to download the tarball into. (Default: '%(default)s')" + ) + ) + parser.add_argument( + "-e", "--extract-path", default="./deploys", help=( + "The location to extract .tar.gz files to. (Default: '%(default)s')" + ) + ) + parser.add_argument( + "-b", "--bundles-dir", nargs='?', default="./bundles", help=( + "A directory to move the contents of the 'bundles' directory to. A \ + symlink to the bundles directory will also be written inside the \ + extracted tarball. Example: './bundles'. \ + (Default: '%(default)s')" + ) + ) + parser.add_argument( + "-c", "--clean", action="store_true", default=False, help=( + "Remove .tar.gz files after they have been downloaded and extracted. \ + (Default: %(default)s)" + ) + ) + parser.add_argument( + "--include", nargs='*', default=['./config*.json'], help=( + "Symlink these files into the root of the deployed tarball. \ + Useful for config files and home pages. Supports glob syntax. \ + (Default: '%(default)s')" + ) + ) + parser.add_argument( + "tarball", help=( + "filename of tarball, or URL to download." + ), + ) + + args = parser.parse_args() + + deployer = Deployer() + deployer.packages_path = args.packages_dir + deployer.bundles_path = args.bundles_dir + deployer.should_clean = args.clean + + for include in args.include: + deployer.symlink_paths.update({ os.path.basename(pth): pth for pth in glob.iglob(include) }) + + deployer.deploy(args.tarball, args.extract_path) diff --git a/riot.im/develop/config.json b/riot.im/develop/config.json new file mode 100644 index 0000000000..f028ab970e --- /dev/null +++ b/riot.im/develop/config.json @@ -0,0 +1,56 @@ +{ + "default_server_name": "matrix.org", + "brand": "Riot", + "integrations_ui_url": "https://scalar-staging.vector.im/", + "integrations_rest_url": "https://scalar-staging.vector.im/api", + "integrations_widgets_urls": [ + "https://scalar.vector.im/_matrix/integrations/v1", + "https://scalar.vector.im/api", + "https://scalar-staging.vector.im/_matrix/integrations/v1", + "https://scalar-staging.vector.im/api", + "https://scalar-staging.riot.im/scalar/api" + ], + "hosting_signup_link": "https://modular.im/?utm_source=riot-web&utm_medium=web", + "bug_report_endpoint_url": "https://riot.im/bugreports/submit", + "features": { + "feature_rich_quoting": "labs", + "feature_pinning": "labs", + "feature_presence_management": "labs", + "feature_sticker_messages": "labs", + "feature_jitsi": "labs", + "feature_tag_panel": "enable", + "feature_keybackup": "labs", + "feature_custom_status": "labs", + "feature_custom_tags": "labs", + "feature_lazyloading": "enable", + "feature_tabbed_settings": "labs", + "feature_sas": "labs", + "feature_room_breadcrumbs": "labs", + "feature_state_counters": "labs", + "feature_many_integration_managers": "labs" + }, + "welcomeUserId": "@riot-bot:matrix.org", + "piwik": { + "url": "https://piwik.riot.im/", + "siteId": 1, + "policyUrl": "https://matrix.org/docs/guides/riot_im_cookie_policy" + }, + "roomDirectory": { + "servers": [ + "matrix.org" + ] + }, + "enable_presence_by_hs_url": { + "https://matrix.org": false + }, + "terms_and_conditions_links": [ + { + "url": "https://riot.im/privacy", + "text": "Privacy Policy" + }, + { + "url": "https://matrix.org/docs/guides/riot_im_cookie_policy", + "text": "Cookie Policy" + } + ] +} diff --git a/scripts/ci_package.sh b/scripts/ci_package.sh new file mode 100755 index 0000000000..b6daf0524d --- /dev/null +++ b/scripts/ci_package.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +# Runs package.sh setting the version to git hashes of the riot-web, +# react-sdk & js-sdk checkouts, for the case where these dependencies +# are git checkouts. + +set -ex + +rm dist/riot-*.tar.gz || true # rm previous artifacts without failing if it doesn't exist + +# Since the deps are fetched from git, we can rev-parse +REACT_SHA=$(cd node_modules/matrix-react-sdk; git rev-parse --short=12 HEAD) +JSSDK_SHA=$(cd node_modules/matrix-js-sdk; git rev-parse --short=12 HEAD) + +VECTOR_SHA=$(git rev-parse --short=12 HEAD) # use the ACTUAL SHA rather than assume develop + +DIST_VERSION=$VECTOR_SHA-react-$REACT_SHA-js-$JSSDK_SHA scripts/package.sh -d diff --git a/scripts/cleanup.sh b/scripts/cleanup.sh new file mode 100755 index 0000000000..3e7923a5c1 --- /dev/null +++ b/scripts/cleanup.sh @@ -0,0 +1,19 @@ +#!/bin/sh +# +# script to clean up the deployments made by redeploy.py for vectorwebdev and vectorwebexp +set -e + +# currently live deployment (full path) +live=`dirname $(readlink -f "$HOME/live")` + +# currently live bundle (just the name of the bundle) +live_bundle=`grep 'script src="bundles' live/index.html | sed -e 's#.*bundles/##' -e 's#/.*##'` + +# clean up 'extracted': find things which are older than 7 days, exclude the +# current live one, and remove +find $HOME/extracted -mindepth 1 -maxdepth 1 -type d -ctime +7 \ + \! -path "$live" -exec rm -r {} \; + +# clean up 'bundles': ditto +find $HOME/bundles -mindepth 1 -maxdepth 1 -type d -ctime +7 \ + \! -name "$live_bundle" -exec rm -r {} \; diff --git a/scripts/compare-file.js b/scripts/compare-file.js new file mode 100644 index 0000000000..f53275ebfa --- /dev/null +++ b/scripts/compare-file.js @@ -0,0 +1,10 @@ +const fs = require("fs"); + +if (process.argv.length < 4) throw new Error("Missing source and target file arguments"); + +const sourceFile = fs.readFileSync(process.argv[2], 'utf8'); +const targetFile = fs.readFileSync(process.argv[3], 'utf8'); + +if (sourceFile !== targetFile) { + throw new Error("Files do not match"); +} diff --git a/scripts/copy-res.js b/scripts/copy-res.js index abfd18a26c..aa4ece9f6e 100755 --- a/scripts/copy-res.js +++ b/scripts/copy-res.js @@ -1,5 +1,7 @@ #!/usr/bin/env node +const loaderUtils = require("loader-utils"); + // copies the resources into the webapp directory. // @@ -7,33 +9,42 @@ // a translation in the app (because having a translation with only // 3 strings translated is just frustrating) // This could readily be automated, but it's nice to explicitly -// control when we languages are available. +// control when new languages are available. const INCLUDE_LANGS = [ + {'value': 'bg', 'label': 'Български'}, {'value': 'ca', 'label': 'Català'}, + {'value': 'cs', 'label': 'čeština'}, {'value': 'da', 'label': 'Dansk'}, {'value': 'de_DE', 'label': 'Deutsch'}, + {'value': 'el', 'label': 'Ελληνικά'}, {'value': 'en_EN', 'label': 'English'}, {'value': 'en_US', 'label': 'English (US)'}, - {'value': 'el', 'label': 'Ελληνικά'}, {'value': 'eo', 'label': 'Esperanto'}, {'value': 'es', 'label': 'Español'}, {'value': 'eu', 'label': 'Euskara'}, {'value': 'fi', 'label': 'Suomi'}, {'value': 'fr', 'label': 'Français'}, + {'value': 'gl', 'label': 'Galego'}, {'value': 'hu', 'label': 'Magyar'}, + {'value': 'it', 'label': 'Italiano'}, + {'value': 'ja', 'label': '日本語'}, {'value': 'ko', 'label': '한국어'}, {'value': 'lv', 'label': 'Latviešu'}, {'value': 'nb_NO', 'label': 'Norwegian Bokmål'}, {'value': 'nl', 'label': 'Nederlands'}, + {'value': 'nn', 'label': 'Norsk Nynorsk'}, {'value': 'pl', 'label': 'Polski'}, {'value': 'pt', 'label': 'Português'}, {'value': 'pt_BR', 'label': 'Português do Brasil'}, {'value': 'ru', 'label': 'Русский'}, - {'value': 'sv', 'label': 'Svenska'}, {'value': 'sk', 'label': 'Slovenčina'}, - {'value': 'th', 'label': 'ไทย'}, + {'value': 'sq', 'label': 'Shqip'}, + {'value': 'sr', 'label': 'српски'}, + {'value': 'sv', 'label': 'Svenska'}, {'value': 'te', 'label': 'తెలుగు'}, - {'value': 'tr', 'label': 'Türk'}, + {'value': 'th', 'label': 'ไทย'}, + {'value': 'tr', 'label': 'Türkçe'}, + {'value': 'vls', 'label': 'West-Vlaams'}, {'value': 'zh_Hans', 'label': '简体中文'}, // simplified chinese {'value': 'zh_Hant', 'label': '繁體中文'}, // traditional chinese ]; @@ -43,23 +54,15 @@ const INCLUDE_LANGS = [ // "dest/b/...". const COPY_LIST = [ ["res/manifest.json", "webapp"], - ["res/home.html", "webapp"], - ["res/home-status.html", "webapp"], - ["res/home/**", "webapp/home"], - ["res/{media,vector-icons}/**", "webapp"], - ["res/flags/*", "webapp/flags/"], - ["src/skins/vector/{fonts,img,themes}/**", "webapp"], - ["node_modules/emojione/assets/svg/*", "webapp/emojione/svg/"], - ["node_modules/emojione/assets/png/*", "webapp/emojione/png/"], + ["res/welcome.html", "webapp"], + ["res/welcome/**", "webapp/welcome"], + ["res/themes/**", "webapp/themes"], + ["res/vector-icons/**", "webapp/vector-icons"], + ["node_modules/matrix-react-sdk/res/media/**", "webapp/media"], + ["node_modules/olm/olm_legacy.js", "webapp", { directwatch: 1 }], ["./config.json", "webapp", { directwatch: 1 }], ]; -INCLUDE_LANGS.forEach(function(l) { - COPY_LIST.push([ - l.value, "webapp/i18n/", { lang: 1 }, - ]); -}); - const parseArgs = require('minimist'); const Cpx = require('cpx'); const chokidar = require('chokidar'); @@ -70,8 +73,8 @@ const argv = parseArgs( process.argv.slice(2), {} ); -var watch = argv.w; -var verbose = argv.v; +const watch = argv.w; +const verbose = argv.v; function errCheck(err) { if (err) { @@ -129,28 +132,11 @@ function next(i, err) { .on('change', copy) .on('ready', cb) .on('error', errCheck); - } else if (opts.lang) { - const reactSdkFile = 'node_modules/matrix-react-sdk/src/i18n/strings/' + source + '.json'; - const riotWebFile = 'src/i18n/strings/' + source + '.json'; - - const translations = {}; - const makeLang = () => { genLangFile(source, dest) }; - [reactSdkFile, riotWebFile].forEach(function(f) { - chokidar.watch(f) - .on('add', makeLang) - .on('change', makeLang) - //.on('ready', cb) We'd have to do this when both files are ready - .on('error', errCheck); - }); - next(i + 1, err); } else { cpx.on('watch-ready', cb); cpx.on("watch-error", cb); cpx.watch(); } - } else if (opts.lang) { - genLangFile(source, dest); - next(i + 1, err); } else { cpx.copy(cb); } @@ -169,29 +155,36 @@ function genLangFile(lang, dest) { JSON.parse(fs.readFileSync(f).toString()) ); } catch (e) { - console.error("Failed: "+f, e); + console.error("Failed: " + f, e); throw e; } } }); - translations = weblateToCounterpart(translations) + translations = weblateToCounterpart(translations); - fs.writeFileSync(dest + lang + '.json', JSON.stringify(translations, null, 4)); + const json = JSON.stringify(translations, null, 4); + const jsonBuffer = Buffer.from(json); + const digest = loaderUtils.getHashDigest(jsonBuffer, null, null, 7); + const filename = `${lang}.${digest}.json`; + + fs.writeFileSync(dest + filename, json); if (verbose) { - console.log("Generated language file: " + lang); + console.log("Generated language file: " + filename); } + + return filename; } -function genLangList() { +function genLangList(langFileMap) { const languages = {}; INCLUDE_LANGS.forEach(function(lang) { const normalizedLanguage = lang.value.toLowerCase().replace("_", "-"); const languageParts = normalizedLanguage.split('-'); if (languageParts.length == 2 && languageParts[0] == languageParts[1]) { - languages[languageParts[0]] = {'fileName': lang.value + '.json', 'label': lang.label}; + languages[languageParts[0]] = {'fileName': langFileMap[lang.value], 'label': lang.label}; } else { - languages[normalizedLanguage] = {'fileName': lang.value + '.json', 'label': lang.label}; + languages[normalizedLanguage] = {'fileName': langFileMap[lang.value], 'label': lang.label}; } }); fs.writeFile('webapp/i18n/languages.json', JSON.stringify(languages, null, 4), function(err) { @@ -239,5 +232,50 @@ function weblateToCounterpart(inTrs) { return outTrs; } -genLangList(); +/** +watch the input files for a given language, +regenerate the file, adding its content-hashed filename to langFileMap +and regenerating languages.json with the new filename +*/ +function watchLanguage(lang, dest, langFileMap) { + const reactSdkFile = 'node_modules/matrix-react-sdk/src/i18n/strings/' + lang + '.json'; + const riotWebFile = 'src/i18n/strings/' + lang + '.json'; + + // XXX: Use a debounce because for some reason if we read the language + // file immediately after the FS event is received, the file contents + // appears empty. Possibly https://github.com/nodejs/node/issues/6112 + let makeLangDebouncer; + const makeLang = () => { + if (makeLangDebouncer) { + clearTimeout(makeLangDebouncer); + } + makeLangDebouncer = setTimeout(() => { + const filename = genLangFile(lang, dest); + langFileMap[lang]=filename; + genLangList(langFileMap); + }, 500); + }; + + [reactSdkFile, riotWebFile].forEach(function(f) { + chokidar.watch(f) + .on('add', makeLang) + .on('change', makeLang) + .on('error', errCheck); + }); +} + +// language resources +const I18N_DEST = "webapp/i18n/"; +const I18N_FILENAME_MAP = INCLUDE_LANGS.reduce((m, l) => { + const filename = genLangFile(l.value, I18N_DEST); + m[l.value] = filename; + return m; +}, {}); +genLangList(I18N_FILENAME_MAP); + +if (watch) { + INCLUDE_LANGS.forEach(l => watchLanguage(l.value, I18N_DEST, I18N_FILENAME_MAP)); +} + +// non-language resources next(0); diff --git a/scripts/deploy.py b/scripts/deploy.py index e8fd9aa455..33aa0af017 100755 --- a/scripts/deploy.py +++ b/scripts/deploy.py @@ -166,7 +166,7 @@ if __name__ == "__main__": ) ) parser.add_argument( - "--include", nargs='*', default='./config*.json', help=( + "--include", nargs='*', default=['./config*.json'], help=( "Symlink these files into the root of the deployed tarball. \ Useful for config files and home pages. Supports glob syntax. \ (Default: '%(default)s')" diff --git a/scripts/docker-link-repos.sh b/scripts/docker-link-repos.sh new file mode 100644 index 0000000000..9f17188ed6 --- /dev/null +++ b/scripts/docker-link-repos.sh @@ -0,0 +1,30 @@ +#!/bin/sh + +set -ex + +if [ $USE_CUSTOM_SDKS == false ] +then + echo "skipping react-sdk and js-sdk installs: USE_CUSTOM_SDKS is false" + exit 0 +fi + +echo "Linking js-sdk" +git clone $JS_SDK_REPO js-sdk +cd js-sdk +git checkout $JS_SDK_BRANCH +yarn link +yarn --network-timeout=100000 install +cd ../ + +echo "Linking react-sdk" +git clone $REACT_SDK_REPO react-sdk +cd react-sdk +git checkout $REACT_SDK_BRANCH +yarn link +yarn link matrix-js-sdk +yarn --network-timeout=100000 install +cd ../ + +echo "Setting up riot-web with react-sdk and js-sdk packages" +yarn link matrix-js-sdk +yarn link matrix-react-sdk diff --git a/scripts/electron-package.sh b/scripts/electron-package.sh index f0ba941478..7a8a5ca7b7 100755 --- a/scripts/electron-package.sh +++ b/scripts/electron-package.sh @@ -1,26 +1,30 @@ #!/bin/bash -set -e - usage() { - echo "Usage: $0 -v -c [-n]" + echo "Usage: $0 -v -d [-n]" echo echo "version: commit-ish to check out and build" - echo "config file: a path to a json config file to" - echo "ship with the build. In addition, update_base_url:" - echo "from this file is used to set up auto-update." + echo "config directory: a path to a directory containing" + echo "config.json, a json config file to ship with the build" + echo "and env.sh, a file to source environment variables" + echo "from." echo "-n: build with no config file." echo - echo "Values may also be passed as environment variables" + echo "The update_base_url value from config.json is used to set up auto-update." + echo + echo "Environment variables:" + echo " OSSLSIGNCODE_SIGNARGS: Arguments to pass to osslsigncode when signing" + echo " NOTARIZE_APPLE_ID: Apple ID to use for notarisation. The password for" + echo " this account must be set in NOTARIZE_CREDS in the keychain." } -conffile= +confdir= version= skipcfg=0 -while getopts "c:v:n" opt; do +while getopts "d:v:n" opt; do case $opt in - c) - conffile=$OPTARG + d) + confdir=$OPTARG ;; v) version=$OPTARG @@ -42,6 +46,8 @@ if [ -z "$version" ]; then exit fi +conffile="$confdir/config.json" + if [ -z "$conffile" ] && [ "$skipcfg" = 0 ]; then echo "No config file given. Use -c to supply a config file or" echo "-n to build with no config file (and no auto update)." @@ -67,6 +73,31 @@ if [ ! -f package.json ]; then exit fi +[ -f "$confdir/env.sh" ] && . "$confdir/env.sh" + +if [ -z "$NOTARIZE_APPLE_ID" ]; then + echo "NOTARIZE_APPLE_ID is not set" + exit +fi + +osslsigncode -h 2> /dev/null +if [ $? -ne 255 ]; then # osslsigncode exits with 255 after printing usage... + echo "osslsigncode not found" + exit +fi + +# Test that altool can get its credentials for notarising the mac app +xcrun altool -u "$NOTARIZE_APPLE_ID" -p '@keychain:NOTARIZE_CREDS' --list-apps || exit + +# Get the token password: we'll need it later, but get it now so we fail early if it's not there +token_password=`security find-generic-password -s riot_signing_token -w` +if [ $? -ne 0 ]; then + echo "riot_signing_token not found in keychain" + exit +fi + +set -e + echo "Building $version using Update base URL $update_base_url" projdir=`pwd` @@ -85,8 +116,13 @@ if [ -n "$conffile" ]; then pushd "$builddir" fi -npm install -npm run build:electron +# We use Git branch / commit dependencies for some packages, and Yarn seems +# to have a hard time getting that right. See also +# https://github.com/yarnpkg/yarn/issues/4734. As a workaround, we clean the +# global cache here to ensure we get the right thing. +yarn cache clean +yarn install +yarn build:electron popd @@ -100,34 +136,50 @@ mkdir -p "$projdir/electron_app/dist/unsigned/" # Install packages: what the user downloads the first time, # (DMGs for mac, exe installer for windows) mkdir -p "$pubdir/install/macos" -cp $distdir/mac/*.dmg "$pubdir/install/macos/" +cp $distdir/*.dmg "$pubdir/install/macos/" -# Windows installers go to the dist dir because they need signing +# Windows installers need signing, this comes later mkdir -p "$pubdir/install/win32/ia32/" -cp $distdir/win-ia32/*.exe "$projdir/electron_app/dist/unsigned/" +mkdir -p "$projdir/electron_app/dist/unsigned/ia32/" mkdir -p "$pubdir/install/win32/x64/" -cp $distdir/win/*.exe "$projdir/electron_app/dist/unsigned/" +mkdir -p "$projdir/electron_app/dist/unsigned/x64/" # Packages for auto-update mkdir -p "$pubdir/update/macos" -cp $distdir/mac/*.zip "$pubdir/update/macos/" +cp $distdir/*-mac.zip "$pubdir/update/macos/" echo "$vername" > "$pubdir/update/macos/latest" mkdir -p "$pubdir/update/win32/ia32/" -cp $distdir/win-ia32/*.nupkg "$pubdir/update/win32/ia32/" -cp $distdir/win-ia32/RELEASES "$pubdir/update/win32/ia32/" +cp $distdir/squirrel-windows-ia32/*.nupkg "$pubdir/update/win32/ia32/" +cp $distdir/squirrel-windows-ia32/RELEASES "$pubdir/update/win32/ia32/" mkdir -p "$pubdir/update/win32/x64/" -cp $distdir/win/*.nupkg "$pubdir/update/win32/x64/" -cp $distdir/win/RELEASES "$pubdir/update/win32/x64/" +cp $distdir/squirrel-windows/*.nupkg "$pubdir/update/win32/x64/" +cp $distdir/squirrel-windows/RELEASES "$pubdir/update/win32/x64/" -# Move the debs to the main project dir's dist folder -cp $distdir/*.deb "$projdir/electron_app/dist/" +# Move the deb to the main project dir's dist folder +# (just the 64 bit one - the 32 bit one still gets built because +# it's one arch argument for all platforms and we still want 32 bit +# windows, but 32 bit linux is unsupported as of electron 4 and no +# longer appears to work). +cp $distdir/*_amd64.deb "$projdir/electron_app/dist/" + +# Now we sign the windows installer executables (as opposed to the main binary which +# is signed in the electron afteSign hook) +echo "Signing Windows installers..." + +exe32=( "$distdir"/squirrel-windows-ia32/*.exe ) +basename32=`basename "$exe32"` +osslsigncode sign $OSSLSIGNCODE_SIGNARGS -pass "$token_password" -in "$exe32" -out "$projdir/electron_app/pub/install/win32/ia32/$basename32" + +exe64=( "$distdir"/squirrel-windows/*.exe ) +basename64=`basename "$exe64"` +osslsigncode sign $OSSLSIGNCODE_SIGNARGS -pass "$token_password" -in "$exe64" -out "$projdir/electron_app/pub/install/win32/x64/$basename64" + +echo "Installers signed" rm -rf "$builddir" -echo "Unsigned Windows installers have been placed in electron_app/dist/unsigned/ - sign them," -echo "or just copy them to "$pubdir/install/win32/\/"" -echo "Once you've done this, $pubdir can be hosted on your web server." +echo "$pubdir can now be hosted on your web server." echo "deb archives are in electron_app/dist/ - these should be added into your debian repository" diff --git a/scripts/electron_afterSign.js b/scripts/electron_afterSign.js new file mode 100644 index 0000000000..8966ca7f99 --- /dev/null +++ b/scripts/electron_afterSign.js @@ -0,0 +1,76 @@ +const { notarize } = require('electron-notarize'); +const { exec, execFile } = require('child_process'); +const fs = require('fs'); +const shellescape = require('shell-escape'); + +exports.default = async function(context) { + const { electronPlatformName, appOutDir } = context; + + if (electronPlatformName === 'darwin') { + const appName = context.packager.appInfo.productFilename; + // We get the password from keychain. The keychain stores + // user IDs too, but apparently altool can't get the user ID + // from the keychain, so we need to get it from the environment. + const userId = process.env.NOTARIZE_APPLE_ID; + if (userId === undefined) { + throw new Exception("User ID not found. Set NOTARIZE_APPLE_ID."); + } + + console.log("Notarising macOS app. This may be some time."); + return await notarize({ + appBundleId: 'im.riot.app', + appPath: `${appOutDir}/${appName}.app`, + appleId: userId, + appleIdPassword: '@keychain:NOTARIZE_CREDS', + }); + } else if (electronPlatformName === 'win32') { + // This signs the actual Riot executable + const appName = context.packager.appInfo.productFilename; + + // get the token passphrase from the keychain + const tokenPassphrase = await new Promise((resolve, reject) => { + execFile( + 'security', + ['find-generic-password', '-s', 'riot_signing_token', '-w'], + {}, + (err, stdout) => { + if (err) { + reject(err); + } else { + resolve(stdout.trim()); + } + }, + ); + }); + + return new Promise((resolve, reject) => { + let cmdLine = 'osslsigncode sign '; + if (process.env.OSSLSIGNCODE_SIGNARGS) { + cmdLine += process.env.OSSLSIGNCODE_SIGNARGS + ' '; + } + const tmpFile = 'tmp_' + Math.random().toString(36).substring(2, 15) + '.exe'; + cmdLine += shellescape([ + '-pass', tokenPassphrase, + '-in', `${appOutDir}/${appName}.exe`, + '-out', `${appOutDir}/${tmpFile}`, + ]); + + const signproc = exec(cmdLine, {}, (error, stdout) => { + console.log(stdout); + }); + signproc.on('exit', (code) => { + if (code !== 0) { + reject("osslsigncode failed with code " + code); + return; + } + fs.rename(`${appOutDir}/${tmpFile}`, `${appOutDir}/${appName}.exe`, (err) => { + if (err) { + reject(err); + } else { + resolve(); + } + }); + }); + }); + } +}; diff --git a/scripts/fetch-develop.deps.sh b/scripts/fetch-develop.deps.sh index e2d40341a0..e741971842 100755 --- a/scripts/fetch-develop.deps.sh +++ b/scripts/fetch-develop.deps.sh @@ -6,59 +6,66 @@ # the branch the current checkout is on, use that branch. Otherwise, # use develop. -set -e +set -ex GIT_CLONE_ARGS=("$@") - -# Look in the many different CI env vars for which branch we're -# building -if [[ "$TRAVIS" == true ]]; then - curbranch="${TRAVIS_PULL_REQUEST_BRANCH:-$TRAVIS_BRANCH}" -else - # ghprbSourceBranch for jenkins github pull request builder - # GIT_BRANCH for other jenkins builds - curbranch="${ghprbSourceBranch:-$GIT_BRANCH}" - # Otherwise look at the actual branch we're on - if [ -z "$curbranch" ] - then - curbranch=`git rev-parse --abbrev-ref HEAD` - fi -fi - -# Chop 'origin' off the start as jenkins ends up using -# branches on the origin, but this doesn't work if we -# specify the branch when cloning. -curbranch=${curbranch#origin/} - -echo "Determined branch to be $curbranch" +[ -z "$defbranch" ] && defbranch="develop" # clone a specific branch of a github repo function clone() { org=$1 repo=$2 branch=$3 - git clone https://github.com/$org/$repo.git $repo --branch $branch \ - "${GIT_CLONE_ARGS[@]}" + + # Chop 'origin' off the start as jenkins ends up using + # branches on the origin, but this doesn't work if we + # specify the branch when cloning. + branch=${branch#origin/} + + if [ -n "$branch" ] + then + echo "Trying to use $org/$repo#$branch" + git clone git://github.com/$org/$repo.git $repo --branch $branch \ + "${GIT_CLONE_ARGS[@]}" + return $? + fi + return 1 } function dodep() { - org=$1 - repo=$2 - rm -rf $repo - clone $org $repo $curbranch || { - [ "$curbranch" != 'develop' ] && clone $org $repo develop - } || return $? + deforg=$1 + defrepo=$2 + rm -rf $defrepo - echo "$repo set to branch "`git -C "$repo" rev-parse --abbrev-ref HEAD` + # Try the PR author's branch in case it exists on the deps as well. + # Try the target branch of the push or PR. + # Use the default branch as the last resort. + if [[ "$BUILDKITE" == true ]]; then + # If BUILDKITE_BRANCH is set, it will contain either: + # * "branch" when the author's branch and target branch are in the same repo + # * "author:branch" when the author's branch is in their fork + # We can split on `:` into an array to check. + BUILDKITE_BRANCH_ARRAY=(${BUILDKITE_BRANCH//:/ }) + if [[ "${#BUILDKITE_BRANCH_ARRAY[@]}" == "2" ]]; then + prAuthor=${BUILDKITE_BRANCH_ARRAY[0]} + prBranch=${BUILDKITE_BRANCH_ARRAY[1]} + else + prAuthor=$deforg + prBranch=$BUILDKITE_BRANCH + fi + clone $prAuthor $defrepo $prBranch || + clone $deforg $defrepo $BUILDKITE_PULL_REQUEST_BASE_BRANCH || + clone $deforg $defrepo $defbranch || + return $? + else + clone $deforg $defrepo $ghprbSourceBranch || + clone $deforg $defrepo $GIT_BRANCH || + clone $deforg $defrepo `git rev-parse --abbrev-ref HEAD` || + clone $deforg $defrepo $defbranch || + return $? + fi - mkdir -p node_modules - rm -r "node_modules/$repo" 2>/dev/null || true - ln -sv "../$repo" node_modules/ - - ( - cd $repo - npm install - ) + echo "$defrepo set to branch "`git -C "$defrepo" rev-parse --abbrev-ref HEAD` } ############################## @@ -68,6 +75,13 @@ echo 'Setting up matrix-js-sdk' dodep matrix-org matrix-js-sdk +pushd matrix-js-sdk +yarn link +yarn install +popd + +yarn link matrix-js-sdk + echo -en 'travis_fold:end:matrix-js-sdk\r' ############################## @@ -77,22 +91,21 @@ echo 'Setting up matrix-react-sdk' dodep matrix-org matrix-react-sdk -# replace the version of js-sdk that got pulled into react-sdk with a symlink -# to our version. Make sure to do this *after* doing 'npm i' in react-sdk, -# otherwise npm helpfully moves another-json from matrix-js-sdk/node_modules -# into matrix-react-sdk/node_modules. -# -# (note this matches the instructions in the README.) -rm -r node_modules/matrix-react-sdk/node_modules/matrix-js-sdk -ln -s ../../matrix-js-sdk node_modules/matrix-react-sdk/node_modules/ +pushd matrix-react-sdk +yarn link +yarn link matrix-js-sdk +yarn install +popd + +yarn link matrix-react-sdk echo -en 'travis_fold:end:matrix-react-sdk\r' ############################## -# Link the reskindex binary in place: if we used npm link, -# npm would do this for us, but we don't because we'd have -# to define the npm prefix somewhere so it could put the +# Link the reskindex binary in place: if we used `yarn link`, +# Yarn would do this for us, but we don't because we'd have +# to define the Yarn binary prefix somewhere so it could put the # intermediate symlinks there. Instead, we do it ourselves. mkdir -p node_modules/.bin ln -sfv ../matrix-react-sdk/scripts/reskindex.js node_modules/.bin/reskindex diff --git a/scripts/jenkins.sh b/scripts/jenkins.sh deleted file mode 100755 index 7b5b4c8e2e..0000000000 --- a/scripts/jenkins.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/bash - -set -e - -export NVM_DIR="$HOME/.nvm" -[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" -nvm use 6 - -set -x - -# check out corresponding branches of dependencies. -# -# clone the deps with depth 1: we know we will only ever need that one -# commit. -`dirname $0`/fetch-develop.deps.sh --depth 1 - -npm install - -# apparently npm 3.10.3 on node 6.4.0 doesn't upgrade #develop target with npm install unless explicitly asked. -npm install olm - -# install olm. A naive 'npm i ./olm/olm-*.tgz' fails because it uses the url -# from our package.json (or even matrix-js-sdk's) in preference. -# -# disabled for now, to avoid the annoying scenario of a release doing something -# different to /develop. Instead, add it to the 'npm install' list above. -# -- rav 2016/02/03 -#tar -C olm -xz < olm/olm-*.tgz -#rm -r node_modules/olm -#cp -r olm/package node_modules/olm - -# run the mocha tests -npm run test - -# run eslint -npm run lintall -- -f checkstyle -o eslint.xml || true - -rm dist/riot-*.tar.gz || true # rm previous artifacts without failing if it doesn't exist - -# Since the deps are fetched from git, we can rev-parse -REACT_SHA=$(cd node_modules/matrix-react-sdk; git rev-parse --short=12 HEAD) -JSSDK_SHA=$(cd node_modules/matrix-js-sdk; git rev-parse --short=12 HEAD) - -VECTOR_SHA=$(git rev-parse --short=12 HEAD) # use the ACTUAL SHA rather than assume develop - -DIST_VERSION=$VECTOR_SHA-react-$REACT_SHA-js-$JSSDK_SHA scripts/package.sh -d diff --git a/scripts/make-icons.sh b/scripts/make-icons.sh index 19e48895df..2db5293df3 100755 --- a/scripts/make-icons.sh +++ b/scripts/make-icons.sh @@ -1,4 +1,10 @@ #!/bin/bash +# +# Converts an svg logo into the various image resources required by +# the various platforms deployments. +# +# On debian-based systems you need these deps: +# apt-get install xmlstarlet python3-cairosvg icnsutils if [ $# != 1 ] then @@ -52,7 +58,23 @@ cp "$tmpdir/256.png" "$tmpdir/Riot.iconset/icon_256x256.png" cp "$tmpdir/512.png" "$tmpdir/Riot.iconset/icon_256x256@2x.png" cp "$tmpdir/512.png" "$tmpdir/Riot.iconset/icon_512x512.png" cp "$tmpdir/1024.png" "$tmpdir/Riot.iconset/icon_512x512@2x.png" -iconutil -c icns -o electron_app/build/icon.icns "$tmpdir/Riot.iconset" + +if [ -x "$(command -v iconutil)" ]; then + # available on macos + iconutil -c icns -o electron_app/build/icon.icns "$tmpdir/Riot.iconset" +elif [ -x "$(command -v png2icns)" ]; then + # available on linux + # png2icns is more finicky about its input than iconutil + # 1. it doesn't support a 64x64 (aka 32x32@2x) + # 2. it doesn't like duplicates (128x128@2x == 256x256) + rm "$tmpdir/Riot.iconset/icon_128x128@2x.png" + rm "$tmpdir/Riot.iconset/icon_256x256@2x.png" + rm "$tmpdir/Riot.iconset/icon_16x16@2x.png" + rm "$tmpdir/Riot.iconset/icon_32x32@2x.png" + png2icns electron_app/build/icon.icns "$tmpdir"/Riot.iconset/*png +else + echo "WARNING: Unsupported platform. Skipping icns build" +fi cp "$tmpdir/36.png" "res/vector-icons/android-chrome-36x36.png" cp "$tmpdir/48.png" "res/vector-icons/android-chrome-48x48.png" diff --git a/scripts/package.sh b/scripts/package.sh index 23d0925b05..ce7e00c1c5 100755 --- a/scripts/package.sh +++ b/scripts/package.sh @@ -13,16 +13,19 @@ else version=`git describe --dirty --tags || echo unknown` fi -npm run clean -npm run build$dev +yarn clean +yarn build$dev # include the sample config in the tarball. Arguably this should be done by -# `npm run build`, but it's just too painful. +# `yarn build`, but it's just too painful. cp config.sample.json webapp/ mkdir -p dist cp -r webapp riot-$version +# Just in case you have a local config, remove it before packaging +rm riot-$version/config.json || true + # if $version looks like semver with leading v, strip it before writing to file if [[ ${version} =~ ^v[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+(-.+)?$ ]]; then echo ${version:1} > riot-$version/version diff --git a/scripts/redeploy.py b/scripts/redeploy.py index 2dac2931fa..6e9d29c382 100755 --- a/scripts/redeploy.py +++ b/scripts/redeploy.py @@ -2,7 +2,8 @@ # # auto-deploy script for https://riot.im/develop # -# Listens for HTTP hits. When it gets one, downloads the artifact from jenkins +# Listens for buildkite webhook pokes (https://buildkite.com/docs/apis/webhooks) +# When it gets one, downloads the artifact from buildkite # and deploys it as the new version. # # Requires the following python packages: @@ -16,6 +17,10 @@ import time import traceback from urlparse import urljoin import glob +import re +import shutil +import threading +from Queue import Queue from flask import Flask, jsonify, request, abort @@ -23,10 +28,13 @@ from deploy import Deployer, DeployException app = Flask(__name__) -arg_jenkins_url = None deployer = None arg_extract_path = None arg_symlink = None +arg_webhook_token = None +arg_api_token = None + +workQueue = Queue() def create_symlink(source, linkname): try: @@ -39,81 +47,117 @@ def create_symlink(source, linkname): else: raise e +def req_headers(): + return { + "Authorization": "Bearer %s" % (arg_api_token,), + } + +# Buildkite considers a poke to have failed if it has to wait more than 10s for +# data (any data, not just the initial response) and it normally takes longer than +# that to download an artifact from buildkite. Apparently there is no way in flask +# to finish the response and then keep doing stuff, so instead this has to involve +# threading. Sigh. +def worker_thread(): + while True: + toDeploy = workQueue.get() + deploy_buildkite_artifact(*toDeploy) + @app.route("/", methods=["POST"]) -def on_receive_jenkins_poke(): - # { - # "name": "VectorWebDevelop", - # "build": { - # "number": 8 - # } - # } +def on_receive_buildkite_poke(): + got_webhook_token = request.headers.get('X-Buildkite-Token') + if got_webhook_token != arg_webbook_token: + print("Denying request with incorrect webhook token: %s" % (got_webhook_token,)) + abort(400, "Incorrect webhook token") + return + + required_api_prefix = None + if arg_buildkite_org is not None: + required_api_prefix = 'https://api.buildkite.com/v2/organizations/%s' % (arg_buildkite_org,) + incoming_json = request.get_json() if not incoming_json: abort(400, "No JSON provided!") return print("Incoming JSON: %s" % (incoming_json,)) - job_name = incoming_json.get("name") - if not isinstance(job_name, basestring): - abort(400, "Bad job name: %s" % (job_name,)) + event = incoming_json.get("event") + if event is None: + abort(400, "No 'event' specified") return - build_num = incoming_json.get("build", {}).get("number", 0) - if not build_num or build_num <= 0 or not isinstance(build_num, int): - abort(400, "Missing or bad build number") + if event == 'ping': + print("Got ping request - responding") + return jsonify({'response': 'pong!'}) + + if event != 'build.finished': + print("Rejecting '%s' event") + abort(400, "Unrecognised event") return - return fetch_jenkins_build(job_name, build_num) - -def fetch_jenkins_build(job_name, build_num): - artifact_url = urljoin( - arg_jenkins_url, "job/%s/%s/api/json" % (job_name, build_num) - ) - artifact_response = requests.get(artifact_url).json() - - # { - # "actions": [], - # "artifacts": [ - # { - # "displayPath": "vector-043f6991a4ed-react-20f77d1224ef-js-0a7efe3e8bd5.tar.gz", - # "fileName": "vector-043f6991a4ed-react-20f77d1224ef-js-0a7efe3e8bd5.tar.gz", - # "relativePath": "vector-043f6991a4ed-react-20f77d1224ef-js-0a7efe3e8bd5.tar.gz" - # } - # ], - # "building": false, - # "description": null, - # "displayName": "#11", - # "duration": 137976, - # "estimatedDuration": 132008, - # "executor": null, - # "fullDisplayName": "VectorWebDevelop #11", - # "id": "11", - # "keepLog": false, - # "number": 11, - # "queueId": 12254, - # "result": "SUCCESS", - # "timestamp": 1454432640079, - # "url": "http://matrix.org/jenkins/job/VectorWebDevelop/11/", - # "builtOn": "", - # "changeSet": {}, - # "culprits": [] - # } - if artifact_response.get("result") != "SUCCESS": - abort(404, "Not deploying. Build was not marked as SUCCESS.") + build_obj = incoming_json.get("build") + if build_obj is None: + abort(400, "No 'build' object") return - if len(artifact_response.get("artifacts", [])) != 1: - abort(404, "Not deploying. Build has an unexpected number of artifacts.") + build_url = build_obj.get('url') + if build_url is None: + abort(400, "build has no url") return - tar_gz_path = artifact_response["artifacts"][0]["relativePath"] - if not tar_gz_path.endswith(".tar.gz"): - abort(404, "Not deploying. Artifact is not a .tar.gz file") + if required_api_prefix is not None and not build_url.startswith(required_api_prefix): + print("Denying poke for build url with incorrect prefix: %s" % (build_url,)) + abort(400, "Invalid build url") return - tar_gz_url = urljoin( - arg_jenkins_url, "job/%s/%s/artifact/%s" % (job_name, build_num, tar_gz_path) - ) + build_num = build_obj.get('number') + if build_num is None: + abort(400, "build has no number") + return + + pipeline_obj = incoming_json.get("pipeline") + if pipeline_obj is None: + abort(400, "No 'pipeline' object") + return + + pipeline_name = pipeline_obj.get('name') + if pipeline_name is None: + abort(400, "pipeline has no name") + return + + artifacts_url = build_url + "/artifacts" + artifacts_resp = requests.get(artifacts_url, headers=req_headers()) + artifacts_resp.raise_for_status() + artifacts_array = artifacts_resp.json() + + artifact_to_deploy = None + for artifact in artifacts_array: + if re.match(r"dist/.*.tar.gz", artifact['path']): + artifact_to_deploy = artifact + if artifact_to_deploy is None: + print("No suitable artifacts found") + return jsonify({}) + + # double paranoia check: make sure the artifact is on the right org too + if required_api_prefix is not None and not artifact_to_deploy['url'].startswith(required_api_prefix): + print("Denying poke for build url with incorrect prefix: %s" % (artifact_to_deploy['url'],)) + abort(400, "Refusing to deploy artifact from URL %s", artifact_to_deploy['url']) + return + + # there's no point building up a queue of things to deploy, so if there are any pending jobs, + # remove them + while not workQueue.empty(): + try: + workQueue.get(False) + except: + pass + workQueue.put([artifact_to_deploy, pipeline_name, build_num]) + + return jsonify({}) + +def deploy_buildkite_artifact(artifact, pipeline_name, build_num): + artifact_response = requests.get(artifact['url'], headers=req_headers()) + artifact_response.raise_for_status() + artifact_obj = artifact_response.json() # we extract into a directory based on the build number. This avoids the # problem of multiple builds building the same git version and thus having @@ -122,18 +166,16 @@ def fetch_jenkins_build(job_name, build_num): # a good deploy with a bad one # (b) we'll be overwriting the live deployment, which means people might # see half-written files. - build_dir = os.path.join(arg_extract_path, "%s-#%s" % (job_name, build_num)) + build_dir = os.path.join(arg_extract_path, "%s-#%s" % (pipeline_name, build_num)) try: - extracted_dir = deploy_tarball(tar_gz_url, build_dir) + extracted_dir = deploy_tarball(artifact_obj, build_dir) except DeployException as e: traceback.print_exc() abort(400, e.message) create_symlink(source=extracted_dir, linkname=arg_symlink) - return jsonify({}) - -def deploy_tarball(tar_gz_url, build_dir): +def deploy_tarball(artifact, build_dir): """Download a tarball from jenkins and unpack it Returns: @@ -145,20 +187,25 @@ def deploy_tarball(tar_gz_url, build_dir): ) os.mkdir(build_dir) + print("Fetching artifact %s -> %s..." % (artifact['download_url'], artifact['filename'])) + + # Download the tarball here as buildkite needs auth to do this + # we don't pgp-sign buildkite artifacts, relying on HTTPS and buildkite + # not being evil. If that's not good enough for you, don't use riot.im/develop. + resp = requests.get(artifact['download_url'], stream=True, headers=req_headers()) + resp.raise_for_status() + with open(artifact['filename'], 'wb') as ofp: + shutil.copyfileobj(resp.raw, ofp) + print("...download complete. Deploying...") + # we rely on the fact that flask only serves one request at a time to # ensure that we do not overwrite a tarball from a concurrent request. - return deployer.deploy(tar_gz_url, build_dir) + return deployer.deploy(artifact['filename'], build_dir) if __name__ == "__main__": parser = argparse.ArgumentParser("Runs a Vector redeployment server.") - parser.add_argument( - "-j", "--jenkins", dest="jenkins", default="https://matrix.org/jenkins/", help=( - "The base URL of the Jenkins web server. This will be hit to get the\ - built artifacts (the .gz file) for redeploying." - ) - ) parser.add_argument( "-p", "--port", dest="port", default=4000, type=int, help=( "The port to listen on for requests from Jenkins." @@ -204,13 +251,33 @@ if __name__ == "__main__": ), ) + parser.add_argument( + "--webhook-token", dest="webhook_token", help=( + "Only accept pokes with this buildkite token." + ), required=True, + ) + + parser.add_argument( + "--api-token", dest="api_token", help=( + "API access token for buildkite. Require read_artifacts scope." + ), required=True, + ) + + # We require a matching webhook token, but because we take everything else + # about what to deploy from the poke body, we can be a little more paranoid + # and only accept builds / artifacts from a specific buildkite org + parser.add_argument( + "--org", dest="buildkite_org", help=( + "Lock down to this buildkite org" + ) + ) + args = parser.parse_args() - if args.jenkins.endswith("/"): # important for urljoin - arg_jenkins_url = args.jenkins - else: - arg_jenkins_url = args.jenkins + "/" arg_extract_path = args.extract arg_symlink = args.symlink + arg_webbook_token = args.webhook_token + arg_api_token = args.api_token + arg_buildkite_org = args.buildkite_org if not os.path.isdir(arg_extract_path): os.mkdir(arg_extract_path) @@ -222,25 +289,20 @@ if __name__ == "__main__": for include in args.include: deployer.symlink_paths.update({ os.path.basename(pth): pth for pth in glob.iglob(include) }) - - # we don't pgp-sign jenkins artifacts; instead we rely on HTTPS access to - # the jenkins server (and the jenkins server not being compromised and/or - # github not serving it compromised source). If that's not good enough for - # you, don't use riot.im/develop. - deployer.verify_signature = False - if args.tarball_uri is not None: build_dir = os.path.join(arg_extract_path, "test-%i" % (time.time())) deploy_tarball(args.tarball_uri, build_dir) else: print( - "Listening on port %s. Extracting to %s%s. Symlinking to %s. Jenkins URL: %s. Include files: %s" % + "Listening on port %s. Extracting to %s%s. Symlinking to %s. Include files: %s" % (args.port, arg_extract_path, " (clean after)" if deployer.should_clean else "", arg_symlink, - arg_jenkins_url, deployer.symlink_paths, ) ) - app.run(host="0.0.0.0", port=args.port, debug=True) + fred = threading.Thread(target=worker_thread) + fred.daemon = True + fred.start() + app.run(port=args.port, debug=False) diff --git a/scripts/yarn-sub.js b/scripts/yarn-sub.js new file mode 100644 index 0000000000..817ad33c92 --- /dev/null +++ b/scripts/yarn-sub.js @@ -0,0 +1,22 @@ +const path = require('path'); +const child_process = require('child_process'); + +const moduleName = process.argv[2]; +if (!moduleName) { + console.error("Expected module name"); + process.exit(1); +} + +const argString = process.argv.length > 3 ? process.argv.slice(3).join(" ") : ""; +if (!argString) { + console.error("Expected an yarn argument string to use"); + process.exit(1); +} + +const modulePath = path.dirname(require.resolve(`${moduleName}/package.json`)); + +child_process.execSync("yarn " + argString, { + env: process.env, + cwd: modulePath, + stdio: ['inherit', 'inherit', 'inherit'], +}); diff --git a/src/VectorConferenceHandler.js b/src/VectorConferenceHandler.js deleted file mode 100644 index 933f59937e..0000000000 --- a/src/VectorConferenceHandler.js +++ /dev/null @@ -1,135 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -"use strict"; - -import Promise from 'bluebird'; -var Matrix = require("matrix-js-sdk"); -var Room = Matrix.Room; -var CallHandler = require('matrix-react-sdk/lib/CallHandler'); - -// FIXME: This currently forces Vector to try to hit the matrix.org AS for conferencing. -// This is bad because it prevents people running their own ASes from being used. -// This isn't permanent and will be customisable in the future: see the proposal -// at docs/conferencing.md for more info. -var USER_PREFIX = "fs_"; -var DOMAIN = "matrix.org"; - -function ConferenceCall(matrixClient, groupChatRoomId) { - this.client = matrixClient; - this.groupRoomId = groupChatRoomId; - this.confUserId = module.exports.getConferenceUserIdForRoom(this.groupRoomId); -} - -ConferenceCall.prototype.setup = function() { - var self = this; - return this._joinConferenceUser().then(function() { - return self._getConferenceUserRoom(); - }).then(function(room) { - // return a call for *this* room to be placed. We also tack on - // confUserId to speed up lookups (else we'd need to loop every room - // looking for a 1:1 room with this conf user ID!) - var call = Matrix.createNewMatrixCall(self.client, room.roomId); - call.confUserId = self.confUserId; - call.groupRoomId = self.groupRoomId; - return call; - }); -}; - -ConferenceCall.prototype._joinConferenceUser = function() { - // Make sure the conference user is in the group chat room - var groupRoom = this.client.getRoom(this.groupRoomId); - if (!groupRoom) { - return Promise.reject("Bad group room ID"); - } - var member = groupRoom.getMember(this.confUserId); - if (member && member.membership === "join") { - return Promise.resolve(); - } - return this.client.invite(this.groupRoomId, this.confUserId); -}; - -ConferenceCall.prototype._getConferenceUserRoom = function() { - // Use an existing 1:1 with the conference user; else make one - var rooms = this.client.getRooms(); - var confRoom = null; - for (var i = 0; i < rooms.length; i++) { - var confUser = rooms[i].getMember(this.confUserId); - if (confUser && confUser.membership === "join" && - rooms[i].getJoinedMembers().length === 2) { - confRoom = rooms[i]; - break; - } - } - if (confRoom) { - return Promise.resolve(confRoom); - } - return this.client.createRoom({ - preset: "private_chat", - invite: [this.confUserId] - }).then(function(res) { - return new Room(res.room_id); - }); -}; - -/** - * Check if this user ID is in fact a conference bot. - * @param {string} userId The user ID to check. - * @return {boolean} True if it is a conference bot. - */ -module.exports.isConferenceUser = function(userId) { - if (userId.indexOf("@" + USER_PREFIX) !== 0) { - return false; - } - var base64part = userId.split(":")[0].substring(1 + USER_PREFIX.length); - if (base64part) { - var decoded = new Buffer(base64part, "base64").toString(); - // ! $STUFF : $STUFF - return /^!.+:.+/.test(decoded); - } - return false; -}; - -module.exports.getConferenceUserIdForRoom = function(roomId) { - // abuse browserify's core node Buffer support (strip padding ='s) - var base64RoomId = new Buffer(roomId).toString("base64").replace(/=/g, ""); - return "@" + USER_PREFIX + base64RoomId + ":" + DOMAIN; -}; - -module.exports.createNewMatrixCall = function(client, roomId) { - var confCall = new ConferenceCall( - client, roomId - ); - return confCall.setup(); -}; - -module.exports.getConferenceCallForRoom = function(roomId) { - // search for a conference 1:1 call for this group chat room ID - var activeCall = CallHandler.getAnyActiveCall(); - if (activeCall && activeCall.confUserId) { - var thisRoomConfUserId = module.exports.getConferenceUserIdForRoom( - roomId - ); - if (thisRoomConfUserId === activeCall.confUserId) { - return activeCall; - } - } - return null; -}; - -module.exports.ConferenceCall = ConferenceCall; - -module.exports.slot = 'conference'; diff --git a/src/components/structures/BottomLeftMenu.js b/src/components/structures/BottomLeftMenu.js deleted file mode 100644 index 5557e74b0f..0000000000 --- a/src/components/structures/BottomLeftMenu.js +++ /dev/null @@ -1,192 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2017 Vector Creations Ltd - -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. -*/ - -import React from 'react'; -import ReactDOM from 'react-dom'; -import sdk from 'matrix-react-sdk'; -import dis from 'matrix-react-sdk/lib/dispatcher'; -import Velocity from 'velocity-vector'; -import 'velocity-vector/velocity.ui'; -import SettingsStore from "matrix-react-sdk/lib/settings/SettingsStore"; - -const CALLOUT_ANIM_DURATION = 1000; - -module.exports = React.createClass({ - displayName: 'BottomLeftMenu', - - propTypes: { - collapsed: React.PropTypes.bool.isRequired, - }, - - getInitialState: function() { - return({ - directoryHover : false, - roomsHover : false, - homeHover: false, - peopleHover : false, - settingsHover : false, - }); - }, - - componentWillMount: function() { - this._dispatcherRef = dis.register(this.onAction); - this._peopleButton = null; - this._directoryButton = null; - this._createRoomButton = null; - this._lastCallouts = {}; - }, - - componentWillUnmount: function() { - dis.unregister(this._dispatcherRef); - }, - - // Room events - onDirectoryClick: function() { - dis.dispatch({ action: 'view_room_directory' }); - }, - - onDirectoryMouseEnter: function() { - this.setState({ directoryHover: true }); - }, - - onDirectoryMouseLeave: function() { - this.setState({ directoryHover: false }); - }, - - onRoomsClick: function() { - dis.dispatch({ action: 'view_create_room' }); - }, - - onRoomsMouseEnter: function() { - this.setState({ roomsHover: true }); - }, - - onRoomsMouseLeave: function() { - this.setState({ roomsHover: false }); - }, - - // Home button events - onHomeClick: function() { - dis.dispatch({ action: 'view_home_page' }); - }, - - onHomeMouseEnter: function() { - this.setState({ homeHover: true }); - }, - - onHomeMouseLeave: function() { - this.setState({ homeHover: false }); - }, - - // People events - onPeopleClick: function() { - dis.dispatch({ action: 'view_create_chat' }); - }, - - onPeopleMouseEnter: function() { - this.setState({ peopleHover: true }); - }, - - onPeopleMouseLeave: function() { - this.setState({ peopleHover: false }); - }, - - // Settings events - onSettingsClick: function() { - dis.dispatch({ action: 'view_user_settings' }); - }, - - onSettingsMouseEnter: function() { - this.setState({ settingsHover: true }); - }, - - onSettingsMouseLeave: function() { - this.setState({ settingsHover: false }); - }, - - onAction: function(payload) { - let calloutElement; - switch (payload.action) { - // Incoming instruction: dance! - case 'callout_start_chat': - calloutElement = this._peopleButton; - break; - case 'callout_room_directory': - calloutElement = this._directoryButton; - break; - case 'callout_create_room': - calloutElement = this._createRoomButton; - break; - } - if (calloutElement) { - const lastCallout = this._lastCallouts[payload.action]; - const now = Date.now(); - if (lastCallout == undefined || lastCallout < now - CALLOUT_ANIM_DURATION) { - this._lastCallouts[payload.action] = now; - Velocity(ReactDOM.findDOMNode(calloutElement), "callout.bounce", CALLOUT_ANIM_DURATION); - } - } - }, - - // Get the label/tooltip to show - getLabel: function(label, show) { - if (show) { - var RoomTooltip = sdk.getComponent("rooms.RoomTooltip"); - return ; - } - }, - - _collectPeopleButton: function(e) { - this._peopleButton = e; - }, - - _collectDirectoryButton: function(e) { - this._directoryButton = e; - }, - - _collectCreateRoomButton: function(e) { - this._createRoomButton = e; - }, - - render: function() { - const HomeButton = sdk.getComponent('elements.HomeButton'); - const StartChatButton = sdk.getComponent('elements.StartChatButton'); - const RoomDirectoryButton = sdk.getComponent('elements.RoomDirectoryButton'); - const CreateRoomButton = sdk.getComponent('elements.CreateRoomButton'); - const SettingsButton = sdk.getComponent('elements.SettingsButton'); - - return ( -
-
- -
- -
-
- -
-
- -
- - - -
-
- ); - }, -}); diff --git a/src/components/structures/CompatibilityPage.js b/src/components/structures/CompatibilityPage.js deleted file mode 100644 index 10806f4ffa..0000000000 --- a/src/components/structures/CompatibilityPage.js +++ /dev/null @@ -1,73 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -'use strict'; - -var React = require('react'); -import { _t } from 'matrix-react-sdk/lib/languageHandler'; - -module.exports = React.createClass({ - displayName: 'CompatibilityPage', - propTypes: { - onAccept: React.PropTypes.func - }, - - getDefaultProps: function() { - return { - onAccept: function() {} // NOP - }; - }, - - onAccept: function() { - this.props.onAccept(); - }, - - render: function() { - - return ( -
-
-

{ _t("Sorry, your browser is not able to run Riot.", {}, { 'b': (sub) => {sub} }) }

-

- { _t("Riot uses many advanced browser features, some of which are not available or experimental in your current browser.") } -

-

- { _t('Please install Chrome or Firefox for the best experience.', - {}, - { - 'chromeLink': (sub) => {sub}, - 'firefoxLink': (sub) => {sub}, - }, - )} - { _t('Safari and Opera work too.', - {}, - { - 'safariLink': (sub) => {sub}, - 'operaLink': (sub) => {sub}, - }, - )} -

-

- { _t("With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!") } -

- -
-
- ); - } -}); diff --git a/src/components/structures/HomePage.js b/src/components/structures/HomePage.js deleted file mode 100644 index bdba55eb0e..0000000000 --- a/src/components/structures/HomePage.js +++ /dev/null @@ -1,110 +0,0 @@ -/* -Copyright 2016 OpenMarket Ltd -Copyright 2017 Vector Creations Ltd - -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. -*/ - -'use strict'; - -import React from 'react'; -import GeminiScrollbar from 'react-gemini-scrollbar'; -import request from 'browser-request'; -import { _t } from 'matrix-react-sdk/lib/languageHandler'; -import sanitizeHtml from 'sanitize-html'; - -module.exports = React.createClass({ - displayName: 'HomePage', - - propTypes: { - // URL base of the team server. Optional. - teamServerUrl: React.PropTypes.string, - // Team token. Optional. If set, used to get the static homepage of the team - // associated. If unset, homePageUrl will be used. - teamToken: React.PropTypes.string, - // URL to use as the iFrame src. Defaults to /home.html. - homePageUrl: React.PropTypes.string, - }, - - getInitialState: function() { - return { - iframeSrc: '', - page: '', - }; - }, - - translate: function(s) { - s = sanitizeHtml(_t(s)); - // ugly fix for https://github.com/vector-im/riot-web/issues/4243 - s = s.replace(/Riot\.im/, 'Riot.im'); - s = s.replace(/\[matrix\]/, '[matrix]'); - return s; - }, - - componentWillMount: function() { - this._unmounted = false; - - if (this.props.teamToken && this.props.teamServerUrl) { - this.setState({ - iframeSrc: `${this.props.teamServerUrl}/static/${this.props.teamToken}/home.html` - }); - } - else { - // we use request() to inline the homepage into the react component - // so that it can inherit CSS and theming easily rather than mess around - // with iframes and trying to synchronise document.stylesheets. - - let src = this.props.homePageUrl || 'home.html'; - - request( - { method: "GET", url: src }, - (err, response, body) => { - if (this._unmounted) { - return; - } - - if (err || response.status < 200 || response.status >= 300) { - console.warn(`Error loading home page: ${err}`); - this.setState({ page: _t("Couldn't load home page") }); - return; - } - - body = body.replace(/_t\(['"]([\s\S]*?)['"]\)/mg, (match, g1)=>this.translate(g1)); - this.setState({ page: body }); - } - ); - } - }, - - componentWillUnmount: function() { - this._unmounted = true; - }, - - render: function() { - if (this.state.iframeSrc) { - return ( -
- - ); - } -}); diff --git a/src/components/views/settings/Notifications.js b/src/components/views/settings/Notifications.js deleted file mode 100644 index be03b4d70a..0000000000 --- a/src/components/views/settings/Notifications.js +++ /dev/null @@ -1,919 +0,0 @@ -/* -Copyright 2016 OpenMarket Ltd - -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. -*/ - -import React from 'react'; -import Promise from 'bluebird'; -import sdk from 'matrix-react-sdk'; -import { _t } from 'matrix-react-sdk/lib/languageHandler'; -import MatrixClientPeg from 'matrix-react-sdk/lib/MatrixClientPeg'; -import UserSettingsStore from 'matrix-react-sdk/lib/UserSettingsStore'; -import SettingsStore, {SettingLevel} from "matrix-react-sdk/lib/settings/SettingsStore"; -import Modal from 'matrix-react-sdk/lib/Modal'; -import { - NotificationUtils, - VectorPushRulesDefinitions, - PushRuleVectorState, - ContentRules -} from '../../../notifications'; - -// TODO: this "view" component still has far too much application logic in it, -// which should be factored out to other files. - -// TODO: this component also does a lot of direct poking into this.state, which -// is VERY NAUGHTY. - - -/** - * Rules that Vector used to set in order to override the actions of default rules. - * These are used to port peoples existing overrides to match the current API. - * These can be removed and forgotten once everyone has moved to the new client. - */ -const LEGACY_RULES = { - "im.vector.rule.contains_display_name": ".m.rule.contains_display_name", - "im.vector.rule.room_one_to_one": ".m.rule.room_one_to_one", - "im.vector.rule.room_message": ".m.rule.message", - "im.vector.rule.invite_for_me": ".m.rule.invite_for_me", - "im.vector.rule.call": ".m.rule.call", - "im.vector.rule.notices": ".m.rule.suppress_notices" -}; - -function portLegacyActions(actions) { - const decoded = NotificationUtils.decodeActions(actions); - if (decoded !== null) { - return NotificationUtils.encodeActions(decoded); - } else { - // We don't recognise one of the actions here, so we don't try to - // canonicalise them. - return actions; - } -} - -module.exports = React.createClass({ - displayName: 'Notifications', - - phases: { - LOADING: "LOADING", // The component is loading or sending data to the hs - DISPLAY: "DISPLAY", // The component is ready and display data - ERROR: "ERROR" // There was an error - }, - - propTypes: { - // The array of threepids from the JS SDK (required for email notifications) - threepids: React.PropTypes.array.isRequired, - // The brand string set when creating an email pusher - brand: React.PropTypes.string, - }, - - getDefaultProps: function() { - return { - threepids: [] - }; - }, - - getInitialState: function() { - return { - phase: this.phases.LOADING, - masterPushRule: undefined, // The master rule ('.m.rule.master') - vectorPushRules: [], // HS default push rules displayed in Vector UI - vectorContentRules: { // Keyword push rules displayed in Vector UI - vectorState: PushRuleVectorState.ON, - rules: [] - }, - externalPushRules: [], // Push rules (except content rule) that have been defined outside Vector UI - externalContentRules: [] // Keyword push rules that have been defined outside Vector UI - }; - }, - - componentWillMount: function() { - this._refreshFromServer(); - }, - - onEnableNotificationsChange: function(event) { - const self = this; - this.setState({ - phase: this.phases.LOADING - }); - - MatrixClientPeg.get().setPushRuleEnabled('global', self.state.masterPushRule.kind, self.state.masterPushRule.rule_id, !event.target.checked).done(function() { - self._refreshFromServer(); - }); - }, - - onEnableDesktopNotificationsChange: function(event) { - SettingsStore.setValue( - "notificationsEnabled", null, - SettingLevel.DEVICE, - event.target.checked, - ).finally(() => { - this.forceUpdate(); - }); - }, - - onEnableDesktopNotificationBodyChange: function(event) { - SettingsStore.setValue( - "notificationBodyEnabled", null, - SettingLevel.DEVICE, - event.target.checked, - ).finally(() => { - this.forceUpdate(); - }); - }, - - onEnableAudioNotificationsChange: function(event) { - SettingsStore.setValue( - "audioNotificationsEnabled", null, - SettingLevel.DEVICE, - event.target.checked, - ).finally(() => { - this.forceUpdate(); - }); - }, - - onEnableEmailNotificationsChange: function(address, event) { - let emailPusherPromise; - if (event.target.checked) { - const data = {} - data['brand'] = this.props.brand || 'Riot'; - emailPusherPromise = UserSettingsStore.addEmailPusher(address, data); - } else { - const emailPusher = UserSettingsStore.getEmailPusher(this.state.pushers, address); - emailPusher.kind = null; - emailPusherPromise = MatrixClientPeg.get().setPusher(emailPusher); - } - emailPusherPromise.done(() => { - this._refreshFromServer(); - }, (error) => { - const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog"); - Modal.createTrackedDialog('Error saving email notification preferences', '', ErrorDialog, { - title: _t('Error saving email notification preferences'), - description: _t('An error occurred whilst saving your email notification preferences.'), - }); - }); - }, - - onNotifStateButtonClicked: function(event) { - // FIXME: use .bind() rather than className metadata here surely - const vectorRuleId = event.target.className.split("-")[0]; - const newPushRuleVectorState = event.target.className.split("-")[1]; - - if ("_keywords" === vectorRuleId) { - this._setKeywordsPushRuleVectorState(newPushRuleVectorState) - } - else { - const rule = this.getRule(vectorRuleId); - if (rule) { - this._setPushRuleVectorState(rule, newPushRuleVectorState); - } - } - }, - - onKeywordsClicked: function(event) { - const self = this; - - // Compute the keywords list to display - let keywords = []; - for (let i in this.state.vectorContentRules.rules) { - const rule = this.state.vectorContentRules.rules[i]; - keywords.push(rule.pattern); - } - if (keywords.length) { - // As keeping the order of per-word push rules hs side is a bit tricky to code, - // display the keywords in alphabetical order to the user - keywords.sort(); - - keywords = keywords.join(", "); - } - else { - keywords = ""; - } - - const TextInputDialog = sdk.getComponent("dialogs.TextInputDialog"); - Modal.createTrackedDialog('Keywords Dialog', '', TextInputDialog, { - title: _t('Keywords'), - description: _t('Enter keywords separated by a comma:'), - button: _t('OK'), - value: keywords, - onFinished: function onFinished(should_leave, newValue) { - - if (should_leave && newValue !== keywords) { - let newKeywords = newValue.split(','); - for (let i in newKeywords) { - newKeywords[i] = newKeywords[i].trim(); - } - - // Remove duplicates and empty - newKeywords = newKeywords.reduce(function(array, keyword){ - if (keyword !== "" && array.indexOf(keyword) < 0) { - array.push(keyword); - } - return array; - },[]); - - self._setKeywords(newKeywords); - } - } - }); - }, - - getRule: function(vectorRuleId) { - for (let i in this.state.vectorPushRules) { - const rule = this.state.vectorPushRules[i]; - if (rule.vectorRuleId === vectorRuleId) { - return rule; - } - } - }, - - _setPushRuleVectorState: function(rule, newPushRuleVectorState) { - if (rule && rule.vectorState !== newPushRuleVectorState) { - - this.setState({ - phase: this.phases.LOADING - }); - - const self = this; - const cli = MatrixClientPeg.get(); - const deferreds = []; - const ruleDefinition = VectorPushRulesDefinitions[rule.vectorRuleId]; - - if (rule.rule) { - const actions = ruleDefinition.vectorStateToActions[newPushRuleVectorState]; - - if (!actions) { - // The new state corresponds to disabling the rule. - deferreds.push(cli.setPushRuleEnabled('global', rule.rule.kind, rule.rule.rule_id, false)); - } - else { - // The new state corresponds to enabling the rule and setting specific actions - deferreds.push(this._updatePushRuleActions(rule.rule, actions, true)); - } - } - - Promise.all(deferreds).done(function() { - self._refreshFromServer(); - }, function(error) { - const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog"); - console.error("Failed to change settings: " + error); - Modal.createTrackedDialog('Failed to change settings', '', ErrorDialog, { - title: _t('Failed to change settings'), - description: ((error && error.message) ? error.message : _t('Operation failed')), - onFinished: self._refreshFromServer - }); - }); - } - }, - - _setKeywordsPushRuleVectorState: function(newPushRuleVectorState) { - // Is there really a change? - if (this.state.vectorContentRules.vectorState === newPushRuleVectorState - || this.state.vectorContentRules.rules.length === 0) { - return; - } - - const self = this; - const cli = MatrixClientPeg.get(); - - this.setState({ - phase: this.phases.LOADING - }); - - // Update all rules in self.state.vectorContentRules - const deferreds = []; - for (let i in this.state.vectorContentRules.rules) { - const rule = this.state.vectorContentRules.rules[i]; - - let enabled, actions; - switch (newPushRuleVectorState) { - case PushRuleVectorState.ON: - if (rule.actions.length !== 1) { - actions = PushRuleVectorState.actionsFor(PushRuleVectorState.ON); - } - - if (this.state.vectorContentRules.vectorState === PushRuleVectorState.OFF) { - enabled = true; - } - break; - - case PushRuleVectorState.LOUD: - if (rule.actions.length !== 3) { - actions = PushRuleVectorState.actionsFor(PushRuleVectorState.LOUD); - } - - if (this.state.vectorContentRules.vectorState === PushRuleVectorState.OFF) { - enabled = true; - } - break; - - case PushRuleVectorState.OFF: - enabled = false; - break; - } - - if (actions) { - // Note that the workaround in _updatePushRuleActions will automatically - // enable the rule - deferreds.push(this._updatePushRuleActions(rule, actions, enabled)); - } - else if (enabled != undefined) { - deferreds.push(cli.setPushRuleEnabled('global', rule.kind, rule.rule_id, enabled)); - } - } - - Promise.all(deferreds).done(function(resps) { - self._refreshFromServer(); - }, function(error) { - const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog"); - console.error("Can't update user notification settings: " + error); - Modal.createTrackedDialog('Can\'t update user notifcation settings', '', ErrorDialog, { - title: _t('Can\'t update user notification settings'), - description: ((error && error.message) ? error.message : _t('Operation failed')), - onFinished: self._refreshFromServer - }); - }); - }, - - _setKeywords: function(newKeywords) { - this.setState({ - phase: this.phases.LOADING - }); - - const self = this; - const cli = MatrixClientPeg.get(); - const removeDeferreds = []; - - // Remove per-word push rules of keywords that are no more in the list - const vectorContentRulesPatterns = []; - for (let i in self.state.vectorContentRules.rules) { - const rule = self.state.vectorContentRules.rules[i]; - - vectorContentRulesPatterns.push(rule.pattern); - - if (newKeywords.indexOf(rule.pattern) < 0) { - removeDeferreds.push(cli.deletePushRule('global', rule.kind, rule.rule_id)); - } - } - - // If the keyword is part of `externalContentRules`, remove the rule - // before recreating it in the right Vector path - for (let i in self.state.externalContentRules) { - const rule = self.state.externalContentRules[i]; - - if (newKeywords.indexOf(rule.pattern) >= 0) { - removeDeferreds.push(cli.deletePushRule('global', rule.kind, rule.rule_id)); - } - } - - const onError = function(error) { - const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog"); - console.error("Failed to update keywords: " + error); - Modal.createTrackedDialog('Failed to update keywords', '', ErrorDialog, { - title: _t('Failed to update keywords'), - description: ((error && error.message) ? error.message : _t('Operation failed')), - onFinished: self._refreshFromServer - }); - } - - // Then, add the new ones - Promise.all(removeDeferreds).done(function(resps) { - const deferreds = []; - - let pushRuleVectorStateKind = self.state.vectorContentRules.vectorState; - if (pushRuleVectorStateKind === PushRuleVectorState.OFF) { - // When the current global keywords rule is OFF, we need to look at - // the flavor of rules in 'vectorContentRules' to apply the same actions - // when creating the new rule. - // Thus, this new rule will join the 'vectorContentRules' set. - if (self.state.vectorContentRules.rules.length) { - pushRuleVectorStateKind = PushRuleVectorState.contentRuleVectorStateKind(self.state.vectorContentRules.rules[0]); - } - else { - // ON is default - pushRuleVectorStateKind = PushRuleVectorState.ON; - } - } - - for (let i in newKeywords) { - const keyword = newKeywords[i]; - - if (vectorContentRulesPatterns.indexOf(keyword) < 0) { - if (self.state.vectorContentRules.vectorState !== PushRuleVectorState.OFF) { - deferreds.push(cli.addPushRule - ('global', 'content', keyword, { - actions: PushRuleVectorState.actionsFor(pushRuleVectorStateKind), - pattern: keyword - })); - } - else { - deferreds.push(self._addDisabledPushRule('global', 'content', keyword, { - actions: PushRuleVectorState.actionsFor(pushRuleVectorStateKind), - pattern: keyword - })); - } - } - } - - Promise.all(deferreds).done(function(resps) { - self._refreshFromServer(); - }, onError); - }, onError); - }, - - // Create a push rule but disabled - _addDisabledPushRule: function(scope, kind, ruleId, body) { - const cli = MatrixClientPeg.get(); - return cli.addPushRule(scope, kind, ruleId, body).then(() => - cli.setPushRuleEnabled(scope, kind, ruleId, false) - ); - }, - - // Check if any legacy im.vector rules need to be ported to the new API - // for overriding the actions of default rules. - _portRulesToNewAPI: function(rulesets) { - const self = this; - const needsUpdate = []; - const cli = MatrixClientPeg.get(); - - for (let kind in rulesets.global) { - const ruleset = rulesets.global[kind]; - for (let i = 0; i < ruleset.length; ++i) { - const rule = ruleset[i]; - if (rule.rule_id in LEGACY_RULES) { - console.log("Porting legacy rule", rule); - needsUpdate.push( function(kind, rule) { - return cli.setPushRuleActions( - 'global', kind, LEGACY_RULES[rule.rule_id], portLegacyActions(rule.actions) - ).then(() => - cli.deletePushRule('global', kind, rule.rule_id) - ).catch( (e) => { - console.warn(`Error when porting legacy rule: ${e}`); - }); - }(kind, rule)); - } - } - } - - if (needsUpdate.length > 0) { - // If some of the rules need to be ported then wait for the porting - // to happen and then fetch the rules again. - return Promise.all(needsUpdate).then(() => - cli.getPushRules() - ); - } else { - // Otherwise return the rules that we already have. - return rulesets; - } - }, - - _refreshFromServer: function() { - const self = this; - const pushRulesPromise = MatrixClientPeg.get().getPushRules().then(self._portRulesToNewAPI).then(function(rulesets) { - - /// XXX seriously? wtf is this? - MatrixClientPeg.get().pushRules = rulesets; - - // Get homeserver default rules and triage them by categories - const rule_categories = { - // The master rule (all notifications disabling) - '.m.rule.master': 'master', - - // The default push rules displayed by Vector UI - '.m.rule.contains_display_name': 'vector', - '.m.rule.contains_user_name': 'vector', - '.m.rule.room_one_to_one': 'vector', - '.m.rule.message': 'vector', - '.m.rule.invite_for_me': 'vector', - //'.m.rule.member_event': 'vector', - '.m.rule.call': 'vector', - '.m.rule.suppress_notices': 'vector' - - // Others go to others - }; - - // HS default rules - const defaultRules = {master: [], vector: {}, others: []}; - - for (let kind in rulesets.global) { - for (let i = 0; i < Object.keys(rulesets.global[kind]).length; ++i) { - const r = rulesets.global[kind][i]; - const cat = rule_categories[r.rule_id]; - r.kind = kind; - - if (r.rule_id[0] === '.') { - if (cat === 'vector') { - defaultRules.vector[r.rule_id] = r; - } - else if (cat === 'master') { - defaultRules.master.push(r); - } - else { - defaultRules['others'].push(r); - } - } - } - } - - // Get the master rule if any defined by the hs - if (defaultRules.master.length > 0) { - self.state.masterPushRule = defaultRules.master[0]; - } - - // parse the keyword rules into our state - const contentRules = ContentRules.parseContentRules(rulesets); - self.state.vectorContentRules = { - vectorState: contentRules.vectorState, - rules: contentRules.rules, - }; - self.state.externalContentRules = contentRules.externalRules; - - // Build the rules displayed in the Vector UI matrix table - self.state.vectorPushRules = []; - self.state.externalPushRules = []; - - const vectorRuleIds = [ - '.m.rule.contains_display_name', - '.m.rule.contains_user_name', - '_keywords', - '.m.rule.room_one_to_one', - '.m.rule.message', - '.m.rule.invite_for_me', - //'im.vector.rule.member_event', - '.m.rule.call', - '.m.rule.suppress_notices' - ]; - for (let i in vectorRuleIds) { - const vectorRuleId = vectorRuleIds[i]; - - if (vectorRuleId === '_keywords') { - // keywords needs a special handling - // For Vector UI, this is a single global push rule but translated in Matrix, - // it corresponds to all content push rules (stored in self.state.vectorContentRule) - self.state.vectorPushRules.push({ - "vectorRuleId": "_keywords", - "description" : ( - - { _t('Messages containing keywords', - {}, - { 'span': (sub) => - {sub} - }, - )} - - ), - "vectorState": self.state.vectorContentRules.vectorState - }); - } - else { - const ruleDefinition = VectorPushRulesDefinitions[vectorRuleId]; - const rule = defaultRules.vector[vectorRuleId]; - - const vectorState = ruleDefinition.ruleToVectorState(rule); - - //console.log("Refreshing vectorPushRules for " + vectorRuleId +", "+ ruleDefinition.description +", " + rule +", " + vectorState); - - self.state.vectorPushRules.push({ - "vectorRuleId": vectorRuleId, - "description" : _t(ruleDefinition.description), // Text from VectorPushRulesDefinitions.js - "rule": rule, - "vectorState": vectorState, - }); - - // if there was a rule which we couldn't parse, add it to the external list - if (rule && !vectorState) { - rule.description = ruleDefinition.description; - self.state.externalPushRules.push(rule); - } - } - } - - // Build the rules not managed by Vector UI - const otherRulesDescriptions = { - '.m.rule.message': _t('Notify for all other messages/rooms'), - '.m.rule.fallback': _t('Notify me for anything else'), - }; - - for (let i in defaultRules.others) { - const rule = defaultRules.others[i]; - const ruleDescription = otherRulesDescriptions[rule.rule_id]; - - // Show enabled default rules that was modified by the user - if (ruleDescription && rule.enabled && !rule.default) { - rule.description = ruleDescription; - self.state.externalPushRules.push(rule); - } - } - }); - - const pushersPromise = MatrixClientPeg.get().getPushers().then(function(resp) { - self.setState({pushers: resp.pushers}); - }); - - Promise.all([pushRulesPromise, pushersPromise]).then(function() { - self.setState({ - phase: self.phases.DISPLAY - }); - }, function(error) { - console.error(error); - self.setState({ - phase: self.phases.ERROR - }); - }).finally(() => { - // actually explicitly update our state having been deep-manipulating it - self.setState({ - masterPushRule: self.state.masterPushRule, - vectorContentRules: self.state.vectorContentRules, - vectorPushRules: self.state.vectorPushRules, - externalContentRules: self.state.externalContentRules, - externalPushRules: self.state.externalPushRules, - }); - }).done(); - }, - - _updatePushRuleActions: function(rule, actions, enabled) { - const cli = MatrixClientPeg.get(); - - return cli.setPushRuleActions( - 'global', rule.kind, rule.rule_id, actions - ).then( function() { - // Then, if requested, enabled or disabled the rule - if (undefined != enabled) { - return cli.setPushRuleEnabled( - 'global', rule.kind, rule.rule_id, enabled - ); - } - }); - }, - - renderNotifRulesTableRow: function(title, className, pushRuleVectorState) { - return ( - - - { title } - - - - - - - - - - - - - - - ); - }, - - renderNotifRulesTableRows: function() { - const rows = []; - for (let i in this.state.vectorPushRules) { - const rule = this.state.vectorPushRules[i]; - //console.log("rendering: " + rule.description + ", " + rule.vectorRuleId + ", " + rule.vectorState); - rows.push(this.renderNotifRulesTableRow(rule.description, rule.vectorRuleId, rule.vectorState)); - } - return rows; - }, - - emailNotificationsRow: function(address, label) { - return (
-
- -
-
- -
-
); - }, - - render: function() { - const self = this; - - let spinner; - if (this.state.phase === this.phases.LOADING) { - const Loader = sdk.getComponent("elements.Spinner"); - spinner = ; - } - - let masterPushRuleDiv; - if (this.state.masterPushRule) { - masterPushRuleDiv = ( -
-
- -
-
- -
-
- ); - } - - // When enabled, the master rule inhibits all existing rules - // So do not show all notification settings - if (this.state.masterPushRule && this.state.masterPushRule.enabled) { - return ( -
- {masterPushRuleDiv} - -
- { _t('All notifications are currently disabled for all targets.') }. -
-
- ); - } - - const emailThreepids = this.props.threepids.filter((tp) => tp.medium === "email"); - let emailNotificationsRow; - if (emailThreepids.length === 0) { - emailNotificationsRow =
- { _t('Add an email address above to configure email notifications') } -
; - } else { - // This only supports the first email address in your profile for now - emailNotificationsRow = this.emailNotificationsRow( - emailThreepids[0].address, - `${_t('Enable email notifications')} (${emailThreepids[0].address})` - ); - } - - // Build external push rules - const externalRules = []; - for (let i in this.state.externalPushRules) { - const rule = this.state.externalPushRules[i]; - externalRules.push(
  • { _t(rule.description) }
  • ); - } - - // Show keywords not displayed by the vector UI as a single external push rule - let externalKeywords = []; - for (let i in this.state.externalContentRules) { - const rule = this.state.externalContentRules[i]; - externalKeywords.push(rule.pattern); - } - if (externalKeywords.length) { - externalKeywords = externalKeywords.join(", "); - externalRules.push(
  • { _t('Notifications on the following keywords follow rules which can’t be displayed here:') } { externalKeywords }
  • ); - } - - let devicesSection; - if (this.state.pushers === undefined) { - devicesSection =
    { _t('Unable to fetch notification target list') }
    - } else if (this.state.pushers.length == 0) { - devicesSection = null; - } else { - // TODO: It would be great to be able to delete pushers from here too, - // and this wouldn't be hard to add. - const rows = []; - for (let i = 0; i < this.state.pushers.length; ++i) { - rows.push( - {this.state.pushers[i].app_display_name} - {this.state.pushers[i].device_display_name} - ); - } - devicesSection = ( - - {rows} - -
    ); - } - if (devicesSection) { - devicesSection = (
    -

    { _t('Notification targets') }

    - { devicesSection } -
    ); - } - - let advancedSettings; - if (externalRules.length) { - advancedSettings = ( -
    -

    { _t('Advanced notification settings') }

    - { _t('There are advanced notifications which are not shown here') }.
    - { _t('You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply') }. -
      - { externalRules } -
    -
    - ); - } - - return ( -
    - - {masterPushRuleDiv} - -
    - - { spinner } - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - - { emailNotificationsRow } - -
    - - - - - - - - - - - - { this.renderNotifRulesTableRows() } - - -
    { _t('Off') }{ _t('On') }{ _t('Noisy') }
    -
    - - { advancedSettings } - - { devicesSection } - -
    - -
    - ); - } -}); diff --git a/src/header b/src/header index 6d367b04e8..e80658c103 100644 --- a/src/header +++ b/src/header @@ -1,5 +1,5 @@ /* -Copyright 2017 New Vector Ltd +Copyright 2018 New Vector Ltd Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/src/i18n/strings/ar.json b/src/i18n/strings/ar.json index edd99017da..96702c4d86 100644 --- a/src/i18n/strings/ar.json +++ b/src/i18n/strings/ar.json @@ -1,32 +1,37 @@ { - "All messages": "كل الرسائل", - "Continue": "استمر", - "Please set a password!": "يرجى تعيين كلمة مرور!", - "This will allow you to return to your account after signing out, and sign in on other devices.": "سيسمح لك هذا بالعودة إلى حسابك بعد الخروج، وتسجيل الدخول على الأجهزة الأخرى.", - "Advanced notification settings": "إعدادات متقدمة للرسائل", - "A new version of Riot is available.": "نسخة جديدة من رايوت متوفرة.", - "All Rooms": "كل الغُرف", - "Safari and Opera work too.": "متصفح سافاري و متصفح أوبرا يعملان أيضاً.", - "Add an email address above to configure email notifications": "أضف بريداً إلكترونياً أعلاه من أجل تعديل إعدادت تنبيهات البريد الإلكتروني", - "All messages (noisy)": "كل الرسائل (صوت مرتفع)", - "All notifications are currently disabled for all targets.": "كل التنبيهات غير مفعلة حالياً للجميع.", - "An error occurred whilst saving your email notification preferences.": "حدث خطأ ما خلال حفظ إعدادات التنبيهات للبريد الإلكتروني.", - "Call invitation": "دعوة لمحادثة", - "Cancel": "إلغاء", - "Cancel Sending": "إلغاء الإرسال", - "Can't update user notification settings": "لا يمكن تحديث إعدادات التنبيهات للمستخدم", - "Changelog": "سِجل التغييرات", - "Close": "إغلاق", - "Collapse panel": "طي الجدول", - "Collecting app version information": "إستعادة معلومات النسخة للتطبيق", - "Collecting logs": "إستعادة السجلات", - "Couldn't find a matching Matrix room": "لا يمكن إيجاد غرفة مايتركس متطابقة", - "Custom Server Options": "إعدادات السيرفر خاصة", - "delete the alias.": "إلغاء المُعرف.", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "إلغاء مُعرف الغرفة %(alias)s وحذف %(name)s من الدليل؟", - "Describe your problem here.": "صِف مشكلتك هنا.", - "Direct Chat": "دردشة مباشرة", - "Directory": "دليل", - "Dismiss": "صرف النظر", - "Download this file": "تحميل هذا الملف" + "Custom Server Options": "الإعدادات الشخصية للخادوم", + "Dismiss": "تجاهل", + "Riot is not supported on mobile web. Install the app?": "رايوت غير مدعوم في وضعية الويب على الهاتف. هل تريد تثبيت التطبيق ؟", + "Riot Desktop on %(platformName)s": "الواجهة المكتبية لرايوت على %(platformName)s", + "Unknown device": "جهاز مجهول", + "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s عبر %(browserName)s على %(osName)s", + "You need to be using HTTPS to place a screen-sharing call.": "تحتاج الى استخدام الاتصال الآمن (HTTPS) للسماح بمشاركة الشاشة.", + "Co-ordination for Riot translators": "التنسيق لمترجمين Riot", + "powered by Matrix": "مشغل بواسطة Matrix", + "Welcome to Riot.im": "مرحبا بك في Riot.im", + "Dev chat for the Dendrite dev team": "Dev chat for the Dendrite dev team", + "Implementing VoIP services with Matrix": "تنفيذ خدمات VoIP مع Matrix", + "Discussion of the Identity Service API": "مناقشة واجهة برمجة التطبيقات لخدمة الهوية", + "Support for those using, running and writing other bridges": "دعم لأولئك الذين يستخدمون الجسور الأخرى ويديرونها وكتابتهم", + "Implementing VR services with Matrix": "تنفيذ خدمات الواقع الافتراضي مع Matrix", + "Search the room directory": "ابحث في دليل الغرفة", + "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "توجد بالفعل الكثير من الغرف في Matrix ، مرتبطة بالشبكات القائمة (Slack، IRC، Gitter الخ) أو مستقلة. تحقق من الدليل!", + "Chat with Riot Bot": "الدردشة مع Riot Bot", + "Get started with some tips from Riot Bot!": "ابدأ ببعض النصائح من Riot Bot!", + "General discussion about Matrix and Riot": "مناقشة عامة حول Matrix و Riot", + "Discussion of all things Matrix!": "مناقشة كل شيء Matrix!", + "Riot/Web & Desktop chat": "Riot/Web & دردشة سطح المكتب", + "Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk chat", + "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "تستطيع استخدام الخدما.يمكنك استخدام خيارات الخادم المخصص لتسجيل الدخول إلى خوادم Matrix الأخرى عن طريق تحديد عنوان URL لخادم Home آخر.
    هذا يسمح لك باستخدام Riot مع حساب Matrix موجود على خادم منزل مختلف.

    يمكنك أيضًا تعيين خادم هوية مخصص ولكنك لن تتمكن من دعوة المستخدمين عن طريق عنوان البريد الإلكتروني ، أو دعوتك عبر عنوان البريد الإلكتروني بنفسك.", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "[matrix] تعاون مدعوم مواسطة & دردشة لا مركزية ومشفرة", + "Matrix technical discussions": "مناقشات تقنية Matrix", + "Running Matrix services": "تشغيل خدمات Matrix", + "Community-run support for Synapse": "الدعم المجتمعي لـ Synapse", + "Admin support for Dendrite": "الدعم الاداري لـDendrite", + "Announcements about Synapse releases": "إعلانات حول إصدارات Synaps", + "Create Account": "انشاء حساب", + "Need help?": "بحاجة إلى مساعدة؟", + "Explore rooms": "استكشف غرف المحادثات", + "Room Directory": "دليل غرف المحادثات", + "Sign In": "التسجيل" } diff --git a/src/i18n/strings/az.json b/src/i18n/strings/az.json new file mode 100644 index 0000000000..3a85dd3ad8 --- /dev/null +++ b/src/i18n/strings/az.json @@ -0,0 +1,18 @@ +{ + "Riot is not supported on mobile web. Install the app?": "Riot mobil qurğular üçün veb-saytın versiyasını dəstəkləmir. Proqramı qurmaq?", + "Riot Desktop on %(platformName)s": "%(platformName)s-da Riot Desktop", + "Unknown device": "Naməlum qurğu", + "You need to be using HTTPS to place a screen-sharing call.": "İş stolunun birgə istifadəsi üçün HTTPS-dan istifadə tələb olunur.", + "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Riot konfiqurasiyanızda yanlış JSON var. Lütfən, xətanı düzəldin və səhifəni yeniləyin", + "Invalid JSON": "Yanlış JSON", + "Sign In": "Daxil ol", + "Create Account": "Hesab Aç", + "Need help?": "Kömək lazımdır?", + "Chat with Riot Bot": "Riot Bot-la söhbət edin", + "Explore rooms": "Otaqları kəşf edin", + "Your Riot is misconfigured": "Riot yanlış quraşdırılıb", + "Unexpected error preparing the app. See console for details.": "Proqramı başladarkən gözlənilməz xəta. Ətraflı məlumat üçün konsola baxın.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Yanlış konfiqurasiya: default_server_config, default_server_name, və ya default_hs_url-dən yalnız birini təyin etməlisiniz.", + "Invalid configuration: no default server specified.": "Yanlış konfiqurasiya: ilkin server təyin edilməyib.", + "%(appName)s via %(browserName)s on %(osName)s": "%(osName)s-da %(browserName)s ilə %(appName)s" +} diff --git a/src/i18n/strings/be.json b/src/i18n/strings/be.json index fe8cd43483..c9ddc6426a 100644 --- a/src/i18n/strings/be.json +++ b/src/i18n/strings/be.json @@ -1,75 +1,5 @@ { - "Add an email address above to configure email notifications": "Дадайце адрас электроннай пошты вышэй, каб наладзіць апавяшчэнні", - "All messages": "Усе паведамленні", - "All messages (noisy)": "Усе паведамленні (гучна)", - "All notifications are currently disabled for all targets.": "Усе апавяшчэнні ў цяперашні час адключаныя для ўсіх мэтаў.", - "An error occurred whilst saving your email notification preferences.": "Адбылася памылка падчас захавання налады апавяшчэнняў па электроннай пошце.", - "Cancel Sending": "Адмяніць адпраўку", - "Can't update user notification settings": "Немагчыма абнавіць налады апавяшчэнняў карыстальніка", - "Close": "Зачыніць", - "Couldn't find a matching Matrix room": "Не атрымалася знайсці адпаведны пакой Matrix", "Custom Server Options": "Карыстальніцкія параметры сервера", - "delete the alias.": "выдаліць псеўданім.", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Выдаліць псеўданім пакоя %(alias)s і выдаліць %(name)s з каталога?", - "Direct Chat": "Прамы чат", - "Directory": "Каталог", "Dismiss": "Aдхіліць", - "Download this file": "Спампаваць гэты файл", - "Enable audible notifications in web client": "Ўключыць гукавыя апавяшчэнні ў вэб-кліенце", - "Enable desktop notifications": "Ўключыць апавяшчэнні на працоўным стале", - "Enable email notifications": "Ўключыць паведамлення па электроннай пошце", - "Enable notifications for this account": "Ўключыць апавяшчэнні для гэтага ўліковага запісу", - "Enable them now": "Уключыць іх зараз", - "Enter keywords separated by a comma:": "Калі ласка, увядзіце ключавыя словы, падзеленыя коскамі:", - "Error": "Памылка", - "Error saving email notification preferences": "Памылка захавання налад апавяшчэнняў па электроннай пошце", - "#example": "#прыклад", - "Failed to add tag %(tagName)s to room": "Не атрымалася дадаць %(tagName)s ў пакоі", - "Failed to change settings": "Не атрымалася змяніць налады", - "Failed to forget room %(errCode)s": "Не атрымалася забыць пакой %(errCode)s", - "Failed to update keywords": "Не атрымалася абнавіць ключавыя словы", - "Failed to get protocol list from Home Server": "Не ўдалося атрымаць спіс пратаколаў ад хатняга сервера", - "Failed to get public room list": "Не ўдалося атрымаць спіс агульных пакояў", - "Failed to remove tag %(tagName)s from room": "Не ўдалося выдаліць %(tagName)s з пакоя", - "Failed to set direct chat tag": "Не ўдалося ўсталяваць тэг прамога чата", - "Failed to set Direct Message status of room": "Не ўдалося ўсталяваць статут прамога паведамлення пакою", - "Favourite": "Улюбёнае", - "Fetching third party location failed": "Не ўдалося атрымаць месцазнаходжанне трэцяга боку", - "Files": "Файлы", - "Filter room names": "Фільтр iмёнаў пакояў", - "Forget": "Забыць", - "Guests can join": "Госці могуць далучыцца", - "Invite to this room": "Запрасіць у гэты пакой", - "Keywords": "Ключавыя словы", - "Leave": "Пакінуць", - "Low Priority": "Нізкі прыярытэт", - "Members": "Удзельнікі", - "Mentions only": "Толькі згадкі", - "Mute": "Без гуку", - "No rooms to show": "Няма пакояў для паказу", - "Noisy": "Шумна", - "Notification targets": "Мэты апавяшчэння", - "Notifications": "Апавяшчэнні", - "Notifications on the following keywords follow rules which can’t be displayed here:": "Апавяшчэнні па наступных ключавых словах прытрымліваюцца правілаў, якія не могуць быць адлюстраваны тут", - "Notify for all other messages/rooms": "Апавяшчаць для ўсіх іншых паведамленняў/пакояў", - "Notify me for anything else": "Паведаміць мне што-небудзь яшчэ", - "Off": "Выключыць", - "On": "Уключыць", - "Operation failed": "Не атрымалася выканаць аперацыю", - "Permalink": "Пастаянная спасылка", - "powered by Matrix": "працуе на Matrix", - "Quote": "Цытата", - "Reject": "Адхіліць", - "Remove %(name)s from the directory?": "Выдаліць %(name)s з каталога?", - "Remove": "Выдалiць", - "remove %(name)s from the directory.": "выдаліць %(name)s з каталога.", - "Remove from Directory": "Выдалiць з каталога", - "Resend": "Паўторна", - "Riot does not know how to join a room on this network": "Riot не ведае, як увайсці ў пакой у гэтай сетке", - "Room not found": "Пакой не знойдзены", - "Search for a room": "Пошук па пакоі", - "Source URL": "URL-адрас крыніцы", - "The Home Server may be too old to support third party networks": "Хатні сервер можа быць занадта стары для падтрымкі іншых сетак", - "There are advanced notifications which are not shown here": "Ёсць пашыраныя апавяшчэння, якія не паказаныя тут", - "The server may be unavailable or overloaded": "Сервер можа быць недаступны ці перагружаны" + "powered by Matrix": "працуе на Matrix" } diff --git a/src/i18n/strings/bg.json b/src/i18n/strings/bg.json new file mode 100644 index 0000000000..095dd4fd52 --- /dev/null +++ b/src/i18n/strings/bg.json @@ -0,0 +1,54 @@ +{ + "Riot is not supported on mobile web. Install the app?": "Riot не поддържа мобилен уеб браузър. Инсталиране на приложението?", + "Riot Desktop on %(platformName)s": "Riot Desktop под %(platformName)s", + "Unknown device": "Непознато устройство", + "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s в %(browserName)s под %(osName)s", + "You need to be using HTTPS to place a screen-sharing call.": "Трябва да използвате HTTPS, за да споделите екрана си.", + "Custom Server Options": "Потребителски опции за сървър", + "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Може да използвате опциите за друг сървър, за да влезете в други Matrix сървъри като посочите различен Home сървър.
    Това Ви позволява да използвате Riot със съществуващ Matrix профил на различен Home сървър.

    Възможно е и да зададете друг сървър за самоличност. В този случай обаче няма да бъде възможно да поканите други потребители по имейл адрес, както и самите Вие няма да можете да бъдете поканени по имейл адрес.", + "Dismiss": "Затвори", + "powered by Matrix": "базирано на Matrix", + "Welcome to Riot.im": "Добре дошли в Riot.im", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Децентрализиран, шифрован чат и съвместна работа, базирани на [matrix]", + "Search the room directory": "Търсене в директорията със стаи", + "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "В Matrix съществуват много стаи, свързани към вече съществуващи мрежи (Slack, IRC, Gitter и т.н.) или независими такива. Разгледайте директорията!", + "Chat with Riot Bot": "Чати с Riot Bot", + "Get started with some tips from Riot Bot!": "Започнете с някои съвети от Riot Bot!", + "General discussion about Matrix and Riot": "Обща дискусия относно Matrix и Riot", + "Discussion of all things Matrix!": "Дискусия за всичко свързано с Matrix!", + "Riot/Web & Desktop chat": "Riot/Web & Desktop чат", + "Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk чат", + "Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk чат", + "Matrix technical discussions": "Технически дискусии в Matrix", + "Running Matrix services": "Хостинг на Matrix услуги", + "Community-run support for Synapse": "Поддръжка за Synapse от общността", + "Admin support for Dendrite": "Административна поддръжка за Dendrite", + "Announcements about Synapse releases": "Обявления за нови версии на Synapse", + "Support for those using and running matrix-appservice-irc": "Поддръжка за използващите и работещите с matrix-appservice-irc", + "Building services on Matrix": "Разработка на услуги в Matrix", + "Support for those using the Matrix spec": "Поддръжка за използващите Matrix спецификацията", + "Design and implementation of E2E in Matrix": "Разработване и внедряване на E2E шифроване в Matrix", + "Implementing VR services with Matrix": "Внедряване на VR услуги с Matrix", + "Implementing VoIP services with Matrix": "Внедряване на VoIP услуги с Matrix", + "Discussion of the Identity Service API": "Дискусия върху API услугата за самоличност", + "Support for those using, running and writing other bridges": "Поддръжка за тези, които използват, работят и пишат Matrix мостове", + "Contributing code to Matrix and Riot": "Допринасяне с код към Matrix и Riot", + "Dev chat for the Riot/Web dev team": "Чат за разработващия екип на Riot/Web", + "Dev chat for the Dendrite dev team": "Чат за разработващия екип на Dendrite", + "Co-ordination for Riot translators": "Координация за преводачи на Riot", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Може да настроите и собствен сървър за самоличност, но така няма да можете да каните потребители по имейл адрес или да бъдете поканени посредством вашия имейл адрес.", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Може да използвате настройките за собствен сървър за да влезете в друг Matrix сървър, чрез указване на адреса му. Това ви позволява да използвате Riot със съществуващ Matrix акаунт, принадлежащ към друг сървър.", + "Sign In": "Вписване", + "Create Account": "Създай акаунт", + "Need help?": "Нужда от помощ?", + "Explore rooms": "Открий стаи", + "Room Directory": "Директория със стаи", + "Unexpected error preparing the app. See console for details.": "Неочаквана грешка при подготвянето на приложението. Вижте конзолата за подробности.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Невалидна конфигурация: може да е указано само едно от: default_server_config, default_server_name, или default_hs_url.", + "Invalid configuration: no default server specified.": "Невалидна конфигурация: не е указан сървър по подразбиране.", + "This installation of Riot seems to have an invalid server configuration. If you are the administrator, please correct the error below": "Тази инсталация на Riot изглежда няма валидна конфигурация за сървър. Ако сте администраторът, моля поправете грешката по-долу", + "Your Riot is misconfigured": "Riot не е конфигуриран правилно", + "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Riot конфигурацията ви съдържа невалиден JSON. Коригирайте проблема и презаредете страницата.", + "The message from the parser is: %(message)s": "Грешката от парсъра е: %(message)s", + "Invalid JSON": "Невалиден JSON" +} diff --git a/src/i18n/strings/bn_IN.json b/src/i18n/strings/bn_IN.json index 0967ef424b..e2c37d4379 100644 --- a/src/i18n/strings/bn_IN.json +++ b/src/i18n/strings/bn_IN.json @@ -1 +1,3 @@ -{} +{ + "Riot is not supported on mobile web. Install the app?": "মোবাইল ওয়েব রায়ট সমর্থন করে না. অ্য়াপ টি ইনস্টল করতে চান?" +} diff --git a/src/i18n/strings/ca.json b/src/i18n/strings/ca.json index e267d3efb8..78173e0608 100644 --- a/src/i18n/strings/ca.json +++ b/src/i18n/strings/ca.json @@ -1,199 +1,16 @@ { - "A new version of Riot is available.": "Hi ha una nova versió del Riot disponible.", - "All messages": "Tots els missatges", - "Cancel": "Cancel·la", - "Close": "Tanca", "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s per a %(osName)s", - "Failed to change password. Is your password correct?": "Hi ha hagut un error al canviar la vostra contrasenya. És correcte la vostra contrasenya?", - "Continue": "Continua", - "All Rooms": "Totes les sales", - "Couldn't find a matching Matrix room": "No s'ha pogut trobar una sala de Matrix que coincideixi", - "Failed to add tag %(tagName)s to room": "No s'ha pogut afegir l'etiqueta %(tagName)s a la sala", - "Failed to forget room %(errCode)s": "No s'ha pogut oblidar la sala %(errCode)s", - "Failed to get public room list": "No s'ha pogut obtenir el llistat de sales públiques", - "Failed to remove tag %(tagName)s from room": "No s'ha pogut esborrar l'etiqueta %(tagName)s de la sala", - "Filter room names": "Filtra els noms de les sales", - "Couldn't load home page": "No s'ha pogut carregar la pàgina d'inici", - "All messages (noisy)": "Tots els missatges (sorollós)", - "Mentions only": "Només mencions", - "Mute": "Silencia", - "Direct Chat": "Xat directe", - "Directory": "Directori", - "Failed to set direct chat tag": "No s'ha pogut establir l'etiqueta del xat directe", - "Invite to this room": "Convida a aquesta sala", - "No rooms to show": "No hi ha cap sala per a mostrar", - "Riot does not know how to join a room on this network": "El Riot no sap com unir-se a una sala en aquesta xarxa", - "Room not found": "No s'ha trobat la sala", - "Unnamed room": "Sala sense nom", - "#example": "#exemple", - "Failed to change settings": "No s'han pogut modificar els paràmetres", - "Enable audible notifications in web client": "Habilita les notificacions d'àudio al client web", - "Enable desktop notifications": "Habilita les notificacions d'escriptori", - "Enable email notifications": "Habilita les notificacions per correu electrònic", - "Enable notifications for this account": "Habilita les notificacions per aquest compte", - "Low Priority": "Baixa prioritat", - "Members": "Membres", - "Changelog": "Registre de canvis", - "Describe your problem here.": "Descriu aquí el teu problema.", - "Download this file": "Descarrega aquest fitxer", - "Enable them now": "Habilita-ho ara", - "Error": "Error", - "Favourite": "Favorit", - "Files": "Fitxers", - "Safari and Opera work too.": "També funcionen el Safari i l'Opera.", - "Add an email address above to configure email notifications": "Afegiu més amunt un correu electrònic per a configurar les notificacions", - "Advanced notification settings": "Paràmetres avançats de notificacions", - "All notifications are currently disabled for all targets.": "Actualment totes les notificacions estan inhabilitades per a tots els objectius.", - "An error occurred whilst saving your email notification preferences.": "S'ha produït un error en desar les vostres preferències de notificació per correu electrònic.", - "Bug report sent": "S'ha enviat l'informe d'error", - "Call invitation": "Invitació de trucada", - "Can't update user notification settings": "No es poden actualitzar els paràmetres de les notificacions de l'usuari", - "Collecting app version information": "S'està recollint la informació de la versió de l'aplicació", - "Collecting logs": "S'estan recopilant els registres", "Custom Server Options": "Opcions de servidor personalitzat", "Dismiss": "Omet", - "Enter keywords separated by a comma:": "Introduïu les paraules clau separades per una coma:", - "Login": "Inicia sessió", - "Leave": "Surt", - "Messages containing keywords": "Missatges que contenen keywords", - "Messages containing my user name": "Missatges que contenen el meu nom d'usuari", - "Messages in group chats": "Missatges en xats de grup", - "Messages containing my display name": "Missatges que contenen el meu nom visible", - "Messages in one-to-one chats": "Missatges en xats un a un", - "Messages sent by bot": "Missatges enviats pel bot", - "more": "més", - "Noisy": "Sorollós", - "Notification targets": "Objectius de les notificacions", - "Notifications": "Notificacions", - "Notify me for anything else": "Notifica'm per a qualsevol altra cosa", - "Notify for all other messages/rooms": "Notifica per a tots els altres missatges o sales", - "Off": "Apagat", - "On": "Engegat", - "Permalink": "Enllaç permanent", - "Remove": "Elimina", - "remove %(name)s from the directory.": "elimina %(name)s del directori.", - "Remove from Directory": "Elimina del directori", - "Report a bug": "Informa d'una errada", - "Resend": "Reenvia", - "Search…": "Cerca…", - "Send": "Envia", - "Source URL": "URL origen", - "The server may be unavailable or overloaded": "El servidor pot no estar disponible o sobrecarregat", - "This Room": "Aquesta sala", - "Unavailable": "No disponible", "Unknown device": "Dispositiu desconegut", - "unknown error code": "codi d'error desconegut", - "What's New": "Novetats", - "What's new?": "Què hi ha de nou?", - "Waiting for response from server": "S'està esperant una resposta del servidor", - "You cannot delete this image. (%(code)s)": "No podeu eliminar aquesta imatge. (%(code)s)", - "You cannot delete this message. (%(code)s)": "No podeu eliminar aquest missatge. (%(code)s)", - "You are not receiving desktop notifications": "No esteu rebent notificacions d'escriptori", - "Thank you!": "Gràcies!", - "Sunday": "Diumenge", - "Monday": "Dilluns", - "Tuesday": "Dimarts", - "Wednesday": "Dimecres", - "Thursday": "Dijous", - "Friday": "Divendres", - "Saturday": "Dissabte", - "Today": "Avui", - "Yesterday": "Ahir", - "OK": "D'acord", - "Warning": "Avís", - "Checking for an update...": "Comprovant si hi ha actualitzacions...", - "No update available.": "No hi ha cap actualització disponible.", - "Downloading update...": "Descarregant l'actualització...", - "Welcome to Riot.im": "Benvingut a Riot.im", + "Welcome to Riot.im": "Us donem la benvinguda a Riot.im", "Chat with Riot Bot": "Conversa amb el Bot de Riot", - "Back": "Enrere", - "Cancel Sending": "Cancel·la l'enviament", - "Collapse panel": "Col·lapsa el tauler", - "Developer Tools": "Eines de desenvolupador", - "Riot is not supported on mobile web. Install the app?": "Riot no és compatible amb la web per a mòbils. Voleu instal·lar l'aplicació per a mòbils?", - "Uploading report": "S'està enviant l'informe", + "Riot is not supported on mobile web. Install the app?": "El Riot no és compatible amb la web per a mòbils. Voleu instal·lar l'aplicació per a mòbils?", "Riot Desktop on %(platformName)s": "Riot d'escriptori per a %(platformName)s", "You need to be using HTTPS to place a screen-sharing call.": "Heu d'utilitzar HTTPS per poder fer una trucada amb pantalla compartida.", - "When I'm invited to a room": "Quan sóc convidat a una sala", - "Error saving email notification preferences": "No s'han pogut desar les preferències de les notificacions a causa d'un error", - "Keywords": "Paraules clau", - "Operation failed": "No s'ha pogut realitzar l'operació", - "Failed to update keywords": "No s'han pogut actualitzar les paraules clau", - "Notifications on the following keywords follow rules which can’t be displayed here:": "Les notificacions sobre les següents paraules clau segueixen regles que no es poden mostrar aquí:", - "Unable to fetch notification target list": "No s'ha pogut obtenir la llista d'objectius de les notificacions", - "There are advanced notifications which are not shown here": "Hi ha notificacions avançades que no es mostren aquí", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "És possible que els hàgiu configurat en un client diferent de Riot. No podeu modificar-los amb Riot, però encara s'apliquen", - "Show message in desktop notification": "Mostra els missatges amb notificacions d'escriptori", - "Search": "Cerca", "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Podeu utilitzar opcions de servidor personalitzades per iniciar sessió en altres servidors Matrix especificant una URL diferent a la del servidor principal.
    Això us permet utilitzar Riot amb un compte de Matrix existent en un servidor d'origen diferent.

    També podeu establir un servidor d'identitat personalitzat, però no podreu convidar o ser convidat per correu electrònic.", "powered by Matrix": "amb tecnologia de Matrix", - "Update": "Actualització", - "Appear Offline": "Apareix sense connexió", - "Away": "Absent", - "To return to your account in future you need to set a password": "Per poder tornar al vostre compte en un futur, heu de set a password", - "Set Password": "Establiu una contrasenya", - "Error encountered (%(errorDetail)s).": "S'ha trobat un error (%(errorDetail)s).", - "Uploaded on %(date)s by %(user)s": "Pujat el %(date)s per l'usuari %(user)s", - "Please describe the bug and/or send logs.": "Si us plau, descriviu l'error i/o envia els registres.", - "Loading bug report module": "S'està carregant l'informe del modul", - "Failed to send report: ": "No s'ha pogut enviar l'informe ", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Si us plau, descriviu l'error. Què heu fet, què esperàveu que passes i què sembla haver passat?", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Amb aquest informe d'error, alguns registres d'aquesta aplicació s'enviaran també per tal de fer un diagnostic del problema. Si preferiu enviar només el text anterior, desseleccioneu:", - "Send logs": "Envia els registres", - "Send Custom Event": "Envia els esdeveniments personalitzats", - "You must specify an event type!": "Heu d'especificar un tipus d'esdeveniment", - "Event sent!": "S'ha enviat l'esdeveniment", - "Failed to send custom event.": "No s'ha pogut enviar l'esdeveniment personalitzat.", - "Event Type": "Tipus d'esdeveniment", - "State Key": "Clau d'estat", - "Event Content": "Contingut de l'esdeveniment", - "Send Account Data": "Envia les dades del compte", - "Filter results": "Resultats del filtre", - "Explore Room State": "Esbrina els estats de les sales", - "Edit": "Edita", - "Explore Account Data": "Explora les dades del compte", - "Toolbox": "Caixa d'eines", - "You have successfully set a password!": "Heu establert correctament la contrasenya", - "You have successfully set a password and an email address!": "Heu establert correctament la vostra contrasenya i l'adreça de correu electrònic", - "You can now return to your account after signing out, and sign in on other devices.": "Ara podreu tornar a entrar al vostre compte des de altres dispositius.", - "Remember, you can always set an email address in user settings if you change your mind.": "Recordeu-ho, si canvieu d'idea, sempre podreu establir una adreça de correu electrònic a las vostra configuració d'usuari.", - "(HTTP status %(httpStatus)s)": "(Estat de l´HTTP %(httpStatus)s)", - "Please set a password!": "Si us plau, establiu una contrasenya", - "This will allow you to return to your account after signing out, and sign in on other devices.": "Això farà possible que pugueu tronar al vostre compte des de qualsevol dispositiu.", - "Forward Message": "Reenvia el missatge", - "Unpin Message": "Desenganxa el missatge", - "Pin Message": "Enganxa el missatge", - "View Source": "Mostra el codi", - "View Decrypted Source": "Mostra el codi desencriptat", - "Unhide Preview": "Mostra la previsualització", - "Quote": "Cita", - "Failed to set Direct Message status of room": "No s'ha pogut establir l'estat del missatge directe de la sala", - "Forget": "Oblida", - "Reject": "Rebutja", - "Sorry, your browser is not able to run Riot.": "Disculpeu, el seu navegador not pot executar Riot.", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot utilitza moltes funcions avançades del navegador, algunes de les quals no estan disponibles o són experimentals al vostre navegador actual.", - "Please install Chrome or Firefox for the best experience.": "Si us plau, instal·leu Chrome or Firefox per gaudir d'una millor experiència.", - "Safari and Opera work too.": "Safari i Opera també fan la feina.", - "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Amb el vostre navegador actual, l'aparença de l'aplicació pot ser completament incorrecta i algunes o totes les funcions poden no funcionar correctament. Si voleu provar-ho de totes maneres, podeu continuar, però esteu sols pel que fa als problemes que pugueu trobar!", - "I understand the risks and wish to continue": "Entenc el riscos i desitjo continuar", - "Register": "Registre", - "Rooms": "Sales", - "Hide panel": "Amaga el panel", - "Invite to this community": "Convida a aquesta comunitat", - "Add rooms to this community": "Afegeix sales a aquesta comunitat", - "Failed to get protocol list from Home Server": "No s'ha pogut obtenir la llista de protocols del servidor local", - "The Home Server may be too old to support third party networks": "El servidor local pot ser massa antic per a ser compatible amb xarxes de tercers", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Voleu esborrar de la sala l'alies %(alias)s i retirar %(name)s del directori?", - "Remove %(name)s from the directory?": "Voleu retirar %(name)s del directori?", - "delete the alias.": "esborra l'alies.", - "Unable to join network": "No s'ha pogut unir-se a la xarxa", - "Fetching third party location failed": "S'ha produït un error en obtenir la ubicació de tercers", - "Unable to look up room ID from server": "No s'ha pogut cercar l'ID de la sala en el servidor", - "World readable": "Llegible al món", - "Guests can join": "Els usuaris d'altres xarxes s'hi poden unir", - "Search for a room": "Busca una sala", - "Expand panel": "Expandeix el panel", - "Decentralised, encrypted chat & collaboration powered by [matrix]": "Xat descentralitzat, encriptat & col·laboració amb tecnologia de [matrix]", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Xat descentralitzat, encriptat i col·laboratiu amb tecnologia de [matrix]", "Search the room directory": "Cerqueu el directori de sales", "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Ja existeixen moltes sales a Matrix vinculades a xarxes existents (Slack, IRC, Gitter, etc.) o independents. Feu un cop d'ull al directori!", "Get started with some tips from Riot Bot!": "Comenceu amb alguns consells de Riot Bot!", @@ -203,21 +20,28 @@ "Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & Xat de matrix-ios-sdk", "Riot/Android & matrix-android-sdk chat": "Riot/Android & Xat matrix-android-sdk", "Matrix technical discussions": "Debats tècnics sobre Matrix", - "Reply": "Respon", "Running Matrix services": "Serveis de Matrix en marxa", - "Community-run support for Synapse": "Suport de la comunitat per a Synapse", - "Admin support for Dendrite": "Suport dels administrador per a Dendrite", + "Community-run support for Synapse": "Suport comunitari per a Synapse", + "Admin support for Dendrite": "Suport dels administradors per a Dendrite", "Announcements about Synapse releases": "Anuncis sobre llançaments de Synapse", "Support for those using and running matrix-appservice-irc": "Suport per a aquells que utilitzen i executen matrix-appservice-irc", - "Building services on Matrix": "Construir serveis a Matrix", - "Support for those using the Matrix spec": "Suport per a aquells que utilitzen l'especificació Matrix", + "Building services on Matrix": "Construcció de serveis a Matrix", + "Support for those using the Matrix spec": "Suport per a aquells que utilitzen l'especificació de Matrix", "Design and implementation of E2E in Matrix": "Disseny i implementació de l'E2E a Matrix", "Implementing VR services with Matrix": "Implementació de serveis VR amb Matrix", "Implementing VoIP services with Matrix": "Implementació de serveis VoIP amb Matrix", - "Discussion of the Identity Service API": "Debat sobre l'API Identity Service", + "Discussion of the Identity Service API": "Discussió sobre l'API Identity Service", "Support for those using, running and writing other bridges": "Suport per a aquells que utilitzen, executen i escriuen altres ponts", - "Contributing code to Matrix and Riot": "Contribuir amb codi a Matrix i Riot", - "Dev chat for the Riot/Web dev team": "Xat de l'equip de desenvolupadors Riot/Web per a desenvolupadors", + "Contributing code to Matrix and Riot": "Contribuir codi a Matrix i Riot", + "Dev chat for the Riot/Web dev team": "Xat de l'equip de desenvolupadors Riot/Web", "Dev chat for the Dendrite dev team": "Xat de l'equip Dendrite per a desenvolupadors", - "Co-ordination for Riot/Web translators": "Coordinació per a traductors de Riot/Web" + "Co-ordination for Riot translators": "Coordinació dels traductors del Riot", + "Create Account": "Crea un compte", + "Need help?": "Necessiteu ajuda?", + "Explore rooms": "Exploreu les sales", + "Room Directory": "Directori de sales", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Podeu emprar les opcions personalitzades del servidor per iniciar la sessió en altres servidors de Matrix especificant un URL de servidor personal diferent. Això us permet emprar el Riot amb un compte de Matrix existent en un servidor personal diferent.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "També podeu establir un servidor d'identitat personalitzat, però no podreu convidar usuaris o ser convidats vosaltres mateixos per adreça de correu electrònic.", + "Sign In": "Inicia la sessió", + "Invalid configuration: no default server specified.": "Configuració no vàlida: no s'ha especificat cap servidor per defecte." } diff --git a/src/i18n/strings/cs.json b/src/i18n/strings/cs.json index a92c01d708..a2ab2af438 100644 --- a/src/i18n/strings/cs.json +++ b/src/i18n/strings/cs.json @@ -1,150 +1,10 @@ { - "Close": "Zavřít", - "Safari and Opera work too.": "Safari a Opera fungují také.", - "A new version of Riot is available.": "Je dostupná nová verze Riotu.", - "Notifications": "Upozornění", - "Search": "Hledání", - "All Rooms": "Všechny místnosti", - "Files": "Soubory", - "Filter room names": "Filtrovat místnosti dle názvu", - "Forward Message": "Přeposlat zprávu", - "Invite to this room": "Pozvat do této místnosti", - "Members": "Členové", - "Permalink": "Trvalý odkaz", - "Search…": "Vyhledat…", - "This Room": "Tato místnost", - "View Source": "Zobrazit zdroj", - "Login": "Přihlásit", - "Advanced notification settings": "Pokročilé nastavení upozornění", - "All messages": "Všechny zprávy", - "Cancel": "Storno", - "Changelog": "Seznam změn", - "Describe your problem here.": "Popište zde svůj problém.", - "Direct Chat": "Přímý chat", - "Directory": "Adresář", - "Download this file": "Stáhnout tento soubor", - "Error": "Chyba", - "Failed to change settings": "Nepodařilo se změnit nastavení", - "Failed to get public room list": "Nepodařilo se získat seznam veřejných místností", - "Favourite": "V oblíbených", - "Guests can join": "Hosté mohou vstoupit", - "Hide panel": "Skrýt panel", - "I understand the risks and wish to continue": "Rozumím rizikům a přeji si pokračovat", - "Keywords": "Klíčová slova", - "Leave": "Odejít", - "Loading bug report module": "Nahrává se modul nahlašování chyb", - "Low Priority": "Nízká priorita", - "Mentions only": "Pouze zmínky", - "Messages containing my display name": "Zprávy obsahující mé zobrazované jméno", - "Messages containing keywords": "Zprávy obsahující klíčová slova", - "Messages containing my user name": "Zprávy obsahující mé uživatelské jméno", - "Messages in group chats": "Zprávy ve skupinových chatech", - "Messages sent by bot": "Zprávy poslané robotem", - "more": "více", - "Mute": "Ztlumit", - "All messages (noisy)": "Všechny zprávy (hlasitě)", - "Couldn't load home page": "Nepodařilo se nahrát úvodní stránku", - "All notifications are currently disabled for all targets.": "Veškeré notifikace jsou aktuálně pro všechny cíle vypnuty.", - "Cancel Sending": "Zrušit odesílání", - "Can't update user notification settings": "Nelze aktualizovat uživatelské nastavení upozornění", - "delete the alias.": "smazat alias.", - "Set Password": "Nastavit heslo", - "You have successfully set a password and an email address!": "Úspěšně jste si nastavili heslo a e-mailovou adresu!", - "Remember, you can always set an email address in user settings if you change your mind.": "Vězte, že kdybyste si to rozmysleli, e-mailovou adresu můžete kdykoliv doplnit v uživatelském nastavení.", - "Continue": "Pokračovat", - "Please set a password!": "Prosím nastavte si heslo!", - "You have successfully set a password!": "Úspěšně jste si nastavili heslo!", - "Failed to change password. Is your password correct?": "Nepodařilo se změnit heslo. Zadáváte své heslo správně?", - "No update available.": "Není dostupná žádná aktualizace.", - "Downloading update...": "Stahování aktualizace...", "Welcome to Riot.im": "Vítá vás Riot.im", - "Enable desktop notifications": "Zapnout upozornění na ploše", - "Enable email notifications": "Zapnout upozornění přes e-mail", - "Enable notifications for this account": "Zapnout upozornění na tomto účtu", - "#example": "#příklad", - "Off": "Vypnout", - "On": "Zapnout", - "Operation failed": "Operace se nezdařila", - "Remove %(name)s from the directory?": "Odebrat %(name)s z adresáře?", - "Remove": "Odebrat", - "remove %(name)s from the directory.": "odebrat %(name)s z adresáře.", - "Remove from Directory": "Odebrat z adresáře", - "Report a bug": "Nahlásit chybu", - "Resend": "Poslat znovu", - "Room not found": "Místnost nenalezena", - "Search for a room": "Hledat místnost", - "Send": "Odeslat", - "Send logs": "Odeslat záznamy", - "Source URL": "Zdrojová URL", - "The server may be unavailable or overloaded": "Server může být nedostupný nebo přetížený", - "Unable to join network": "Nelze se připojit k síti", - "Unable to look up room ID from server": "Nelze získat ID místnosti ze serveru", - "Unavailable": "Nedostupné", "Unknown device": "Neznámé zařízení", - "unknown error code": "neznámý kód chyby", - "Unnamed room": "Nepojmenovaná místnost", - "Update": "Aktualizace", - "What's New": "Co je nového", - "What's new?": "Co je nového?", - "Waiting for response from server": "Čekám na odezvu ze serveru", - "You cannot delete this image. (%(code)s)": "Tento obrázek nemůžete smazat. (%(code)s)", - "You cannot delete this message. (%(code)s)": "Tuto zprávu nemůžete smazat. (%(code)s)", - "You are not receiving desktop notifications": "Nedostáváte upozornění na desktopu", - "Sunday": "Neděle", - "Monday": "Pondělí", - "Tuesday": "Úterý", - "Wednesday": "Středa", - "Thursday": "Čtvrtek", - "Friday": "Pátek", - "Saturday": "Sobota", - "Today": "Dnes", - "Yesterday": "Včera", - "OK": "OK", - "Warning": "Upozornění", - "Checking for an update...": "Kontrola aktualizací...", - "An error occurred whilst saving your email notification preferences.": "Při ukládání nastavení e-mailových upozornění nastala chyba.", - "Collecting app version information": "Sbírání informací o verzi aplikace", - "Collecting logs": "Sbírání logů", - "Couldn't find a matching Matrix room": "Odpovídající Matrix místost nenalezena", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Smazat alias místnosti %(alias)s a odstranit %(name)s z adresáře?", - "Enable audible notifications in web client": "Povolit zvuková upozornění ve webové aplikaci", - "Enable them now": "Povolit nyní", - "Enter keywords separated by a comma:": "Vložte klíčová slova oddělená čárkou:", - "Error saving email notification preferences": "Chyba při ukládání nastavení e-mailových upozornění", - "Failed to add tag %(tagName)s to room": "Nepodařilo se přidat štítek %(tagName)s k místnosti", - "Failed to forget room %(errCode)s": "Nepodařilo se zapomenout místnost %(errCode)s", - "Failed to update keywords": "Nepodařilo se aktualizovat klíčová slova", - "Failed to get protocol list from Home Server": "Z domovského serveru se nepodařilo získat seznam protokolů", - "Failed to remove tag %(tagName)s from room": "Nepodařilo se odstranit štítek %(tagName)s z místnosti", - "Failed to send report: ": "Nepodařilo se odeslat hlášení: ", - "Forget": "Zapomenout", - "(HTTP status %(httpStatus)s)": "(HTTP status %(httpStatus)s)", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Kvůli diagnostice budou spolu s tímto hlášením o chybě odeslány i záznamy z klienta. Chcete-li odeslat pouze text výše, prosím odškrtněte:", - "No rooms to show": "Žádné místnosti k zobrazení", - "Notify for all other messages/rooms": "Upozorni na všechny ostatní zprávy/místnosti", - "Notify me for anything else": "Upozorni mě na cokoliv jiného", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Prosím popište chybu. Co jste dělal/a? Co jste čekal/a, že se stane? Co se stalo?", - "Please describe the bug and/or send logs.": "Prosím popište chybu a/nebo pošlete záznamy.", - "Please install Chrome or Firefox for the best experience.": "Prosím nainstalujte si Chrome nebo Firefox pro nejlepší zážitek.", - "Quote": "Citace", - "Reject": "Odmítnout", - "Riot does not know how to join a room on this network": "Riot neví, jak vstoupit do místosti na této síti", "Riot is not supported on mobile web. Install the app?": "Riot není podporovaný na mobilním webu. Nainstalovat aplikaci?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot používá mnoho pokročilých funkcí, z nichž některé jsou ve vašem současném prohlížeči nedostupné nebo experimentální.", - "Sorry, your browser is not able to run Riot.": "Omlouváme se, váš prohlížeč není schopný spustit Riot.", - "There are advanced notifications which are not shown here": "Jsou k dispozici pokročilá upozornění, která zde nejsou zobrazena", - "Unhide Preview": "Zobrazit náhled", - "Uploaded on %(date)s by %(user)s": "Nahráno %(date)s uživatelem %(user)s", - "Uploading report": "Nahrávám hlášení", - "View Decrypted Source": "Zobrazit dešifrovaný zdroj", - "When I'm invited to a room": "Pokud jsem pozván do místnosti", - "World readable": "Světu čitelné", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Snad jste je nastavili v jiném klientu než Riot. V Riotu je nemůžete upravit, ale přesto platí", - "Error encountered (%(errorDetail)s).": "Nastala chyba (%(errorDetail)s).", "You need to be using HTTPS to place a screen-sharing call.": "Pro uskutečnění hovoru se sdílením obrazovky musíte používat HTTPS.", - "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Vzhled a chování aplikace může být ve vašem aktuální prohlížeči nesprávné a některé nebo všechny funkce mohou být chybné. Chcete-li i přes to pokračovat, nebudeme vám bránit, ale se všemi problémy, na které narazíte, si musíte poradit sami!", "Search the room directory": "Prohledat adresář místností", - "Chat with Riot Bot": "Chatujte s Riot Botem", + "Chat with Riot Bot": "Konverzovat s Riot Botem", "Get started with some tips from Riot Bot!": "Začněte s radami od Riot Bota!", "General discussion about Matrix and Riot": "Obecná diskuse o Matrixu a Riotu", "Discussion of all things Matrix!": "Diskuse o všem okolo Matrixu!", @@ -154,16 +14,9 @@ "Announcements about Synapse releases": "Oznámení o vydáních Synapse", "Support for those using and running matrix-appservice-irc": "Podpora pro používání matrix-appservice-irc", "Building services on Matrix": "Stavění služeb na Matrixu", - "Add an email address above to configure email notifications": "Abyste mohli nastavovat e-mailová upozornění, musíte uvést svoji e-mailovou adresu v kolonce výše", - "Call invitation": "Pozvánka k hovoru", - "Collapse panel": "Sbalit panel", "Dismiss": "Zahodit", - "Expand panel": "Rozbalit panel", - "Failed to set direct chat tag": "Nepodařilo se nastavit štítek přímého chatu", - "Failed to set Direct Message status of room": "Nepodařilo se přiřadit místnosti status Přímé zprávy", "powered by Matrix": "poháněno Matrixem", "Riot Desktop on %(platformName)s": "Riot Desktop na %(platformName)s", - "The Home Server may be too old to support third party networks": "Tento domovský server může být příliš zastaralý na to, aby podporoval sítě třetích stran", "Admin support for Dendrite": "Správcovská podpora pro Dendrite", "Support for those using the Matrix spec": "Podpora pro uživatele Matrix specifikace", "Design and implementation of E2E in Matrix": "Návrh a implementace E2E v Matrixu", @@ -173,53 +26,21 @@ "Contributing code to Matrix and Riot": "Přispívaní kódem do Matrixu a Riotu", "Dev chat for the Riot/Web dev team": "Chat vývojového týmu Riot/Web", "Dev chat for the Dendrite dev team": "Chat vývojového týmu Dendrite", - "Co-ordination for Riot/Web translators": "Součinnost překladatelů Riot/Web", "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "V Matrixu je spousta samostatných, nebo s jinými sítěmi (Slack, IRC, Gitter aj.) propojených místností. Prohlédněte si jejich adresář!", "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s přes %(browserName)s na %(osName)s", - "customServer_text": "Ve vlastních serverových volbách se můžete přihlásit na ostatní Matrix servery, a to tak, že určíte URL jiného domovského serveru.
    To znamená, že můžete používat Riot s již existujícím Matrix účtem na jiném domovském serveru.

    Taky můžete nastavit vlastní server identity, pak ale nebudete moci zvát ostatní nebo naopak být ostatními zván prostřednictvím e-mailové adresy.", "Custom Server Options": "Vlastní serverové volby", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizovaný, šifrovaný chat a spolupráce na platformě [matrix]", "Riot/Web & Desktop chat": "Riot/Web a Desktop chat", "Riot/iOS & matrix-ios-sdk chat": "Riot/iOS a matrix-ios-sdk chat", "Riot/Android & matrix-android-sdk chat": "Riot/Android a matrix-android-sdk chat", - "To return to your account in future you need to set a password": "Abyste se mohli ke svému účtu v budoucnu vrátit, musíte si nastavit heslo", - "This will allow you to return to your account after signing out, and sign in on other devices.": "Toto vám umožní vrátit se po odhlášení ke svému účtu a používat jej na ostatních zařízeních.", - "You can now return to your account after signing out, and sign in on other devices.": "Nyní se můžete ke svému účtu vrátit i po odhlášení a používat jej na ostatních zařízeních.", - "Fetching third party location failed": "Nepodařilo se zjistit umístění třetí strany", - "Messages in one-to-one chats": "Zprávy v individuálních chatech", - "Notification targets": "Cíle upozornění", - "Notifications on the following keywords follow rules which can’t be displayed here:": "Upozornění na následující klíčová slova se řídí pravidly, která zde nelze zobrazit:", - "Unable to fetch notification target list": "Nepodařilo se získat seznam cílů upozornění", "Discussion of the Identity Service API": "Diskuze o API služby identity", - "Noisy": "Hlučný", - "Bug report sent": "Hlášení o chybě bylo odesláno", - "Thank you!": "Děkujeme vám!", - "Back": "Zpět", - "Event Type": "Typ události", - "Event Content": "Obsah události", - "Developer Tools": "Nástroje pro vývojáře", - "Filter results": "Filtrovat výsledky", - "You must specify an event type!": "Musíte určit typ události!", - "Event sent!": "Událost odeslána!", - "Failed to send custom event.": "Nepodařilo se odeslat vlastní událost.", - "Send Custom Event": "Odeslat vlastní událost", - "Show message in desktop notification": "Zobrazovat zprávu v upozornění na ploše", "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Přes vlastní serverové volby se můžete přihlásit k dalším Matrix serverům tak, že zadáte jinou adresu domovského serveru.
    Díky tomu můžete v Riotu používat Matrix účet z jiného domovského serveru.

    Můžete nastavit i vlastní server identity, ale pak už nebudete moci zvát ani být zván/a skrze e-mailovou adresu.", - "Edit": "Upravit", - "Pin Message": "Připíchnout zprávu", - "Register": "Zaregistrovat", - "Rooms": "Místnosti", - "Invite to this community": "Pozvat do této komunity", - "Add rooms to this community": "Přidat místnosti do této skupiny", - "State Key": "Stavový klíč", - "Send Custom State Event": "Poslat vlastní stavovou událost", - "Explore Room State": "Prohlížet stav místnosti", - "Unpin Message": "Odepnout zprávu", - "Toolbox": "Sada nástrojů", - "Send Account Data": "Poslat data o účtu", - "Explore Account Data": "Prozkoumat data o účtu", - "Appear Offline": "Jevit se offline", - "Away": "Pryč", - "Please install Chrome or Firefox for the best experience.": "Pro nejlepší zážitek si prosím nainstalujte Chrome nebo Firefox.", - "Safari and Opera work too.": "Safari a Opera fungují taky." + "Co-ordination for Riot translators": "Spolupráce pro překladatele Riot", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Také je možné nastavit vlastní server identity, ale pak nebude možné pozvat uživatele pomocí emailové adresy ani být pozván pomocí emailové adresy.", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Ve vlastních serverových volbách si můžete nastavit použití vlastního domovského serveru. To Vám umožní používat Riot s existujícím Matrix účtem na jiném serveru.", + "Sign In": "Přihlásit se", + "Create Account": "Vytvořit účet", + "Need help?": "Chcete pomoct?", + "Explore rooms": "Objevit místnosti", + "Room Directory": "Adresář místností" } diff --git a/src/i18n/strings/da.json b/src/i18n/strings/da.json index f669b2f0ae..1f404351fd 100644 --- a/src/i18n/strings/da.json +++ b/src/i18n/strings/da.json @@ -1,195 +1,13 @@ { - "Add an email address above to configure email notifications": "Tilføj en emailadresse ovenfor for at konfigurere e-mail-underretninger", - "All notifications are currently disabled for all targets.": "Alle meddelelser er for øjeblikket deaktiveret for alle mål.", - "An error occurred whilst saving your email notification preferences.": "Der opstod en fejl under opbevaring af dine e-mail-underretningsindstillinger.", - "Can't update user notification settings": "Kan ikke opdatere brugermeddelelsesindstillinger", - "Couldn't find a matching Matrix room": "Kunne ikke finde et matchende Matrix-rum", "Custom Server Options": "Brugerdefinerede serverindstillinger", - "delete the alias.": "Slet aliaset.", - "Direct Chat": "Personlig Chat", - "Directory": "Rum katalog", "Dismiss": "Afskedige", - "Enable audible notifications in web client": "Aktivér hørbare underretninger i webklienten", - "Enable desktop notifications": "Aktivér desktop meddelelser", - "Enable email notifications": "Aktivér e-mail-underretninger", - "Enable notifications for this account": "Aktivér underretninger for dette brugernavn", - "Enable them now": "Aktivér dem nu", - "Enter keywords separated by a comma:": "Indtast søgeord adskilt af et komma:", - "Error": "Fejl", - "Error saving email notification preferences": "Fejl ved at gemme e-mail-underretningsindstillinger", - "#example": "#eksempel", - "Failed to change settings": "Kunne ikke ændre indstillinger", - "Failed to update keywords": "Kunne ikke opdatere søgeord", - "Failed to get protocol list from Home Server": "Kunne ikke få protokolliste fra Home Server", - "Failed to get public room list": "Kunne ikke få offentlig rumliste", - "Failed to set Direct Message status of room": "Kunne ikke indstille Direkte Beskedstatus for rummet", - "Favourite": "Favorit", - "Fetching third party location failed": "Hentning af tredjeparts placering mislykkedes", - "Files": "Filer", - "Filter room names": "Filtrér rumnavne", - "Forget": "Glem", - "Guests can join": "Gæster kan deltage", - "Invite to this room": "Inviter til dette rum", - "Keywords": "Søgeord", - "Leave": "Forlad", - "Low Priority": "Lav prioritet", - "Members": "Medlemmer", - "No rooms to show": "Ingen rum at vise", - "Noisy": "Støjende", - "Notification targets": "Meddelelsesmål", - "Notifications": "Notifikationer", - "Notifications on the following keywords follow rules which can’t be displayed here:": "Meddelelser om følgende søgeord følger regler, der ikke kan vises her:", - "Notify for all other messages/rooms": "Underret om alle andre meddelelser / rum", - "Notify me for anything else": "Underret mig om noget andet", - "Off": "Slukket", - "On": "Tændt", - "Operation failed": "Operation mislykkedes", "powered by Matrix": "Drevet af Matrix", - "Reject": "Afvis", - "Remove": "Fjern", - "Remove from Directory": "Fjern fra Katalog", - "Riot does not know how to join a room on this network": "Riot ved ikke, hvordan man kan deltage i et rum på dette netværk", - "Room not found": "Rummet ikke fundet", - "Search for a room": "Søg efter et rum", - "The Home Server may be too old to support third party networks": "Hjemmeserveren kan være for gammel til at understøtte tredjepartsnetværk", - "There are advanced notifications which are not shown here": "Der er avancerede meddelelser, som ikke vises her", - "The server may be unavailable or overloaded": "Serveren kan være utilgængelig eller overbelastet", - "Unable to fetch notification target list": "Kan ikke hente meddelelsesmålliste", - "Unable to join network": "Kan ikke forbinde til netværket", - "Unable to look up room ID from server": "Kunne ikke slå rum-id op på server", - "unknown error code": "Ukendt fejlkode", - "Unnamed room": "Unavngivet rum", - "World readable": "Læselig af alle", - "You are not receiving desktop notifications": "Du modtager ikke skrivebordsmeddelelser", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Du har muligvis konfigureret dem i en anden klient end Riot. Du kan ikke tune dem i Riot, men de gælder stadig", - "Close": "Luk", "Riot is not supported on mobile web. Install the app?": "Riot understøtter ikke mobilhjemmesider. Vil du installere app'en?", - "Collecting app version information": "Indsamler app versionsoplysninger", - "Collecting logs": "Indsamler logfiler", - "Uploading report": "Uploader rapport", - "Waiting for response from server": "Venter på svar fra server", "Riot Desktop on %(platformName)s": "Riot Desktop på %(platformName)s", "Unknown device": "Ukendt enhed", "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s på %(osName)s", "You need to be using HTTPS to place a screen-sharing call.": "Du skal bruge HTTPS for at lave skærm-delings-opkald.", - "Messages containing my display name": "Beskeder der indeholder mit viste navn", - "Messages containing my user name": "Beskeder der indeholder mit brugernavn", - "Messages in one-to-one chats": "Beskeder i en-til-en chats", - "Messages in group chats": "Beskeder i gruppechats", - "When I'm invited to a room": "Når jeg bliver inviteret til et rum", - "Call invitation": "Opkalds invitation", - "Messages sent by bot": "Beskeder sendt af en bot", - "OK": "OK", - "Messages containing keywords": "Beskeder der indeholder keywords", - "Advanced notification settings": "Avancerede notifikationsindstillinger", - "Show message in desktop notification": "Vis besked i skrivebordsnotifikation", - "Failed to set direct chat tag": "Kunne ikke markere rummet som direkte chat", - "Failed to remove tag %(tagName)s from room": "Kunne ikke fjerne tag(s): %(tagName)s fra rummet", - "Failed to add tag %(tagName)s to room": "Kunne ikke tilføje tag(s): %(tagName)s til rummet", - "Search…": "Søg…", - "Search": "Søg", - "This Room": "Dette rum", - "All Rooms": "Alle rum", - "Sunday": "Søndag", - "Monday": "Mandag", - "Tuesday": "Tirsdag", - "Wednesday": "Onsdag", - "Thursday": "Torsdag", - "Friday": "Fredag", - "Saturday": "Lørdag", - "Today": "I dag", - "Yesterday": "I går", "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Du kan bruge de brugerdefinerede server indstillinger til at logge ind på andre Matrix servere ved at skrive en anden Home Server adresse.
    Dette tillader dig at bruge Riot med en eksisterende Matrix konto på en anden home server.

    Du kan også indstille en brugerdefineret identity server men så vil du ikke kunne invitere brugere ved hjælp af deres emailadresse eller selv blive inviteret med emailadresse.", - "What's New": "Hvad er nyt", - "Update": "Opdater", - "What's new?": "Hvad er nyt?", - "Appear Offline": "Fremstå Offline", - "Away": "Ikke til stede", - "A new version of Riot is available.": "En ny version a Riot er tilgængelig.", - "To return to your account in future you need to set a password": "For at komme ind på din konto i fremtiden skal du indstille et password", - "Set Password": "Indstil Password", - "Error encountered (%(errorDetail)s).": "En fejl er opstået (%(errorDetail)s).", - "Checking for an update...": "Checker om der er en opdatering...", - "No update available.": "Ingen opdatering tilgængelig.", - "Downloading update...": "Downloader opdatering...", - "Warning": "Advarsel", - "You cannot delete this image. (%(code)s)": "Du kan ikke slette dette billede. (%(code)s)", - "Uploaded on %(date)s by %(user)s": "Uploadet den %(date)s af %(user)s", - "Download this file": "Download denne fil", - "Please describe the bug and/or send logs.": "Beskriv venligst fejlen og/eller send logs.", - "Loading bug report module": "Indlæser fejlrepporterings modul", - "Bug report sent": "Fejl rapporteret", - "Thank you!": "Tak!", - "Failed to send report: ": "Kunne ikke sende rapport: ", - "Cancel": "Afbryd", - "Report a bug": "Rapportér en fejl", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Beskriv venlist fejlen. Hvad gjorde du? Hvad forventede du ville ske? Hvad skete rent faktisk?", - "Describe your problem here.": "Beskriv dit problem her.", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "For at diagnosticere problemer vil logs fra denne klient blive sendt sammen med fejlrapporten. Hvis du vil foretrække kun at sende teksten foroven, bedes du fjerne fluebenet:", - "Send logs": "Send logs", - "Send": "Send", - "Unavailable": "Utilgængelig", - "Changelog": "Ændringslog", - "Back": "Tilbage", - "Send Custom Event": "Send Brugerdefineret Begivenhed", - "You must specify an event type!": "Du skal angive en begivenhedstype!", - "Event sent!": "Begivenhed sendt!", - "Failed to send custom event.": "Kunne ikke sende brugerdefinerede begivenhed.", - "Event Type": "Begivenhedstype", - "State Key": "Tilstandsnøgle", - "Event Content": "Begivenhedsindhold", - "Send Account Data": "Send Konto Data", - "Filter results": "Filtrér resultater", - "Explore Room State": "Udforsk Rum Tilstand", - "Edit": "Rediger", - "Explore Account Data": "Udforsk Konto Data", - "Toolbox": "Værktøjer", - "Developer Tools": "Udviklingsværktøjer", - "You have successfully set a password!": "Du har succesfuldt indstillet et password!", - "You have successfully set a password and an email address!": "Du har succesfuldt indstillet et password og en emailadresse!", - "You can now return to your account after signing out, and sign in on other devices.": "Du kan nu vende tilbage til din konto efter at have logget ud og logge ind på andre enheder.", - "Remember, you can always set an email address in user settings if you change your mind.": "Husk, du kan altid indstille en emailadresse i dine bruger indstillinger hvis du ombestemmer dig.", - "Continue": "Fortsæt", - "Failed to change password. Is your password correct?": "Kunne ikke ændre password. Er dit password korrekt?", - "(HTTP status %(httpStatus)s)": "(HTTP tilstand %(httpStatus)s)", - "Please set a password!": "Indstil venligst et password!", - "This will allow you to return to your account after signing out, and sign in on other devices.": "Dette vil tillade dig at vende tilbage til din konto efter at have logget ud og at logge ind på andre enheder.", - "You cannot delete this message. (%(code)s)": "Du kan ikke slette denne besked. (%(code)s)", - "Resend": "Send igen", - "Cancel Sending": "Stop Forsendelse", - "Forward Message": "Videresend Besked", - "Unpin Message": "Fasthold ikke længere Besked", - "Pin Message": "Fasthold Besked", - "View Source": "Se Kilde", - "View Decrypted Source": "Se Dekrypteret Kilde", - "Unhide Preview": "Vis Forhåndsvisning", - "Permalink": "Permanent link", - "Quote": "Citat", - "Source URL": "Kilde URL", - "Failed to forget room %(errCode)s": "Kunne ikke glemme rummet %(errCode)s", - "All messages (loud)": "Alle beskeder (høj)", - "All messages": "Alle beskeder", - "Mentions only": "Kun nævninger", - "Mute": "Sæt på lydløs", - "Sorry, your browser is not able to run Riot.": "Beklager, din browser kan ikke køre Riot.", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot bruger mange avancerede browser funktioner, hvoraf nogle af dem ikke er tilgængelige eller er eksperimentelle i din browser.", - "Please install Chrome or Firefox for the best experience.": "Installer venligst Chrome eller Firefox for den bedste oplevelse.", - "Safari and Opera work too.": "Safari og Opera virker også.", - "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Med din nuværnde broser kan udseendet og fornemmelsen af programmet være helt forkert og nogle funktioner virker måske ikke. Hvis du alligevel vil prøve så kan du fortsætte, men det er på egen risiko!", - "I understand the risks and wish to continue": "Jeg forstår risikoen og ønsker at fortsætte", - "Couldn't load home page": "Kunne ikke indlæse startsiden", - "Login": "Log ind", - "Register": "Registrér", - "Rooms": "Rum", - "Hide panel": "Gem panel", - "Invite to this community": "Inviter til dette fællesskab", - "Add rooms to this community": "Tilføj rum til dette fællesskab", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Slet rumaliaset %(alias)s og fjern %(name)s fra kataloget?", - "Remove %(name)s from the directory?": "Fjern %(name)s fra kataloget?", - "remove %(name)s from the directory.": "fjern %(name)s fra kataloget.", - "more": "mere", - "Expand panel": "Udvid panel", - "Collapse panel": "Slå panel sammen", "Welcome to Riot.im": "Velkommen til Riot.im", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentraliseret, krypteret chat & samarbejde baseret på [matrix]", "Search the room directory": "Søg i rumkataloget", @@ -217,5 +35,18 @@ "Contributing code to Matrix and Riot": "Biddrag med kode til Matrix og Riot", "Dev chat for the Riot/Web dev team": "Udviklerchat til Riot/Web udviklerholdet", "Dev chat for the Dendrite dev team": "Udviklerchat til Dendrite udviklerholdet", - "Co-ordination for Riot/Web translators": "Co-ordination af Riot/Web oversættere" + "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Din Riot konfiguration indeholder ugyldig JSON. Venligst korrigér problemet og opdatér siden.", + "The message from the parser is: %(message)s": "Beskeden fra parseren er: %(message)s", + "Invalid JSON": "Ugyldig JSON", + "Your Riot is misconfigured": "Din Riot er konfigureret forkert", + "Unexpected error preparing the app. See console for details.": "Uventet fejl ved forberedelse af appen. Se konsollen for detaljer.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Ugyldig konfiguration: kan kun angive en af default_server_config, default_server_name eller default_hs_url.", + "Invalid configuration: no default server specified.": "Ugyldig konfiguration: ingen standardserver angivet.", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Du kan bruge de brugertilpassede serverindstillinger til at logge på andre Matrix servere ved at angive en anden homeserver URL. Dette giver dig mulighed for at bruge Riot med en eksisterende Matrix konto på en anden homeserver.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Du kan også indstille en brugertilpasset identitetsserver, men så vil du ikke kunne invitere brugere pr. e-mail eller selv kunne inviteres pr. e-mail.", + "Sign In": "Log på", + "Create Account": "Opret konto", + "Need help?": "Brug for hjælp?", + "Explore rooms": "Udforsk rum", + "Room Directory": "Rumliste" } diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index b44e17cb6b..365f9ac1bb 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -1,156 +1,16 @@ { - "Members": "Mitglieder", - "Files": "Dateien", - "Notifications": "Benachrichtigungen", - "Invite to this room": "In diesen Raum einladen", - "Filter room names": "Raum-Namen filtern", "powered by Matrix": "betrieben mit Matrix", "Custom Server Options": "Benutzerdefinierte Server-Optionen", "Dismiss": "Ablehnen", - "Failed to get protocol list from Home Server": "Fehler beim Abrufen der Protokoll-Liste vom Home-Server", - "The Home Server may be too old to support third party networks": "Der Home-Server ist eventuell zu alt, um Drittanbieter-Netzwerke zu unterstützen", - "Directory": "Raum-Verzeichnis", - "Search for a room": "Nach einem Raum suchen", - "No rooms to show": "Keine anzeigbaren Räume", - "World readable": "Lesbar für alle", - "Guests can join": "Gäste können beitreten", - "You are not receiving desktop notifications": "Du erhältst keine Desktop-Benachrichtigungen", - "Enable them now": "Aktiviere diese jetzt", - "Add an email address above to configure email notifications": "Füge oben eine E-Mail-Adresse hinzu, um die E-Mail-Benachrichtigungseinstellungen zu konfigurieren", - "All notifications are currently disabled for all targets.": "Aktuell sind alle Benachrichtigungen für alle Ziele deaktiviert.", - "An error occurred whilst saving your email notification preferences.": "Beim Speichern deiner E-Mail-Benachrichtigungseinstellungen ist ein Fehler aufgetreten.", - "Can't update user notification settings": "Benachrichtigungs-Einstellungen des Benutzers konnten nicht aktualisiert werden", - "Couldn't find a matching Matrix room": "Konnte keinen entsprechenden Matrix-Raum finden", - "delete the alias.": "Lösche den Alias.", - "Direct Chat": "Direkt-Chat", - "Enable audible notifications in web client": "Audio-Benachrichtigungen im Web-Client aktivieren", - "Enable desktop notifications": "Desktop-Benachrichtigungen aktivieren", - "Enable email notifications": "E-Mail-Benachrichtigungen aktivieren", - "Enable notifications for this account": "Benachrichtigungen für dieses Benutzerkonto aktivieren", - "Enter keywords separated by a comma:": "Schlüsselwörter kommagetrennt eingeben:", - "Error": "Fehler", - "Error saving email notification preferences": "Fehler beim Speichern der E-Mail-Benachrichtigungseinstellungen", - "#example": "#Beispiel", - "Failed to change settings": "Einstellungen konnten nicht geändert werden", - "Failed to update keywords": "Schlüsselwörter konnten nicht aktualisiert werden", - "Failed to get public room list": "Die Liste der öffentlichen Räume konnte nicht geladen werden", - "Failed to set Direct Message status of room": "Konnte den direkten Benachrichtigungsstatus nicht setzen", - "Favourite": "Favorit", - "Fetching third party location failed": "Das Abrufen des Drittanbieterstandorts ist fehlgeschlagen", - "Forget": "Entfernen", - "Keywords": "Schlüsselwörter", - "Leave": "Verlassen", - "Low Priority": "Niedrige Priorität", - "Noisy": "Laut", - "Notification targets": "Benachrichtigungsziele", - "Notifications on the following keywords follow rules which can’t be displayed here:": "Die Benachrichtigungen zu den folgenden Schlüsselwörtern folgen Regeln, die hier nicht angezeigt werden können:", - "Notify for all other messages/rooms": "Benachrichtigungen für alle anderen Mitteilungen/Räume aktivieren", - "Operation failed": "Aktion fehlgeschlagen", - "Reject": "Ablehnen", - "Remove": "Entfernen", - "Remove from Directory": "Aus dem Raum-Verzeichnis entfernen", - "Riot does not know how to join a room on this network": "Riot weiß nicht, wie es einem Raum auf diesem Netzwerk beitreten soll", - "Room not found": "Raum nicht gefunden", - "There are advanced notifications which are not shown here": "Es existieren erweiterte Benachrichtigungen, welche hier nicht angezeigt werden", - "The server may be unavailable or overloaded": "Der Server ist vermutlich nicht erreichbar oder überlastet", - "Unable to fetch notification target list": "Liste der Benachrichtigungsempfänger konnte nicht abgerufen werden", - "Unable to join network": "Es ist nicht möglich, dem Netzwerk beizutreten", - "unknown error code": "Unbekannter Fehlercode", - "Unnamed room": "Unbenannter Raum", - "Notify me for anything else": "Über alles andere benachrichtigen", - "Off": "Aus", - "On": "An", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Du hast sie eventuell auf einem anderen Matrix-Client und nicht in Riot konfiguriert. Sie können in Riot nicht verändert werden, gelten aber trotzdem", - "All messages": "Alle Nachrichten", - "All messages (noisy)": "Alle Nachrichten (laut)", - "Cancel Sending": "Senden abbrechen", - "Close": "Schließen", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Soll der Raum-Alias %(alias)s gelöscht und der %(name)s aus dem Verzeichnis entfernt werden?", - "Download this file": "Datei herunterladen", - "Failed to add tag %(tagName)s to room": "Das Hinzufügen des Tags %(tagName)s für den Raum ist fehlgeschlagen", - "Failed to forget room %(errCode)s": "Das Entfernen des Raums ist fehlgeschlagen %(errCode)s", - "Failed to remove tag %(tagName)s from room": "Das Entfernen des Tags %(tagName)s für den Raum ist fehlgeschlagen", - "Failed to set direct chat tag": "Fehler beim Setzen der \"Direkter Chat\"-Kennzeichnung", - "Mentions only": "Nur, wenn du erwähnt wirst", - "Mute": "Stummschalten", - "Permalink": "Permanenter Link", - "Quote": "Zitat", - "Remove %(name)s from the directory?": "Soll der Raum %(name)s aus dem Verzeichnis entfernt werden?", - "remove %(name)s from the directory.": "entferne %(name)s aus dem Verzeichnis.", - "Resend": "Erneut senden", - "Source URL": "Quell-URL", - "Unable to look up room ID from server": "Es ist nicht möglich, die Raum-ID auf dem Server nachzuschlagen", - "Unhide Preview": "Vorschau wieder anzeigen", - "Uploaded on %(date)s by %(user)s": "Hochgeladen: %(date)s von %(user)s", - "View Decrypted Source": "Entschlüsselten Quellcode ansehen", - "View Source": "Quellcode ansehen", - "You cannot delete this image. (%(code)s)": "Das Bild kann nicht gelöscht werden. (%(code)s)", - "You cannot delete this message. (%(code)s)": "Diese Nachricht kann nicht gelöscht werden. (%(code)s)", - "Today": "Heute", - "Wednesday": "Mittwoch", - "Thursday": "Donnerstag", - "Friday": "Freitag", - "Saturday": "Samstag", - "Tuesday": "Dienstag", - "Sunday": "Sonntag", - "Monday": "Montag", - "Yesterday": "Gestern", - "Advanced notification settings": "Erweiterte Benachrichtigungs-Einstellungen", - "Call invitation": "Anruf-Einladung", - "Messages containing my display name": "Nachrichten, die meinen Anzeigenamen enthalten", - "Messages containing my user name": "Nachrichten, die meinen Benutzernamen enthalten", - "Messages in group chats": "Nachrichten in Gruppen-Chats", - "Messages in one-to-one chats": "Nachrichten in Einzel-Chats", - "Messages sent by bot": "Nachrichten von Bots", - "more": "mehr", - "When I'm invited to a room": "Wenn ich in einen Raum eingeladen werde", - "customServer_text": "Du kannst die erweiterten Server-Optionen nutzen, um dich auf anderen Matrix-Servern anzumelden, indem du eine andere Heimserver-URL eingibst.
    Dies ermöglicht es dir, Riot mit einem bereits existierenden Matrix-Konto auf einem anderen Heimserver zu nutzen.

    Du kannst auch einen benutzerdefinierten Identitäts-Server eingeben, allerdings wirst du dann nicht in der Lage sein, andere Benutzer per E-Mail-Adresse einzuladen oder selbst Einladungen per E-Mail-Adresse zu erhalten.", - "Safari and Opera work too.": "Safari und Opera funktionieren ebenfalls.", - "I understand the risks and wish to continue": "Ich verstehe das Risiko und möchte fortfahren", - "Messages containing keywords": "Nachrichten, die Schlüsselwörter enthalten", - "Please install Chrome or Firefox for the best experience.": "Bitte installiere Chrome oder Firefox für die beste Erfahrung.", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot nutzt zahlreiche fortgeschrittene Browser-Funktionen, die teilweise in deinem aktuell verwendeten Browser noch nicht verfügbar sind oder sich noch im experimentellen Status befinden.", - "Sorry, your browser is not able to run Riot.": "Es tut uns leid, aber dein Browser kann Riot nicht ausführen.", - "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "In deinem aktuell verwendeten Browser können Aussehen und Handhabung der Anwendung unter Umständen noch komplett fehlerhaft sein, so dass einige bzw. im Extremfall alle Funktionen nicht zur Verfügung stehen. Du kannst es trotzdem versuchen und fortfahren, bist dabei aber bezüglich aller auftretenden Probleme auf dich allein gestellt!", - "Expand panel": "Panel ausklappen", - "Collapse panel": "Panel einklappen", "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s auf %(osName)s", - "A new version of Riot is available.": "Eine neue Version von Riot ist verfügbar.", - "All Rooms": "In allen Räumen", - "Cancel": "Abbrechen", - "Changelog": "Änderungsprotokoll", - "Collecting app version information": "App-Versionsinformationen werden abgerufen", - "Collecting logs": "Protokolle werden abgerufen", - "Describe your problem here.": "Beschreibe dein Problem hier.", - "Failed to send report: ": "Senden des Reports fehlgeschlagen: ", - "Forward Message": "Nachricht weiterleiten", - "Hide panel": "Panel verbergen", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Zur Diagnose von Softwareproblemen werden mit diesem Fehlerbericht auch Log-Dateien übermittelt. Wenn nur der oben eingegebene Text übermittelt werden soll, bitte die nachfolgende Auswahl entsprechend abwählen:", - "Loading bug report module": "Lade Fehlerbericht-Modul", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Bitte den Softwarefehler (vorzugsweise auf Englisch) beschreiben. Was hast du gemacht? Was sollte passieren? Was ist tatsächlich passiert?", - "Please describe the bug and/or send logs.": "Bitte den Fehler beschreiben und/oder Log-Dateien übermitteln.", - "Report a bug": "Einen Softwarefehler melden", "Riot Desktop on %(platformName)s": "Riot Desktop auf %(platformName)s", "Riot is not supported on mobile web. Install the app?": "Riot wird im mobilen Web nicht unterstützt. App installieren?", - "Search": "Suchen", - "Search…": "Suchen…", - "Send": "Senden", - "Send logs": "Logdateien übermitteln", - "This Room": "In diesem Raum", - "Unavailable": "Nicht verfügbar", "Unknown device": "Unbekanntes Gerät", - "Update": "Aktualisieren", - "Uploading report": "Lade Bericht hoch", - "What's New": "Was ist neu", - "What's new?": "Was ist neu?", - "Waiting for response from server": "Auf Antwort vom Server warten", "You need to be using HTTPS to place a screen-sharing call.": "Du musst HTTPS nutzen um einen Anruf mit Bildschirmfreigabe durchzuführen.", - "OK": "OK", - "Login": "Anmeldung", "Welcome to Riot.im": "Willkommen bei Riot.im", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Dezentrale, verschlüsselte Chat- & Kollaborationslösung unterstützt von [matrix]", "Search the room directory": "Raum-Verzeichnis durchsuchen", - "Chat with Riot Bot": "Mit dem Riot-Bot chatten", + "Chat with Riot Bot": "Chatte mit dem Riot Bot", "Get started with some tips from Riot Bot!": "Lass Dir vom Riot-Bot eine Einführung geben!", "Discussion of all things Matrix!": "\"Diskussion über alle Dinge\"-Matrix!", "Riot/Web & Desktop chat": "Riot/Web & Desktop-Chat", @@ -171,56 +31,24 @@ "Support for those using, running and writing other bridges": "Unterstützung für die, die andere Matrix-Bridges nutzen, betreiben oder entwickeln", "Contributing code to Matrix and Riot": "Code zu Matrix und Riot beitragen", "Dev chat for the Riot/Web dev team": "Entwickler-Chat für das Riot/Web-Entwickler-Team", - "Co-ordination for Riot/Web translators": "Koordination für Riot/Web-Übersetzer", "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Im Matrix-Netzwerk existieren bereits jetzt zahlreiche Räume, die entweder mit bekannten Netzwerken wie Slack, IRC, Gitter, usw. verknüpft sind oder auch komplett eigenständig betrieben werden. Einen genauen Überblick erhältst du im Raum-Verzeichnis!", - "Failed to change password. Is your password correct?": "Passwortänderung fehlgeschlagen. Ist dein Passwort richtig?", - "You have successfully set a password!": "Du hast erfolgreich ein Passwort gesetzt!", - "You can now return to your account after signing out, and sign in on other devices.": "Du kannst nun zu deinem Benutzerkonto zurückkehren, nachdem du dich abgemeldet hast. Anschließend kannst du dich an anderen Geräten anmelden.", - "Continue": "Fortfahren", - "Please set a password!": "Bitte setze ein Passwort!", - "This will allow you to return to your account after signing out, and sign in on other devices.": "Dies erlaubt dir, dich wieder an deinem Konto anzumelden, nachdem du dich abgemeldet hast.", "Dev chat for the Dendrite dev team": "Entwickler-Chat für das Dendrite-Entwickler-Team", "General discussion about Matrix and Riot": "Allgemeine Diskussion über Matrix und Riot", - "(HTTP status %(httpStatus)s)": "(HTTP-Status %(httpStatus)s)", - "You have successfully set a password and an email address!": "Du hast erfolgreich ein Passwort und eine E-Mail-Adresse gesetzt!", - "Remember, you can always set an email address in user settings if you change your mind.": "Vergiss nicht, dass du in den Benutzereinstellungen jederzeit eine E-Mail-Adresse setzen kannst, wenn du deine Meinung änderst.", - "To return to your account in future you need to set a password": "Um in Zukunft auf dein Benutzerkonto zugreifen zu können, musst du ein Passwort setzen", - "Set Password": "Passwort einrichten", - "Warning": "Warnung", - "Checking for an update...": "Nach Updates suchen...", - "Error encountered (%(errorDetail)s).": "Es ist ein Fehler aufgetreten (%(errorDetail)s).", - "No update available.": "Kein Update verfügbar.", - "Downloading update...": "Update wird heruntergeladen...", - "Couldn't load home page": "Startseite konnte nicht geladen werden", - "Bug report sent": "Fehlerbericht wurde gesendet", - "Thank you!": "Danke!", - "Back": "Zurück", - "Developer Tools": "Entwicklerwerkzeuge", - "Failed to send custom event.": "Senden des benutzerdefinierten Events fehlgeschlagen.", - "Send Custom Event": "Benutzerdefiniertes Event senden", - "Send Custom State Event": "Benutzerdefiniertes Status-Event senden", - "Explore Room State": "Raum-Status erkunden", - "Event sent!": "Event gesendet!", - "Event Type": "Event-Typ", - "Event Content": "Event-Inhalt", - "State Key": "Status-Schlüssel", - "Filter results": "Ergebnisse filtern", - "You must specify an event type!": "Du musst einen Event-Typ spezifizieren!", - "Show message in desktop notification": "Nachricht in der Desktop-Benachrichtigung anzeigen", - "Pin Message": "Nachricht anheften", - "Unpin Message": "Nachricht nicht mehr anheften", - "Add rooms to this community": "Räume zu dieser Community hinzufügen", - "Edit": "Editieren", - "Register": "Registrieren", - "Rooms": "Räume", - "Invite to this community": "In diese Community einladen", "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Die benutzerdefinierten Server-Einstellungen kannst du verwenden, um dich auf anderen Matrix-Servern anzumelden, indem du eine abweichende Heimserver-URL eingibst.
    Somit ist es möglich, Riot mit einem bereits bestehendem Matrix-Benutzerkonto auf einem anderen Heimserver zu verwenden.

    Außerdem kannst du einen benutzerdefinierten Identitätsserver eingeben. Allerdings kannst du in diesem Fall Benutzer nicht mehr per E-Mail-Adresse einladen und auch selbst nicht mehr per E-Mail-Adresse eingeladen werden.", - "Toolbox": "Werkzeugkasten", - "Explore Account Data": "Benutzerkonto-Daten analysieren", - "Send Account Data": "Benutzerkonto-Daten senden", - "Away": "Abwesend", - "Appear Offline": "Als offline anzeigen", - "Safari and Opera work too.": "Safari und Opera sind weitere Alternativen.", - "Please install Chrome or Firefox for the best experience.": "Bitte installiere Chrome oder Firefox für ein optimales Anwendungsergebnis.", - "Reply": "Antworten" + "Co-ordination for Riot translators": "Koordination für Riot-Übersetzer", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Du kannst die erweiterte Serveroption nutzen um dich an einem anderen Matrixserver anzumelden, indem du eine andere Heimserver-URL angibst. Dies erlaubt dir, Riot mit einem existierenden Matrix-Konto auf einem anderen Heimserver zu nutzen.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Sie können auch einen benutzerdefinierten Identitätsserver festlegen, aber Sie können keine Benutzer per E-Mail-Adresse einladen oder selbst per E-Mail-Adresse eingeladen werden.", + "Sign In": "Anmelden", + "Create Account": "Konto erstellen", + "Need help?": "Brauchst du Hilfe?", + "Explore rooms": "Räume erkunden", + "Room Directory": "Raumverzeichnis", + "Unexpected error preparing the app. See console for details.": "Unerwarteter Fehler bei der Vorbereitung der App. Siehe Konsole für Details.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Ungültige Konfiguration: Es kann nur eine der Optionen default_server_config, default_server_name oder default_hs_url angegeben werden.", + "Invalid configuration: no default server specified.": "Ungültige Konfiguration: Es wurde kein Standardserver angegeben.", + "This installation of Riot seems to have an invalid server configuration. If you are the administrator, please correct the error below": "Diese Installation von Riot scheint eine ungültige Serverkonfiguration zu haben. Wenn Sie der Administrator sind, korrigieren Sie bitte den folgenden Fehler", + "Your Riot is misconfigured": "Dein Riot ist falsch konfiguriert", + "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Deine Riot Konfiguration enthält ungültiges JSON. Bitte korrigiere das Problem und lade die Seite neu.", + "The message from the parser is: %(message)s": "Die Nachricht des Parsers ist: %(message)s", + "Invalid JSON": "Ungültiges JSON" } diff --git a/src/i18n/strings/el.json b/src/i18n/strings/el.json index 1e8cf01bfc..3a8d21d2e0 100644 --- a/src/i18n/strings/el.json +++ b/src/i18n/strings/el.json @@ -1,156 +1,18 @@ { - "A new version of Riot is available.": "Μία νέα έκδοση του Riot είναι διαθέσιμη.", - "Advanced notification settings": "Προχωρημένες ρυθμίσεις ειδοποιήσεων", - "All messages": "Όλα τα μηνύματα", - "All Rooms": "Όλα τα δωμάτια", - "All notifications are currently disabled for all targets.": "Όλες οι ειδοποιήσεις είναι προς το παρόν απενεργοποιημένες για όλες τις συσκευές.", - "An error occurred whilst saving your email notification preferences.": "Ένα σφάλμα προέκυψε κατά την αποθήκευση των ρυθμίσεων σας.", - "Call invitation": "Πρόσκληση σε κλήση", - "Cancel": "Ακύρωση", - "Cancel Sending": "Ακύρωση αποστολής", - "Can't update user notification settings": "Δεν είναι δυνατή η ενημέρωση των ρυθμίσεων ειδοποίησης χρήστη", - "Changelog": "Αλλαγές", - "Close": "Κλείσιμο", - "Collapse panel": "Ελαχιστοποίηση καρτέλας", "Custom Server Options": "Προσαρμοσμένες ρυθμίσεις διακομιστή", - "Describe your problem here.": "Περιγράψτε το πρόβλημα σας εδώ.", - "Direct Chat": "Απευθείας συνομιλία", - "Directory": "Ευρετήριο", - "Download this file": "Λήψη αρχείου", - "Enable audible notifications in web client": "Ενεργοποίηση ηχητικών ειδοποιήσεων", - "Enable email notifications": "Ενεργοποίηση ειδοποιήσεων μέσω μηνυμάτων ηλ. αλληλογραφίας", - "Enable notifications for this account": "Ενεργοποίηση ειδοποιήσεων για τον λογαριασμό", - "Enter keywords separated by a comma:": "Προσθέστε λέξεις κλειδιά χωρισμένες με κόμμα:", - "Error": "Σφάλμα", - "#example": "#παράδειγμα", - "Expand panel": "Μεγιστοποίηση καρτέλας", - "Safari and Opera work too.": "Safari και Opera λειτουργούν επίσης.", - "Add an email address above to configure email notifications": "Προσθέστε μια διεύθυνση ηλεκτρονικής αλληλογραφίας στο παραπάνω πεδίο, για να έχετε τη δυνατότητα να λαμβάνετε ειδοποιήσεις", - "Collecting app version information": "Συγκέντρωση πληροφοριών σχετικά με την έκδοση της εφαρμογής", - "customServer_text": "Μπορείτε να χρησιμοποιήσετε τις προσαρμοσμένες ρυθμίσεις για να εισέλθετε σε άλλους διακομιστές Matrix επιλέγοντας μια διαφορετική διεύθυνση για το διακομιστή.
    Αυτό σας επιτρέπει να χρησιμοποιήσετε την εφαρμογή Riot με έναν υπάρχοντα λογαριασμό σε διαφορετικό διακομιστή.

    Επίσης μπορείτε να επιλέξετε ένα διαφορετικό διακομιστή ταυτότητας αλλά δεν θα έχετε τη δυνατότητα να προσκαλέσετε άλλους χρήστες ή να σας προσκαλέσουν μέσω μηνυμάτων ηλεκτρονικής αλληλογραφίας.", "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s μέσω %(browserName)s σε %(osName)s", - "All messages (noisy)": "Όλα τα μηνύματα (δυνατά)", - "delete the alias.": "διέγραψε το ψευδώνυμο.", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Διαγραφή του ψευδώνυμου %(alias)s και αφαίρεση του %(name)s από το ευρετήριο;", "Dismiss": "Απόρριψη", - "Failed to add tag %(tagName)s to room": "Δεν ήταν δυνατή η προσθήκη της ετικέτας %(tagName)s στο δωμάτιο", - "Failed to change settings": "Δεν ήταν δυνατή η αλλαγή των ρυθμίσεων", - "Favourite": "Αγαπημένο", - "Files": "Αρχεία", - "Filter room names": "Φιλτράρισμα δωματίων", - "Forward Message": "Προώθηση", - "Guests can join": "Επισκέπτες μπορούν να συνδεθούν", - "Hide panel": "Απόκρυψη καρτέλας", - "I understand the risks and wish to continue": "Κατανοώ του κινδύνους και επιθυμώ να συνεχίσω", - "Invite to this room": "Πρόσκληση σε αυτό το δωμάτιο", - "Keywords": "Λέξεις κλειδιά", - "Leave": "Αποχώρηση", - "Low Priority": "Χαμηλή προτεραιότητα", - "Members": "Μέλη", - "Messages containing keywords": "Μηνύματα που περιέχουν λέξεις κλειδιά", - "Messages containing my user name": "Μηνύματα που περιέχουν το ψευδώνυμο μου", - "Messages in group chats": "Μηνύματα σε ομαδικές συνομιλίες", - "Messages in one-to-one chats": "Μηνύματα σε 1-προς-1 συνομιλίες", - "Messages sent by bot": "Μηνύματα από bots", - "more": "περισσότερα", - "Mute": "Σίγαση", - "No rooms to show": "Δεν υπάρχουν δωμάτια για εμφάνιση", - "Noisy": "Δυνατά", - "Notifications": "Ειδοποιήσεις", - "Notifications on the following keywords follow rules which can’t be displayed here:": "Οι ειδοποιήσεις για τις επόμενες λέξεις κλειδία ακολουθούν κανόνες που δεν είναι δυνατόν να εμφανιστούν εδώ:", - "Notify for all other messages/rooms": "Ειδοποίηση για όλα τα υπόλοιπα μηνύματα/δωμάτια", - "Notify me for anything else": "Ειδοποίηση για οτιδήποτε άλλο", - "Operation failed": "Η λειτουργία απέτυχε", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Παρακαλούμε περιγράψτε το σφάλμα. Τι κάνατε; Τι περιμένατε να συμβεί; Τι έγινε τελικά;", - "Reject": "Απόρριψη", - "Remove": "Αφαίρεση", - "Remove from Directory": "Αφαίρεση από το ευρετήριο", - "Resend": "Αποστολή ξανά", "Riot Desktop on %(platformName)s": "Riot Desktop σε %(platformName)s", - "Room not found": "Το δωμάτιο δεν βρέθηκε", - "Search": "Αναζήτηση", - "Search…": "Αναζήτηση…", - "Send": "Αποστολή", - "This Room": "Στο δωμάτιο", - "Unavailable": "Μη διαθέσιμο", "Unknown device": "Άγνωστη συσκευή", - "Update": "Ενημέρωση", - "Enable desktop notifications": "Ενεργοποίηση ειδοποιήσεων στην επιφάνεια εργασίας", - "Error saving email notification preferences": "Σφάλμα κατά την αποθήκευση των προτιμήσεων", - "Failed to send report: ": "Δεν ήταν δυνατή η αποστολή της αναφοράς: ", - "Loading bug report module": "Φόρτωση μονάδας αναφοράς σφαλμάτων", - "Mentions only": "Μόνο αναφορές", - "Messages containing my display name": "Μηνύματα που περιέχουν το όνομα μου", - "Off": "Ανενεργό", - "On": "Ενεργό", - "Permalink": "Μόνιμος σύνδεσμος", - "Please install Chrome or Firefox for the best experience.": "Παρακαλούμε εγκαταστήστε έναν από τους περιηγητές Chrome ή Firefox για την καλύτερη δυνατή εμπειρία.", - "Report a bug": "Αναφορά σφάλματος", - "Riot does not know how to join a room on this network": "To Riot δεν γνωρίζει πως να συνδεθεί σε δωμάτια που ανήκουν σ' αυτό το δίκτυο", - "Search for a room": "Αναζήτηση δωματίου", - "Sorry, your browser is not able to run Riot.": "Λυπούμαστε, αλλά ο περιηγητές σας δεν υποστηρίζεται από το Riot.", - "There are advanced notifications which are not shown here": "Υπάρχουν προχωρημένες ειδοποιήσεις οι οποίες δεν εμφανίζονται εδώ", - "Unable to join network": "Δεν είναι δυνατή η σύνδεση στο δίκτυο", - "unknown error code": "άγνωστος κωδικός σφάλματος", - "Unnamed room": "Ανώνυμο δωμάτιο", - "Uploaded on %(date)s by %(user)s": "Απεστάλη στις %(date)s από %(user)s", - "Uploading report": "Αποστολή αναφοράς", - "What's New": "Τι νέο υπάρχει", - "What's new?": "Τι νέο υπάρχει;", - "When I'm invited to a room": "Όταν με προσκαλούν σ' ένα δωμάτιο", - "World readable": "Εμφανές σε όλους", - "You cannot delete this image. (%(code)s)": "Δεν μπορείτε να διαγράψετε αυτή την εικόνα. (%(code)s)", - "You cannot delete this message. (%(code)s)": "Δεν μπορείτε να διαγράψετε αυτό το μήνυμα. (%(code)s)", - "You are not receiving desktop notifications": "Δεν λαμβάνετε ειδοποιήσεις στην επιφάνεια εργασίας", - "Sunday": "Κυριακή", - "Monday": "Δευτέρα", - "Tuesday": "Τρίτη", - "Wednesday": "Τετάρτη", - "Thursday": "Πέμπτη", - "Friday": "Παρασκευή", - "Saturday": "Σάββατο", - "Today": "Σήμερα", - "Yesterday": "Χθές", - "OK": "Εντάξει", "You need to be using HTTPS to place a screen-sharing call.": "Απαιτείται η χρήση HTTPS για το διαμοιρασμό της επιφάνειας εργασίας μέσω κλήσης.", - "Forget": "Παράλειψη", "Riot is not supported on mobile web. Install the app?": "Το Riot δεν υποστηρίζεται από περιηγητές κινητών. Θέλετε να εγκαταστήσετε την εφαρμογή;", - "Unhide Preview": "Προεπισκόπηση", - "Waiting for response from server": "Αναμονή απάντησης από τον διακομιστή", - "Collecting logs": "Συγκέντρωση πληροφοριών", - "Enable them now": "Ενεργοποίηση", - "Failed to forget room %(errCode)s": "Δεν ήταν δυνατή η διαγραφή του δωματίου (%(errCode)s)", - "Failed to update keywords": "Οι λέξεις κλειδιά δεν ενημερώθηκαν", - "Failed to get protocol list from Home Server": "Δεν ήταν δυνατή η εύρεση των διαθέσιμων πρωτοκόλλων από το διακομιστή", - "Failed to remove tag %(tagName)s from room": "Δεν ήταν δυνατή η διαγραφή της ετικέτας %(tagName)s από το δωμάτιο", - "Notification targets": "Στόχοι ειδοποιήσεων", - "Please describe the bug and/or send logs.": "Παρακαλούμε περιγράψτε το σφάλμα και/ή στείλτε πληροφορίες σχετικά με την εφαρμογή.", - "Remove %(name)s from the directory?": "Αφαίρεση του %(name)s από το ευρετήριο;", - "remove %(name)s from the directory.": "αφαίρεση του %(name)s από το ευρετήριο.", - "Send logs": "Αποστολή πληροφοριών", - "Source URL": "Πηγαίο URL", - "The server may be unavailable or overloaded": "Ο διακομιστής είναι μη διαθέσιμος ή υπερφορτωμένος", - "Unable to fetch notification target list": "Δεν ήταν δυνατή η εύρεση στόχων για τις ειδοποιήσεις", - "Unable to look up room ID from server": "Δεν είναι δυνατή η εύρεση του ID για το δωμάτιο", - "View Decrypted Source": "Προβολή του αποκρυπτογραφημένου κώδικα", - "View Source": "Προβολή κώδικα", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Ισως να έχετε κάνει τις ρυθμίσεις σε άλλη εφαρμογή εκτός του Riot. Δεν μπορείτε να τις αλλάξετε μέσω του Riot αλλά ισχύουν κανονικά", - "Couldn't find a matching Matrix room": "Δεν βρέθηκε κάποιο δωμάτιο", - "Failed to get public room list": "Δεν ήταν δυνατή η λήψη της λίστας με τα δημόσια δωμάτια", - "Failed to set direct chat tag": "Δεν ήταν δυνατός ο χαρακτηρισμός της συνομιλίας ως 1-προς-1", - "powered by Matrix": "βασισμένο στο πρωτόκολλο Matrix", - "Quote": "Παράθεση", - "Fetching third party location failed": "Η λήψη τοποθεσίας απέτυχε", - "(HTTP status %(httpStatus)s)": "(Κατάσταση HTTP %(httpStatus)s)", - "Login": "Σύνδεση", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Το Riot χρησιμοποιεί αρκετά προχωρημένα χαρακτηριστικά των περιηγητών Ιστού, ορισμένα από τα οποία δεν είναι διαθέσιμα ή είναι σε πειραματικό στάδιο στον περιηγητή σας.", - "The Home Server may be too old to support third party networks": "Ο διακομιστής μπορεί να είναι αρκετά παλιός για να υποστηρίζει δίκτυα τρίτων", + "powered by Matrix": "με τη βοήθεια του Matrix", "Welcome to Riot.im": "Καλώς ήλθατε στο Riot.im", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Αποκεντρωμένη, κρυπτογραφημένη συνομιλία & συνεργασία με τη βοήθεια του [matrix]", - "Search the room directory": "Αναζήτηση του ευρετηρίου δωματίων", + "Search the room directory": "Αναζήτηση στο ευρετήριο δωματίων", "Chat with Riot Bot": "Συνομιλία με το Riot Bot", "Get started with some tips from Riot Bot!": "Ξεκινήστε με μερικές συμβουλές από το Riot Bot!", - "General discussion about Matrix and Riot": "Γενική συζήτηση σχετικά με Matrix και Riot", + "General discussion about Matrix and Riot": "Γενική συζήτηση σχετικά με το Matrix και το Riot", "Discussion of all things Matrix!": "Συζήτηση για όλα τα πράγματα του Matrix!", "Riot/Web & Desktop chat": "Συζήτηση για το Riot/Web & Desktop", "Riot/iOS & matrix-ios-sdk chat": "Συζήτηση για το Riot/iOS & matrix-ios-sdk", @@ -160,35 +22,22 @@ "Community-run support for Synapse": "Κοινοτική υποστήριξη για το Synapse", "Admin support for Dendrite": "Υποστήριξη διαχειριστή για το Dendrite", "Announcements about Synapse releases": "Ανακοινώσεις σχετικά με τις εκδόσεις του Synapse", - "Support for those using and running matrix-appservice-irc": "Υποστήριξη για τους χρήστες που χρησιμοποιούν το matrix-appservice-irc", + "Support for those using and running matrix-appservice-irc": "Υποστήριξη για τους χρήστες του matrix-appservice-irc", "Building services on Matrix": "Ανάπτυξη υπηρεσιών στο Matrix", "Support for those using the Matrix spec": "Υποστήριξη για τους χρήστες που χρησιμοποιούν το Matrix spec", "Design and implementation of E2E in Matrix": "Σχεδιασμός και υλοποίηση του E2E στο Matrix", "Implementing VR services with Matrix": "Υλοποίηση υπηρεσίων VR με το Matrix", "Implementing VoIP services with Matrix": "Υλοποίηση υπηρεσίων VoIP με το Matrix", "Discussion of the Identity Service API": "Συζήτηση σχετικά με το Identity Service API", - "Contributing code to Matrix and Riot": "Συνεισφορά κώδικα στο Matrix και Riot", + "Contributing code to Matrix and Riot": "Συνεισφορά κώδικα στο Matrix και στο Riot", "Dev chat for the Riot/Web dev team": "Συζήτηση με την ομάδα ανάπτυξης του Riot/Web", "Dev chat for the Dendrite dev team": "Συζήτηση με την ομάδα ανάπτυξης του Dendrite", - "Co-ordination for Riot/Web translators": "Συντονισμός για μεταφραστές του Riot/Web", "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Αρκετά δωμάτια υπάρχουν ήδη στο Matrix, συνδεδεμένα σε υπάρχοντα δίκτυα (Slack, IRC, Gitter κ.λπ) ή αυτόνομα. Ρίξτε μια ματιά στο ευρετήριο!", - "Failed to change password. Is your password correct?": "Δεν ήταν δυνατή η αλλαγή του κωδικού πρόσβασης. Είναι σωστός ο κωδικός πρόσβασης;", - "You have successfully set a password!": "Ο κωδικός πρόσβασης ορίστηκε επιτυχώς!", - "You can now return to your account after signing out, and sign in on other devices.": "Μπορείτε να επιστρέψετε στον λογαριασμό σας αφού αποσυνδεθείτε και συνδεθείτε από άλλες συσκευές.", - "Continue": "Συνέχεια", - "Please set a password!": "Παρακαλούμε ορίστε έναν κωδικό πρόσβασης!", - "This will allow you to return to your account after signing out, and sign in on other devices.": "Αυτό θα σας επιτρέψει να επιστρέψετε στον λογαριασμό σας αφού αποσυνδεθείτε και συνδεθείτε από άλλες συσκευές.", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Προκειμένου να διαγνωστούν προβλήματα, τα αρχεία καταγραφής από αυτόν τον πελάτη θα σταλούν με αυτήν την αναφορά σφάλματος. Αν προτιμάτε να στείλετε μόνο το παραπάνω κείμενο, απενεργοποιήστε:", - "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Με τον τρέχον περιηγητή, η εμφάνιση και η αίσθηση της εφαρμογής ενδέχεται να είναι εντελώς εσφαλμένη και ορισμένες ή όλες οι λειτουργίες ενδέχεται να μην λειτουργούν. Εάν θέλετε να το δοκιμάσετε ούτως ή άλλως μπορείτε να συνεχίσετε, αλλά είστε μόνοι σας σε ό, τι αφορά τα προβλήματα που μπορεί να αντιμετωπίσετε!", - "Failed to set Direct Message status of room": "Δεν ήταν δυνατός ο ορισμός της κατάστασης Direct Message του δωματίου", "Support for those using, running and writing other bridges": "Υποστήριξη για τους χρήστες που χρησιμοποιούν ή αναπτύσσουν εφαρμογές ενσωμάτωσης για το Matrix", - "You have successfully set a password and an email address!": "Ο κωδικός πρόσβασης και η διεύθυνση ηλεκτρονικής αλληλογραφίας ορίστηκαν επιτυχώς!", - "Remember, you can always set an email address in user settings if you change your mind.": "Να θυμάστε ότι μπορείτε πάντα να ορίσετε μια διεύθυνση ηλεκτρονικής αλληλογραφίας στις ρυθμίσεις χρήστη αν αλλάξετε γνώμη.", - "To return to your account in future you need to set a password": "Για να επιστρέψετε στον λογαριασμό σας μελλοντικα πρέπει να ορίσετε έναν κωδικό πρόσβασης", - "Set Password": "Ορισμός κωδικού πρόσβασης", - "Warning": "Προειδοποίηση", - "Checking for an update...": "Γίνεται έλεγχος για ενημέρωση...", - "Error encountered (%(errorDetail)s).": "Παρουσιάστηκε σφάλμα (%(errorDetail)s).", - "No update available.": "Δεν υπάρχει διαθέσιμη ενημέρωση.", - "Downloading update...": "Γίνεται λήψη της ενημέρωσης..." + "Co-ordination for Riot translators": "Συντονισμός για μεταφραστές του Riot", + "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Μπορείτε να χρησιμοποιήσετε τις προσαρμοσμένες ρυθμίσεις διακομιστή για να συνδεθείτε σε άλλους διακομιστές Matrix δίνοντας ένα διαφορετικό URL διακομιστή.
    Αυτό σας επιτρέπει να χρησιμοποιήσετε το Riot με έναν υπάρχοντα λογαριασμό Matrix σε έναν διαφορετικό διακομιστή.

    Μπορείτε επίσης να ορίσετε έναν προσαρμοσμένο διακομιστή ταυτοποίησης αλλά δεν θα μπορείτε να προσκαλέσετε χρήστες ή να προσκληθείτε εσείς μέσω διεύθυνσης ηλεκτρονικού ταχυδρομίου.", + "Sign In": "Σύνδεση", + "Create Account": "Δημιουργία Λογαριασμού", + "Need help?": "Χρειάζεστε βοήθεια;", + "Room Directory": "Ευρετήριο δωματίων" } diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index bbb94a609d..8fc45a298f 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1,225 +1,26 @@ { - "Riot is not supported on mobile web. Install the app?": "Riot is not supported on mobile web. Install the app?", - "Collecting app version information": "Collecting app version information", - "Collecting logs": "Collecting logs", - "Uploading report": "Uploading report", - "Waiting for response from server": "Waiting for response from server", + "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.", + "The message from the parser is: %(message)s": "The message from the parser is: %(message)s", + "Invalid JSON": "Invalid JSON", + "Your Riot is misconfigured": "Your Riot is misconfigured", + "Unexpected error preparing the app. See console for details.": "Unexpected error preparing the app. See console for details.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.", + "Invalid configuration: no default server specified.": "Invalid configuration: no default server specified.", "Riot Desktop on %(platformName)s": "Riot Desktop on %(platformName)s", "Unknown device": "Unknown device", "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s on %(osName)s", "You need to be using HTTPS to place a screen-sharing call.": "You need to be using HTTPS to place a screen-sharing call.", - "Messages containing my display name": "Messages containing my display name", - "Messages containing my user name": "Messages containing my user name", - "Messages in one-to-one chats": "Messages in one-to-one chats", - "Messages in group chats": "Messages in group chats", - "When I'm invited to a room": "When I'm invited to a room", - "Call invitation": "Call invitation", - "Messages sent by bot": "Messages sent by bot", - "Error saving email notification preferences": "Error saving email notification preferences", - "An error occurred whilst saving your email notification preferences.": "An error occurred whilst saving your email notification preferences.", - "Keywords": "Keywords", - "Enter keywords separated by a comma:": "Enter keywords separated by a comma:", - "OK": "OK", - "Failed to change settings": "Failed to change settings", - "Operation failed": "Operation failed", - "Can't update user notification settings": "Can't update user notification settings", - "Failed to update keywords": "Failed to update keywords", - "Messages containing keywords": "Messages containing keywords", - "Notify for all other messages/rooms": "Notify for all other messages/rooms", - "Notify me for anything else": "Notify me for anything else", - "Enable notifications for this account": "Enable notifications for this account", - "All notifications are currently disabled for all targets.": "All notifications are currently disabled for all targets.", - "Add an email address above to configure email notifications": "Add an email address above to configure email notifications", - "Enable email notifications": "Enable email notifications", - "Notifications on the following keywords follow rules which can’t be displayed here:": "Notifications on the following keywords follow rules which can’t be displayed here:", - "Unable to fetch notification target list": "Unable to fetch notification target list", - "Notification targets": "Notification targets", - "Advanced notification settings": "Advanced notification settings", - "There are advanced notifications which are not shown here": "There are advanced notifications which are not shown here", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply", - "Enable desktop notifications": "Enable desktop notifications", - "Show message in desktop notification": "Show message in desktop notification", - "Enable audible notifications in web client": "Enable audible notifications in web client", - "Off": "Off", - "On": "On", - "Noisy": "Noisy", - "Search…": "Search…", - "Search": "Search", - "This Room": "This Room", - "All Rooms": "All Rooms", - "Sunday": "Sunday", - "Monday": "Monday", - "Tuesday": "Tuesday", - "Wednesday": "Wednesday", - "Thursday": "Thursday", - "Friday": "Friday", - "Saturday": "Saturday", - "Today": "Today", - "Yesterday": "Yesterday", - "Custom Server Options": "Custom Server Options", - "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.", - "Dismiss": "Dismiss", "powered by Matrix": "powered by Matrix", - "You are not receiving desktop notifications": "You are not receiving desktop notifications", - "Enable them now": "Enable them now", - "What's New": "What's New", - "Update": "Update", - "What's new?": "What's new?", - "A new version of Riot is available.": "A new version of Riot is available.", - "To return to your account in future you need to set a password": "To return to your account in future you need to set a password", - "Set Password": "Set Password", - "Error encountered (%(errorDetail)s).": "Error encountered (%(errorDetail)s).", - "Checking for an update...": "Checking for an update...", - "No update available.": "No update available.", - "Downloading update...": "Downloading update...", - "Warning": "Warning", - "Error": "Error", - "You cannot delete this image. (%(code)s)": "You cannot delete this image. (%(code)s)", - "Uploaded on %(date)s by %(user)s": "Uploaded on %(date)s by %(user)s", - "Remove": "Remove", - "Close": "Close", - "Download this file": "Download this file", - "Please describe the bug and/or send logs.": "Please describe the bug and/or send logs.", - "Loading bug report module": "Loading bug report module", - "Bug report sent": "Bug report sent", - "Thank you!": "Thank you!", - "Failed to send report: ": "Failed to send report: ", - "Cancel": "Cancel", - "Report a bug": "Report a bug", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Please describe the bug. What did you do? What did you expect to happen? What actually happened?", - "Describe your problem here.": "Describe your problem here.", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:", - "Send logs": "Send logs", - "Send": "Send", - "Unavailable": "Unavailable", - "Changelog": "Changelog", - "Back": "Back", - "Send Custom Event": "Send Custom Event", - "You must specify an event type!": "You must specify an event type!", - "Event sent!": "Event sent!", - "Failed to send custom event.": "Failed to send custom event.", - "Event Type": "Event Type", - "State Key": "State Key", - "Event Content": "Event Content", - "Send Account Data": "Send Account Data", - "Filter results": "Filter results", - "Explore Room State": "Explore Room State", - "Edit": "Edit", - "Explore Account Data": "Explore Account Data", - "Toolbox": "Toolbox", - "Developer Tools": "Developer Tools", - "You have successfully set a password!": "You have successfully set a password!", - "You have successfully set a password and an email address!": "You have successfully set a password and an email address!", - "You can now return to your account after signing out, and sign in on other devices.": "You can now return to your account after signing out, and sign in on other devices.", - "Remember, you can always set an email address in user settings if you change your mind.": "Remember, you can always set an email address in user settings if you change your mind.", - "Continue": "Continue", - "Failed to change password. Is your password correct?": "Failed to change password. Is your password correct?", - "(HTTP status %(httpStatus)s)": "(HTTP status %(httpStatus)s)", - "Please set a password!": "Please set a password!", - "This will allow you to return to your account after signing out, and sign in on other devices.": "This will allow you to return to your account after signing out, and sign in on other devices.", - "You cannot delete this message. (%(code)s)": "You cannot delete this message. (%(code)s)", - "Resend": "Resend", - "Cancel Sending": "Cancel Sending", - "Forward Message": "Forward Message", - "Reply": "Reply", - "Unpin Message": "Unpin Message", - "Pin Message": "Pin Message", - "View Source": "View Source", - "View Decrypted Source": "View Decrypted Source", - "Unhide Preview": "Unhide Preview", - "Permalink": "Permalink", - "Quote": "Quote", - "Source URL": "Source URL", - "Online": "Online", - "Away": "Away", - "Appear Offline": "Appear Offline", - "Failed to remove tag %(tagName)s from room": "Failed to remove tag %(tagName)s from room", - "Failed to set Direct Message status of room": "Failed to set Direct Message status of room", - "unknown error code": "unknown error code", - "Failed to forget room %(errCode)s": "Failed to forget room %(errCode)s", - "All messages (noisy)": "All messages (noisy)", - "All messages": "All messages", - "Mentions only": "Mentions only", - "Mute": "Mute", - "Leave": "Leave", - "Forget": "Forget", - "Reject": "Reject", - "Favourite": "Favourite", - "Low Priority": "Low Priority", - "Direct Chat": "Direct Chat", - "View Community": "View Community", - "Sorry, your browser is not able to run Riot.": "Sorry, your browser is not able to run Riot.", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.", - "Please install Chrome or Firefox for the best experience.": "Please install Chrome or Firefox for the best experience.", - "Safari and Opera work too.": "Safari and Opera work too.", - "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!", - "I understand the risks and wish to continue": "I understand the risks and wish to continue", - "Couldn't load home page": "Couldn't load home page", - "Login": "Login", - "Register": "Register", - "Members": "Members", - "%(count)s Members|other": "%(count)s Members", - "%(count)s Members|one": "%(count)s Member", - "Invite to this room": "Invite to this room", - "Files": "Files", - "Notifications": "Notifications", - "Rooms": "Rooms", - "Hide panel": "Hide panel", - "Invite to this community": "Invite to this community", - "Add rooms to this community": "Add rooms to this community", - "Failed to get protocol list from Home Server": "Failed to get protocol list from Home Server", - "The Home Server may be too old to support third party networks": "The Home Server may be too old to support third party networks", - "Failed to get public room list": "Failed to get public room list", - "The server may be unavailable or overloaded": "The server may be unavailable or overloaded", - "Unnamed room": "Unnamed room", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Delete the room alias %(alias)s and remove %(name)s from the directory?", - "Remove %(name)s from the directory?": "Remove %(name)s from the directory?", - "Remove from Directory": "Remove from Directory", - "remove %(name)s from the directory.": "remove %(name)s from the directory.", - "delete the alias.": "delete the alias.", - "Unable to join network": "Unable to join network", - "Riot does not know how to join a room on this network": "Riot does not know how to join a room on this network", - "Room not found": "Room not found", - "Couldn't find a matching Matrix room": "Couldn't find a matching Matrix room", - "Fetching third party location failed": "Fetching third party location failed", - "Unable to look up room ID from server": "Unable to look up room ID from server", - "World readable": "World readable", - "Guests can join": "Guests can join", - "Directory": "Directory", - "No rooms to show": "No rooms to show", - "Search for a room": "Search for a room", - "#example": "#example", - "more": "more", - "Failed to add tag %(tagName)s to room": "Failed to add tag %(tagName)s to room", - "Expand panel": "Expand panel", - "Collapse panel": "Collapse panel", - "Filter room names": "Filter room names", + "Custom Server Options": "Custom Server Options", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.", + "Dismiss": "Dismiss", "Welcome to Riot.im": "Welcome to Riot.im", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralised, encrypted chat & collaboration powered by [matrix]", - "Search the room directory": "Search the room directory", - "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!", + "Sign In": "Sign In", + "Create Account": "Create Account", + "Need help?": "Need help?", "Chat with Riot Bot": "Chat with Riot Bot", - "Get started with some tips from Riot Bot!": "Get started with some tips from Riot Bot!", - "General discussion about Matrix and Riot": "General discussion about Matrix and Riot", - "Discussion of all things Matrix!": "Discussion of all things Matrix!", - "Riot/Web & Desktop chat": "Riot/Web & Desktop chat", - "Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk chat", - "Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk chat", - "Matrix technical discussions": "Matrix technical discussions", - "Running Matrix services": "Running Matrix services", - "Community-run support for Synapse": "Community-run support for Synapse", - "Admin support for Dendrite": "Admin support for Dendrite", - "Announcements about Synapse releases": "Announcements about Synapse releases", - "Support for those using and running matrix-appservice-irc": "Support for those using and running matrix-appservice-irc", - "Building services on Matrix": "Building services on Matrix", - "Support for those using the Matrix spec": "Support for those using the Matrix spec", - "Design and implementation of E2E in Matrix": "Design and implementation of E2E in Matrix", - "Implementing VR services with Matrix": "Implementing VR services with Matrix", - "Implementing VoIP services with Matrix": "Implementing VoIP services with Matrix", - "Discussion of the Identity Service API": "Discussion of the Identity Service API", - "Support for those using, running and writing other bridges": "Support for those using, running and writing other bridges", - "Contributing code to Matrix and Riot": "Contributing code to Matrix and Riot", - "Dev chat for the Riot/Web dev team": "Dev chat for the Riot/Web dev team", - "Dev chat for the Dendrite dev team": "Dev chat for the Dendrite dev team", - "Co-ordination for Riot/Web translators": "Co-ordination for Riot/Web translators" + "Explore rooms": "Explore rooms", + "Room Directory": "Room Directory" } diff --git a/src/i18n/strings/en_US.json b/src/i18n/strings/en_US.json index 5d24c945e5..a4bb1cb2db 100644 --- a/src/i18n/strings/en_US.json +++ b/src/i18n/strings/en_US.json @@ -1,155 +1,12 @@ { "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s on %(osName)s", - "Safari and Opera work too.": "Safari and Opera work too.", - "A new version of Riot is available.": "A new version of Riot is available.", - "Add an email address above to configure email notifications": "Add an email address above to configure email notifications", - "Advanced notification settings": "Advanced notification settings", - "All messages": "All messages", - "All messages (noisy)": "All messages (noisy)", - "All Rooms": "All Rooms", - "All notifications are currently disabled for all targets.": "All notifications are currently disabled for all targets.", - "An error occurred whilst saving your email notification preferences.": "An error occurred while saving your email notification preferences.", - "Call invitation": "Call invitation", - "Cancel": "Cancel", - "Cancel Sending": "Cancel Sending", - "Can't update user notification settings": "Can't update user notification settings", - "Changelog": "Changelog", - "Close": "Close", - "Collapse panel": "Collapse panel", - "Collecting app version information": "Collecting app version information", - "Collecting logs": "Collecting logs", - "Couldn't find a matching Matrix room": "Couldn't find a matching Matrix room", "Custom Server Options": "Custom Server Options", - "customServer_text": "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.", - "delete the alias.": "delete the alias.", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Delete the room alias %(alias)s and remove %(name)s from the directory?", - "Describe your problem here.": "Describe your problem here.", - "Direct Chat": "Direct Chat", - "Directory": "Directory", "Dismiss": "Dismiss", - "Download this file": "Download this file", - "Enable audible notifications in web client": "Enable audible notifications in web client", - "Enable desktop notifications": "Enable desktop notifications", - "Enable email notifications": "Enable email notifications", - "Enable notifications for this account": "Enable notifications for this account", - "Enable them now": "Enable them now", - "Enter keywords separated by a comma:": "Enter keywords separated by a comma:", - "Error": "Error", - "Error saving email notification preferences": "Error saving email notification preferences", - "#example": "#example", - "Expand panel": "Expand panel", - "Failed to add tag %(tagName)s to room": "Failed to add tag %(tagName)s to room", - "Failed to change settings": "Failed to change settings", - "Failed to forget room %(errCode)s": "Failed to forget room %(errCode)s", - "Failed to update keywords": "Failed to update keywords", - "Failed to get protocol list from Home Server": "Failed to get protocol list from Home Server", - "Failed to get public room list": "Failed to get public room list", - "Failed to remove tag %(tagName)s from room": "Failed to remove tag %(tagName)s from room", - "Failed to send report: ": "Failed to send report: ", - "Failed to set direct chat tag": "Failed to set direct chat tag", - "Failed to set Direct Message status of room": "Failed to set Direct Message status of room", - "Favourite": "Favorite", - "Fetching third party location failed": "Fetching third party location failed", - "Files": "Files", - "Filter room names": "Filter room names", - "Forget": "Forget", - "Forward Message": "Forward Message", - "Guests can join": "Guests can join", - "Hide panel": "Hide panel", - "I understand the risks and wish to continue": "I understand the risks and wish to continue", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please uncheck:", - "Invite to this room": "Invite to this room", - "Keywords": "Keywords", - "Leave": "Leave", - "Loading bug report module": "Loading bug report module", - "Low Priority": "Low Priority", - "Members": "Members", - "Mentions only": "Mentions only", - "Messages containing my display name": "Messages containing my display name", - "Messages containing keywords": "Messages containing keywords", - "Messages containing my user name": "Messages containing my user name", - "Messages in group chats": "Messages in group chats", - "Messages in one-to-one chats": "Messages in one-to-one chats", - "Messages sent by bot": "Messages sent by bot", - "more": "more", - "Mute": "Mute", - "No rooms to show": "No rooms to show", - "Noisy": "Noisy", - "Notification targets": "Notification targets", - "Notifications": "Notifications", - "Notifications on the following keywords follow rules which can’t be displayed here:": "Notifications on the following keywords follow rules which can’t be displayed here:", - "Notify for all other messages/rooms": "Notify for all other messages/rooms", - "Notify me for anything else": "Notify me for anything else", - "Off": "Off", - "On": "On", - "Operation failed": "Operation failed", - "Permalink": "Permalink", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Please describe the bug. What did you do? What did you expect to happen? What actually happened?", - "Please describe the bug and/or send logs.": "Please describe the bug and/or send logs.", - "Please install Chrome or Firefox for the best experience.": "Please install Chrome or Firefox for the best experience.", "powered by Matrix": "powered by Matrix", - "Quote": "Quote", - "Reject": "Reject", - "Remove %(name)s from the directory?": "Remove %(name)s from the directory?", - "Remove": "Remove", - "remove %(name)s from the directory.": "remove %(name)s from the directory.", - "Remove from Directory": "Remove from Directory", - "Report a bug": "Report a bug", - "Resend": "Resend", "Riot Desktop on %(platformName)s": "Riot Desktop on %(platformName)s", - "Riot does not know how to join a room on this network": "Riot does not know how to join a room on this network", "Riot is not supported on mobile web. Install the app?": "Riot is not supported on mobile web. Install the app?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.", - "Room not found": "Room not found", - "Search": "Search", - "Search…": "Search…", - "Search for a room": "Search for a room", - "Send": "Send", - "Send logs": "Send logs", - "Source URL": "Source URL", - "Sorry, your browser is not able to run Riot.": "Sorry, your browser is not able to run Riot.", - "The Home Server may be too old to support third party networks": "The Home Server may be too old to support third party networks", - "There are advanced notifications which are not shown here": "There are advanced notifications which are not shown here", - "The server may be unavailable or overloaded": "The server may be unavailable or overloaded", - "This Room": "This Room", - "Unable to fetch notification target list": "Unable to fetch notification target list", - "Unable to join network": "Unable to join network", - "Unable to look up room ID from server": "Unable to look up room ID from server", - "Unavailable": "Unavailable", - "Unhide Preview": "Unhide Preview", "Unknown device": "Unknown device", - "unknown error code": "unknown error code", - "Unnamed room": "Unnamed room", - "Update": "Update", - "Uploaded on %(date)s by %(user)s": "Uploaded on %(date)s by %(user)s", - "Uploading report": "Uploading report", - "View Decrypted Source": "View Decrypted Source", - "View Source": "View Source", - "What's New": "What's New", - "What's new?": "What's new?", - "Waiting for response from server": "Waiting for response from server", - "When I'm invited to a room": "When I'm invited to a room", - "World readable": "World readable", - "You cannot delete this image. (%(code)s)": "You cannot delete this image. (%(code)s)", - "You cannot delete this message. (%(code)s)": "You cannot delete this message. (%(code)s)", - "You are not receiving desktop notifications": "You are not receiving desktop notifications", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply", - "Sunday": "Sunday", - "Monday": "Monday", - "Tuesday": "Tuesday", - "Wednesday": "Wednesday", - "Thursday": "Thursday", - "Friday": "Friday", - "Saturday": "Saturday", - "Today": "Today", - "Yesterday": "Yesterday", - "OK": "OK", "You need to be using HTTPS to place a screen-sharing call.": "You need to be using HTTPS to place a screen-sharing call.", - "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!", - "Login": "Login", - "Continue": "Continue", - "Failed to change password. Is your password correct?": "Failed to change password. Is your password correct?", - "(HTTP status %(httpStatus)s)": "(HTTP status %(httpStatus)s)", "Welcome to Riot.im": "Welcome to Riot.im", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralised, encrypted chat & collaboration powered by [matrix]", "Chat with Riot Bot": "Chat with Riot Bot", @@ -173,25 +30,24 @@ "Contributing code to Matrix and Riot": "Contributing code to Matrix and Riot", "Dev chat for the Riot/Web dev team": "Dev chat for the Riot/Web dev team", "Dev chat for the Dendrite dev team": "Dev chat for the Dendrite dev team", - "Co-ordination for Riot/Web translators": "Co-ordination for Riot/Web translators", "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!", - "You have successfully set a password!": "You have successfully set a password!", - "You can now return to your account after signing out, and sign in on other devices.": "You can now return to your account after signing out, and sign in on other devices.", - "Please set a password!": "Please set a password!", - "This will allow you to return to your account after signing out, and sign in on other devices.": "This will allow you to return to your account after signing out, and sign in on other devices.", "Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk chat", "Riot/Web & Desktop chat": "Riot/Web & Desktop chat", "Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk chat", - "You have successfully set a password and an email address!": "You have successfully set a password and an email address!", - "Remember, you can always set an email address in user settings if you change your mind.": "Remember, you can always set an email address in user settings if you change your mind.", - "Warning": "Warning", - "Pin Message": "Pin Message", - "Unpin Message": "Unpin Message", - "Checking for an update...": "Checking for an update...", - "Error encountered (%(errorDetail)s).": "Error encountered (%(errorDetail)s).", - "No update available.": "No update available.", - "Downloading update...": "Downloading update...", - "To return to your account in future you need to set a password": "To return to your account in future you need to set a password", - "Set Password": "Set Password", - "Couldn't load home page": "Couldn't load home page" + "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.", + "Co-ordination for Riot translators": "Co-ordination for Riot translators", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.", + "Sign In": "Sign In", + "Create Account": "Create Account", + "Need help?": "Need help?", + "Explore rooms": "Explore rooms", + "Room Directory": "Room Directory", + "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.", + "The message from the parser is: %(message)s": "The message from the parser is: %(message)s", + "Invalid JSON": "Invalid JSON", + "Your Riot is misconfigured": "Your Riot is misconfigured", + "Unexpected error preparing the app. See console for details.": "Unexpected error preparing the app. See console for details.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.", + "Invalid configuration: no default server specified.": "Invalid configuration: no default server specified." } diff --git a/src/i18n/strings/eo.json b/src/i18n/strings/eo.json index ecba1c958e..622c79f06d 100644 --- a/src/i18n/strings/eo.json +++ b/src/i18n/strings/eo.json @@ -1,151 +1,14 @@ { - "A new version of Riot is available.": "Nova versio de Riot haveblas.", - "All messages": "Ĉiuj mesaĝoj", - "All messages (noisy)": "Ĉiuj mesaĝoj (lauta)", - "All Rooms": "Ĉiuj babilejoj", - "Cancel": "Nuligi", - "delete the alias.": "forigi la kromnomon.", - "Describe your problem here.": "Priskribu vian problemon ĉi tie.", - "Direct Chat": "Rekta babilo", - "Directory": "Dosierujo", "Dismiss": "Rezigni", - "Download this file": "Elŝuti ĉi tiun dosieron", - "#example": "#ekzemplo", - "Files": "Dosieroj", - "Forget": "Forgesi", - "Guests can join": "Gastoj povas aliĝi", - "I understand the risks and wish to continue": "Mi komprenas la riskojn kaj volas daŭrigi", - "Invite to this room": "Inviti al ĉi tiu ĉambro", - "Keywords": "Ŝlosilvortoj", - "Leave": "Foriri", - "Low Priority": "Malalta prioritato", - "Messages containing my display name": "Mesaĝoj enhavantaj mian vidigan nomon", - "Messages containing keywords": "Mesaĝoj enhavantaj ŝlosilovortojn", - "Messages containing my user name": "Mesaĝoj enhavantaj mian salutnomon", - "Messages in group chats": "Mesaĝoj en grupaj babiloj", - "Mute": "Silentigi", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Bonvolu priskribi la cimon. Kion vi faris? Kion vi atendis? Kio fakte okazis?", - "Please install Chrome or Firefox for the best experience.": "Bonvolu instali \"Chrome\"\"Firefox\" por la plej bona sperto.", - "powered by Matrix": "funkciigata de Matrix", - "Quote": "Citi", - "Reject": "Rifuzi", - "Resend": "Resendi", - "Room not found": "Ĉambro ne troviĝis", - "Search": "Serĉi", - "Search…": "Serĉi…", - "Search for a room": "Serĉi ĉambron", - "Send": "Sendi", - "This Room": "Ĉi tiu ĉambro", - "Add an email address above to configure email notifications": "Aldonu retadreson supre por agordi retpoŝtajn sciigojn", - "Advanced notification settings": "Specialaj agordoj de sciigoj", - "Call invitation": "Invito al voko", - "All notifications are currently disabled for all targets.": "Ĉiuj sciigoj nun estas malŝaltitaj por ĉiuj aparatoj.", - "An error occurred whilst saving your email notification preferences.": "Eraro okazis dum konservado de agordoj pri retpoŝtaj sciigoj.", - "Cancel Sending": "Nuligi sendon", - "Can't update user notification settings": "Agordoj de sciigoj al uzanto ne ĝisdatigeblas", - "Changelog": "Protokolo de ŝanĝoj", - "Close": "Fermi", - "Collapse panel": "Maletendi panelon", - "Collecting app version information": "Kolektanta informon pri versio de la aplikaĵo", - "Collecting logs": "Kolektante protokolon", - "Couldn't find a matching Matrix room": "Malsukcesis trovi kongruan ĉambron en Matrix", + "powered by Matrix": "povigita per Matrix", "Custom Server Options": "Propraj servilaj elektoj", - "customServer_text": "Vi povas uzi opciojn personigitajn de la servilo por ensaluti en aliajn servilojn Matrix specifante alian adreson URL-an de alia servilo Home.
    Tio permesas al vi uzi Riot per ekzistanta konto en alia Home servilo.

    Vi povas ankaŭ agordi servilon identecan personigita, sed ne eblos inviti uzantojn pere de retpoŝtadreso, aŭ esti invitita pere de retpoŝtadreso vi mem.", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Ĉu forigi la ĉambran kromnomon %(alias)s kaj forigi %(name)s de la ujo?", - "Enable audible notifications in web client": "Ŝalti aŭdeblajn sciigojn en la retkliento", - "Enable desktop notifications": "Ŝalti labortablajn sciigojn", - "Enable email notifications": "Ŝalti retpoŝtajn sciigojn", - "Enable notifications for this account": "Ŝalti sciigojn por tiu ĉi konto", - "Enable them now": "Ŝalti ilin nun", - "Enter keywords separated by a comma:": "Entajpu ŝlosilvortojn apartigitajn per komoj:", - "Error": "Eraro", - "Error saving email notification preferences": "Eraro konservante agordojn pri retpoŝtaj sciigoj", - "Expand panel": "Etendi panelon", - "Failed to add tag %(tagName)s to room": "Malsukcesis aldoni etikedon %(tagName)s al la ĉambro", - "Failed to change settings": "Malsukcesis ŝanĝi la agordojn", - "Failed to forget room %(errCode)s": "Malsukcesis forgesi ĉambron %(errCode)s", - "Failed to update keywords": "Malsukcesis ĝisdatigi la ŝlosilvortojn", - "Failed to get protocol list from Home Server": "Malsukcesis akiri liston de protokoloj el la hejmservilo", - "Failed to get public room list": "Malsukcesis akiri liston de publikaj ĉambroj", - "Failed to remove tag %(tagName)s from room": "Malsukcesis forigi etikedon %(tagName)s el la ĉambro", - "Failed to send report: ": "Malsukcesis sendi raporton: ", - "Failed to set direct chat tag": "Malsukcesis agordi la etikedon de rekta babilo", - "Failed to set Direct Message status of room": "Malsukcesis agordi staton de rekta mesaĝo al la ĉambro", - "Forward Message": "Plusendi mesaĝon", - "Hide panel": "Kaŝi panelon", - "(HTTP status %(httpStatus)s)": "(stato de HTTP %(httpStatus)s)", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Por diagnozi problemojn, protokoloj el tiu ĉi kliento sendiĝos kune kun tiu ĉi raporto de eraro. Se vi preferas sendi nur la supran tekston, bonvolu malŝalti:", - "Login": "Saluti", - "Loading bug report module": "Enleganta cimraportan modulon", - "Members": "Anoj", - "Mentions only": "Nur mencioj", - "Messages in one-to-one chats": "Mesaĝoj en duopaj babiloj", - "Messages sent by bot": "Mesaĝoj senditaj per roboto", - "more": "pli", - "No rooms to show": "Neniuj ĉambroj montreblas", - "Noisy": "Brua", - "Notification targets": "Celoj de sciigoj", - "Notifications": "Sciigoj", - "Notifications on the following keywords follow rules which can’t be displayed here:": "La sciigoj de la jenaj ŝlosilvortoj sekvas regulojn kiuj ne povas esti montrataj ĉi tie:", - "Notify for all other messages/rooms": "Sciigu min por ĉiu alia babilejo", - "Notify me for anything else": "Sciigu min pri ĉio alia", - "Off": "For", - "On": "Ek", - "Operation failed": "Ago malsukcesis", - "Permalink": "Konstanta ligilo", - "Please describe the bug and/or send logs.": "Bonvolu priskribi la cimon kaj/aŭ sendi protokolojn.", - "Remove %(name)s from the directory?": "Ĉu forigi %(name)s de la ujo?", - "Remove": "Forigi", - "remove %(name)s from the directory.": "forigi %(name)s de la ujo.", - "Remove from Directory": "Forigi de ujo", - "Report a bug": "Raporti cimon", "Riot Desktop on %(platformName)s": "Riot Labortablo sur %(platformName)s", - "Riot does not know how to join a room on this network": "Riot ne scias aliĝi al ĉambroj en tiu ĉi reto", "Riot is not supported on mobile web. Install the app?": "Riot ne estas subtenata sur poŝkomputila reto. Ĉu instali la aplikaĵon?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot uzas multajn specialajn funkciojn, el kiuj kelkaj ne disponeblas aŭ estas eksperimentaj en via nuna foliumilo.", - "Send logs": "Sendi protokolojn", - "Source URL": "Fonta URL", - "Sorry, your browser is not able to run Riot.": "Pardonu, via foliumilo ne kapablas funkciigi klienton Riot.", - "The Home Server may be too old to support third party networks": "La hejmservilo povas esti tro malnova por subteni retojn de eksteraj liverantoj", - "There are advanced notifications which are not shown here": "Ekzistas specialaj sciigoj, kiuj ne montriĝas ĉi tie", - "The server may be unavailable or overloaded": "La servilo povas esti nedisponebla aŭ troŝarĝita", - "Unable to fetch notification target list": "Malsukcesis akiri la liston de celoj por sciigoj", - "Unable to join network": "Malsukcesis konektiĝi al la reto", - "Unable to look up room ID from server": "Ĉambra identigaĵo ne akireblas de la servilo", - "Unavailable": "Nedisponebla", - "Unhide Preview": "Malkaŝi antaŭrigardon", "Unknown device": "Nekonata aparato", - "unknown error code": "nekonata kodo de eraro", - "Unnamed room": "Sennoma ĉambro", - "Update": "Ĝisdatigi", - "Uploaded on %(date)s by %(user)s": "Alŝutita je %(date)s de %(user)s", - "Uploading report": "Alŝutante raporton", - "View Decrypted Source": "Vidi malĉifritan fonton", - "View Source": "Vidi fonton", - "What's New": "Kio novas", - "What's new?": "Kio novas?", - "Waiting for response from server": "Atendante respondon el la servilo", - "When I'm invited to a room": "Kiam mi estas invitita al ĉambro", - "World readable": "Legebla de ĉiuj", - "You cannot delete this image. (%(code)s)": "Vi ne povas forigi tiun ĉi bildon. (%(code)s)", - "You cannot delete this message. (%(code)s)": "Vi ne povas forigi tiun ĉi mesaĝon. (%(code)s)", - "You are not receiving desktop notifications": "Vi ne ricevadas sciigojn labortablajn", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Vi eble agordis ilin en alia kliento. Vi ne povas agordi ilin en Riot, sed ili ankoraŭ validas", - "Sunday": "Dimanĉo", - "Monday": "Lundo", - "Tuesday": "Mardo", - "Wednesday": "Merkredo", - "Thursday": "Ĵaŭdo", - "Friday": "Vendredo", - "Saturday": "Sabato", - "Today": "Hodiaŭ", - "Yesterday": "Hieraŭ", - "OK": "Bone", "You need to be using HTTPS to place a screen-sharing call.": "Vi devas uzi HTTPS por ekranvidadi.", - "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Kun via nuna foliumilo, la aspekto kaj funkciado de la aplikaĵo povas esti tute malĝusta, kaj kelkaj aŭ ĉiu funkcioj eble ne tute funkcios. Se vi tamen volas provi, vi povas daŭrigi, sed vi ricevos nenian subtenon se vi renkontos problemojn!", - "Welcome to Riot.im": "Bonvenu al Riot.im", - "Decentralised, encrypted chat & collaboration powered by [matrix]": "Malcentra, ĉifrita babilado & kunlaboro povigita de [matrix]", - "Search the room directory": "Serĉi en la ĉambrujo", + "Welcome to Riot.im": "Bonvenon al Riot.im", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Malcentra, ĉifrita babilado & kunlaboro povigita per [matrix]", + "Search the room directory": "Serĉi en la ĉambra dosierujo", "Chat with Riot Bot": "Babilu kun la roboto Riot Bot", "Get started with some tips from Riot Bot!": "Komencu kun kelkaj sugestoj de la roboto Riot Bot!", "General discussion about Matrix and Riot": "Ĝenerala diskutado pri Matrix kaj Riot", @@ -169,56 +32,22 @@ "Contributing code to Matrix and Riot": "Kontribuado de kodo al Matrix kaj Riot", "Dev chat for the Riot/Web dev team": "Babilado por la programista skipo de Riot ĉe reto", "Dev chat for the Dendrite dev team": "Babilado por la programista skipo de Dendrite", - "Co-ordination for Riot/Web translators": "Kunordigado por tradukistoj de Riot ĉe reto", "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Multaj ĉambroj jam ekzistas en Matrix; kaj sendependaj, kaj ligitaj kun jamaj retoj (Slock, IRC, Gitter, ktp.). Rigardu la ĉambrujon!", - "Failed to change password. Is your password correct?": "Malsukcesis ŝanĝi la pasvorton. Ĉu via pasvorto estas ĝusta?", - "You have successfully set a password!": "Vi sukcese agordis pasvorton!", - "You can now return to your account after signing out, and sign in on other devices.": "Vi nun rajtas reveni al via konto post adiaŭo, kaj saluti per ĝi kun aliaj aparatoj.", - "Continue": "Daŭrigi", - "Please set a password!": "Bonvolu agordi pasvorton!", - "This will allow you to return to your account after signing out, and sign in on other devices.": "Tio ĉi permesos al vi reveni al via konto post adiaŭo, kaj saluti kun alia aparato.", - "You have successfully set a password and an email address!": "Vi sukcese agordis pasvorton kaj retpoŝtadreson!", - "Remember, you can always set an email address in user settings if you change your mind.": "Memoru: vi ĉiam povas agordi retpoŝtadreson en viaj agordoj por uzantoj.", "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s per %(browserName)s je %(osName)s", - "Safari and Opera work too.": "Safari kaj Opera ankaŭ funkcias.", - "Favourite": "Ŝatata", - "Fetching third party location failed": "Malsukcesis trovi lokon de ekstera liveranto", - "Filter room names": "Filtri nomojn de ĉambroj", - "Warning": "Averto", - "Checking for an update...": "Serĉanta ĝisdatigojn…", - "No update available.": "Neniuj ĝisdatigoj haveblas.", - "Unpin Message": "Malfiksi mesaĝon", - "Rooms": "Ĉambroj", - "Show message in desktop notification": "Montradi mesaĝojn en labortablaj sciigoj", "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Vi povas uzi proprajn servilajn elektojn por saluti aliajn servilojn de Matrix, per specifo de alia hejmservila URL.
    Tio permesas al vi uzi klienton Riot kun jama konto de Matrix en alia hejmservilo.

    Vi ankaŭ povas agordi propran identigan servilon, sed vi ne povos inviti uzantojn per retpoŝtadreso, aŭ esti invitata per retpoŝtadreso mem.", - "Appear Offline": "Montriĝi kiel eksterreta", - "Away": "Foresta", - "To return to your account in future you need to set a password": "Por reveni al via konto estonte, vi devas agordi pasvorton", - "Set Password": "Agordi pasvorton", - "Error encountered (%(errorDetail)s).": "Eraro okazis (%(errorDetail)s).", - "Downloading update...": "Elŝutanta ĝisdatigon…", - "Bug report sent": "Cimraporto sendiĝis", - "Thank you!": "Dankon!", - "Back": "Reen", - "Send Custom Event": "Sendi propran okazon", - "You must specify an event type!": "Vi devas specifi tipon de okazo!", - "Event sent!": "Okazo sendiĝis!", - "Failed to send custom event.": "Malsukcesis sendi propran okazon.", - "Event Type": "Tipo de okazo", - "State Key": "Stata ŝlosilo", - "Event Content": "Enhavo de okazo", - "Send Account Data": "Sendi kontajn informojn", - "Filter results": "Filtri rezultojn", - "Explore Room State": "Esplori staton de ĉambro", - "Edit": "Redakti", - "Explore Account Data": "Esplori kontajn datumojn", - "Toolbox": "Ilaro", - "Developer Tools": "Evoluigiloj", - "Pin Message": "Fiksi mesaĝon", - "Please install Chrome or Firefox for the best experience.": "Bonvolu instali ĤromonFajrovulpon por plej bona sperto.", - "Safari and Opera work too.": "Ankaŭ Safario kaj Opero funkcias.", - "Couldn't load home page": "Malsukcesis enlegi hejmpaĝon", - "Register": "Registriĝi", - "Invite to this community": "Inviti al tiu ĉi komunumo", - "Add rooms to this community": "Aldoni ĉambrojn al ĉi tiu komunumo" + "Co-ordination for Riot translators": "Kunordigo por tradukantoj de Riot", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Vi povas ankaŭ agordi propran identigan servilon, sed vi ne eblos inviti uzantojn per retpoŝtadresoj, nek tiel invitiĝi.", + "Sign In": "Saluti", + "Create Account": "Krei konton", + "Need help?": "Ĉu vi bezonas helpon?", + "Explore rooms": "Esplori ĉambrojn", + "Room Directory": "Ĉambra dosierujo", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Vi povas uzi proprajn servilajn elekteblojn por saluti al aliaj serviloj de Matrix per doni alian hejmeservilan URL-on. Tio povigos vin uzi Riot kun jama konto de Matrix en alia hejmservilo.", + "Unexpected error preparing the app. See console for details.": "Neatendita eraro okazis dum la preparado de la aplikaĵo. Rigardu la konzolon por detaloj.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Nevalida agordo: vi povas specifi nur unu elekteblon el « default_server_config », « default_server_name », aŭ « default_hs_url ».", + "Invalid configuration: no default server specified.": "Nevalida agordo: neniu implicita servilo estas specifita.", + "Your Riot is misconfigured": "Via kliento Riot estas misagordita", + "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Viaj Riot-agordoj enhavas nevalidan JSON-on. Bonvolu korekti la problemon kaj reŝarĝi la paĝon.", + "The message from the parser is: %(message)s": "La mesaĝo el la analizilo estas: %(message)s", + "Invalid JSON": "Nevalida JSON" } diff --git a/src/i18n/strings/es.json b/src/i18n/strings/es.json index d73e936dca..5e9fe00610 100644 --- a/src/i18n/strings/es.json +++ b/src/i18n/strings/es.json @@ -1,162 +1,16 @@ { - "Add an email address above to configure email notifications": "Añade una dirección de correo arriba para configurar las notificaciones por correo", - "Advanced notification settings": "Configuración avanzada de notificaciones", - "All messages": "Todos los mensajes", - "An error occurred whilst saving your email notification preferences.": "Se ha producido un error al guardar las preferencias de notificación por email.", - "Call invitation": "Invitación a la llamada", - "Cancel Sending": "Cancelar envío", - "Can't update user notification settings": "No se puede actualizar la configuración de notificaciones del usuario", - "Close": "Cerrar", - "Couldn't find a matching Matrix room": "No se encontró una sala Matrix que coincida.", "Custom Server Options": "Opciones de Servidor Personalizado", - "customServer_text": "Puedes utilizar las opciones de servidor personalizadas para iniciar sesión en otros servidores Matrix especificando una URL de Home server distinta.
    Esto te permite usar Riot con una cuenta Matrix existente en un Home server distinto.

    También puedes configurar un servidor de identidad personalizado, pero no podrás ni invitar usuarios ni ser invitado a través de tu dirección de correo electrónico.", - "delete the alias.": "borrar el alias.", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "¿Borrar el alias de la sala %(alias)s y eliminar %(name)s del directorio?", - "Direct Chat": "Conversación directa", - "Directory": "Directorio", - "Download this file": "Descargar este archivo", - "Enable audible notifications in web client": "Habilitar notificaciones audibles en el cliente web", - "Enable desktop notifications": "Habilitar notificaciones de escritorio", - "Enable email notifications": "Habilitar notificaciones por email", - "Enable notifications for this account": "Habilitar notificaciones para esta cuenta", - "Enable them now": "Habilitarlos ahora", - "Enter keywords separated by a comma:": "Introduzca palabras clave separadas por una coma:", - "Error": "Error", - "Error saving email notification preferences": "Error al guardar las preferencias de notificación por email", - "#example": "#ejemplo", - "Failed to add tag %(tagName)s to room": "Error al añadir la etiqueta %(tagName)s a la sala", - "Failed to change settings": "Error al cambiar la configuración", - "Failed to forget room %(errCode)s": "Falló al olvidar la sala %(errCode)s", - "Failed to update keywords": "Error al actualizar las palabras clave", - "Failed to get protocol list from Home Server": "Error al obtener la lista de protocolos desde el Home Server", - "Failed to get public room list": "No se pudo obtener la lista de salas públicas", - "Failed to remove tag %(tagName)s from room": "Error al eliminar la etiqueta %(tagName)s de la sala", - "Failed to set direct chat tag": "Error al establecer la etiqueta de chat directo", - "Failed to set Direct Message status of room": "No se pudo establecer el estado de Mensaje Directo de la sala", - "Favourite": "Favorito", - "Fetching third party location failed": "Falló la obtención de la ubicación de un tercero", - "Files": "Archivos", - "Filter room names": "Filtrar los nombres de las salas", - "Forget": "Olvidar", - "Guests can join": "Los invitados se pueden unir", - "Invite to this room": "Invitar a esta sala", - "Keywords": "Palabras clave", - "Leave": "Salir", - "Low Priority": "Baja Prioridad", - "Members": "Miembros", - "Mentions only": "Sólo menciones", - "Messages containing my display name": "Mensajes que contienen mi nombre", - "Messages containing my user name": "Mensajes que contienen mi nombre de usuario", - "Messages in group chats": "Mensajes en chats de grupo", - "Messages in one-to-one chats": "Mensajes en chats uno a uno", - "Messages sent by bot": "Mensajes enviados por bot", - "more": "más", - "Mute": "Silenciar", - "No rooms to show": "Sin salas para mostrar", - "Noisy": "Ruidoso", - "Notification targets": "Objetivos de notificación", - "Notifications": "Notificaciones", - "Notifications on the following keywords follow rules which can’t be displayed here:": "Las notificaciones de las siguientes palabras clave siguen reglas que no se pueden mostrar aquí:", - "Notify me for anything else": "Notificarme para cualquier otra cosa", - "Off": "Apagado", - "On": "Encendido", - "Operation failed": "Falló la operación", - "Permalink": "Enlace permanente", - "Quote": "Citar", - "Reject": "Rechazar", - "Remove %(name)s from the directory?": "¿Retirar %(name)s del directorio?", - "Remove": "Eliminar", - "remove %(name)s from the directory.": "retirar %(name)s del directorio.", - "Remove from Directory": "Retirar del Directorio", - "Resend": "Reenviar", - "Riot does not know how to join a room on this network": "Riot no sabe cómo unirse a una sala en esta red", - "Room not found": "Sala no encontrada", - "Search for a room": "Buscar sala", - "Source URL": "URL de Origen", - "The Home Server may be too old to support third party networks": "El Home Server puede ser demasiado antiguo para soportar redes de terceros", - "There are advanced notifications which are not shown here": "Hay notificaciones avanzadas que no se muestran aquí", - "The server may be unavailable or overloaded": "El servidor puede estar no disponible o sobrecargado", - "Unable to fetch notification target list": "No se puede obtener la lista de objetivos de notificación", - "Unable to join network": "No se puede unir a la red", - "Unable to look up room ID from server": "No se puede buscar el ID de la sala desde el servidor", - "Unhide Preview": "Mostrar Vista Previa", - "unknown error code": "Código de error desconocido", - "Unnamed room": "Sala sin nombre", - "Uploaded on %(date)s by %(user)s": "Subido el %(date)s por %(user)s", - "View Decrypted Source": "Ver Fuente Descifrada", - "View Source": "Ver Fuente", - "When I'm invited to a room": "Cuando estoy invitado a una sala", - "World readable": "Legible por todo el mundo", - "You cannot delete this image. (%(code)s)": "No puedes eliminar esta imagen. (%(code)s)", - "You cannot delete this message. (%(code)s)": "No puedes eliminar este mensaje. (%(code)s)", - "You are not receiving desktop notifications": "No estás recibiendo notificaciones de escritorio", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Es posible que los hayas configurado en un cliente que no sea Riot. No puedes ajustarlos en Riot, pero todavía se aplican", - "Sunday": "Domingo", - "Monday": "Lunes", - "Tuesday": "Martes", - "Wednesday": "Miércoles", - "Thursday": "Jueves", - "Friday": "Viernes", - "Saturday": "Sábado", - "Today": "Hoy", - "Yesterday": "Ayer", - "Continue": "Continuar", - "Search": "Búsqueda", - "OK": "Correcto", - "Failed to change password. Is your password correct?": "No se pudo cambiar la contraseña. ¿Está usando la correcta?", - "Safari and Opera work too.": "Safari y Opera también funcionan.", - "A new version of Riot is available.": "Una nueva versión de Riot está disponible.", - "Cancel": "Cancelar", - "Describe your problem here.": "Describe el problema aquí.", - "Forward Message": "Reenviar mensaje", - "Hide panel": "Ocultar panel", - "(HTTP status %(httpStatus)s)": "(estado HTTP %(httpStatus)s)", - "I understand the risks and wish to continue": "Entiendo los riesgos y deseo continuar", - "Changelog": "Registro de cambios", - "Collapse panel": "Colapsar panel", - "Remember, you can always set an email address in user settings if you change your mind.": "Recuerda que si es necesario puedes establecer una dirección de email en las preferencias de usuario.", - "All Rooms": "Todas las salas", - "Expand panel": "Expandir panel", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Para diagnosticar los problemas, los registros de este cliente serán enviados adjuntos a este informe de fallo. Si quisieras enviar el texto anterior solamente, entonces desmarca:", - "Login": "Iniciar sesión", - "Report a bug": "Informar de un fallo", - "Search…": "Buscar…", - "Send": "Enviar", - "Send logs": "Enviar registros", - "Sorry, your browser is not able to run Riot.": "¡Lo sentimos! Su navegador no puede ejecutar Riot.", - "This Room": "Esta sala", - "Unavailable": "No disponible", "Unknown device": "Dispositivo desconocido", - "Update": "Actualizar", - "Uploading report": "Enviando informe", - "What's New": "Novedades", - "What's new?": "¿Qué hay de nuevo?", - "Waiting for response from server": "Esperando una respuesta del servidor", - "You have successfully set a password and an email address!": "¡Has establecido una nueva contraseña y dirección de correo electrónico!", - "You have successfully set a password!": "¡Has establecido una nueva contraseña!", "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s en %(osName)s", - "All messages (noisy)": "Todos los mensajes (ruidoso)", - "All notifications are currently disabled for all targets.": "Las notificaciones estan desactivadas para todos los objetivos.", - "Collecting app version information": "Recolectando información de la versión de la aplicación", - "Collecting logs": "Recolectando registros", "Dismiss": "Omitir", - "Failed to send report: ": "Error al enviar informe: ", - "Loading bug report module": "Cargando módulo de reporte de errores", - "Messages containing keywords": "Mensajes que contienen palabras clave", - "Notify for all other messages/rooms": "Notificar para todos los demás mensajes/salas", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Por favor describa el error. ¿Qué acción ejecutó? ¿Cuál era el resultado que esperaba? ¿Que pasó realmente?", - "Please describe the bug and/or send logs.": "Por favor describe el error y/o envía los registros.", - "Please install Chrome or Firefox for the best experience.": "Por favor instale Google Chrome o Mozilla Firefox para una mejor experiencia.", "powered by Matrix": "con el poder de Matrix", "Riot Desktop on %(platformName)s": "Riot Desktop en %(platformName)s", "Riot is not supported on mobile web. Install the app?": "Riot no está soportado en navegadores Web móviles. ¿Quieres instalar la aplicación?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot usa muchas características avanzadas del navegador, algunas de las cuales no están disponibles en su navegador actual.", "You need to be using HTTPS to place a screen-sharing call.": "Debes usar HTTPS para hacer una llamada con pantalla compartida.", - "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "En su navegador actual, la apariencia y comportamiento de la aplicación puede ser completamente incorrecta, y algunas de las características podrían no funcionar. Si aún desea probarlo puede continuar, pero ¡no podremos ofrecer soporte por cualquier problema que pudiese tener!", "Welcome to Riot.im": "Bienvenido a Riot.im", - "Decentralised, encrypted chat & collaboration powered by [matrix]": "Conversaciones cifradas y descentralizadas & colaboración con el poder de [matrix]", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Conversaciones cifradas y descentralizadas y colaboración con el poder de [matrix]", "Search the room directory": "Buscar en el directorio de salas", - "Chat with Riot Bot": "Conversar con el Bot de Riot", + "Chat with Riot Bot": "Hablar con Riot Bot", "Get started with some tips from Riot Bot!": "¡Comenzar con algunos consejos de Riot Bot!", "General discussion about Matrix and Riot": "Discusión general sobre Matrix y Riot", "Discussion of all things Matrix!": "¡Discusión sobre todas las cosas de Matrix!", @@ -179,47 +33,21 @@ "Contributing code to Matrix and Riot": "Contribuciones de código para Matrix y Riot", "Dev chat for the Riot/Web dev team": "Conversaciones del equipo de desarrollo de Riot/Web", "Dev chat for the Dendrite dev team": "Conversaciones del equipo de desarrollo de Dendrite", - "Co-ordination for Riot/Web translators": "Coordinación para traductores de Riot/Web", "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Muchas salas ya están disponibles en Matrix, enlazadas a redes existentes (Slack, IRC, Gitter, etc) o independientes. ¡Revisa el directorio!", - "You can now return to your account after signing out, and sign in on other devices.": "Ahora puedes regresar a tu cuenta después de cerrar tu sesión, e iniciar sesión en otros dispositivos.", - "Please set a password!": "¡Por favor establece una contraseña!", - "This will allow you to return to your account after signing out, and sign in on other devices.": "Esto te permitirá regresar a tu cuenta después de cerrar sesión, así como iniciar sesión en otros dispositivos.", - "Warning": "Advertencia", - "Checking for an update...": "Comprobando actualizaciones...", - "No update available.": "No hay actualizaciones disponibles.", - "Downloading update...": "Descargando actualizaciones...", - "To return to your account in future you need to set a password": "Para regresar a tu cuenta en el futuro debes establecer una contraseña", - "Set Password": "Establecer contraseña", - "Error encountered (%(errorDetail)s).": "Error encontrado (%(errorDetail)s).", - "Couldn't load home page": "No se puede cargar la página principal", - "Bug report sent": "Informe de fallo enviado", - "Thank you!": "¡Gracias!", - "Show message in desktop notification": "Mostrar mensaje en la notificación del escritorio", "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Puedes usar las opciones del servidor personalizado para acceder a otros servidores Matrix especificando su URL.
    Esto te permite usar Riot con una cuenta Matrix existente en un servidor doméstico distinto.

    También puedes establecer un servidor de identidad personalizado pero no podrás invitar a otros usuarios usando su dirección de correo electrónico, y tampoco ser invitado por el tuyo.", - "Appear Offline": "Mostrarse Desconectado", - "Away": "Ausente", - "Back": "Atrás", - "Send Custom Event": "Enviar Evento Personalizado", - "You must specify an event type!": "Debes especificar un tipo de evento!", - "Event sent!": "Evento enviado!", - "Failed to send custom event.": "Ha fallado el envio del evento personalizado.", - "Event Type": "Tipo de Evento", - "State Key": "Clave de estado", - "Event Content": "Contenido del Evento", - "Send Account Data": "Enviar Datos de la Cuenta", - "Filter results": "Filtrar resultados", - "Explore Room State": "Explorar Estado de la Sala", - "Edit": "Editar", - "Explore Account Data": "Explorar Datos de la Cuenta", - "Toolbox": "Caja de Herramientas", - "Developer Tools": "Herramientas de Desarrollo", - "Please install Chrome or Firefox for the best experience.": "Por favor instala Chrome o Firefox para una experiencia óptima.", - "Safari and Opera work too.": "Safari y Opera también funcionan.", - "Register": "Registro", - "Rooms": "Salas", - "Invite to this community": "Invitar a esta comunidad", - "Add rooms to this community": "Agregar salas a esta comunidad", - "Unpin Message": "Desmarcar Mensaje", - "Pin Message": "Marcar Mensaje", - "Reply": "Responder" + "Co-ordination for Riot translators": "Co-odinación de traductores de Riot", + "Sign In": "Iniciar sesión", + "Create Account": "Crear cuenta", + "Need help?": "Ayuda?", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "También puedes definir un servidor de identidad personalizado, pero no podrás invitar a usuarios o ser inivitado usando direcciones de correo.", + "Explore rooms": "Explorar salas", + "Room Directory": "Directorio de salas", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Puedes usar la opción de servidor personalizado para iniciar sesión en otros servidores Matrix, especificando la dirección URL del servidor. Esto te permite usar una cuenta Matrix en un servidor diferente.", + "Unexpected error preparing the app. See console for details.": "Error inesperado preparando la aplicación. Vea la consola para más detalles.", + "Your Riot is misconfigured": "Riot tiene un error de configuración", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuración errónea: sólo puede especificar uno de default_server_config, default_server_name, o default_hs_url.", + "Invalid configuration: no default server specified.": "Configuración errónea: no se ha especificado servidor.", + "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Tu configuración de Riot contiene JSON inválido. Por favor corrige el error y recarga la página.", + "The message from the parser is: %(message)s": "El mensaje del parser es: %(message)s", + "Invalid JSON": "JSON inválido" } diff --git a/src/i18n/strings/eu.json b/src/i18n/strings/eu.json index bc5fb0e3c0..e880661bab 100644 --- a/src/i18n/strings/eu.json +++ b/src/i18n/strings/eu.json @@ -1,155 +1,11 @@ { "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s %(browserName)s bidez %(osName)s ostalarian", - "Safari and Opera work too.": "Safari eta Opera badabiltza ere.", - "A new version of Riot is available.": "Riot bertsio berri bat dago eskuragarri.", - "Add an email address above to configure email notifications": "Gehitu e-mail helbide bat goian e-mail bidezko jakinarazpenak konfiguratzeko", - "Advanced notification settings": "Jakinarazpen aurreratuen ezarpenak", - "All messages": "Mezu guztiak", - "All messages (noisy)": "Mezu guztiak (ozen)", - "All Rooms": "Gela guztiak", - "All notifications are currently disabled for all targets.": "Une honetan jakinarazpen guztiak helburu guztietarako desgaituta daude.", - "An error occurred whilst saving your email notification preferences.": "Errore bat gertatu da zure e-mail bidezko jakinarazpenen hobespenak gordetzean.", - "Call invitation": "Dei gonbidapena", - "Cancel": "Utzi", - "Cancel Sending": "Utzi bidaltzeari", - "Can't update user notification settings": "Ezin dira erabiltzailearen jakinarazpenen ezarpenak eguneratu", - "Changelog": "Aldaketa-egunkaria", - "Close": "Itxi", - "Collapse panel": "Tolestu panela", - "Collecting app version information": "Aplikazioaren bertsio-informazioa biltzen", - "Collecting logs": "Egunkariak biltzen", - "Couldn't find a matching Matrix room": "Ezin izan da bat datorren Matrix gela bat aurkitu", "Custom Server Options": "Zerbitzari pertsonalizatuaren aukerak", - "customServer_text": "Zerbitzari pertsonalizatuaren aukerak erabili ditzakezu beste hasiera zerbitzari baten URLa jarrita beste Matrix zerbitzarietan saioa hasteko.
    Honek oraingo Matrix kontuarekin Riot beste hasiera zerbitzari batean erabiltzea ahalbidetzen dizu.

    Identitate zerbitzari pertsonalizatu bat jar dezakezu ere baina ezin izango dituzu erabiltzaileak bere e-mail helbidea erabilita gonbidatu, edo besteek zu gonbidatu zure e-mail helbidea erabilita.", - "delete the alias.": "ezabatu ezizena.", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Ezabatu gelaren %(alias)s ezizena eta kendu %(name)s direktoriotik?", - "Describe your problem here.": "Azaldu zure arazoa hemen.", - "Direct Chat": "Txat zuzena", - "Directory": "Direktorioa", "Dismiss": "Baztertu", - "Download this file": "Deskargatu fitxategi hau", - "Enable audible notifications in web client": "Gaitu jakinarazpen entzungarriak web bezeroan", - "Enable desktop notifications": "Gaitu mahaigaineko jakinarazpenak", - "Enable email notifications": "Gaitu e-mail bidezko jakinarazpenak", - "Enable notifications for this account": "Gaitu jakinarazpenak kontu honetarako", - "Enable them now": "Gaitu orain", - "Enter keywords separated by a comma:": "Idatzi hitz gakoak koma bidez banatuta:", - "Error": "Errorea", - "Error saving email notification preferences": "Errorea e-mail jakinarazpenen hobespenak gordetzean", - "#example": "#adibidea", - "Expand panel": "Hedatu panela", - "Failed to add tag %(tagName)s to room": "Huts egin du %(tagName)s etiketa gelara gehitzean", - "Failed to change settings": "Huts egin du ezarpenak aldatzean", - "Failed to forget room %(errCode)s": "Huts egin du %(errCode)s gela ahaztean", - "Failed to update keywords": "Huts egin du hitz gakoak eguneratzean", - "Failed to get protocol list from Home Server": "Huts egin du protokoloen zerrenda hasiera zerbitzaritik jasotzean", - "Failed to get public room list": "Huts egin du gela publikoen zerrenda jasotzean", - "Failed to remove tag %(tagName)s from room": "Huts egin du %(tagName)s etiketa gelatik kentzean", - "Failed to send report: ": "Huts egin du txostena bidaltzean: ", - "Failed to set direct chat tag": "Huts egin du txat zuzeneko etiketa jartzean", - "Failed to set Direct Message status of room": "Huts egin du Mezu Zuzena egoera gelan ezartzean", - "Favourite": "Gogokoa", - "Fetching third party location failed": "Huts egin du hirugarrengoen kokalekua eskuratzean", - "Files": "Fitxategiak", - "Filter room names": "Iragazi gelen izenak", - "Forget": "Ahaztu", - "Forward Message": "Birbidali mezua", - "Guests can join": "Bisitariak elkartu daitezke", - "Hide panel": "Ezkutatu panela", - "(HTTP status %(httpStatus)s)": "(HTTP egoera %(httpStatus)s)", - "I understand the risks and wish to continue": "Arriskua ulertzen dut eta jarraitu nahi dut", - "Invite to this room": "Gonbidatu gela honetara", - "Keywords": "Hitz gakoak", - "Leave": "Atera", - "Login": "Hasi saioa", - "Loading bug report module": "Arazte-txosten modulua kargatzen", - "Low Priority": "Lehentasun baxua", - "Members": "Kideak", - "Mentions only": "Aipamenak besterik ez", - "Messages containing my display name": "Nire pantaila-izena duten mezuak", - "Messages containing keywords": "Hitz gakoak dituzten mezuak", - "Messages containing my user name": "Nire erabiltzaile-izena duten mezuak", - "Messages in group chats": "Talde txatetako mezuak", - "Messages in one-to-one chats": "Biren arteko txatetako mezuak", - "Messages sent by bot": "Botak bidalitako mezuak", - "more": "gehiago", - "Mute": "Mututu", - "No rooms to show": "Ez dago gelarik erakusteko", - "Noisy": "Zaratatsua", - "Notification targets": "Jakinarazpenen helburuak", - "Notifications": "Jakinarazpenak", - "Notifications on the following keywords follow rules which can’t be displayed here:": "Hitz gako hauen jakinarazpenak hemen bistaratu ezin daitezkeen arauak jarraitzen dituzte:", - "Notify for all other messages/rooms": "Jakinarazi beste mezu/gela guztiak", - "Notify me for anything else": "Jakinarazi beste edozer", - "Off": "Ez", - "On": "Bai", - "Operation failed": "Eragiketak huts egin du", - "Permalink": "Esteka iraunkorra", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Deskribatu akatsa. Zer egin duzu? Zer gertatuko zela uste zenuen? Zer gertatu da?", - "Please describe the bug and/or send logs.": "Deskribatu akatsa eta/edo bidali egunkariak.", - "Please install Chrome or Firefox for the best experience.": "Instalatu Chrome edo Firefox esperientzia on baterako.", "powered by Matrix": "Matrix mamian", - "Quote": "Aipua", - "Reject": "Baztertu", - "Remove %(name)s from the directory?": "Kendu %(name)s direktoriotik?", - "Remove": "Kendu", - "remove %(name)s from the directory.": "kendu %(name)s direktoriotik.", - "Remove from Directory": "Kendu direktoriotik", - "Report a bug": "Eman akats baten berri", - "Resend": "Birbidali", "Riot Desktop on %(platformName)s": "Riot Desktop %(platformName)s plataforman", - "Riot does not know how to join a room on this network": "Riotek ez daki nola elkartu gela batetara sare honetan", "Riot is not supported on mobile web. Install the app?": "Riotek ez du euskarririk mugikorrentzako webean. Instalatu aplikazioa?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riotek nabigatzaileen ezaugarri aurreratu ugari erabiltzen ditu, hauetako batzuk ez daude erabilgarri edo esperimentalak dira zure oraingo nabigatzailean.", - "Room not found": "Ez da gela aurkitu", - "Search": "Bilatu", - "Search…": "Bilatu…", - "Search for a room": "Bilatu gela bat", - "Send": "Bidali", - "Send logs": "Bidali egunkariak", - "Source URL": "Iturriaren URLa", - "Sorry, your browser is not able to run Riot.": "Zure nabigatzaileak ez du Riot erabiltzeko gaitasunik.", - "The Home Server may be too old to support third party networks": "Hasiera zerbitzaria zaharregia izan daiteke hirugarrengoen sarean onartzeko", - "There are advanced notifications which are not shown here": "Hemen erakusten ez diren jakinarazpen aurreratuak daude", - "The server may be unavailable or overloaded": "Zerbitzaria eskuraezin edo gainezka egon daiteke", - "This Room": "Gela hau", - "Unable to fetch notification target list": "Ezin izan da jakinarazpen helburuen zerrenda eskuratu", - "Unable to join network": "Ezin izan da sarera elkartu", - "Unable to look up room ID from server": "Ezin izan da gelaren IDa zerbitzarian bilatu", - "Unavailable": "Eskuraezina", - "Unhide Preview": "Ez ezkutatu aurrebista", "Unknown device": "Gailu ezezaguna", - "unknown error code": "errore kode ezezaguna", - "Unnamed room": "Izen gabeko gela", - "Update": "Eguneratu", - "Uploaded on %(date)s by %(user)s": "%(user)s erabiltzaileak %(date)s (e)an igota", - "Uploading report": "Igoera txostena", - "View Decrypted Source": "Ikusi deszifratutako iturria", - "View Source": "Ikusi iturria", - "What's New": "Zer dago berri", - "What's new?": "Zer dago berri?", - "Waiting for response from server": "Zerbitzariaren erantzunaren zain", - "When I'm invited to a room": "Gela batetara gonbidatzen nautenean", - "World readable": "Munduak irakurgarria", - "You cannot delete this image. (%(code)s)": "Ezin duzu irudi hau ezabatu. (%(code)s)", - "You cannot delete this message. (%(code)s)": "Ezin duzu mezu hau ezabatu. (%(code)s)", - "You are not receiving desktop notifications": "Ez dituzu mahaigaineko jakinarazpenak jasotzen", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Agian Riot ez beste bezero batean konfiguratu dituzu. Ezin dituzu Riot bidez doitu, baina aplikagarriak dira", - "Sunday": "Igandea", - "Monday": "Astelehena", - "Tuesday": "Asteartea", - "Wednesday": "Asteazkena", - "Thursday": "Osteguna", - "Friday": "Ostirala", - "Saturday": "Larunbata", - "Today": "Gaur", - "Yesterday": "Atzo", - "OK": "Ados", - "Warning": "Abisua", - "Checking for an update...": "Eguneraketarik dagoen egiaztatzen...", - "Error encountered (%(errorDetail)s).": "Errorea aurkitu da (%(errorDetail)s).", - "No update available.": "Ez dago eguneraketarik eskuragarri.", - "Downloading update...": "Eguneraketa deskargatzen...", "You need to be using HTTPS to place a screen-sharing call.": "HTTPS erabili behar duzu sekretuak partekatzeko dei bat ezartzeko.", "Welcome to Riot.im": "Ongi etorri Riot.im mezularitzara", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Deszentralizatutako eta zifratutako txat eta elkarlana [matrix] sareari esker", @@ -177,49 +33,21 @@ "Contributing code to Matrix and Riot": "Kodearekin lagundu Matrix eta Riot", "Dev chat for the Riot/Web dev team": "Riot/web garapen taldearen txata", "Dev chat for the Dendrite dev team": "Dendrite garapen taldearen txata", - "Co-ordination for Riot/Web translators": "Riot/Web itzultzaileen arteko koordinazioa", "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Badauden sareetara lotutako gela ugari daude Matrixen (Slack, IRC, Gitter eta abar), baita independienteak. Begiratu direktorioa!", - "Failed to change password. Is your password correct?": "Pasahitza aldatzean huts egin du. Zuzena da pasahitza?", - "You have successfully set a password!": "Ongi ezarri duzu pasahitza!", - "You can now return to your account after signing out, and sign in on other devices.": "Zure kontura itzuli zaitezke beste gailuetan saioa amaitu eta berriro hastean.", - "Continue": "Jarraitu", - "Please set a password!": "Ezarri pasahitza mesedez!", - "This will allow you to return to your account after signing out, and sign in on other devices.": "Honek zure kontura itzultzea ahalbidetuko dizu, beste gailuetan saioa amaitu eta berriro hasi eta gero.", - "You have successfully set a password and an email address!": "Ondo ezarri dituzu pasahitza eta e-mail helbidea!", - "Remember, you can always set an email address in user settings if you change your mind.": "Gogoratu, e-mail helbide bat ezarri dezakezu erabiltzaile-ezarpenetan iritzia aldatzen baduzu.", - "To return to your account in future you need to set a password": "Etorkizunean kontura itzuli ahal izateko pasahitz bat ezarri behar duzu", - "Set Password": "Ezarri pasahitza", - "Couldn't load home page": "Ezin izan da hasiera orria kargatu", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Arazoak diagnostikatzeko, bezero honen egunkariak bidaliko dira arazte-txosten honekin. Testua besterik ez baduzu bidali nahi, desmarkatu:", - "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Zure oraingo nabigatzailearekin aplikazioaren itxura eta portaera guztiz okerra izan daiteke, eta funtzio batzuk ez dira ibiliko. Hala ere aurrera jarraitu dezakezu saiatu nahi baduzu, baina zure erantzukizunaren menpe geratzen dira aurkitu ditzakezun arazoak!", - "Bug report sent": "Arazte-txostena bidali da", - "Thank you!": "Eskerrik asko!", - "Show message in desktop notification": "Erakutsi mezua mahaigaineko jakinarazpenean", - "Appear Offline": "Agertu deskonektatuta", - "Away": "Teklatutik at", - "Back": "Atzera", - "Send Custom Event": "Bidali gertaera pertsonalizatua", - "You must specify an event type!": "Gertaera mota bat zehaztu behar duzu!", - "Event sent!": "Gertaera bidalita!", - "Failed to send custom event.": "Huts egin du gertaera pertsonalizatua bidaltzean.", - "Event Type": "Gertaera mota", - "State Key": "Egoera gakoa", - "Event Content": "Gertaeraren edukia", - "Send Account Data": "Bidali kontuaren datuak", - "Filter results": "Iragazi emaitzak", - "Explore Room State": "Miatu gelaren egoera", - "Edit": "Editatu", - "Explore Account Data": "Miatu kantuaren datuak", - "Toolbox": "Tresna-kutxa", - "Developer Tools": "Garatzaile-tresnak", - "Unpin Message": "Desfinkatu mezua", - "Pin Message": "Finkatu mezua", - "Please install Chrome or Firefox for the best experience.": "Instalatu Chrome edo Firefox esperientzia onena izateko.", - "Safari and Opera work too.": "Safari eta Opera badabiltza ere.", - "Register": "Eman izena", - "Rooms": "Gelak", - "Invite to this community": "Gonbidatu komunitate honetara", - "Add rooms to this community": "Gehitu gelak komunitate honetara", "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Zerbitzari pertsonalizatuaren aukerak erabili ditzakezu beste Matrix zerbitzarietan saioa hasteko, han beste hasiera-zerbitzari baten URLa sartuz.
    Horrela Riot aurretik duzun kontu batekin erabili dezakezu beste hasiera-zerbitzari batean.

    Identitate-zerbitzari pertsonalizatu bat ezarri dezakezu ere, baina orduan ezin izango dituzu erabiltzaileak e-mail helbidea erabiliz gonbidatu, edo ezin izan izango zaituzte zu e-mail helbidea erabiliz gonbidatu.", - "Reply": "Erantzun" + "Co-ordination for Riot translators": "Riot itzultzaileen koordinazioa", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Zerbitzari pertsonalizatuaren aukera erabili dezakezu bestelako Matrix zerbitzari batera konektatzeko, bere URL-a adierazita. Honek Riot beste zerbitzari batean duzun Matrix kontuarekin erabiltzea ahalbidetzen dizu.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Identitate zerbitzari pertsonalizatu bat ere ezarri dezakezu, baina orduan ezin izango dituzu erabiltzaileak e-mail helbidearen bidez gonbidatu, edo ezin izango zaituzte e-mail helbidearen bidez zu gonbidatu.", + "Sign In": "Hasi saioa", + "Create Account": "Sortu kontua", + "Need help?": "Laguntza behar?", + "Explore rooms": "Arakatu gelak", + "Room Directory": "Gelen direktorioa", + "Unexpected error preparing the app. See console for details.": "Ustekabeko errorea aplikazioa prestatzean. Ikusi xehetasunak kontsolan.", + "Your Riot is misconfigured": "Zure Riot gaizki konfiguratuta dago", + "Invalid configuration: no default server specified.": "Konfigurazio baliogabea: Ez da lehenetsitako zerbitzaririk zehaztu.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Konfigurazio baliogabea: default_server_config, default_server_name, edo default_hs_url bat bakarra zehaztu daiteke.", + "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Zure Riot konfigurazioak baliogabeko JSON kodea du. Zuzendu arazoa eta kargatu orria berriro.", + "The message from the parser is: %(message)s": "Prozesatzailearen mezua hau da: %(message)s", + "Invalid JSON": "JSON baliogabea" } diff --git a/src/i18n/strings/fa.json b/src/i18n/strings/fa.json index 6570b0210d..adcf0f903c 100644 --- a/src/i18n/strings/fa.json +++ b/src/i18n/strings/fa.json @@ -1,136 +1,10 @@ { - "A new version of Riot is available.": "نسخه‌ی جدید از رایوت موجود است.", - "All messages": "همه‌ی پیام‌ها", - "All messages (noisy)": "همه‌ی پیام‌ها(بلند)", - "All Rooms": "همه‌ی گپ‌ها", - "Cancel Sending": "فرستادن را لغو کن", - "Changelog": "تغییراتِ به‌وجودآمده", - "Close": "بستن", - "Collecting app version information": "درحال جمع‌آوری اطلاعات نسخه‌ی برنامه", - "Couldn't find a matching Matrix room": "گپ‌گاه مورد نظر در ماتریکس یافت نشد", - "Direct Chat": "چت مستقیم", - "Directory": "فهرست گپ‌گاه‌ها", - "Download this file": "بارگیری کن", - "Enable audible notifications in web client": "آگاه‌سازی صدادار را در کارگزار وب فعال کن", - "Enable email notifications": "آگاه‌سازی با رایانامه را فعال کن", - "Enable notifications for this account": "آگاه سازی با رایانامه را برای این اکانت فعال کن", - "Enable them now": "همین حالا فعالشان کن", - "Enter keywords separated by a comma:": "کلیدواژه‌ها را وارد کنید؛ از کاما(,) برای جدا کردن آنها از یکدیگر استفاده کنید:", - "Error": "خطا", - "Error saving email notification preferences": "خطا در ذخیره‌سازی ترجیحات آگاهسازی با ایمیل", - "#example": "#نمونه", - "Expand panel": "پنل را بگشا", - "Failed to add tag %(tagName)s to room": "در افزودن تگ %(tagName)s موفقیت‌آمیز نبود", - "Failed to change settings": "تغییر تنظیمات موفقیت‌آمیز نبود", - "Failed to forget room %(errCode)s": "فراموش کردن گپ‌گاه %(errCode)s موفقیت‌آمیز نبود", - "Failed to update keywords": "به‌روزرسانی کلیدواژه‌ها موفقیت‌آمیز نبود", - "Failed to get protocol list from Home Server": "دریافت لیست پروتکل‌ها از کارگزار مبدا موفقیت‌آمیز نبود", - "Failed to get public room list": "گرفتن لیست گپ‌گاه‌های عمومی موفقیت‌آمیز نبود", - "Failed to remove tag %(tagName)s from room": "خطا در حذف کلیدواژه‌ی %(tagName)s از گپ", - "Failed to send report: ": "فرستادن گزارش موفقیت‌آمیز نبود: ", - "Favourite": "علاقه‌مندی‌ها", - "Files": "فایل‌ها", - "Forget": "فراموش کن", - "Forward Message": "هدایت پیام", - "Guests can join": "میهمان‌ها می‌توانند بپیوندند", - "Hide panel": "پنل را پنهان کن", - "I understand the risks and wish to continue": "از خطرات این کار آگاهم و مایلم که ادامه بدهم", - "Invite to this room": "دعوت به این گپ", - "Keywords": "کلیدواژه‌ها", - "Leave": "خروج", - "Login": "ورود", - "Loading bug report module": "درحال بارگذاری و اجرای ماژولِ گزارش باگ", - "Low Priority": "کم اهمیت", - "Members": "اعضا", - "Mentions only": "فقط نام‌بردن‌ها", - "Please set a password!": "لطفا یک پسورد اختیار کنید!", - "This will allow you to return to your account after signing out, and sign in on other devices.": "این به شما اجازه خواهد داد که پس از خروج به اکانت خود بازگردید و از سایر دستگاه‌ها وارد شوید.", - "You have successfully set a password and an email address!": "تخصیص ایمیل و پسوردتان با موفقیت انجام شد!", - "Remember, you can always set an email address in user settings if you change your mind.": "به خاطر داشته باشید که اگر نظرتان عوض شد می‌توانید از بخش تنظیمات یک ایمیل را به اکانتتان متصل کنید.", - "To return to your account in future you need to set a password": "برای بازگشتِ دوباره به اکانتان در آینده نیاز به ثبت یک پسورد دارید", - "Set Password": "پسوردتان را انتخاب کنید", - "Safari and Opera work too.": "سافاری و اپرا نیز کار می‌کنند.", - "Add an email address above to configure email notifications": "آدرس ایمیلتان را به بالا بیفزایید تا بتوانید آگاه‌سازی با ایمیل را مدیریت کنید", - "Advanced notification settings": "تنظیمات پیشرفته برای آگاه‌سازی‌ها", - "Continue": "ادامه", "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "بسیاری از گپ‌گاه‌های موجود در فهرستِ گپ‌ها به شبکه‌های موجود(اسلک، آی‌آر‌سی، گلیتر و...) متصل و یا مستقل‌اند؛ به آنها نگاهی بیندازید!", - "Failed to change password. Is your password correct?": "خطا در تغییر گذرواژه. آیا از درستی گذرواژه‌تان اطمینان دارید؟", - "You can now return to your account after signing out, and sign in on other devices.": "اکنون می‌توانید پس از خروج به اکانتتان بازگردید و با دستگاه‌های دیگری وارد شوید.", - "Co-ordination for Riot/Web translators": "هماهنگی برای مترجمان رایوت/وب", "Contributing code to Matrix and Riot": "کمک به برنامه‌نویسی در ماتریکس و رایوت", - "(HTTP status %(httpStatus)s)": "(HTTP وضعیت %(httpStatus)s)", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "برای بهبود و رفع مشکلات، گزارش‌هایی از این کارخواه به عنوان مستنداتی از یک باگ ارسال خوهند شد. اگر ترجیح می‌دهید که فقط متن بالا ارسال شود لطفا تیک را بردارید", - "Messages containing keywords": "پیا‌م‌های دارای این کلیدواژه‌ها ", - "Messages containing my user name": "پیام‌های شامل نامِ کاربری من", - "Messages in group chats": "پیام‌های درون چت‌های گروهی", - "Messages in one-to-one chats": "پیام‌های درون چت‌های یک‌به‌یک", - "Messages sent by bot": "پیام‌های ارسال شده توسط ربات", - "more": "بیشتر", - "Mute": "سکوت", - "No rooms to show": "هیچ گپی برای نشان دادن موجود نیست", - "Noisy": "پرسروصدا", - "Notification targets": "هدف‌های آگاه‌سازی", - "Notifications": "آگاه‌سازی‌ها", - "Notify me for anything else": "مرا برای هرچیز دیگری باخبر کن", - "Off": "خاموش", - "On": "روشن", - "Operation failed": "عملیات شکست خورد", - "Please install Chrome or Firefox for the best experience.": "لطفا برای بهترین تجربه‌ی کاربری ازکروم یا فایرفاکس استفاده کنید", "powered by Matrix": "قدرت‌یافته از ماتریکس", - "Quote": "گفتآورد", - "Reject": "پس زدن", - "Remove": "حذف کن", - "Remove %(name)s from the directory?": "آیا مطمئنید می‌خواهید %(name)s را از فهرست گپ‌ها حذف کنید؟", - "remove %(name)s from the directory.": "%(name)s را از فهرست گپ‌ها حذف کن", - "Remove from Directory": "از فهرستِ گپ‌ها حذف کن", - "Report a bug": "باگ‌ها را گزارش کنید", - "Resend": "بازفرست", "Riot Desktop on %(platformName)s": "رایوت دسکتاپ بر %(platformName)s", - "Riot does not know how to join a room on this network": "رایوت از چگونگی ورود به یک گپ در این شبکه اطلاعی ندارد", "Riot is not supported on mobile web. Install the app?": "رایوت در موبایل‌ها پشتیبانی نمیشود؛ تمایلی دارید که اپ را نصب کنید؟", - "Room not found": "گپ یافت نشد", - "Search": "جستجو", - "Search…": "جستجو…", - "Search for a room": "جستجوی برای یک گپ", - "Send": "ارسال", - "Send logs": "ارسال گزارش‌ها", - "Sorry, your browser is not able to run Riot.": "متاسفانه مرورگر شما نمی‌تواند رایوت را اجرا کند.", - "There are advanced notifications which are not shown here": "آگاه‌سازی‌های پیشرفته‌ای هستند که در اینجا نشان داده نشده‌اند", - "The server may be unavailable or overloaded": "این سرور ممکن است ناموجود یا بسیار شلوغ باشد", - "This Room": "این گپ", - "Unable to join network": "خطا در ورود به شبکه", - "Unavailable": "غیرقابل‌دسترسی", "Unknown device": "دستگاه ناشناخته", - "unknown error code": "کد خطای ناشناخته", - "Unnamed room": "گپ نام‌گذاری نشده", - "Update": "به‌روزرسانی", - "Uploading report": "در حال بارگذاری گزارش", - "Downloading update...": "در حال بارگیریِ به‌روزرسانی...", - "Cancel": "لغو", - "Call invitation": "دعوت به تماس", - "An error occurred whilst saving your email notification preferences.": "خطایی در حین ذخیره‌ی ترجیجات شما درباره‌ی رایانامه رخ داد.", - "Describe your problem here.": "مشکلتان را در اینجا توضیح دهید.", - "Enable desktop notifications": "آگاه‌سازی دسکتاپ را فعال کن", - "Permalink": "پایاپیوند", - "Please describe the bug and/or send logs.": "لطفا باگ را توصیف کنید و یا گزارش‌ها را بفرستید", - "Unhide Preview": "پیش‌نمایش را نمایان کن", - "View Source": "دیدن منبع", - "What's New": "تازه‌ها", - "World readable": "خواندن جهانی", - "You cannot delete this image. (%(code)s)": "شما نمی‌توانید این تصویر را پاک کنید. (%(code)s)", - "You cannot delete this message. (%(code)s)": "شما نمی‌توانید این پیام را پاک کنید. (%(code)s)", - "Sunday": "یکشنبه", - "Monday": "دوشنبه", - "Tuesday": "سه‌شنبه", - "Wednesday": "چهارشنبه", - "Thursday": "پنج‌شنبه", - "Friday": "آدینه", - "Saturday": "شنبه", - "Today": "امروز", - "Yesterday": "دیروز", - "OK": "باشه", - "Warning": "هشدار", - "No update available.": "هیچ به روزرسانی جدیدی موجود نیست.", "Welcome to Riot.im": "به Riot.im خوش‌آمدید", "Chat with Riot Bot": "با رایوت‌بات چت کنید", "Get started with some tips from Riot Bot!": "با کمی راهنمایی از رایوت‌بات شروع کنید!", @@ -144,29 +18,9 @@ "Search the room directory": "در فهرست گپ‌ها جستجو کنید", "Decentralised, encrypted chat & collaboration powered by [matrix]": "چت مرکزگریز و رمزنگاری‌شده & ارائه‌ای از ماتریکس", "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s از طریق %(browserName)s بر %(osName)s", - "All notifications are currently disabled for all targets.": "همه‌ی آگاه‌سازی‌ها برای تمام هدف‌ها غیرفعال‌اند.", - "Can't update user notification settings": "امکان به‌روزرسانی تنظیمات آگاه‌سازی کاربر وجود ندارد", - "Collecting logs": "درحال جمع‌آوری گزارش‌ها", "Custom Server Options": "تنظیمات سفارشی برای سرور", - "delete the alias.": "نام مستعار را پاک کن.", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "آیا مطمئنید که می‌خواهید نام مستعار گپ %(alias)s را پاک و %(name)s را از فهرست حذف کنید؟", "Dismiss": "نادیده بگیر", - "Failed to set direct chat tag": "تنظیم تگ برای چت مستقیم موفقیت‌آمیز نبود", - "Filter room names": "جستجو در گپ‌ها", - "Notify for all other messages/rooms": "برای همه‌ی پیام‌ها/گپ‌های دیگر آگاه‌سازی کن", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "لطفا باگ را دقیقا تشریح کنید. چه کار کردید؟ انتظار داشتید چه اتفاقی بیفتد؟ دقیقا چه اتفاقی افتاد؟", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "رایوت از بسیاری از ویژگی‌های پیشرفته در مروگرها استفاده می‌کند، برخی از این ویژگی‌ها در مرورگر کنونی شما موجود نیستند و یا در حالت آزمایشی قرار دارند.", - "Source URL": "آدرس مبدا", - "Unable to fetch notification target list": "ناتوانی در تطبیق لیست آگاه‌سازی‌های هدف", - "Uploaded on %(date)s by %(user)s": "آپلود شده در تاریخ %(date)s توسط %(user)s", - "View Decrypted Source": "دیدن منبع رمزگشایی شده", - "Waiting for response from server": "در انتظار پاسخی از سمت سرور", - "When I'm invited to a room": "وقتی من به گپی دعوت میشوم", - "You are not receiving desktop notifications": "شما آگاه‌سازی‌های دسکتاپ را دریافت نمی‌کنید", - "Checking for an update...": "درحال بررسی به‌روزرسانی‌ها...", - "Error encountered (%(errorDetail)s).": "خطای رخ داده (%(errorDetail)s).", "You need to be using HTTPS to place a screen-sharing call.": "شما باید از ارتباط امن HTTPS برای به‌راه‌اندازی یک چتِ شامل به اشتراک‌گذاری صفحه‌ی کامیپوتر استفاده کنید.", - "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "با مرورگر کنونی شما، ظاهر و حس استفاده از برنامه ممکن است کاملا اشتباه باشد و برخی یا همه‌ی ویژگی‌ها ممکن است کار نکنند. می‌توانید به استفاده ادامه دهید اما مسئولیت هر مشکلی که به آن بربخورید بر عهده‌ی خودتان است!", "Discussion of all things Matrix!": "بحث درمورد تمام چیز‌های مربوط به ماتریکس!", "Riot/Web & Desktop chat": "رایوت/وب & چت دسکتاپ", "Riot/iOS & matrix-ios-sdk chat": "رایوت/آی‌او‌اس & چت در مورد matrix-ios-sdk", @@ -178,13 +32,7 @@ "Implementing VR services with Matrix": "پیاده‌سازی سرویس‌های VR با ماتریکس", "Implementing VoIP services with Matrix": "پیاده‌سازی سرویس‌های VoIP با ماتریکس", "Discussion of the Identity Service API": "بحث درمورد API سرویس هویت", - "You have successfully set a password!": "شما با موفقیت رمزتان را انتخاب کردید!", - "Collapse panel": "پنل را ببند", - "Failed to set Direct Message status of room": "تنظیم حالت پیام مستقیم برای گپ موفقیت‌آمیز نبود", - "Fetching third party location failed": "تطبیق اطلاعات از منابع‌ دسته سوم با شکست مواجه شد", - "Messages containing my display name": "پیام‌های حاوی نمای‌نامِ من", - "What's new?": "تازه‌ها", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "ممکن است شما این تنظیمات را در کارخواهی به جز رایوت اعمال کرده باشید. شما نمی‌توانید انها را تغییر دهید اما آنها همچنان تاثیر خود را دارند", "Building services on Matrix": "ساخت سرویس بر روی ماتریکس", - "Support for those using the Matrix spec": "پشتیبانی برای آنان که از مستندات ماتریکس استفاده می‌کنند" + "Support for those using the Matrix spec": "پشتیبانی برای آنان که از مستندات ماتریکس استفاده می‌کنند", + "Co-ordination for Riot translators": "هماهنگی برای مترجمان Riot" } diff --git a/src/i18n/strings/fi.json b/src/i18n/strings/fi.json index 5602baecee..4d9b8a0a9b 100644 --- a/src/i18n/strings/fi.json +++ b/src/i18n/strings/fi.json @@ -1,156 +1,13 @@ { - "Sunday": "Sunnuntai", - "A new version of Riot is available.": "Uusi Riot-versio on saatavilla.", - "Add an email address above to configure email notifications": "Lisää sähköpostiosoite yllä saadaksesi ilmoituksia sähköpostiisi", - "Advanced notification settings": "Lisäasetukset ilmoituksille", - "All messages": "Kaikki viestit", - "All messages (noisy)": "Kaikki viestit (äänekkäästi)", - "All Rooms": "Kaikki huoneet", - "All notifications are currently disabled for all targets.": "Kaikki ilmoitukset on kytketty pois kaikilta kohteilta.", - "An error occurred whilst saving your email notification preferences.": "Sähköposti-ilmoitusasetuksia tallettaessa tapahtui virhe.", - "Call invitation": "Puhelukutsu", - "Cancel": "Peruuta", - "Cancel Sending": "Peruuta lähetys", - "Can't update user notification settings": "Käyttäjän ilmoitusasetusten päivittäminen epäonnistui", - "Changelog": "Muutosloki", - "Close": "Sulje", - "Couldn't find a matching Matrix room": "Vastaavaa Matrix-huonetta ei löytynyt", - "delete the alias.": "poista alias.", - "Describe your problem here.": "Kuvaa ongelmasi tähän.", - "Direct Chat": "Suora viestittely", - "Directory": "Hakemisto", "Dismiss": "Hylkää", - "Download this file": "Lataa tiedosto", - "Error": "Virhe", - "#example": "#esimerkki", - "Favourite": "Suosikki", - "Files": "Tiedostot", - "Forget": "Unohda", - "I understand the risks and wish to continue": "Ymmärrän riskit ja haluan jatkaa", - "Invite to this room": "Kutsu käyttäjiä", - "Keywords": "Avainsanat", - "Leave": "Poistu", - "Login": "Kirjaudu sisään", - "Low Priority": "Matala prioriteetti", - "Members": "Jäsenet", - "Mentions only": "Vain maininnat", - "more": "lisää", - "Mute": "Vaimenna", - "No rooms to show": "Ei huoneita näytettäväksi", - "Noisy": "Äänekäs", - "Notifications": "Ilmoitukset", - "Off": "Pois päältä", - "On": "Päällä", - "Operation failed": "Toiminto epäonnistui", - "Permalink": "Pysyvä linkki", - "Quote": "Lainaa", - "Reject": "Hylkää", - "Remove": "Poista", - "Report a bug": "Ilmoita ongelmasta", - "Resend": "Lähetä uudelleen", - "Room not found": "Huonetta ei löytynyt", - "Search": "Haku", - "Search…": "Haku…", - "Search for a room": "Hae huonetta", - "Send": "Lähetä", - "Send logs": "Lähetä lokit", - "Source URL": "Lähde URL", - "This Room": "Tämä huone", - "Unable to join network": "Verkkoon liittyminen epäonnistui", - "Unavailable": "Ei saatavilla", "Unknown device": "Tuntematon laite", - "unknown error code": "tuntematon virhekoodi", - "Unnamed room": "Nimeämätön huone", - "Update": "Päivitä", - "View Source": "Näytä lähde", - "Waiting for response from server": "Odotetaan vastausta palvelimelta", - "Monday": "Maanantai", - "Tuesday": "Tiistai", - "Wednesday": "Keskiviikko", - "Thursday": "Torstai", - "Friday": "Perjantai", - "Saturday": "Lauantai", - "Today": "Tänään", - "Yesterday": "Eilen", - "OK": "OK", - "Warning": "Varoitus", - "Checking for an update...": "Tarkistetaan päivityksen saatavuutta...", - "No update available.": "Ei päivityksiä saatavilla.", - "Downloading update...": "Ladataan päivitystä...", - "Welcome to Riot.im": "Tervetuloa Riot.im -palveluun", - "Search the room directory": "Hae hakemistosta", - "Continue": "Jatka", - "Set Password": "Aseta salasana", - "Safari and Opera work too.": "Safari ja Opera toimivat myös.", - "Collapse panel": "Piilota paneeli", - "Collecting app version information": "Haetaan versiotietoja", - "Collecting logs": "Haetaan lokitietoja", + "Welcome to Riot.im": "Tervetuloa Riot.im-palveluun", + "Search the room directory": "Hae luettelosta", "Custom Server Options": "Palvelinasetukset", - "customServer_text": "Voit käyttää palvelinasetuksia muille Matrix-palvelimille kirjautumiseen asettamalla oman kotipalvelinosoitteen.
    Näin voit käyttää Riotia toisella kotipalvelimella sijaitsevan Matrix-käyttäjän kanssa.

    Voit myös asettaa oman tunnistautumispalvelimen, mutta sinua ei voi kutsua etkä voi kutsua muita sähköpostiosoitteella.", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Poista huonetunnus %(alias)s ja poista %(name)s hakemistosta?", - "Enable them now": "Ota käyttöön nyt", - "Enter keywords separated by a comma:": "Anna avainsanat eroteltuna pilkuin:", - "Expand panel": "Avaa paneeli", - "Error saving email notification preferences": "Virhe tallennettaessa sähköposti-ilmoitusasetuksia", - "Failed to change settings": "Asetusten muuttaminen epäonnistui", - "Failed to forget room %(errCode)s": "Huoneen unohtaminen epäonnistui %(errCode)s", - "Failed to update keywords": "Avainsanojen päivittäminen epäonnistui", - "Enable audible notifications in web client": "Ota käyttöön äänelliset ilmoitukset", - "Enable desktop notifications": "Ota käyttöön työpöytäilmoitukset", - "Enable email notifications": "Ota käyttöön sähköposti-ilmoitukset", - "Enable notifications for this account": "Ota käyttöön ilmoitukset tälle tilille", - "Failed to add tag %(tagName)s to room": "Tagin %(tagName)s lisäämineen huoneelle ei onnistunut", - "Failed to get protocol list from Home Server": "Protokollalistan hakeminen Kotipalvelimelta ei onnistunut", - "Failed to get public room list": "Julkisten huoneiden listan hakeminen epäonnistui", - "Failed to remove tag %(tagName)s from room": "Tagin %(tagName)s poistaminen huoneelta epäonnistui", - "Failed to send report: ": "Raportin lähettäminen epäonnistui: ", - "Failed to set direct chat tag": "Suoran viestittelyn tagin asettaminen epäonnistui", - "Fetching third party location failed": "Kolmannen osapuolen paikan haku epäonnistui", - "Filter room names": "Suodata", - "Forward Message": "Edelleenlähetä viesti", - "Guests can join": "Vieraat voivat liittyä", - "Hide panel": "Piilota paneeli", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Diagnoosin helpottamiseksi lokitietoja tältä laitteelta lähetetään tämän bugiraportin mukana. Poista ruksi jos haluat lätettää vain ylläolevan tekstin:", - "Loading bug report module": "Ladataan bugiraportointimoduuli", - "Messages containing my display name": "Viestit joissa mainitaan nimimerkkini", - "Messages containing keywords": "Avainsanoja sisältävät viestit", - "Messages containing my user name": "Viestit joissa mainitaan käyttäjänimeni", - "Messages in group chats": "Viestit ryhmäkeskusteluissa", - "Messages in one-to-one chats": "Viestit henkilökohtaisissa keskusteluissa", - "Messages sent by bot": "Bottien lähettämät viestit", - "Notification targets": "Ilmoituksen kohteet", - "Notifications on the following keywords follow rules which can’t be displayed here:": "Seuraaviin avainsanoihin liittyvät ilmoitukset seuraavat sääntöjä joita ei voida näyttää tässä:", - "Notify me for anything else": "Ilmoita minulle kaikesta muusta", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Ole hyvä ja kuvaile virhe. Mitä teit? Mitä oletit tapahtuvan? Mitä itse asiassa tapahtui?", - "Please describe the bug and/or send logs.": "Ole hyvä ja kuvaile virhe sekä/tai lähetä lokitiedot.", - "Please install Chrome or Firefox for the best experience.": "Ole hyvä ja asenna Chrome tai Firefox parhaan kokemuksen saavuttamiseksi.", - "Remove %(name)s from the directory?": "Poista %(name)s hakemistosta?", - "remove %(name)s from the directory.": "poista %(name)s hakemistosta.", - "Remove from Directory": "Poista hakemistosta", - "Riot Desktop on %(platformName)s": "Riot Desktop %(platformName)s", - "Riot does not know how to join a room on this network": "Riot ei tiedä miten liittya huoneeseen tässä verkossa", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot käyttää monia selainominaisuuksia, joista osa selaimesi ei tue tai ne ovat kokeellisia.", - "Sorry, your browser is not able to run Riot.": "Valitettavasti Riot ei toimi selaimessasi.", - "The Home Server may be too old to support third party networks": "Kotipalvelin saattaa olla liian vanha tukeakseen kolmannen osapuolen verkkoja", - "The server may be unavailable or overloaded": "Palvelin saattaa olla saavuttamaton tai ylikuormitettu", - "Unable to fetch notification target list": "Ilmoituskohdelistan haku epäonnistui", - "Unable to look up room ID from server": "Huone-ID:n haku palvelimelta epäonnistui", - "Unhide Preview": "Näytä ennakkokatselu", - "Uploaded on %(date)s by %(user)s": "Ladattu %(date)s käyttäjän %(user)s toimesta", - "Uploading report": "Ladataan raporttia", - "View Decrypted Source": "Näytä purettu lähdekoodi", - "What's New": "Mikä on uutta", - "What's new?": "Mikä on uutta?", - "When I'm invited to a room": "Kun minut kutsutaan huoneeseen", - "World readable": "Kaikkien luettavissa", - "You cannot delete this image. (%(code)s)": "Et voi poistaa tätä kuvaa. (%(code)s)", - "You cannot delete this message. (%(code)s)": "Et voi poistaa tätä viestiä. (%(code)s)", - "You are not receiving desktop notifications": "Et vastaanota työpöytäilmoituksia", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Olet saattanut muuttaa niitä toisessa asiakasohjelmassa kuin Riot. Et voi muuttaa niitä Riotissa mutta ne pätevät kuitenkin", - "You need to be using HTTPS to place a screen-sharing call.": "Sinun täytyy käyttää HTTPS -yhteyttä, jotta voit jakaa ruudun.", - "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Nykyisellä selaimellasi ohjelman ulkonäkö voi olla aivan virheellinen, ja jotkut ominaisuudet eivät saata toimia. Voit jatkaa jos haluat kokeilla mutta et voi odottaa saavasi apua mahdollisesti ilmeneviin ongelmiin!", - "Chat with Riot Bot": "Keskustele Riot Botin kanssa", - "Get started with some tips from Riot Bot!": "Aloita Riot Botin vinkkien avulla!", + "Riot Desktop on %(platformName)s": "Riot Desktop, %(platformName)s", + "You need to be using HTTPS to place a screen-sharing call.": "Sinun täytyy käyttää HTTPS-yhteyttä, jotta voit jakaa ruudun puhelussa.", + "Chat with Riot Bot": "Keskustele Riot-botin kanssa", + "Get started with some tips from Riot Bot!": "Aloita Riot-botin vinkkien avulla!", "General discussion about Matrix and Riot": "Matrix- ja Riot keskustelut", "Discussion of all things Matrix!": "Keskustelu kaikesta Matrixiin liittyvästä!", "Riot/Web & Desktop chat": "Riot/Web & Työpöytä-keskustelu", @@ -161,7 +18,6 @@ "Community-run support for Synapse": "Yhteisön tarjoama Synapse-tuki", "Admin support for Dendrite": "Dendrite ylläpitotuki", "Announcements about Synapse releases": "Ilmoitukset uusista Synapse-julkaisuista", - "Error encountered (%(errorDetail)s).": "Virhe: %(errorDetail)s.", "Support for those using and running matrix-appservice-irc": "Tuki niille jotka käyttävät ja ajavat matrix-appservice-irc", "Building services on Matrix": "Palveluiden rakentaminen Matrixin avulla", "Support for those using the Matrix spec": "Tuki Matrix-spesifikaation käyttäjille", @@ -171,55 +27,26 @@ "Support for those using, running and writing other bridges": "Tuki niille jotka käyttävät, ajavat ja ohjelmoivat muita siltoja", "Dev chat for the Riot/Web dev team": "Kehittäjäkeskustelu Riot/Web kehitystiimille", "Dev chat for the Dendrite dev team": "Kehittäjäkeskustelu Dendrite kehitystiimille", - "Co-ordination for Riot/Web translators": "Riot/Web kääntäjien koordinointi", "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Matrixissa on olemassa monia huoneita, jotka on linkitetty olemassa oleviin verkkoihin (Slack, IRC, Gitter yms.). Tutustu hakemistoon!", - "Failed to change password. Is your password correct?": "Salasanan muuttaminen epäonnistui. Onko salasanasi oikein?", - "You have successfully set a password!": "Olet onnistuneesti asettanut salasanan!", - "You can now return to your account after signing out, and sign in on other devices.": "Voit nyt palata tilillesi kirjauduttua ulos, sekä kirjautua muilla laitteilla.", - "Please set a password!": "Ole hyvä ja aseta salasana!", - "This will allow you to return to your account after signing out, and sign in on other devices.": "Tämä mahdollistaa sinut palamaan tilillesi uloskirjautumisen jälkeen sekä kirjautumaan muilla laitteilla.", - "You have successfully set a password and an email address!": "Olet onnistuneesti asettanut salasanan ja sähköpostiosoitteen!", - "Remember, you can always set an email address in user settings if you change your mind.": "Muista että voit aina asettaa sähköpostiosoitteen käyttäjäasetuksista jos muutat mielesi.", - "To return to your account in future you need to set a password": "Voidaksesi tulevaisuudessa palata tilillesi sinut pitää asettaa salasana", - "Couldn't load home page": "Kotisivun lataus epäonnistui", - "Bug report sent": "Virheraportti lähetetty", - "Failed to set Direct Message status of room": "Huoneen suoran viestittelyn tilan asettaminen epäonnistui", - "(HTTP status %(httpStatus)s)": "(HTTP tila %(httpStatus)s)", - "Notify for all other messages/rooms": "Ilmoita kaikista muista viesteistä/huoneista", - "powered by Matrix": "Matrix", + "powered by Matrix": "moottorina Matrix", "Riot is not supported on mobile web. Install the app?": "Riot ei tue laitettasi. Asenna mobiilisovellus?", - "Thank you!": "Kiitos!", "Design and implementation of E2E in Matrix": "Matrix päästä-päähän salauksen suunnittelu ja implementointi", "Contributing code to Matrix and Riot": "Osallistu kehitystyöhön", - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s %(browserName)s %(osName)s", - "There are advanced notifications which are not shown here": "On kehittyneitä ilmoituksia joita ei näytetä tässä", - "Decentralised, encrypted chat & collaboration powered by [matrix]": "Salattua ja vikasietoista viestintää Matrix -teknologialla", - "Back": "Takaisin", - "Developer Tools": "Kehitystila", - "Failed to send custom event.": "Kustomoidun tapahtuman lähettäminen epäonnistui.", - "Filter results": "Suodata", - "Send Custom Event": "Lähetä kustomoitu tapahtuma", - "Send Custom State Event": "Lähetä kustomoitu tilatapahtuma", - "Explore Room State": "Huoneen tila", - "You must specify an event type!": "Sinun on määritettävä tapahtuman tyyppi!", - "Event sent!": "Tapahtuma lähetetty!", - "Event Type": "Tapahtuman tyyppi", - "Event Content": "Tapahtuman sisältö", - "State Key": "Tila-avain", - "Show message in desktop notification": "Näytä viestit ilmoituskeskuksessa", + "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s, %(browserName)s, %(osName)s", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Hajautettua ja salattua viestintää Matrix-teknologialla", "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Voit käyttää edistyksellisiä asetuksia kirjautuaksesi muille Matrix palvelimille, määrittelemällä kotipalvelimen URL-osoitteen.
    Tämän avulla voit käyttää Riot:ia olemassa olevalla toisen Matrix palvelimen käyttäjätilillä.

    Voit myös asettaa valinnaisen identiteettipalvelimen, mutta et voi kutsua käyttäjiä sähköpostiosoitteella tai tulla kutsutuksi.", - "Appear Offline": "Offline-tila", - "Away": "Poissa", - "Send Account Data": "Lähetä tilin tiedot", - "Edit": "Muokkaa", - "Explore Account Data": "Tilitiedot", - "Toolbox": "Työkalut", - "Unpin Message": "Poista viestin kiinnitys", - "Pin Message": "Kiinnitä viesti", - "Please install Chrome or Firefox for the best experience.": "Asenna Chrome tai Firefox parhaan käyttökokemuksen saavuttamiseksi.", - "Safari and Opera work too.": "Safari ja Opera ovat myös tuettuja.", - "Register": "Rekisteröidy", - "Rooms": "Huoneet", - "Invite to this community": "Kutsu käyttäjiä", - "Add rooms to this community": "Lisää huoneita yhteisöön" + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Voit käyttää mukautettuja palvelinasetuksia kirjautuaksesi muihin Matrix-palvelimiin. Tämä mahdollistaa Riotin käyttämisen toisella kotipalvelimella olevalla Matrix-tilillä.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Voit myös määrittää toisen identiteettipalvelimen, mutta et voi kutsua muita käyttäjiä sähköpostin perusteella tai saada itse kutsua sähköpostin perusteella.", + "Sign In": "Kirjaudu", + "Create Account": "Luo tili", + "Need help?": "Tarvitsetko apua?", + "Explore rooms": "Selaa huoneita", + "Room Directory": "Huoneluettelo", + "Unexpected error preparing the app. See console for details.": "Odottamaton virhe sovellusta valmisteltaessa. Katso konsolista lisätietoja.", + "Your Riot is misconfigured": "Riotin asetukset ovat pielessä", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Virheellinen asetus. Vain yhden seuraavista voi määrittää: default_server_config, default_server_name, tai default_hs_url.", + "Invalid configuration: no default server specified.": "Virheellinen asetus: oletuspalvelinta ei ole määritetty.", + "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Riot-asetuksissasi on virheellistä JSONia. Korjaa ongelma ja lataa sivu uudelleen.", + "The message from the parser is: %(message)s": "Viesti jäsentimeltä: %(message)s", + "Invalid JSON": "Virheellinen JSON" } diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index 1e7d4b8273..1006ec99b7 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -1,161 +1,14 @@ { - "Add an email address above to configure email notifications": "Ajouter une adresse e-mail pour la configuration des notifications par e-mail", - "All messages": "Tous les messages", - "All messages (noisy)": "Tous les messages (fort)", - "All notifications are currently disabled for all targets.": "Toutes les notifications sont désactivées pour tous les appareils.", - "An error occurred whilst saving your email notification preferences.": "Une erreur est survenue lors de la sauvegarde de vos préférences de notification par e-mail.", - "Cancel Sending": "Annuler l'envoi", - "Can't update user notification settings": "Impossible de mettre à jour les paramètres de notification de l'utilisateur", - "Close": "Fermer", - "Couldn't find a matching Matrix room": "Impossible de trouver un salon Matrix correspondant", "Custom Server Options": "Options de serveur personnalisées", - "delete the alias.": "supprimer l'alias.", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Supprimer l'alias %(alias)s du salon et supprimer %(name)s du répertoire ?", - "Direct Chat": "Discussion directe", - "Directory": "Répertoire", "Dismiss": "Ignorer", - "Download this file": "Télécharger ce fichier", - "Enable audible notifications in web client": "Activer les notifications sonores pour le client web", - "Enable desktop notifications": "Activer les notifications de bureau", - "Enable email notifications": "Activer les notifications par e-mail", - "Enable notifications for this account": "Activer les notifications pour ce compte", - "Enable them now": "Les activer maintenant", - "Enter keywords separated by a comma:": "Entrez les mots-clés séparés par une virgule :", - "Error": "Erreur", - "Error saving email notification preferences": "Erreur lors de la sauvegarde des préférences de notification par e-mail", - "#example": "#exemple", - "Failed to add tag %(tagName)s to room": "Échec lors de l'ajout de l’étiquette %(tagName)s au salon", - "Failed to change settings": "Échec de la mise à jour des paramètres", - "Failed to forget room %(errCode)s": "Échec lors de l'oubli du salon %(errCode)s", - "Failed to update keywords": "Échec dans la mise à jour des mots-clés", - "Failed to get protocol list from Home Server": "Échec lors de la récupération de la liste sur le serveur", - "Failed to get public room list": "Échec lors de la récupération de la liste des salons publics", - "Failed to remove tag %(tagName)s from room": "Échec dans la suppression de l’étiquette %(tagName)s du salon", - "Failed to set direct chat tag": "Échec dans l'attribution d'une étiquette dans la discussion directe", - "Favourite": "Favoris", - "Operation failed": "L'opération a échoué", "powered by Matrix": "propulsé par Matrix", - "Quote": "Citer", - "Reject": "Rejeter", - "Remove %(name)s from the directory?": "Supprimer %(name)s du répertoire ?", - "Remove": "Supprimer", - "Resend": "Renvoyer", - "unknown error code": "Code erreur inconnu", - "View Source": "Voir la source", - "You cannot delete this image. (%(code)s)": "Vous ne pouvez pas supprimer cette image. (%(code)s)", - "You cannot delete this message. (%(code)s)": "Vous ne pouvez pas supprimer ce message. (%(code)s)", - "You are not receiving desktop notifications": "Vous ne recevez pas les notifications sur votre bureau", - "Sunday": "Dimanche", - "Monday": "Lundi", - "Tuesday": "Mardi", - "Wednesday": "Mercredi", - "Thursday": "Jeudi", - "Friday": "Vendredi", - "Saturday": "Samedi", - "Today": "Aujourd'hui", - "Yesterday": "Hier", - "Call invitation": "Appel entrant", - "Failed to set Direct Message status of room": "Échec du réglage de l'état du salon en Discussion directe", - "Fetching third party location failed": "Échec de la récupération de la localisation tierce", - "Files": "Fichiers", - "Filter room names": "Filtrer les salons par nom", - "Forget": "Oublier", - "Invite to this room": "Inviter dans ce salon", - "Keywords": "Mots-clés", - "Leave": "Quitter", - "Low Priority": "Priorité basse", - "Members": "Membres", - "Mentions only": "Seulement les mentions", - "Messages containing my display name": "Messages contenant mon nom affiché", - "Messages containing my user name": "Message contenant mon nom d'utilisateur", - "Messages in group chats": "Messages dans les discussions de groupe", - "Messages in one-to-one chats": "Messages dans les discussions directes", - "Messages sent by bot": "Messages envoyés par des robots", - "more": "plus", - "Mute": "Mettre en sourdine", - "No rooms to show": "Aucun salon à afficher", - "Noisy": "Bruyant", - "Notification targets": "Appareils recevant les notifications", - "Notifications": "Notifications", - "Notify for all other messages/rooms": "Me notifier pour tous les autres messages/salons", - "Notify me for anything else": "Me notifier pour tout le reste", - "Off": "Désactivé", - "On": "Activé", - "Permalink": "Permalien", - "remove %(name)s from the directory.": "supprimer %(name)s du répertoire.", - "Remove from Directory": "Supprimer du répertoire", - "Riot does not know how to join a room on this network": "Riot ne peut pas joindre un salon sur ce réseau", - "Room not found": "Salon non trouvé", - "Search for a room": "Rechercher un salon", - "Source URL": "URL de la source", - "The Home Server may be too old to support third party networks": "Le serveur d'accueil semble trop ancien pour supporter des réseaux tiers", - "There are advanced notifications which are not shown here": "Il existe une configuration avancée des notifications qui ne peut être affichée ici", - "The server may be unavailable or overloaded": "Le serveur est indisponible ou surchargé", - "Unable to fetch notification target list": "Impossible de récupérer la liste des appareils recevant les notifications", - "Unable to join network": "Impossible de rejoindre le réseau", - "Unable to look up room ID from server": "Impossible de récupérer l'ID du salon sur le serveur", - "Unhide Preview": "Dévoiler l'aperçu", - "Unnamed room": "Salon sans nom", - "Uploaded on %(date)s by %(user)s": "Téléchargé le %(date)s par %(user)s", - "View Decrypted Source": "Voir la source déchiffrée", - "When I'm invited to a room": "Quand je suis invité dans un salon", - "World readable": "Lisible publiquement", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Vous les avez probablement configurées dans un autre client que Riot. Vous ne pouvez pas les configurer dans Riot mais elles s'appliquent quand même", - "Guests can join": "Les invités peuvent rejoindre le salon", - "Advanced notification settings": "Paramètres de notification avancés", - "customServer_text": "Vous pouvez utiliser les options de serveur personnalisées pour vous connecter à d'autres serveurs Matrix, en spécifiant une adresse de serveur d'accueil différente.
    Cela permet d'utiliser Riot avec un compte Matrix existant sur un serveur d'accueil différent.

    Vous pouvez aussi indiquer un serveur d'identité personnalisé mais vous ne pourrez pas inviter d'utilisateurs par e-mail ou être invité par e-mail.", - "Notifications on the following keywords follow rules which can’t be displayed here:": "Les notifications pour les mots-clés suivant répondent à des critères qui ne peuvent pas être affichés ici :", - "Collapse panel": "Cacher le panneau", - "Expand panel": "Dévoiler le panneau", - "I understand the risks and wish to continue": "Je comprends les risques et souhaite continuer", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot utilise de nombreuses fonctionnalités avancées du navigateur, certaines ne sont pas disponibles ou expérimentales dans votre navigateur actuel.", - "Sorry, your browser is not able to run Riot.": "Désolé, Riot n'est pas supporté par votre navigateur.", - "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Depuis votre navigateur actuel, le visuel et le ressenti de l'application pourraient être complètement erronés, et certaines fonctionnalités pourraient ne pas être supportées. Vous pouvez continuer malgré tout, mais vous n'aurez aucune aide si vous rencontrez des problèmes !", - "Please install Chrome or Firefox for the best experience.": "Veuillez installer Chrome ou Firefox pour une expérience optimale.", - "Safari and Opera work too.": "Safari et Opera fonctionnent aussi.", - "Messages containing keywords": "Messages contenant des mots-clés", "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s dans %(browserName)s sous %(osName)s", - "A new version of Riot is available.": "Une nouvelle version de Riot est disponible.", - "All Rooms": "Tous les salons", - "Cancel": "Annuler", - "Changelog": "Journal des modifications", - "Collecting app version information": "Récupération des informations de version de l’application", - "Collecting logs": "Récupération des journaux", - "Describe your problem here.": "Décrivez votre problème ici.", - "Failed to send report: ": "Échec de l’envoi du rapport : ", - "Forward Message": "Transférer le message", - "Hide panel": "Cacher le panneau", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Afin de diagnostiquer les problèmes, les journaux de ce client vont être envoyés avec ce rapport d’erreur. Si vous préférez n'envoyer que le texte ci-dessus, décochez la case :", - "Loading bug report module": "Chargement du module de rapport d’erreur", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Veuillez décrire l'erreur. Qu'avez-vous fait ? Quel était le comportement attendu ? Que s'est-il réellement passé ?", - "Please describe the bug and/or send logs.": "Veuillez décrire le problème et/ou envoyer les journaux.", - "Report a bug": "Signaler un problème", "Riot Desktop on %(platformName)s": "Version bureau de Riot sur %(platformName)s", - "Riot is not supported on mobile web. Install the app?": "Riot n’est pas supporté sur les appareils mobiles. Installer l’application ?", - "Search": "Rechercher", - "Search…": "Rechercher…", - "Send": "Envoyer", - "Send logs": "Envoyer les journaux", - "This Room": "Ce salon", - "Unavailable": "Indisponible", + "Riot is not supported on mobile web. Install the app?": "Riot n’est pas disponible en version web mobile. Installer l’application ?", "Unknown device": "Appareil inconnu", - "Update": "Mettre à jour", - "Uploading report": "Envoi du rapport", - "What's New": "Nouveautés", - "What's new?": "Nouveautés ?", - "Waiting for response from server": "En attente d’une réponse du serveur", - "You need to be using HTTPS to place a screen-sharing call.": "Vous devez utiliser HTTPS pour effectuer un appel en partage d’écran.", - "OK": "OK", - "Failed to change password. Is your password correct?": "Échec du changement de mot de passe. Votre mot de passe est-il correct ?", - "You have successfully set a password!": "Vous avez défini un mot de passe avec succès !", - "Continue": "Continuer", - "Please set a password!": "Veuillez définir un mot de passe !", - "You can now return to your account after signing out, and sign in on other devices.": "Vous pouvez maintenant revenir sur votre compte après vous être déconnecté, et vous identifier sur d'autres appareils.", - "This will allow you to return to your account after signing out, and sign in on other devices.": "Cela vous permettra de retourner sur votre compte après vous être déconnecté, et de vous identifier sur d'autres appareils.", + "You need to be using HTTPS to place a screen-sharing call.": "Vous devez utiliser HTTPS pour effectuer un appel avec partage d’écran.", "Welcome to Riot.im": "Bienvenue sur Riot.im", - "(HTTP status %(httpStatus)s)": "(état HTTP %(httpStatus)s)", - "Login": "Connexion", - "Chat with Riot Bot": "Discussion avec Riot Bot", + "Chat with Riot Bot": "Discuter avec le bot Riot", "Search the room directory": "Rechercher dans le répertoire de salons", "Get started with some tips from Riot Bot!": "Démarrer avec quelques astuces de Riot Bot !", "Riot/Android & matrix-android-sdk chat": "Discussions sur Riot/Android & matrix-android-sdk", @@ -180,47 +33,22 @@ "Contributing code to Matrix and Riot": "Contribuer du code à Matrix et Riot", "Dev chat for the Riot/Web dev team": "Discussions de l'équipe de développeurs de Riot/Web", "Dev chat for the Dendrite dev team": "Discussion pour l'équipe de développeurs de Dendrite", - "Co-ordination for Riot/Web translators": "Coordination des traducteurs de Riot/Web", "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "De nombreux salons existent déjà dans Matrix, liés à des réseaux existants (Slack, IRC, Gitter etc) ou indépendants. Jetez un œil au répertoire !", - "You have successfully set a password and an email address!": "Vous avez défini un mot de passe et une adresse e-mail avec succès !", - "Remember, you can always set an email address in user settings if you change your mind.": "Souvenez-vous que vous pourrez toujours définir une adresse e-mail dans les paramètres de l'utilisateur si vous changez d’avis.", - "Warning": "Attention", - "Checking for an update...": "Recherche de mise à jour...", - "Error encountered (%(errorDetail)s).": "Erreur rencontrée (%(errorDetail)s).", - "No update available.": "Aucune mise à jour disponible.", - "Downloading update...": "Mise à jour en cours de téléchargement...", - "To return to your account in future you need to set a password": "Pour pouvoir retrouver votre compte dans le futur, vous devez définir un mot de passe", - "Set Password": "Définir un mot de passe", - "Couldn't load home page": "Impossible de charger la page d'accueil", - "Bug report sent": "Rapport d'erreur envoyé", - "Thank you!": "Merci !", - "Back": "Retour", - "Developer Tools": "Outils de développement", - "Filter results": "Filtrer les résultats", - "You must specify an event type!": "Vous devez spécifier un type d'événement !", - "Event sent!": "Événement envoyé !", - "Event Type": "Type d'événement", - "Event Content": "Contenu de l'événement", - "Failed to send custom event.": "Échec de l'envoi de l'événement personnalisé.", - "Send Custom Event": "Envoyer l'événement personnalisé", - "Send Custom State Event": "Envoyer l'événement d'état personnalisé", - "Explore Room State": "Parcourir l'état du salon", - "State Key": "Clé d'état", - "Unpin Message": "Dépingler le message", - "Add rooms to this community": "Ajouter des salons à cette communauté", - "Show message in desktop notification": "Afficher le message dans les notifications de bureau", "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Vous pouvez utiliser les options de serveur personnalisé pour vous connecter à d'autres serveurs Matrix en précisant un serveur d'accueil différent.
    Cela vous permet d'utiliser Riot avec un compte Matrix existant sur un autre serveur d'accueil.

    Vous pouvez aussi renseigner un serveur d'identité personnalisé mais vous ne pourrez pas inviter d'utilisateurs avec leur adresse e-mail, ou être invité avec votre adresse e-mail.", - "Edit": "Modifier", - "Pin Message": "Épingler le message", - "Register": "S'inscrire", - "Rooms": "Salons", - "Invite to this community": "Inviter à cette communauté", - "Toolbox": "Boîte à outils", - "Send Account Data": "Envoyer les données du compte", - "Explore Account Data": "Explorer les données du compte", - "Appear Offline": "Apparaître Hors ligne", - "Away": "Absent", - "Please install Chrome or Firefox for the best experience.": "Veuillez installer Chrome ou Firefox pour une expérience optimale.", - "Safari and Opera work too.": "Safari et Opera fonctionnent également.", - "Reply": "Répondre" + "Co-ordination for Riot translators": "Coordination des traducteurs de Riot", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Vous pouvez utiliser les options de serveur personnalisé pour vous connecter à d'autres serveurs Matrix en renseignant l'URL d'un autre serveur d'accueil. Cela vous permet d'utiliser Riot avec un compte Matrix existant sur un serveur d'accueil différent.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Vous pouvez aussi renseigner un serveur d'identité personnalisé, mais vous ne pourrez pas inviter d'utilisateurs avec leur adresse e-mail, ou être vous-même invité avec votre adresse e-mail.", + "Sign In": "Se connecter", + "Create Account": "Créer un compte", + "Need help?": "Besoin d'aide ?", + "Explore rooms": "Explorer les salons", + "Room Directory": "Répertoire de salons", + "Unexpected error preparing the app. See console for details.": "Une erreur inattendue est survenue pendant la préparation de l’application. Consultez la console pour avoir des détails.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuration invalide : il ne faut spécifier qu’un des trois champs entre default_server_config, default_server_name et default_hs_url.", + "Invalid configuration: no default server specified.": "Configuration invalide : aucun serveur par défaut spécifié.", + "This installation of Riot seems to have an invalid server configuration. If you are the administrator, please correct the error below": "Cette installation de Riot semble avoir une configuration de serveur non valide. Si vous êtes l’administrateur, corrigez l’erreur ci-dessous", + "Your Riot is misconfigured": "Votre Riot est mal configuré", + "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Votre configuration de Riot contient du JSON non valide. Corrigez ce problème et rechargez la page.", + "The message from the parser is: %(message)s": "Le message de l’analyseur est : %(message)s", + "Invalid JSON": "JSON non valide" } diff --git a/src/i18n/strings/ga.json b/src/i18n/strings/ga.json new file mode 100644 index 0000000000..3b613da88a --- /dev/null +++ b/src/i18n/strings/ga.json @@ -0,0 +1,21 @@ +{ + "Riot Desktop on %(platformName)s": "Leagan gnáthríomhaire Riot ar %(platformName)s", + "Unknown device": "Gléas nár aithníodh", + "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s trí %(browserName)s ar %(osName)s", + "You need to be using HTTPS to place a screen-sharing call.": "Ní mór HTTPS a úsáid chun glaoch comhroinnt scáileáin a chur.", + "powered by Matrix": "cumhachtaithe ag Matrix", + "Custom Server Options": "Socruithe do fhreastalaí saincheaptha", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Is féidir na socruithe do fhreastalaí saincheaptha a úsáid chun síniú isteach le freastalaithe Matrix eile ach URL freastalaí ar leith a shainiú. Cuirfidh sé seo ar do chumas Riot a úsáid le cuntas Matrix atá ar taifead ag an bhfreastalaí eile sin.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Freisin is féidir freastalaí aitheantais saincheaptha a úsáid, ach sa chás sin ní bheidh tú in ann cuireadh a thabhairt do dhaoine trí sheoladh ríomhphoist a sholáthar, ná glacadh le cuireadh trí ríomhphoist ach an oiread.", + "Dismiss": "Cuir uait", + "Welcome to Riot.im": "Fáilte romhat chuig Riot.im", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Meán comhrá agus comhoibriú, díláraithe agus criptithe, cumhachtaithe ag [matrix]", + "Sign In": "Sínigh Isteach", + "Create Account": "Déan cuntas a chruthú", + "Need help?": "An bhfuil cabhair uait?", + "Chat with Riot Bot": "Labhair le Riot Bot", + "Explore rooms": "Breathnaigh thart ar na seomraí", + "Room Directory": "Eolaire na Seomraí", + "Search the room directory": "Cuardaigh eolaire na seomraí", + "Get started with some tips from Riot Bot!": "Tosaigh le roinnt nod ó Riot Bot!" +} diff --git a/src/i18n/strings/gl.json b/src/i18n/strings/gl.json index 63c24d6068..37e9c8887b 100644 --- a/src/i18n/strings/gl.json +++ b/src/i18n/strings/gl.json @@ -1,226 +1,46 @@ { "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s vía %(browserName)s en %(osName)s", - "Safari and Opera work too.": "Safari e Opera tamén serven.", - "A new version of Riot is available.": "Está dispoñible unha nova versión de Riot.", - "Add an email address above to configure email notifications": "Engada un enderezo de correo electrónico para configurar as notificacións", - "Advanced notification settings": "Axustes avanzados de notificación", - "All messages": "Todas as mensaxes", - "All messages (noisy)": "Todas as mensaxes (alto)", - "All Rooms": "Todas as Salas", - "All notifications are currently disabled for all targets.": "Todas as notificacións están deshabilitadas para todos os destinos.", - "An error occurred whilst saving your email notification preferences.": "Algo fallou mentras se gardaban as súas preferencias de notificaicón.", - "Back": "Atrás", - "Bug report sent": "Enviado o informe de fallo", - "Call invitation": "Convite de chamada", - "Cancel": "Cancelar", - "Cancel Sending": "Cancelar o envío", - "Can't update user notification settings": "Non se poden actualizar os axutes de notificación", - "Changelog": "Rexistro de cambios", - "Close": "Pechar", - "Collapse panel": "Agochar panel", - "Collecting app version information": "Obtendo información sobre a versión da app", - "Collecting logs": "Obtendo rexistros", - "Couldn't find a matching Matrix room": "Non coincide con ningunha sala de Matrix", "Custom Server Options": "Opcións personalizadas do servidor", - "customServer_text": "Pode utilizar os axustes do servidor personalizado para conectarse a outros servidores Matrix indicando un URL de Inicio do servidor.
    Esto permítelle utilizar Riot con unha conta existente de Matrix nun servidor diferente.

    Tamén pode establecer un servidor personalizado de identidade mais non poderá invitar a usuarias a través de enderezos de correo ou ser vostede invitada do mesmo xeito.", - "delete the alias.": "borrar alcume.", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Eliminar o alcume da sala %(alias)s e borrar %(name)s do directorio?", - "Describe your problem here.": "Describa aquí o seu problema.", - "Developer Tools": "Ferramentas para desenvolver", - "Direct Chat": "Chat directo", - "Directory": "Directorio", "Dismiss": "Rexeitar", - "Download this file": "Descargue este ficheiro", - "Enable audible notifications in web client": "Habilitar notificacións audibles no cliente web", - "Enable desktop notifications": "Habilitar notificacións de escritorio", - "Enable email notifications": "Habilitar notificacións de correo", - "Enable notifications for this account": "Habilitar notificacións para esta conta", - "Enable them now": "Habilitalas agora", - "Enter keywords separated by a comma:": "Introduza palabras chave separadas por vírgulas:", - "Error": "Fallo", - "Error saving email notification preferences": "Fallo ao cargar os axustes de notificacións", - "#example": "#exemplo", - "Expand panel": "Expandir panel", - "Failed to add tag %(tagName)s to room": "Fallou ao engadir a etiqueta %(tagName)s a sala", - "Failed to change settings": "Fallo ao cambiar os axustes", - "Failed to forget room %(errCode)s": "Fallo ao esquecer sala %(errCode)s", - "Failed to update keywords": "Fallo ao actualizar as palabras chave", - "Failed to get protocol list from Home Server": "Fallo ao obter a lista de protocolo desde o servidor", - "Failed to get public room list": "Fallo ao obter a lista de salas públicas", - "Failed to remove tag %(tagName)s from room": "Fallo ao eliminar etiqueta %(tagName)s da sala", - "Failed to send custom event.": "Fallo ao enviar evento personalizado.", - "Failed to send report: ": "Fallo no envío do informe: ", - "Failed to set direct chat tag": "Fallo ao establecer etiqueta do chat directo", - "Failed to set Direct Message status of room": "Fallo ao establecer o estado Mensaxe Directa da sala", - "Favourite": "Favorita", - "Fetching third party location failed": "Fallo ao obter a localización de terceiros", - "Files": "Ficheiros", - "Filter results": "Filtrar resultados", - "Filter room names": "Filtrar nomes de sala", - "Forget": "Esquecer", - "Forward Message": "Reenviar mensaxe", - "Guests can join": "Convidados pódense unir", - "Hide panel": "Agochar panel", - "(HTTP status %(httpStatus)s)": "(Estado HTTP %(httpStatus)s)", - "I understand the risks and wish to continue": "Entendos os riscos e desexo continuar", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Para poder diagnosticar o problema, os rexistros de este cliente enviaranse neste informe de fallo. Si prefire enviar só o texto superior, desmarque:", - "Invite to this room": "Convidar a esta sala", - "Keywords": "Palabras chave", - "Leave": "Saír", - "Login": "Conectar", - "Loading bug report module": "Cargando o módulo de informe de fallos", - "Low Priority": "Baixa prioridade", - "Members": "Membresía", - "Mentions only": "Só mencións", - "Messages containing my display name": "Mensaxes que conteñen o meu nome público", - "Messages containing keywords": "Mensaxes que conteñen palabras chave", - "Messages containing my user name": "Mensaxes que conteñen o meu nome de usuaria", - "Messages in group chats": "Mensaxes en grupos de chat", - "Messages in one-to-one chats": "Mensaxes en chats un-a-un", - "Messages sent by bot": "Mensaxes enviadas por bot", - "more": "máis", - "Mute": "Acalar", - "No rooms to show": "Sen salas que mostrar", - "Noisy": "Ruidoso", - "Notification targets": "Obxetivos das notificacións", - "Notifications": "Notificacións", - "Notifications on the following keywords follow rules which can’t be displayed here:": "Notificacións das reglas de seguimento das seguintes palabras que non se mostrarán aquí:", - "Notify for all other messages/rooms": "Notificar para todas as outras mensaxes/salas", - "Notify me for anything else": "Notificarme todo o demáis", - "Off": "Off", - "On": "On", - "Operation failed": "Fallou a operación", - "Permalink": "Ligazón permanente", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Por favor describa a incidencia. Que estaba a facer? Que tiña que pasar? Que aconteceu en realidade?", - "Please describe the bug and/or send logs.": "Por favor describa a incidencia e/ou envíe o informe.", - "Please install Chrome or Firefox for the best experience.": "Por favor instale Chrome ou Firefox para ter a mellor experiencia de uso.", "powered by Matrix": "funciona grazas a Matrix", - "Quote": "Cita", - "Reject": "Rexeitar", - "Remove %(name)s from the directory?": "Eliminar %(name)s do directorio?", - "Remove": "Eliminar", - "remove %(name)s from the directory.": "eliminar %(name)s do directorio.", - "Remove from Directory": "Eliminar do directorio", - "Report a bug": "Informar de un fallo", - "Resend": "Voltar a enviar", "Riot Desktop on %(platformName)s": "Riot Desktop en %(platformName)s", - "Riot does not know how to join a room on this network": "Riot non sabe cómo conectar con unha sala en esta rede", - "Riot is not supported on mobile web. Install the app?": "Riot no se pode executar na web móbil. Instalar a app?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot utiliza características avanzadas do navegador, algunhas das cales non están dispoñibles ou son experimentales no seu navegador actual.", - "Room not found": "Non se atopou a sala", - "Search": "Busca", - "Search…": "Buscar…", - "Search for a room": "Buscar unha sala", - "Send": "Enviar", - "Send logs": "Enviar informes", - "Send Custom Event": "Enviar evento personalizado", - "Send Custom State Event": "Enviar evento de estado personalizado", - "Explore Room State": "Explorar estado da sala", - "Source URL": "URL fonte", - "Sorry, your browser is not able to run Riot.": "Desculpe, o seu navegador non pode executar Riot.", - "The Home Server may be too old to support third party networks": "O servidor de inicio podería ser demasiando antigo como para aceptar redes de terceiros", - "There are advanced notifications which are not shown here": "Existen notificacións avanzadas que non se mostran aquí", - "The server may be unavailable or overloaded": "O servidor podería non estar dispoñible ou sobrecargado", - "This Room": "Esta sala", - "Unable to fetch notification target list": "Non se puido procesar a lista de obxetivo de notificacións", - "Unable to join network": "Non se puido conectar a rede", - "Unable to look up room ID from server": "Non se puido atopar o ID da sala do servidor", - "Unavailable": "Non dispoñible", - "Unhide Preview": "Desagochar a vista previsa", + "Riot is not supported on mobile web. Install the app?": "Riot non se pode executar na web do móbil. Instalar a aplicación?", "Unknown device": "Dispositivo descoñecido", - "unknown error code": "código de fallo descoñecido", - "Unnamed room": "Sala sen nome", - "Update": "Actualizar", - "Uploaded on %(date)s by %(user)s": "Subido a %(date)s por %(user)s", - "Uploading report": "Informe da subida", - "View Decrypted Source": "Ver a fonte descifrada", - "View Source": "Ver fonte", - "What's New": "Qué hai de novo", - "What's new?": "Qué hai de novo?", - "Waiting for response from server": "Agardando pola resposta do servidor", - "When I'm invited to a room": "Cando son convidado a unha sala", - "World readable": "Visible por todos", - "You cannot delete this image. (%(code)s)": "Non pode eliminar esta imaxe. (%(code)s)", - "You cannot delete this message. (%(code)s)": "Non pode eliminar esta mensaxe. (%(code)s)", - "You are not receiving desktop notifications": "Non está a recibir notificacións de escritorio", - "You must specify an event type!": "Debe indicar un tipo de evento!", - "Thank you!": "Grazas!", - "Sunday": "Domingo", - "Monday": "Luns", - "Tuesday": "Martes", - "Wednesday": "Mércores", - "Thursday": "Xoves", - "Friday": "Venres", - "Saturday": "Sábado", - "Today": "Hoxe", - "Yesterday": "Onte", - "OK": "OK", - "Warning": "Aviso", - "Checking for an update...": "Comprobando as actualizacións...", - "Error encountered (%(errorDetail)s).": "Houbo un erro (%(errorDetail)s).", - "Event sent!": "Evento enviado!", - "Event Type": "Tipo de evento", - "Event Content": "Contido do evento", - "State Key": "Chave do estado", - "No update available.": "Sen actualizacións.", - "Downloading update...": "Descargando actualización...", "You need to be using HTTPS to place a screen-sharing call.": "Precisa utilizar HTTPS para establecer unha chamada de pantalla compartida.", - "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Co seu navegador actual a apareciencia e uso do aplicativo poderían estar totalmente falseadas, e algunhas características poderían non funcionar. Se quere pode continuar, pero debe ser consciente de que poden haber fallos!", - "Welcome to Riot.im": "Benvida a Riot.im", - "Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat & colaboración descentralizados e cifrados grazas a [matrix]", + "Welcome to Riot.im": "Benvida/o a Riot.im", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Conversas e colaboración descentralizada e cifrada grazas a [matrix]", "Search the room directory": "Buscar no directorio de salas", - "Chat with Riot Bot": "Chat co Bot de Riot", - "Get started with some tips from Riot Bot!": "Iníciese con algúns consellos do Bot de Riot!", + "Chat with Riot Bot": "Conversa co bot de Riot", + "Get started with some tips from Riot Bot!": "Iníciese con algúns consellos do bot de Riot!", "General discussion about Matrix and Riot": "Discusión xeral sobre Matrix e Riot", - "Discussion of all things Matrix!": "Conversa sobre to o relativo a Matrix!", - "Riot/Web & Desktop chat": "Riot/Web & chat de Escritorio", - "Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & chat matrix-ios-sdk", + "Discussion of all things Matrix!": "Conversa sobre todo o relativo a Matrix!", + "Riot/Web & Desktop chat": "Riot/Web & sala de conversas para escritorio", + "Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & sala de conversas matrix-ios-sdk", "Matrix technical discussions": "Discusións técnicas sobre Matrix", - "Running Matrix services": "Servizos correndo sobre Matrix", + "Running Matrix services": "Servizos que empregan Matrix", "Community-run support for Synapse": "Axuda da comunidade para Synapse", - "Admin support for Dendrite": "Axuda administrador para Dendrite", + "Admin support for Dendrite": "Axuda de administrador para Dendrite", "Announcements about Synapse releases": "Anuncios sobre lanzamentos de Synapse", "Support for those using and running matrix-appservice-irc": "Axuda para quen usa matrix-appservice-irc", "Building services on Matrix": "Deseñando servizos sobre Matrix", - "Support for those using the Matrix spec": "Axuda para quen usa a especificación Matrix", + "Support for those using the Matrix spec": "Axuda para quen usa a especificación de Matrix", "Design and implementation of E2E in Matrix": "Deseño e implementación de E2E en Matrix", "Implementing VR services with Matrix": "Implementando servizos de RV con Matrix", "Implementing VoIP services with Matrix": "Implementación de servizos VoIP con Matrix", - "Discussion of the Identity Service API": "Conversa sobre a Identity Service API", - "Support for those using, running and writing other bridges": "Axuda para que utiliza, executa e desenvolve outras pontes", - "Contributing code to Matrix and Riot": "Contribuíndo ao código en Matrix e Riot", - "Dev chat for the Riot/Web dev team": "Chat para o equipo de desenvolvemento do Riot/Web", - "Dev chat for the Dendrite dev team": "Chat para o equipo de desenvolvemento de Dendrite", - "Co-ordination for Riot/Web translators": "Coordinación para tradutores de Riot/Web", - "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Xa existen multitude de salas en Matrix, ligadas a redes existentes (Slack, IRC, Gitter etc) ou independentes. Busque no directorio!", - "Failed to change password. Is your password correct?": "Fallo ao cambiar o contrasinal. É correcto o contrasinal?", - "You have successfully set a password!": "Mudou con éxito o seu contrasinal!", - "You can now return to your account after signing out, and sign in on other devices.": "Pode voltar a súa contra tras desconectarse, e conectarse en outros dispositivos.", - "Continue": "Continuar", - "Please set a password!": "Por favor estableza un contrasinal!", - "This will allow you to return to your account after signing out, and sign in on other devices.": "Esto permitiralle voltar a súa conta tras desconectarse, e conectarse en outros dispositivos.", - "You have successfully set a password and an email address!": "Estableceu correctamente un contrasinal e enderezo de correo!", - "Remember, you can always set an email address in user settings if you change your mind.": "Lembre, sempre poderá poñer un enderezo de correo nos axustes de usuario si cambia de idea.", - "To return to your account in future you need to set a password": "Para voltar a súa conta no futuro debe establecer un contrasinal>/u>", - "Set Password": "Establecer contrasinal", - "Couldn't load home page": "Non se cargou a páxina de inicio", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Pode que os configurase nun cliente diferente de Riot. Non pode establecelos desde Riot pero aínda así aplicaranse", - "Riot/Android & matrix-android-sdk chat": "Chat para Riot/Android & matrix-android-sdk", - "Show message in desktop notification": "Mostrar mensaxe nas notificacións de escritorio", - "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Vostede pode utilizar as opcións de servidor personalizado para conectarse a outros servidores Matrix indicando o enderezo URL do Servidor.
    Esto permítelle utilizar Riot con unha conta Matrix existente en outro servidor.

    Tamén pode indicar un servidor de identidade pero non poderá convidar a usarias polo seu enderezo de correo electrónico, o ser convidada vostede por correo electrónico.", - "Toolbox": "Ferramentas", - "Edit": "Editar", - "Send Account Data": "Enviar datos da conta", - "Explore Account Data": "Explorar datos da conta", - "Unpin Message": "Desfixar mensaxe", - "Pin Message": "Fixar mensaxe", - "Register": "Rexistar", - "Rooms": "Salas", - "Invite to this community": "Convidar a esta comunidade", - "Add rooms to this community": "Engadir salas a esta comunidade", - "Appear Offline": "Aparecer fora de liña", - "Away": "Fóra", - "Please install Chrome or Firefox for the best experience.": "Por favor instale Chrome ou Firefox para a mellor experiencia de usuaria.", - "Safari and Opera work too.": "Safari e Opera tamén funcionan.", - "Reply": "Resposta" + "Discussion of the Identity Service API": "Conversa sobre a API do servizo de identificación", + "Support for those using, running and writing other bridges": "Axuda para quen está a utilizar, executar ou desenvolver outras pontes", + "Contributing code to Matrix and Riot": "Contribuíndo ao código de Matrix e Riot", + "Dev chat for the Riot/Web dev team": "Sala de conversa para o equipo de desenvolvemento de Riot/Web", + "Dev chat for the Dendrite dev team": "Sala de conversas para o equipo de desenvolvemento de Dendrite", + "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Xa existen multitude de salas en Matrix ben ligadas a redes existentes (Slack, IRC, Gitter etc) ou ben independentes. Busque no directorio!", + "Riot/Android & matrix-android-sdk chat": "Riot/Android & sala de conversas matrix-android-sdk", + "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Pode utilizar as opcións persoais de servidor para conectarse a outros servidores Matrix indicando o enderezo URL dese servidor.
    Isto permítelle utilizar Riot cunha conta Matrix existente en outro servidor.

    Tamén pode empregar un servidor personalizado de identidade mais nese caso nin se poderán convidar a outros usuarios empregando os correo electrónicos nin tampouco eles o poderán convidar a vostede por correo.", + "Co-ordination for Riot translators": "Coordinación para tradutora/es de Riot", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Podes usar as opcións de servidor personalizado para iniciar sesión en outros servidores Matrix especificando unha dirección diferente de servidor doméstico. Con esto podes usar Riot cunha conta Matrix existente noutro servidor doméstico.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Tamén podes fixar un servidor de identidade, pero non poderás invitar a usuarios polo enderezo de correo, e tampouco que te inviten.", + "Sign In": "Entrar", + "Create Account": "Crear conta", + "Need help?": "¿Precisas axuda?", + "Explore rooms": "Explorar salas", + "Room Directory": "Directorio de salas" } diff --git a/src/i18n/strings/he.json b/src/i18n/strings/he.json index 6026f2d9e6..101730f415 100644 --- a/src/i18n/strings/he.json +++ b/src/i18n/strings/he.json @@ -1,150 +1,13 @@ { - "A new version of Riot is available.": "יצאה גרסה חדשה של Riot.", - "Add an email address above to configure email notifications": "הוסף כתובת דואר אלקטורני למעלה בכדי להגדיר התראות", - "Advanced notification settings": "הגדרות מתקדמות להתראות", - "All messages": "כל ההודעות", - "All messages (noisy)": "כל ההודעות (צעקה)", - "All Rooms": "כל החדרים", - "All notifications are currently disabled for all targets.": "התראות מנוטרלות לכלל המערכת.", - "An error occurred whilst saving your email notification preferences.": "קרתה שגיאה בזמן שמירת הגדרות התראה באמצעות הדואר האלקטרוני.", - "Call invitation": "הזמנה לשיחה", - "Cancel": "ביטול", - "Cancel Sending": "ביטול שליחה", - "Can't update user notification settings": "לא ניתן לעדכן הגדרות התראה למשתמש", - "Changelog": "דו\"ח שינויים", - "Close": "סגור", - "Collapse panel": "סגור פאנל", - "Collecting app version information": "אוסף מידע על גרסת האפליקציה", - "Collecting logs": "אוסף לוגים", - "Couldn't find a matching Matrix room": "לא נמצא חדר כזה ב Matrix", "Custom Server Options": "הגדרות שרת מותאמות אישית", - "customServer_text": "אפשר להשתמש בהגדרות שרת מותאמות אישית בכדי להתחבר לשרתים אחרים באמצעות בחירת כתובת שרת בית שונה.
    זה יאפשר לך להשתמש ב Riot עם חשבון קיים ב Matrix אבל אל מול שרת בית שונה.

    כמו כן אפשר להגדיר זהות מותאמת אישית אבל אז לא תהיה אפשרות להזמין משתמשים באמצעות כתובת אימייל, או להזמין את עצמך באמצעות כתובת האימייל.", - "delete the alias.": "מחיקת כינוי.", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "מחק כינוי %(alias)s של החדר והסר את %(name)s מהרשימה?", - "Describe your problem here.": "תאר את הבעיה כאן.", - "Direct Chat": "שיחה ישירה", - "Directory": "ספרייה", "Dismiss": "שחרר", - "Download this file": "הורד את הקובץ", - "Enable audible notifications in web client": "אפשר התראות קוליות בדפדפן", - "Enable desktop notifications": "אפשר התראות בשולחן העבודה", - "Enable email notifications": "אפשר התראות באמצעות הדואר האלקטרוני", - "Enable notifications for this account": "אפשר התראות לחשבון זה", - "Enable them now": "אפשר אותם כעת", - "Enter keywords separated by a comma:": "הכנס מילים מופרדות באמצעות פסיק:", - "Error": "שגיאה", - "Error saving email notification preferences": "שגיאה בעת שמירת הגדרות התראה באמצעות הדואר האלקטרוני", - "#example": "#דוגמא", - "Expand panel": "הרחב פנאל", - "Failed to add tag %(tagName)s to room": "נכשל בעת הוספת תג %(tagName)s לחדר", - "Failed to change settings": "נכשל בעת שינוי הגדרות", - "Failed to forget room %(errCode)s": "נכשל בעת בקשה לשכוח חדר %(errCode)s", - "Failed to update keywords": "נכשל עדכון מילים", - "Failed to get protocol list from Home Server": "נכשל בעת נסיון קבלת רשימת פרוטוקולים משרת הבית", - "Failed to get public room list": "נכשלה קבלת רשימת חדרים ציבוריים", - "Failed to remove tag %(tagName)s from room": "נכשל בעת נסיון הסרת תג %(tagName)s מהחדר", - "Failed to send report: ": "נכשל בעת שליחת דו\"ח: ", - "Failed to set direct chat tag": "נכשל בעת סימון תג לשיחה ישירה", - "Failed to set Direct Message status of room": "נכשל בעת סימון סטטוס הודעה ישירה של החדר", - "Favourite": "מועדף", - "Fetching third party location failed": "נסיון להביא מיקום צד שלישי נכשל", - "Files": "קבצים", - "Filter room names": "מיין לפי שמות חדרים", - "Forget": "שכח", - "Forward Message": "העבר הודעה", - "Guests can join": "אורחים יכולים להצטרף", - "Hide panel": "הסתר פנאל", - "I understand the risks and wish to continue": "אני מבין את הסיכונים אבל מבקש להמשיך", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "בכדי לנתח את הבעיות, ישלח דוח עם פרטי הבעיה. אם ברצונך רק לשלוח את שנאמר למעלה, נא הסר את הסימון:", - "Invite to this room": "הזמן לחדר זה", - "Keywords": "מילות מפתח", - "Leave": "לעזוב", - "Login": "התחבר", - "Loading bug report module": "טוען רכיב דיווח דו\"ח שגיאה", - "Low Priority": "עדיפות נמוכה", - "Members": "חברים", - "Mentions only": "הערות בלבד", - "Messages containing my display name": "הודעות המכילות את שם התצוגה שלי", - "Messages containing keywords": "הודעות המכילות מילות מפתח ", - "Messages containing my user name": "הודעות המכילות את שם המשתמש שלי", - "Messages in group chats": "הודעות בקבוצות השיחה", - "Messages in one-to-one chats": "הודעות בשיחות פרטיות", - "Messages sent by bot": "הודעות שנשלחו באמצעות בוט", - "more": "עוד", - "Mute": "השתק", - "No rooms to show": "אין חדרים להצגה", - "Noisy": "רועש", - "Notification targets": "יעדי התראה", - "Notifications": "התראות", - "Notify for all other messages/rooms": "התראה לכל שאר ההודעות/החדרים", - "Notify me for anything else": "התראה לי על כל דבר אחר", - "Off": "סגור", - "On": "דלוק", - "Operation failed": "פעולה נכשלה", - "Permalink": "קישור קבוע", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "נא תאר את הבאג. מה עשית? מה ציפית שיקרה? מה קרה בפועל?", - "Please describe the bug and/or send logs.": "נא תאר את הבאג ו/או שלח את הלוגים.", - "Please install Chrome or Firefox for the best experience.": "נא התקן כרום או פיירפוקס לשימוש מייטבי.", "powered by Matrix": "מופעל ע\"י Matrix", - "Quote": "ציטוט", - "Reject": "דחה", - "Remove %(name)s from the directory?": "הסר את %(name)s מהרשימה?", - "Remove": "הסר", - "remove %(name)s from the directory.": "הסר את %(name)s מהרשימה.", - "Remove from Directory": "הסר מהרשימה", - "Report a bug": "דווח על שגיאה", - "Resend": "שלח מחדש", - "Riot Desktop on %(platformName)s": "Riot לשולחן העבודה על גבי %(platformName)s", - "Riot does not know how to join a room on this network": "Riot אינו יודע כיצד להצטרף לחדר ברשת זו", - "Riot is not supported on mobile web. Install the app?": "Riot לא נתמך באמצעות דפדפן במכשיר הסלולארי. האם ברצונך להתקין את האפליקציה?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot משתמש במספר רב של אפשרויות מתקדמות בדפדפן, חלק מהן לא זמינות או בשלבי נסיון בדפדפן שבשימושך כרגע.", - "Room not found": "חדר לא נמצא", - "Search": "חפש", - "Search…": "חפש…", - "Search for a room": "חפש חדר", - "Send": "שלח", - "Send logs": "שלח לוגים", - "Source URL": "כתובת אתר המקור", - "Sorry, your browser is not able to run Riot.": "מצטערים, הדפדפן שלך הוא אינו יכול להריץ את Riot.", - "The Home Server may be too old to support third party networks": "שרת הבית ישן ואינו יכול לתמוך ברשתות צד שלישי", - "There are advanced notifications which are not shown here": "ישנן התראות מתקדמות אשר אינן מוצגות כאן", - "The server may be unavailable or overloaded": "השרת אינו זמין או עמוס", - "This Room": "החדר הזה", - "Unable to fetch notification target list": "לא ניתן לאחזר רשימת יעדי התראה", - "Unable to join network": "לא ניתן להצטרף לרשת", - "Unable to look up room ID from server": "לא ניתן לאתר מזהה חדר על השרת", - "Unavailable": "לא זמין", - "Unhide Preview": "הצג מחדש תצוגה מקדימה", + "Riot Desktop on %(platformName)s": "רייוט לשולחן העבודה על גבי %(platformName)s", + "Riot is not supported on mobile web. Install the app?": "Riot לא נתמך באמצעות דפדפן במכשיר הסלולארי. האם להתקין את היישום?", "Unknown device": "מכשיר לא ידוע", - "unknown error code": "קוד שגיאה לא מוכר", - "Unnamed room": "חדר ללא שם", - "Update": "עדכון", - "Uploaded on %(date)s by %(user)s": "עודכן ב %(date)s ע\"י %(user)s", - "Uploading report": "מעדכן דוח", - "View Decrypted Source": "הצג מקור מוצפן", - "View Source": "הצג מקור", - "What's New": "מה חדש", - "What's new?": "מה חדש?", - "Waiting for response from server": "ממתין לתשובה מהשרת", - "When I'm invited to a room": "מתי אני מוזמן לחדר", - "World readable": "העולם קריא", - "You cannot delete this image. (%(code)s)": "אי אפשר למחוק את התמונה. (%(code)s)", - "You cannot delete this message. (%(code)s)": "לא ניתן למחוק הודעה זו. (%(code)s)", - "You are not receiving desktop notifications": "אתה לא מקבל התראות משולחן העבודה", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "יתכן כי בצעת את ההגדרות בצד לקוח ולא ב Riot. לא תוכל לווסת אותם ב Riot אבל הם עדיין תקפים", - "Sunday": "ראשון", - "Monday": "שני", - "Tuesday": "שלישי", - "Wednesday": "רביעי", - "Thursday": "חמישי", - "Friday": "שישי", - "Saturday": "שבת", - "Today": "היום", - "Yesterday": "אתמול", - "OK": "בסדר", - "You need to be using HTTPS to place a screen-sharing call.": "עליך להשתמש ב HTTPS בכדי לבצע שיחה משותפת.", + "You need to be using HTTPS to place a screen-sharing call.": "עליך להשתמש ב HTTPS בכדי לבצע שיחת ווידאו משותפת.", "Welcome to Riot.im": "ברוכים הבאים ל Riot.im", - "Search the room directory": "חפש ברשימת החדרים", + "Search the room directory": "חפש בספריית החדרים", "Chat with Riot Bot": "שיחה עם Riot בוט", "Get started with some tips from Riot Bot!": "התחל באמצעות מספר טיפים מהבוט של Riot!", "General discussion about Matrix and Riot": "דיון כללי על Matrix ו Riot", @@ -153,32 +16,23 @@ "Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & שיחה עם matrix-ios-sdk", "Riot/Android & matrix-android-sdk chat": "Riot/Android & צ'ט matrix-android-sdk", "Matrix technical discussions": "פורום טכני של Matrix", - "Running Matrix services": "הרץ את שירותי ה Matrix", - "Community-run support for Synapse": "תמיכה בקהילה של Synapse", + "Running Matrix services": "שירותי ה Matrix שרצים", + "Community-run support for Synapse": "תמיכת הקהילה עבור Synapse", "Admin support for Dendrite": "תמיכת מנהל מערכת עבור Dendrite", "Announcements about Synapse releases": "הודעות לגבי גרסאות Synapse", - "Support for those using and running matrix-appservice-irc": "תמיכה באלו המשתמשים ב matrix-appservice-irc", + "Support for those using and running matrix-appservice-irc": "תמיכה למשתמשים ב matrix-appservice-irc", "Building services on Matrix": "בניית שירותים על גבי ה Matrix", - "Support for those using the Matrix spec": "תמיכה באלו המשתמשים בהגדרות ה Matrix", + "Support for those using the Matrix spec": "תמיכה למשתמשים במאפייני ה Matrix", "Design and implementation of E2E in Matrix": "תכנון וביצוע קצה לקצה ב Matrix", "Implementing VR services with Matrix": "מימוש שירותי VR ב Matrix", "Implementing VoIP services with Matrix": "מימוש Voip ב Matrix", - "Discussion of the Identity Service API": "דיון על שירות זהויות", - "Support for those using, running and writing other bridges": "שירות לכל אותם אלו המשתמשים, מריצים וכותבים חיבורים נוספים", + "Discussion of the Identity Service API": "דיון על API לשירות זהויות", + "Support for those using, running and writing other bridges": "שירות למשתמשים, שמריצים וכותבים חיבורים נוספים", "Contributing code to Matrix and Riot": "תרומת קוד ל Matrix ו Riot", "Dev chat for the Riot/Web dev team": "שיחה עם המפתחים עבור ה קבוצת הפיתוח של Riot/Web", "Dev chat for the Dendrite dev team": "שיחת מפתחים עבור Dendrite", - "Co-ordination for Riot/Web translators": "תאום למתרגמי ה Riot/Web", "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "הרבה חדרים כבר קיימים ב Matrix ומקושרים לרשתות קיימות (Slack, IRC, Gitter וכו') או עצמאיים. בדוק את הספרייה!", - "Failed to change password. Is your password correct?": "נכשל בעת שינוי סיסמא, האם הסיסמא אינה שגויה?", - "You have successfully set a password!": "שינוי סיסמא בוצע בהצלחה!", - "You can now return to your account after signing out, and sign in on other devices.": "תוכל עתה לחזור לחשבון שלך רק אחרי התנתקות וחיבור מחדש לחשבון.", - "Continue": "המשך", - "Please set a password!": "נא להגדיר סיסמא!", - "This will allow you to return to your account after signing out, and sign in on other devices.": "זה יאפשר לך לחזור לחשבונך אחרי התנתקות ולהתחבר באמצעות התקנים אחרים.", "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s באמצעות הדפדפן %(browserName)s על גבי %(osName)s", - "Safari and Opera work too.": " ספארי ו אופרה עובדים גם כן.", - "Notifications on the following keywords follow rules which can’t be displayed here:": "התראה על מילות המפתח הבאות עוקבת אחר החוקים שאינם יכולים להיות מוצגים כאן:", - "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "באמצעות הדפדפן הנוכחי שלך המראה של האפליקציה יכול להיות שגוי לחלוטין וחלק מהאפשרויות לא תתפקדנה. אם תרצה לנסות בכל זאת תוכל אבל אז הסיכון חל עליך!", - "Decentralised, encrypted chat & collaboration powered by [matrix]": "צ'ט מוצפן & ושת\"פ נעשה ע\"י ה [matrix]" + "Decentralised, encrypted chat & collaboration powered by [matrix]": "צ'ט מוצפן & ושת\"פ נעשה ע\"י ה [matrix]", + "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "בכדי להיכנס לשרתים אחרים של מטריקס, אפשר להגדיר כתובת מוצא ראשית אחרת ל- URL שרתי מטריקס, בהגדרות: 'התאמה אישית לאפשרויות שרת'.
    ואז מתאפשר למשתמש ריוט לנצל חשבון משתמש מטריקס קיים, בשרתי מטריקס שונים.

    אפשר גם להגדיר בהתאמה אישית שרת הזדהות. אך אז לא ניתן להזמין משתמשים באימייל, ואי אפשר להזמינך באמצעות אימייל." } diff --git a/src/i18n/strings/hi.json b/src/i18n/strings/hi.json index f8bfb088a8..172796d032 100644 --- a/src/i18n/strings/hi.json +++ b/src/i18n/strings/hi.json @@ -1,8 +1,46 @@ { - "A new version of Riot is available.": "रायट के एक नया वर्शन उपलब्ध है।", - "All messages": "सारे संदेश", - "All Rooms": "सारे कमरे", - "Please set a password!": "कृपया एक पासवर्ड सेट करें!", - "Continue": "आगे बढ़ें", - "You have successfully set a password and an email address!": "आपने सफलतापूर्वक एक पासवर्ड और एक ईमेल एड्रेस सेट कर लिया है!" + "Riot is not supported on mobile web. Install the app?": "रायट फ़ोन पर समर्थन नहीं हैं। एप्लिकेशन इनस्टॉल करना चाहेंगे ?", + "Riot Desktop on %(platformName)s": "%(platformName)s पर रायट डेस्कटॉप", + "Unknown device": "अज्ञात यन्त्र", + "%(appName)s via %(browserName)s on %(osName)s": "%(osName)s पर %(browserName)s के माध्यम से %(appName)s", + "You need to be using HTTPS to place a screen-sharing call.": "स्क्रीन साझा की कॉल करने के लिए आपको HTTPS का उपयोग करने की आवश्यकता है।", + "Custom Server Options": "कस्टम सर्वर विकल्प", + "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "आप एक अलग होम सर्वर यूआरएल निर्दिष्ट करके अन्य मैट्रिक्स सर्वरों में साइन इन करने के लिए कस्टम सर्वर विकल्प का उपयोग कर सकते हैं।
    यह आपको एक अलग होम सर्वर पर मौजूदा मैट्रिक्स खाते के साथ रायट का उपयोग करने की अनुमति देता है।

    आप अपना आइडेंटिटी सर्वर भी सेट कर सकते हैं लेकिन आप ईमेल पते से उपयोगकर्ताओं को आमंत्रित नहीं कर पाएंगे, या ईमेल पते से स्वयं आमंत्रित नहीं हों सकेंगे।", + "Dismiss": "खारिज", + "powered by Matrix": "मैट्रिक्स द्वारा संचालित", + "Welcome to Riot.im": "Riot.im में आपका स्वागत है", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "[मैट्रिक्स] द्वारा संचालित विकेंद्रीकृत, एन्क्रिप्टेड चैट और सहयोगिता", + "Search the room directory": "रूम डायरेक्टरी में खोजें", + "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "मौजूदा नेटवर्क से जुड़े मैट्रिक्स में बहुत से कमरे पहले से मौजूद हैं (स्लैक, आईआरसी, गिटर इत्यादि) या स्वतंत्र। डायरेक्टरी देखें!", + "Chat with Riot Bot": "रायट बॉट के साथ चैट करें", + "Get started with some tips from Riot Bot!": "रायट बॉट से कुछ सुझावों के साथ शुरू करें!", + "General discussion about Matrix and Riot": "मैट्रिक्स और रायट के बारे में सामान्य चर्चा", + "Discussion of all things Matrix!": "मैट्रिक्स की सभी चीजों की चर्चा!", + "Riot/Web & Desktop chat": "रायट/वेब और डेस्कटॉप चैट", + "Riot/iOS & matrix-ios-sdk chat": "रायट / iOS और matrix-ios-sdk चैट", + "Riot/Android & matrix-android-sdk chat": "रायट / एंड्रॉइड और matrix-android-sdk चैट", + "Matrix technical discussions": "मैट्रिक्स तकनीकी चर्चाएं", + "Running Matrix services": "मैट्रिक्स सेवाएं चलाना", + "Community-run support for Synapse": "सामुदायिक चालित Synapse के लिए समर्थन", + "Admin support for Dendrite": "डेंडर्राइट के लिए व्यवस्थापक समर्थन", + "Announcements about Synapse releases": "Synapse रिलीज के बारे में घोषणाएं", + "Support for those using and running matrix-appservice-irc": "Matrix-appservice-irc का उपयोग और चलाने वाले लोगों के लिए समर्थन", + "Building services on Matrix": "मैट्रिक्स पर सेवाएं बनाना", + "Support for those using the Matrix spec": "मैट्रिक्स spec का उपयोग करने वालों के लिए समर्थन", + "Design and implementation of E2E in Matrix": "मैट्रिक्स में E2E के डिजाइन और कार्यान्वयन", + "Implementing VR services with Matrix": "मैट्रिक्स के साथ VR सेवाओं को लागू करना", + "Implementing VoIP services with Matrix": "मैट्रिक्स के साथ वीओआईपी सेवाओं को लागू करना", + "Discussion of the Identity Service API": "आइडेंटिटी सर्विस API की चर्चा", + "Support for those using, running and writing other bridges": "अन्य ब्रिज का उपयोग, चलाने और लिखने वालों के लिए समर्थन", + "Contributing code to Matrix and Riot": "मैट्रिक्स और रायट में कोड योगदान करना", + "Dev chat for the Riot/Web dev team": "रायट / वेब डेव टीम के लिए डेवलपर चैट", + "Dev chat for the Dendrite dev team": "डेन्ड्राइट देव टीम के लिए डेवलपर चैट", + "Co-ordination for Riot translators": "रायट अनुवादकों के लिए समन्वय", + "Sign In": "साइन करना", + "Create Account": "खाता बनाएं", + "Need help?": "मदद चाहिए?", + "Explore rooms": "रूम का अन्वेषण करें", + "Room Directory": "कक्ष निर्देशिका", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "आप एक अलग होमसर्वर URL निर्दिष्ट करके अन्य मैट्रिक्स सर्वर में साइन इन करने के लिए कस्टम सर्वर विकल्पों का उपयोग कर सकते हैं। यह आपको एक अलग होमसर्वर पर मौजूदा मैट्रिक्स खाते के साथ रायट का उपयोग करने की अनुमति देता है।", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "आप एक कस्टम पहचान सर्वर भी सेट कर सकते हैं, लेकिन आप उपयोगकर्ताओं को ईमेल पते से आमंत्रित नहीं कर पाएंगे, या स्वयं ईमेल पते से आमंत्रित नहीं किया जाएगा।" } diff --git a/src/i18n/strings/hr.json b/src/i18n/strings/hr.json new file mode 100644 index 0000000000..c03a82905f --- /dev/null +++ b/src/i18n/strings/hr.json @@ -0,0 +1,39 @@ +{ + "Riot is not supported on mobile web. Install the app?": "Riot nije podržan na mobilnom pregledniku. Instalirati aplikaciju?", + "Riot Desktop on %(platformName)s": "Riot Desktop na %(platformName)s", + "Unknown device": "Nepoznati uređaj", + "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s preko %(browserName)s na %(osName)s", + "You need to be using HTTPS to place a screen-sharing call.": "Morate koristiti HTTPS kako biste pokrenuli poziv s dijeljenjem ekrana.", + "Custom Server Options": "Prilagođene opcije poslužitelja", + "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Možete koristiti prilagođene opcije poslužitelja za prijavu na ostale Matrix poslužitelje, navodeći drugačiji URL za Kućni poslužitelj.
    Ovo vam omogućuje da koristite Riot s postojećim Matrix računom na različitom kućnom poslužitelju.

    Također možete postaviti prilagođeni poslužitelj identiteta, ali u tom slučaju nećete moći pozivati korisnike preko njihove email adrese, niti sami biti pozvani preko vase email adrese.", + "Dismiss": "Odbaci", + "powered by Matrix": "powered by Matrix", + "Welcome to Riot.im": "Dobrodošli u Riot.im", + "Chat with Riot Bot": "Razgovor s Riot Botom", + "Get started with some tips from Riot Bot!": "Krenite s par savjeta od Riot Bota!", + "General discussion about Matrix and Riot": "Opća rasprava o Matrixu i Riotu", + "Discussion of all things Matrix!": "Rasprava o svemu vezanome za Matrix!", + "Riot/Web & Desktop chat": "Riot/Web & Desktop chat", + "Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk chat", + "Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk chat", + "Matrix technical discussions": "Tehničke rasprave o Matrixu", + "Running Matrix services": "Pokretanje Matrix usluga", + "Community-run support for Synapse": "Podrška zajednice za Synapse", + "Admin support for Dendrite": "Administratorska podrška za Dendrite", + "Announcements about Synapse releases": "Obavijesti o izdanjima Synapsea", + "Support for those using and running matrix-appservice-irc": "Podrška onima koji koriste i pokreću matrix-appservice-irc", + "Building services on Matrix": "Razvoj usluga na Matrixu", + "Support for those using the Matrix spec": "Podrška onima koji koriste Matrix spec", + "Design and implementation of E2E in Matrix": "Dizajn i implementacija E2E u Matrixu", + "Implementing VR services with Matrix": "Implementiranje VR usluga s Matrixom", + "Implementing VoIP services with Matrix": "Implementiranje VoIP usluga s Matrixom", + "Discussion of the Identity Service API": "Rasprava vezana za Identity Service API", + "Support for those using, running and writing other bridges": "Podrška onima koji koriste, pokreću i pišu ostale mostove", + "Contributing code to Matrix and Riot": "Doprinos kodu Matrixa i Riota", + "Dev chat for the Riot/Web dev team": "Dev chat za Riot/Web dev tim", + "Dev chat for the Dendrite dev team": "Dev chat za Dendrite dev team", + "Co-ordination for Riot translators": "Koordinacija Riot prevoditelja", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizirani, enkriptirani chat & kolaboracija powered by [matrix]", + "Search the room directory": "Pretražite imenik soba", + "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Veliki broj soba već postoji na Matrixu, povezanih s postojećim mrežama (Slack, IRC, Gitter itd) ili nezavisnih. Zavirite u imenik!" +} diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index ac393592c1..d86d0bae0d 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -1,226 +1,54 @@ { - "Add an email address above to configure email notifications": "E-mail értesítés beállításához írd be az e-mail címed", - "Advanced notification settings": "Haladó értesítési beállítások", - "All messages": "Minden üzenet", - "All messages (noisy)": "Minden üzenet (hangos)", - "All notifications are currently disabled for all targets.": "Minden céleszközön minden értesítés tiltva van.", - "An error occurred whilst saving your email notification preferences.": "Hiba történt az e-mail értesítés beállításánál.", - "Call invitation": "Hívás meghívó", - "Cancel Sending": "Küldés megszakítása", - "Can't update user notification settings": "Nem sikerül frissíteni az értesítési beállításokat", - "Close": "Bezár", - "Couldn't find a matching Matrix room": "Nem található a keresett Matrix szoba", - "Custom Server Options": "Egyedi szerver beállítások", - "delete the alias.": "becenév törlése.", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Törlöd a(z) %(alias)s szobát és kiveszed a könyvtárból ezt: %(name)s?", - "Direct Chat": "Közvetlen csevegés", - "Directory": "Könyvtár", - "Dismiss": "Eltűntet", - "Download this file": "Fájl letöltése", - "Enable audible notifications in web client": "Hallható értesítések engedélyezése a webes kliensben", - "Enable desktop notifications": "Asztali értesítések engedélyezése", - "Enable email notifications": "E-mail értesítések engedélyezése", - "Enable notifications for this account": "Értesítések engedélyezése a fiókhoz", - "Enable them now": "Engedélyezés most", - "Enter keywords separated by a comma:": "Kulcsszavak vesszővel elválasztva:", - "Error": "Hiba", - "Error saving email notification preferences": "Hiba e-mail értesítés beállításának mentésénél", - "#example": "#példa", - "Failed to add tag %(tagName)s to room": "Nem lehet a címkét hozzáadni a szobához: %(tagName)s", - "Failed to change settings": "Nem lehet a beállítást megváltoztatni", - "Failed to forget room %(errCode)s": "Nem lehet eltávolítani a szobát: %(errCode)s", - "Failed to update keywords": "Nem lehet a kulcsszavakat frissíteni", - "Failed to get protocol list from Home Server": "Nem lehet a protokoll listát lekérni a Saját szerverről", - "Failed to get public room list": "Nem lehet lekérdezni a nyílt szobák listáját", - "Failed to remove tag %(tagName)s from room": "Nem lehet törölni a(z) %(tagName)s címkét a szobáról", - "Failed to set direct chat tag": "Nem lehet a címkét beállítani a közvetlen beszélgetéshez", - "Failed to set Direct Message status of room": "Nem lehet beállítani a Közvetlen beszélgetés státuszt a szobához", - "Favourite": "Kedvenc", - "Fetching third party location failed": "Nem sikerült lekérdezni a harmadik felet", - "Files": "Fájlok", - "Filter room names": "Szoba nevek szűrése", - "Forget": "Elfelejt", - "Guests can join": "Vendégek is csatlakozhatnak", - "Invite to this room": "Meghívás a szobába", - "Keywords": "Kulcsszavak", - "Leave": "Elhagy", - "Low Priority": "Alacsony priorítás", - "Members": "Résztvevők", - "Mentions only": "Csak ha megemlítenek", - "Messages containing my display name": "Az üzenet tartalmazza a nevem", - "Messages containing my user name": "Az üzenet tartalmazza a felhasználói nevem", - "Messages in group chats": "Üzenetek a csoportszobában", - "Messages in one-to-one chats": "Üzenetek közvetlen beszélgetésekben", - "Messages sent by bot": "Botok által küldött üzenetek", - "more": "további", - "Mute": "Elnémít", - "No rooms to show": "Nincsenek megjelenítendő szobák", - "Noisy": "Hangos", - "Notification targets": "Értesítések célpontja", - "Notifications": "Értesítések", - "Notify for all other messages/rooms": "Értesítés minden más üzenethez/szobához", - "Safari and Opera work too.": "Safarival és Operaval is működik.", - "Collapse panel": "Panel bezárása", - "customServer_text": "Egyedi Matrix szervert használhatsz a Saját szerver URL beállításával.
    Ezzel meglévő Matrix fiókot használhatsz Riot klienssel és egyedi szerverrel.

    Beállíthatsz egyedi \"identity\" szervert de akkor nem tudsz e-maillel meghívni felhasználót és téged sem tudnak meghívni e-maillel.", - "Expand panel": "Panel kinyitása", - "I understand the risks and wish to continue": "Megértettem a kockázatot és folytatom", - "Notifications on the following keywords follow rules which can’t be displayed here:": "A kulcsszavakhoz tartozó értesítések olyan szabályokat követnek amiket nem lehet itt megjeleníteni:", - "Notify me for anything else": "Értesíts minden egyéb esetben", - "Off": "Ki", - "On": "Be", - "Operation failed": "Művelet sikertelen", - "Permalink": "Állandó hivatkozás", - "Please install Chrome or Firefox for the best experience.": "A legjobb élmény érdekében telepíts Chromeot vagy Firefoxot.", - "powered by Matrix": "Matrixon alapul", - "Quote": "Idézet", - "Reject": "Elutasít", - "Remove %(name)s from the directory?": "Törlöd a %(name)s szobát a listából?", - "Remove": "Törlés", - "remove %(name)s from the directory.": "%(name)s szoba törlése a listából.", - "Remove from Directory": "Törlés a szobák listájából", - "Resend": "Újraküld", - "Riot does not know how to join a room on this network": "Riot nem tudja, hogy csatlakozzon ehhez a szobához ezen a hálózaton", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot sok haladó képességét használja a böngészőnek amik közül lehet, hogy nem mind érhető el a most használt böngészőben vagy még csak kísérleti jellegű.", - "Room not found": "A szoba nem található", - "Search for a room": "Szoba keresése", - "Source URL": "Forrás URL", - "Sorry, your browser is not able to run Riot.": "Elnézést, a böngésződ nem képes futtatni a Riotot.", - "The Home Server may be too old to support third party networks": "A Saját szerver lehet, hogy túl régi ahhoz, hogy más hálózatokhoz tudjon kapcsolódni", - "There are advanced notifications which are not shown here": "Vannak haladó értesítések amik itt nincsenek megjelenítve", - "The server may be unavailable or overloaded": "A szerver nem érhető el vagy túl van terhelve", - "Unable to fetch notification target list": "Nem sikerült letölteni az értesítési célok listáját", - "Unable to join network": "Nem sikerült kapcsolódni a hálózathoz", - "Unable to look up room ID from server": "Nem lehet lekérdezni a szoba ID-ját a szervertől", - "Unhide Preview": "Előkép felfedése", - "unknown error code": "ismeretlen hiba kód", - "Unnamed room": "Névtelen szoba", - "Uploaded on %(date)s by %(user)s": "Feltöltés: %(date)s, %(user)s", - "View Decrypted Source": "Visszafejtett forrás megjelenítése", - "View Source": "Forrás megjelenítése", - "When I'm invited to a room": "Amikor meghívtak a szobába", - "World readable": "Nyilvános", - "You cannot delete this image. (%(code)s)": "Nem törölheted ezt a képet. (%(code)s)", - "You cannot delete this message. (%(code)s)": "Nem törölheted ezt az üzenetet. (%(code)s)", - "You are not receiving desktop notifications": "Nem fogadsz asztali értesítéseket", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Valószínűleg Riottól eltérő klienssel állítottad be. Riotból nem állítható de érvényben van", - "Sunday": "Vasárnap", - "Monday": "Hétfő", - "Tuesday": "Kedd", - "Wednesday": "Szerda", - "Thursday": "Csütörtök", - "Friday": "Péntek", - "Saturday": "Szombat", - "Today": "Ma", - "Yesterday": "Tegnap", - "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "A jelenlegi bőngésződdel teljesen hibás lehet az alkalmazás kinézete és bizonyos funkciók, ha nem az összes, nem fog működni. Ha mindenképpen ki akarod próbálni, folytathatod de egyedül vagy minden felbukkanó problémával!", - "Messages containing keywords": "Az üzenet kulcsszavakat tartalmaz", + "Custom Server Options": "Egyedi szerverbeállítások", + "Dismiss": "Eltüntet", + "powered by Matrix": "Matrix hajtja", "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s alkalmazás %(browserName)s böngészőn %(osName)s rendszeren", - "A new version of Riot is available.": "Elérhető egy új Riot verzió.", - "All Rooms": "Minden szobában", - "Cancel": "Mégse", - "Changelog": "Változások", - "Collecting app version information": "Alkalmazás verzió információk összegyűjtése", - "Collecting logs": "Naplók összegyűjtése", - "Describe your problem here.": "Írd le a problémád itt.", - "Failed to send report: ": "A jelentést nem lehetett elküldeni: ", - "Forward Message": "Üzenet továbbküldése", - "Hide panel": "Panel elrejtése", - "Loading bug report module": "Hibabejelentő modul betöltése", - "Please describe the bug and/or send logs.": "Írd le a hibát és/vagy küld el a naplókat.", - "Report a bug": "Hiba bejelentése", - "Riot Desktop on %(platformName)s": "Riot Desktop ezen: %(platformName)s", - "Riot is not supported on mobile web. Install the app?": "Riot nem támogatott mobil webböngészőn. Telepíted az alkalmazást?", - "Search": "Keresés", - "Search…": "Keresés…", - "Send": "Elküld", - "Send logs": "Naplók elküldése", - "This Room": "Ebben a szobában", - "Unavailable": "Elérhetetlen", - "Unknown device": "Ismeretlen eszköz", - "Update": "Frissítés", - "Uploading report": "Jelentés feltöltése", - "What's New": "Mik az újdonságok", - "What's new?": "Mik az újdonságok?", - "Waiting for response from server": "Válasz várása a szervertől", - "OK": "Rendben", - "You need to be using HTTPS to place a screen-sharing call.": "HTTPS-t kell használnod hogy képernyőmegosztásos hívást kezdeményezz.", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "A problémák diagnosztizálása érdekében erről a kliensről a hibajelentésben naplók lesznek elküldve. Ha csak az alábbi szöveget szeretnéd elküldeni akkor ezt ne jelöld meg:", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Írd le a hibát. Mit csináltál? Mi az amit szerettél volna ha történik? Ezzel szemben mi az ami történt?", - "Login": "Bejelentkezés", - "Welcome to Riot.im": "Üdvözlünk a Riot.im-en", + "Riot Desktop on %(platformName)s": "Riot Desktop itt: %(platformName)s", + "Riot is not supported on mobile web. Install the app?": "A mobilböngésző nem támogatja a Riotot. Telepíted inkább az alkalmazást?", + "Unknown device": "Ismeretlen készülék", + "You need to be using HTTPS to place a screen-sharing call.": "Képernyőmegosztás indításához HTTPS-t kell használnod.", + "Welcome to Riot.im": "Üdvözöl a Riot.im", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizált, titkosított csevegés és kollaboráció [matrix] alapokon", - "Search the room directory": "Keresés a szobák jegyzékében", + "Search the room directory": "Keresés a szobajegyzékben", "Chat with Riot Bot": "Csevegés a Riot Robottal", - "Get started with some tips from Riot Bot!": "Kezdd el a Riot használatát a Riot Robot tippjei segítségével!", + "Get started with some tips from Riot Bot!": "Kezdj a Riot Robot néhány tippjével!", "General discussion about Matrix and Riot": "Általános beszélgetések a Matrixról és a Riotról", - "Discussion of all things Matrix!": "Beszélgetések mindenről, ami a Matrixhoz kapcsolódik!", - "Riot/Web & Desktop chat": "Riot/Web és asztali csevegés", + "Discussion of all things Matrix!": "Beszélgetés mindenről, ami Matrix!", + "Riot/Web & Desktop chat": "Riot/Web és Desktop csevegés", "Riot/iOS & matrix-ios-sdk chat": "Riot/iOS és matrix-ios-sdk csevegés", "Riot/Android & matrix-android-sdk chat": "Riot/Android és matrix-android-sdk csevegés", "Matrix technical discussions": "Technikai jellegű beszélgetések a Matrixról", "Community-run support for Synapse": "Közösségi támogatás a Synapse-hez", - "Admin support for Dendrite": "Adminisztrációs támogatás a Dendrite-hoz", - "Announcements about Synapse releases": "Bejelentések a Synapse kiadásairól", - "Running Matrix services": "Matrixszolgáltatások működtetése", - "Support for those using and running matrix-appservice-irc": "Támogatás a matrix-appservice-irc használatáról és működtetéséről", - "Building services on Matrix": "Szolgáltatások fejlesztése a Matrixra", - "Support for those using the Matrix spec": "Támogatás a Matrix specifikáció használatáról", + "Admin support for Dendrite": "Admin támogatás a Dendrite-hoz", + "Announcements about Synapse releases": "Hírek a Synapse kiadásairól", + "Running Matrix services": "Matrix szolgáltatások működtetése", + "Support for those using and running matrix-appservice-irc": "Támogatás a matrix-appservice-irc használóinak és működtetőinek", + "Building services on Matrix": "Szolgáltatások fejlesztése Matrixra", + "Support for those using the Matrix spec": "Támogatás a Matrix specifikáció használóinak", "Design and implementation of E2E in Matrix": "A végponttól végpontig történő titkosítás (E2E) tervezése és implementációja a Matrixban", - "Implementing VR services with Matrix": "A Matrixszal együttműködő virtuális valóság (VR) szolgáltatások implementációja", - "Implementing VoIP services with Matrix": "A Matrixszal együttműködő VoIP szolgáltatások implementációja", - "Discussion of the Identity Service API": "Beszélgetések az Identity Service API-ról", - "Support for those using, running and writing other bridges": "Támogatás egyéb hídak használáról, működtetéséről és fejlesztéséről", + "Implementing VR services with Matrix": "VR szolgáltatások implementációja Matrixba", + "Implementing VoIP services with Matrix": "VoIP szolgáltatások implementációja Matrixba", + "Discussion of the Identity Service API": "Beszélgetés az Identity Service API-ról", + "Support for those using, running and writing other bridges": "Támogatás azoknak, akik egyéb hidakat használnak, működtetnek vagy készítenek", "Contributing code to Matrix and Riot": "Hozzájárulás a Matrix és Riot programkódjának fejlesztéséhez", "Dev chat for the Riot/Web dev team": "Csevegés a Riot/Web fejlesztői csapatával fejlesztőknek", "Dev chat for the Dendrite dev team": "Csevegés a Dendrite fejlesztői csapatával fejlesztőknek", - "Co-ordination for Riot/Web translators": "Egyeztetés a Riot/Web fordítóival", - "Failed to change password. Is your password correct?": "Nem sikerült megváltoztatni a jelszót. Helyesen írtad be a jelszavadat?", - "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Már sok létező szoba van a Matrixon, melyek más hálózatokkal vannak összekapcsolva (Slack, IRC, Gitter stb.) vagy függetlenek. Látogasd meg a szobajegyzéket!", - "You have successfully set a password!": "Sikeresen állítottál be jelszót!", - "You can now return to your account after signing out, and sign in on other devices.": "Most már visszatérhetsz a fiókodhoz kijelentkezés után, és más eszközökkel is be tudsz jelentkezni.", - "Continue": "Folytatás", - "Please set a password!": "Kérlek, állíts be egy jelszót!", - "This will allow you to return to your account after signing out, and sign in on other devices.": "Ezzel visszatérhetsz kijelentkezés után a fiókodhoz és más eszközökkel is be tudsz jelentkezni.", - "(HTTP status %(httpStatus)s)": "(HTTP állapot %(httpStatus)s)", - "You have successfully set a password and an email address!": "Sikeresen beállítottad a jelszavad és e-mail címed!", - "Remember, you can always set an email address in user settings if you change your mind.": "Ha meggondolod magad, bármikor beállíthatod az e-mail címed a felhasználói beállításoknál.", - "To return to your account in future you need to set a password": "A fiókba való visszalépéshez jelszót kell beállítanod", - "Set Password": "Jelszó beállítása", - "Warning": "Figyelmeztetés", - "Checking for an update...": "Frissítés keresése...", - "Error encountered (%(errorDetail)s).": "Hiba történt (%(errorDetail)s).", - "No update available.": "Frissítés nem érthető el.", - "Downloading update...": "Frissítés letöltése...", - "Couldn't load home page": "Kezdőképernyő betöltése sikertelen", - "Bug report sent": "Hibajelentés elküldve", - "Thank you!": "Köszönjük!", - "Back": "Vissza", - "Developer Tools": "Fejlesztői eszközök", - "Failed to send custom event.": "Egyéni esemény elküldése nem sikerült.", - "Send Custom Event": "Egyéni esemény elküldése", - "Send Custom State Event": "Egyéni állapot esemény küldése", - "Explore Room State": "Szoba állapot felfedezése", - "Event sent!": "Esemény elküldve!", - "Event Type": "Esemény típusa", - "Event Content": "Esemény tartalma", - "State Key": "Állapot kulcs", - "Filter results": "Találatok szűrése", - "You must specify an event type!": "Meg kell határoznod az esemény típusát!", - "Show message in desktop notification": "Üzenetek megmutatása az asztali értesítésekben", - "Pin Message": "Üzenet kitűzése", - "Unpin Message": "Üzenet levétele", - "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Bejelentkezhetsz más Matrix szerverbe ha használhatod a saját szerver opciót és megadod egy másik szerver URL-jét.
    Ezzel egy másik szerveren egy már meglévő fiókot tudsz használni.

    Beállíthatsz egyedi azonosító szervert de akkor nem tudsz másokat e-mail cím alapján meghívni és téged sem tudnak.", - "Edit": "Szerkeszt", - "Register": "Regisztrál", - "Rooms": "Szobák", - "Invite to this community": "Meghívás ebbe a közösségbe", - "Add rooms to this community": "Szobák hozzáadása ehhez a közösséghez", - "Toolbox": "Szerszámok", - "Send Account Data": "Fiók adatok küldése", - "Explore Account Data": "Fiók adatok böngészése", - "Appear Offline": "Kapcsolat nélkülinek tűnik", - "Away": "Távol", - "Please install Chrome or Firefox for the best experience.": "A legjobb élmény érdekében telepíts Chromeot vagy Firefoxot.", - "Safari and Opera work too.": "Működik Safari és Opera böngészővel is.", - "Reply": "Válasz" + "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Már sok szoba van a Matrixon: más hálózatokkal (Slack, IRC, Gitter stb.) összekapcsolt és függetlenek szobák is. Nézd meg a szobajegyzéket!", + "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Bejelentkezhetsz más Matrix szerverre is az egyedi szerverbeállításoknál megadott Matrix szerver URL-jével.
    Így használhatod a Riotot egy már máshol meglévő Matrix fiókkal is.

    Beállíthatsz egyéni identitásszervert is, de akkor nem tudsz más felhasználókat e-mail címmel meghívni, illetve ők sem tudnak téged.", + "Co-ordination for Riot translators": "Koordináció Riot fordítók számára", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Más azonosítási szervert is használhatsz, de akkor nem tudsz másokat e-mail cím alapján meghívni és téged sem fognak tudni.", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Használhatod az egyedi szerver beállítást más Matrix szerverre való belépéshez, azzal, hogy megadod a Matrix szerver URL-jét. Ezzel a Riot-ot használhatod más Matrix szerveren lévő fiókkal.", + "Sign In": "Bejelentkezés", + "Create Account": "Fiók készítés", + "Need help?": "Segíthetünk?", + "Explore rooms": "Szobák felderítése", + "Room Directory": "Szoba lista", + "Unexpected error preparing the app. See console for details.": "Váratlan hiba történt az alkalmazás előkészítésénél. A részletekért nézd meg a konzolt.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Érvénytelen konfiguráció: csak egyet lehet megadni a default_server_config, default_server_name és default_hs_url közül.", + "Invalid configuration: no default server specified.": "Érvénytelen konfiguráció: nincs megadva alapértelmezett szerver.", + "This installation of Riot seems to have an invalid server configuration. If you are the administrator, please correct the error below": "A telepített Riotnak úgy tűnik hibás a szerver beállítása. Ha te vagy az adminisztrátor, kérlek javítsd az alábbi hibát", + "Your Riot is misconfigured": "A Riotod hibásan van beállítva", + "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "A Riot beállításod érvénytelen JSON szöveget tartalmaz. Kérlek javítsd és töltsd újra az oldalt.", + "The message from the parser is: %(message)s": "A feldolgozó algoritmus üzenete: %(message)s", + "Invalid JSON": "Érvénytelen JSON" } diff --git a/src/i18n/strings/id.json b/src/i18n/strings/id.json index f2d8804bb9..7e202c7cbd 100644 --- a/src/i18n/strings/id.json +++ b/src/i18n/strings/id.json @@ -1,158 +1,12 @@ { "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s melalui %(browserName)s di %(osName)s", - "Safari and Opera work too.": "Safari dan Opera juga berfungsi.", - "A new version of Riot is available.": "Riot versi baru telah tersedia.", - "Add an email address above to configure email notifications": "Tambahkan alamat email di atas untuk konfigurasi notifikasi email", - "Advanced notification settings": "Pengaturan notifikasi lanjutan", - "All messages": "Semua pesan", - "All messages (noisy)": "Semua pesan (keras)", - "All Rooms": "Semua Ruang", - "All notifications are currently disabled for all targets.": "Semua notifikasi saat ini dinonaktifkan untuk semua target.", - "An error occurred whilst saving your email notification preferences.": "Terjadi kesalahan saat menyimpan preferensi notifikasi email Anda.", - "Call invitation": "Undangan panggilan", - "Cancel": "Batal", - "Cancel Sending": "Batalkan pengiriman", - "Can't update user notification settings": "Tidak dapat memperbarui pengaturan notifikasi pengguna", - "Changelog": "Daftar perubahan", - "Close": "Tutup", - "Collapse panel": "Lipat panel", - "Collecting app version information": "Mengumpukan informasi versi aplikasi", - "Collecting logs": "Mengumpulkan catatan", - "Couldn't find a matching Matrix room": "Tidak dapat menemukan ruang Matrix yang sesuai", "Custom Server Options": "Pilihan Server Khusus", - "customServer_text": "Anda dapat menggunakan opsi server khusus untuk masuk ke server Matrix lain dengan menyebutkan URL server Home.
    Hal ini memperbolehkan Anda untuk menggunakan Riot dengan akun Matrix yang sudah ada di server Home yang berbeda.

    Anda juga bisa mengatur server identitas khusus tapi Anda tidak akan dapat mengundang pengguna melalui alamat email, atau diundang dengan alamat email Anda.", - "delete the alias.": "hapus alias.", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Hapus alias ruang %(alias)s dan hapus %(name)s dari direktori?", - "Describe your problem here.": "Jelaskan masalah anda di sini.", - "Direct Chat": "Obrolan Langsung", - "Directory": "Direktori", "Dismiss": "Abaikan", - "Download this file": "Unduh file ini", - "Enable audible notifications in web client": "Aktifkan notifikasi suara di klien web", - "Enable desktop notifications": "Aktifkan notifikasi desktop", - "Enable email notifications": "Aktifkan notifikasi email", - "Enable notifications for this account": "Aktifkan notifikasi untuk akun ini", - "Enable them now": "Aktifkan sekarang", - "Enter keywords separated by a comma:": "Masukkan kata kunci dipisahkan oleh koma:", - "Error": "Terjadi Kesalahan", - "Error saving email notification preferences": "Terjadi kesalahan saat menyimpan pilihan notifikasi email", - "#example": "#contoh", - "Expand panel": "Luaskan panel", - "Failed to add tag %(tagName)s to room": "Gagal menambahkan tag %(tagName)s ke ruang", - "Failed to change settings": "Gagal mengubah pengaturan", - "Failed to forget room %(errCode)s": "Gagal melupakan ruang %(errCode)s", - "Failed to update keywords": "Gagal memperbarui kata kunci", - "Failed to get protocol list from Home Server": "Gagal mendapatkan daftar protokol dari Server Home", - "Failed to get public room list": "Gagal mendapatkan daftar ruang publik", - "Failed to remove tag %(tagName)s from room": "Gagal menghapus tag %(tagName)s dari ruang", - "Failed to send report: ": "Gagal mengirim laporan: ", - "Failed to set direct chat tag": "Gagal mengatur tag obrolan langsung", - "Failed to set Direct Message status of room": "Gagal mengatur status Pesan Langsung dari ruang", - "Favourite": "Favorit", - "Fetching third party location failed": "Gagal mengambil lokasi pihak ketiga", - "Files": "Files", - "Filter room names": "Saring nama ruang", - "Forget": "Lupakan", - "Forward Message": "Teruskan Pesan", - "Guests can join": "Tamu dapat gabung", - "Hide panel": "Sembunyikan panel", - "(HTTP status %(httpStatus)s)": "(status HTTP %(httpStatus)s)", - "I understand the risks and wish to continue": "Saya mengerti resikonya dan berharap untuk melanjutkan", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Untuk diagnosis permasalahannya, catatan dari klien ini akan dikirimkan bersama laporan bug. Jika Anda memilih untuk hanya mengirimkan pesan di atas, mohon hapus centang:", - "Invite to this room": "Undang ke ruang ini", - "Keywords": "Kata Kunci", - "Leave": "Tinggalkan", - "Login": "Masuk", - "Loading bug report module": "Memuat modul laporan bug", - "Low Priority": "Prioritas Rendah", - "Members": "Anggota", - "Mentions only": "Hanya jika disinggung", - "Messages containing my display name": "Pesan mengandung nama tampilan saya", - "Messages containing keywords": "Pesan mengandung kata kunci", - "Messages containing my user name": "Pesan mengandung nama pengguna saya", - "Messages in group chats": "Pesan di obrolan grup", - "Messages in one-to-one chats": "Pesan di obrolan satu-ke-satu", - "Messages sent by bot": "Pesan dikirim oleh bot", - "more": "lagi", - "Mute": "Bisu", - "No rooms to show": "Tidak ada ruang ditunjukkan", - "Noisy": "Berisik", - "Notification targets": "Target notifikasi", - "Notifications": "Notifikasi", - "Notifications on the following keywords follow rules which can’t be displayed here:": "Notifikasi pada kata kunci berikut mengikuti aturan dimana tidak dapat ditampilkan di sini:", - "Notify for all other messages/rooms": "Beritau semua pesan/ruang", - "Notify me for anything else": "Beritau saya untuk lainnya", - "Off": "Mati", - "On": "Nyala", - "Operation failed": "Operasi gagal", - "Permalink": "Permalink", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Harap jelaskan bug. Apa yang Anda lakukan? Apa yang Anda harap terjadi? Apa yang sebenarnya terjadi?", - "Please describe the bug and/or send logs.": "Harap jelaskan bug dan/atau kirim catatan.", - "Please install Chrome or Firefox for the best experience.": "Harap install Chrome atau Firefox untuk pengalaman terbaik.", "powered by Matrix": "didukung oleh Matrix", - "Quote": "Kutip", - "Reject": "Tolak", - "Remove %(name)s from the directory?": "Hapus %(name)s dari direktori?", - "Remove": "Hapus", - "remove %(name)s from the directory.": "hapus %(name)s dari direktori.", - "Remove from Directory": "Hapus dari DIrektori", - "Report a bug": "Laporkan bug", - "Resend": "Kirim Ulang", "Riot Desktop on %(platformName)s": "Riot Desktop di %(platformName)s", - "Riot does not know how to join a room on this network": "Riot tidak tau bagaimana gabung ruang di jaringan ini", "Riot is not supported on mobile web. Install the app?": "Riot tidak mendukung web seluler. Install aplikasi?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot menggunakan banyak fitur terdepan dari browser, dimana tidak tersedia atau dalam fase eksperimen di browser Anda.", - "Room not found": "Ruang tidak ditemukan", - "Search": "Cari", - "Search…": "Cari…", - "Search for a room": "Cari ruang obrolan", - "Send": "Kirim", - "Send logs": "Kirim catatan", - "Source URL": "URL sumber", - "Sorry, your browser is not able to run Riot.": "Maaf, browser Anda tidak dapat menjalankan Riot.", - "The Home Server may be too old to support third party networks": "Server Home mungkin terlalu kuno untuk mendukung jaringan pihak ketiga", - "There are advanced notifications which are not shown here": "Ada notifikasi lanjutan yang tidak ditampilkan di sini", - "The server may be unavailable or overloaded": "Server mungkin tidak tersedia atau kelebihan muatan", - "This Room": "Ruang ini", - "Unable to fetch notification target list": "Tidak dapat mengambil daftar notifikasi target", - "Unable to join network": "Tidak dapat bergabung di jaringan", - "Unable to look up room ID from server": "Tidak dapat mencari ID ruang dari server", - "Unavailable": "Tidak Tersedia", - "Unhide Preview": "Tampilkan Pratinjau", "Unknown device": "Perangkat Tidak Diketahui", - "unknown error code": "kode kesalahan tidak diketahui", - "Unnamed room": "Ruang tanpa nama", - "Update": "Perbarui", - "Uploaded on %(date)s by %(user)s": "Diunggah pada %(date)s oleh %(user)s", - "Uploading report": "Unggah laporan", - "View Decrypted Source": "Tampilkan Sumber Terdekripsi", - "View Source": "Tampilkan Sumber", - "What's New": "Apa Yang Baru", - "What's new?": "Apa yang baru?", - "Waiting for response from server": "Menunggu respon dari server", - "When I'm invited to a room": "Ketika Saya diundang ke ruang", - "World readable": "Terpublikasi Umum", - "You cannot delete this image. (%(code)s)": "Anda tidak dapat menghapus gambar ini. (%(code)s)", - "You cannot delete this message. (%(code)s)": "Anda tidak dapat menghapus pesan ini. (%(code)s)", - "You are not receiving desktop notifications": "Anda tidak menerima notifikasi desktop", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Anda mungkin sudah konfigurasi di klien selain Riot. Anda tidak dapat setel di Riot tetap berlaku", - "Sunday": "Minggu", - "Monday": "Senin", - "Tuesday": "Selasa", - "Wednesday": "Rabu", - "Thursday": "Kamis", - "Friday": "Jumat", - "Saturday": "Sabtu", - "Today": "Hari Ini", - "Yesterday": "Kemarin", - "OK": "OK", - "Warning": "Peringatan", - "Checking for an update...": "Cek pembaruan...", - "Error encountered (%(errorDetail)s).": "Terjadi kesalahan (%(errorDetail)s).", - "No update available.": "Tidak ada pembaruan.", - "Downloading update...": "Unduh pembaruan...", "You need to be using HTTPS to place a screen-sharing call.": "Anda perlu menggunakan HTTPS untuk melakukan panggilan berbagi-layar.", - "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Dengan browser ini, tampilan dari aplikasi mungkin tidak sesuai, dan beberapa atau bahkan semua fitur mungkin tidak berjalan. Jika Anda ingin tetap mencobanya, Anda bisa melanjutkan, tapi Anda tanggung sendiri jika muncul masalah yang terjadi!", "Welcome to Riot.im": "Selamat datang di Riot.im", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Obrolan terenkripsi, terdesentralisasi & kolaborasi didukung oleh [matrix]", "Search the room directory": "Cari di direktori ruang", @@ -179,17 +33,7 @@ "Contributing code to Matrix and Riot": "Kontribusi kode untuk Matrix dan Riot", "Dev chat for the Riot/Web dev team": "Obrolan Developer untuk tim developer Riot/Web", "Dev chat for the Dendrite dev team": "Obrolan Developer untuk tim developer Dendrite", - "Co-ordination for Riot/Web translators": "Koordinasi untuk penerjemah Riot/Web", "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Banyak ruang sudah tersedia di Matrix, terhubung ke jaringan yang sudah ada (Slack, IRC, Gitter dls) atau independen. Cek direktori!", - "Failed to change password. Is your password correct?": "Gagal untuk mengubah password. Apakah password Anda benar?", - "You have successfully set a password!": "Anda berhasil mengubah password!", - "You can now return to your account after signing out, and sign in on other devices.": "Anda dapat kembali ke akun setelah keluar dan masuk kembali di perangkat lain.", - "Continue": "Lanjut", - "Please set a password!": "Mohon isi password!", - "This will allow you to return to your account after signing out, and sign in on other devices.": "Hal ini akan memperbolehkan anda kembali ke akun setelah keluar dan masuk kembali di perangkat lain.", - "You have successfully set a password and an email address!": "Anda telah berhasil mengubah password dan alamat email!", - "Remember, you can always set an email address in user settings if you change your mind.": "Ingat, Anda selalu dapat mengubah alamat email di pengaturan pengguna jika anda berubah pikiran.", - "To return to your account in future you need to set a password": "Untuk kembali ke akun di lain waktu, Anda perlu mengisi password", - "Set Password": "Ubah Password", - "Couldn't load home page": "Tidak dapat memuat halaman utama" + "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Anda dapat menggunakan opsi lain untuk mendaftar pada server Matrix yang berbeda dengan memasukkan URL server yang sesuai.
    Hal ini memungkinkan anda untuk menggunakan Riot dengan akun matrix yang telah tersedia pada Home server yang berbeda.

    Anda juga dapat melakukan pengubahan identitas server akan tetapi akan berakibat tidak dapat mengundang pengguna melalui email, atau diundang melalui email.", + "Co-ordination for Riot translators": "Koordinasi dengan penerjemah Riot" } diff --git a/src/i18n/strings/is.json b/src/i18n/strings/is.json new file mode 100644 index 0000000000..92babad122 --- /dev/null +++ b/src/i18n/strings/is.json @@ -0,0 +1,39 @@ +{ + "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s með %(browserName)s á %(osName)s", + "powered by Matrix": "keyrt með Matrix", + "Welcome to Riot.im": "Velkomin í Riot.im", + "Riot Desktop on %(platformName)s": "Riot skjáborðsforrit á %(platformName)s", + "Unknown device": "Óþekkt tæki", + "Dismiss": "Hafna", + "Riot/Web & Desktop chat": "Riot/Spjall á vef- & skjáborði", + "Custom Server Options": "Sérsniðnir valkostir vefþjóns", + "Riot is not supported on mobile web. Install the app?": "Riot er ekki stutt í farsímaútgáfu vefsins. Setja upp forritið?", + "You need to be using HTTPS to place a screen-sharing call.": "Þú verður að nota HTTPS til að hringja samtal með deilingu á skjá.", + "Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk spjall", + "Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk spjall", + "Matrix technical discussions": "Tæknilegar umræður varðandi Matrix", + "Running Matrix services": "Að keyra Matrix þjónustur", + "Chat with Riot Bot": "Spjalla við Riot-róbótann", + "Get started with some tips from Riot Bot!": "Komdu þér í gang með nokkrum ábendingum frá Riot-róbótanum!", + "General discussion about Matrix and Riot": "Almenn umræða um Matrix og Riot", + "Discussion of all things Matrix!": "Almenn umræða um Matrix!", + "Implementing VR services with Matrix": "Uppsetning á VR-þjónustum með Matrix", + "Implementing VoIP services with Matrix": "Uppsetning á VoIP-þjónustum með Matrix", + "Contributing code to Matrix and Riot": "Framlög á kóða til Matrix og Riot", + "Co-ordination for Riot translators": "Yfirlit fyrir þýðendur Riot", + "Search the room directory": "Leita í herbergisskránni", + "Building services on Matrix": "Að byggja þjónustur á Matrix", + "Design and implementation of E2E in Matrix": "Hönnun og framkvæmd E2E í Matrix", + "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Þú getur notað sérsniðna valkosti til að skrá inn á aðra Matrix-vefþjóna með því að tilgreina aðra slóð á Heimavefþjón.
    Þetta gerir þér kleift að nota Riot með fyrirliggjandi Matrix notandaaðgangi á öðrum heimaþjóni.

    Þú getur líka stillt sérsniðinn auðkenningarþjón, en þá getur þú ekki boðið notendum eftir tölvupóstfangi eða sjálfur fengið boð með tölvupósti.", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Dulritað dreifvinnsluspjall & samstarfstól keyrt með [matrix]", + "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Margar spjallrásir eru til í Matrix, tengdar við fyrirliggjandi netkerfi (Slack, IRC, Gitter, o.s.frv.) eða óháð. Skoðaðu skráninguna!", + "Community-run support for Synapse": "Aðstoð frá samfélaginu fyrir Synapse", + "Admin support for Dendrite": "Kerfisstjórnarstuðningur fyrir Dendrite", + "Announcements about Synapse releases": "Tilkynningar um Synapse útgáfur", + "Support for those using and running matrix-appservice-irc": "Stuðningur við þá sem nota og keyra matrix-appservice-irc", + "Support for those using the Matrix spec": "Stuðningur við þá sem nota tæknilega Matrix eiginleika", + "Discussion of the Identity Service API": "Umræða um Identity Service API-kerfisviðmót", + "Support for those using, running and writing other bridges": "Stuðningur við þá sem nota, keyra og skrifa aðrar brýr", + "Dev chat for the Riot/Web dev team": "Forritaraspjall fyrir Riot/vefþróunarhópinn", + "Dev chat for the Dendrite dev team": "Forritaraspjall fyrir Dendrite þróunarhópinn" +} diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json index af64234a4e..7f8375dd9f 100644 --- a/src/i18n/strings/it.json +++ b/src/i18n/strings/it.json @@ -1,162 +1,16 @@ { - "Safari and Opera work too.": "Anche Safari e Opera funzionano.", - "A new version of Riot is available.": "È disponibile una nuova versione di Riot.", - "Add an email address above to configure email notifications": "Aggiungi un indirizzo email sopra per configurare le notifiche via email", - "Advanced notification settings": "Impostazioni di notifica avanzate", - "All messages": "Tutti i messaggi", - "All messages (noisy)": "Tutti i messaggi (rumoroso)", - "All Rooms": "Tutte le stanze", - "An error occurred whilst saving your email notification preferences.": "Si è verificato un errore durante il salvataggio delle tue preferenze sulle notifiche email.", - "Call invitation": "Invito ad una chiamata", - "Cancel": "Annulla", - "Cancel Sending": "Annulla invio", - "Can't update user notification settings": "Impossibile aggiornare le impostazioni di notifica dell'utente", - "Changelog": "Cambiamenti", - "Close": "Chiudi", - "Collapse panel": "Riduci pannello", - "Collecting app version information": "Raccolta di informazioni sulla versione dell'applicazione", - "Collecting logs": "Sto recuperando i log", - "Couldn't find a matching Matrix room": "Impossibile trovare una stanza Matrix corrispondente", - "Custom Server Options": "Opzioni Server Personalizzate", - "customServer_text": "Puoi utilizzare un server personale per accedere su altri server Matrix specificando un diverso indirizzo URL per il server Home.
    Questo ti permetterà di usare Riot con un account Matrix già esistente su un altro server.

    Puoi anche specificare un diverso server di identità ma non sarai in grado di invitare utenti, o di essere invitato tramite indirizzo email.", - "delete the alias.": "elimina l'alias.", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Eliminare l'alias %(alias)s e rimuovere %(name)s dalla lista?", - "Describe your problem here.": "Descrivi qui il tuo problema.", - "Direct Chat": "Chat Diretta", - "Directory": "Lista", - "Dismiss": "Scarta", - "Download this file": "Scarica questo file", - "Enable audible notifications in web client": "Abilita notifiche audio nel client web", - "Enable desktop notifications": "Abilita le notifiche desktop", - "Enable email notifications": "Abilita le notifiche email", - "Enable notifications for this account": "Abilita le notifiche per questo account", - "Enable them now": "Abilitale adesso", - "Enter keywords separated by a comma:": "Inserisci le parole chiave separate da virgole:", - "Error": "Errore", - "Error saving email notification preferences": "Errore nel salvataggio delle preferenze di notifica email", - "#example": "#esempio", - "Expand panel": "Espandi il pannello", - "Failed to add tag %(tagName)s to room": "Impossibile aggiungere l'etichetta %(tagName)s alla stanza", - "Failed to change settings": "Impossibile modificare le impostazioni", - "Failed to update keywords": "Impossibile aggiornare le parole chiave", - "Failed to get protocol list from Home Server": "Impossibile ottenere la lista di protocolli dal server Home", - "Failed to get public room list": "Impossibile ottenere la lista delle stanze pubbliche", - "Failed to remove tag %(tagName)s from room": "Impossibile rimuovere l'etichetta %(tagName)s dalla stanza", - "Failed to send report: ": "Impossibile inviare il resoconto: ", - "Failed to set direct chat tag": "Impossibile impostare l'etichetta di chat diretta", - "Failed to set Direct Message status of room": "Impossibile impostare lo stato di Messaggio Diretto alla stanza", - "Favourite": "Preferito", - "Files": "File", - "Filter room names": "Filtra i nomi delle stanze", - "Forget": "Dimentica", - "Forward Message": "Inoltra messaggio", - "Guests can join": "Gli ospiti sono ammessi", - "Hide panel": "Nascondi pannello", - "I understand the risks and wish to continue": "Sono consapevole dei rischi e vorrei continuare", - "Invite to this room": "Invita in questa stanza", - "Keywords": "Parole chiave", - "Leave": "Abbandona", - "Login": "Entra", - "All notifications are currently disabled for all targets.": "Tutte le notifiche sono disabilitate per tutti gli obbiettivi.", - "Failed to forget room %(errCode)s": "Impossibile dimenticare la stanza %(errCode)s", - "Fetching third party location failed": "Rilevazione posizione di terze parti fallita", - "(HTTP status %(httpStatus)s)": "(stato HTTP %(httpStatus)s)", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Per diagnosticare i problemi, i log da questo client verranno inviati con questo bug report. Se vuoi solo mandare il testo sopra, togli la spunta a:", - "Loading bug report module": "Caricamento modulo di segnalazione errori", - "Low Priority": "Priorità bassa", - "Members": "Membri", - "Mentions only": "Solo le citazioni", - "Messages containing my display name": "Messaggi contenenti il mio nome visualizzato", - "Messages containing my user name": "Messaggi contenenti il mio nome utente", - "Messages in group chats": "Messaggi nelle chat di gruppo", - "Messages in one-to-one chats": "Messaggi in chat uno-a-uno", - "Messages sent by bot": "Messaggi inviati dai bot", - "more": "altro", - "Mute": "Silenzia", - "No rooms to show": "Nessuna stanza da mostrare", - "Noisy": "Rumoroso", - "Notifications": "Notifiche", - "Notify for all other messages/rooms": "Notifica per tutti gli altri messaggi/stanze", - "Notify me for anything else": "Notificami per qualsiasi altra cosa", - "Off": "Spento", - "On": "Acceso", - "Operation failed": "Operazione fallita", - "Permalink": "Link permanente", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Per favore descrivi l'errore. Cosa hai fatto? Cosa ti aspettavi accadesse? Cos'è successo invece?", - "Please describe the bug and/or send logs.": "Per favore descrivi l'errore e/o invia i log.", - "Please install Chrome or Firefox for the best experience.": "Per favore installaChrome o Firefox per un'esperienza migliore.", + "Custom Server Options": "Opzioni server personalizzate", + "Dismiss": "Chiudi", "powered by Matrix": "offerto da Matrix", - "Quote": "Cita", - "Reject": "Rifiuta", - "Remove %(name)s from the directory?": "Rimuovere %(name)s dalla lista?", - "Remove": "Rimuovi", - "remove %(name)s from the directory.": "rimuovi %(name)s dalla lista.", - "Remove from Directory": "Rimuovi dalla lista", - "Report a bug": "Segnala un errore", - "Resend": "Reinvia", "Riot Desktop on %(platformName)s": "Riot Desktop su %(platformName)s", - "Riot does not know how to join a room on this network": "Riot non sa come entrare nella stanza su questa rete", - "Riot is not supported on mobile web. Install the app?": "Riot non è supportato sul web mobile. Vuoi installare l'applicazione?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot utilizza molte funzioni avanzate del browser, alcune delle quali non sono disponibili o sono sperimentali nel tuo browser attuale.", - "Room not found": "Stanza non trovata", - "Search": "Cerca", - "Search…": "Cerca…", - "Search for a room": "Cerca una stanza", - "Send": "Invia", - "Send logs": "Invia i log", - "Source URL": "URL d'origine", - "Sorry, your browser is not able to run Riot.": "Spiacenti, ma il tuo browser non è in grado di utilizzare Riot.", - "Messages containing keywords": "Messaggi contenenti parole chiave", - "Notification targets": "Obiettivi di notifica", - "Notifications on the following keywords follow rules which can’t be displayed here:": "Le notifiche alle seguenti parole chiave seguono regole che non possono essere mostrate qui:", - "The Home Server may be too old to support third party networks": "Il server Home potrebbe essere troppo vecchio per supportare reti di terze parti", - "There are advanced notifications which are not shown here": "Ci sono notifiche avanzate che non sono mostrate qui", - "The server may be unavailable or overloaded": "Il server potrebbe essere non disponibile o sovraccarico", - "This Room": "Questa stanza", - "Unable to join network": "Impossibile collegarsi alla rete", - "Unable to look up room ID from server": "Impossibile consultare l'ID stanza dal server", - "Unavailable": "Non disponibile", - "Unhide Preview": "Mostra anteprima", + "Riot is not supported on mobile web. Install the app?": "Riot non è supportato sul web mobile. Installare l'applicazione?", "Unknown device": "Dispositivo sconosciuto", - "unknown error code": "codice errore sconosciuto", - "Unnamed room": "Stanza senza nome", - "Update": "Aggiornamento", - "Uploaded on %(date)s by %(user)s": "Caricato il %(date)s da %(user)s", - "Uploading report": "Sto caricando il report", - "View Decrypted Source": "Visualizza sorgente decifrato", - "View Source": "Visualizza sorgente", - "What's New": "Novità", - "What's new?": "Cosa c'è di nuovo?", - "Waiting for response from server": "In attesa di una risposta dal server", - "When I'm invited to a room": "Quando vengo invitato/a in una stanza", - "You cannot delete this image. (%(code)s)": "Non puoi eliminare quest'immagine. (%(code)s)", - "You cannot delete this message. (%(code)s)": "Non puoi eliminare questo messaggio. (%(code)s)", - "You are not receiving desktop notifications": "Non stai ricevendo le notifiche sul desktop", - "World readable": "Leggibile da tutti", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Potresti averli configurati in un client diverso da Riot. Non puoi cambiarli in Riot ma sono comunque applicati", - "Sunday": "Domenica", - "Monday": "Lunedì", - "Tuesday": "Martedì", - "Wednesday": "Mercoledì", - "Thursday": "Giovedì", - "Friday": "Venerdì", - "Saturday": "Sabato", - "Today": "Oggi", - "Yesterday": "Ieri", - "OK": "OK", - "Warning": "Attenzione", - "Checking for an update...": "Controllo aggiornamenti...", - "Error encountered (%(errorDetail)s).": "Errore riscontrato (%(errorDetail)s).", - "No update available.": "Nessun aggiornamento disponibile.", - "Downloading update...": "Scaricamento aggiornamento...", - "You need to be using HTTPS to place a screen-sharing call.": "Devi usare HTTPS per utilizzare una chiamata con condivisione schermo.", - "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Con il tuo attuale browser, l'aspetto e la sensazione generale dell'applicazione potrebbero essere completamente sbagliati e alcune delle funzionalità potrebbero non funzionare. Se vuoi provare comunque puoi continuare, ma non riceverai aiuto per qualsiasi problema tu possa riscontrare!", - "Welcome to Riot.im": "Benvenuto/a su Riot.im", + "You need to be using HTTPS to place a screen-sharing call.": "Devi usare HTTPS per effettuare una chiamata con la condivisione dello schermo.", + "Welcome to Riot.im": "Benvenuti su Riot.im", "Search the room directory": "Cerca nella lista delle stanze", "Chat with Riot Bot": "Chatta con Riot Bot", "Get started with some tips from Riot Bot!": "Inizia con alcuni consigli di Riot Bot!", "General discussion about Matrix and Riot": "Discussioni generali riguardo Matrix e Riot", - "Couldn't load home page": "Impossibile caricare la pagina principale", "Riot/Web & Desktop chat": "Chat su Riot/Web & Desktop", "Riot/iOS & matrix-ios-sdk chat": "Chat su Riot/iOS & matrix-ios-sdk", "Riot/Android & matrix-android-sdk chat": "Chat su Riot/Android & matrix-android-sdk", @@ -168,59 +22,33 @@ "Support for those using and running matrix-appservice-irc": "Supporto per chi usa e amministra matrix-appservice-irc", "Building services on Matrix": "Costruzione servizi su Matrix", "Support for those using the Matrix spec": "Supporto per chi utilizza le specifiche Matrix", - "Design and implementation of E2E in Matrix": "Design e implementazione di E2E in Matrix", + "Design and implementation of E2E in Matrix": "Progetto e implementazione di E2E in Matrix", "Implementing VR services with Matrix": "Implementazione servizi VR con Matrix", "Implementing VoIP services with Matrix": "Implementazione servizi VoIP con Matrix", - "Discussion of the Identity Service API": "Discussione sull'Identity Service API", - "Support for those using, running and writing other bridges": "Supporto per chi usa, amministra e scrive altri bridge", - "Contributing code to Matrix and Riot": "Contributi al codice di Matrix e Riot", - "Co-ordination for Riot/Web translators": "Coordinamento per i traduttori di Riot/Web", - "Failed to change password. Is your password correct?": "Modifica password fallita. La tua password è corretta?", - "You have successfully set a password!": "Hai impostato una password con successo!", - "You can now return to your account after signing out, and sign in on other devices.": "Ora puoi tornare al tuo account dopo esserti disconnesso e accedere su altri dispositivi.", - "Continue": "Continua", - "Please set a password!": "Imposta una password!", - "This will allow you to return to your account after signing out, and sign in on other devices.": "Questo ti permetterà di ritornare al tuo account dopo esserti disconnesso e accedere in altri dispositivi.", - "You have successfully set a password and an email address!": "Hai impostato con successo una password e un indirizzo email!", - "Remember, you can always set an email address in user settings if you change your mind.": "Ricorda, puoi sempre specificare un indirizzo email nelle impostazioni utente se cambi idea.", - "To return to your account in future you need to set a password": "Per tornare nel tuo account in futuro devi impostare una password", - "Set Password": "Imposta Password", - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s su %(osName)s", - "Unable to fetch notification target list": "Impossibile ottenere la lista di obiettivi notifiche", - "Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat & collaborazione decentralizzata e criptata offerta da [matrix]", - "Discussion of all things Matrix!": "Discussione su tutto quanto riguardi Matrix!", + "Discussion of the Identity Service API": "Discussione API del servizio identità", + "Support for those using, running and writing other bridges": "Supporto per chi usa, amministra e scrive altri ponti (bridge)", + "Contributing code to Matrix and Riot": "Contributi di codice per Matrix e Riot", + "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s tramite %(browserName)s su %(osName)s", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat criptate, decentralizzate e collaborazioni offerte da [matrix]", + "Discussion of all things Matrix!": "Discussione su tutto riguardo Matrix!", "Dev chat for the Riot/Web dev team": "Chat per gli sviluppatori di Riot/Web", "Dev chat for the Dendrite dev team": "Chat per gli sviluppatori di Dendrite", - "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Esistono già molte stanze in Matrix, collegate a reti già esistenti (Slack, IRC, Gitter ecc) o indipendenti. Dai un'occhiata all'elenco!", - "Thank you!": "Grazie!", - "Bug report sent": "Rapporto inviato", - "Back": "Indietro", - "Developer Tools": "Strumenti per Sviluppatori", - "Failed to send custom event.": "Impossibile inviare evento personalizzato.", - "Filter results": "Filtra risultati", - "Send Custom Event": "Invia Evento Personalizzato", - "Send Custom State Event": "Invia Evento di Stato Personalizzato", - "Explore Room State": "Esplora Stato Stanza", - "You must specify an event type!": "Devi specificare un tipo di evento!", - "Event sent!": "Evento inviato!", - "Event Type": "Tipo di Evento", - "Event Content": "Contenuto dell'Evento", - "State Key": "Chiave dello Stato", - "Show message in desktop notification": "Mostra i messaggi nelle notifiche desktop", - "Edit": "Modifica", - "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Puoi usare le opzioni server personalizzate per accedere ad altri server Matrix specificando l'indirizzo dell'home server.
    Questo permette di usare Matrix con un account esistente su un home server diverso.

    È anche possibile impostare un diverso identity server, ma in quel caso non sarà possibile invitare utenti attraverso l'indirizzo e-mail o essere invitati attraverso l'indirizzo e-mail.", - "Appear Offline": "Appari offline", - "Away": "Assente", - "Explore Account Data": "Esplora dati account", - "Toolbox": "Strumenti", - "Please install Chrome or Firefox for the best experience.": "Installa Chrome o Firefox per la migliore esperienza d'uso.", - "Safari and Opera work too.": "Anche Safari e Opera vanno bene.", - "Register": "Registrati", - "Rooms": "Stanze", - "Send Account Data": "Invia dati account", - "Unpin Message": "Sblocca messaggio", - "Pin Message": "Blocca messaggio", - "Add rooms to this community": "Aggiungi stanze a questa community", - "Reply": "Rispondi", - "Invite to this community": "Invita a questa comunità" + "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Esistono già molte stanze in Matrix, collegate a reti esistenti (Slack, IRC, Gitter, ecc.) o indipendenti. Controlla l'elenco!", + "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Puoi usare le opzioni server personalizzate per accedere ad altri server Matrix specificando l'indirizzo del server home.
    Questo permette di usare Riot con un account Matrix esistente su un server home diverso.

    È anche possibile impostare un diverso server identità, ma in tal caso non sarà possibile invitare utenti attraverso l'indirizzo e-mail o essere invitati attraverso l'indirizzo e-mail.", + "Co-ordination for Riot translators": "Coordinazione per i traduttori di Riot", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Puoi usare le opzioni di server personalizzato per accedere ad altri server Matrix specificando un URL homeserver diverso. Ciò ti permette di usare Riot con un account Matrix esistente su un homeserver differente.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Puoi anche impostare un server di identità personalizzato, ma non sarai in grado di invitare utenti via email o di essere invitato via email.", + "Sign In": "Accedi", + "Create Account": "Crea account", + "Need help?": "Serve aiuto?", + "Explore rooms": "Esplora stanze", + "Room Directory": "Elenco stanze", + "Unexpected error preparing the app. See console for details.": "Errore inaspettato preparando l'app. Vedi la console per i dettagli.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configurazione non valida: specificare solo uno di default_server_config, default_server_name, o default_hs_url.", + "Invalid configuration: no default server specified.": "Configurazione non valida: nessun server predefinito specificato.", + "This installation of Riot seems to have an invalid server configuration. If you are the administrator, please correct the error below": "Questa installazione di Riot sembra avere una configurazione server non valida. Se sei l'amministratore, correggi l'errore sottostante", + "Your Riot is misconfigured": "Il tuo Riot è configurato male", + "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "La tua configurazione di Riot contiene un JSON non valido. Correggi il problema e ricarica la pagina.", + "The message from the parser is: %(message)s": "Il messaggio dal parser è: %(message)s", + "Invalid JSON": "JSON non valido" } diff --git a/src/i18n/strings/ja.json b/src/i18n/strings/ja.json index e649354afe..022f721cbc 100644 --- a/src/i18n/strings/ja.json +++ b/src/i18n/strings/ja.json @@ -1,76 +1,47 @@ { - "All messages": "全ての発言", - "All messages (noisy)": "全ての発言(通知音あり)", - "Cancel": "取消", - "Close": "閉じる", - "Direct Chat": "対話", - "Favourite": "お気に入り", - "Hide panel": "右欄を非表示", - "Invite to this room": "この部屋へ招待", - "Low Priority": "低優先度", - "Members": "参加者", - "Mentions only": "呼び掛けられた時のみ", - "Mute": "通知しない", - "Notifications": "通知", - "Report a bug": "バグを報告", - "Resend": "再送信", "Riot is not supported on mobile web. Install the app?": "Riotはスマートフォンでの表示に対応していません。できればアプリをインストールして頂けませんでしょうか?", - "Room not found": "部屋が見つかりません", - "Search": "検索", - "Search…": "検索…", - "Send": "送信", - "Sorry, your browser is not able to run Riot.": "申し訳ありません。あなたのブラウザではRiotは動作できません。", - "This Room": "この部屋", - "Waiting for response from server": "サーバからの応答を待っています", - "You cannot delete this message. (%(code)s)": "あなたはこの発言を削除できません (%(code)s)", - "Sunday": "日曜日", - "Monday": "月曜日", - "Tuesday": "火曜日", - "Wednesday": "水曜日", - "Thursday": "木曜日", - "Friday": "金曜日", - "Saturday": "土曜日", - "Today": "今日", - "Yesterday": "昨日", - "Warning": "警告", - "No update available.": "更新はありません。", "Welcome to Riot.im": "Riot.imへようこそ", "Search the room directory": "部屋一覧を検索", - "Failed to change password. Is your password correct?": "パスワード変更に失敗しました。パスワードは正しいですか?", - "Set Password": "パスワードを設定", - "Safari and Opera work too.": "SafariOperaでも動作します。", - "A new version of Riot is available.": "新しいバージョンのRiotが利用可能です。", - "All Rooms": "全ての部屋", - "Changelog": "変更履歴", - "Directory": "部屋一覧", - "Download this file": "この添付ファイルをダウンロード", - "Enable desktop notifications": "デスクトップ画面に通知を行う", - "Enable email notifications": "電子メールでの通知を行う", - "Enable notifications for this account": "このアカウントで通知を行う", - "Failed to change settings": "設定の変更に失敗しました", - "Failed to get public room list": "公開部屋一覧の取得に失敗しました", - "Filter room names": "部屋名検索", - "Forget": "忘れる", - "Leave": "退室", - "Files": "添付ファイル", "Unknown device": "不明な端末", - "Collecting app version information": "アプリのバージョン情報を収集", - "Collecting logs": "ログの収集", - "Uploading report": "レポートのアップロード", - "Messages containing my display name": "自身の表示名を含むメッセージ", - "Messages containing my user name": "自身のユーザー名を含むメッセージ", - "Messages in one-to-one chats": "一対一のチャットでのメッセージ", - "Messages in group chats": "グループチャットのメッセージ", - "When I'm invited to a room": "部屋に招待された時", - "Messages sent by bot": "ボットから送信されたメッセージ", - "Error saving email notification preferences": "電子メール通知設定の保存エラー", - "An error occurred whilst saving your email notification preferences.": "電子メール通知設定を保存中にエラーが発生しました。", - "Keywords": "キーワード", - "Enter keywords separated by a comma:": "キーワードをコンマで区切って入力:", - "OK": "OK", - "Operation failed": "操作に失敗しました", - "Can't update user notification settings": "ユーザー通知の設定を更新できません", - "Failed to update keywords": "キーワードの更新に失敗しました", - "Messages containing keywords": "keywordsを含むメッセージ", - "Add an email address above to configure email notifications": "メール通知を設定するために、メールアドレスを追加してください" + "%(appName)s via %(browserName)s on %(osName)s": "%(appName)sは%(osName)sの%(browserName)s上で動作しています", + "Custom Server Options": "カスタムサーバのオプション", + "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "他のホームサーバのURLを指定することで、他のMatrixサーバにサインインするためにカスタムサーバのオプションを利用できます。
    これにより、他のホームサーバ上で既存のMatrixアカウントを用いてRiotを利用できます。

    カスタムアイデンティティサーバを立てることもできますが、メールアドレスでユーザを招待する、または自身が招待されることはできません。", + "Dismiss": "やめる", + "powered by Matrix": "Matrix の支援により活動しています。", + "Riot Desktop on %(platformName)s": "%(platformName)s向けデスクトップ版Riot", + "You need to be using HTTPS to place a screen-sharing call.": "画面共有通話を行うにはHTTPS通信を使う必要があります。", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "分散型の、暗号化された会話とコラボレーション。[matrix]で動作しています", + "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "既にたくさんの部屋が、既存のネットワーク(Slack、IRC、Gitter等)に接続して、または独立的にMatrixに存在します。ディレクトリを検索してください!", + "Chat with Riot Bot": "Riot Botと会話", + "Get started with some tips from Riot Bot!": "Riot Botにヒントをもらって始めましょう!", + "General discussion about Matrix and Riot": "MatrixとRiotの概略", + "Discussion of all things Matrix!": "Matrixなんでも議論!", + "Riot/Web & Desktop chat": "Riot/Web & デスクトップ版チャット", + "Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk チャット", + "Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk チャット", + "Matrix technical discussions": "Matrixについての技術的な討論", + "Running Matrix services": "Matrixサービスを実行しています", + "Community-run support for Synapse": "コミュニティ運営のSynapseのサポート", + "Admin support for Dendrite": "Dendriteの管理者サポート", + "Announcements about Synapse releases": "Synapseの公開についてのお知らせ", + "Support for those using and running matrix-appservice-irc": "matrix-appservice-ircを利用並びに運営している方へのサポート", + "Building services on Matrix": "Matrix上でのサービスの開発", + "Support for those using the Matrix spec": "Matrixスペックを利用する方へのサポート", + "Design and implementation of E2E in Matrix": "Matrixのデザインとエンドツーエンドの実装", + "Implementing VR services with Matrix": "MatrixでのVRサービスの実装", + "Implementing VoIP services with Matrix": "MatrixでのIP電話サービスの実装", + "Discussion of the Identity Service API": "Identity Service APIの議論", + "Support for those using, running and writing other bridges": "他のブリッジを利用、運営、作成している方へのサポート", + "Contributing code to Matrix and Riot": "MatrixとRiotにコードを提供する", + "Dev chat for the Riot/Web dev team": "Riot/Web開発者チームのための開発者チャット", + "Dev chat for the Dendrite dev team": "Dendrite開発者チームのための開発者チャット", + "Co-ordination for Riot translators": "Riot 翻訳者による共同作業", + "Unexpected error preparing the app. See console for details.": "アプリケーションの準備中に予期しないエラーが発生しました。詳細はコンソールを参照してください。", + "Your Riot is misconfigured": "あなたの Riot は間違って設定されています。", + "Invalid configuration: no default server specified.": "不正な設定です:デフォルトのサーバーが設定されていません。", + "Sign In": "サインイン", + "Create Account": "アカウントを作成する", + "Need help?": "助けが必要ですか?", + "Explore rooms": "部屋を探索する", + "Room Directory": "部屋のディレクトリー" } diff --git a/src/i18n/strings/jbo.json b/src/i18n/strings/jbo.json new file mode 100644 index 0000000000..86c4fc5566 --- /dev/null +++ b/src/i18n/strings/jbo.json @@ -0,0 +1,39 @@ +{ + "Riot is not supported on mobile web. Install the app?": ".i lo samfonxa na kakne lo nu pilno la kibro nu zunti .i .au pei kibycpa le samtci", + "Riot Desktop on %(platformName)s": "la skami nu zunti ci'e la'o gy. %(platformName)s .gy.", + "Unknown device": "lo na'e te djuno se pilno", + "%(appName)s via %(browserName)s on %(osName)s": "la'o gy. %(appName)s .gy. xe be'i la'o gy. %(browserName)s .gy. ci'e la'o gy. %(osName)s .gy.", + "You need to be using HTTPS to place a screen-sharing call.": ".i la .hytytypysys. sarcu lo nu co'a vidni jorne", + "Custom Server Options": "lo macnu se cuxna be fi lo'i samse'u", + "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": ".i zukte lo nu macnu cuxna lo samse'u kei goi ko'a lo nu pilno lo drata samse'u pe la nacmeimei
    .i ko'a se cumki lo nu do pilno lo pilno poi zvati lo drata samse'u pe la nacmeimei

    .i ji'a cumki fa lo nu do pilno lo drata ke prenu datni samse'u kei goi ko'a .i ku'i ko'a to'e rinka la'a lo nu do zvacpe ja se zvacpe", + "Dismiss": "mipri", + "powered by Matrix": ".i la nacmeimei cu cumgau", + "Welcome to Riot.im": ".i fi'i lo pilno be la nu zunti", + "Decentralised, encrypted chat & collaboration powered by [matrix]": ".i la nacmeimei cu cumgau lo mifra je na'e se midju nu tavla je ke kansa gunka", + "Search the room directory": "sisku fi lo'i kumfa pe'a", + "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": ".i ci'e la nacmeimei cu kumfa pe'a fa so'i da noi jorne jo nai no'e jorne lo drata ciste no'u mu'a la .slak. jo'u lo te irci jo'u la .gityr. .i", + "Chat with Riot Bot": "tavla la nu zunti kei sampre", + "Get started with some tips from Riot Bot!": ".i .e'u la nu zunti kei sampre cu sidju ko", + "General discussion about Matrix and Riot": "lo nu casnu be la nacmeimei .e la nu zunti", + "Discussion of all things Matrix!": "lo nu casnu be ro me la nacmeimei", + "Riot/Web & Desktop chat": "lo nu casnu be la kibro nu zunti .e la skami nu zunti", + "Running Matrix services": "lo nu ralte lo samtcise'u pe la nacmeimei", + "Community-run support for Synapse": "lo nu lo cecmu cu sidju fi tu'a la .sinaps.", + "Discussion of the Identity Service API": "lo nu casnu lo prenu datni favgau cimde", + "Contributing code to Matrix and Riot": "lo nu dunda lo samselpla la nacmeimei .a la nu zunti", + "Co-ordination for Riot translators": "lo nu lo fanva pe la nu zunti cu kansa gunka", + "Riot/iOS & matrix-ios-sdk chat": "lo nu casnu la plisyfonkemsamcmu nu zunti .e la'o gy. matrix-ios-sdk .gy.", + "Riot/Android & matrix-android-sdk chat": "lo nu casnu la guglyfonkemsamcmu nu zunti .e la'o gy. matrix-android-sdk .gy.", + "Matrix technical discussions": "lo nu casnu lo zbaske be la nacmeimei", + "Announcements about Synapse releases": "lo notci be lo farvi tcini pe la nirna", + "Support for those using and running matrix-appservice-irc": "lo nu sidju lo pilno ja admine be la'o gy. matrix-appservice-irc .gy.", + "Building services on Matrix": "lo nu finti lo te selfu ji'u la nacmeimei", + "Support for those using the Matrix spec": "lo nu sidju lo pilno be lo sarcu pe la nacmeimei", + "Design and implementation of E2E in Matrix": "lo nu finti lo mulno mifra te platu .a lo samtcise'u be my. ji'u la nacmeimei", + "Support for those using, running and writing other bridges": "lo nu sidju lo pilno ja admine ja finti be lo drata te jorne", + "Dev chat for the Riot/Web dev team": "lo nu lo favgau be la kibro nu zunti cu casnu", + "Dev chat for the Dendrite dev team": "lo nu lo favgau be la nirndendriti cu casnu", + "Implementing VoIP services with Matrix": "lo nu finti lo samtcise'u be fi la .voip. ji'u la nacmeimei", + "Implementing VR services with Matrix": "lo nu finti lo samtcise'u be fi lo na'e fatci munje ji'u la nacmeimei", + "Admin support for Dendrite": "lo nu sidju lo admine be la nirndendriti" +} diff --git a/src/i18n/strings/ka.json b/src/i18n/strings/ka.json new file mode 100644 index 0000000000..76e22da642 --- /dev/null +++ b/src/i18n/strings/ka.json @@ -0,0 +1,39 @@ +{ + "Riot is not supported on mobile web. Install the app?": "Riot ვებსაიტს არ აქვს მხარდაჭერა მობილური მოწყობილობებისთვის. გსურთ აპლიკაციის დაყენება?", + "Riot Desktop on %(platformName)s": "Riot Desktop-ი %(platformName)s-ზე", + "Unknown device": "უცნობი მოწყობილობა", + "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s-ი %(browserName)s-ით %(osName)s-იდან", + "You need to be using HTTPS to place a screen-sharing call.": "ეკრანის გაზიარების ფუნქციის მქონე ზარისთვის საჭიროა, იყენებდეთ HTTPS-ს.", + "Custom Server Options": "პერსონალიზებული სერვერის პარამეტრები", + "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "სხვა Matrix სერვერებზე შესასვლელად შეგიძლიათ გამოიყენოთ პერსონალიზებული სერვერის პარამეტრები განსხვავებული მთავარი სერვერის URL-ის მითითებით
    ეს გაძლევთ საშუალებას, გამოიყენოთ Riot-ი არსებულ Matrix ანგარიშით სხვა მთავარ სერვერზე.

    თქვენ ასევე შეგიძლიათ დააყენოთ პერსონალიზებული იდენტუროის სერვერი, მაგრამ თქვენ ვერ მოიწვევთ მომხმარებლებს ელფოსტის მისამართით და თავად თქვენ ვერ მოგიწვევენ ელფოსტის მისამართით.", + "Dismiss": "უარის თქმა", + "powered by Matrix": "Matrix-ზე დაფუძნებული", + "Welcome to Riot.im": "კეთილი იყოს თქვენი მობრძანება Riot.im-ზე", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "დეცენტრალიზებული, დაშიფრული ჩატი & კოლაბორაცია, დაფუძნებული [matrix]-ზე", + "Search the room directory": "მოძებნა ოთახის სიაში", + "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "მრავალი ოთახი უკვე არსებობს Matrix-ში, რომლებიც არიან დაკავშირებული არსებულ ქსელებთან (Slack, IRC, Glitter და ა.შ) ან დამოუკიდებელი. შეამოწმეთ სია!", + "Chat with Riot Bot": "ისაუბრეთ Riot-ის Bot-თან", + "Get started with some tips from Riot Bot!": "დაიწყეთ რჩევებით Riot-ის Bot-ისგან!", + "General discussion about Matrix and Riot": "ზოგადი დისკუსია Matrix-სა და Riot-ზე", + "Discussion of all things Matrix!": "დისკუსია ყველაფერზე, რაც ეხება Matrix-ს!", + "Riot/Web & Desktop chat": "Riot/ვებ-ისა & Desktop-ის ჩატი", + "Riot/iOS & matrix-ios-sdk chat": "Riot/iOS-ისა & matrix-ios-sdk-ის ჩატი", + "Riot/Android & matrix-android-sdk chat": "Riot/ანდროიდისა & matrix-android-sdk-ის ჩატი", + "Matrix technical discussions": "Matrix-ის ტექნიკური დისკუსიები", + "Running Matrix services": "Matrix-ის სერვისების გამოყენება", + "Community-run support for Synapse": "საზოგადოებისმიერი მხარდაჭერა Synapse-ისთვის", + "Admin support for Dendrite": "ადმინისტრატორის მხარდაჭერა Dendrite-ისთვის", + "Announcements about Synapse releases": "განცხადებები Synapse-ის გამოშვებებთან დაკავშირებით", + "Support for those using and running matrix-appservice-irc": "მხარდაჭერა მათთვის, ვინც იყენებს matrix-appservice-irc-ს", + "Building services on Matrix": "სერვისების Matrix-ზე დაფუძნებით გამომუშავება", + "Support for those using the Matrix spec": "მხარდაჭერა Matrix სპეციფიკაციების გამოყენებასთან დაკავშირებულ კითხვებზე", + "Design and implementation of E2E in Matrix": "პირით-პირამდე დაშიფვრის დაგეგმვა და შესრულება", + "Implementing VR services with Matrix": "VR სერვისების Matrix-ით შესრულება", + "Implementing VoIP services with Matrix": "VoIP სერვისების Matrix-ით შესრულება", + "Discussion of the Identity Service API": "იდენტიფიკაციის სერვისის API-ს დისკუსია", + "Support for those using, running and writing other bridges": "მხარდაჭერა მათთვის, ვინც იყენებს და წერს სხვა ხიდებს", + "Contributing code to Matrix and Riot": "Matrix-ის და Riot-ის გამომუშავებაში მონაწილეობის მიღება", + "Dev chat for the Riot/Web dev team": "დეველოპერების ჩატი Riot/ვებ დეველოპერების გუნდთან", + "Dev chat for the Dendrite dev team": "დეველოპერების ჩატი Dendrite-ის დეველოპერების გუნდთან", + "Co-ordination for Riot translators": "კოორდინაცია Riot-ის მთარგმნელებისთვის" +} diff --git a/src/i18n/strings/ko.json b/src/i18n/strings/ko.json index e09db19db3..b95976b7c8 100644 --- a/src/i18n/strings/ko.json +++ b/src/i18n/strings/ko.json @@ -1,204 +1,53 @@ { - "A new version of Riot is available.": "라이엇의 새 버전을 사용하실 수 있어요.", - "Add an email address above to configure email notifications": "이메일 알림을 설정하기 위해 이메일 주소를 추가해주세요", - "Advanced notification settings": "고급 알림 설정", - "All messages": "모든 메시지", - "All messages (noisy)": "모든 메시지 (크게)", - "All Rooms": "모든 방", - "All notifications are currently disabled for all targets.": "현재 모든 알림이 모든 상대에게서 꺼졌어요.", - "An error occurred whilst saving your email notification preferences.": "이메일 알림을 설정하다가 오류가 일어났어요.", - "Call invitation": "전화가 왔어요", - "Cancel": "취소", - "Cancel Sending": "보내기 취소", - "Can't update user notification settings": "사용자 알림 설정을 갱신할 수 없어요", - "Changelog": "바뀐 점", - "Close": "닫기", - "Collapse panel": "패널 접기", - "Collecting app version information": "앱 버전 정보를 수집하는 중", - "Collecting logs": "로그 수집 중", - "Couldn't find a matching Matrix room": "일치하는 매트릭스 방을 찾을 수 없어요", - "Custom Server Options": "사용자 지정 서버 설정", - "delete the alias.": "가명을 지울게요.", - "Describe your problem here.": "여기에 일어난 문제를 적어주세요.", - "Direct Chat": "직접 이야기하기", - "Directory": "목록", - "Dismiss": "없애기", - "Download this file": "이 파일 받기", - "Enable desktop notifications": "컴퓨터에서 알림 받기", - "Enable email notifications": "이메일로 알림 받기", - "Enable notifications for this account": "이 계정의 알림 받기", - "Error": "오류", - "Error saving email notification preferences": "이메일 알림을 설정하는데 오류가 일어났어요", - "#example": "#예", - "Expand panel": "확장 패널", - "Forget": "잊기", - "Hide panel": "패널 숨기기", - "I understand the risks and wish to continue": "위험할 수 있는 걸 알고 계속하기를 바라요", - "Invite to this room": "이 방에 초대하기", - "Leave": "떠나기", - "Login": "로그인", - "Loading bug report module": "오류 보고 모듈을 불러오는 중", - "Low Priority": "낮은 우선순위", - "Members": "구성원", - "more": "더 보기", - "Mute": "알림 끄기", - "No rooms to show": "보여드릴 방이 없어요", - "Notification targets": "알림 대상", - "Notifications": "알림", - "Off": "끄기", - "On": "켜기", - "Permalink": "고유주소", - "Please describe the bug and/or send logs.": "오류를 적어주시거나 로그를 보내주세요.", - "powered by Matrix": "매트릭스의 지원을 받고 있어요", - "Quote": "인용하기", - "Reject": "거절하기", - "Remove %(name)s from the directory?": "목록에서 %(name)s을 지우시겠어요?", - "Remove": "지우기", - "remove %(name)s from the directory.": "목록에서 %(name)s을 지웠어요.", - "Remove from Directory": "목록에서 지우기", - "Report a bug": "오류 보고하기", - "Resend": "다시 보내기", - "Riot Desktop on %(platformName)s": "%(platformName)s에서 라이엇 컴퓨터판", - "Riot is not supported on mobile web. Install the app?": "라이엇은 모바일 사이트를 지원하지 않아요. 앱을 설치하시겠어요?", - "Room not found": "방을 찾지 못했어요", - "Search": "찾기", - "Search…": "찾기…", - "Search for a room": "방에서 찾기", - "Send": "보내기", - "Send logs": "로그 보내기", - "Source URL": "출처 URL", - "Sorry, your browser is not able to run Riot.": "죄송해요. 브라우저에서 라이엇을 켤 수가 없어요.", - "This Room": "방", - "Unavailable": "이용할 수 없음", - "Unknown device": "알 수 없는 장치", - "unknown error code": "알 수 없는 오류 코드", - "Unnamed room": "이름없는 방", - "Update": "업데이트", - "Uploading report": "보고를 올리는 중", - "What's New": "새로운 점", - "What's new?": "새로운 점은?", - "Waiting for response from server": "서버에서 응답을 기다리는 중", - "You cannot delete this image. (%(code)s)": "이 사진을 지우실 수 없어요. (%(code)s)", - "You cannot delete this message. (%(code)s)": "이 메시지를 지우실 수 없어요. (%(code)s)", - "You are not receiving desktop notifications": "컴퓨터 알림을 받지 않고 있어요", - "Sunday": "일요일", - "Monday": "월요일", - "Tuesday": "화요일", - "Wednesday": "수요일", - "Thursday": "목요일", - "Friday": "금요일", - "Saturday": "토요일", - "Today": "오늘", - "Yesterday": "어제", - "OK": "알았어요", - "Welcome to Riot.im": "라이엇에 오신 걸 환영해요", - "Chat with Riot Bot": "Riot 봇과 이야기하기", - "You have successfully set a password!": "비밀번호를 설정했어요!", - "Continue": "게속하기", - "Please set a password!": "비밀번호를 설정해주세요!", - "%(appName)s via %(browserName)s on %(osName)s": "%(osName)s의 %(browserName)s을 통한 %(appName)s", - "Safari and Opera work too.": "사파리오페라에서도 작동해요.", - "customServer_text": "사용자 지정 서버 설정에서 다른 홈 서버 URL을 지정해 다른 매트릭스 서버에 로그인할 수 있어요.
    이를 통해 라이엇과 다른 홈 서버의 기존 매트릭스 계정을 함께 쓸 수 있죠.

    사용자 지정 ID 서버를 설정할 수도 있지만 이메일 주소로 사용자를 초대하거나 초대받을 수는 없답니다.", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "방 가명 %(alias)s 을 지우고 목록에서 %(name)s를 지우시겠어요?", - "Enable audible notifications in web client": "웹 클라이언트에서 알림 소리 켜기", - "Enable them now": "지금 켜기", - "Enter keywords separated by a comma:": "키워드를 쉼표로 구분해 입력해주세요:", - "Failed to add tag %(tagName)s to room": "방에 %(tagName)s로 지정하지 못했어요", - "Failed to change settings": "설정을 바꾸지 못했어요", - "Failed to forget room %(errCode)s": "방 %(errCode)s를 잊지 못했어요", - "Failed to update keywords": "키워드를 갱신하지 못했어요", - "Failed to get protocol list from Home Server": "홈 서버에서 프로토콜 목록을 얻지 못했어요", - "Failed to get public room list": "공개한 방 목록을 얻지 못했어요", - "Failed to remove tag %(tagName)s from room": "방에서 %(tagName)s 지정을 지우지 못했어요", - "Failed to send report: ": "보고를 보내지 못했어요: ", - "Failed to set direct chat tag": "직접 이야기 지정을 설정하지 못했어요", - "Failed to set Direct Message status of room": "방의 쪽지 상태를 설정하지 못했어요", - "Favourite": "즐겨찾기", - "Fetching third party location failed": "타사 위치를 불러오지 못했어요", - "Files": "파일", - "Filter room names": "방 이름 거르기", - "Forward Message": "메시지 전달", - "Guests can join": "손님이 들어올 수 있어요", - "(HTTP status %(httpStatus)s)": "(HTTP 상태 %(httpStatus)s)", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "문제를 진단하기 위해서, 이 클라이언트의 로그를 오류 보고서와 같이 보낼 거에요. 위 내용만 보내시려면, 체크를 해제하세요:", - "Keywords": "키워드", - "Mentions only": "답만 하기", - "Messages containing my display name": "내 별명이 적힌 메시지", - "Messages containing keywords": "키워드가 적힌 메시지", - "Messages containing my user name": "내 사용자 이름이 적힌 메시지", - "Messages in group chats": "이야기 모임의 메시지", - "Messages in one-to-one chats": "1:1 이야기의 메시지", - "Messages sent by bot": "봇이 보낸 메시지", - "Noisy": "소리", - "Notifications on the following keywords follow rules which can’t be displayed here:": "여기 표시될 수 없는 규칙에 따라 다음 키워드는 알리지 않아요:", - "Notify for all other messages/rooms": "다른 모든 메시지/방 알리기", - "Notify me for anything else": "모든 걸 알리기", - "Operation failed": "작업 실패", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "오류를 설명해주세요. 무슨 일을 하셨나요? 어떤 일을 예상하셨나요? 실제로는 어떤 일이 일어났나요?", - "Please install Chrome or Firefox for the best experience.": "최상의 경험을 위해 크롬이나 파이어폭스를 설치해주세요.", - "Riot does not know how to join a room on this network": "라이엇이 이 네트워크에서 방에 들어가는 법을 알 수 없어요", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "라이엇은 많은 고급 브라우저 기능을 사용해요. 일부는 현재 브라우저에서 쓸 수 없거나 실험적이에요.", - "The Home Server may be too old to support third party networks": "타사 네트워크를 지원하기에는 홈 서버가 너무 오래된 걸 수 있어요", - "There are advanced notifications which are not shown here": "여기 보이지 않는 고급 알림이 있어요", - "The server may be unavailable or overloaded": "서버를 쓸 수 없거나 과부하일 수 있어요", - "Unable to fetch notification target list": "알림 대상 목록을 불러올 수 없어요", - "Unable to join network": "네트워크에 들어갈 수 없어요", - "Unable to look up room ID from server": "서버에서 방 ID를 찾아볼 수 없어요", - "Unhide Preview": "미리보기를 숨기지 않기", - "Uploaded on %(date)s by %(user)s": "by %(user)s가 %(date)s에 올림", - "View Decrypted Source": "해독된 출처 보기", - "View Source": "출처 보기", - "When I'm invited to a room": "방에 초대받았을 때", - "World readable": "세계에 보이기", - "You need to be using HTTPS to place a screen-sharing call.": "화면 공유를 하려면 HTTPS를 써야만 해요.", - "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "현재 브라우저에서는, 응용 프로그램의 모양과 기능이 완벽하게 맞지 않거나, 일부 혹은 모든 기능이 작동하지 않을 수 있어요. 계속할 수는 있지만, 맞닥뜨리는 모든 문제는 직접 해결하셔야해요!", + "Custom Server Options": "맞춤 서버 설정", + "Dismiss": "버리기", + "powered by Matrix": "Matrix의 지원을 받음", + "Riot Desktop on %(platformName)s": "%(platformName)s 용 Riot 데스크톱", + "Riot is not supported on mobile web. Install the app?": "”Riot은 모바일 사이트를 지원하지 않습니다. 앱을 설치하시겠어요?", + "Unknown device": "알 수 없는 기기", + "Welcome to Riot.im": "Riot.im에 오신 것을 환영합니다", + "Chat with Riot Bot": "Riot 봇과 대화", + "%(appName)s via %(browserName)s on %(osName)s": "%(osName)s 용 %(browserName)s에서 연 %(appName)s", + "You need to be using HTTPS to place a screen-sharing call.": "화면 공유 전화를 걸려면 HTTPS를 사용해야 합니다.", "Decentralised, encrypted chat & collaboration powered by [matrix]": "분산되고, 암호화된 대화 & [matrix]의 지원으로 협력", - "Search the room directory": "방 목록을 찾기", + "Search the room directory": "방 목록 찾기", "Get started with some tips from Riot Bot!": "라이엇 봇에게 조언을 받고 시작하세요!", - "General discussion about Matrix and Riot": "매트릭스와 라이엇에 대한 일반 논의", - "Discussion of all things Matrix!": "매트릭스의 모든 것에 대한 토론!", - "Riot/Web & Desktop chat": "라이엇/웹 & 컴퓨터 이야기", - "Riot/iOS & matrix-ios-sdk chat": "라이엇/IOS & matrix-ios-sdk 대화", - "Riot/Android & matrix-android-sdk chat": "매트릭스/안드로이드 & matrix-ios-sdk 대화", - "Matrix technical discussions": "매트릭스 기술 논의", - "Running Matrix services": "매트릭스 서비스 실행", + "General discussion about Matrix and Riot": "Matrix와 Riot에 대한 일반적인 토론", + "Discussion of all things Matrix!": "모든 Matrix에 대한 토론!", + "Riot/Web & Desktop chat": "Riot/웹 & PC 대화", + "Riot/iOS & matrix-ios-sdk chat": "Riot/IOS & matrix-ios-sdk 대화", + "Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-ios-sdk 대화", + "Matrix technical discussions": "Matrix에 대한 기술적인 토론", + "Running Matrix services": "Matrix 서비스 실행 중", "Community-run support for Synapse": "시냅스 커뮤니티 운영 지원", - "Admin support for Dendrite": "덴드라이트 관리 지원", - "Announcements about Synapse releases": "시냅스 공개 발표", - "Support for those using and running matrix-appservice-irc": "matrix-appservice-irc를 사용하고 운영하는 사람들을 지원", - "Building services on Matrix": "매트릭스에서 서비스 구축", + "Admin support for Dendrite": "Dendrite 관리 지원", + "Announcements about Synapse releases": "Synapse 출시에 대한 발표", + "Support for those using and running matrix-appservice-irc": "matrix-appservice-irc를 사용하고 운영하는 사람들을 위한 지원", + "Building services on Matrix": "Matrix에서 서비스 구축", "Support for those using the Matrix spec": "Matrix spec을 사용하는 사람들을 지원", "Design and implementation of E2E in Matrix": "매트릭스에서 E2E 설계와 구현", "Implementing VR services with Matrix": "매트릭스로 VR 서비스 구현", - "Implementing VoIP services with Matrix": "매트릭스로 인터넷전화 서비스 구현", + "Implementing VoIP services with Matrix": "Matrix로 인터넷전화 서비스 구현", "Discussion of the Identity Service API": "ID 서비스 API에 대한 논의", - "Support for those using, running and writing other bridges": "다른 브릿지를 사용하고, 운영하고, 기록하는 사람들을 지원", - "Contributing code to Matrix and Riot": "매트릭스와 라이엇에 코드 기여하기", - "Dev chat for the Riot/Web dev team": "라이엇/웹 개발 팀을 위한 개발자 대화", + "Support for those using, running and writing other bridges": "다른 브릿지를 사용하고, 운영하고, 기록하는 사람들을 위한 지원", + "Contributing code to Matrix and Riot": "Matrix와 Riot에 코드 기여하기", + "Dev chat for the Riot/Web dev team": "Riot/웹 개발 팀을 위한 개발자 대화", "Dev chat for the Dendrite dev team": "덴드라이트 개발 팀을 위한 개발자 대화", - "Co-ordination for Riot/Web translators": "라이엇/웹 번역자를 위한 조정", - "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "기존 네트워크(Slack, IRC, Gitter 등)에 연결되있거나 독립된 많은 방들이 이미 매트릭스에 있어요. 목록을 확인해보세요!", - "Failed to change password. Is your password correct?": "비밀번호를 바꾸지 못했어요. 이 비밀번호가 정말 맞으세요?", - "You can now return to your account after signing out, and sign in on other devices.": "계정을 로그아웃하신 뒤에 계정으로 돌아가, 다른 장치에서 로그인하실 수 있어요.", - "This will allow you to return to your account after signing out, and sign in on other devices.": "이런 식으로 로그아웃한 뒤 계정으로 돌아가, 다른 장치에서 로그인하실 수 있어요.", - "You have successfully set a password and an email address!": "비밀번호와 이메일 주소를 설정했어요!", - "Remember, you can always set an email address in user settings if you change your mind.": "잊지마세요, 마음이 바뀌면 언제라도 사용자 설정에서 이메일 주소를 바꾸실 수 있다는 걸요.", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "라이엇이 아닌 다른 클라이언트에서 구성하셨을 수도 있어요. 라이엇에서 조정할 수는 없지만 여전히 적용되있을 거에요", - "To return to your account in future you need to set a password": "나중에 계정으로 돌아가려면 비밀번호 설정을 해야만 해요", - "Set Password": "비밀번호 설정", - "Warning": "주의", - "Checking for an update...": "업데이트를 확인하는 중...", - "Error encountered (%(errorDetail)s).": "오류가 일어났어요 (%(errorDetail)s).", - "No update available.": "업데이트가 없어요.", - "Downloading update...": "업데이트를 받는 중...", - "Couldn't load home page": "중심 화면을 불러올 수 없어요", - "Show message in desktop notification": "컴퓨터 알림에서 내용 보이기", - "Appear Offline": "미접속으로 표시하기", - "Bug report sent": "오류 보고서를 보냈어요", - "Thank you!": "감사합니다!", - "Back": "돌아가기", - "Edit": "수정하기", - "Toolbox": "도구상자", - "Developer Tools": "개발자 도구", - "Register": "등록" + "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "기존 네트워크(Slack, IRC, Gitter 등)에 연결되있거나 독립된 많은 방이 이미 Matrix에 있습니다. 목록을 확인해보세요!", + "Co-ordination for Riot translators": "Riot 번역자 조합", + "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "사용자정의 서버 설정에서 다른 홈서버 URL를 지정해 다른 Matrix 서버에 접속할 수 있습니다.
    이렇게하면 다른 홈서버에서 기존의 Matrix 계정으로 Riot을 이용할 수 있습니다.

    사용자정의 아이덴티티 서버도 설정할 수 있지만 이메일 주소로 이용자를 초대하거나 자신이 이메일 주소로 초대받을 수 없습니다.", + "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Riot 설정이 올바르지 않은 JSON을 포함하고 있습니다. 문제를 해결한 후, 페이지를 새로고침하세요.", + "The message from the parser is: %(message)s": "파서에서 온 메시지: %(message)s", + "Invalid JSON": "잘못된 JSON", + "Your Riot is misconfigured": "Riot이 잘못 설정됨", + "Unexpected error preparing the app. See console for details.": "앱을 준비하는 동안 예기치 않은 오류가 발생했습니다. 자세한 내용은 콘솔을 확인하세요.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "잘못된 설정: default_server_config 와 defalut_server_name, default_hs_url 중 하나만 지정할 수 있습니다.", + "Invalid configuration: no default server specified.": "잘못된 설정: 기본 서버가 지정되지 않았습니다.", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "다른 홈서버 URL을 지정함으로써 맞춤 서버 옵션을 사용, 다른 Matrix 서버에 로그인할 수 있습니다. 이를 통해 다른 홈서버의 기존 Matrix 계정으로 Riot을 사용할 수 있습니다.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "또한 맞춤 ID 서버를 설정할 수도 있지만, 이메일 주소로 사용자를 초대하거나, 이메일로 직접 초대할 수 없습니다.", + "Sign In": "로그인", + "Create Account": "계정 만들기", + "Need help?": "도움이 필요합니까?", + "Explore rooms": "방 검색", + "Room Directory": "방 목록" } diff --git a/src/i18n/strings/lt.json b/src/i18n/strings/lt.json index bc5e4321bf..3129dcb96b 100644 --- a/src/i18n/strings/lt.json +++ b/src/i18n/strings/lt.json @@ -1,90 +1,39 @@ { - "Waiting for response from server": "Laukiama atsakymo iš serverio", "Unknown device": "Nežinomas įrenginys", - "Collecting app version information": "Renkama programėlės versijos informacija", - "Collecting logs": "Renkami žurnalai", - "Uploading report": "Išsiunčiama ataskaita", - "Keywords": "Raktažodžiai", - "Enter keywords separated by a comma:": "Įveskite kableliais atskirtus raktažodžius:", - "OK": "Gerai", - "Failed to change settings": "Nepavyko pakeisti nustatymų", - "Operation failed": "Operacija nepavyko", - "Failed to update keywords": "Nepavyko atnaujinti raktažodžių", - "Enable email notifications": "Įjungti pranešimus el. paštu", - "Advanced notification settings": "Išplėstiniai pranešimų nustatymai", - "Enable desktop notifications": "Įjungti pranešimus darbalaukyje", - "Sunday": "Sekmadienis", - "Monday": "Pirmadienis", - "Tuesday": "Antradienis", - "Wednesday": "Trečiadienis", - "Thursday": "Ketvirtadienis", - "Friday": "Penktadienis", - "Saturday": "Šeštadienis", - "Today": "Šiandien", - "Yesterday": "Vakar", "powered by Matrix": "veikia su Matrix", - "What's New": "Kas naujo", - "What's new?": "Kas naujo?", - "A new version of Riot is available.": "Yra prieinama nauja Riot versija.", - "To return to your account in future you need to set a password": "Norėdami ateityje sugrįžti į savo paskyrą, turite nusistatyti slaptažodį", - "Set Password": "Nustatyti slaptažodį", - "Checking for an update...": "Tikrinama ar yra atnaujinimų...", - "No update available.": "Nėra prieinamų atnaujinimų.", - "Downloading update...": "Atsiunčiamas atnaujinimas...", - "Warning": "Įspėjimas", - "Error": "Klaida", - "You cannot delete this image. (%(code)s)": "Jūs negalite ištrinti šio paveikslo. (%(code)s)", - "Remove": "Šalinti", - "Close": "Užverti", - "Download this file": "Atsisiųsti šį failą", - "Thank you!": "Ačiū!", - "Cancel": "Atsisakyti", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Aprašykite klaidą. Ką darėte? Ko tikėjotės? Kas iš tikrųjų nutiko?", - "Describe your problem here.": "Čia aprašykite savo problemą.", - "Changelog": "Keitinių žurnalas", - "Back": "Atgal", - "You must specify an event type!": "Privalote nurodyti įvykio tipą!", - "Event sent!": "Įvykis išsiųstas!", - "Event Type": "Įvykio tipas", - "Toolbox": "Parankinė", - "You have successfully set a password!": "Jūs sėkmingai nusistatėte slaptažodį!", - "You have successfully set a password and an email address!": "Jūs sėkmingai nusistatėte slaptažodį ir el. pašto adresą!", - "Continue": "Tęsti", - "(HTTP status %(httpStatus)s)": "(HTTP būsena %(httpStatus)s)", - "Please set a password!": "Prašome nusistatyti slaptažodį!", - "You cannot delete this message. (%(code)s)": "Negalite ištrinti šios žinutės. (%(code)s)", - "Cancel Sending": "Atsisakyti siuntimo", - "Forward Message": "Persiųsti žinutę", - "Unpin Message": "Atsegti žinutę", - "Pin Message": "Prisegti žinutę", - "Permalink": "Pastovioji nuoroda", - "unknown error code": "nežinomas klaidos kodas", - "Reject": "Atmesti", - "Sorry, your browser is not able to run Riot.": "Atleiskite, jūsų naršyklė negali paleisti Riot.", - "I understand the risks and wish to continue": "Aš suprantu riziką ir noriu tęsti", - "Login": "Prisijungti", - "Register": "Registruotis", - "Files": "Failai", - "Notifications": "Pranešimai", - "Rooms": "Kambariai", - "Hide panel": "Slėpti skydelį", - "Invite to this community": "Pakviesti į šią bendruomenę", - "The server may be unavailable or overloaded": "Gali būti, kad serveris yra neprieinamas arba perkrautas", - "Unnamed room": "Kambarys be pavadinimo", - "Remove from Directory": "Šalinti iš katalogo", - "remove %(name)s from the directory.": "šalinti %(name)s iš katalogo.", - "Unable to join network": "Nepavyko prisijungti prie tinklo", - "Riot does not know how to join a room on this network": "Riot nežino kaip prisijungti prie kambario šiame tinkle", - "Room not found": "Kambarys nerastas", - "Couldn't find a matching Matrix room": "Nepavyko rasti atitinkamo Matrix kambario", - "Directory": "Katalogas", - "#example": "#pavyzdys", - "more": "daugiau", - "Expand panel": "Išskleisti skydelį", - "Collapse panel": "Suskleisti skydelį", "Welcome to Riot.im": "Sveiki atvykę į Riot.im", "Chat with Riot Bot": "Kalbėtis su Riot robotu", "General discussion about Matrix and Riot": "Bendros diskusijos apie Matrix ir Riot", "Matrix technical discussions": "Matrix techninės diskusijos", - "Riot is not supported on mobile web. Install the app?": "Riot nėra palaikoma naršant svetainėje mobiliaisiais įrenginiais. Įdiegti programėlę?" + "Riot is not supported on mobile web. Install the app?": "Riot nėra palaikoma naršant svetainėje mobiliaisiais įrenginiais. Įdiegti programėlę?", + "Riot Desktop on %(platformName)s": "Riot Desktop, naudojant %(platformName)s", + "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s per %(browserName)s, naudojant %(osName)s", + "You need to be using HTTPS to place a screen-sharing call.": "Norint skambinti su ekrano bendrinimo funkcija būtina naudoti HTTPS.", + "Custom Server Options": "Tinkinto serverio parametrai", + "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Norėdami prisijungti prie kito nei Matrix serverio, galite naudoti tinkinto serverio parametrus ir nurodyti kito serverio URL adresą.
    Tai leis jums naudoti Riot su esama Matrix paskyra kituose serveriuose.

    Taip pat galite nustatyti tinkintą tapatybės serverį, tačiau tuomet negalėsite pakviesti kitus naudotojus pagal el. paštą, o taip pat ir jie negalės pakviesti jūsų.", + "Dismiss": "Atmesti", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizuoti, šifruoti pokalbiai ir bendradarbiavimas, veikiantis su [matrix]", + "Search the room directory": "Ieškoti kambarių kataloge", + "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Daugybė kambarių jau yra Matrix, susieti prie esamų tinklų (Slack, IRC, Gitter ir t.t.) arba nepriklausomi. Pasižvalgykite kataloge!", + "Get started with some tips from Riot Bot!": "Pradėkite darbo pradžią nuo Riot roboto patarimų!", + "Discussion of all things Matrix!": "Diskusijos apie viską, kas susiję su Matrix!", + "Riot/Web & Desktop chat": "Pokalbiai apie Riot/Web ir Desktop", + "Riot/iOS & matrix-ios-sdk chat": "Pokalbiai apie Riot/iOS ir matrix-ios-sdk", + "Riot/Android & matrix-android-sdk chat": "Pokalbiai apie Riot/Android ir matrix-android-sdk", + "Running Matrix services": "Matrix paslaugų paleidimas", + "Community-run support for Synapse": "Su Synapse susijęs bendruomenės palaikymas", + "Admin support for Dendrite": "Dendrite administratorių palaikymas", + "Announcements about Synapse releases": "Skelbimai apie Synapse laidas", + "Support for those using and running matrix-appservice-irc": "Palaikymas skirtas besinaudojantiems ir prižiūrintiems matrix-appservice-irc", + "Building services on Matrix": "Paslaugų kūrimas, naudojant Matrix", + "Support for those using the Matrix spec": "Palaikymas skirtas besinaudojantiems Matrix specifikacija", + "Design and implementation of E2E in Matrix": "E2E dizainas ir įgyvendinimas ties Matrix", + "Implementing VR services with Matrix": "VR paslaugų įgyvendinimas ties Matrix", + "Implementing VoIP services with Matrix": "VoIP paslaugų įgyvendinimas ties Matrix", + "Discussion of the Identity Service API": "Diskusijos apie tapatybės paslaugos API", + "Support for those using, running and writing other bridges": "Palaikymas skirtas besinaudojantiems, prižiūrintiems ar kuriantiems kitus tinklų tiltus", + "Contributing code to Matrix and Riot": "Matrix ir Riot kodo plėtojimas", + "Dev chat for the Riot/Web dev team": "Kūrėjų pokalbiai, skirti Riot/Web kūrėjų komandai", + "Dev chat for the Dendrite dev team": "Kūrėjų pokalbiai, skirti Dendrite kūrėjų komandai", + "Co-ordination for Riot translators": "Koordinavimas Riot vertėjams" } diff --git a/src/i18n/strings/lv.json b/src/i18n/strings/lv.json index c71e991f3c..642d38753c 100644 --- a/src/i18n/strings/lv.json +++ b/src/i18n/strings/lv.json @@ -1,164 +1,16 @@ { "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s caur %(browserName)s un %(osName)s", - "Safari and Opera work too.": "darbojas arī Safari un Opera.", - "A new version of Riot is available.": "Ir pieejama jauna Riot versija.", - "Add an email address above to configure email notifications": "Pievieno augšā epasta adresi, lai konfigurētu epasta notifikāciju paziņojumus", - "Advanced notification settings": "Īpašie notifikāciju uzstādījumi", - "All messages": "Visas ziņas", - "All messages (noisy)": "Visas ziņas (skaļi)", - "All Rooms": "Visas istabas", - "All notifications are currently disabled for all targets.": "Visi notifikāciju paziņojumi ir atspējoti visiem saņēmējiem.", - "An error occurred whilst saving your email notification preferences.": "Radās kļūda saglabājot tavus epasta notifikāciju ziņu uzstādījumus.", - "Call invitation": "Ielūguma zvans", - "Cancel": "Atcelt", - "Cancel Sending": "Atcelt sūtīšanu", - "Can't update user notification settings": "Nav iespējams atjaunot lietotāja notifikāciju ziņu uzstādījumus", - "Changelog": "Izmaiņu saraksts", - "Close": "Aizvērt", - "Collapse panel": "Aizvērt apgabalu", - "Collecting app version information": "Tiek apkopota programmas versijas informācija", - "Collecting logs": "Tiek apkopoti logfaili", - "Couldn't find a matching Matrix room": "Nav iespējams noteikt atbilstošo Matrix istabu", - "Custom Server Options": "Īpaši servera uzstādījumi", - "customServer_text": "Tu vari izmantot īpašus servera uzstādījumus, lai pierakstītos citos Matrix serveros, norādot atšķirīgu servera URL adresi.
    Tas atļaus Tev izmantot Riot ar jau eksistējošu Matrix kontu citā serverī.

    Tu vari norādīt arī īpašu identitātes serveri, bet tad nevarēsi uzaicināt lietotājus pēc epasta adreses,kā arī pēc tās tikt uzaicināts/a.", - "Discussion of the Identity Service API": "Diskusija par identitātes servisa API", - "delete the alias.": "dzēst aizstājējvārdu.", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Dzēst istabas aizstājējvārdu %(alias)s un dzēst %(name)s no kataloga?", - "Describe your problem here.": "Apraksti savu problēmu šeit.", - "Direct Chat": "Tiešais čats", - "Directory": "Katalogs", - "Dismiss": "Noņemt", - "Download this file": "Lejupielādēt šo failu", - "Enable audible notifications in web client": "Iespējot skaņas paziņojumus web klienta programmā", - "Enable desktop notifications": "Iespējot darbvirsmas notifikāciju paziņojumus", - "Enable email notifications": "Iespējot epasta notifikāciju paziņojumus", - "Enable notifications for this account": "Iespējot notifikāciju paziņojumus šim kontam", - "Enable them now": "Iespējot tos tagad", - "Enter keywords separated by a comma:": "Ievadi atslēgvārdus, atdalītus ar komatu:", - "Error": "Kļūda", - "Error saving email notification preferences": "Kļūda saglabājot epasta notifikāciju paziņojumu uzstādījumus", - "#example": "#piemērs", - "Expand panel": "Izvērst apgabalu", - "Failed to add tag %(tagName)s to room": "Neizdevās pievienot birku %(tagName)s istabai", - "Failed to change settings": "Neizdevās mainīt uzstādījumus", - "Failed to forget room %(errCode)s": "Neizdevās \"aizmirst\" istabu %(errCode)s", - "Failed to update keywords": "Neizdevās atjaunot atslēgvārdus", - "Failed to get protocol list from Home Server": "Neizdevās iegūt protokolu sarakstu no mājas servera", - "Failed to get public room list": "Neizdevās iegūt publisko istabu sarakstu", - "Failed to remove tag %(tagName)s from room": "Neizdevās dzēst istabas birku %(tagName)s", - "Failed to send report: ": "Neizdevās nosūtīt atskaiti: ", - "Failed to set direct chat tag": "Neizdevās uzstādīt birku tiešajam čatam", - "Continue": "Turpināt", - "Failed to change password. Is your password correct?": "Neizdevās mainīt paroli. Vai tava parole ir pareiza?", - "Favourite": "Favorīts", - "Mute": "Apklusināt", - "Notifications": "Paziņojumi", - "OK": "LABI", - "Operation failed": "Darbība neizdevās", - "Remove": "Dzēst", - "Search": "Meklēt", - "unknown error code": "nezināms kļūdas kods", - "Monday": "Pirmdiena", - "Tuesday": "Otrdiena", - "Wednesday": "Trešdiena", - "Thursday": "Ceturtdiena", - "Friday": "Piektdiena", - "Saturday": "Sestdiena", - "Sunday": "Svētdiena", - "powered by Matrix": "spēcināts ar Matrix", - "Failed to set Direct Message status of room": "Neizdevās iestatīt istabas tiešo ziņu statusu", - "Fetching third party location failed": "Neizdevās iegūt trešās puses atrašanās vietu", - "Files": "Faili", - "Filter room names": "Filtrēt pēc istabu nosaukuma", - "Forget": "\"Aizmirst\"", - "Forward Message": "Pārsūtīt ziņu", - "Guests can join": "Viesi var pievienoties", - "Hide panel": "Slēpt apgabalu", - "(HTTP status %(httpStatus)s)": "(HTTP statuss %(httpStatus)s)", - "I understand the risks and wish to continue": "Es saprotu riskus un vēlos turpināt", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Problēmu diagnosticēšanas ietvaros, šī klienta logfaili tiks nosūtīti kopā ar šo kļūdas paziņojumu. Ja vēlies nosūtīt vienīgi zemākesošo tekstu, lūdzu atķeksē:", - "Invite to this room": "Uzaicināt uz šo istabu", - "Keywords": "Atslēgvārdi", - "Leave": "Atstāt", - "Login": "Pierakstīties", - "Loading bug report module": "Ielādējas kļūdas ziņojumu modulis", - "Low Priority": "Zema prioritāte", - "Members": "Biedri", - "Mentions only": "Vienīgi atsauces", - "Messages containing my display name": "Ziņas, kuras satur manu redzamo vārdu", - "Messages containing keywords": "Ziņas,kuras satur atslēgvārdus", - "Messages containing my user name": "Ziņas, kuras satur manu lietotājvārdu", - "Messages in group chats": "Ziņas grupas čatos", - "Messages in one-to-one chats": "Ziņas viens-pret-vienu čatos", - "Messages sent by bot": "Botu nosūtītās ziņas", - "more": "vairāk", - "No rooms to show": "Nav istabu, ko parādīt", - "Noisy": "Trokšņains", - "Notification targets": "Notifikācijas paziņojuma mērķi", - "Notifications on the following keywords follow rules which can’t be displayed here:": "Paziņojumi par šādiem atslēgvārdiem atbilst noteikumiem, kurus šeit nevar parādīt:", - "Notify for all other messages/rooms": "Paziņot par visām citām ziņām/istabām", - "Notify me for anything else": "Paziņot man par jebko citu", - "Off": "Izslēgts", - "On": "Ieslēgts", - "Permalink": "Pastāvīgā saite", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Lūdzu, apraksti kļūdu. Ko Tu darīji? Kas tika gaidīts, lai notiktu? Kas rezultātā notika?", - "Please describe the bug and/or send logs.": "Lūdzu apraksti kļūdu un/vai nosūti logfailus.", - "Please install Chrome or Firefox for the best experience.": "Lūdzu instalē Chrome vai Firefox pārlūku labākai pārlūkošanas pieredzei.", - "Quote": "Citāts", - "Reject": "Noraidīt", - "Remove %(name)s from the directory?": "Dzēst %(name)s no kataloga?", - "remove %(name)s from the directory.": "dzēst %(name)s no kataloga.", - "Remove from Directory": "Dzēst no kataloga", - "Report a bug": "Paziņot par kļūdu", - "Resend": "Nosūtīt atkārtoti", + "Custom Server Options": "Iestatāmās servera opcijas", + "Discussion of the Identity Service API": "Diskusija par Identitātes servisa API", + "Dismiss": "Atteikt", + "powered by Matrix": "Tiek darbināta ar Matrix", "Riot Desktop on %(platformName)s": "Riot darbvirsma %(platformName)s", - "Riot does not know how to join a room on this network": "Riot neatpazina iespēju pievienoties istabai šajā tīklā", "Riot is not supported on mobile web. Install the app?": "Riot netiek atbalstīts mobilajā versijā. Instalēt aplikāciju?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot izmanto daudzas īpašās pārlūka iespējas, no kurām dažas var nebūt pieejamas vai ir eksperimentālas tavā pašreizējā pārlūkā.", - "Room not found": "Istaba nav atrasta", - "Search…": "Meklēt…", - "Search for a room": "Meklēt istabu", - "Send": "Nosūtīt", - "Send logs": "Nosūtīt logfailus", - "Source URL": "Avota URL adrese", - "Sorry, your browser is not able to run Riot.": "Atvaino, diemžēl tavs pārlūks nespēj darboties ar Riot.", - "The Home Server may be too old to support third party networks": "Mājas serveris var būt pārāk novecojis, lai atbalstītu trešo pušu tīmekļa resurursus", - "There are advanced notifications which are not shown here": "Ir īpašie notifikāciju paziņojumi, kuri šeit nav redzami", - "The server may be unavailable or overloaded": "Serveris var nebūt pieejams vai ir pārslogots", - "This Room": "Šī istaba", - "Unable to fetch notification target list": "Nav iespējams iegūt notifikāciju paziņojumu mērķu sarakstu", - "Unable to join network": "Nav iespējams pievienoties tīmeklim", - "Unable to look up room ID from server": "Nav iespējams iegūt istabas ID no servera", - "Unavailable": "Nav pieejams", - "Unhide Preview": "Nerādīt priekšskatījumu", "Unknown device": "Nezināma ierīce", - "Unnamed room": "Nezināma istaba", - "Update": "Atjaunot", - "Uploaded on %(date)s by %(user)s": "Augšuplādēts %(date)s no %(user)s", - "Uploading report": "Augšuplādē atskaiti", - "View Decrypted Source": "Skatīt atšifrētu avotu", - "View Source": "Skatīt avotu", - "What's New": "Kas jauns", - "What's new?": "Kas jauns?", - "Waiting for response from server": "Gaida atbildi no servera", - "When I'm invited to a room": "Kad esmu uzaicināts/a istabā", - "World readable": "Lasāms pasaulei", - "You cannot delete this image. (%(code)s)": "Tu nevari dzēst šo attēlu. (%(code)s)", - "You cannot delete this message. (%(code)s)": "Tu nevari dzēst šo ziņu. (%(code)s)", - "You are not receiving desktop notifications": "Tu nesaņem darbvirsmas notifikāciju paziņojumus", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Tu, iespējams, konfigurēji tās kādā citā klientā, nevis Riot. Tu nevari pielāgot tos Riot, bet tie joprojām ir spēkā", - "Today": "Šodien", - "Yesterday": "Vakar", - "Warning": "Brīdinājums", - "Checking for an update...": "Lūkojamies pēc atjauninājuma...", - "Error encountered (%(errorDetail)s).": "Notika kļūda (%(errorDetail)s).", - "No update available.": "Atjauninājumi nav pieejami.", - "Downloading update...": "Lejupielādējam atjauninājumus...", - "You need to be using HTTPS to place a screen-sharing call.": "Tev ir nepieciešams izmantot HTTPS savienojumu, lai izmantotu ekrāna kopīgošanas zvanu.", - "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Tavā pašreizējā pārlūkā aplikācijas izskats un uzvedība var būt pilnīgi neatbilstoša, kā arī dažas no visām funkcijām var nedarboties. Ja vēlies turpināt izmantot šo pārlūku, Tu vari arī turpināt, apzinoties, ka šajā gadījumā esi viens/a ar iespējamo problēmu!", - "Welcome to Riot.im": "Laipni lūdzam Riot.im", - "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizēta, šifrēta čata & sistēma, spēcināta ar [matrix]", - "Search the room directory": "Meklēt istabu katalogu", + "You need to be using HTTPS to place a screen-sharing call.": "Lai izmantotu ekrāna kopīgošanas zvanu, nepieciešams izmantot HTTPS savienojumu.", + "Welcome to Riot.im": "Esiet gaidīti Riot.im", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizēta, šifrēta čata & kopdarbošanās sistēma uz [matrix] bāzes", + "Search the room directory": "Meklēt istabu katalogā", "Chat with Riot Bot": "Pačatot ar Riot botu", "Get started with some tips from Riot Bot!": "Iepazīsties ar dažiem knifiem no Riot bota!", "General discussion about Matrix and Riot": "Galvenā diskusija par Matrix un Riot", @@ -167,29 +19,35 @@ "Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk čats", "Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk čats", "Matrix technical discussions": "Matrix tehniskās diskusijas", - "Running Matrix services": "Izmantot Matrix pakalpojumus", - "Community-run support for Synapse": "Komūnas atbalsts Synapse", - "Admin support for Dendrite": "Administrācijas atbalsts Dendrite", - "Announcements about Synapse releases": "Paziņojumi par Synapse izlaidumiem", + "Running Matrix services": "Matrix pakalpojumu izmantošana", + "Community-run support for Synapse": "\"Synapse\" komūnas nodrošināts atbalsts", + "Admin support for Dendrite": "Administrotora atbalsts \"Dendrite\"", + "Announcements about Synapse releases": "Paziņojumi par \"Synapse\" izlaidumiem", "Support for those using and running matrix-appservice-irc": "Atbalsts tiem, kuri izmanto matrix-appservice-irc", - "Building services on Matrix": "Pakalpojumu būvēšana uz Matrix", + "Building services on Matrix": "Uz Matrix bāzētu pakalpojumu izveide", "Support for those using the Matrix spec": "Atbalsts tiem, kuri izmanto Matrix specifikācijas", - "Design and implementation of E2E in Matrix": "Dizains un E2E implementācija Matrix", - "Implementing VR services with Matrix": "VR servisu implementācija Matrix", - "Implementing VoIP services with Matrix": "VoIP pakalpojumu implementācija Matrix", - "Support for those using, running and writing other bridges": "Atbalsts tiem, kuri izmanto un raksta citus \"tilta\" risinājumus", - "Contributing code to Matrix and Riot": "Dot ieguldījumu Matrix and Riot kodā", + "Design and implementation of E2E in Matrix": "E2E arhitektūra un iedzīvināšana Matrix", + "Implementing VR services with Matrix": "VR pakalpojumu iedzīvināšana Matrix", + "Implementing VoIP services with Matrix": "VoIP pakalpojumu iedzīvināšana Matrix", + "Support for those using, running and writing other bridges": "Atbalsts tiem, kuri izmanto un rada citus \"tiltu\" risinājumus", + "Contributing code to Matrix and Riot": "Dot ieguldījumu Matrix and Riot kodā un tulkojumā", "Dev chat for the Riot/Web dev team": "Riot/Web izstrādātāju komandas čats", "Dev chat for the Dendrite dev team": "Dendrite izstrādatāju komandas čats", - "Co-ordination for Riot/Web translators": "Riot/Web tulkotāju koordinācija", - "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Matrix sistēmā pastāv neskaitāmas neatkarīgas vai eksistējošiem tīmekļa resursiem (Slack, IRC, Gitter utml.) piesaistītas istabas. Ar tām vari iepazīties katalogā!", - "You have successfully set a password!": "Tu veiksmīgi nomainīji paroli!", - "You can now return to your account after signing out, and sign in on other devices.": "Tu vari tagad atgriezties savā kontā pēc izrakstīšanās, un pierakstīties no citām ierīcēm.", - "Please set a password!": "Lūdzu iestati paroli!", - "This will allow you to return to your account after signing out, and sign in on other devices.": "Tas atļaus Tev atgriezties savā kontā pēc izrakstīšanās, un pierakstīties no citām ierīcēm.", - "You have successfully set a password and an email address!": "Tu veiksmīgi iestatīji paroli un epasta adresi!", - "Remember, you can always set an email address in user settings if you change your mind.": "Atceries, ka Tu vienmēr vari iestatīt epasta adresi lietotāja uzstādījumos, ja mainīsi domas.", - "To return to your account in future you need to set a password": "Lai nākotnē atgrieztos savā kontā, tev būs nepieciešams iestatīt paroli", - "Set Password": "Iestatīt paroli", - "Couldn't load home page": "Neizdevās ielādēt sākumlapu" + "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Matrix-ā pastāv daudzas neatkarīgas un/vai eksistējošiem tīmekļa resursiem (Slack, IRC, Gitter u.tml.) piesaistītas istabas. Ieskaties katalogā!", + "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Tu vari lietot \"custom\" servera opcijas, lai ielogotos citos Matrix serveros, norādot citu Bāzes servera URL.
    Tas atļaus tev lietot Riot ar esošo Matrix kontu uz cita Bāzes servera.

    Tu arī vari uzstādīt atsevišķu Identitāšu serveri, taču tad Tev nebūs iespēju uzaicināt lietotājus, izmantojot epasta adresi, vai pašam tikt uzaicinātam, izmantojot epasta adresi.", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Varat izmantot pielāgotās servera opcijas, lai pierakstītos citos Matrix serveros, norādot citu mājas servera URL. Tas ļauj jums izmantot Riot ar esošu Matrix kontu citā mājas serverī.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Varat arī iestatīt pielāgotu identitātes serveri, bet jūs nevarēsiet uzaicināt lietotājus izmantojot e-pasta adresi, kā arī tikt uzaicināts pēc e-pasta adreses.", + "Sign In": "Ienākt", + "Create Account": "Izveidot kontu", + "Need help?": "Nepieciešama palīdzība?", + "Explore rooms": "Atklāt istabas", + "Room Directory": "Istabu Katalogs", + "Unexpected error preparing the app. See console for details.": "Negaidīta kļūda, sagatavojot lietotni. Sīkāku informāciju skatiet konsolē.", + "This installation of Riot seems to have an invalid server configuration. If you are the administrator, please correct the error below": "Šai Riot instalācijai ir nekorekta servera konfigurācija. Ja esat administrators, lūdzu, izlabojiet tālāk norādīto kļūdu", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Nederīga konfigurācija: var norādīt tikai vienu no default_server_config, default_server_name, vai default_hs_url.", + "Invalid configuration: no default server specified.": "Nekorekta konfigurācija: nav norādīts noklusējuma serveris.", + "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Jūsu Riot konfigurācijā ir nederīgs JSON. Lūdzu, izlabojiet problēmu un ielādējiet lapu atkārtoti.", + "The message from the parser is: %(message)s": "Ziņojums no parsētāja ir: %(message)s", + "Invalid JSON": "Nederīgs JSON", + "Your Riot is misconfigured": "Jūsu Riot ir nepareizi konfigurēts" } diff --git a/src/i18n/strings/ml.json b/src/i18n/strings/ml.json index 7608450287..dd8df9ade0 100644 --- a/src/i18n/strings/ml.json +++ b/src/i18n/strings/ml.json @@ -1,150 +1,12 @@ { - "Add an email address above to configure email notifications": "ഇ മെയില്‍ അറിയിപ്പുകൾ ലഭിക്കാന്‍ മുകളില്‍ ഇ-മെയില്‍ വിലാസം നല്‍കൂ", - "All messages": "എല്ലാ സന്ദേശങ്ങളും", - "All messages (noisy)": "എല്ലാ സന്ദേശങ്ങളും (ഉച്ചത്തിൽ)", "%(appName)s via %(browserName)s on %(osName)s": "%(osName)sല്‍ %(browserName)s വഴി %(appName)s", - "Safari and Opera work too.": "സഫാരിയിലുംപിന്നെ ഓപ്പേറയിലുംപ്രവര്‍ത്തിക്കുന്നു.", - "A new version of Riot is available.": "റയട്ടിന്റെ ഒരു പുതിയ പതിപ്പ് ലഭ്യമാണ്.", - "Advanced notification settings": "അറിയപ്പുകളുടെ സങ്കീര്‍ണമായ സജ്ജീകരണങ്ങള്‍", - "All Rooms": "എല്ലാ മുറികളും കാണുക", - "All notifications are currently disabled for all targets.": "അറിയിപ്പുകളെല്ലാം നിര്‍ത്തിയിരിയ്ക്കുന്നു.", - "An error occurred whilst saving your email notification preferences.": "ഇ-മെയില്‍ വഴി അറിയിയ്ക്കാനുള്ള നിങ്ങളുടെ സജ്ജീകരണങ്ങള്‍ സൂക്ഷിക്കുന്നതില്‍ ഒരു പ്രശ്നമുണ്ടായി.", - "Call invitation": "വിളിയ്ക്കുന്നു", - "Cancel": "റദ്ദാക്കുക", - "Cancel Sending": "അയയ്ക്കുന്നത് റദ്ദാക്കുക", - "Can't update user notification settings": "ഉപയോക്താവിനെ അറിയിയ്ക്കാനുള്ള സജ്ജീകരണം പുതുക്കാനായില്ല", - "Changelog": "മാറ്റങ്ങളുടെ നാള്‍വഴി", - "Close": "അടയ്ക്കുക", - "Collapse panel": "പാനല്‍ കൊളാപ്സ് ചെയ്യുക", - "Collecting app version information": "ആപ്പ് പതിപ്പു വിവരങ്ങള്‍ ശേഖരിക്കുന്നു", - "Collecting logs": "നാള്‍വഴി ശേഖരിക്കുന്നു", - "Couldn't find a matching Matrix room": "ആവശ്യപ്പെട്ട മാട്രിക്സ് റൂം കണ്ടെത്താനായില്ല", "Custom Server Options": "കസ്റ്റം സെര്‍വര്‍ ഓപ്ഷനുകള്‍", - "delete the alias.": "ഏലിയാസ് നീക്കം ചെയ്യുക.", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "റൂം ഏലിയാസ് %(alias)s നീക്കം ചെയ്യുകയും %(name)s കള്‍ ഡയറക്ടറിയില്‍ നിന്നും നീക്കം ചെയ്യുകയും ചെയ്യുക ?", - "Describe your problem here.": "നിങ്ങള്‍ നേരിട്ട പ്രശ്നം ഇവിടെ വിവരിക്കാം.", - "Direct Chat": "നേരിട്ടുള്ള ചാറ്റ്", - "Directory": "ഡയറക്ടറി", "Dismiss": "ഒഴിവാക്കുക", - "Download this file": "ഈ ഫയല്‍ ഡൌണ്‍ലോഡ് ചെയ്യുക", - "Enable audible notifications in web client": "വെബ് പതിപ്പിലെ അറിയിപ്പുകള്‍ കേള്‍ക്കാവുന്നതാക്കുക", - "Enable desktop notifications": "ഡെസ്ക്ടോപ്പ് നോട്ടിഫിക്കേഷനുകള്‍ ഇനേബിള്‍ ചെയ്യുക", - "Enable email notifications": "ഇമെയില്‍ നോട്ടിഫിക്കേഷനുകള്‍ ഇനേബിള്‍ ചെയ്യുക", - "Enable notifications for this account": "ഈ അക്കൌണ്ടില്‍ നോട്ടിഫിക്കേഷനുകള്‍ ഇനേബിള്‍ ചെയ്യുക", - "Enable them now": "ഇപ്പോള്‍ ഇനേബിള്‍ ചെയ്യുക", - "Enter keywords separated by a comma:": "കീവേഡുകളെ കോമ കൊണ്ട് വേര്‍ത്തിരിച്ച് ടൈപ്പ് ചെയ്യുക :", - "Error": "എറര്‍", - "Error saving email notification preferences": "ഇമെയില്‍ നോട്ടിഫിക്കേഷന്‍ സജ്ജീകരണങ്ങള്‍ സൂക്ഷിക്കവേ എറര്‍ നേരിട്ടു", - "#example": "#ഉദാഹരണം", - "Expand panel": "പാനല്‍ വലുതാക്കുക", - "Failed to add tag %(tagName)s to room": "റൂമിന് %(tagName)s എന്ന ടാഗ് ആഡ് ചെയ്യുവാന്‍ സാധിച്ചില്ല", - "Failed to change settings": "സജ്ജീകരണങ്ങള്‍ മാറ്റുന്നവാന്‍ സാധിച്ചില്ല", - "Failed to forget room %(errCode)s": "%(errCode)s റൂം ഫോര്‍ഗെറ്റ് ചെയ്യുവാന്‍ സാധിച്ചില്ല", - "Failed to update keywords": "കീവേഡുകള്‍ പുതുക്കുവാന്‍ സാധിച്ചില്ല", - "Failed to get protocol list from Home Server": "ഹോം സെര്‍വറില്‍ നിന്ന് പ്രോട്ടോക്കോള്‍ ലിസ്റ്റ് നേടാന്‍ സാധിച്ചില്ല", - "Failed to get public room list": "പബ്ലിക്ക് റൂം ലിസ്റ്റ് നേടാന്‍ സാധിച്ചില്ല", - "Failed to remove tag %(tagName)s from room": "റൂമില്‍ നിന്നും %(tagName)s ടാഗ് നീക്കം ചെയ്യുവാന്‍ സാധിച്ചില്ല", - "Failed to send report: ": "റിപ്പോര്‍ട്ട് അയക്കുവാന്‍ സാധിച്ചില്ല : ", - "Failed to set direct chat tag": "ഡയറക്റ്റ് ചാറ്റ് ടാഗ് സെറ്റ് ചെയ്യാനായില്ല", - "Failed to set Direct Message status of room": "റൂമില്‍ നിന്നും ഡയറക്റ്റ് മെസേജ് സ്റ്റാറ്റസ് സജ്ജീകരിക്കാന്‍ കഴിഞ്ഞില്ല", - "Favourite": "പ്രിയപ്പെട്ടവ", - "Fetching third party location failed": "തേഡ് പാര്‍ട്ടി ലൊക്കേഷന്‍ ഫെച്ച് ചെയ്യാന്‍ കഴിഞ്ഞില്ല", - "Files": "ഫയലുകള്‍", - "Filter room names": "റൂം പേരുകള്‍ ഫില്‍ട്ടര്‍ ചെയ്യുക", - "Forget": "മറക്കുക", - "Forward Message": "സന്ദേശം ഫോര്‍വേഡ് ചെയ്യുക", - "Guests can join": "അതിഥികള്‍ക്കും പ്രവേശിക്കാം", - "Hide panel": "പാനല്‍ ഒളിപ്പിക്കുക", - "(HTTP status %(httpStatus)s)": "(HTTP സ്റ്റാറ്റസ് %(httpStatus)s)", - "I understand the risks and wish to continue": "കുഴപ്പമാകാന്‍ സാധ്യതയുണ്ടെന്നെനിയ്ക്കു് മനസ്സിലായി, എന്നാലും മുന്നോട്ട് പോകുക", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "നേരിട്ട പ്രശ്നം മനസ്സിലാക്കാന്‍, ഈ ക്ലയന്റില്‍ നിന്നുള്ള നാള്‍വഴികള്‍ ബഗ് റിപ്പോര്‍ട്ടിനൊപ്പം അയയ്ക്കും. അതിനു പകരം ഈ എഴുത്ത് മാത്രം അയച്ചാല്‍ മതിയെങ്കില്‍ ദയവായി ശരിച്ഛിഹ്നം ഒഴിവാക്കുക:", - "Invite to this room": "ഈ റൂമിലേക്ക് ക്ഷണിക്കുക", - "Keywords": "കീവേഡുകള്‍", - "Leave": "വിടവാങ്ങുക", - "Login": "ലോഗിന്‍", - "Loading bug report module": "പിഴവുകള്‍ അറിയിയ്ക്കാനുള്ള ഘടകം ചേര്‍ക്കുന്നു", - "Low Priority": "താഴ്ന്ന പരിഗണന", - "Members": "അംഗങ്ങള്‍", - "Mentions only": "മെന്‍ഷനുകള്‍ മാത്രം", - "Messages containing my display name": "എന്റെ പേര് അടങ്ങിയിരിക്കുന്ന സന്ദേശങ്ങള്‍ക്ക്", - "Messages containing keywords": "കീവേഡുകള്‍അടങ്ങിയ സന്ദേശങ്ങള്‍ക്ക്", - "Messages containing my user name": "എന്റെ യൂസര്‍ നെയിം അടങ്ങിയിരിക്കുന്ന സന്ദേശങ്ങള്‍ക്ക്", - "Messages in group chats": "ഗ്രൂപ്പ് ചാറ്റുകളിലെ സന്ദേശങ്ങള്‍ക്ക്", - "Messages in one-to-one chats": "നേര്‍ക്കുനേര്‍ ചാറ്റിലെ സന്ദേശങ്ങള്‍ക്ക്", - "Messages sent by bot": "ബോട്ട് അയയ്ക്കുന്ന സന്ദേശങ്ങള്‍ക്ക്", - "more": "കൂടുതല്‍", - "Mute": "നിശ്ശബ്ദം", - "No rooms to show": "കാണിക്കാന്‍ റൂമുകളില്ല", - "Noisy": "ഉച്ചത്തില്‍", - "Notification targets": "നോട്ടിഫിക്കേഷന്‍ ടാര്‍ഗെറ്റുകള്‍", - "Notifications": "നോട്ടിഫിക്കേഷനുകള്‍", - "Operation failed": "ശ്രമം പരാജയപ്പെട്ടു", - "Permalink": "പെര്‍മാലിങ്ക്", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "ബഗ് വിശദീകരിക്കുക. എന്ത് ചെയ്തപ്പോഴാണ് വന്നത് ? എന്തായിരുന്നു പ്രതീക്ഷിച്ചിരുന്നത് ? ശരിക്കും എന്താണ് സംഭവിച്ചത് ?", - "Please describe the bug and/or send logs.": "ബഗ് വിശദീകരിക്കുക , കൂടെ / അല്ലെങ്കില്‍ നാള്‍വഴികളും അയക്കുക.", - "Please install Chrome or Firefox for the best experience.": "ഏറ്റവും മികച്ച ഉപയോഗത്തിനായി ഗൂഗിള്‍ ക്രോംബ്രൌസറോ അല്ലെങ്കില്‍ ഫയര്‍ഫോക്സ് ബ്രൌസറോ ഇന്‍സ്റ്റാള്‍ ചെയ്യൂ.", "powered by Matrix": "മാട്രിക്സില്‍ പ്രവര്‍ത്തിക്കുന്നു", - "Quote": "ഉദ്ധരിക്കുക", - "Reject": "നിരസിക്കുക", - "Remove %(name)s from the directory?": "%(name)s കള്‍ ഡയറക്റ്ററിയില്‍ നിന്നും മാറ്റണോ ?", - "Remove": "നീക്കം ചെയ്യുക", - "Remove from Directory": "ഡയറക്റ്ററിയില്‍ നിന്നും നീക്കം ചെയ്യുക", - "Report a bug": "ബഗ് റിപ്പോര്‍ട്ട് ചെയ്യുക", - "Resend": "വീണ്ടും അയയ്ക്കുക", "Riot Desktop on %(platformName)s": "%(platformName)s ലെ റയട്ട് ഡെസ്ക്ടോപ്പ്", - "Riot does not know how to join a room on this network": "ഈ നെറ്റ്‍വര്‍ക്കിലെ ഒരു റൂമില്‍ എങ്ങനെ അംഗമാകാമെന്ന് റയട്ടിന് അറിയില്ല", "Riot is not supported on mobile web. Install the app?": "മൊബൈലില്‍ റയട്ട് വെബ് പിന്തുണ ഇല്ല. ആപ്പ് ഇന്‍സ്റ്റാള്‍ ചെയ്യാം ?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "റയട്ട് നൂതന ബ്രൌസര്‍ ഫീച്ചറുകള്‍ ഉപയോഗിക്കുന്നു. നിങ്ങളുടെ ബ്രൌസറില്‍ അവയില്‍ പലതും ഇല്ല / പൂര്‍ണ്ണമല്ല .", - "Room not found": "റൂം കണ്ടെത്താനായില്ല", - "Search": "തിരയുക", - "Search…": "തിരയുക…", - "Search for a room": "ഒരു റൂം തിരയുക", - "Send": "അയയ്ക്കുക", - "Send logs": "നാള്‍വഴി അയയ്ക്കുക", - "Source URL": "സോഴ്സ് യു ആര്‍ എല്‍", - "Sorry, your browser is not able to run Riot.": "ക്ഷമിക്കണം, നിങ്ങളുടെ ബ്രൌസര്‍ റയട്ട് പ്രവര്‍ത്തിപ്പിക്കാന്‍ പര്യാപ്തമല്ല.", - "The Home Server may be too old to support third party networks": "തേഡ് പാര്‍ട്ടി നെറ്റ്‍വര്‍ക്കുകളെ പിന്തുണക്കാത്ത വളരെ പഴയ ഹോം സെര്‍വര്‍ ആയേക്കാം", - "There are advanced notifications which are not shown here": "ഇവിടെ കാണിക്കാത്ത നൂതന നോട്ടിഫിക്കേഷനുകള്‍ ഉണ്ട്", - "The server may be unavailable or overloaded": "സെര്‍വര്‍ ലഭ്യമല്ല അല്ലെങ്കില്‍ ഓവര്‍ലോഡഡ് ആണ്", - "This Room": "ഈ മുറി", - "Unable to fetch notification target list": "നോട്ടിഫിക്കേഷന്‍ ടാര്‍ഗെറ്റ് ലിസ്റ്റ് നേടാനായില്ല", - "Unable to join network": "നെറ്റ്‍വര്‍ക്കില്‍ ജോയിന്‍ ചെയ്യാന്‍ കഴിയില്ല", - "Unable to look up room ID from server": "സെര്‍വറില്‍ നിന്നും റൂം ഐഡി കണ്ടെത്താനായില്ല", - "Unavailable": "ലഭ്യമല്ല", - "Unhide Preview": "പ്രിവ്യു കാണിക്കുക", "Unknown device": "അപരിചിത ഡിവൈസ്", - "unknown error code": "അപരിചിത എറര്‍ കോഡ്", - "Unnamed room": "പേരില്ലാത്ത റൂം", - "Update": "പുതുക്കുക", - "Uploaded on %(date)s by %(user)s": "%(date)s ല്‍ %(user)s അപ്ലോഡ് ചെയ്തത്", - "Uploading report": "റിപ്പോര്‍ട്ട് അപ്ലോഡ് ചെയ്യുന്നു", - "View Decrypted Source": "ഡീക്രിപ്റ്റ് ചെയ്ത സോഴ്സ് കാണുക", - "View Source": "സോഴ്സ് കാണുക", - "What's New": "പുതിയ വിശേഷങ്ങള്‍", - "What's new?": "എന്തൊക്കെ പുതിയ വിശേഷങ്ങള്‍ ?", - "Waiting for response from server": "സെര്‍വറില്‍ നിന്നുള്ള പ്രതികരണത്തിന് കാക്കുന്നു", - "When I'm invited to a room": "ഞാന്‍ ഒരു റൂമിലേക്ക് ക്ഷണിക്കപ്പെടുമ്പോള്‍", - "You cannot delete this image. (%(code)s)": "നിങ്ങള്‍ക്ക് ഈ ചിത്രം നീക്കം ചെയ്യാനാകില്ല. (%(code)s)", - "You cannot delete this message. (%(code)s)": "നിങ്ങള്‍ക്ക് ഈ സന്ദേശം നീക്കം ചെയ്യാനാകില്ല. (%(code)s)", - "You are not receiving desktop notifications": "നിങ്ങള്‍ക്ക് ഇപ്പോള്‍ ഡെസ്ക്ടോപ്പ് നോട്ടിഫിക്കേഷനുകള്‍ ലഭിക്കുന്നില്ല", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "ഇവ റയട്ടല്ലാതെ മറ്റൊരു ക്ലയന്റില്‍ വച്ച് കോണ്‍ഫിഗര്‍ ചെയ്തതാകാം. റയട്ടില്‍ അവ ലഭിക്കില്ല, എങ്കിലും അവ നിലവിലുണ്ട്", - "Sunday": "ഞായര്‍", - "Monday": "തിങ്കള്‍", - "Tuesday": "ചൊവ്വ", - "Wednesday": "ബുധന്‍", - "Thursday": "വ്യാഴം", - "Friday": "വെള്ളി", - "Saturday": "ശനി", - "Today": "ഇന്ന്", - "Yesterday": "ഇന്നലെ", - "OK": "ശരി", - "Warning": "മുന്നറിയിപ്പ്", - "Checking for an update...": "അപ്ഡേറ്റ് ഉണ്ടോ എന്ന് തിരയുന്നു...", - "Error encountered (%(errorDetail)s).": "എറര്‍ നേരിട്ടു (%(errorDetail)s).", - "No update available.": "അപ്ഡേറ്റുകള്‍ ലഭ്യമല്ല.", - "Downloading update...": "അപ്ഡേറ്റ് ഡൌണ്‍ലോഡ് ചെയ്യുന്നു...", "You need to be using HTTPS to place a screen-sharing call.": "സ്ക്രീന്‍ ഷെയറിങ്ങ് കോള്‍ നടത്തണമെങ്കില്‍ https ഉപയോഗിക്കണം.", - "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "നിങ്ങളുടെ ഇപ്പോളത്തെ ബ്രൌസര്‍ റയട്ട് പ്രവര്‍ത്തിപ്പിക്കാന്‍ പൂര്‍ണമായും പര്യാപത്മല്ല. പല ഫീച്ചറുകളും പ്രവര്‍ത്തിക്കാതെയിരിക്കാം. ഈ ബ്രൌസര്‍ തന്നെ ഉപയോഗിക്കണമെങ്കില്‍ മുന്നോട്ട് പോകാം. പക്ഷേ നിങ്ങള്‍ നേരിടുന്ന പ്രശ്നങ്ങള്‍ നിങ്ങളുടെ ഉത്തരവാദിത്തത്തില്‍ ആയിരിക്കും!", "Welcome to Riot.im": "റയട്ടിലേക്ക് സ്വാഗതം", "Search the room directory": "റൂം ഡയറക്റ്ററിയില്‍ പരതുക", "Chat with Riot Bot": "റയട്ട് ബോട്ടുമായി ചാറ്റ് ചെയ്യുക", @@ -162,35 +24,14 @@ "Support for those using and running matrix-appservice-irc": "matrix-appservice-irc ഉപയോഗിക്കുന്നവര്‍ക്കും റണ്‍ ചെയ്യുന്നവര്‍ക്കുമുള്ള സപ്പോര്‍ട്ട്", "Support for those using the Matrix spec": "Matrix spec ഉപയോഗിക്കുന്നവര്‍ക്കുള്ള പിന്തുണ", "Design and implementation of E2E in Matrix": "മാട്രിക്സിലെ e2eയുടെ ഡിസൈനും ഇമ്പ്ലിമെന്റേഷനും", - "remove %(name)s from the directory.": "%(name)s ഡയറക്റ്ററിയില്‍ നിന്ന് നീക്കം ചെയ്യുക.", - "World readable": "ആർക്കും വായിക്കാവുന്നത്", "Decentralised, encrypted chat & collaboration powered by [matrix]": "വികേന്ദ്രീകൃത , എന്‍ക്രിപ്റ്റഡ് ചാറ്റ് & മാട്രിക്സ് നല്‍കുന്ന കൊളാബൊറേഷന്‍", "Support for those using, running and writing other bridges": "മറ്റ് ബ്രിഡ്ജുകള്‍ ഉപയോഗിക്കുന്ന, റണ്‍ ചെയ്യുന്ന, എഴുതുന്നവര്‍ക്കുള്ള പിന്തുണ", "Contributing code to Matrix and Riot": "മാട്രിക്സിലേക്കും റയട്ടിലേക്കും കോഡ് സംഭാവന ചെയ്യാം", "Dev chat for the Riot/Web dev team": "റയട്ട്/വെബ് ഡെവലപ്പര്‍ ടീമിനുള്ള dev chat", "Dev chat for the Dendrite dev team": "ഡെന്‍ഡ്രൈറ്റ് ഡെവലപ്പര്‍ ടീമിനുള്ള dev chat", - "Co-ordination for Riot/Web translators": "റയട്ട്/വെബ് പരിഭാഷകരുടെ കൂട്ടായ്മ", "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "മാട്രിക്സിലുള്ളതും പഴയ നെറ്റ്‍വര്‍ക്കുകളിലേക്ക് ( സ്ലാക്ക്, IRC, ഗിറ്റര്‍ മുതലായവ ) ലിങ്ക് ചെയ്തതുമൊക്കെയായ ധാരാളം റൂമുകളുണ്ട്. ഡയറക്റ്ററി പരിശാധിക്കൂ!", - "Failed to change password. Is your password correct?": "രഹസ്യവാക്ക് മാറ്റാന്‍ സാധിച്ചില്ല. രഹസ്യവാക്ക് ശരിയാണോ ?", - "You have successfully set a password!": "രഹസ്യവാക്ക് സജ്ജീകരിച്ചിരിക്കുന്നു!", - "You can now return to your account after signing out, and sign in on other devices.": "നിങ്ങള്‍ക്ക് ഇപ്പോള്‍ സൈന്‍ ഔട്ട് ചെയ്ത ശേഷവും നിങ്ങളുടെ അക്കൌണ്ടിലേക്ക് തിരികെ വരാം, അതു പോലെ മറ്റ് ഡിവൈസുകളില്‍ സൈന്‍ ഇന്‍ ചെയ്യുകയുമാവാം.", - "Continue": "മുന്നോട്ട്", - "Please set a password!": "ദയവായി ഒരു രഹസ്യവാക്ക് ക്രമീകരിക്കുക!", - "This will allow you to return to your account after signing out, and sign in on other devices.": "സൈന്‍ ഔട്ട് ചെയ്ത ശേഷം വീണ്ടും നിങ്ങളുടെ അക്കൌണ്ടിലേക്ക് മടങ്ങി വരാനും, മറ്റ് ഡിവൈസുകളില്‍ സൈന്‍ ഇന്‍ ചെയ്യാനും ഇത് സഹായിക്കും.", - "You have successfully set a password and an email address!": "ഇമെയില്‍ വിലാസവും രഹസ്യവാക്കും വിജയകരമായി ക്രമീകരിച്ചിരിക്കുന്നു!", - "Remember, you can always set an email address in user settings if you change your mind.": "ഓര്‍ക്കുക, വേണ്ട സമയത്ത് യൂസര്‍ സെറ്റിങ്സില്‍ ഒരു ഇമെയില്‍ വിലാസം നല്‍കാം.", - "To return to your account in future you need to set a password": "വീണ്ടും ഈ അക്കൌണ്ട് ഉപയോഗിക്കണമെങ്കില്‍ ഒരു രഹസ്യവാക്ക് സെറ്റ് ചെയ്യുക", - "Set Password": "രഹസ്യവാക്ക് സജ്ജീകരിക്കുക", - "customServer_text": "മറ്റ് മാട്രിക്സ് സെര്‍വറുകളില്‍ ലോഗിന്‍ ചെയ്യാന്‍ കസ്റ്റം സെര്‍വര്‍ ഓപ്ഷനില്‍ ഹോം സെര്‍വര്‍ യു ആര്‍ എല്‍ വ്യക്തമാക്കുക.
    ഇത് വഴി മറ്റൊരു ഹോം സെര്‍വറില്‍ ഉള്ള മാട്രിക്സ് അക്കൌണ്ട് റയട്ടില്‍ ഉപയോഗിക്കാം.

    അതു പോലെ, നിങ്ങള്‍ക്ക് കസ്റ്റം ഐഡന്റിറ്റി സെര്‍വറും ക്രമീകരിക്കാം. പക്ഷേ അപ്പോള്‍ നിങ്ങള്‍ക്ക് ആരേയും ഇമെയില്‍ വഴി ക്ഷണിക്കാനോ തിരിച്ചോ സാധിക്കില്ല.", - "Off": "ഓഫ്", - "On": "ഓണ്‍", - "Notify me for anything else": "ബാക്കി ഏതിനും എനിക്ക് അറിയിപ്പു നൽകുക", - "Notify for all other messages/rooms": "ബാക്കി എല്ലാ സന്ദേശങ്ങൾക്കും/റൂമുകൾക്കും അറിയിപ്പു നൽകുക", "Building services on Matrix": "മട്രിക്സിന്മേൽ സർവീസുകൾ പണിയുന്നു", "Implementing VR services with Matrix": "മട്രിക്സ് ഉപയോഗിച്ചു വി.അർ. സർവീസുകൾ നടപ്പിലാക്കുന്നു", "Implementing VoIP services with Matrix": "മേട്രിക്സിന്മേൽ VoIP സർവീസുകൾ നടപ്പിലാക്കുന്നു", - "Discussion of the Identity Service API": "ഐഡൻടിറ്റി സർവീസ് എപിഐ യെ പറ്റിയുള്ള ചർച്ച", - "Notifications on the following keywords follow rules which can’t be displayed here:": "ഈ പറയുന്ന കീവേർഡുകളെ പറ്റിയുള്ള അറിയിപ്പുകൾ പിൻതുടരുന്ന നിയമങ്ങൾ ഇവിടെ കാണിക്കുവാൻ സാധ്യമല്ല:", - "Back": "തിരികെ", - "Bug report sent": "ബഗ് റിപ്പോർട്ട് അയയ്ക്കുക" + "Discussion of the Identity Service API": "ഐഡൻടിറ്റി സർവീസ് എപിഐ യെ പറ്റിയുള്ള ചർച്ച" } diff --git a/src/i18n/strings/nb_NO.json b/src/i18n/strings/nb_NO.json index 71980bd26a..97898f522c 100644 --- a/src/i18n/strings/nb_NO.json +++ b/src/i18n/strings/nb_NO.json @@ -1,111 +1,34 @@ { - "Add an email address above to configure email notifications": "Legg til en epost adresse for å sette opp epost varsling", - "Advanced notification settings": "Avanserte varslingsinnstillinger", - "All messages": "Alle meldinger", - "All messages (noisy)": "Alle meldinger (høy)", - "All notifications are currently disabled for all targets.": "Alle varsler er deaktivert for alle mottakere.", - "An error occurred whilst saving your email notification preferences.": "En feil oppsto i forbindelse med lagring av epost varsel innstillinger.", - "Cancel Sending": "Avbryt sending", - "Can't update user notification settings": "Kan ikke oppdatere brukervarsel innstillinger", - "Close": "Lukk", - "Couldn't find a matching Matrix room": "Kunne ikke finne et samsvarende Matrix rom", - "Safari and Opera work too.": "Safari og Opera fungerer også.", - "Call invitation": "Anropsinvitasjon", - "Collapse panel": "Skjul panel", - "Custom Server Options": "Tilpassede serveralternativer", - "customServer_text": "Du kan benytte de egendefinerte serveralternativene til å logge deg på andre Matrix-servere ved å spesifisere en annen Hjemmeserver-URL.
    Dette lar deg benytte Riot med en eksisterende Matrix konto på en annen hjemmeserver.

    Du kan også angi en egendefinert identitetsserver, men du vil ikke kunne invitere brukere via e-post, eller bli invitert via e-post selv.", - "delete the alias.": "Slett aliaset.", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Slett rom alias %(alias)s og fjern %(name)s fra katalogen?", - "Direct Chat": "Direkte Chat", - "Directory": "Katalog", - "Download this file": "Last ned filen", - "Enable audible notifications in web client": "Aktiver lyd-varsel i webklient", - "Enable desktop notifications": "Aktiver skrivebordsvarsler", - "Enable email notifications": "Aktiver e-postvarsler", - "Enable notifications for this account": "Aktiver varsler for denne konto", - "Enable them now": "Aktiver dem nå", - "Enter keywords separated by a comma:": "Angi nøkkelord adskilt med komma:", - "Error": "Feil", - "Error saving email notification preferences": "Feil ved lagring av e-postvarselinnstillinger", - "#example": "#eksempel", - "Expand panel": "Utvid panel", - "Failed to add tag %(tagName)s to room": "Kunne ikke legge til tagg %(tagName)s til rom", - "Failed to change settings": "Kunne ikke endre innstillingene", - "Failed to forget room %(errCode)s": "Kunne ikke glemme rommet %(errCode)s", - "Failed to update keywords": "Kunne ikke oppdatere nøkkelord", - "Failed to get protocol list from Home Server": "Kunne ikke hente protokolliste fra Hjemme-Server", - "Failed to get public room list": "Kunne ikke hente offentlig romliste", - "Failed to remove tag %(tagName)s from room": "Kunne ikke fjerne tagg %(tagName)s fra rommet", - "Failed to set direct chat tag": "Kunne ikke angi direkte chat-tagg", - "Failed to set Direct Message status of room": "Kunne ikke angi status for direkte melding i rommet", - "Favourite": "Favoritt", - "Fetching third party location failed": "Kunne ikke hente tredjeparts lokalisering", - "Files": "Filer", - "Filter room names": "Filtrer romnavn", - "Forget": "Glem", - "Guests can join": "Gjester kan bli med", - "I understand the risks and wish to continue": "Jeg forstår risikoen og ønsker å fortsette", - "Invite to this room": "Inviter til dette rommet", - "Keywords": "Nøkkelord", - "Leave": "Forlat", - "Low Priority": "Lav Prioritet", - "Members": "Medlemmer", - "Messages containing my display name": "Meldinger som inneholder mitt visningsnavn", - "Messages containing my user name": "Meldinger som inneholder mitt brukernavn", - "Messages in group chats": "Meldinger i gruppesamtaler", - "Messages in one-to-one chats": "Meldinger i en-til-en samtaler", - "Messages sent by bot": "Meldinger sendt av bot", - "more": "mer", - "No rooms to show": "Ingen rom å vise", - "Noisy": "Bråkete", - "Notification targets": "Mål for varsel", - "Notifications": "Varsler", - "Notifications on the following keywords follow rules which can’t be displayed here:": "Varsler på de følgende nøkkelordene følger regler som ikke kan vises her:", - "Notify for all other messages/rooms": "Varsler om alle andre meldinger/rom", - "Notify me for anything else": "Varsle meg om alt annet", - "Off": "Av", - "On": "På", - "Permalink": "Permanent lenke", - "Please install Chrome or Firefox for the best experience.": "Vennligst installer Chrome eller Firefox for den beste opplevelsen.", - "powered by Matrix": "benytter seg av Matrix", - "Quote": "Sitat", - "Reject": "Avvis", - "Remove %(name)s from the directory?": "Fjern %(name)s fra katalogen?", - "Remove": "Fjern", - "remove %(name)s from the directory.": "fjern %(name)s fra katalogen.", - "Remove from Directory": "Fjern fra katalogen", - "Resend": "Send på nytt", - "Riot does not know how to join a room on this network": "Riot vet ikke hvordan man kan komme inn på et rom på dette nettverket", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot benytter mange avanserte nettleserfunksjoner, og noen av disse er ikke tilgjengelige eller er eksperimentelle på din nåværende nettleser.", - "Room not found": "Rommet ble ikke funnet", - "Search for a room": "Søk etter et rom", - "Source URL": "Kilde URL", - "Sorry, your browser is not able to run Riot.": "Beklager, din nettleser er ikke i stand til å kjøre Riot.", - "The Home Server may be too old to support third party networks": "Hjemme-serveren kan være for gammel til å støtte tredjeparts-nettverk", - "There are advanced notifications which are not shown here": "Det er avanserte varsler som ikke vises her", - "The server may be unavailable or overloaded": "Serveren kan være utilgjengelig eller overbelastet", - "Unable to fetch notification target list": "Kunne ikke hente varsel-mål liste", - "Unable to join network": "Kunne ikke bli med i nettverket", - "Unable to look up room ID from server": "Kunne ikke slå opp rom-ID fra serveren", - "Unhide Preview": "Vis forhåndsvisning", - "unknown error code": "ukjent feilkode", - "Unnamed room": "Rom uten navn", - "Uploaded on %(date)s by %(user)s": "Lastet opp den %(date)s av %(user)s", - "View Decrypted Source": "Vis dekryptert kilde", - "View Source": "Vis kilde", - "When I'm invited to a room": "Når jeg blir invitert til et rom", - "World readable": "Lesbar for alle", - "You cannot delete this image. (%(code)s)": "Du kan ikke slette dette bildet. (%(code)s)", - "You cannot delete this message. (%(code)s)": "Du kan ikke slette denne meldingen. (%(code)s)", - "You are not receiving desktop notifications": "Du mottar ikke skrivebords varsler", - "Messages containing keywords": "Meldinger som inneholder nøkkelord", - "Sunday": "Søndag", - "Monday": "Mandag", - "Tuesday": "Tirsdag", - "Wednesday": "Onsdag", - "Thursday": "Torsdag", - "Friday": "Fredag", - "Saturday": "Lørdag", - "Today": "I dag", - "Yesterday": "I går" + "Custom Server Options": "Server-instillinger", + "powered by Matrix": "Drevet av Matrix", + "Riot is not supported on mobile web. Install the app?": "Riot er ikke støttet av mobil-nettlesere. Ønsker De å innstalere appen?", + "Riot Desktop on %(platformName)s": "Riot Desktop på %(platformName)s", + "Unknown device": "Ukjent enhet", + "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s på %(osName)s", + "You need to be using HTTPS to place a screen-sharing call.": "Du er nødt til å bruke HTTPS for å ha en samtale med skjermdeling.", + "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "De kan benytte brukerdefinerte server-innstillinger for å kunne logge Dem inn på andre Matrix-servere ved å spesifisere en annen hjemmeserver-adresse.
    Dette tillater Dem til å bruke Riot med en eksisterende Matrix-konto på en annen hjemmeserver.

    De kan i tillegg definere en egen hjemmeserver-identitet, men De kan da ikke invitere andre brukere via email, og De kan heller ikke bli invitert via email selv.", + "Dismiss": "Avvis", + "Welcome to Riot.im": "Velkommen til Riot.im", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Desentralisert, kryptert chat & sammabeid drevet av [matrix]", + "Search the room directory": "Søk i alle rom", + "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Allerede finnes det alskens rom i Matrix, sammenkoblet til eksisterende nettverk (Slack, IRC, Gitter osv.) eller selvstendig. Dersom De formoder, kan De kikke på utvalget!", + "Chat with Riot Bot": "Chat med Riot Bot", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Du kan bruke instillinger for «egendefinert tjener» til å logge inn på andre Matrix tjenere ved å spesifisere en annen URL. Dette lar deg bruke Riot med en eksisterende Matrix konto på en annen hjemmetjener.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Du kan også bruke din egen identitetstjener, men du kommer ikke til å kunne invitere andre brukere med e-post, eller bli invitert med e-post selv.", + "Get started with some tips from Riot Bot!": "Kom i gang med noen tips fra Riot Bot!", + "General discussion about Matrix and Riot": "Generelle diskusjoner om Matrix og Riot", + "Discussion of all things Matrix!": "Diskusjoner om alt Matrix!", + "Riot/Web & Desktop chat": "Riot/Web- & Skrivebordsprat", + "Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk", + "Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk", + "Matrix technical discussions": "Tekniske Matrix-diskusjoner", + "Running Matrix services": "Kjør Matrix servicer", + "Community-run support for Synapse": "Samfunnsholdt hjelpetjeneste for Synapse", + "Admin support for Dendrite": "Administrator hjelp for Dendrite", + "Announcements about Synapse releases": "Kunngjøring om Synapse utgivelser", + "Sign In": "Logg inn", + "Create Account": "Lag konto", + "Need help?": "Trenger du hjelp?", + "Room Directory": "Alle rom", + "Explore rooms": "Se alle rom" } diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json index d0f5986dbc..ce17051e01 100644 --- a/src/i18n/strings/nl.json +++ b/src/i18n/strings/nl.json @@ -1,151 +1,15 @@ { - "Add an email address above to configure email notifications": "Voeg een e-mailadres toe om e-mailmeldingen te ontvangen", - "Advanced notification settings": "Geavanceerde meldingsinstellingen", - "All messages": "Alle berichten", - "All messages (noisy)": "Alle berichten (luid)", - "All notifications are currently disabled for all targets.": "Alle meldingen zijn momenteel uitgeschakeld voor alle doelen.", - "An error occurred whilst saving your email notification preferences.": "Er is een fout opgetreden tijdens het opslaan van uw e-mailmeldingsvoorkeuren.", - "Call invitation": "Oproep-uitnodiging", - "Cancel Sending": "Versturen annuleren", - "Can't update user notification settings": "Het is niet gelukt om de meldingsinstellingen van de gebruiker bij te werken", - "Close": "Sluiten", - "Couldn't find a matching Matrix room": "Het is niet gelukt om een bijbehorende Matrix-kamer te vinden", "Custom Server Options": "Aangepaste serverinstellingen", - "customServer_text": "U kunt de aangepaste serverinstellingen gebruiken om in te loggen bij andere Matrix-servers door een andere homeserver-URL in te voeren.
    Dit maakt het mogelijk om Riot te gebruiken met een bestaand Matrix-account op een andere homeserver.

    U kunt ook een aangepaste identiteitsserver instellen, maar het is dan niet mogelijk om gebruikers uit te nodigen met behulp van een e-mailadres of zelf uitgenodigd te worden met een e-mailadres.", - "delete the alias.": "verwijder de alias.", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "De alias %(alias)s verwijderen en %(name)s uit de kamerlijst verwijderen?", - "Direct Chat": "Privégesprek", - "Directory": "Kamerlijst", "Dismiss": "Afwijzen", - "Download this file": "Download dit bestand", - "Enable audible notifications in web client": "Geluidsmeldingen in de webclient aanzetten", - "Enable desktop notifications": "Desktopmeldingen aanzetten", - "Enable email notifications": "E-mailmeldingen aanzetten", - "Enable notifications for this account": "Meldingen voor dit account aanzetten", - "Enable them now": "Deze nu aanzetten", - "Enter keywords separated by a comma:": "Voeg trefwoorden toe, gescheiden door een komma:", - "Error": "Fout", - "Error saving email notification preferences": "Fout bij het opslaan van de meldingsvoorkeuren voor e-mail", - "#example": "#voorbeeld", - "Failed to add tag %(tagName)s to room": "Mislukt om de label %(tagName)s aan de kamer toe te voegen", - "Failed to change settings": "Instellingen wijzigen mislukt", - "Failed to forget room %(errCode)s": "Ruimte vergeten mislukt %(errCode)s", - "Failed to update keywords": "Trefwoorden bijwerken mislukt", - "Failed to get protocol list from Home Server": "Protocollijst ophalen van de homeserver mislukt", - "Failed to get public room list": "Lijst met publieke kamers ophalen mislukt", - "Failed to remove tag %(tagName)s from room": "Label %(tagName)s van de kamer verwijderen mislukt", - "Failed to set direct chat tag": "Het is mislukt om het privéchatlabel weg te halen", - "Favourite": "Favoriet", - "Fetching third party location failed": "Het ophalen van de locatie van de derde partij is mislukt", - "Files": "Bestanden", - "Filter room names": "Filter kamernamen", - "Forget": "Vergeten", - "Guests can join": "Gasten kunnen deelnemen", - "Invite to this room": "Uitnodigen voor deze kamer", - "Keywords": "Trefwoorden", - "Leave": "Verlaten", - "Low Priority": "Lage prioriteit", - "Members": "Leden", - "Mentions only": "Alleen vermeldingen", - "Messages containing my display name": "Berichten die mijn weergavenaam bevatten", - "Messages containing my user name": "Berichten die mijn gebruikersnaam bevatten", - "Messages in group chats": "Berichten in groepsgesprekken", - "Messages in one-to-one chats": "Berichten in één-op-één-gesprekken", - "Messages sent by bot": "Berichten verzonden door een bot", - "more": "meer", - "Mute": "Dempen", - "No rooms to show": "Geen kamers om te laten zien", - "Noisy": "Luidruchtig", - "Notification targets": "Meldingsdoelen", - "Notifications": "Notificaties", - "Notifications on the following keywords follow rules which can’t be displayed here:": "Meldingen op de volgende trefwoorden volgen regels die hier niet kunnen worden getoond:", - "Notify for all other messages/rooms": "Stuur een melding voor alle andere berichten/kamers", - "Notify me for anything else": "Stuur een melding voor al het andere", - "Off": "Uit", - "On": "Aan", - "Operation failed": "Actie mislukt", - "Permalink": "Permanente link", "powered by Matrix": "mogelijk gemaakt door Matrix", - "Quote": "Citeer", - "Reject": "Afwijzen", - "Remove %(name)s from the directory?": "%(name)s uit de kamerlijst verwijderen?", - "Remove": "Verwijderen", - "remove %(name)s from the directory.": "verwijder %(name)s uit de kamerlijst.", - "Remove from Directory": "Uit de kamerlijst verwijderen", - "Resend": "Opnieuw verzenden", - "Riot does not know how to join a room on this network": "Riot weet niet hoe het moet deelnemen in een kamer op dit netwerk", - "Room not found": "De kamer is niet gevonden", - "Search for a room": "Een kamer opzoeken", - "Source URL": "Bron-URL", - "The Home Server may be too old to support third party networks": "De thuisserver is misschien te oud om netwerken van derde partijen te ondersteunen", - "There are advanced notifications which are not shown here": "Er zijn geavanceerde notificaties die hier niet getoond worden", - "The server may be unavailable or overloaded": "De server is misschien niet beschikbaar of overbelast", - "Unable to fetch notification target list": "Het is mislukt om de lijst van notificatiedoelen op te halen", - "Unable to join network": "Het is mislukt om toe te treden tot dit netwerk", - "Unable to look up room ID from server": "Het is mislukt om de kamer-ID op te halen van de server", - "Unhide Preview": "Zichtbaar maken preview", - "unknown error code": "onbekende foutcode", - "Unnamed room": "Kamer zonder naam", - "Uploaded on %(date)s by %(user)s": "Geüpload op %(date)s door %(user)s", - "View Decrypted Source": "Bekijk ontsleutelde bron", - "View Source": "Bekijk bron", - "When I'm invited to a room": "Wanneer ik uitgenodigd word voor een kamer", - "World readable": "Door iedereen leesbaar", - "You cannot delete this image. (%(code)s)": "Je kunt deze afbeelding niet verwijderen. (%(code)s)", - "You cannot delete this message. (%(code)s)": "Je kunt dit bericht niet verwijderen. (%(code)s)", - "You are not receiving desktop notifications": "Je ontvangt momenteel geen desktopmeldingen", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Je hebt ze mogelijk ingesteld in een andere client dan Riot. Je kunt ze niet aanpassen in Riot maar ze zijn wel actief", - "Sunday": "Zondag", - "Monday": "Maandag", - "Tuesday": "Dinsdag", - "Wednesday": "Woensdag", - "Thursday": "Donderdag", - "Friday": "Vrijdag", - "Saturday": "Zaterdag", - "Today": "Vandaag", - "Yesterday": "Gisteren", - "Failed to set Direct Message status of room": "Het is mislukt om de directe-berichtenstatus van de kamer in te stellen", - "A new version of Riot is available.": "Er is een nieuwe versie van Riot beschikbaar.", - "All Rooms": "Alle kamers", - "Cancel": "Annuleren", - "Safari and Opera work too.": "Safari en Opera werken ook.", - "Changelog": "Logboek van wijzigingen", - "Collapse panel": "Paneel inklappen", - "Collecting app version information": "App-versieinformatie verzamelen", - "Collecting logs": "Logboeken verzamelen", - "Describe your problem here.": "Beschrijf uw probleem hier.", - "Expand panel": "Paneel uitklappen", - "Failed to send report: ": "Rapport verzenden mislukt: ", - "Forward Message": "Bericht doorsturen", - "Hide panel": "Paneel verbergen", - "(HTTP status %(httpStatus)s)": "(HTTP-status %(httpStatus)s)", - "I understand the risks and wish to continue": "Ik begrijp de risico's en wil graag verder gaan", - "Login": "Aanmelden", - "Loading bug report module": "Bugrapporteermodule laden", - "Messages containing keywords": "Berichten die trefwoorden bevatten", - "Please install Chrome or Firefox for the best experience.": "Installeer Chrome of Firefox voor de beste ervaring.", - "Report a bug": "Een bug rapporteren", "Riot Desktop on %(platformName)s": "Riot Desktop op %(platformName)s", "Riot is not supported on mobile web. Install the app?": "Riot wordt niet ondersteund op het mobiele web. Wil je de app installeren?", - "Search": "Zoeken", - "Search…": "Zoeken…", - "Send": "Verstuur", - "Send logs": "Logboeken versturen", - "Sorry, your browser is not able to run Riot.": "Sorry, uw browser werkt niet met Riot.", - "This Room": "Deze kamer", - "Unavailable": "Niet beschikbaar", "Unknown device": "Onbekend apparaat", - "Update": "Bijwerken", - "Uploading report": "Rapport uploaden", - "What's New": "Wat is er nieuw", - "What's new?": "Wat is er nieuw?", - "Waiting for response from server": "Wachten op antwoord van de server", - "OK": "OK", "You need to be using HTTPS to place a screen-sharing call.": "U moet HTTPS gebruiken om een oproep met schermdelen te kunnen starten.", "Welcome to Riot.im": "Welkom bij Riot.im", - "Decentralised, encrypted chat & collaboration powered by [matrix]": "Gedecentaliseerd en versleuteld chatten & samenwerken mogelijk gemaakt door [matrix]", - "Search the room directory": "De kamerlijst doorzoeken", - "Chat with Riot Bot": "Met Riot Bot chatten", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Gedecentraliseerd en versleuteld chatten & samenwerken mogelijk gemaakt door [matrix]", + "Search the room directory": "De gesprekscatalogus doorzoeken", + "Chat with Riot Bot": "Chatten met Riot-robot", "Get started with some tips from Riot Bot!": "Begin met enkele tips van Riot Bot!", "General discussion about Matrix and Riot": "Algemene discussie over Matrix en Riot", "Discussion of all things Matrix!": "Discussie over alles wat met Matrix te maken heeft!", @@ -162,19 +26,7 @@ "Support for those using the Matrix spec": "Ondersteuning voor gebruikers van Matrix-specificatie", "Contributing code to Matrix and Riot": "Code bijdragen aan Matrix en Riot", "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Veel kamers bestaan al in Matrix, gelinkt aan bestaande netwerken (Slack, IRC, Gitter, enz.) of onafhankelijk. Bekijk de kamerlijst!", - "Failed to change password. Is your password correct?": "Wachtwoord wijzigen mislukt. Is uw wachtwoord juist?", - "You have successfully set a password!": "U heeft met succes een wachtwoord ingesteld!", - "You can now return to your account after signing out, and sign in on other devices.": "U kunt nu terugkeren naar uw account nadat u bent afgemeld, en u aanmelden op andere apparaten.", - "Continue": "Doorgaan", - "Please set a password!": "Stel een wachtwoord in!", - "This will allow you to return to your account after signing out, and sign in on other devices.": "Hiermee kunt u naar uw account terugkeren nadat u zich heeft afgemeld, en u aanmelden op andere apparaten.", "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s op %(osName)s", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Beschrijf de bug. Wat deed u? Wat verwachtte u? Wat gebeurde er daadwerkelijk?", - "Please describe the bug and/or send logs.": "Beschrijf de bug en/of verstuur logboeken.", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot gebrukt veel geavanceerde browserfuncties, waarvan enkele niet (of experimenteel) in uw webbrowser beschikbaar zijn.", - "Co-ordination for Riot/Web translators": "Coördinatie voor Riot/Web-vertalers", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Om diagnose van het probleem mogelijk te maken worden logboeken van deze client met het bugrapport meegestuurd. Schakel dit vinkje uit als u slechts de bovenstaande tekst mee wil sturen:", - "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Met uw huidige browser kan de applicatie er volledig incorrect uitzien. Tevens is het mogelijk dat niet alle functies naar behoren werken. U kunt doorgaan als u het toch wil proberen, maar bij problemen bent u volledig op uzelf aangewezen!", "Design and implementation of E2E in Matrix": "Ontwerp en implementatie van E2E in Matrix", "Implementing VR services with Matrix": "Implementatie van VR-diensten met Matrix", "Implementing VoIP services with Matrix": "Implementatie van VoIP-diensten met Matrix", @@ -182,44 +34,21 @@ "Support for those using, running and writing other bridges": "Ondersteuning voor het gebruiken, draaien en ontwikkelen aan andere bruggen", "Dev chat for the Riot/Web dev team": "Dev-chat voor het Riot/Web ontwikkelteam", "Dev chat for the Dendrite dev team": "Dev-chat voor het Dendrite-ontwikkelteam", - "You have successfully set a password and an email address!": "Het instellen van een wachtwoord en e-mailadres is geslaagd!", - "Remember, you can always set an email address in user settings if you change your mind.": "Onthoud dat u altijd een e-mailadres in kan stellen in de gebruikersinstellingen als u zich bedenkt.", - "Warning": "Waarschuwing", - "Checking for an update...": "Aan het kijken voor een update...", - "Error encountered (%(errorDetail)s).": "Fout ondervonden (%(errorDetail)s).", - "No update available.": "Geen update beschikbaar.", - "Downloading update...": "Update aan het downloaden...", - "To return to your account in future you need to set a password": "Om in de toekomst naar je account terug te gaan moet je een wachtwoord instellen", - "Set Password": "Wachtwoord instellen", - "Couldn't load home page": "Kon de home pagina niet laden", - "Bug report sent": "Bug report verzonden", - "Thank you!": "Bedankt!", - "Back": "Terug", - "Failed to send custom event.": "Aangepast Event verzenden mislukt.", - "Send Custom Event": "Verzend aangepast evenement", - "Send Custom State Event": "Verzend aangepast State Event", - "Developer Tools": "Ontwikkelaarsgereedschap", - "Filter results": "Resultaten filteren", - "Explore Room State": "Verken Ruimtetoestand", - "You must specify an event type!": "Je moet een event-type specificeren!", - "Event sent!": "Event verstuurd!", - "Event Type": "Event-type", - "Event Content": "Event-inhoud", - "State Key": "Toestandssleutel", - "Show message in desktop notification": "Toon boodschap in bureaublad popup", - "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Je kan de custom server opties gebruiken om op andere Matrix server in te loggen door een andere Home server URL op te geven.
    Dit laat je toe om Riot te gebruiken met een bestaande Matrix account op een andere home server.

    Je kan ook een custom identiteits-server opzetten maar dan kan je geen gebruikers uitnodigen via hun email adres, of zelf uitgenodigd worden via je email adres.", - "Appear Offline": "Lijk offline", - "Away": "Afwezig", - "Send Account Data": "Stuur account informatie", - "Edit": "Aanpassen", - "Explore Account Data": "Bekijk account informatie", - "Unpin Message": "Maak pin los", - "Pin Message": "Bericht vastpinnen", - "Please install Chrome or Firefox for the best experience.": "Installeer alstublieft Chrome of Firefox voor de beste gebruikerservaring.", - "Safari and Opera work too.": "Safari en Opera werken ook.", - "Register": "Registreer", - "Rooms": "Kamers", - "Invite to this community": "Nodig uit in deze community", - "Add rooms to this community": "Voeg kamers toe aan deze community", - "Toolbox": "Eigenschappen" + "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Je kan de custom serveropties gebruiken om op andere Matrix-servers in te loggen door een andere thuisserver-URL op te geven.
    Dit laat je toe om Riot te gebruiken met een bestaand Matrix-account op een andere thuisserver.

    Je kan ook een aangepaste-identiteitsserver opzetten maar dan kan je geen gebruikers uitnodigen via hun e-mailadres, of zelf uitgenodigd worden via je e-mailadres.", + "Co-ordination for Riot translators": "Coördinatie voor Riot vertalers", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "U kunt de aangepaste serverinstellingen gebruiken om u aan te melden bij andere Matrix-servers, door een andere thuisserver-URL in te voeren. Dit laat u toe Riot te gebruiken met een bestaande Matrix-account bij een andere thuisserver.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "U kunt ook een aangepaste identiteitsserver instellen, maar u zult geen gebruikers kunnen uitnodigen via e-mail, of zelf via e-mail uitgenodigd worden.", + "Sign In": "Aanmelden", + "Create Account": "Account aanmaken", + "Need help?": "Hulp nodig?", + "Explore rooms": "Gesprekken ontdekken", + "Room Directory": "Gesprekscatalogus", + "Unexpected error preparing the app. See console for details.": "Er is een onverwachte fout opgetreden bij het voorbereiden van de app. Bekijk de console voor details.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Ongeldige configuratie: kan slechts één van default_server_config, default_server_name, of default_hs_url opgeven.", + "Invalid configuration: no default server specified.": "Ongeldige configuratie: geen standaardserver opgegeven.", + "This installation of Riot seems to have an invalid server configuration. If you are the administrator, please correct the error below": "De serverconfiguratie van deze Riot-instantie lijkt ongeldig. Als u de beheerder bent, gelieve dan de fout hieronder te corrigeren", + "Your Riot is misconfigured": "Uw Riot is verkeerd geconfigureerd", + "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Uw Riot-configuratie bevat ongeldige JSON. Corrigeer het probleem en herlaad de pagina.", + "The message from the parser is: %(message)s": "Het bericht van de verwerker is: %(message)s", + "Invalid JSON": "Ongeldige JSON" } diff --git a/src/i18n/strings/nn.json b/src/i18n/strings/nn.json new file mode 100644 index 0000000000..de95927d7f --- /dev/null +++ b/src/i18n/strings/nn.json @@ -0,0 +1,53 @@ +{ + "Riot is not supported on mobile web. Install the app?": "Riot er ikkja støtta på mobilnettlesare. Last æppen inn?", + "Riot Desktop on %(platformName)s": "Riot på Skrivebord for %(platformName)s", + "Unknown device": "Ukjend eining", + "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s gjennom %(browserName)s på %(osName)s", + "You need to be using HTTPS to place a screen-sharing call.": "Du må bruka HTTPS for å ha ei samtale med skjermdeling.", + "Dismiss": "Avvis", + "powered by Matrix": "Matrixdriven", + "Welcome to Riot.im": "Velkomen til Riot.im", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Desentralisert, kryptert nettprat & samarbeid drive av [matrix]", + "Search the room directory": "Søk i romutvalet", + "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Det finst allereie massevis av rom på Matrix, anten lenkja til nettverk som allereie finst (Slack, IRC, Gitter osv.) eller uavhengige. Tak ein titt på utvalet!", + "Chat with Riot Bot": "Nettprat med Riot Bot", + "Get started with some tips from Riot Bot!": "Kom i gang med nokre råd frå Riot Bot!", + "General discussion about Matrix and Riot": "Allmenn meiningsutveksling om Matrix og Riot", + "Discussion of all things Matrix!": "Meiningsutveksling om alt som gjeld Matrix!", + "Riot/Web & Desktop chat": "Riot/Web og Skrivebord", + "Riot/iOS & matrix-ios-sdk chat": "Riot/iOS og matrix-ios-sdk", + "Riot/Android & matrix-android-sdk chat": "Riot/Android og matrix-android-sdk", + "Matrix technical discussions": "Teknisk meiningsutveksling om Matrix", + "Running Matrix services": "Å køyra Matrix-tenestar", + "Community-run support for Synapse": "Samfunnsdriven støtte for Synapse", + "Admin support for Dendrite": "Administratorstøtte for Dendrite", + "Announcements about Synapse releases": "Kunngjeringar om Synapse-utgåver", + "Support for those using and running matrix-appservice-irc": "Støtte for dei som brukar og køyrar matrix-appleservice-irc", + "Building services on Matrix": "Byggingstenester på Matrix", + "Support for those using the Matrix spec": "Støtte for dei som brukar Matrix-specen", + "Design and implementation of E2E in Matrix": "E2E-oppbygging og -implementering på Matrix", + "Implementing VR services with Matrix": "Implementering av VR-tenester med Matrix", + "Implementing VoIP services with Matrix": "Implementering av VoIP-tenester med Matrix", + "Discussion of the Identity Service API": "Meiningsutveksling om Identitetstenar-APIen", + "Support for those using, running and writing other bridges": "Støtte for dei som brukar, køyrer og skriv andre bruer", + "Contributing code to Matrix and Riot": "For å bidraga med kode til Matrix og Riot", + "Dev chat for the Riot/Web dev team": "Utviklar-prat for Riot/Web-utviklargruppa", + "Dev chat for the Dendrite dev team": "Utviklar-prat for Dendrite-utviklargruppa", + "Co-ordination for Riot translators": "Samordning for Riot-omsetjare", + "Custom Server Options": "Tilpassa tenar-innstillingar", + "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Du kan bruka eigentenarinnstillingar til å logga inn på andre Matrixtenarar ved å oppgje ein annan Heimtenar-URL.
    Dette gjer at du kan bruka Riot med ein Matrixbrukar som allereie finst på ein annan heimtenar.

    Du kan òg setja ein eigen identitetstenar men du kjem i so fall ikkje til å kunna byda brukare inn med epost, eller å sjølv verta boden inn med epost.", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Du kan nytta dei eigendefinerte tenarinstillingane for å logga inn på andre Matrix-tenarar ved å uppgje ein annan heimtenar-URL. Dette lèt deg bruka Riot med ein Matrix-konto som allereie finst på ein annan heimtenar.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Du kan òg velja ein eigendefinert identitetstenar, men då kjem du ikkje til å innvitere brukarar gjennom e-post, eller verta invitert med e-post sjølv.", + "Sign In": "Logg inn", + "Create Account": "Lag brukar", + "Need help?": "Treng du hjelp?", + "Explore rooms": "Utforsk romma", + "Room Directory": "Romkatalog", + "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Riot-konfigurasjonen din har invalid JSON-kode. Korriger dette og last inn sida på nytt.", + "The message from the parser is: %(message)s": "Meldingen frå kodetolkaren er: %(message)s", + "Invalid JSON": "Ugyldig JSON", + "Your Riot is misconfigured": "Riot-klienten din er feilkonfiguert", + "Unexpected error preparing the app. See console for details.": "Uforventa feil under lasting av programmet. Sjå konsollet for detaljar.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Ugyldig konfigurasjon berre muleg å berre spesifiere ein av default_server_config, default_server_name eller default_hs_url.", + "Invalid configuration: no default server specified.": "Ugyldig konfigurasjon: \"default server\" er uspesifisert." +} diff --git a/src/i18n/strings/pl.json b/src/i18n/strings/pl.json index 31fdfbe6e5..fab590a56d 100644 --- a/src/i18n/strings/pl.json +++ b/src/i18n/strings/pl.json @@ -1,161 +1,20 @@ { "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s przez %(browserName)s na %(osName)s", - "Safari and Opera work too.": "Safari i Opera też działają.", - "A new version of Riot is available.": "Dostępna jest nowa wersja Riot.", - "Add an email address above to configure email notifications": "Dodaj adres e-mail powyżej, aby skonfigurować powiadomienia e-mailowe", - "Advanced notification settings": "Zaawansowane ustawienia powiadomień", - "All messages": "Wszystkie wiadomości", - "All messages (noisy)": "Wszystkie wiadomości (głośno)", - "All Rooms": "Wszystkie pokoje", - "All notifications are currently disabled for all targets.": "Wszystkie powiadomienia są obecnie wyłączone dla wszystkich celów.", - "An error occurred whilst saving your email notification preferences.": "Podczas zapisywania ustawień powiadomień e-mail wystąpił błąd.", - "Call invitation": "Zaproszenie do rozmowy", - "Cancel": "Anuluj", - "Cancel Sending": "Anuluj wysyłanie", - "Can't update user notification settings": "Nie można zaktualizować ustawień powiadomień użytkownika", - "Changelog": "Dziennik zmian", - "Close": "Zamknij", - "Collecting app version information": "Zbieranie informacji o wersji aplikacji", - "Collecting logs": "Zbieranie dzienników", - "Couldn't find a matching Matrix room": "Nie można znaleźć pasującego pokoju Matrix", "Custom Server Options": "Niestandardowe opcje serwera", - "delete the alias.": "usunąć alias.", - "Describe your problem here.": "Opisz swój problem tutaj.", - "Directory": "Księga adresowa", - "Download this file": "Pobierz plik", "Riot is not supported on mobile web. Install the app?": "Riot nie jest obsługiwany przez przeglądarki mobilne. Zainstaluj aplikację?", - "Search": "Szukaj", - "Search…": "Szukaj…", - "Search for a room": "Szukaj pokoju", - "Send": "Wyślij", - "Collapse panel": "Ukryj panel", - "customServer_text": "Możesz używać opcji serwera niestandardowego do logowania się na inne serwery Matrix, określając inny adres URL serwera domowego.
    Pozwala to na wykorzystanie Riot z istniejącym kontem Matrix na innym serwerze domowym.

    Można również ustawić niestandardowy serwer tożsamości, ale nie będzie można zapraszać użytkowników adresem e-mail, ani być zaproszonym przez adres e-mailowy.", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Usuń alias %(alias)s i usuń %(name)s z katalogu?", "Dismiss": "Zamknij", - "Enable audible notifications in web client": "Włącz dźwiękowe powiadomienia w kliencie internetowym", - "Enable email notifications": "Włącz powiadomienia e-mailowe", - "Enable notifications for this account": "Włącz powiadomienia na tym koncie", - "Enable them now": "Włącz je teraz", - "Enter keywords separated by a comma:": "Wpisz słowa kluczowe oddzielone przecinkami:", - "Error": "Błąd", - "Error saving email notification preferences": "Wystąpił błąd podczas zapisywania ustawień powiadomień e-mailowych", - "#example": "#przykład", - "Expand panel": "Rozwiń panel", - "Failed to add tag %(tagName)s to room": "Nie można dodać tagu %(tagName)s do pokoju", - "Failed to change settings": "Nie udało się zmienić ustawień", - "Failed to forget room %(errCode)s": "Nie mogłem zapomnieć o pokoju %(errCode)s", - "Failed to update keywords": "Nie udało się zaktualizować słów kluczowych", - "Failed to get protocol list from Home Server": "Nie można pobrać listy protokołów z serwera domowego", - "Failed to get public room list": "Nie udało się uzyskać publicznej listy pokojowej", - "Failed to remove tag %(tagName)s from room": "Nie udało się usunąć tagu %(tagName)s z pokoju", - "Failed to send report: ": "Nie udało się wysłać raportu: ", - "Favourite": "Ulubiony", - "Files": "Pliki", - "Filter room names": "Filtruj nazwy pokojów", - "Forget": "Zapomnij", - "Forward Message": "Przekaż wiadomość", - "Guests can join": "Goście mogą dołączyć", - "Hide panel": "Ukryj panel", - "I understand the risks and wish to continue": "Rozumiem ryzyko i chęć kontynuować", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "W celu zdiagnozowania problemów logi z tego klienta zostaną wysłane wraz z tym raportem o błędzie. Jeśli wolisz wysłać tylko tekst powyżej, proszę odznacz:", - "Invite to this room": "Zaproś do tego pokoju", - "Keywords": "Słowa kluczowe", - "Loading bug report module": "Ładowanie modułu raportu błędów", - "Low Priority": "Niski priorytet", - "Messages containing keywords": "Wiadomości zawierające słowa kluczowe", - "Messages containing my user name": "Wiadomości zawierające moją nazwę użytkownika", - "Messages in group chats": "Wiadomości w czatach grupowych", - "Messages sent by bot": "Wiadomości wysłane przez bota", - "more": "więcej", - "Enable desktop notifications": "Włącz powiadomienia", - "(HTTP status %(httpStatus)s)": "(status HTTP %(httpStatus)s)", - "Leave": "Opuść", - "Login": "Logowanie", - "Members": "Członkowie", - "Messages containing my display name": "Wiadomości zawierające moją wyświetlaną nazwę", - "Direct Chat": "Rozmowa bezpośrednia", - "Mute": "Wycisz", - "No rooms to show": "Brak pokoi do wyświetlenia", - "Notifications": "Powiadomienia", - "Failed to set direct chat tag": "Nie udało się ustawić znacznika rozmów bezpośrednich", - "Failed to set Direct Message status of room": "Nie udało się ustawić statusu Rozmów Bezpośrednich dla pokoju", - "Notification targets": "Cele powiadomień", - "Operation failed": "Operacja nieudana", - "Permalink": "Odnośnik bezpośredni", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Proszę opisz problem (w miarę możliwości po angielsku). Co doprowadziło do błędu? Jakie było Twoje oczekiwanie, a co stało się zamiast tego?", - "Please describe the bug and/or send logs.": "Proszę opisz błąd i/lub wyślij logi.", - "Please install Chrome or Firefox for the best experience.": "Zainstaluj proszę Chrome lub Firefox.", - "Quote": "Cytat", - "Remove %(name)s from the directory?": "Usunąć %(name)s z katalogu?", - "Remove from Directory": "Usuń z katalogu", - "Report a bug": "Zgłoś błąd", - "Resend": "Wyślij jeszcze raz", "Riot Desktop on %(platformName)s": "Riot Desktop na %(platformName)s", - "Riot does not know how to join a room on this network": "Riot nie wie, jak dołączyć do pokoju w tej sieci", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot używa wiele zaawansowanych technologii, które nie są dostępne lub są w fazie testów w Twojej przeglądarce.", - "Room not found": "Pokój nie znaleziony", - "Send logs": "Wyślij logi", - "Sorry, your browser is not able to run Riot.": "Przepraszamy, Twoja przeglądarka nie jest w stanie uruchomić Riot.", "powered by Matrix": "napędzany przez Matrix", - "Reject": "Odrzuć", - "Remove": "Usuń", - "remove %(name)s from the directory.": "usuń %(name)s z katalogu.", - "The Home Server may be too old to support third party networks": "Serwer domowy może być za stary dla innych sieci", - "There are advanced notifications which are not shown here": "Masz zaawansowane powiadomienia, nie pokazane tutaj", - "The server may be unavailable or overloaded": "Serwer jest nieosiągalny lub jest przeciążony", - "This Room": "Ten pokój", - "Unable to join network": "Nie można dołączyć do sieci", - "Unable to look up room ID from server": "Nie można wyszukać ID pokoju na serwerze", - "Unavailable": "Niedostępny", - "Unhide Preview": "Odkryj podgląd", "Unknown device": "Nieznane urządzenie", - "unknown error code": "nieznany kod błędu", - "Unnamed room": "Pokój bez nazwy", - "Update": "Uaktualnienie", - "Uploaded on %(date)s by %(user)s": "Wysłane %(date)s przez %(user)s", - "Uploading report": "Raport wysyłania", - "Messages in one-to-one chats": "Wiadomości w rozmowach jeden-na-jeden", - "Noisy": "Głośny", - "Notifications on the following keywords follow rules which can’t be displayed here:": "Powiadomienia o słowach kluczowych spełniają reguły, które nie mogą być tu wyświetlone:", - "Notify for all other messages/rooms": "Powiadamiaj o wszystkich innych wiadomośsciach/pokojach", - "Notify me for anything else": "Powiadom mnie o całej reszcie", - "Off": "Wyłącz", - "On": "Włącz", - "Source URL": "Źródłowy URL", - "Unable to fetch notification target list": "Nie można pobrać listy docelowej dla powiadomień", - "View Decrypted Source": "Pokaż zdeszyfrowane źródło", - "View Source": "Pokaż źródło", - "What's New": "Co nowego", - "What's new?": "Co nowego?", - "Waiting for response from server": "Czekam na odpowiedź serwera", - "When I'm invited to a room": "Kiedy zostanę zaproszony do pokoju", - "World readable": "Całkowicie publiczne", - "You cannot delete this image. (%(code)s)": "Nie możesz usunąć tego obrazka. (%(code)s)", - "You cannot delete this message. (%(code)s)": "Nie możesz usunąć tej wiadomości. (%(code)s)", - "You are not receiving desktop notifications": "Nie otrzymujesz powiadomień na pulpit", - "Sunday": "Niedziela", - "Monday": "Poniedziałek", - "Tuesday": "Wtorek", - "Wednesday": "Środa", - "Thursday": "Czwartek", - "Friday": "Piątek", - "Saturday": "Sobota", - "Today": "Dzisiaj", - "Yesterday": "Wczoraj", - "OK": "OK", "You need to be using HTTPS to place a screen-sharing call.": "Musisz używać bezpiecznego protokołu HTTPS aby użyć połączenia współdzielenia ekranu.", - "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Z Twoją obecną przeglądarką, wygląd oraz wrażenia z używania aplikacji mogą być niepoprawne, a niektóre funkcje wcale nie działać. Kontynuuj jeśli chcesz spróbować, jednak trudno będzie pomóc w przypadku błędów, które mogą nastąpić!", "Welcome to Riot.im": "Witamy w Riot.im", - "Decentralised, encrypted chat & collaboration powered by [matrix]": "Zdecentralizowany, szyfrowany czat & współpraca wspierana przez [matrix]", - "Search the room directory": "Wyszukaj katalog pokojów", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Zdecentralizowany, szyfrowany czat & współpraca oparta na [matrix]", + "Search the room directory": "Przeszukaj katalog pokojów", "Chat with Riot Bot": "Rozmowa z Botem Riota", "Get started with some tips from Riot Bot!": "Rozpocznij z wskazówkami Riot Bota!", - "General discussion about Matrix and Riot": "Generalna rozmowa o Matrix i Riot", - "Discussion of all things Matrix!": "Rozmowa o wszystkim Matrixowym!", + "General discussion about Matrix and Riot": "Ogólna rozmowa o Matrix i Riot", + "Discussion of all things Matrix!": "Rozmowa o wszystkich sprawach Matrixowych!", "Matrix technical discussions": "Dyskusje techniczne Matrixa", - "Fetching third party location failed": "Pobranie lokalizacji zewnętrznej nie powiodło się", - "Mentions only": "Tylko, gdy wymienieni", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Możliwe, że skofigurowałeś je w innym kliencie, niż Riot. Nie możesz ich zmieniać w Riot, ale nadal mają zastosowanie", "Riot/Web & Desktop chat": "Czat o Riot/Web i Desktop", "Riot/iOS & matrix-ios-sdk chat": "Czat o Riot/iOS i matrix-ios-sdk", "Riot/Android & matrix-android-sdk chat": "Czat o Riot/Android i matrix-android-sdk", @@ -170,49 +29,25 @@ "Implementing VR services with Matrix": "Implementowanie usług wirtualnej rzeczywistości w oparciu o Matrix", "Implementing VoIP services with Matrix": "Implementowanie usług telefonii internetowej VoIP w oparciu o Matrix", "Discussion of the Identity Service API": "Dyskusja na temat API Identity Service", - "Support for those using, running and writing other bridges": "Wsparcie dla używających, zapewniających i piszących inne mosty", - "Contributing code to Matrix and Riot": "Dokładanie kodu do Matrix lub Riot", + "Support for those using, running and writing other bridges": "Wsparcie dla używających, utrzymujących i piszących inne mosty", + "Contributing code to Matrix and Riot": "Współtworzenie kodu do Matrix lub Riot", "Dev chat for the Riot/Web dev team": "Czat deweloperów zespołu Riot/Web", "Dev chat for the Dendrite dev team": "Czat deweloperów zespołu Dendrite", - "Co-ordination for Riot/Web translators": "Koordynacja tłumaczy Riot/Web", "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Matrix ma wiele, już działających pokoi, połączonych z istniejącymi sieciami, takimi jak Slack, IRC lub Gitter, a także wiele zupełnie niezależnych. Możesz przejrzeć je wszystkie w spisie pokoi!", - "Failed to change password. Is your password correct?": "Zmiana hasła nie powiodła się. Czy Twoje hasło jest poprawne?", - "You have successfully set a password!": "Hasło zostało zmienione z powodzeniem!", - "You can now return to your account after signing out, and sign in on other devices.": "Teraz możesz powrócić do swojego konta na innych urządzeniach po wylogowaniu i ponownym zalogowaniu się.", - "Continue": "Kontynuuj", - "Please set a password!": "Proszę, ustaw hasło!", - "This will allow you to return to your account after signing out, and sign in on other devices.": "To pozwoli Ci powrócić do Twojego konta po wylogowaniu i ponownym zalogowaniu się na innych urządzeniach.", - "You have successfully set a password and an email address!": "Z powodzeniem ustawiono hasło i adres e-mail dla Twojego konta!", - "Remember, you can always set an email address in user settings if you change your mind.": "Pamiętaj, że zawsze możesz zmienić swój e-mail lub hasło w panelu ustawień użytkownika.", - "To return to your account in future you need to set a password": "Aby wrócić do swojego konta w przyszłości musisz ustawić hasło ", - "Set Password": "Ustaw hasło", - "No update available.": "Brak aktualizacji.", - "Warning": "Ostrzeżenie", - "Error encountered (%(errorDetail)s).": "Wystąpił błąd (%(errorDetail)s).", - "Downloading update...": "Pobieranie aktualizacji...", - "Checking for an update...": "Sprawdzanie aktualizacji...", - "Couldn't load home page": "Nie można załadować strony startowej", - "Bug report sent": "Raport błędu wysłany", - "Thank you!": "Dziękujemy!", - "Back": "Powrót", - "Developer Tools": "Narzędzia programistyczne", - "Failed to send custom event.": "Wysyłanie niestandardowego wydarzenia nie powiodło się.", - "Filter results": "Filtruj wyniki", - "Send Custom Event": "Wyślij niestandardowe wydarzenie", - "Send Custom State Event": "Wyślij wydarzenie o niestandardowym stanie", - "Explore Room State": "Przeglądaj stan pokoju", - "You must specify an event type!": "Musisz określić typ wydarzenia!", - "Event sent!": "Wydarzenie wysłane!", - "Event Type": "Typ wydarzenia", - "Event Content": "Zawartość wydarzenia", - "State Key": "Klucz stanu", - "Toolbox": "Przybornik", - "Edit": "Edycja", - "Show message in desktop notification": "Pokaż wiadomość w notyfikacji na pulpicie", - "Unpin Message": "Odepnij Wiadomość", - "Pin Message": "Przypnij Wiadomość", - "Register": "Rejestracja", - "Rooms": "Pokoje", - "Invite to this community": "Zaproś do tej społeczności", - "Add rooms to this community": "Dodaj pokoje do tej społeczności" + "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Możesz skorzystać z opcji niestandardowego serwera, aby zalogować się na inne serwery Matrix, podając inny adres URL serwera domowego.
    Pozwala to na używanie Riot z istniejącym kontem Matrix na innym serwerze domowym.

    Możesz również ustawić niestandardowy serwer tożsamości, ale nie będziesz w stanie zapraszać użytkowników przez adres e-mail ani otrzymywać zaproszeń na adres e-mail.", + "Co-ordination for Riot translators": "Koordynacja tłumaczy Riot", + "Create Account": "Stwórz konto", + "Sign In": "Zaloguj", + "Need help?": "Potrzebujesz pomocy?", + "Room Directory": "Katalog pokojów", + "Explore rooms": "Przeglądaj pokoje", + "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Konfiguracja Twojego Riot zawiera błędny plik JSON. Popraw swoją konfigurację i odśwież stronę.", + "The message from the parser is: %(message)s": "Wiadomość od parsera to: %(message)s", + "Invalid JSON": "Błędny JSON", + "Your Riot is misconfigured": "Twój Riot jest źle skonfigurowany", + "Unexpected error preparing the app. See console for details.": "Niespodziewany błąd podczas przygotowywania aplikacji. Otwórz konsolę po szczegóły.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Błędna konfiguracja. Można sprecyzować tylko jedno z: default_server_config, default_server_name, lub default_hs_url.", + "Invalid configuration: no default server specified.": "Błędna konfiguracja: nie wybrano domyślnego serwera.", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Możesz użyć Niestandardowych Opcji Serwera by zalogować się do innych serwerów Matrix poprzez podanie URL innego serwera głównego. Dzięki temu możesz używać Riot z istniejącym kontem z innego serwera głównego.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Możesz również ustawić niestandardowy serwer tożsamości, lecz nie będziesz móc zapraszać użytkowników i otrzymywać zaproszeń poprzez podanie adresu email." } diff --git a/src/i18n/strings/pt.json b/src/i18n/strings/pt.json index d8f314991a..f122a4d5ff 100644 --- a/src/i18n/strings/pt.json +++ b/src/i18n/strings/pt.json @@ -1,172 +1,14 @@ { - "Add an email address above to configure email notifications": "Insira um endereço de email no campo acima para configurar as notificações por email", - "All messages": "Todas as mensagens", - "All messages (noisy)": "Todas as mensagens (alto)", - "An error occurred whilst saving your email notification preferences.": "Ocorreu um erro ao guardar as suas preferências de notificação por email.", - "Call invitation": "Convite para chamada", - "Cancel Sending": "Cancelar o envio", - "Can't update user notification settings": "Não é possível atualizar as preferências de notificação", - "Close": "Fechar", - "Couldn't find a matching Matrix room": "Não foi possível encontrar uma sala correspondente no servidor Matrix", "Custom Server Options": "Opções para Servidor Personalizado", - "delete the alias.": "apagar o apelido da sala.", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Apagar o apelido %(alias)s da sala e remover %(name)s da lista pública?", - "Direct Chat": "Conversa pessoal", - "Directory": "Diretório", "Dismiss": "Descartar", - "Download this file": "Transferir este ficheiro", - "Enable audible notifications in web client": "Ativar notificações de áudio no cliente web", - "Enable desktop notifications": "Ativar notificações no desktop", - "Enable email notifications": "Ativar notificações por e-mail", - "Enable notifications for this account": "Ativar notificações para esta conta", - "Enable them now": "Ativar agora", - "Enter keywords separated by a comma:": "Insira palavras-chave separadas por vírgula:", - "Error": "Erro", - "Error saving email notification preferences": "Erro ao guardar as preferências de notificação por e-mail", - "Failed to add tag %(tagName)s to room": "Falha ao adicionar %(tagName)s à sala", - "Failed to change settings": "Falha ao alterar as configurações", - "Failed to forget room %(errCode)s": "Falha ao esquecer a sala %(errCode)s", - "Failed to update keywords": "Falha ao atualizar as palavras-chave", - "Failed to get protocol list from Home Server": "Falha ao obter a lista de protocolos do servidor padrão", - "Failed to get public room list": "Falha ao obter a lista de salas públicas", - "Failed to set direct chat tag": "Falha ao definir conversa como pessoal", - "Failed to set Direct Message status of room": "Falha em definir a mensagem de status da sala", - "Favourite": "Favorito", - "Fetching third party location failed": "Falha ao obter localização de terceiros", - "Files": "Ficheiros", - "Filter room names": "Filtrar salas por título", - "Forget": "Esquecer", - "Forward Message": "Encaminhar", - "Guests can join": "Convidados podem entrar", - "Invite to this room": "Convidar para esta sala", - "Keywords": "Palavras-chave", - "Leave": "Sair", - "Low Priority": "Baixa prioridade", - "Members": "Membros", - "Mentions only": "Apenas menções", - "Messages containing my display name": "Mensagens contendo o meu nome público", - "Messages containing my user name": "Mensagens contendo o meu nome de utilizador", - "Messages in group chats": "Mensagens em salas", - "Messages in one-to-one chats": "Mensagens em conversas pessoais", - "Messages sent by bot": "Mensagens enviadas por bots", - "more": "mais", - "Mute": "Silenciar", - "No rooms to show": "Não existem salas a serem exibidas", - "Noisy": "Barulhento", - "Notification targets": "Alvos de notificação", - "Notifications": "Notificações", - "Notifications on the following keywords follow rules which can’t be displayed here:": "Notificações sobre as seguintes palavras-chave seguem regras que não podem ser exibidas aqui:", - "Notify for all other messages/rooms": "Notificar para todas as outras mensagens/salas", - "Notify me for anything else": "Notificar-me sobre qualquer outro evento", - "Off": "Desativado", - "On": "Ativado", - "Operation failed": "A operação falhou", - "Permalink": "Link permanente", "powered by Matrix": "rodando a partir do Matrix", - "Quote": "Citar", - "Reject": "Rejeitar", - "Remove": "Remover", - "Remove %(name)s from the directory?": "Remover %(name)s da lista pública de salas?", - "remove %(name)s from the directory.": "remover %(name)s da lista pública de salas.", - "Remove from Directory": "Remover da lista pública de salas", - "Resend": "Reenviar", - "Riot does not know how to join a room on this network": "O Riot não sabe como entrar numa sala nesta rede", - "Room not found": "Sala não encontrada", - "Search for a room": "Pesquisar por uma sala", - "Source URL": "URL fonte", - "The Home Server may be too old to support third party networks": "O servidor pode ser muito antigo para suportar redes de terceiros", - "There are advanced notifications which are not shown here": "Existem notificações avançadas que não são exibidas aqui", - "The server may be unavailable or overloaded": "O servidor pode estar inacessível ou sobrecarregado", - "Unable to fetch notification target list": "Não foi possível obter a lista de alvos de notificação", - "Unable to join network": "Não foi possível juntar-se à rede", - "Unable to look up room ID from server": "Não foi possível obter a identificação da sala do servidor", - "Unhide Preview": "Mostrar a pré-visualização novamente", - "unknown error code": "código de erro desconhecido", - "Unnamed room": "Sala sem nome", - "Uploaded on %(date)s by %(user)s": "Enviada em %(date)s por %(user)s", - "View Decrypted Source": "Ver a fonte desencriptada", - "View Source": "Ver a fonte", - "When I'm invited to a room": "Quando sou convidado para uma sala", - "World readable": "Público", - "You cannot delete this image. (%(code)s)": "Não pode apagar esta imagem. (%(code)s)", - "You cannot delete this message. (%(code)s)": "Não pode apagar esta mensagem. (%(code)s)", - "You are not receiving desktop notifications": "Não está a receber notificações de desktop", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Pode ter configurado num outro cliente sem ser o Riot. Não pode ajustá-las no Riot, mas ainda assim elas aplicam-se", - "Sunday": "Domingo", - "Monday": "Segunda-feira", - "Tuesday": "Terça-feira", - "Wednesday": "Quarta-feira", - "Thursday": "Quinta-feira", - "Friday": "Sexta-feira", - "Saturday": "Sábado", - "Today": "Hoje", - "Yesterday": "Ontem", - "#example": "#exemplo", - "Failed to remove tag %(tagName)s from room": "Não foi possível remover a marcação %(tagName)s desta sala", - "Advanced notification settings": "Configurações avançadas de notificação", - "customServer_text": "Pode usar as opções de servidor personalizado para entrar noutros servidores Matrix especificando para isso um URL de outro Servidor de Base.
    Isto permite que use o Riot com uma conta Matrix que exista noutro Servidor de Base.

    Também pode configurar um servidor de Identidade personalizado mas não poderá convidar utilizadores através do endereço de e-mail, ou ser convidado pelo seu endereço de e-mail.", - "Safari and Opera work too.": "Safari e Opera também funcionam.", - "All notifications are currently disabled for all targets.": "Todas as notificações estão atualmente desativadas para todos os casos.", - "Collapse panel": "Colapsar o painel", - "Expand panel": "Expandir o painel", - "I understand the risks and wish to continue": "Entendo os riscos e pretendo continuar", - "Messages containing keywords": "Mensagens contendo palavras-chave", - "Please install Chrome or Firefox for the best experience.": "Por favor instale Chrome ou Firefox para ter a melhor experiência.", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "O Riot usa muitas funcionalidades avançadas do navegador, algumas das quais não estão disponíveis ou ainda são experimentais no seu navegador atual.", - "Sorry, your browser is not able to run Riot.": "Desculpe, o seu navegador não é capaz de executar o Riot.", - "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Com o seu navegador atual, a aparência e sensação de uso da aplicação podem estar completamente incorretas, e algumas das funcionalidades poderão não funcionar. Se quiser tentar de qualquer maneira pode continuar, mas está por sua conta com algum problema que possa encontrar!", "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s em %(osName)s", - "A new version of Riot is available.": "Uma nova versão do Riot está disponível.", - "All Rooms": "Todas as salas", - "Cancel": "Cancelar", - "Changelog": "Histórico de alterações", - "Collecting app version information": "A recolher informação da versão da app", - "Collecting logs": "A recolher logs", - "Describe your problem here.": "Descreva o seu problema aqui.", - "Failed to send report: ": "Falha ao enviar o relatório: ", - "Hide panel": "Ocultar o painel", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Para diagnosticar problemas, relatórios deste cliente serão enviados juntamente com esta notificação de falha. Se preferir enviar apenas o texto acima, por favor remova a seleção:", - "Loading bug report module": "A carregar o módulo de relato de erros", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Por favor descreva a falha encontrada. O que fez? O que esperava que acontecesse? O que realmente aconteceu?", - "Please describe the bug and/or send logs.": "Por favor descreva a falha e/ou envie os logs de erro.", - "Report a bug": "Reportar uma falha", "Riot Desktop on %(platformName)s": "Riot para computadores desktop em %(platformName)s", "Riot is not supported on mobile web. Install the app?": "O Riot não é suportado na web para dispositivos móveis. Quer instalar a app?", - "Search": "Pesquisar", - "Search…": "Pesquisar…", - "Send": "Enviar", - "Send logs": "Enviar relatórios de erro", - "This Room": "Esta sala", - "Unavailable": "Indisponível", "Unknown device": "Dispositivo desconhecido", - "Update": "Atualizar", - "Uploading report": "A enviar o relatório", - "What's New": "Novidades", - "What's new?": "O que há de novo?", - "Waiting for response from server": "À espera de resposta do servidor", - "OK": "Ok", "You need to be using HTTPS to place a screen-sharing call.": "Necessita de estar a usar HTTPS para poder iniciar uma chamada com partilha de ecrã.", - "No update available.": "Nenhuma atualização disponível.", "Welcome to Riot.im": "Bem-vindo ao Riot.im", - "Login": "Entrar", - "Warning": "Aviso", - "Checking for an update...": "A procurar uma atualização...", - "Error encountered (%(errorDetail)s).": "Erro encontrado (%(errorDetail)s).", - "Downloading update...": "A transferir atualização...", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat descentralizado, encriptado & colaborativo alimentado por [matrix]", - "Back": "Voltar", - "Bug report sent": "Relatório de erros enviado", - "Developer Tools": "Ferramentas de desenvolvedor", - "Failed to send custom event.": "Falha ao enviar evento personalizado.", - "(HTTP status %(httpStatus)s)": "(Estado HTTP %(httpStatus)s)", - "Send Custom Event": "Enviar evento personalizado", - "Send Custom State Event": "Enviar evento personalizado de estado", - "Explore Room State": "Explorar estado da sala", - "Thank you!": "Obrigado!", - "Event sent!": "Evento enviado!", - "Event Type": "Tipo de evento", - "Event Content": "Conteúdo do evento", - "State Key": "Chave de estado", "Search the room directory": "Procurar o diretório de salas", "Chat with Riot Bot": "Falar com o Bot do Riot", "Get started with some tips from Riot Bot!": "Comece com algumas dicas do Bot do Riot", @@ -181,7 +23,7 @@ "Admin support for Dendrite": "Suporte de administração para o Dendrite", "Announcements about Synapse releases": "Anúncios acerca de lançamentos do Synapse", "Support for those using and running matrix-appservice-irc": "Suporte para aqueles a correr e a utilizar o matrix-appservice-irc", - "Building services on Matrix": "Construir serviços no Matrix", + "Building services on Matrix": "Construindo serviços no Matrix", "Support for those using the Matrix spec": "Suporte para os utilizadores da especificação do Matrix", "Design and implementation of E2E in Matrix": "Design e implementação de encriptação ponto-a-ponto (E2E) no Matrix", "Implementing VR services with Matrix": "Implementar serviços de realidade virtual (VR) com o Matrix", @@ -191,19 +33,7 @@ "Contributing code to Matrix and Riot": "Contribuir código para o Matrix e para o Riot", "Dev chat for the Riot/Web dev team": "Conversa de desenvolvimento para a equipa do Riot/Web", "Dev chat for the Dendrite dev team": "Conversa de desenvolvimento para a equipa do Dendrite", - "Co-ordination for Riot/Web translators": "Coordenação para a equipa de tradutores do Riot/Web", "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Já existem muitas salas no Matrix, ligadas a redes já existentes (Slack, IRC, Gitter, etc) ou independentes. Dê uma vista de olhos no diretório!", - "Failed to change password. Is your password correct?": "Falha ao alterar a palavra-passe. A sua palavra-passe está correta?", - "You have successfully set a password!": "Palavra-passe definida com sucesso!", - "You can now return to your account after signing out, and sign in on other devices.": "Pode agora voltar à sua conta no fim de terminar sessão, e iniciar sessão noutros dispositivos.", - "Continue": "Continuar", - "Please set a password!": "Por favor, defina uma palavra-passe!", - "This will allow you to return to your account after signing out, and sign in on other devices.": "Isto irá permitir-lhe voltar à sua conta depois de terminar sessão, assim como iniciar sessão noutros dispositivos.", - "You have successfully set a password and an email address!": "Palavra passe e endereço de e-mail definidos com sucesso!", - "Remember, you can always set an email address in user settings if you change your mind.": "Lembre-se, pode sempre definir um endereço de e-mail nas definições de utilizador se mudar de ideias.", - "To return to your account in future you need to set a password": "Para voltar à sua conta no futuro, necessita de definir uma palavra-passe", - "Set Password": "Definir palavra-passe", - "Couldn't load home page": "Não foi possível carregar a página inicial", - "Filter results": "Filtrar resultados", - "You must specify an event type!": "Tem que especificar um tipo de evento!" + "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Você pode usar as opções de servidor personalizado para entrar em outros servidores Matrix, especificando um diferente URL de servidor doméstico.
    Isto permite que você utilize Riot com uma conta Matrix existente em um servidor doméstico diferente.

    Você também pode definir um servidor de identidade personalizado, porém não poderá convidar usuários por endereço de e-mail nem ser convidado por endereço de e-mail.", + "Co-ordination for Riot translators": "Coordenação para tradutores do Riot" } diff --git a/src/i18n/strings/pt_BR.json b/src/i18n/strings/pt_BR.json index 40df7d6049..f91d6bd316 100644 --- a/src/i18n/strings/pt_BR.json +++ b/src/i18n/strings/pt_BR.json @@ -1,155 +1,15 @@ { - "Add an email address above to configure email notifications": "Insira um endereço de email no campo acima para configurar suas notificações por email", - "All messages": "Todas as mensagens", - "All messages (noisy)": "Todas as mensagens (alto)", - "An error occurred whilst saving your email notification preferences.": "Um erro ocorreu enquanto o sistema estava salvando suas preferências de notificação por email.", - "Call invitation": "Convite para chamada", - "Cancel Sending": "Cancelar o envio", - "Can't update user notification settings": "Não é possível atualizar as preferências de notificação", - "Close": "Fechar", - "Couldn't find a matching Matrix room": "Não foi possível encontrar uma sala correspondente no servidor Matrix", "Custom Server Options": "Opções para Servidor Personalizado", - "delete the alias.": "apagar o apelido da sala.", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Apagar o apelido %(alias)s da sala e remover %(name)s da lista pública?", - "Direct Chat": "Conversa pessoal", - "Directory": "Diretório", "Dismiss": "Descartar", - "Download this file": "Baixar este arquivo", - "Enable audible notifications in web client": "Ativar notificações de áudio no cliente web", - "Enable desktop notifications": "Ativar notificações no desktop", - "Enable email notifications": "Ativar notificações por email", - "Enable notifications for this account": "Ativar notificações para esta conta", - "Enable them now": "Habilitar agora", - "Enter keywords separated by a comma:": "Coloque cada palavras-chave separada por vírgula:", - "Error": "Erro", - "Error saving email notification preferences": "Erro ao salvar as preferências de notificação por email", - "Failed to add tag %(tagName)s to room": "Falha ao adicionar %(tagName)s à sala", - "Failed to change settings": "Falhou ao mudar as preferências", - "Failed to forget room %(errCode)s": "Falhou ao esquecer a sala %(errCode)s", - "Failed to update keywords": "Falha ao alterar as palavras-chave", - "Failed to get protocol list from Home Server": "Falha em acessar a lista de protocolos do servidor padrão", - "Failed to get public room list": "Falha ao acessar a lista pública de salas", - "Failed to set direct chat tag": "Falha ao definir conversa como pessoal", - "Failed to set Direct Message status of room": "Falha em definir a mensagem de status da sala", - "Favourite": "Favorito", - "Fetching third party location failed": "Falha ao acessar localização de terceiros", - "Files": "Arquivos", - "Filter room names": "Filtrar salas por título", - "Forget": "Esquecer", - "Forward Message": "Encaminhar", - "Guests can join": "Convidados podem entrar", - "Invite to this room": "Convidar para esta sala", - "Keywords": "Palavras-chave", - "Leave": "Sair", - "Low Priority": "Baixa prioridade", - "Members": "Membros", - "Mentions only": "Apenas menções", - "Messages containing my display name": "Mensagens contendo meu nome público", - "Messages containing my user name": "Mensagens contendo meu nome de usuário", - "Messages in group chats": "Mensagens em salas", - "Messages in one-to-one chats": "Mensagens em conversas pessoais", - "Messages sent by bot": "Mensagens enviadas por bots", - "more": "ver mais", - "Mute": "Mudo", - "No rooms to show": "Não existem salas a serem exibidas", - "Noisy": "Barulhento", - "Notification targets": "Alvos de notificação", - "Notifications": "Notificações", - "Notifications on the following keywords follow rules which can’t be displayed here:": "Notificações sobre as seguintes palavras-chave seguem regras que não podem ser exibidas aqui:", - "Notify for all other messages/rooms": "Notificar para todas as outras mensagens e salas", - "Notify me for anything else": "Notificar-me sobre qualquer outro evento", - "Off": "Desativado", - "On": "Ativado", - "Operation failed": "A operação falhou", - "Permalink": "Link permanente", - "powered by Matrix": "rodando a partir do Matrix", - "Quote": "Citar", - "Reject": "Rejeitar", - "Remove": "Remover", - "Remove %(name)s from the directory?": "Remover %(name)s da lista pública de salas?", - "remove %(name)s from the directory.": "remover %(name)s da lista pública de salas.", - "Remove from Directory": "Remover da lista pública de salas", - "Resend": "Reenviar", - "Riot does not know how to join a room on this network": "O sistema não sabe como entrar na sala desta rede", - "Room not found": "Sala não encontrada", - "Search for a room": "Procurar por uma sala", - "Source URL": "URL fonte", - "The Home Server may be too old to support third party networks": "O servidor pode ser muito antigo para suportar redes de terceiros", - "There are advanced notifications which are not shown here": "Existem opções avançadas que não são exibidas aqui", - "The server may be unavailable or overloaded": "O servidor pode estar inacessível ou sobrecarregado", - "Unable to fetch notification target list": "Não foi possível obter a lista de alvos de notificação", - "Unable to join network": "Não foi possível conectar na rede", - "Unable to look up room ID from server": "Não foi possível buscar identificação da sala no servidor", - "Unhide Preview": "Mostrar a pré-visualização", - "unknown error code": "código de erro desconhecido", - "Unnamed room": "Sala sem nome", - "Uploaded on %(date)s by %(user)s": "Enviada em %(date)s por %(user)s", - "View Decrypted Source": "Ver a fonte descriptografada", - "View Source": "Ver a fonte", - "When I'm invited to a room": "Quando sou convidada(o) a uma sala", - "World readable": "Público", - "You cannot delete this image. (%(code)s)": "Você não pode apagar esta imagem. (%(code)s)", - "You cannot delete this message. (%(code)s)": "Você não pode apagar esta mensagem. (%(code)s)", - "You are not receiving desktop notifications": "Você não está recebendo notificações desktop", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Você pode te-las configurado em outro cliente além do Riot. Você não pode ajustá-las no Riot, mas ainda assim elas se aplicam aqui", - "Sunday": "Domingo", - "Monday": "Segunda", - "Tuesday": "Terça", - "Wednesday": "Quarta", - "Thursday": "Quinta", - "Friday": "Sexta", - "Saturday": "Sábado", - "Today": "Hoje", - "Yesterday": "Ontem", - "#example": "#exemplo", - "Failed to remove tag %(tagName)s from room": "Não foi possível remover a marcação %(tagName)s desta sala", - "Advanced notification settings": "Configurações avançadas de notificação", - "customServer_text": "Você pode usar as opções de servidor personalizado para entrar em outros servidores Matrix, especificando uma URL de outro Servidor de Base.
    Isso permite que você use Riot com uma conta Matrix que exista em outro Servidor de Base.

    Você também pode configurar um servidor de Identidade personalizado, mas neste caso não poderá convidar usuárias(os) pelo endereço de e-mail, ou ser convidado(a) pelo seu endereço de e-mail.", - "Safari and Opera work too.": "Safari e Opera funcionam também.", - "All notifications are currently disabled for all targets.": "Todas as notificações estão atualmente desabilitadas para todos os casos.", - "Collapse panel": "Colapsar o painel", - "Expand panel": "Expandir o painel", - "I understand the risks and wish to continue": "Entendo os riscos e desejo continuar", - "Messages containing keywords": "Mensagens contendo palavras-chave", - "Please install Chrome or Firefox for the best experience.": "Por favor instale Chrome ou Firefox para ter a melhor experiência de uso.", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "O Riot usa muitas funcionalidades avançadas do navegador, algumas das quais não estão disponíveis ou ainda são experimentais no seu navegador atual.", - "Sorry, your browser is not able to run Riot.": "Perdão. O seu navegador não é capaz de rodar o Riot.", - "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Com o seu navegador atual, a aparência e sensação de uso da aplicação podem estar completamente incorretas, e algumas das funcionalidades poderão não funcionar. Se você quiser tentar de qualquer maneira, pode continuar, mas aí vai ter que se virar sozinho(a) com os problemas que porventura encontrar!", + "powered by Matrix": "oferecido por Matrix", "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s em %(osName)s", - "A new version of Riot is available.": "Uma nova versão do Riot está disponível.", - "All Rooms": "Todas as salas", - "Cancel": "Cancelar", - "Changelog": "Histórico de alterações", - "Collecting app version information": "Coletando informação sobre a versão do app", - "Collecting logs": "Coletando logs", - "Describe your problem here.": "Descreva o seu problema aqui.", - "Failed to send report: ": "Falha ao enviar o relatório: ", - "Hide panel": "Ocultar o painel", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Para diagnosticar problemas, relatórios deste cliente serão enviados junto a esta notificação de falha. Se você prefere apenas enviar o seu texto acima, por favor des-selecione:", - "Loading bug report module": "Carregando o módulo de relatórios de erros", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Por favor, descreva a falha encontrada. O que você estava fazendo? O que você esperava que devia ocorrer? E o que aconteceu efetivamente?", - "Please describe the bug and/or send logs.": "Por favor, descreva as falhas e/ou envie os logs de erro.", - "Report a bug": "Reportar uma falha", "Riot Desktop on %(platformName)s": "Riot para computadores desktop em %(platformName)s", - "Riot is not supported on mobile web. Install the app?": "Riot versão web não é suportado a partir de celular. Quer instalar o app para celular?", - "Search": "Buscar", - "Search…": "Buscar…", - "Send": "Enviar", - "Send logs": "Enviar relatórios de erro", - "This Room": "Esta sala", - "Unavailable": "Indisponível", + "Riot is not supported on mobile web. Install the app?": "Riot não funciona em navegador de smartphone. Quer instalar o aplicativo?", "Unknown device": "Dispositivo desconhecido", - "Update": "Atualizar", - "Uploading report": "Enviando o relatório", - "What's New": "Novidades", - "What's new?": "O que há de novidades?", - "Waiting for response from server": "Esperando por resposta do servidor", - "OK": "Ok", "You need to be using HTTPS to place a screen-sharing call.": "Você precisa estar usando HTTPS para poder iniciar uma chamada com compartilhamento de tela.", - "Login": "Fazer login", "Welcome to Riot.im": "Seja bem-vinda(o) a Riot.im", "Search the room directory": "Buscar na lista pública de salas", - "Chat with Riot Bot": "Conversar com o Bot do Riot", + "Chat with Riot Bot": "Converse com o bot do Riot", "Get started with some tips from Riot Bot!": "Comece com algumas dicas do Bot do Riot!", "General discussion about Matrix and Riot": "Discussão geral sobre o Matrix e o Riot", "Discussion of all things Matrix!": "Discussão sobre todas as coisas do Matrix!", @@ -159,7 +19,7 @@ "Matrix technical discussions": "Discussões técnicas do Matrix", "Running Matrix services": "Rodando serviços Matrix", "Community-run support for Synapse": "Apoio ao Synapse gerido pela comunidade", - "Admin support for Dendrite": "Suporte de administração para Dendrite", + "Admin support for Dendrite": "Suporte administrativo para o Dendrite", "Announcements about Synapse releases": "Anúncios sobre lançamentos do Synapse", "Support for those using and running matrix-appservice-irc": "Apoio para as pessoas usando e rodando matrix-appservice-irc", "Building services on Matrix": "Construindo serviços no Matrix", @@ -172,38 +32,22 @@ "Contributing code to Matrix and Riot": "Contribuindo com código para o Matrix e o Riot", "Dev chat for the Riot/Web dev team": "Chat de desenvolvimento para o time devel do Riot/Web", "Dev chat for the Dendrite dev team": "Chat de desenvolvimento para o time devel do Dendrite", - "Co-ordination for Riot/Web translators": "Coordenação para tradutoras(es) do Riot/Web", "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Muitas salas já existem no Matrix, algumas independentes, e outras relacionadas a redes existentes (tais como Slack, IRC, Gitter, entre outras). Dê uma olhada na lista de salas públicas!", - "Failed to change password. Is your password correct?": "Não foi possível mudar a senha. A sua senha está correta?", - "You have successfully set a password!": "Você definiu sua senha com sucesso!", - "You can now return to your account after signing out, and sign in on other devices.": "Você pode retornar agora para a sua conta depois de fazer logout, e então fazer login em outros dispositivos.", - "Continue": "Continuar", - "Please set a password!": "Por favor, defina uma senha!", - "This will allow you to return to your account after signing out, and sign in on other devices.": "Isso permitirá que você possa retornar à sua conta após fazer logout, e também fazer login em outros dispositivos.", - "(HTTP status %(httpStatus)s)": "(Status HTTP %(httpStatus)s)", - "Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat descentralizado, criptografado e colaborativo impulsionado por [matrix]", - "You have successfully set a password and an email address!": "Você definiu uma senha e um endereço de e-mail com sucesso!", - "Remember, you can always set an email address in user settings if you change your mind.": "Lembre-se: você pode sempre definir um endereço de e-mail nas configurações de usuário, se mudar de ideia.", - "To return to your account in future you need to set a password": "Para poder, futuramente, retornar à sua conta, você precisa definir uma senha", - "Set Password": "Definir senha", - "Warning": "Atenção", - "Checking for an update...": "Verificando se há atualizações...", - "Error encountered (%(errorDetail)s).": "Erro encontrado (%(errorDetail)s).", - "No update available.": "Não há atualizações disponíveis.", - "Downloading update...": "Baixando atualização...", - "Couldn't load home page": "Não foi possível carregar a página inicial", - "Back": "Voltar", - "Bug report sent": "Relatório do bug enviado", - "Developer Tools": "Ferramentas do desenvolvedor", - "Failed to send custom event.": "Falha ao enviar evento personalizado.", - "Filter results": "Filtrar resultados", - "Send Custom Event": "Enviar Evento Customizado", - "Send Custom State Event": "Enviar Evento de Estado Personalizado", - "Explore Room State": "Explorar Estado da Sala", - "You must specify an event type!": "Você precisa especificar um tipo do evento!", - "Thank you!": "Obrigado!", - "Event sent!": "Evento enviado!", - "Event Type": "Tipo do Evento", - "Event Content": "Conteúdo do Evento", - "State Key": "Chave do Estado" + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat descentralizado, criptografado e colaborativo oferecido por [matrix]", + "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Você pode usar as opções customizadas de servidor para conectar-se a outros servidores Matrix ao especificar uma outra URL de Servidor de Base (homeserver).
    Isso permite que você use o Riot com uma conta Matrix existente em outro servidor de base.

    Você também pode definir um servidor de identidade customizado, mas neste caso você não poderá convidar outras pesoas por endereço de email, ou ser convidada/o pelo seu endereço de email.", + "Co-ordination for Riot translators": "Coordenação para tradutores Riot", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Você pode usar as opções personalizadas do servidor para entrar em outros servidores Matrix, especificando um URL diferente de homeserver. Isso permite que você use o Riot com uma conta Matrix existente em um homeserver diferente.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Você também pode definir um servidor de identidade personalizado, mas não poderá convidar usuários por endereço de e-mail nem ser convidado por endereço de e-mail.", + "Sign In": "Entrar", + "Create Account": "Criar Conta", + "Need help?": "Precisa de ajuda?", + "Explore rooms": "Explore as salas", + "Room Directory": "Diretório de salas", + "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Sua configuração do Riot contém JSON inválido. Por favor corrija o erro e atualize a página.", + "The message from the parser is: %(message)s": "A mensagem do parser é: %(message)s", + "Invalid JSON": "JSON inválido", + "Your Riot is misconfigured": "Riot possui um erro de configuração", + "Unexpected error preparing the app. See console for details.": "Erro inesperado preparando o aplicativo. Veja o console para mais detalhes.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuração inválida: somente se pode especificar um valor entre default_server_config, default_server_name, ou default_hs_url.", + "Invalid configuration: no default server specified.": "Configuração inválida: servidor padrão não especificado." } diff --git a/src/i18n/strings/ro.json b/src/i18n/strings/ro.json new file mode 100644 index 0000000000..ce8fd6349a --- /dev/null +++ b/src/i18n/strings/ro.json @@ -0,0 +1,46 @@ +{ + "Riot is not supported on mobile web. Install the app?": "Riot nu functionează pe mobil. Instalezi aplicaţia?", + "Riot Desktop on %(platformName)s": "Riot Desktop pe %(platformName)s", + "Unknown device": "Device necunoscut", + "Custom Server Options": "Opțiuni Server Personalizate", + "Dismiss": "Închide", + "powered by Matrix": "propulsat de Matrix", + "Welcome to Riot.im": "Bun venit pe Riot.im", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat decentralizat, criptat & colaborare propulsata de [matrix]", + "Search the room directory": "Caută în lista de camere", + "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Multe camere există deja in Matrix, conectate la rețele existente (Slack, IRC, Gitter etc) sau independente. Aruncă o privite in lista de camere!", + "Chat with Riot Bot": "Discută cu Riot Bot", + "Get started with some tips from Riot Bot!": "Începe cu câteva ponturi din partea Riot Bot!", + "General discussion about Matrix and Riot": "Discuție generală despre Matrix și Riot", + "Discussion of all things Matrix!": "Discuții despre toate subiectele Matrix!", + "Riot/Web & Desktop chat": "Riot/Web & Chat pentru desktop", + "Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & chat pentru matrix-ios-sdk", + "Riot/Android & matrix-android-sdk chat": "Riot/Android & chat pentru matrix-android-sdk", + "Matrix technical discussions": "Discuții tehnice Matrix", + "Running Matrix services": "Rularea serviciilor Matrix", + "Community-run support for Synapse": "Suport cu ajutorul comunității pentru Synapse", + "Admin support for Dendrite": "Suport Administrare pentru Dendrite", + "Announcements about Synapse releases": "Anunțuri despre lansări Synapse", + "Support for those using and running matrix-appservice-irc": "Suport pentru cei care utilizează și rulează matrix-appservice-irc", + "Building services on Matrix": "Construirea serviciilor cu Matrix", + "Support for those using the Matrix spec": "Suport pentru cei ce utilizează specificațiile Matrix", + "Design and implementation of E2E in Matrix": "Designul și planificarea E2E în Matrix", + "Implementing VR services with Matrix": "Implementarea serviciilor VR cu Matrix", + "Implementing VoIP services with Matrix": "Implementarea serviciilor VoIP cu Matrix", + "Discussion of the Identity Service API": "Discuții despre API-ul Serviciul de Identitate", + "Support for those using, running and writing other bridges": "Suport pentru cei ce folosesc, rulează și programeaza alți conectori", + "Contributing code to Matrix and Riot": "Contribuirea codului pentru Matrix și Riot", + "Dev chat for the Riot/Web dev team": "Chat pentru echipa de dezvoltare Riot/Web", + "Dev chat for the Dendrite dev team": "Chat pentru echipa de dezvoltare Dendrite", + "Co-ordination for Riot translators": "Coordonare pentru translatorii Riot", + "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s pe %(osName)s", + "You need to be using HTTPS to place a screen-sharing call.": "Trebuie să folosești HTTPS pentru a plasa un apel de tip screen-sharing.", + "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Poți folosi opțiunile server personalizate pentru a te conecta la alte servere Matrix prin specificarea unui URL de tip Home server diferit.
    Acestă opțiune îți permite să utilizezi Riot cu un cont existent pe un home server diferit.

    Poți folosi și un server de identitate personalizat, dar nu vei putea invita alți utilizatori prin adresa de email sau să fii tu însuți invitat prim email.", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Puteți utiliza opțiunile personalizate ale serverului pentru a vă conecta la alte servere Matrix specificând o adresă URL diferită pentru homeserver. Acest lucru vă permite să utilizați Riot cu un cont Matrix existent pe un alt server de domiciliu.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "De asemenea, puteți seta un server de identitate personalizat, dar nu veți putea să invitați utilizatorii pe adresa de e-mail sau să vă invitați personal pe adresa de e-mail.", + "Sign In": "Autentificare", + "Create Account": "Înregistare", + "Need help?": "Ai nevoie de ajutor?", + "Explore rooms": "Explorează camerele", + "Room Directory": "Lista de camere" +} diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json index 1f08d804b0..125a2240fa 100644 --- a/src/i18n/strings/ru.json +++ b/src/i18n/strings/ru.json @@ -1,226 +1,54 @@ { - "Add an email address above to configure email notifications": "Добавьте email адрес для оповещений", - "All notifications are currently disabled for all targets.": "Все оповещения для всех устройств отключены.", - "An error occurred whilst saving your email notification preferences.": "Возникла ошибка при сохранении настроек оповещения по email.", - "Can't update user notification settings": "Не удается обновить пользовательские настройки оповещения", - "Couldn't find a matching Matrix room": "Не удалось найти подходящую комнату Matrix", - "Custom Server Options": "Настраиваемые параметры сервера", - "delete the alias.": "удалить псевдоним.", - "Direct Chat": "Прямой чат", - "Directory": "Каталог", - "Dismiss": "Отказ", - "Enable audible notifications in web client": "Включить звуковые уведомления в веб-клиенте", - "Enable desktop notifications": "Включить оповещения на рабочем столе", - "Enable email notifications": "Включить уведомления по email", - "Enable notifications for this account": "Включить уведомления для этой учетной записи", - "Enable them now": "Включить сейчас", - "Enter keywords separated by a comma:": "Введите ключевые слова, разделенные запятой:", - "Error": "Ошибка", - "Error saving email notification preferences": "Ошибка при сохранении настроек уведомлений по email", - "#example": "#пример", - "Failed to change settings": "Не удалось изменить настройки", - "Failed to update keywords": "Не удалось обновить ключевые слова", - "Failed to get protocol list from Home Server": "Не удалось получить список протоколов с домашнего сервера", - "Failed to get public room list": "Не удалось получить список общедоступных комнат", - "Failed to set Direct Message status of room": "Не удалось установить статус прямого сообщения в комнате", - "Favourite": "Избранное", - "Fetching third party location failed": "Не удалось извлечь местоположение третьей стороны", - "Files": "Файлы", - "Filter room names": "Фильтр по названию комнат", - "Forget": "Забыть", - "Guests can join": "Гости могут присоединиться", - "Invite to this room": "Пригласить в комнату", - "Keywords": "Ключевые слова", - "Leave": "Покинуть", - "Low Priority": "Низкий приоритет", - "Members": "Участники", - "No rooms to show": "Нет комнат для отображения", - "Noisy": "Со звуком", - "Notification targets": "Цели уведомления", - "Notifications": "Уведомления", - "Notifications on the following keywords follow rules which can’t be displayed here:": "Уведомления по следующим ключевым словам соответствуют правилам, которые нельзя отобразить здесь:", - "Notify for all other messages/rooms": "Уведомлять обо всех других сообщениях/комнатах", - "Notify me for anything else": "Уведомлять во всех остальных случаях", - "Off": "Выключить", - "On": "Включить", - "Operation failed": "Сбой операции", - "powered by Matrix": "Основано на Matrix", - "Reject": "Отклонить", - "Remove": "Удалить", - "Remove from Directory": "Удалить из каталога", - "Riot does not know how to join a room on this network": "Riot не знает, как присоединиться к комнате, принадлежащей к этой сети", - "Room not found": "Комната не найдена", - "Search for a room": "Поиск комнаты", - "The Home Server may be too old to support third party networks": "Домашний сервер может быть слишком старым для поддержки сетей сторонних производителей", - "There are advanced notifications which are not shown here": "Существуют дополнительные уведомления, которые не показаны здесь", - "The server may be unavailable or overloaded": "Сервер, вероятно, недоступен или перегружен", - "Unable to fetch notification target list": "Не удалось получить список целей уведомления", - "Unable to join network": "Не удается подключиться к сети", - "Unable to look up room ID from server": "Не удалось найти ID комнаты на сервере", - "unknown error code": "неизвестный код ошибки", - "Unnamed room": "Комната без названия", - "World readable": "Доступно всем", - "You are not receiving desktop notifications": "Вы не получаете уведомления на рабочем столе", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Возможно вы настроили их не в Riot, а в другом Matrix-клиенте. Настроить их в Riot не удастся, но они будут в нем применяться", - "All messages": "Все сообщения", - "All messages (noisy)": "Все сообщения (со звуком)", - "Cancel Sending": "Отменить отправку", - "Close": "Закрыть", - "Download this file": "Скачать этот файл", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Удалить псевдоним комнаты %(alias)s и удалить %(name)s из каталога?", - "Failed to add tag %(tagName)s to room": "Не удалось добавить тег %(tagName)s в комнату", - "Failed to forget room %(errCode)s": "Не удалось удалить комнату %(errCode)s", - "Failed to remove tag %(tagName)s from room": "Не удалось удалить тег %(tagName)s из комнаты", - "Failed to set direct chat tag": "Не удалось установить тег прямого чата", - "Unhide Preview": "Показать предварительный просмотр", - "Uploaded on %(date)s by %(user)s": "Отправлено %(date)s для %(user)s", - "View Decrypted Source": "Просмотр расшифрованного источника", - "View Source": "Просмотр источника", - "You cannot delete this image. (%(code)s)": "Это изображение нельзя удалить. (%(code)s)", - "You cannot delete this message. (%(code)s)": "Это сообщение нельзя удалить. (%(code)s)", - "Sunday": "Воскресенье", - "Monday": "Понедельник", - "Tuesday": "Вторник", - "Wednesday": "Среда", - "Thursday": "Четверг", - "Friday": "Пятница", - "Saturday": "Суббота", - "Today": "Сегодня", - "Yesterday": "Вчера", - "Mentions only": "Только при упоминаниях", - "Mute": "Беззвучный", - "Permalink": "Постоянная ссылка", - "Quote": "Цитата", - "Remove %(name)s from the directory?": "Удалить %(name)s из каталога?", - "remove %(name)s from the directory.": "удалить %(name)s из каталога.", - "Resend": "Переотправить", - "Source URL": "Исходный URL-адрес", - "Advanced notification settings": "Дополнительные параметры уведомлений", - "Call invitation": "Пригласительный звонок", - "customServer_text": "Вы можете использовать настраиваемые параметры сервера для входа на другие серверы Matrix, указав другой URL-адрес домашнего сервера.
    Это позволяет использовать это приложение с существующей учетной записью Matrix на другом домашнем сервере.

    Вы также можете установить другой сервер идентификации, но это, как правило, будет препятствовать взаимодействию с пользователями на основе адреса электронной почты.", - "Messages containing my display name": "Сообщения, содержащие мое имя", - "Messages containing my user name": "Сообщение, содержащие мое имя пользователя", - "Messages in group chats": "Сообщения в групповых чатах", - "Messages in one-to-one chats": "Сообщения в индивидуальных чатах", - "Messages sent by bot": "Сообщения, отправленные ботом", - "more": "больше", - "When I'm invited to a room": "Когда меня приглашают в комнату", - "A new version of Riot is available.": "Доступна новая версия Riot.", - "All Rooms": "Все комнаты", - "Cancel": "Отмена", - "Changelog": "История изменений", - "Collapse panel": "Свернуть панель", - "Collecting app version information": "Сбор информации о версии приложения", - "Collecting logs": "Сбор журналов", + "Custom Server Options": "Параметры другого сервера", + "Dismiss": "Отклонить", + "powered by Matrix": "основано на Matrix", "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s с %(browserName)s на %(osName)s", - "Safari and Opera work too.": "Safari и Opera работают тоже.", - "Describe your problem here.": "Опишите вашу проблему здесь.", - "Expand panel": "Развернуть панель", - "Failed to send report: ": "Не удалось отправить отчет: ", - "Forward Message": "Переслать сообщение", - "Hide panel": "Скрыть панель", - "I understand the risks and wish to continue": "Я понимаю риски и желаю продолжить", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Чтобы диагностировать проблемы, журналы работы этого клиента будут отправлены вместе с сообщением об ошибке. Если вы предпочитаете отправить только текст выше, пожалуйста, снимите отметку:", - "Loading bug report module": "Загрузка модуля Отчет об ошибках", - "Messages containing keywords": "Сообщения, содержащие определенные ключевые слова", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Пожалуйста, опишите ошибку. Что сделали? Чего ожидали? Что на самом деле произошло?", - "Please describe the bug and/or send logs.": "Опишите ошибку и/или отправьте журналы.", - "Please install Chrome or Firefox for the best experience.": "Для получения наилучшего опыта при работе с Riot, пожалуйста, установите Chrome или Firefox.", - "Report a bug": "Сообщить об ошибке", "Riot Desktop on %(platformName)s": "Riot Desktop на %(platformName)s", - "Riot is not supported on mobile web. Install the app?": "Riot не поддерживает версию веб-сайта для мобильных устройств. Установить приложение?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot использует многие передовые возможности браузера, некоторые из которых недоступны или являются экспериментальным в вашем текущем браузере.", - "Search": "Поиск", - "Search…": "Поиск.…", - "Send": "Отправить", - "Send logs": "Отправка журналов", - "Sorry, your browser is not able to run Riot.": "К сожалению, ваш браузер не способен запустить Riot.", - "This Room": "Эта комната", - "Unavailable": "Недоступен", + "Riot is not supported on mobile web. Install the app?": "Веб-сайт Riot не адаптирован для мобильных устройств. Установить приложение?", "Unknown device": "Неизвестное устройство", - "Update": "Обновление", - "Uploading report": "Отправка отчета", - "What's New": "Что нового", - "What's new?": "Что нового?", - "Waiting for response from server": "Ожидание ответа от сервера", - "OK": "OK", - "You need to be using HTTPS to place a screen-sharing call.": "Требуется использование HTTPS для совместного использования рабочего стола.", - "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "В текущем браузере внешний вид приложения может быть полностью неверным, а некоторые или все функции могут не работать. Если вы хотите попробовать в любом случае, то можете продолжить, но с теми проблемами, с которыми вы можете столкнуться вам придется разбираться самостоятельно!", - "Login": "Войти", - "Welcome to Riot.im": "Добро пожаловать на Riot.im", - "Decentralised, encrypted chat & collaboration powered by [matrix]": "Децентрализованный, зашифрованный чат и совместная работа при поддержке [matrix]", + "You need to be using HTTPS to place a screen-sharing call.": "Для трансляции рабочего стола требуется использование HTTPS.", + "Welcome to Riot.im": "Добро пожаловать в Riot.im", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Децентрализованный, шифрованный чат и совместное рабочее пространство на основе [matrix]", "Search the room directory": "Поиск в каталоге комнат", - "Chat with Riot Bot": "Пообщаться с ботом Riot", - "Get started with some tips from Riot Bot!": "Начните с некоторых советов от бота Riot!", - "General discussion about Matrix and Riot": "Общая дискуссия о Matrix и Riot", - "Discussion of all things Matrix!": "Дискуссия обо всем, что связано с Matrix!", - "Riot/Web & Desktop chat": "Riot/Web & Desktop-чат", - "Matrix technical discussions": "Технические дискуссии о Matrix", - "Running Matrix services": "Запуск сервисов Matrix", - "Community-run support for Synapse": "Поддержка Synapse от сообщества", + "Chat with Riot Bot": "Чат с ботом Riot", + "Get started with some tips from Riot Bot!": "Начните с советов от бота Riot!", + "General discussion about Matrix and Riot": "Общие разговоры о Matrix и Riot", + "Discussion of all things Matrix!": "Разговоры обо всем, что связано с Matrix!", + "Riot/Web & Desktop chat": "Чат о Riot/Web и Desktop", + "Matrix technical discussions": "Технические обсуждения Matrix", + "Running Matrix services": "Запуск Matrix сервисов", + "Community-run support for Synapse": "Общественная поддержка Synapse", "Admin support for Dendrite": "Административная поддержка Dendrite", - "Building services on Matrix": "Разработка сервисов на Matrix", - "Implementing VoIP services with Matrix": "Внедрение VoIP-услуг с помощью Matrix", - "(HTTP status %(httpStatus)s)": "(статус HTTP %(httpStatus)s)", - "Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk чат", - "Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk чат", - "Announcements about Synapse releases": "Объявления о выпусках Synapse", - "Support for those using and running matrix-appservice-irc": "Поддержка тех, кто использует и работает с matrix-appservice-irc", - "You have successfully set a password!": "Вы успешно установили пароль!", - "Continue": "Продолжить", - "Please set a password!": "Пожалуйста, установите пароль!", - "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "В Matrix существует множество комнат, как связанных с существующими сетями (Slack, IRC, Gitter и пр.), так и независимых. Ищите в каталоге!", - "Failed to change password. Is your password correct?": "Не удалось сменить пароль. Вы правильно ввели текущий пароль?", - "You can now return to your account after signing out, and sign in on other devices.": "Теперь вы сможете вернуться к своей учетной записи после выхода из системы и войти на других устройствах.", - "Support for those using the Matrix spec": "Поддержка пользователей, использующих Matrix spec", - "Design and implementation of E2E in Matrix": "Разработка и внедрение сквозного шифрования (E2E) в Matrix", - "Implementing VR services with Matrix": "Внедрение сервисов виртуальной реальности (VR) с помощью Matrix", - "Discussion of the Identity Service API": "Обсуждение API службы идентификации", - "Support for those using, running and writing other bridges": "Поддержка для тех, кто использует, разрабатывает и внедряет приложения интеграции для Matrix", - "Contributing code to Matrix and Riot": "Внести свой вклад в разработку кода Matrix и Riot", - "Dev chat for the Riot/Web dev team": "Чат с командой разработчиков Riot/Web", - "Dev chat for the Dendrite dev team": "Чат с командой разработчиков Dendrite", - "Co-ordination for Riot/Web translators": "Координация для переводчиков Riot/Web", - "This will allow you to return to your account after signing out, and sign in on other devices.": "Это позволит вам вернуться к учетной записи после выхода из системы и войти на других устройствах.", - "You have successfully set a password and an email address!": "Вы успешно установили пароль и адрес email!", - "Remember, you can always set an email address in user settings if you change your mind.": "Помните, что вы всегда сможете задать адрес email в настройках пользователя, если передумаете.", - "Set Password": "Задать пароль", - "To return to your account in future you need to set a password": "Чтобы вернуться к учетной записи в будущем, необходимо задать пароль", - "Warning": "Предупреждение", - "Checking for an update...": "Проверка обновлений...", - "Error encountered (%(errorDetail)s).": "Обнаружена ошибка (%(errorDetail)s).", - "No update available.": "Нет доступных обновлений.", - "Downloading update...": "Загрузка обновления...", - "Couldn't load home page": "Не удалось загрузить домашнюю страницу", - "Bug report sent": "Отчет об ошибке отправлен", - "Thank you!": "Спасибо!", - "Back": "Назад", - "Developer Tools": "Инструменты разработчика", - "Failed to send custom event.": "Не удалось отправить индивидуальное мероприятие.", - "Send Custom Event": "Отправить индивидуальное мероприятие", - "Send Custom State Event": "Отправить статус индивидуального мероприятия", - "Explore Room State": "Просмотр статуса комнаты", - "Event sent!": "Мероприятие отправлено!", - "Event Type": "Тип мероприятия", - "Event Content": "Содержание мероприятия", - "State Key": "Ключ состояния", - "Filter results": "Фильтрация результатов", - "You must specify an event type!": "Необходимо указать тип мероприятия!", - "Show message in desktop notification": "Показывать сообщение в уведомлении на рабочем столе", - "Pin Message": "Закрепить сообщение", - "Unpin Message": "Открепить сообщение", - "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Вы можете использовать пользовательские параметры сервера для входа на другие сервера Matrix, указав другой URL-адрес домашнего сервера.
    Это позволяет использовать Riot с существующей учетной записью Matrix на другом домашнем сервере.

    Кроме того, можно установить пользовательский сервер идентификации, однако вы не сможете ни пригласить других пользователей, ни быть приглашенным, используя адрес электронной почты, .", - "Edit": "Редактировать", - "Register": "Регистрация", - "Rooms": "Комнаты", - "Invite to this community": "Пригласить в это сообщество", - "Add rooms to this community": "Добавить комнаты в это сообщество", - "Toolbox": "Панель инструментов", - "Send Account Data": "Отправить данные аккаунта", - "Explore Account Data": "Просмотр данных аккаунта", - "Away": "Нет на месте", - "Appear Offline": "Отображать как не в сети", - "Please install Chrome or Firefox for the best experience.": "Лучший опыт вы получите, установив Chrome или Firefox.", - "Safari and Opera work too.": "Safari и Opera работают тоже.", - "Reply": "Ответить" + "Building services on Matrix": "Разработка сервисов на основе Matrix", + "Implementing VoIP services with Matrix": "Реализация VoIP сервисов на основе Matrix", + "Riot/iOS & matrix-ios-sdk chat": "Чат о Riot/iOS и matrix-ios-sdk", + "Riot/Android & matrix-android-sdk chat": "Чат о Riot/Android и matrix-android-sdk", + "Announcements about Synapse releases": "Уведомление о релизах Synapse", + "Support for those using and running matrix-appservice-irc": "Поддержка пользователей и администраторов matrix-appservice-irc", + "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "В Matrix существует множество комнат, как связанных с другими сетями (Slack, IRC, Gitter и пр.), так и самостоятельных. Загляните в каталог!", + "Support for those using the Matrix spec": "Поддержка по спецификации Matrix", + "Design and implementation of E2E in Matrix": "Разработка и внедрение сквозного шифрования в Matrix", + "Implementing VR services with Matrix": "Реализация сервисов виртуальной реальности (VR) на основе Matrix", + "Discussion of the Identity Service API": "Обсуждение API серверов идентификации", + "Support for those using, running and writing other bridges": "Поддержка пользователей и разработчиков прочих мостов в Matrix", + "Contributing code to Matrix and Riot": "Участие в разработке Matrix и Riot", + "Dev chat for the Riot/Web dev team": "Чат для команды разработчиков Riot/Web", + "Dev chat for the Dendrite dev team": "Чат для команды разработчиков Dendrite", + "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Вы можете войти на другой сервер Matrix, указав его URL-адрес.
    Это позволяет использовать Riot с учетной записью Matrix на другом сервере.

    Кроме того, можно выбрать другой сервер идентификации, однако в таком случае вы не сможете приглашать пользователей или быть приглашенным по адресу электронной почты.", + "Co-ordination for Riot translators": "Координационный чат для переводчиков Riot", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Вы можете изменить параметры для входа на другие Matrix серверы, указав другой URL.\nЭто позволит использовать Riot с учетной записью Matrix, существующей на другом сервере.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Также можно изменить сервер идентификации, но без возможности приглашать (или быть приглашённым) по адресу электронной почты.", + "Sign In": "Войти в систему", + "Create Account": "Создать аккаунт", + "Need help?": "Помочь?", + "Room Directory": "Каталог комнат", + "Explore rooms": "Исследовать комнаты", + "Unexpected error preparing the app. See console for details.": "Неожиданная ошибка при подготовке приложения. Подробности см. в консоли.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Неверная конфигурация: может указывать только один из следующих параметров: default_server_config, default_server_name или default_hs_url.", + "Invalid configuration: no default server specified.": "Неверная конфигурация: сервер по умолчанию не указан.", + "This installation of Riot seems to have an invalid server configuration. If you are the administrator, please correct the error below": "Эта установка Riot, кажется, имеет неверную конфигурацию сервера. Если вы являетесь администратором, пожалуйста, исправьте ошибку ниже", + "Your Riot is misconfigured": "Ваш Riot неправильно настроен", + "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Ваша конфигурация Riot содержит нерабочий JSON. Пожалуйста исправьте проблему и перезагрузите страницу.", + "The message from the parser is: %(message)s": "Сообщение из парсера: %(message)s", + "Invalid JSON": "Нерабочий JSON" } diff --git a/src/i18n/strings/sco.json b/src/i18n/strings/sco.json new file mode 100644 index 0000000000..7078a336c2 --- /dev/null +++ b/src/i18n/strings/sco.json @@ -0,0 +1,3 @@ +{ + "Unexpected error preparing the app. See console for details.": "Unexpectit error came up gittin the app set up. See the console? Mair details ur thare." +} diff --git a/src/i18n/strings/sk.json b/src/i18n/strings/sk.json index b80a249953..4e398d29fb 100644 --- a/src/i18n/strings/sk.json +++ b/src/i18n/strings/sk.json @@ -1,193 +1,13 @@ { "Riot is not supported on mobile web. Install the app?": "Riot nie je podporovaný na mobilných zariadeniach. Želáte si nainštalovať aplikáciu?", - "Collecting app version information": "Získavajú sa informácie o verzii aplikácii", - "Collecting logs": "Získavajú sa záznamy", - "Uploading report": "Prebieha odovzdanie hlásenia", - "Waiting for response from server": "Čakanie na odpoveď zo servera", "Riot Desktop on %(platformName)s": "Riot Desktop pre %(platformName)s", "Unknown device": "Neznáme zariadenie", "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s cez %(browserName)s pre %(osName)s", "You need to be using HTTPS to place a screen-sharing call.": "Ak si želáte spustiť zdieľanie obrazovky, musíte byť pripojení cez protokol HTTPS.", - "Messages containing my display name": "Správy obsahujúce moje zobrazované meno", - "Messages containing my user name": "Správy obsahujúce moje používateľské meno", - "Messages in one-to-one chats": "Správy v priamych konverzáciách", - "Messages in group chats": "Správy v skupinových konverzáciách", - "When I'm invited to a room": "Pozvania vstúpiť do miestnosti", - "Call invitation": "Audio / Video hovory", - "Messages sent by bot": "Správy odosielané robotmi", - "Error saving email notification preferences": "Chyba pri ukladaní nastavení oznamovania emailom", - "An error occurred whilst saving your email notification preferences.": "Počas ukladania vašich nastavení oznamovania emailom sa vyskytla chyba.", - "Keywords": "Kľúčové slová", - "Enter keywords separated by a comma:": "Zadajte kľúčové slová oddelené čiarkou:", - "OK": "OK", - "Failed to change settings": "Nepodarilo sa zmeniť nastavenia", - "Operation failed": "Operácia zlyhala", - "Can't update user notification settings": "Nie je možné aktualizovať používateľské nastavenia oznamovania", - "Failed to update keywords": "Nepodarilo sa aktualizovať kľúčové slová", - "Messages containing keywords": "Správy obsahujúce kľúčové slová", - "Notify for all other messages/rooms": "oznamovať všetky ostatné správy / miestnosti", - "Notify me for anything else": "Oznamovať mi všetko ostatné", - "Enable notifications for this account": "Povoliť oznámenia pre tento účet", - "All notifications are currently disabled for all targets.": "Momentálne sú zakázané všetky oznámenia pre všetky ciele.", - "Add an email address above to configure email notifications": "Ak si chcete nastaviť oznamovanie emailom, pridajte si emailovú adresu vyššie", - "Enable email notifications": "Povoliť oznamovanie emailom", - "Notifications on the following keywords follow rules which can’t be displayed here:": "Oznámenia nasledujúcich kľúčových slov sa riadia pravidlami, ktoré nie je možné zobraziť na tomto mieste:", - "Unable to fetch notification target list": "Nie je možné získať zoznam cieľov oznámení", - "Notification targets": "Ciele oznámení", - "Advanced notification settings": "Pokročilé nastavenia oznámení", - "There are advanced notifications which are not shown here": "Niektoré pokročilé oznámenia nemôžu byť zobrazené", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Tieto nastavenia oznámení sa použijú aj napriek tomu, že ich nemôžete meniť cez Riot. Pravdepodobne ste si ich nastavili v inej aplikácii", - "Enable desktop notifications": "Povoliť oznámenia na pracovnej ploche", - "Show message in desktop notification": "Zobraziť text správy v oznámení na pracovnej ploche", - "Enable audible notifications in web client": "Povoliť zvukové oznámenia vo webovom klientovi", - "Off": "Zakázané", - "On": "Povolené", - "Noisy": "Hlučné", - "Failed to set direct chat tag": "Nepodarilo sa nastaviť značku priama konverzácia", - "Failed to remove tag %(tagName)s from room": "Nepodarilo sa odstrániť značku %(tagName)s pre túto miestnosť", - "Failed to add tag %(tagName)s to room": "Nepodarilo sa pridať značku %(tagName)s pre túto miestnosť", - "Search…": "Hľadať…", - "Search": "Vyhľadávanie", - "This Room": "V tejto miestnosti", - "All Rooms": "Vo všetkych miestnostiach", - "Sunday": "Nedeľa", - "Monday": "Pondelok", - "Tuesday": "Utorok", - "Wednesday": "Streda", - "Thursday": "Štvrtok", - "Friday": "Piatok", - "Saturday": "Sobota", - "Today": "Dnes", - "Yesterday": "Včera", "Custom Server Options": "Vlastné možnosti servera", "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Vlastné nastavenia servera môžete použiť na pripojenie k iným serverom Matrix a to zadaním URL adresy domovského servera.
    Umožní vám to použiť Riot s už existujúcim Matrix účtom na akomkoľvek domovskom servery.

    Môžete tiež nastaviť vlastný server totožností, no ak tak urobíte, nebudete môcť do konverzácií pozývať používateľov zadaním ich emailovej adresy, ani ostatní nebudú môcť pozvať vás zadaním vašej emailovej adresy.", "Dismiss": "Zamietnuť", "powered by Matrix": "poháňa Matrix", - "You are not receiving desktop notifications": "Nedostávate oznámenia na pracovnej ploche", - "Enable them now": "Povolte si ich teraz", - "What's New": "Čo Je Nové", - "Update": "Aktualizovať", - "What's new?": "Čo je nové?", - "A new version of Riot is available.": "Dostupná je nová verzia Riot.", - "To return to your account in future you need to set a password": "Aby ste sa v budúcnosti mohli vrátiť k vašemu účtu mali by ste si teraz nastaviť heslo", - "Toolbox": "Nástroje", - "Set Password": "Nastaviť Heslo", - "Error encountered (%(errorDetail)s).": "Vyskytla sa chyba (%(errorDetail)s).", - "Checking for an update...": "Kontrola dostupnosti aktualizácie...", - "No update available.": "K dispozícii nie je žiadna aktualizácia.", - "Downloading update...": "Sťahovanie aktualizácie...", - "Warning": "Upozornenie", - "Error": "Chyba", - "You cannot delete this image. (%(code)s)": "Nemôžete vymazať tento obrázok. (%(code)s)", - "Uploaded on %(date)s by %(user)s": "Nahral používateľ %(user)s dňa %(date)s", - "Remove": "Odstrániť", - "Close": "Zatvoriť", - "Download this file": "Stiahnuť tento súbor", - "Please describe the bug and/or send logs.": "Prosím, popíšte problém a / alebo pošlite záznamy.", - "Loading bug report module": "Načítanie modulu hlásenia chýb", - "Bug report sent": "Hlásenie chyby odoslané", - "Thank you!": "Ďakujeme!", - "Failed to send report: ": "Nepodarilo sa odoslať hlásenie: ", - "Cancel": "Zrušiť", - "Report a bug": "Ohlásiť chybu", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Prosím, Napíšte text hlásenia. Čo ste práve robili? Čo ste očakávali? Čo sa v skutočnosti udialo?", - "Describe your problem here.": "Tu popíšte váš problém.", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "S cieľom lepšej diagnostiky problému sa spolu s vašim hlásením odošlú záznami o činnosti programu Riot. Ak si želáte odoslať len text hlásenia, odškrtnite nasledujúce pole:", - "Send logs": "Zahrnúť záznamy", - "Send": "Odoslať", - "Unavailable": "Nedostupné", - "Changelog": "Zoznam zmien", - "Back": "Naspäť", - "You must specify an event type!": "Musíte nastaviť typ udalosti!", - "Event sent!": "Udalosť odoslaná!", - "Failed to send custom event.": "Odoslanie vlastnej udalosti zlyhalo.", - "Event Type": "Typ Udalosti", - "Event Content": "Obsah Udalosti", - "State Key": "State Key", - "Edit": "Upraviť", - "Filter results": "Filtrovať výsledky", - "Send Custom Event": "Odoslať vlastnú udalosť", - "Send Account Data": "Odoslať Údaje Účtu", - "Explore Account Data": "Preskúmať Údaje účtu", - "Explore Room State": "Preskúmať Stav Miestnosti", - "Developer Tools": "Vývojárske Nástroje", - "You have successfully set a password!": "Ǔspešne ste si nastavili heslo!", - "You have successfully set a password and an email address!": "Úspešne si si nastavili heslo aj emailovú adresu!", - "You can now return to your account after signing out, and sign in on other devices.": "Odteraz sa budete k svojmu účtu vedieť vrátiť aj po odhlásení, alebo tiež prihlásiť na iných zariadeniach.", - "Remember, you can always set an email address in user settings if you change your mind.": "Všimnite si, Emailovú adresu môžete pridať aj neskôr v časti nastavenia, ak zmeníte svoj názor.", - "Continue": "Pokračovať", - "Failed to change password. Is your password correct?": "Nepodarilo sa zmeniť heslo. Zadali ste správne heslo?", - "(HTTP status %(httpStatus)s)": "(HTTP status %(httpStatus)s)", - "Please set a password!": "Prosím, nastavte si heslo!", - "This will allow you to return to your account after signing out, and sign in on other devices.": "Toto vám v budúcnosti umožní vrátiť sa k vašemu účtu aj po odhlásení, alebo tiež prihlásiť sa na iných zariadeniach.", - "You cannot delete this message. (%(code)s)": "Nemôžete vymazať túto správu. (%(code)s)", - "Resend": "Poslať znovu", - "Cancel Sending": "Zrušiť odosielanie", - "Forward Message": "Preposlať správu", - "Unpin Message": "Zrušiť pripnutie správy", - "Pin Message": "Pripnúť správu", - "View Source": "Zobraziť zdroj", - "View Decrypted Source": "Zobraziť dešifrovaný zdroj", - "Unhide Preview": "Zobraziť náhľad", - "Permalink": "Trvalý odkaz", - "Quote": "Citácia", - "Source URL": "Pôvodná URL", - "Failed to set Direct Message status of room": "Nepodarilo sa nastaviť stav miestnosti priama konverzácia", - "unknown error code": "neznámy kód chyby", - "Failed to forget room %(errCode)s": "Nepodarilo sa zabudnuť miestnosť %(errCode)s", - "All messages (noisy)": "Všetky správy (hlučné)", - "All messages": "Všetky správy", - "Mentions only": "Len zmienky", - "Mute": "Umlčať", - "Leave": "Opustiť", - "Forget": "Zabudnuť", - "Reject": "Odmietnuť", - "Favourite": "Obľúbená", - "Low Priority": "Nízka priorita", - "Direct Chat": "Priama konverzácia", - "Sorry, your browser is not able to run Riot.": "Prepáčte, vo vašom prehliadači nie je možné spustiť Riot.", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot sa spolieha na mnohé pokročilé vlastnosti prehliadača internetu, a niektoré z nich sú vo vašom prehliadači experimentálne alebo nie sú k dispozícii vôbec.", - "Please install Chrome or Firefox for the best experience.": "Prosím, nainštalujte si Chrome alebo Firefox , aby bol váš zážitok pri používaní Riot čo možno najlepší.", - "Safari and Opera work too.": "Safari a Opera tiež fungujú spoľahlivo.", - "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Vo vašom súčasnom prehliadači nemusí Riot vizerať ani fungovať správne a niektoré alebo všetky vlastnosti môžu chýbať. Ak to chcete vyskúšať, môžete pokračovať, no pri riešení problémov s tým spojených si budete musieť poradiť na vlastnú päsť!", - "I understand the risks and wish to continue": "Rozumiem rizikám a želám si pokračovať", - "Couldn't load home page": "Nie je možné načítať domovskú stránku", - "Login": "Prihlásiť", - "Register": "Registrovať", - "Invite to this room": "Pozvať do tejto miestnosti", - "Members": "Členovia", - "Files": "Súbory", - "Notifications": "Oznámenia", - "Rooms": "Miestnosti", - "Hide panel": "Skryť panel", - "Invite to this community": "Pozvať do tejto komunity", - "Add rooms to this community": "Pridať miestnosti do tejto komunity", - "Failed to get protocol list from Home Server": "Nepodarilo sa získať zoznam protokolov z domovského servera", - "The Home Server may be too old to support third party networks": "Domovský server môže byť natoľko zastaralý, že nepodporuje siete tretíh strán", - "Failed to get public room list": "Nepodarilo sa získať zoznam verejných miestností", - "The server may be unavailable or overloaded": "Server môže byť nedostupný alebo preťažený", - "Unnamed room": "Nepomenovaná miestnosť", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Vymazať alias %(alias)s a odstrániť miestnosť %(name)s z adresára?", - "Remove %(name)s from the directory?": "Odstrániť miestnosť %(name)s z adresára?", - "Remove from Directory": "Odstrániť z adresára", - "remove %(name)s from the directory.": "odstrániť %(name)s z adresára.", - "delete the alias.": "vymazať alias.", - "Unable to join network": "Nie je možné sa pripojiť k sieti", - "Riot does not know how to join a room on this network": "Riot nedokáže vstúpiť do miestnosti na tejto sieti", - "Room not found": "Miestnosť nenájdená", - "Couldn't find a matching Matrix room": "Nie je možné nájsť zodpovedajúcu Matrix miestnosť", - "Fetching third party location failed": "Nepodarilo sa získať umiestnenie tretej strany", - "Unable to look up room ID from server": "Nie je možné vyhľadať ID miestnosti na servery", - "World readable": "Viditeľné pre každého", - "Guests can join": "Pripojiť sa môžu aj hostia", - "Directory": "Adresár", - "No rooms to show": "Žiadne miestnosti na zobrazenie", - "Search for a room": "Vyhľadať miestnosť", - "#example": "#príklad", - "more": "viac", - "Expand panel": "Rozbaliť panel", - "Collapse panel": "Zbaliť panel", - "Filter room names": "Filtrovať názvy miestností", "Welcome to Riot.im": "Víta vás Riot.im", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizovaný, šifrovaný chat a spolupráca na platforme [matrix]", "Search the room directory": "Prehľadať adresár miestností", @@ -215,10 +35,13 @@ "Contributing code to Matrix and Riot": "Prispievanie kódu projektom Matrix a Riot", "Dev chat for the Riot/Web dev team": "Diskusia pre tím vývojárov Riot/Web", "Dev chat for the Dendrite dev team": "Diskusia pre tím vývojárov Dendrite", - "Co-ordination for Riot/Web translators": "Koordinácia prekladov Riot/Web", - "Appear Offline": "Zdá sa byť nedostupný", - "Away": "Preč", - "Please install Chrome or Firefox for the best experience.": "Aby ste s používania mali čo možno najlepší dojem, nainštalujte si Chrome alebo Firefox.", - "Safari and Opera work too.": "Správne fungujú aj Safari a Opera.", - "Reply": "Odpovedať" + "Co-ordination for Riot translators": "Koordinácia prekladov Riot", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Môžete použiť vlastné možnosti servera na prihlásenie sa k ďalším serverom Matrix zadaním URL adresy domovského servera. Toto vám umožní použiť Riot na prihlásenie sa k existujúcemu Matrix účtu na inom domovskom servery.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Môžete tiež nastaviť vlastnú URL adresu servera totožností, potom ale nebudete môcť pozývať používateľov zadaním ich emailovej adresy a telefónneho čísla a ani ostatní nebudú môcť pozvať vás zadaním vašej emailovej adresy a telefónneho čísla.", + "Sign In": "Prihlásiť sa", + "Create Account": "Vytvoriť účet", + "Need help?": "Potrebujete pomoc?", + "Explore rooms": "Preskúmať miestnosti", + "Room Directory": "Adresár miestností", + "Your Riot is misconfigured": "Váš Riot nie je nastavený správne" } diff --git a/src/i18n/strings/sl.json b/src/i18n/strings/sl.json new file mode 100644 index 0000000000..174cf0109f --- /dev/null +++ b/src/i18n/strings/sl.json @@ -0,0 +1,21 @@ +{ + "Riot Desktop on %(platformName)s": "Namizni Riot za %(platformName)s", + "Unknown device": "Neznana naprava", + "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s s %(browserName)s na %(osName)s", + "You need to be using HTTPS to place a screen-sharing call.": "Za klic s skupno rabo zaslona potrebujete HTTPS.", + "powered by Matrix": "poganja Matrix", + "Custom Server Options": "Možnosti strežnika po meri", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Možnosti strežnika po meri lahko uporabite za prijavo v druge Matrix strežnike, s tem da podate drug URL domačega strežnika. To vam omogoča, da uporabljate Riot z obstoječim Matrix računom na drugem strežniku.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Nastavite lahko tudi strežnik za identiteto po meri, vendar ne boste mogli povabiti uporabnikov prek e-pošte, prav tako pa vas ne bodo mogli povabiti drugi.", + "Dismiss": "Opusti", + "Welcome to Riot.im": "Dobrodošli v Riot.im", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizirano šifrirano sporočanje & sodelovanje s pomočjo [matrix]", + "Sign In": "Prijava", + "Create Account": "Registracija", + "Need help?": "Potrebujete pomoč?", + "Chat with Riot Bot": "Klepetajte z Riot Botom", + "Explore rooms": "Raziščite sobe", + "Room Directory": "Imenik sob", + "Search the room directory": "Preiščite imenik sob", + "Get started with some tips from Riot Bot!": "Začnite z nekaterimi nasveti Riot Bota!" +} diff --git a/src/i18n/strings/sq.json b/src/i18n/strings/sq.json new file mode 100644 index 0000000000..a18875abdc --- /dev/null +++ b/src/i18n/strings/sq.json @@ -0,0 +1,54 @@ +{ + "Riot is not supported on mobile web. Install the app?": "Riot-i nuk mbulohet në web për celularë. Të instalohet aplikacioni?", + "Riot Desktop on %(platformName)s": "Riot Desktop në %(platformName)s", + "Unknown device": "Pajisje e panjohur", + "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s përmes %(browserName)s nën %(osName)s", + "You need to be using HTTPS to place a screen-sharing call.": "Që të bëni një thirrje me ndarje ekrani, duhet të jeni duke përdorur HTTPS-në.", + "Custom Server Options": "Mundësi Vetjake Shërbyesi", + "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Mund t’i përdorni mundësitë e shërbyesit vetjak për të hyrë në shërbyes të tjerë Matrix, duke dhënë URL-në e një tjetër shërbyesi Home.
    Kjo ju lejon ta përdorni Riot-in me një llogari Matrix ekzistuese në një tjetër shërbyes vatër.

    Mundeni edhe të caktoni një shërbyes vetjak identitetesh, por s’do të jeni në gjendje të ftoni përdorues përmes adresash email, ose të ftoheni ju vetëm përmes adrese email.", + "Dismiss": "Mos e merr parasysh", + "powered by Matrix": "bazuar në Matrix", + "Welcome to Riot.im": "Mirë se vini te Riot.im", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Fjalosje & bashkëpunim të decentralizuar, të fshehtëzuar, bazuar në [matrix]", + "Search the room directory": "Kërkoni te drejtoria e dhomave", + "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Ka tashmë plot dhoma në Matrix, të lidhura me rrjete ekzistues (Slack, IRC, Gitter, etj) ose të pavarur. Hidhini një sy listës!", + "Chat with Riot Bot": "Fjalosuni me Robotin Riot", + "Get started with some tips from Riot Bot!": "Fillojani me disa ndihmëza nga Roboti Riot!", + "General discussion about Matrix and Riot": "Diskutime të përgjithshme mbi Matrix-in dhe Riot-in", + "Discussion of all things Matrix!": "Diskutime mbi gjithçka të lidhur me Matrix-in!", + "Riot/Web & Desktop chat": "Fjalosje mbi Riot/Web & Desktop", + "Riot/iOS & matrix-ios-sdk chat": "Fjalosje mbi Riot/iOS & matrix-android-sdk", + "Riot/Android & matrix-android-sdk chat": "Fjalosje mbi Riot/Android & matrix-android-sdk", + "Matrix technical discussions": "Diskutime teknike rreth Matrix-it", + "Running Matrix services": "Xhirim shërbimesh Matrix", + "Community-run support for Synapse": "Asistencë për Synapse-in nga bashkësia", + "Admin support for Dendrite": "Asistencë përgjegjësi për Dendrite-in", + "Announcements about Synapse releases": "Njoftime rreth hedhjesh në qarkullim të Synapse-it", + "Support for those using and running matrix-appservice-irc": "Asistencë për ata që përdorin dhe xhirojnë matrix-appservice-irc", + "Building services on Matrix": "Ndërtim shërbimesh mbi Matrix", + "Support for those using the Matrix spec": "Asistencë për ata që përdorin specifikimet Matrix", + "Design and implementation of E2E in Matrix": "Konceptimi dhe sendërtimi i E2E-s në Matrix", + "Implementing VR services with Matrix": "Sendërtim shërbimesh VR me Matrix-in", + "Implementing VoIP services with Matrix": "Sendërtim shërbimesh VoIP me Matrix-in", + "Discussion of the Identity Service API": "Diskutime mbi API-n Identity Service", + "Support for those using, running and writing other bridges": "Asistencë për ata që përdorin, xhirojnë ose programojnë ura të tjera", + "Contributing code to Matrix and Riot": "Kontribut me kod te Matrix dhe te Riot", + "Dev chat for the Riot/Web dev team": "Fjalosje mbi zhvillimin, për ekipin e zhvilluesve të Riot/Web-i", + "Dev chat for the Dendrite dev team": "Fjalosje mbi zhvillimi, për ekipin e zhvilluesve të Dendrite-it", + "Co-ordination for Riot translators": "Bashkërendim për përkthyes të Riot-it", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Mund të përdorni mundësitë mbi shërbyes vetjak, për të bërë hyrjen në shërbyes të tjerë Matrix, duke dhënë një tjetër URL shërbyesi Home. Kjo ju lejon ta përdorni këtë aplikacion në një tjetër shërbyes Home, me një llogari ekzistuese Matrix.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Mundeni edhe të caktoni një shërbyes vetjak identitetesh, por s’do të jeni në gjendje të ftoni përdorues përmes adresash email, ose të ftoheni ju vetë përmes adrese email.", + "Sign In": "Hyni", + "Create Account": "Krijoni Llogari", + "Need help?": "Ju duhet ndihmë?", + "Explore rooms": "Eksploroni dhoma", + "Room Directory": "Listë Dhomash", + "Unexpected error preparing the app. See console for details.": "Gabim i papritur gjatë përgatitjes së aplikacionit. Për hollësi, shihni konsolën.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Formësim i pavlefshëm: mund të caktohet vetëm një prej default_server_config, default_server_name, ose default_hs_url.", + "Invalid configuration: no default server specified.": "Formësim i pavlefshëm: s’është caktuar shërbyes parazgjedhje.", + "This installation of Riot seems to have an invalid server configuration. If you are the administrator, please correct the error below": "Ky instalim i Riot-it duket se ka një formësim të pavlefshëm për shërbyesin. Nëse jeni një përgjegjës, ju lutemi, ndreqni gabimin më poshtë", + "Your Riot is misconfigured": "Riot-i juaj është i keqformësuar", + "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Formësimi juaj i Riot-it përmban JSON. Ju lutemi, ndreqeni problemin dhe ringarkoni faqen.", + "The message from the parser is: %(message)s": "Mesazhi prej procesit është: %(message)s", + "Invalid JSON": "JSON i pavlefshëm" +} diff --git a/src/i18n/strings/sr.json b/src/i18n/strings/sr.json index 25a1f3425a..140a1f291f 100644 --- a/src/i18n/strings/sr.json +++ b/src/i18n/strings/sr.json @@ -1,195 +1,13 @@ { "Riot is not supported on mobile web. Install the app?": "RIot не ради на мобилном вебу. Инсталирати апликацију?", - "Collecting app version information": "Прикупљам податке о издању апликације", - "Collecting logs": "Прикупљам записнике", - "Uploading report": "Отпремам извештај", - "Waiting for response from server": "Чекам на одговор са сервера", "Riot Desktop on %(platformName)s": "Riot стони програм за %(platformName)s", "Unknown device": "Непознати уређај", "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s преко прегледача %(browserName)s на систему %(osName)s", "You need to be using HTTPS to place a screen-sharing call.": "Морате користити HTTPS да бисте започели позив са дељењем екрана.", - "Messages containing my display name": "Поруке које садрже моје приказно име", - "Messages containing my user name": "Поруке које садрже моје корисничко име", - "Messages in one-to-one chats": "Поруке у један-на-један ћаскањима", - "Messages in group chats": "Поруке у групним ћаскањима", - "When I'm invited to a room": "Када сам позван у собу", - "Call invitation": "Позивница за позив", - "Messages sent by bot": "Поруке послате од бота", - "Error saving email notification preferences": "Грешка при чувању поставки мејл обавештења", - "An error occurred whilst saving your email notification preferences.": "Догодила се грешка при чувању ваших поставки мејл обавештења.", - "Keywords": "Кључне речи", - "Enter keywords separated by a comma:": "Унесите кључне речи одвојене зарезима:", - "OK": "У реду", - "Failed to change settings": "Нисам успео да променим подешавања", - "Operation failed": "Радња није успела", - "Can't update user notification settings": "Не могу да ажурирам корисничка подешавања обавештења", - "Failed to update keywords": "Нисам успео да ажурирам кључне речи", - "Messages containing keywords": "Поруке које садрже кључне речи", - "Notify for all other messages/rooms": "Обавести за све друге поруке и собе", - "Notify me for anything else": "Обавести ме за било шта друго", - "Enable notifications for this account": "Омогући обавештења за овај налог", - "All notifications are currently disabled for all targets.": "Сва обавештења су тренутно онемогућена за све циљеве.", - "Add an email address above to configure email notifications": "Додајте мејл адресу изнад да бисте подесили мејл обавештења", - "Enable email notifications": "Омогући мејл обавештења", - "Notifications on the following keywords follow rules which can’t be displayed here:": "Обавештења за следеће кључне речи прате правила која не могу бити приказана овде:", - "Unable to fetch notification target list": "Не могу да досегнем списак циљева за обавештења", - "Notification targets": "Циљеви обавештења", - "Advanced notification settings": "Напредна подешавања обавештења", - "There are advanced notifications which are not shown here": "Постоје напредна обавештења која нису приказана овде", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Можда сте их подесили у неком другом клијенту а не Riot-у. Не можете их преправљати у Riot-у али се и даље примењују", - "Enable desktop notifications": "Омогући стона обавештења", - "Show message in desktop notification": "Прикажи поруку у стоном обавештењу", - "Enable audible notifications in web client": "Омогући звучна обавештења у веб клијенту", - "Off": "Искључено", - "On": "Укључено", - "Noisy": "Бучно", - "Failed to set direct chat tag": "Нисам успео да поставим ознаку директног ћаскања", - "Failed to remove tag %(tagName)s from room": "Нисам успео да уклоним ознаку %(tagName)s са собе", - "Failed to add tag %(tagName)s to room": "Нисам успео да додам ознаку %(tagName)s на собу", - "Search…": "Претрага…", - "Search": "Претрага", - "This Room": "Ова соба", - "All Rooms": "Све собе", - "Sunday": "Недеља", - "Monday": "Понедељак", - "Tuesday": "Уторак", - "Wednesday": "Среда", - "Thursday": "Четвртак", - "Friday": "Петак", - "Saturday": "Субота", - "Today": "Данас", - "Yesterday": "Јуче", "Custom Server Options": "Прилагођене опције сервера", "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Можете користити опције прилагођеног сервера за пријаву у друге Матрикс сервере навођењем другачије адресе кућног сервера.
    Ово вам омогућава да користите Riot са постојећим Матрикс налогомна другом кућном серверу.

    Такође, можете поставити прилагођени идентитески сервер али нећете моћи да позивате кориснике по мејл адреси а ни други вас.", "Dismiss": "Одбаци", "powered by Matrix": "покреће Матрикс", - "You are not receiving desktop notifications": "Не примате стона обавештења", - "Enable them now": "Омогућите их сада", - "What's New": "Шта је ново", - "Update": "Ажурирај", - "What's new?": "Шта је ново?", - "Appear Offline": "Прикажи себе као ван мреже", - "Away": "Одустан", - "A new version of Riot is available.": "Ново издање RIot-а је доступно.", - "To return to your account in future you need to set a password": "Да бисте се вратили на ваш налог у будућности, морате поставити лозинку", - "Set Password": "Постави лозинку", - "Error encountered (%(errorDetail)s).": "Догодила се грешка (%(errorDetail)s).", - "Checking for an update...": "Проверавам ажурирања...", - "No update available.": "Нема нових ажурирања.", - "Downloading update...": "Преузимам ажурирање...", - "Warning": "Упозорење", - "Error": "Грешка", - "You cannot delete this image. (%(code)s)": "Не можете обрисати ову слику. (%(code)s)", - "Uploaded on %(date)s by %(user)s": "Отпремљено датума %(date)s од корисника %(user)s", - "Remove": "Уклони", - "Close": "Затвори", - "Download this file": "Преузми ову датотеку", - "Please describe the bug and/or send logs.": "Опишите грешку и/или пошаљите записнике.", - "Loading bug report module": "Учитавам модул за извештавање о грешкама", - "Bug report sent": "Извештај о грешци послат", - "Thank you!": "Хвала вам!", - "Failed to send report: ": "Нисам успео да пошаљем извештај: ", - "Cancel": "Откажи", - "Report a bug": "Пријави грешку", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Опишите грешку. Шта сте урадили? Шта сте очекивали да се догоди? Шта се заправо догодило?", - "Describe your problem here.": "Опишите ваш проблем овде.", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Да бисмо проучили проблеме, послаћемо записнике са овог клијента уз овај извештај о грешци. Уколико само желите да пошаљете текст изнад, дештиклирајте:", - "Send logs": "Пошаљи записнике", - "Send": "Пошаљи", - "Unavailable": "Недоступан", - "Changelog": "Записник о изменама", - "Back": "Назад", - "Send Custom Event": "Пошаљи прилагођени догађај", - "You must specify an event type!": "Морате навести врсту догађаја!", - "Event sent!": "Догађај је послат!", - "Failed to send custom event.": "Нисам успео да пошаљем прилагођени догађај.", - "Event Type": "Врста догађаја", - "State Key": "Кључ стања", - "Event Content": "Садржај догађаја", - "Send Account Data": "Пошаљи податке налога", - "Filter results": "Филтрирај резултате", - "Explore Room State": "Истражи стање собе", - "Edit": "Уреди", - "Explore Account Data": "Истражи податке налога", - "Toolbox": "Алатница", - "Developer Tools": "Програмерске алатке", - "You have successfully set a password!": "Успешно сте поставили лозинку!", - "You have successfully set a password and an email address!": "Успешно сте поставили лозинку и мејл адресу!", - "You can now return to your account after signing out, and sign in on other devices.": "Можете се вратити у ваш налог након што се одјавите и пријавите поново, на другим уређајима.", - "Remember, you can always set an email address in user settings if you change your mind.": "Запамтите, увек можете поставити мејл адресу у корисничким подешавањима, уколико се предомислите.", - "Continue": "Настави", - "Failed to change password. Is your password correct?": "Нисам успео да променим лозинку. Да ли је ваша лозинка исправна?", - "(HTTP status %(httpStatus)s)": "(HTTP стање %(httpStatus)s)", - "Please set a password!": "Поставите лозинку!", - "This will allow you to return to your account after signing out, and sign in on other devices.": "Ово ће вам омогућити да се вратите у ваш налог након што се одјавите и пријавите, на другим уређајима.", - "You cannot delete this message. (%(code)s)": "Не можете обрисати ову поруку. (%(code)s)", - "Resend": "Поново пошаљи", - "Cancel Sending": "Откажи слање", - "Forward Message": "Проследи поруку", - "Unpin Message": "Откачи поруку", - "Pin Message": "Закачи поруку", - "View Source": "Погледај извор", - "View Decrypted Source": "Погледај дешифровани извор", - "Unhide Preview": "Откриј преглед", - "Permalink": "Трајна веза", - "Quote": "Цитирај", - "Source URL": "Адреса извора", - "Failed to set Direct Message status of room": "Нисам успео да подесим стање директне поруке собе", - "unknown error code": "непознати код грешке", - "Failed to forget room %(errCode)s": "Нисам успео да заборавим собу %(errCode)s", - "All messages (loud)": "Све поруке (гласно)", - "All messages": "Све поруке", - "Mentions only": "Само спомињања", - "Mute": "Утишај", - "Leave": "Напусти", - "Forget": "Заборави", - "Reject": "Одбаци", - "Favourite": "Омиљено", - "Low Priority": "Најмања важност", - "Direct Chat": "Директно ћаскање", - "Sorry, your browser is not able to run Riot.": "Нажалост, ваш прегледач не може да покреће Riot.", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot користи напредне могућности прегледача од којих неке нису доступне или су у пробној фази, у вашем прегледачу.", - "Please install Chrome or Firefox for the best experience.": "Инсталирајте Хром (Chrome) или Фајерфокс (Firefox) за најбољи угођај.", - "Safari and Opera work too.": "Сафари и Опера такође раде.", - "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Са вашим тренутним прегледачем изглед и угођај ове апликације може бити скроз неправилан и неке могућности можда неће радити. Уколико желите да ипак пробате, можете наставити али ћете бити без подршке за било које проблеме на које налетите!", - "I understand the risks and wish to continue": "Разумем опасност и желим да наставим", - "Couldn't load home page": "Нисам могао да учитам почетну страну", - "Login": "Пријава", - "Register": "Регистровање", - "Invite to this room": "Позови у ову собу", - "Members": "Чланови", - "Files": "Датотеке", - "Notifications": "Обавештења", - "Rooms": "Собе", - "Hide panel": "Сакриј површ", - "Invite to this community": "Позови у ову заједницу", - "Add rooms to this community": "Додај собе у ову заједницу", - "Failed to get protocol list from Home Server": "Нисам успео да добијем списак протокола од кућног сервера", - "The Home Server may be too old to support third party networks": "Кућни сервер је можда сувише застарео да би подржао мреже трећих страна", - "Failed to get public room list": "Нисам успео да добавим списак јавних соба", - "The server may be unavailable or overloaded": "Сервер је можда недоступан или преоптерећен", - "Unnamed room": "Неименована соба", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Обрисати алијас собе %(alias)s и уклонити %(name)s из фасцикле?", - "Remove %(name)s from the directory?": "Уклонити %(name)s из фасцикле?", - "Remove from Directory": "Уклони из фасцикле", - "remove %(name)s from the directory.": "уклони %(name)s из фасцикле.", - "delete the alias.": "обриши алијас.", - "Unable to join network": "Не могу да приступим мрежи", - "Riot does not know how to join a room on this network": "Riot не зна како да приступи соби на овој мрежи", - "Room not found": "Соба није пронађена", - "Couldn't find a matching Matrix room": "Не могу да нађем одговарајућу Матрикс собу", - "Fetching third party location failed": "Добављање локације треће стране није успело", - "Unable to look up room ID from server": "Не могу да погледам ИБ собе на серверу", - "World readable": "Читљиво за све", - "Guests can join": "Гости могу приступити", - "Directory": "Фасцикла", - "No rooms to show": "Нема соба за приказ", - "Search for a room": "Потражи собу", - "#example": "#пример", - "more": "више", - "Expand panel": "Прошири површ", - "Collapse panel": "Скупи површ", - "Filter room names": "Филтрирај називе соба", "Welcome to Riot.im": "Добродошли у Riot.im", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Децентрализовано, шифровано ћаскање и сарадња коју покреће [matrix]", "Search the room directory": "Претражи фасциклу са собама", @@ -217,6 +35,19 @@ "Contributing code to Matrix and Riot": "Додавање кода у Матрикс и Riot", "Dev chat for the Riot/Web dev team": "Програмерско ћаскање за Riot/веб програмерски тим", "Dev chat for the Dendrite dev team": "Програмерско ћаскање за Dendrite програмерски тим", - "Co-ordination for Riot/Web translators": "Координација за Riot/веб преводиоце", - "Reply": "Одговори" + "Co-ordination for Riot translators": "Координација за Riot преводиоце", + "Sign In": "Пријава", + "Create Account": "Направи налог", + "Need help?": "Потребна помоћ?", + "Explore rooms": "Истражи собе", + "Room Directory": "Фасцикла са собама", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Можете користити опције прилагођеног сервера да бисте се пријавили на друге Матрикс сервере тако што ћете навести другачију адресу кућног сервера. Ово вам омогућава да користите Riot са постојећим Матрикс налогом на другом кућном серверу.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Такође, можете подесити прилагођени сервер идентитета али у том случају нећете моћи да позивате кориснике преко мејла адресе или да сами будете позвани преко мејл адресе.", + "Your Riot is misconfigured": "Ваш Riot није добро подешен", + "Invalid configuration: no default server specified.": "Погрешно подешавање: подразумевани сервер није наведен.", + "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Ваша Riot конфигурација садржи погрешан JSON. Молим исправите проблем и поново учитајте страну.", + "The message from the parser is: %(message)s": "Порука из парсера: %(message)s", + "Invalid JSON": "Погрешан JSON", + "Unexpected error preparing the app. See console for details.": "Неочекивана грешка приликом припреме апликације. Погледајте конзолу за више детаља.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Погрешно подешавање: можете навести само један вредност од default_server_config, default_server_name, or default_hs_url." } diff --git a/src/i18n/strings/sv.json b/src/i18n/strings/sv.json index 79a97362bb..05ede6530a 100644 --- a/src/i18n/strings/sv.json +++ b/src/i18n/strings/sv.json @@ -1,156 +1,12 @@ { - "Add an email address above to configure email notifications": "Lägg till en epostadress här för att konfigurera epostaviseringar", - "Advanced notification settings": "Avancerade aviseringsinställingar", - "All messages": "Alla meddelanden", - "All messages (noisy)": "Alla meddelanden (högljudd)", - "All notifications are currently disabled for all targets.": "Alla aviseringar är för tillfället avstängda för alla mål.", - "An error occurred whilst saving your email notification preferences.": "Ett fel uppstod då epostaviseringsinställningarna sparades.", - "Call invitation": "Inbjudan till samtal", - "Cancel Sending": "Avbryt sändning", - "Can't update user notification settings": "Kan inte uppdatera aviseringsinställningarna", - "Close": "Stäng", - "Couldn't find a matching Matrix room": "Kunde inte hitta ett matchande Matrix-rum", - "Custom Server Options": "Egna serverinställningar", - "customServer_text": "Du kan använda serverinställningarna för att logga in i en annan Matrix-server genom att specifiera en URL till en annan hemserver.
    Så här kan du använda Riot med ett existerande Matrix-konto på en annan hemserver.

    Du kan också specifiera en egen identitetsserver, men du kommer inte att kunna bjuda in andra via epostadress, eller bli inbjuden via epostadress.", - "delete the alias.": "radera adressen.", - "Direct Chat": "Direkt-chatt", - "Directory": "Katalog", + "Custom Server Options": "Anpassade serverinställningar", "Dismiss": "Avvisa", - "Download this file": "Ladda ner filen", - "Enable audible notifications in web client": "Sätt på högljudda aviseringar i webbklienten", - "Enable desktop notifications": "Sätt på skrivbordsaviseringar", - "Enable email notifications": "Sätt på epostaviseringar", - "Enable notifications for this account": "Sätt på aviseringar för det här kontot", - "Enable them now": "Sätt på nu", - "Enter keywords separated by a comma:": "Skriv in nyckelord, separerade med kommatecken:", - "Error": "Fel", - "Error saving email notification preferences": "Ett fel uppstod då epostaviseringsinställningarna sparades", - "Failed to add tag %(tagName)s to room": "Det gick inte att lägga till \"%(tagName)s\" till rummet", - "Failed to change settings": "Det gick inte att spara inställningarna", - "Failed to forget room %(errCode)s": "Det gick inte att glömma bort rummet %(errCode)s", - "Failed to update keywords": "Det gick inte att uppdatera nyckelorden", - "Failed to get protocol list from Home Server": "Det gick inte att hämta protokollistan från hemservern", - "Failed to get public room list": "Det gick inte att hämta listan över offentliga rum", - "Failed to remove tag %(tagName)s from room": "Det gick inte att radera taggen %(tagName)s från rummet", - "Failed to set direct chat tag": "Det gick inte att markera rummet som direkt chatt", "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s på %(osName)s", - "Safari and Opera work too.": "Safari och Opera fungerar också.", - "A new version of Riot is available.": "En ny version av Riot är tillgänglig.", - "All Rooms": "Alla rum", - "Cancel": "Avbryt", - "Changelog": "Ändringslogg", - "Collapse panel": "Kollapsa panel", - "Describe your problem here.": "Beskriv problemet här.", - "Expand panel": "Öppna panel", - "Failed to send report: ": "Det gick inte att sända rapporten: ", - "Failed to set Direct Message status of room": "Det gick inte att sätta Direkt meddelande-status på rummet", - "Favourite": "Favorit", - "Files": "Filer", - "Filter room names": "Filtrera rumsnamn", - "Forget": "Glöm bort", - "Forward Message": "Vidarebefordra meddelande", - "Guests can join": "Gäster kan bli medlem i rummet", - "Hide panel": "Göm panel", - "I understand the risks and wish to continue": "Jag förstår riskerna och vill fortsätta", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "För att diagnostisera problem kommer loggar från den här klienten att sändas med rapporten. Om du bara vill sända texten ovan, kryssa av rutan:", - "Invite to this room": "Bjud in i rummet", - "Keywords": "Nyckelord", - "Leave": "Lämna", - "Loading bug report module": "Laddar buggrapportsmodul", - "Low Priority": "Låg prioritet", - "Members": "Medlemmar", - "Mentions only": "Endast omnämnande", - "Messages containing my display name": "Meddelanden som innehåller mitt namn", - "Messages containing keywords": "Meddelanden som innehåller nyckelord", - "Messages containing my user name": "Meddelanden som innehåller mitt användarnamn", - "Messages in group chats": "Meddelanden i gruppchattar", - "Messages in one-to-one chats": "Meddelanden i privata chattar", - "Messages sent by bot": "Meddelanden från bottar", - "more": "mera", - "Mute": "Dämpa", - "No rooms to show": "Inga fler rum att visa", - "Noisy": "Högljudd", - "Notification targets": "Aviseringsmål", - "Notifications": "Aviseringar", - "Notify for all other messages/rooms": "Avisera för alla andra meddelanden/rum", - "Notify me for anything else": "Avisera för allt annat", - "Off": "Av", - "On": "På", - "Permalink": "Permanent länk", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Beskriv buggen. Vad gjorde du? Vad förväntade du dig att ska hända? Vad hände?", - "Please describe the bug and/or send logs.": "Beskriv buggen och/eller sänd loggar.", - "Please install Chrome or Firefox for the best experience.": "Installera Chrome eller Firefox för den bästa upplevelsen.", "powered by Matrix": "drivs av Matrix", - "Quote": "Citera", - "Reject": "Avvisa", - "Remove %(name)s from the directory?": "Ta bort %(name)s från katalogen?", - "Remove": "Ta bort", - "remove %(name)s from the directory.": "ta bort %(name)s från katalogen.", - "Remove from Directory": "Ta bort från katalogen", - "Report a bug": "Rapportera en bugg", - "Resend": "Sänd igen", "Riot Desktop on %(platformName)s": "Riot Desktop på %(platformName)s", - "Riot does not know how to join a room on this network": "Riot kan inte gå med i ett rum på det här nätverket", "Riot is not supported on mobile web. Install the app?": "Riot stöds inte på mobil-webb. Installera appen?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot använder flera avancerade webbläsaregenskaper, av vilka alla inte stöds eller är experimentella i din nuvarande webbläsare.", - "Room not found": "Rummet hittades inte", - "Search": "Sök", - "Search…": "Sök…", - "Search for a room": "Sök efter rum", - "Send": "Sänd", - "Send logs": "Sänd loggar", - "Source URL": "Käll-URL", - "Sorry, your browser is not able to run Riot.": "Beklagar, din webbläsare kan inte köra Riot.", - "The Home Server may be too old to support third party networks": "Hemservern kan vara för gammal för stöda tredje parters nätverk", - "There are advanced notifications which are not shown here": "Det finns avancerade aviseringar som inte visas här", - "The server may be unavailable or overloaded": "Servern kan vara överbelastad eller inte tillgänglig", - "This Room": "Det här rummet", - "Unable to fetch notification target list": "Det gick inte att hämta aviseringsmållistan", - "Unable to join network": "Det gick inte att ansluta till nätverket", - "Unable to look up room ID from server": "Det gick inte att hämta rums-ID:t från servern", - "Unavailable": "Inte tillgänglig", - "Unhide Preview": "Visa förhandsvisning", "Unknown device": "Okänd enhet", - "unknown error code": "okänd felkod", - "Unnamed room": "Namnlöst rum", - "Update": "Uppdatera", - "Uploaded on %(date)s by %(user)s": "%(user)s laddade upp %(date)s", - "Uploading report": "Laddar upp rapport", - "View Decrypted Source": "Visa dekrypterad källa", - "View Source": "Visa källa", - "What's New": "Vad är nytt", - "What's new?": "Vad är nytt?", - "Waiting for response from server": "Väntar på svar från servern", - "When I'm invited to a room": "När jag bjuds in till ett rum", - "World readable": "Alla kan läsa", - "You cannot delete this image. (%(code)s)": "Du kan inte radera den här bilden. (%(code)s)", - "You cannot delete this message. (%(code)s)": "Du kan inte radera det här meddelandet. (%(code)s)", - "You are not receiving desktop notifications": "Du får inte skrivbordsaviseringar", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Du kan ha konfigurerat dem i en annan klient än Riot. Du kan inte ändra dem i Riot men de tillämpas ändå", - "Sunday": "söndag", - "Monday": "måndag", - "Tuesday": "tisdag", - "Wednesday": "onsdag", - "Thursday": "torsdag", - "Friday": "fredag", - "Saturday": "lördag", - "Today": "idag", - "Yesterday": "igår", - "OK": "OK", - "You need to be using HTTPS to place a screen-sharing call.": "Du måste använda HTTPS för att dela din skärm.", - "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Med din nuvarande webbläsare kan appens utseende vara helt fel, och vissa eller alla egenskaper kommer nödvändigtvis inte att fungera. Om du ändå vill försöka så kan du fortsätta, men gör det på egen risk!", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Radera rumsadressen %(alias)s och ta bort %(name)s från katalogen?", - "Collecting logs": "Samlar in loggar", - "Collecting app version information": "Samlar in appversionsinformation", - "Notifications on the following keywords follow rules which can’t be displayed here:": "Aviseringar för följande nyckelord följer regler som inte kan visas här:", - "Continue": "Fortsätt", - "Failed to change password. Is your password correct?": "Det gick inte att byta lösenord. Är lösenordet rätt?", - "Operation failed": "Handlingen misslyckades", - "#example": "#exempel", - "Fetching third party location failed": "Det gick inte att hämta platsdata från tredje part", - "Login": "Logga in", - "Warning": "Varning", - "Downloading update...": "Laddar ned uppdatering...", + "You need to be using HTTPS to place a screen-sharing call.": "Du måste använda HTTPS för att ringa med skärmdelning.", "Welcome to Riot.im": "Välkommen till Riot.im", "Chat with Riot Bot": "Chatta med Riot Bot", "Get started with some tips from Riot Bot!": "Kom igång med några tips från Riot Bot!", @@ -170,31 +26,28 @@ "Contributing code to Matrix and Riot": "Bidra med kod till Matrix och Riot", "Dev chat for the Riot/Web dev team": "Chatt för utvecklare av Riot/Web", "Dev chat for the Dendrite dev team": "Chatt för utvecklare av Dendrite", - "Co-ordination for Riot/Web translators": "Koordination för översättare av Riot/Web", "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Många rum finns redan i Matrix, länkade till andra nätverk (Slack, IRC, Gitter etc.) eller fristående. Kolla in katalogen!", - "You have successfully set a password!": "Du har valt ett nytt lösenord!", - "You can now return to your account after signing out, and sign in on other devices.": "Du kan nu återgå till ditt konto efter att ha loggat ut och logga in på andra enheter.", - "Please set a password!": "Vänligen välj ett lösenord!", - "This will allow you to return to your account after signing out, and sign in on other devices.": "Detta kommer tillåta dig att återgå till ditt konto efter att ha loggat ut, och logga in på andra enheter.", - "You have successfully set a password and an email address!": "Du har framgångsrikt valt ett lösenord och en e-postadress!", - "Remember, you can always set an email address in user settings if you change your mind.": "Kom ihåg att du alltid kan välja en e-postadress i dina användarinställningar om du ändrar dig.", - "To return to your account in future you need to set a password": "För att återgå till ditt konto i framtiden måste du välja ett lösenord", - "Set Password": "Välj lösenord", - "Couldn't load home page": "Kunde inte ladda startsidan", - "(HTTP status %(httpStatus)s)": "(HTTP-status %(httpStatus)s)", - "Checking for an update...": "Letar efter uppdateringar...", - "Error encountered (%(errorDetail)s).": "Fel påträffat (%(errorDetail)s).", - "No update available.": "Ingen uppdatering tillgänglig.", - "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentraliserad, krypterad chatt & samarbete möjliggjort med [matrix]", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentraliserad, krypterad chatt & samarbetsplattform möjliggjort med [matrix]", "Search the room directory": "Sök i rumskatalogen", "Riot/Web & Desktop chat": "Riot/Web & Desktop-chatt", "Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk-chatt", "Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk-chatt", "Admin support for Dendrite": "Hjälp för administratörer av Dendrite", "Building services on Matrix": "Bygga tjänster med Matrix", - "Bug report sent": "Buggraporten skickades", - "Thank you!": "Tack!", - "Back": "Tillbaka", - "Filter results": "Filtrera resultaten", - "Explore Room State": "Utforska rumläget" + "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Du kan använda anpassade serverinställningar för att logga in på andra Matrix-servrar genom att ange en annan hemserver-URL.
    Du kan då använda Riot med ett befintligt Matrix-konto på en annan hemserver.

    Du kan också ange en anpassad identitetsserver men kommer då inte kunna bjuda in användare med epostadress, eller själv bli inbjuden med epostadress.", + "Co-ordination for Riot translators": "Koordination för Riot-översättare", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Du kan använda en egen identitetsserver, men då kan du inte bjuda in användare via epostadress eller själv bjudas in med din epostadress.", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Under anpassade serverinställningar kan du logga in på andra Matrixservrar genom att ange en egen hemserveradress. På så sätt kan du använda Riot med ett Matrixkonto du redan har på en annan hemserver.", + "Sign In": "Logga in", + "Create Account": "Skapa konto", + "Need help?": "Behöver du hjälp?", + "Explore rooms": "Utforska rum", + "Room Directory": "Rumslista", + "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Dina Riot-inställningar innhåller ogiltig JSON. Vänligen uppdatera inställningarna och ladda om sidan.", + "The message from the parser is: %(message)s": "Medelandet från parsern är: %(message)s", + "Invalid JSON": "Ogiltig JSON", + "Your Riot is misconfigured": "Riot är felkonfigurerat", + "Unexpected error preparing the app. See console for details.": "Oväntat fel vid appstart. Se konsollen för mer information.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Ogilitiga inställningar: enbart möjligt att specificera en default_config, default_server, eller default_hs_url.", + "Invalid configuration: no default server specified.": "Ogilitiga inställningar: ingen standardserver specificerad." } diff --git a/src/i18n/strings/ta.json b/src/i18n/strings/ta.json index 8fe8a443d1..a59b7f1d9e 100644 --- a/src/i18n/strings/ta.json +++ b/src/i18n/strings/ta.json @@ -1,172 +1,32 @@ { - "Safari and Opera work too.": "Safariமற்றும்Operaவிலும் செயல்படும்.", - "A new version of Riot is available.": "Riot-ன் புதிய பதிப்பு உள்ளது.", - "Add an email address above to configure email notifications": "மின்னஞ்சல் மூலம் அறிவிப்புகளை பெற உங்கள் மின்னஞ்சல் முகவரியை மேலே இணைக்கவும்", - "Advanced notification settings": "மேம்பட்ட அறிவிப்பிற்கான அமைப்புகள்", - "All messages": "அனைத்து செய்திகள்", - "All messages (noisy)": "அனைத்து செய்திகள் (உரக்க)", - "All Rooms": "அனைத்து அறைகள்", - "All notifications are currently disabled for all targets.": "அனைத்து இலக்குகளுக்கான அனைத்து அறிவுப்புகளும் தற்போது முடக்கி வைக்கப்பட்டுள்ளது.", - "An error occurred whilst saving your email notification preferences.": "உங்கள் மின்னஞ்சல் அறிவிப்பு விருப்பங்களை சேமிப்பதில் ஏதோ பிழை ஏற்பட்டுள்ளது.", - "Cancel": "ரத்து", - "Cancel Sending": "அனுப்புதலை ரத்து செய்", - "Changelog": "மாற்றப்பதிவு", - "Close": "மூடு", - "Collapse panel": "பலகத்தை மாற்று", - "Collecting app version information": "செயலியின் பதிப்பு தகவல்கள் சேகரிக்கப்படுகிறது", - "Collecting logs": "பதிவுகள் சேகரிக்கப்படுகிறது", "%(appName)s via %(browserName)s on %(osName)s": "%(osName)s -ல் %(browserName)s -ன் வழியாக %(appName)s", - "Call invitation": "அழைப்பிற்கான விண்ணப்பம்", - "Can't update user notification settings": "பயனர் அறிவிப்பு அமைப்புகளை மாற்ற முடியவில்லை", - "Couldn't find a matching Matrix room": "பொருத்தமான Matrix அறை கிடைக்கவில்லை", "Custom Server Options": "விருப்பிற்கேற்ற வழங்கி இடப்புகள்", - "delete the alias.": "மாற்றை அழி.", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "அறை மாற்று %(alias)s -ஐ அழித்து, %(name)s -ஐ அடைவிலிருந்து நீக்க வேண்டுமா?", - "Describe your problem here.": "உங்கள் பிரச்சனையை இங்கு விவரிக்கவும்.", - "Direct Chat": "நேரடி அரட்டை", - "Directory": "அடைவு", "Dismiss": "நீக்கு", - "Download this file": "இந்த கோப்பைத் தரவிறக்கு", - "Enable audible notifications in web client": "இணைய வாங்கியில் ஒலி அறிவிப்புகளை ஏதுவாக்கு", - "Enable desktop notifications": "திரை அறிவிப்புகளை ஏதுவாக்கு", - "Enable email notifications": "மின்னஞ்சல் அறிவிப்புகளை ஏதுவாக்கு", - "Enable notifications for this account": "இந்த கணக்கிற்கான அறிவிப்புகளை ஏதுவாக்கு", - "Enable them now": "இப்போது அவற்றை ஏதுவாக்கு", - "Error": "கோளாறு", - "Expand panel": "பலகத்தை விரிவாக்கு", - "Failed to add tag %(tagName)s to room": "%(tagName)s எனும் குறிச்சொல்லை அறையில் சேர்ப்பதில் தோல்வி", - "Failed to change settings": "அமைப்புகள் மாற்றத்தில் தோல்வி", - "Failed to forget room %(errCode)s": "அறையை மறப்பதில் தோல்வி %(errCode)s", - "Failed to update keywords": "முக்கிய வார்த்தைகளை புதுப்பித்தலில் தோல்வி", - "Failed to get public room list": "பொது அறைப் பட்டியலை பெறுவதில் தோல்வி", - "Failed to send report: ": "அறிக்கை அனுப்புதலில் தோல்வி ", - "Favourite": "விருப்பமான", - "Files": "கோப்புகள்", - "Filter room names": "அறை பெயர்களை வடிகட்டு", - "Forget": "மற", - "Guests can join": "விருந்தினர்கள் சேரலாம்", - "Hide panel": "பலகத்தை மறை", - "Invite to this room": "இந்த அறைக்கு அழை", - "Keywords": "முக்கிய வார்த்தைகள்", - "Leave": "வெளியேறு", - "Login": "உள்நுழை", - "Low Priority": "குறைந்த முன்னுரிமை", - "Members": "உறுப்பினர்கள்", - "Mentions only": "குறிப்பிடுகள் மட்டும்", - "#example": "#உதாரணமாக", - "Enter keywords separated by a comma:": "ஒரு comma மூலம் முக்கிய வார்த்தைகளை உள்ளிடவும்:", - "Error saving email notification preferences": "மின்னஞ்சல் அறிவிப்பு விருப்பங்களை சேமிப்பதில் கோளாறு", - "Failed to get protocol list from Home Server": "முகப்பு சேவையகத்திலிருந்து நெறிமுறை பட்டியலைப் பெறுவதில் தோல்வி", - "Failed to remove tag %(tagName)s from room": "அறையில் இருந்து குறிச்சொல் %(tagName)s களை அகற்றுவது தோல்வியடைந்தது", - "Failed to set direct chat tag": "நேரடி அரட்டை குறியை அமைப்பதில் தோல்வி", - "Failed to set Direct Message status of room": "அறையின் நேரடி செய்தி நிலையை அமைக்க தவறிவிட்டது", - "Fetching third party location failed": "மூன்றாம் இடத்தில் உள்ள இடம் தோல்வி", - "Forward Message": "முன்னோடி செய்தி", - "(HTTP status %(httpStatus)s)": "(HTTP நிலைகள் %(httpStatus)s)", - "customServer_text": "நீங்கள் மற்ற Matrix வழங்கிகள் உள்நுழைய உங்கள் விருப்பமான வழங்கி இடப்புகளை உபயோகப்படுத்தலாம்.
    இது மற்ற வழங்கியில் உங்கள் Matrix கணக்கிணை Riot மூலம் பயன்படுத்த உதவும்.

    நீங்கள் மற்ற அடையாள வழங்கியையும் பயன்படுத்தலாம், ஆனால் நீங்கள் மற்ற பயனர்களை மின்னஞ்சல் மூலம் அழைக்கவோ, நீங்கள் அழைக்கப்படவோ இயலாது.", - "I understand the risks and wish to continue": "நான் அபாயங்களைப் புரிந்துகொண்டு தொடர விரும்புகிறேன்", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "சிக்கல்களைக் கண்டறியும் பொருட்டு, இந்த கிளையிலிருந்து வரும் பதிவுகள் இந்த பிழை அறிக்கையுடன் அனுப்பப்படும். மேலே உள்ள உரையை மட்டுமே அனுப்ப விரும்பினால், தயவுசெய்து தட்டச்சு செய்க:", - "Loading bug report module": "பிழை அறிக்கை தொகுதி ஏற்றுகிறது", - "Messages containing my display name": "என் காட்சி பெயர் கொண்ட செய்திகள்", - "more": "அதிகம்", - "Mute": "முடக்கு", - "No rooms to show": "காண்பிக்க எந்த அறையும் இல்லை", - "Messages containing keywords": "முக்கிய கொண்ட செய்திகள்", - "Messages containing my user name": "என் பயனர் பெயர் கொண்ட செய்திகள்", - "Messages in group chats": "குழு அரட்டைகளில் உள்ள செய்திகள்", - "Messages in one-to-one chats": "ஒரு-க்கு-ஒரு அரட்டைகளில் உள்ள செய்திகள்", - "Messages sent by bot": "bot மூலம் அனுப்பிய செய்திகள்", - "Noisy": "சத்தம்", - "Notification targets": "அறிவிப்பு இலக்குகள்", - "Notifications": "அறிவிப்புகள்", - "Notifications on the following keywords follow rules which can’t be displayed here:": "பின்வரும் முக்கிய வார்த்தைகளில் அறிவிப்புகள் இங்கே காட்டப்பட முடியாத விதிகள் பின்பற்றப்படுகின்றன:", - "Notify for all other messages/rooms": "மற்ற எல்லா செய்திகளுக்கும் அறைகளுக்கும் தெரிவிக்கவும்", - "Notify me for anything else": "வேறு எதையும் எனக்கு தெரிவி", - "Off": "அமை", - "On": "மீது", - "Operation failed": "செயல்பாடு தோல்வியுற்றது", - "Permalink": "நிரந்தரத் தொடுப்பு", "powered by Matrix": "Matrix-ஆல் ஆனது", - "Quote": "மேற்கோள்", - "Reject": "நிராகரி", - "Remove %(name)s from the directory?": "அடைவிலிருந்து %(name)s-ஐ நீக்கலாமா?", - "Remove": "நீக்கு", - "remove %(name)s from the directory.": "அடைவிலிருந்து %(name)s-ஐ நீக்கு.", - "Remove from Directory": "அடைவிலிருந்து நீக்கு", - "Report a bug": "வழுவைத் தெரியப்படுத்து", - "Resend": "மீண்டும் அனுப்பு", "Riot is not supported on mobile web. Install the app?": "கைபேசி உலாவியில் Riot இயங்காது. செயலியை நிறுவ வேண்டுமா?", - "Room not found": "அறை காணவில்லை", - "Search": "தேடு", - "Search…": "தேடு…", - "Search for a room": "அறையைத் தேடு", - "Send": "அனுப்பு", - "Send logs": "பதிவுகளை அனுப்பு", - "Source URL": "மூல முகவரி", - "This Room": "இந்த அறை", - "Unable to join network": "முனையங்களில் சேர இயலவில்லை", - "Unavailable": "இல்லை", "Unknown device": "தெரியாத கருவி", - "unknown error code": "தெரியாத பிழை குறி", - "Unnamed room": "பெயரிடப்படாத அறை", - "Update": "புதுப்பி", - "Uploaded on %(date)s by %(user)s": "%(date)s அன்று %(user)s ஆல் பதிவேற்றப்பட்டது", - "Uploading report": "அறிக்கை பதிவேற்றப்படுகிறது", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "வழுவைப் பற்றி விளக்கவும். நீங்கள் என்ன செய்தீர்கள்? என்ன நடக்க வேண்டி எதிர்ப்பார்த்தீர்கள்? என்ன நடந்தது?", - "Please describe the bug and/or send logs.": "வழுவைப் பற்றி விளக்கவும் மேலும்/அல்லது பதிவுகளை அனுப்பவும்.", - "Please install Chrome or Firefox for the best experience.": "சிறந்த அனுபவத்திற்க்கு Chromeஅல்லதுFirefoxஐ பயன்படுத்தவும்.", "Riot Desktop on %(platformName)s": "%(platformName)s ற்க்கான Riot", - "Riot does not know how to join a room on this network": "இந்த வலையமைப்பில் உள்ள அறையில் எப்படி சேர்வதென்று Riotற்க்கு தெரியவில்லை", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot பல மேம்பட்ட உலாவி வசதிகளைப் பயன்படுத்துகிறது, அதில் சிலவற்றைக் காணவில்லை அல்லது உங்கள் உலாவியில் பரிசோதனைக்காக உள்ளது.", - "There are advanced notifications which are not shown here": "இங்கு காண்பிக்கப்படாத மேம்பட்ட அறிவிப்புகள் உள்ளது", - "The server may be unavailable or overloaded": "வழங்கி அளவுமீறிய சுமையில் உள்ளது அல்லது செயல்பாட்டில் இல்லை", - "Unable to fetch notification target list": "அறிவிப்பு பட்டியலை பெற முடியவில்லை", - "Unable to look up room ID from server": "வழங்கியிலிருந்து அறை ID யை காண முடியவில்லை", - "Unhide Preview": "முன்னோட்டத்தைக் காண்பி", - "View Decrypted Source": "மறையீடு நீக்கப்பட்ட மூலத்தைக் காண்பி", - "View Source": "மூலத்தைக் காட்டு", - "What's New": "புதிதாக வந்தவை", - "What's new?": "புதிதாக என்ன?", - "Waiting for response from server": "வழங்கியின் பதிலுக்காக காத்திருக்கிறது", - "When I'm invited to a room": "நான் அறைக்கு அழைக்கப்பட்ட போது", - "World readable": "உலகமே படிக்கும்படி", - "You cannot delete this image. (%(code)s)": "இந்த படத்தை நீங்கள் அழிக்க முடியாது. (%(code)s)", - "You cannot delete this message. (%(code)s)": "இந்த செய்தியை நீங்கள் அழிக்க முடியாது. (%(code)s)", - "You are not receiving desktop notifications": "திரை அறிவிப்புகளை நீங்கள் பெறவில்லை", - "Bug report sent": "வழு அறிக்கை அனுப்பப்பட்டது", "You need to be using HTTPS to place a screen-sharing call.": "நீங்கள் திரைபகிர்வு அழைப்பை மேற்க்கொள்ள HTTPS-ஐ பயன்படுத்த வேண்டும்.", - "OK": "சரி", - "Show message in desktop notification": "திரை அறிவிப்புகளில் செய்தியை காண்பிக்கவும்", - "Sunday": "ஞாயிறு", - "Monday": "திங்கள்", - "Tuesday": "செவ்வாய்", - "Wednesday": "புதன்", - "Thursday": "வியாழன்", - "Friday": "வெள்ளி", - "Saturday": "சனி", - "Today": "இன்று", - "Yesterday": "நேற்று", - "No update available.": "எந்த புதுப்பிப்பும் இல்லை.", - "Warning": "எச்சரிக்கை", - "Thank you!": "உங்களுக்கு நன்றி", - "Back": "பின்", - "Event sent!": "நிகழ்வு அனுப்பப்பட்டது", - "Event Type": "நிகழ்வு வகை", - "Event Content": "நிகழ்வு உள்ளடக்கம்", - "Edit": "தொகு", - "You have successfully set a password!": "நீங்கள் வெற்றிகரமாக கடவுச்சொல்லை அமைத்துவிட்டீர்கள்", - "You have successfully set a password and an email address!": "நீங்கள் வெற்றிகரமாக கடவுச்சொல் மற்றும் மின்னஞ்சல் முகவரியை அமைத்துவிட்டீர்கள்", - "Continue": "தொடரவும்", - "Please set a password!": "தயவு செய்து கடவுச்சொல்லை அமைக்கவும்", - "Couldn't load home page": "முதற்பக்கத்தை நிரலேற்ற முடியவில்லை", - "Register": "பதிவு செய்", - "Rooms": "அறைகள்", - "Add rooms to this community": "அறைகளை இந்த சமூகத்தில் சேர்க்கவும்", "Welcome to Riot.im": "Riot.im -ற்க்கு வரவேற்க்கிறோம்", "Search the room directory": "அறை அடைவில் தேடவும்", "Chat with Riot Bot": "Riot இயங்கியிடம் உரையாடவும்", "Matrix technical discussions": "Matrix தொழில்நுட்ப விவாதங்கள்", "Running Matrix services": "இருப்பிலிருக்கும் Matrix சேவைகள்", "Building services on Matrix": "Matrix- ல் சேவைகளைக் கட்டமைக்க", - "Contributing code to Matrix and Riot": "Matrix மற்றும் Riot -ற்க்கு நிரல் பங்களிக்க" + "Contributing code to Matrix and Riot": "Matrix மற்றும் Riot -ற்க்கு நிரல் பங்களிக்க", + "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "உங்கள் Riot உள்ளமைவில் தவறான JSON உள்ளது. சிக்கலை சரிசெய்து பக்கத்தை மீண்டும் ஏற்றவும்.", + "The message from the parser is: %(message)s": "பாகுபடுத்தி அனுப்பிய செய்தி: %(message)s", + "Invalid JSON": "தவறான JSON", + "Your Riot is misconfigured": "உங்கள் Riot தவறாக உள்ளமைக்கப்பட்டுள்ளது", + "Unexpected error preparing the app. See console for details.": "பயன்பாட்டைத் தயாரிப்பதில் எதிர்பாராத பிழை. விவரங்களுக்கு console ஐப் பார்க்கவும்.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "தவறான உள்ளமைவு: default_server_config, default_server_name அல்லது default_hs_url இல் ஒன்றை மட்டுமே குறிப்பிட முடியும்.", + "Invalid configuration: no default server specified.": "தவறான உள்ளமைவு: இயல்புநிலை சேவையகம் குறிப்பிடப்படவில்லை.", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "வேறுபட்ட ஹோம்சர்வர் URL ஐக் குறிப்பிடுவதன் மூலம் பிற Matrix சேவையகங்களில் உள்நுழைய தனிப்பயன் சேவையக விருப்பங்களைப் பயன்படுத்தலாம். இது வேறு வீட்டு சேவையகத்தில் ஏற்கனவே உள்ள Matrix கணக்கைக் கொண்ட Riot ஐப் பயன்படுத்த உங்களை அனுமதிக்கிறது.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "நீங்கள் தனிப்பயன் அடையாள சேவையகத்தையும் அமைக்கலாம், ஆனால் நீங்கள் மின்னஞ்சல் முகவரி மூலம் பயனர்களை அழைக்க முடியாது, அல்லது மின்னஞ்சல் முகவரியால் உங்களை அழைக்க முடியாது.", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "[matrix] ஆல் இயக்கப்படும் பரவலாக்கப்பட்ட, மறைகுறியாக்கப்பட்ட அரட்டை & ஒத்துழைப்பு", + "Sign In": "உள்நுழைக", + "Create Account": "உங்கள் கணக்கை துவங்குங்கள்", + "Need help?": "உதவி தேவை?", + "Explore rooms": "அறைகளை ஆராயுங்கள்", + "Room Directory": "அறை அடைவு" } diff --git a/src/i18n/strings/te.json b/src/i18n/strings/te.json index e50d78fa05..8d2cfdd3c7 100644 --- a/src/i18n/strings/te.json +++ b/src/i18n/strings/te.json @@ -1,121 +1,12 @@ { - "Close": "ముసివెయండి", - "Continue": "కొనసాగించు", - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s %(browserName)s ద్వర %(osName)s కి", - "Friday": "శుక్రువారం", - "Cancel": "రద్దు", - "Monday": "సోమవారం", - "Tuesday": "మంగళవారం", - "Wednesday": "బుధవారం", - "Thursday": "గురువారం", - "Saturday": "శనివారం", - "Sunday": "ఆదివారం", - "Failed to forget room %(errCode)s": "గది మర్చిపోవడం విఫలమైంది %(errCode)s", - "unknown error code": "తెలియని కోడ్ లోపం", - "A new version of Riot is available.": "కొత్త రిమోట్ వివరణము అందుబాటులో ఉంది.", - "Add an email address above to configure email notifications": "ఇమెయిల్ ప్రకటనలను రూపశిల్పం చేయడానికి ఎగువ ఇమెయిల్ చిరునామాను జోడించండి", - "Advanced notification settings": "ఆధునిక తాఖీదు అమరిక", - "All messages": "అన్ని సందేశాలు", - "All messages (noisy)": "అన్ని సందేశాలు (గట్టిగ)", - "All Rooms": "అన్ని గదులు", - "Call invitation": "మాట్లాడడానికి ఆహ్వానం", - "Cancel Sending": "పంపడాన్ని ఆపేయండి", - "Can't update user notification settings": "వినియోగదారు ప్రకటన ప్రాదాన్యాలు నవీకరించదడానేకి రాదు", - "Changelog": "మార్పు వివరణ", - "Collapse panel": "ప్యానెల్ కుదించు", - "Collecting app version information": "అనువర్తన సంస్కరణ సమాచారాన్ని సేకరించడం", - "Collecting logs": "నమోదు సేకరించడం", - "Couldn't find a matching Matrix room": "సరిపోలిక మ్యాట్రిక్స్ గదిని కనుగొనలేకపోయాము", + "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s %(browserName)s ద్వార %(osName)s కి", "Custom Server Options": "మలచిన సేవిక ఎంపికలు", - "delete the alias.": "అలియాస్ తొలగించండి.", - "Describe your problem here.": "ఇక్కడ మీ సమస్యను వివరించండి.", - "Direct Chat": "ప్రత్యక్ష మాటామంతి", - "Directory": "వివరం", "Dismiss": "రద్దుచేసే", - "Download this file": "ఈ దస్త్రం దిగుమతి చేయండి", - "Enable audible notifications in web client": "వెబ్ బంట్రౌతు వినిపించే నోటిఫికేషన్లను ప్రారంభించండి", - "Enable desktop notifications": "రంగస్థల తాఖీదు ప్రారంభించండి", - "Enable email notifications": "ఇమెయిల్ ప్రకటనలను ప్రారంభించండి", - "Enable notifications for this account": "ఈ ఖాతా కోసం తాఖీదు ప్రారంభించండి", - "Enable them now": "ఇప్పుడే వాటిని ప్రారంభించండి", - "Enter keywords separated by a comma:": "కామాతో వేరు చేయబడిన కీలక పదాలను నమోదు చేయండి:", - "Error": "లోపం", - "Error saving email notification preferences": "ఇమెయిల్ ప్రకటనలను ప్రాధాన్యతలను దాచు చేయడంలో లోపం", - "#example": "#ఉదాహరణ", - "Expand panel": "ప్యానెల్ను విస్తరింపజేయండి", - "Failed to add tag %(tagName)s to room": "%(tagName)s ను బొందు జోడించడంలో విఫలమైంది", - "Failed to change settings": "అమరిక మార్చడం విఫలమైంది", - "Failed to update keywords": "కీలక పదాలను నవీకరించడంలో విఫలమైంది", - "Failed to get protocol list from Home Server": "హోమ్ సర్వర్ నుండి ప్రోటోకాల్ జాబితాను పొందడం విఫలమైంది", - "Failed to get public room list": "ప్రజా గది జాబితాను పొందడం విఫలమైంది", - "Failed to remove tag %(tagName)s from room": "గది నుండి బొందు %(tagName)s తొలగించడంలో విఫలమైంది", - "Failed to send report: ": "నివేదికను పంపడంలో విఫలమైంది: ", - "Failed to set direct chat tag": "ప్రత్యక్ష మాటామంతి బొందు సెట్ చేయడంలో విఫలమైంది", - "Failed to set Direct Message status of room": "గది యొక్క ప్రత్యక్ష సందేశ స్థితి సెట్ చేయడంలో విఫలమైంది", - "Favourite": "గుర్తుంచు", - "Fetching third party location failed": "మూడవ పార్టీ స్థానాన్ని పొందడం విఫలమైంది", - "Files": "దస్ర్తాలు", - "Filter room names": "గది పేర్లను ఫిల్టర్ చేయండి", - "Forget": "మర్చిపో", - "Forward Message": "సందేశాన్ని మునుముందుకు చేయండి", - "Guests can join": "అతిథులు చేరవచ్చు", - "Hide panel": "ప్యానెల్ను దాచు", - "(HTTP status %(httpStatus)s)": "(HTTP స్థితి %(httpStatus)s)", - "I understand the risks and wish to continue": "నేను నష్టాలను అర్థం చేసుకుంటాను మరియు కొనసాగించాలని కోరుకుంటున్నాను", - "Invite to this room": "ఈ గదికి ఆహ్వానించండి", - "Keywords": "ముఖ్యపదాలు", - "Leave": "వదిలి", - "Login": "ప్రవేశ ద్వారం", - "Loading bug report module": "దోష నివేదిక అధిభాగం లోడ్ చేస్తోంది", - "Low Priority": "తక్కువ ప్రాధాన్యత", - "Members": "సభ్యులు", - "Mentions only": "మాత్రమే ప్రస్తావిస్తుంది", - "Messages containing my display name": "నా ప్రదర్శన పేరును కలిగి ఉన్న సందేశాలు", - "Messages containing keywords": "కీలక పదాలనుకలిగి ఉన్న సందేశం", - "Messages containing my user name": "నా వినియోగదారు పేరు కలిగి ఉన్న సందేశాలు", - "Messages in group chats": "సమూహ మాటామంతిలో సందేశాలు", - "Messages in one-to-one chats": "సందేశాలు నుండి ఒకరికి ఒకటి మాటామంతి", - "Messages sent by bot": "బాట్ పంపిన సందేశాలు", - "more": "మరింత", - "Mute": "నిశబ్ధము", - "No rooms to show": "చూపించడానికి గదులు లేవు", - "Noisy": "శబ్దం", - "Notification targets": "తాఖీదు లక్ష్యాలు", - "Notifications": "ప్రకటనలు", - "Notify for all other messages/rooms": "అన్ని ఇతర సందేశాలు / గదులు కోసం తెలియజేయండి", - "Off": "ఆపు", - "On": "వేయుము", - "Operation failed": "కార్యం విఫలమైంది", - "Reject": "తిరస్కరించు", - "Remove %(name)s from the directory?": "వివరము నుండి %(name)s తొలిగించు?", - "Remove": "తొలగించు", - "remove %(name)s from the directory.": "వివరము నుండి %(name)s ను తొలిగించు.", - "Remove from Directory": "`వివరము నుండి తొలిగించు", - "Report a bug": "లోపమును నివేదించు", - "Resend": "మళ్ళి పంపుము", "Riot Desktop on %(platformName)s": "రియట్ రంగస్థలం లో %(platformName)s", - "Room not found": "గది కనుగొనబడలేదు", - "Search": "శోధన", - "Search…": "శోధన…", - "Search for a room": "గది కోసం శోధించండి", - "Send": "పంపండి", - "Send logs": "నమోదును పంపు", - "Source URL": "మూల URL", - "Sorry, your browser is not able to run Riot.": "క్షమించండి, మీ బ్రౌజర్ రియట్ని అమలు చేయలేరు.", - "Today": "ఈ రోజు", - "Yesterday": "నిన్న", - "Warning": "హెచ్చరిక", - "Checking for an update...": "నవీకరణ కోసం చూస్తోంది...", - "Error encountered (%(errorDetail)s).": "లోపం సంభవించింది (%(errorDetail)s).", - "No update available.": "ఏ నవీకరణ అందుబాటులో లేదు.", - "Downloading update...": "నవీకరణను దిగుమతి చేస్తోంది...", "Welcome to Riot.im": "రిమోట్.ఇం కి స్వగతం", "Search the room directory": "గది వివరాన్ని శోధించండి", "Chat with Riot Bot": "రియోట్ బొట్తో మాటామంతి చేయండి", - "Please set a password!": "దయచేసి మీ రహస్యపదాన్నీ అమర్చండి!", - "Set Password": "రహస్యపదాన్నీ అమర్చండి", - "Couldn't load home page": "హోమ్ పేజీని లోడ్ చేయలేకపోయాము", - "Safari and Opera work too.": "సఫరిఇంకఒపెరకుద పని చెసతయి.", - "All notifications are currently disabled for all targets.": "ప్రస్తుతానికి అన్ని చోట్లనుంచి అన్ని ప్రకటనలు ఆగి వున్నాయి.", - "An error occurred whilst saving your email notification preferences.": "మీ ఇమెయిల్ ప్రకటన ప్రాధాన్యాలు బద్రపరిచేతప్పుడు ఎదో తప్పు జరిగింది." + "Unknown device": "తెలుయని పరికరం", + "You need to be using HTTPS to place a screen-sharing call.": "తెర ని పంచే కాల్ కి HTTPS అవసరం.", + "Riot is not supported on mobile web. Install the app?": "మొబైల్ బ్రౌజర్ లో రియట్ పనిచేయదు. ఆప్ ఇన్స్టాల్ చేయాలా?" } diff --git a/src/i18n/strings/th.json b/src/i18n/strings/th.json index 5b27b81080..bab1dcc6a1 100644 --- a/src/i18n/strings/th.json +++ b/src/i18n/strings/th.json @@ -1,152 +1,12 @@ { "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s ผ่านทาง %(browserName)s บน %(osName)s", - "All messages": "ทุกข้อความ", - "Cancel": "ยกเลิก", - "Close": "ปิด", - "Error": "ข้อผิดพลาด", - "#example": "#example", - "Files": "ไฟล์", - "Forward Message": "ส่งต่อข้อความ", - "Low Priority": "ความสำคัญต่ำ", - "Members": "สมาชิก", - "more": "เพิ่มเติม", - "Off": "ปิด", - "Report a bug": "รายงานจุดบกพร่อง", "powered by Matrix": "ใช้เทคโนโลยี Matrix", - "Quote": "อ้างอิง", - "Resend": "ส่งใหม่", - "Safari and Opera work too.": "Safari หรือ Opera ก็ใช้ได้", - "A new version of Riot is available.": "มี Riot เวอร์ชั่นใหม่", - "All Rooms": "ทุกห้อง", - "Cancel Sending": "ยกเลิกการส่ง", - "Changelog": "บันทึกการเปลี่ยนแปลง", - "Describe your problem here.": "อธิบายปัญหาที่นี่", - "Download this file": "ดาวน์โหลดไฟล์นี้", "Dismiss": "ไม่สนใจ", - "Messages sent by bot": "ข้อความจากบอท", - "Mute": "เงียบ", - "No rooms to show": "ไม่มีห้องที่จะแสดง", - "Notifications": "การแจ้งเตือน", - "On": "เปิด", - "Permalink": "ลิงก์ถาวร", - "Operation failed": "การดำเนินการล้มเหลว", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "กรุณาอธิบายจุดบกพร่อง คุณทำอะไร? ควรจะเกิดอะไรขึ้น? แล้วอะไรคือสิ่งที่เกิดขึ้นจริง?", - "Please describe the bug and/or send logs.": "กรุณาอธิบายจุดบกพร่อง และ/หรือ ส่งล็อก", - "Please install Chrome or Firefox for the best experience.": "กรุณาติดตั้ง Chrome หรือ Firefox เพื่อประสบการณ์ที่ดีที่สุด", - "Reject": "ปฏิเสธ", - "Remove": "ลบ", - "Messages containing keywords": "ข้อความที่มีคีย์เวิร์ด", - "Messages containing my user name": "ข้อความที่มีชื่อผู้ใช้ของฉัน", - "Search": "ค้นหา", - "Search…": "ค้นหา…", - "Room not found": "ไม่พบห้อง", - "Search for a room": "ค้นหาห้อง", - "Send": "ส่ง", - "Send logs": "ส่งล็อก", - "Sorry, your browser is not able to run Riot.": "ขออภัย เบราว์เซอร์ของคุณไม่สามารถ run Riot ได้", - "This Room": "ห้องนี้", - "Unavailable": "ไม่มี", "Unknown device": "อุปกรณ์ที่ไม่รู้จัก", - "unknown error code": "รหัสข้อผิดพลาดที่ไม่รู้จัก", - "Update": "อัปเดต", - "Uploaded on %(date)s by %(user)s": "อัปโหลดเมื่อ %(date)s โดย %(user)s", - "Yesterday": "เมื่อวานนี้", - "Today": "วันนี้", - "Saturday": "วันเสาร์", - "Friday": "วันศุกร์", - "Thursday": "วันพฤหัสบดี", - "Wednesday": "วันพุธ", - "Tuesday": "วันอังคาร", - "Monday": "วันจันทร์", - "Sunday": "วันอาทิตย์", - "You cannot delete this image. (%(code)s)": "คุณไม่สามารถลบรูปนี้ได้ (%(code)s)", - "You cannot delete this message. (%(code)s)": "คุณไม่สามารถลบข้อความนี้ได้ (%(code)s)", - "What's New": "มีอะไรใหม่", - "What's new?": "มีอะไรใหม่?", - "View Source": "ดูซอร์ส", - "Uploading report": "กำลังอัปโหลดรายงาน", - "Advanced notification settings": "ตั้งค่าการแจ้งเตือนขั้นสูง", - "Can't update user notification settings": "ไม่สามารถอัปเดตการตั้งค่าการแจ้งเตือนของผู้ใช้", - "Collecting logs": "กำลังรวบรวมล็อก", - "Collapse panel": "ซ่อนหน้าต่าง", - "Collecting app version information": "กำลังรวบรวมข้อมูลเวอร์ชันแอป", - "OK": "ตกลง", "You need to be using HTTPS to place a screen-sharing call.": "คุณต้องใช้ HTTPS เพื่อเริ่มติดต่อแบบแบ่งปันหน้าจอ", - "You are not receiving desktop notifications": "การแจ้งเตือนบนเดสก์ทอปถูกปิดอยู่", - "Waiting for response from server": "กำลังรอการตอบสนองจากเซิร์ฟเวอร์", - "View Decrypted Source": "ดูซอร์สที่ถอดรหัสแล้ว", - "Unnamed room": "ห้องที่ไม่มีชื่อ", - "Source URL": "URL ต้นฉบับ", - "Riot Desktop on %(platformName)s": "Riot เดสก์ทอปบน %(platformName)s", + "Riot Desktop on %(platformName)s": "Riot Desktop บน %(platformName)s", "Riot is not supported on mobile web. Install the app?": "Riot ไม่รองรับเว็บบนอุปกรณ์พกพา ติดตั้งแอป?", - "Riot does not know how to join a room on this network": "Riot ไม่รู้วิธีเข้าร่วมห้องในเครือข่ายนี้", - "Direct Chat": "แชทโดยตรง", - "All messages (noisy)": "ทุกข้อความ (เสียงดัง)", "Custom Server Options": "กำหนดเซิร์ฟเวอร์เอง", - "Directory": "ไดเรกทอรี", - "Enable audible notifications in web client": "เปิดใช้งานเสียงแจ้งเตือนบนเว็บไคลเอนต์", - "Enable desktop notifications": "เปิดใช้งานการแจ้งเตือนบนเดสก์ทอป", - "Enable email notifications": "เปิดใช้งานการแจ้งเตือนทางอีเมล", - "Enable notifications for this account": "เปิดใช้งานการแจ้งเตือนสำหรับบัญชีนี้", - "Enable them now": "เปิดใช้งานเดี๋ยวนี้", - "Enter keywords separated by a comma:": "กรอกคีย์เวิร์ดทั้งหมด คั่นด้วยเครื่องหมายจุลภาค:", - "Expand panel": "ขยายหน้าต่าง", - "Failed to update keywords": "การอัปเดตคีย์เวิร์ดล้มเหลว", - "Failed to remove tag %(tagName)s from room": "การลบแท็ก %(tagName)s จากห้องล้มเหลว", - "Failed to send report: ": "การส่งรายงานล้มเหลว: ", - "Filter room names": "กรองชื่อห้อง", - "Guests can join": "แขกเข้าร่วมได้", - "Hide panel": "ซ่อนหน้าต่าง", - "I understand the risks and wish to continue": "ฉันเข้าใจความเสี่ยงและต้องการดำเนินการต่อ", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "ล็อกจากไคลเอนต์จะถูกแนบพร้อมกับรายงานนี้เพื่อวินิจฉัยปัญหา หากคุณต้องการส่งเฉพาะข้อความด้านบน กรุณาเอาเครื่องหมายออก:", - "Invite to this room": "เชิญเข้าห้องนี้", - "Keywords": "คีย์เวิร์ด", - "Leave": "ออกจากห้อง", - "Loading bug report module": "กำลังโหลดโมดูลรายงานจุดบกพร่อง", - "Mentions only": "เมื่อถูกกล่าวถึงเท่านั้น", - "Messages containing my display name": "ข้อความที่มีชื่อของฉัน", - "Messages in group chats": "ข้อความในแชทกลุ่ม", - "Messages in one-to-one chats": "ข้อความในแชทตัวต่อตัว", - "Noisy": "เสียงดัง", - "Notification targets": "เป้าหมายการแจ้งเตือน", - "Notify for all other messages/rooms": "แจ้งเตือนจากห้อง/ข้อความอื่น ๆ ทั้งหมด", - "Notify me for anything else": "แจ้งเตือนสำหรับอย่างอื่นทั้งหมด", - "Remove %(name)s from the directory?": "ถอด %(name)s ออกจากไดเรกทอรี?", - "remove %(name)s from the directory.": "ถอด %(name)s ออกจากไดเรกทอรี", - "Remove from Directory": "ถอดออกจากไดเรกทอรี", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot ใช้คุณสมบัติขั้นสูงในเบราว์เซอร์หลายประการ คุณสมบัติบางอย่างอาจยังไม่พร้อมใช้งานหรืออยู่ในขั้นทดลองในเบราว์เซอร์ปัจจุบันของคุณ", - "There are advanced notifications which are not shown here": "มีการแจ้งเตือนขั้นสูงที่ไม่ได้แสดงที่นี่", - "Unable to join network": "ไม่สามารถเข้าร่วมเครือข่ายได้", - "Unable to look up room ID from server": "ไม่สามารถหา ID ห้องจากเซิร์ฟเวอร์ได้", - "Unhide Preview": "แสดงตัวอย่าง", - "World readable": "ทุกคนอ่านได้", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "คุณอาจมีการตั้งค่าจากไคลเอนต์อื่นนอกจาก Riot การตั้งต่าเหล่านั้นยังถูกใช้งานอยู่แต่คุณจะปรับแต่งจากใน Riot ไม่ได้", - "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "การแสดงผลของโปรแกรมอาจผิดพลาด ฟังก์ชันบางอย่างหรือทั้งหมดอาจไม่ทำงานในเบราว์เซอร์ปัจจุบันของคุณ หากคุณต้องการลองดำเนินการต่อ คุณต้องรับมือกับปัญหาที่อาจจะเกิดขึ้นด้วยตัวคุณเอง!", - "Add an email address above to configure email notifications": "เพิ่มที่อยู่อีเมลข้างบนเพื่อตั้งค่าการแจ้งเตือนทางอีเมล", - "All notifications are currently disabled for all targets.": "การแจ้งเตือนทั้งหมดถูกปิดใช้งานสำหรับทุกอุปกรณ์", - "An error occurred whilst saving your email notification preferences.": "เกิดข้อผิดพลาดระหว่างบันทึกการตั้งค่าการแจ้งเตือนทางอีเมล", - "Couldn't find a matching Matrix room": "ไม่พบห้อง Matrix ที่ตรงกับคำค้นหา", - "customServer_text": "คุณสามารถกำหนดเซิร์ฟเวอร์บ้านเองได้โดยใส่ URL ของเซิร์ฟเวอร์นั้น เพื่อเข้าสู่ระบบของเซิร์ฟเวอร์ Matrix อื่น
    ทั้งนี่เพื่อให้คุณสามารถใช้ Riot กับบัญชี Matrix ที่มีอยู่แล้วบนเซิร์ฟเวอร์บ้านอื่น ๆ ได้

    คุณอาจเลือกเซิร์ฟเวอร์ระบุตัวตนเองด้วยก็ได้ แต่คุณจะไม่สามารถเชิญผู้ใช้อื่นด้วยที่อยู่อีเมล หรือรับคำเชิญจากผู้ใช้อื่นทางที่อยู่อีเมลได้", - "delete the alias.": "ลบนามแฝง", - "Error saving email notification preferences": "การบันทึกการตั้งค่าการแจ้งเตือนทางอีเมลผิดพลาด", - "Failed to add tag %(tagName)s to room": "การเพิ่มแท็ก %(tagName)s ของห้องนี้ล้มเหลว", - "Failed to change settings": "การแก้ไขการตั้งค่าล้มเหลว", - "Failed to get protocol list from Home Server": "การขอรายชื่อโปรโตคอลจากเซิร์ฟเวอร์บ้านล้มเหลว", - "Failed to get public room list": "การขอรายชื่อห้องสาธารณะล้มเหลว", - "Failed to set direct chat tag": "การติดแท็กแชทตรงล้มเหลว", - "Failed to set Direct Message status of room": "การตั้งสถานะข้อความตรงของห้องล้มเหลว", - "Favourite": "รายการโปรด", - "Fetching third party location failed": "การเรียกข้อมูลตำแหน่งจากบุคคลที่สามล้มเหลว", - "The Home Server may be too old to support third party networks": "เซิร์ฟเวอร์บ้านอาจเก่าเกินกว่าจะรองรับเครือข่ายของบุคคลที่สาม", - "The server may be unavailable or overloaded": "เซิร์ฟเวอร์อาจไม่พร้อมใช้งานหรือทำงานหนักเกินไป", - "Unable to fetch notification target list": "ไม่สามารถรับรายชื่ออุปกรณ์แจ้งเตือน", - "When I'm invited to a room": "เมื่อฉันได้รับคำเชิญเข้าห้อง", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "ลบนามแฝง %(alias)s ของห้องและถอด %(name)s ออกจากไดเรกทอรี?", - "Call invitation": "คำเชิญเข้าร่วมการโทร", - "Failed to forget room %(errCode)s": "การลืมห้องล้มเหลว %(errCode)s", - "Forget": "ลืม", - "Notifications on the following keywords follow rules which can’t be displayed here:": "การแจ้งเตือนจากคีย์เวิร์ดเหล่านี้ เป็นไปตามกฏที่ไม่สามารถแสดงที่นี่ได้:", - "Login": "เข้าสู่ระบบ", "Welcome to Riot.im": "ยินดีต้อนรับสู่ Riot.im", "Search the room directory": "ค้นหาในไดเรกทอรีห้อง", "Chat with Riot Bot": "แชทกับบอท Riot", @@ -169,26 +29,17 @@ "Contributing code to Matrix and Riot": "สมทบโค๊ดให้ Matrix และ Riot", "Dev chat for the Riot/Web dev team": "แชทสำหรับทีมพัฒนา Riot บนเว็บ", "Dev chat for the Dendrite dev team": "แชทสำหรับทีมพัฒนา Dendrite", - "Co-ordination for Riot/Web translators": "แชทสำหรับประสานงานการแปล Riot บนเว็บ", - "Failed to change password. Is your password correct?": "การเปลี่ยนรหัสผ่านล้มเหลว รหัสผ่านของคุณถูกต้องหรือไม่?", "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "มีห้องอยู่มากมายใน Matrix ทั้งห้องที่เชื่อมไปยังเครือข่ายอื่น (Slack, IRC, Gitter ฯลฯ) และห้องที่อยู่ด้วยตัวเอง ลองดูไดเรกทอรีสิ!", - "You have successfully set a password!": "การตั้งรหัสผ่านเสร็จสมบูรณ์!", - "You can now return to your account after signing out, and sign in on other devices.": "คุณสามารถกลับไปยังบัญชีของคุณหลังจากออกจากระบบ แล้วกลับเขาสู่ระบบบนอุปกรณ์อื่น ๆ", - "Continue": "ดำเนินการต่อ", - "Please set a password!": "กรุณาตั้งรหัสผ่าน!", - "This will allow you to return to your account after signing out, and sign in on other devices.": "เพื่อคุณจะได้กลับมายังบัญชีเดิมของคุณได้ หลังจากออกจากระบบ แล้วกลับเข้าสู่ระบบในอุปกรณ์อื่น ๆ", "Design and implementation of E2E in Matrix": "การออกแบบและใช้งาน E2E ใน Matrix", "Discussion of the Identity Service API": "พูดคุยเกี่ยวกับ Identity Service API", "Decentralised, encrypted chat & collaboration powered by [matrix]": "ระบบแชทและประสานงาน ไร้ศูนย์กลางและเข้ารหัสได้ โดยใช้เทคโนโลยีจาก [matrix]", "General discussion about Matrix and Riot": "พูดคุยเรื่องทั่วไป ทั้ง Matrix และ Riot", - "(HTTP status %(httpStatus)s)": "(สถานะ HTTP %(httpStatus)s)", - "Remember, you can always set an email address in user settings if you change your mind.": "อย่าลืม คุณสามารถตั้งที่อยู่อีเมลในการตั้งค่าผู้ใช้ได้ทุกเมื่อหากคุณเปลี่ยนใจ", - "You have successfully set a password and an email address!": "ตั้งรหัสผ่านและที่อยู่อีเมลสำเร็จแล้ว!", - "Warning": "คำเตือน", - "Checking for an update...": "กำลังตรวจหาอัปเดต...", - "Error encountered (%(errorDetail)s).": "เกิดข้อผิดพลาด (%(errorDetail)s)", - "No update available.": "ไม่มีอัปเดตที่ใหม่กว่า", - "Downloading update...": "กำลังดาวน์โหลดอัปเดต...", - "To return to your account in future you need to set a password": "คุณต้องตั้งรหัสผ่านเพื่อจะกลับมาที่บัญชีนี้ในอนาคต", - "Set Password": "ตั้งรหัสผ่าน" + "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "การตั้งค่า Riot ของคุณมี JSON ที่ไม่ถูกต้อง โปรดแก้ปัญหาและโหลดเพจอีกครั้ง", + "The message from the parser is: %(message)s": "ข้อความจากparserคือ:%(message)s", + "Invalid JSON": "JSON ไม่ถูกต้อง", + "Your Riot is misconfigured": "Riotของคุณตั้งค่าไม่ถูกต้อง", + "Sign In": "เข้าสู่ระบบ", + "Create Account": "สร้างบัญชี", + "Need help?": "ต้องการความช่วยเหลือ?", + "Explore rooms": "สำรวจห้อง" } diff --git a/src/i18n/strings/tr.json b/src/i18n/strings/tr.json index b0fcc46b66..ff7bddd05f 100644 --- a/src/i18n/strings/tr.json +++ b/src/i18n/strings/tr.json @@ -1,158 +1,17 @@ { "%(appName)s via %(browserName)s on %(osName)s": "%(osName)s işletim sisteminde %(browserName)s ile %(appName)s", - "Safari and Opera work too.": " Safari ve Opera da çalışıyor.", - "A new version of Riot is available.": "Riot'un yeni bir versiyonu mevcuttur.", - "Add an email address above to configure email notifications": "E-posta bildirimlerini yapılandırmak için yukarıya bir e-posta adresi ekleyin", - "Advanced notification settings": "Gelişmiş bildirim ayarları", - "All messages": "Tüm mesajlar", - "All messages (noisy)": "Tüm mesajlar (uzun)", - "All Rooms": "Tüm Odalar", - "All notifications are currently disabled for all targets.": "Tüm bildirimler şu anda tüm hedefler için devre dışı bırakılmıştır.", - "An error occurred whilst saving your email notification preferences.": "E-posta bildirim tercihlerinizi kaydetme işlemi sırasında bir hata oluştu.", - "Call invitation": "Arama davetiyesi", - "Cancel": "İptal Et", - "Cancel Sending": "Göndermeyi İptal Et", - "Can't update user notification settings": "Kullanıcı bildirim ayarları güncellenemiyor", - "Changelog": "Değişiklikler", - "Close": "Kapat", - "Collapse panel": "Katlanır panel", - "Collecting app version information": "Uygulama sürümü bilgileri toplanıyor", - "Collecting logs": "Kayıtlar toplanıyor", - "Couldn't find a matching Matrix room": "Eşleşen bir Matrix odası bulunamadı", - "Custom Server Options": "Özel Sunucu Seçenekleri", - "customServer_text": "Farklı bir Ana Sunucu URL'si belirleyerek başka bir Matrix sunucusunda oturum açmak için Özel Sunucu Seçeneklerini kullanabilirsiniz.
    Bu , Riot'u mevcut Matrix hesabı ile farklı bir Ana Sunucuda kullanmanıza olanak tanır.

    Ayrıca Özel Kimlik Sunucu'da ayarlayabilirsiniz ama kullanıcıları e-posta adresleriyle veya kendi e-posta adresinizle davet edemezsiniz.", - "delete the alias.": "Tüm rumuzları sil.", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "%(alias)s oda rumuzu silinsin ve %(name)s dizinden kaldırılsın mı ?", - "Describe your problem here.": "Probleminizi burada açıklayın.", - "Direct Chat": "Doğrudan Sohbet", - "Directory": "Dizin", - "Dismiss": "Uzaklaştır", - "Download this file": "Bu dosyayı indir", - "Enable audible notifications in web client": "Web istemcisinde sesli bildirimleri etkinleştir", - "Enable desktop notifications": "Masaüstü bildirimlerini etkinleştir", - "Enable email notifications": "E-posta bildirimlerini etkinleştir", - "Enable notifications for this account": "Bu hesap için bildirimleri etkinleştir", - "Enable them now": "Onları şimdi etkinleştir", - "Enter keywords separated by a comma:": "Anahtar kelimeleri virgül ile ayırarak girin:", - "Error": "Hata", - "Error saving email notification preferences": "E-posta bildirim tercihlerini kaydetme hatası", - "#example": "örnek", - "Expand panel": "Genişletme paneli", - "Failed to add tag %(tagName)s to room": "%(tagName)s etiketi odaya eklenemedi", - "Failed to change settings": "Ayarlar değiştirilemedi", - "Failed to forget room %(errCode)s": "Oda unutulması başarısız oldu %(errCode)s", - "Failed to update keywords": "Anahtar kelimeler güncellenemedi", - "Failed to get protocol list from Home Server": "Ana Sunucu'dan protokol listesi alınamadı", - "Failed to get public room list": "Genel odalar listesi alınamadı", - "Failed to remove tag %(tagName)s from room": "Odadan %(tagName)s etiketi kaldırılamadı", - "Failed to send report: ": "Rapor gönderilemedi: ", - "Failed to set direct chat tag": "Direkt sohbet etiketi ayarlanamadı", - "Failed to set Direct Message status of room": "Odanın Direkt Mesaj durumu ayarlanamadı", - "Favourite": "Favori", - "Fetching third party location failed": "Üçüncü parti konumunu çekemedi", - "Files": "Dosyalar", - "Filter room names": "Oda isimlerini filtrele", - "Forget": "Unut", - "Forward Message": "Mesajı İlet", - "Guests can join": "Misafirler katılabilirler", - "Hide panel": "Paneli gizle", - "(HTTP status %(httpStatus)s)": "(HTTP durumu %(httpStatus)s)", - "I understand the risks and wish to continue": "Riskleri anlıyorum ve devam etmek istiyorum", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Sorunları teşhis etmek için , bu istemciden kayıtlar hata raporu ile beraber gönderilecek . Yalnızca yukarıdaki metni göndermek isterseniz , lütfen işareti kaldırın:", - "Invite to this room": "Bu odaya davet et", - "Keywords": "Anahtar kelimeler", - "Leave": "Ayrıl", - "Login": "Oturum aç", - "Loading bug report module": "Hata raporlama modülü yükleniyor", - "Low Priority": "Düşük Öncelikli", - "Members": "Üyeler", - "Mentions only": "Sadece Mention'lar", - "Messages containing my display name": "İsmimi içeren mesajlar", - "Messages containing keywords": " anahtar kelimeleri içeren mesajlar", - "Messages containing my user name": "Kullanıcı ismimi içeren mesajlar", - "Messages in group chats": "Grup sohbetlerindeki mesajlar", - "Messages in one-to-one chats": "Bire bir sohbetlerdeki mesajlar", - "Messages sent by bot": "Bot tarafından gönderilen mesajlar", - "more": "Daha", - "Mute": "Sessiz", - "No rooms to show": "Gösterilecek oda yok", - "Noisy": "Gürültülü", - "Notification targets": "Bildirim hedefleri", - "Notifications": "Bildirimler", - "Notifications on the following keywords follow rules which can’t be displayed here:": "Aşağıdaki anahtar kelimeleri ile ilgili bildirimler burada gösterilemeyen kuralları takip eder:", - "Notify for all other messages/rooms": "Diğer tüm mesajlar / odalar için bildirim yapın", - "Notify me for anything else": "Başka herhangi bir şey için bana bildirim yap", - "Off": "Kapalı", - "On": "Açık", - "Operation failed": "Operasyon başarısız oldu", - "Permalink": "Kalıcı Bağlantı(permalink)", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Lütfen hatayı tanımlayın. Ne yaptınız ? Ne gerçekleşmesini beklediniz ? Ne gerçekleşti ?", - "Please describe the bug and/or send logs.": "Lütfen hatayı tanımlayın ve/veya kayıtları gönderin.", - "Please install Chrome or Firefox for the best experience.": "Lütfen Chrome ya da Firefox 'u en iyi deneyim için yükleyin.", - "powered by Matrix": "Matrix tarafından desteklenmektedir", - "Quote": "Alıntı", - "Reject": "Reddet", - "Remove %(name)s from the directory?": "%(name)s'i dizinden kaldırılsın mı ?", - "Remove": "Kaldır", - "remove %(name)s from the directory.": "%(name)s'i dizinden kaldır.", - "Remove from Directory": "Dizinden Kaldır", - "Report a bug": "Hata Bildir", - "Resend": "Yeniden Gönder", + "Custom Server Options": "Özelleştirilebilir Sunucu Seçenekleri", + "Dismiss": "Kapat", + "powered by Matrix": "Matrix'den besleniyor", "Riot Desktop on %(platformName)s": "%(platformName)s platformunda Riot Masaüstü", - "Riot does not know how to join a room on this network": "Riot bu ağdaki bir odaya nasıl gireceğini bilmiyor", "Riot is not supported on mobile web. Install the app?": "Riot mobil web'de desteklenmiyor . Uygulamayı yükle ?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot geçerli tarayıcınızda mevcut olmayan veya denemelik olan birçok gelişmiş tarayıcı özelliği kullanıyor.", - "Room not found": "Oda bulunamadı", - "Search": "Ara", - "Search…": "Arama…", - "Search for a room": "Oda ara", - "Send": "Gönder", - "Send logs": "Kayıtları gönder", - "Source URL": "Kaynak URL", - "Sorry, your browser is not able to run Riot.": "Üzgünüz , tarayıcınız Riot'u çalıştıramıyor .", - "The Home Server may be too old to support third party networks": "Ana Sunucu 3. parti ağları desteklemek için çok eski olabilir", - "There are advanced notifications which are not shown here": "Burada gösterilmeyen gelişmiş bildirimler var", - "The server may be unavailable or overloaded": "Sunucu kullanılamıyor veya aşırı yüklenmiş olabilir", - "This Room": "Bu Oda", - "Unable to fetch notification target list": "Bildirim hedef listesi çekilemedi", - "Unable to join network": "Ağa bağlanılamıyor", - "Unable to look up room ID from server": "Sunucudan oda ID'si aranamadı", - "Unavailable": "Kullanım dışı", - "Unhide Preview": "Önizlemeyi Göster", "Unknown device": "Bilinmeyen aygıt", - "unknown error code": "bilinmeyen hata kodu", - "Unnamed room": "İsimsiz oda", - "Update": "Güncelleştirme", - "Uploaded on %(date)s by %(user)s": "%(user)s tarafında %(date)s e yüklendi", - "Uploading report": "Rapor yükleniyor", - "View Decrypted Source": "Şifresi Çözülmüş(Decrypted) Kaynağı Görüntüle", - "View Source": "Kaynağı Görüntüle", - "What's New": "Yenilikler", - "What's new?": "Yeni olan ne ?", - "Waiting for response from server": "Sunucudan yanıt bekleniyor", - "When I'm invited to a room": "Bir odaya davet edildiğimde", - "World readable": "Okunabilir dünya", - "You cannot delete this image. (%(code)s)": "Bu resmi silemezsiniz. (%(code)s)", - "You cannot delete this message. (%(code)s)": "Bu mesajı silemezsiniz (%(code)s)", - "You are not receiving desktop notifications": "Masaüstü bildirimleri almıyorsunuz", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Onları Riot dışında bir istemciden yapılandırmış olabilirsiniz . Onları Riot içersinide ayarlayamazsınız ama hala geçerlidirler", - "Sunday": "Pazar", - "Monday": "Pazartesi", - "Tuesday": "Salı", - "Wednesday": "Çarşamba", - "Thursday": "Perşembe", - "Friday": "Cuma", - "Saturday": "Cumartesi", - "Today": "Bugün", - "Yesterday": "Dün", - "OK": "Tamam", "You need to be using HTTPS to place a screen-sharing call.": "Ekran paylaşımlı arama yapmak için HTTPS kullanıyor olmalısınız.", - "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Geçerli tarayıcınız ile birlikte , uygulamanın görünüş ve kullanım hissi tamamen hatalı olabilir ve bazı ya da tüm özellikler çalışmayabilir. Yine de denemek isterseniz devam edebilirsiniz ancak karşılaşabileceğiniz sorunlar karşısında kendi başınasınız !", - "Welcome to Riot.im": "Riot.im'e Hoş Geldiniz", - "Decentralised, encrypted chat & collaboration powered by [matrix]": "Dağıtık , şifreli sohbet & işbirliği ile Matrix tarafından desteklenmektedir", + "Welcome to Riot.im": "Riot.im'e hoş geldiniz", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Merkezsiz, şifreli sohbet & işbirliği ile Matrix tarafından desteklenmektedir", "Search the room directory": "Oda dizinini ara", - "Chat with Riot Bot": "Riot Bot ile Sohbet Et", - "Get started with some tips from Riot Bot!": "Bazı Riot Bot ipuçları ile başlayın !", + "Chat with Riot Bot": "Riot Bot ile sohbet et", + "Get started with some tips from Riot Bot!": "Riot Bot'tan bazı ipuçları ile başlayın!", "General discussion about Matrix and Riot": "Matrix ve Riot hakkında genel tartışma", "Discussion of all things Matrix!": "Matrix'in tüm tartışması!", "Riot/Web & Desktop chat": "Riot/Web & Masaüstü sohbet", @@ -160,28 +19,28 @@ "Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk sohbet", "Matrix technical discussions": "Matrix teknik tartışmalar", "Running Matrix services": "Çalışan Matrix hizmetleri", - "Community-run support for Synapse": "Synapse için topluluk tarafından işlenen destek", - "Admin support for Dendrite": "Dendrite için Admin desteği", + "Community-run support for Synapse": "Synapse için topluluk tarafından işletilen destek", + "Admin support for Dendrite": "Dendrite için yönetici desteği", "Announcements about Synapse releases": "Synapse sürümleri hakkında duyurular", "Support for those using and running matrix-appservice-irc": "matrix-appservice-irc kullanan ve çalıştıran kullanıcılar için destek", - "Building services on Matrix": "Matrix üzerinde Yapı hizmetleri", + "Building services on Matrix": "Matrix üzerinde yapı hizmetleri", "Support for those using the Matrix spec": "Matrix teknik özelliklerini kullananlar için destek", - "Design and implementation of E2E in Matrix": "Matrix'te E2E ' nin Tasarım ve İmplementasyonu", - "Implementing VR services with Matrix": "Matrix'te VR hizmetlerini implement etmek", - "Implementing VoIP services with Matrix": "Matrix'te VoIP hizmetlerini implement etmek", - "Discussion of the Identity Service API": "Kimlik Hizmet API ( Identity Service API ) Tartışması", + "Design and implementation of E2E in Matrix": "Matrix'te E2E ' nin Tasarımı ve uyglamanması", + "Implementing VR services with Matrix": "Matrix'te VR hizmetlerini uygulamak", + "Implementing VoIP services with Matrix": "Matrix'te VoIP hizmetlerini uygulamak", + "Discussion of the Identity Service API": "Kimlik Hizmet API ( Identity Service API ) tartışması", "Support for those using, running and writing other bridges": "Diğer köprüleri kullanan , çalıştıran ve yazanlar için destek", - "Contributing code to Matrix and Riot": "Matrix ve Riot'a kod katkısı (contribution) sağla", - "Dev chat for the Riot/Web dev team": "Riot/Web Geliştirici takımı için Geliştirici sohbeti", - "Dev chat for the Dendrite dev team": "Dendrite Geliştirici Takımı için Geliştirici sohbeti", - "Co-ordination for Riot/Web translators": "Riot/Web çevirmenleri için koordinasyon", - "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Matrix'te varolan ağlara (Slack , IRC , Gitter vb.) bağlı ya da bağımsız bir çok oda var . Dizini kontrol edin!", - "Failed to change password. Is your password correct?": "Şifreniz değiştirilemedi . Şifreniz doğru mu ?", - "You have successfully set a password!": "Başarıyla bir şifre ayarladınız!", - "You can now return to your account after signing out, and sign in on other devices.": "Şimdi oturumunuzu iptal ettikten sonra başka cihazda oturum açarak hesabınıza dönebilirsiniz.", - "Continue": "Devam Et", - "Please set a password!": "Lütfen bir şifre ayarlayın !", - "This will allow you to return to your account after signing out, and sign in on other devices.": "Bu oturumunuzu kapattıktan sonra hesabınıza dönmenizi ve diğer cihazlarda oturum açmanızı sağlar.", - "You have successfully set a password and an email address!": "Başarıyla bir şifre ve e-posta adresi ayarladın !", - "Remember, you can always set an email address in user settings if you change your mind.": "Unutmayın , fikrinizi değiştirirseniz her zaman bir şifre ve e-posta adresi ayarlayabilirsiniz." + "Contributing code to Matrix and Riot": "Matrix ve Riot'a kod katkısı sağlama", + "Dev chat for the Riot/Web dev team": "Riot/Web Geliştirici takımı için geliştirici sohbeti", + "Dev chat for the Dendrite dev team": "Dendrite geliştirici takımı için geliştirici sohbeti", + "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Matrix'te var olan ağalara bağlı (Slack , IRC , Gitter vb.) birçok oda var. Dizini kontrol edin!", + "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Farklı bir ev sunucusu URL'sini belirterek diğer Matrix sunucularına oturum açmak için özel sunucu seçeneklerini kullanabilirsiniz.
    Bu, Riot'u başka bir ev sunucusu üzerinde var olan Matrix hesabını kullanmanıza olanak sağlar.

    Ayrıca özelleştirilebilir bir kimlik de ayarlayabilirsiniz, ama kullanıcılırı ve kendinizi e-posta adreslerinden davet edemeyeceksiniz.", + "Co-ordination for Riot translators": "Riot çeviricileri için iş güdüm (koordinasyon)", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Özel sunucu seçenekleri kullanıp farklı bir anamakine URL'si belirleyerek diğer Matrix sunucularına giriş yapabilirsin. Bu Riot'u varolan bir Matrix hesabı ile farklı anamakine de kullanmanı sağlar.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Ayrıca özel kimlik sunucusu da belirleyebilirsin, ancak kullanıcıları epostaları ile davet edemezsin ya da epostan ile davet edilemezsin.", + "Sign In": "Giriş yap", + "Create Account": "Kayıt Ol", + "Need help?": "Yardıma mı ihtiyacın var?", + "Explore rooms": "Odaları keşfet", + "Room Directory": "Oda Dizini" } diff --git a/src/i18n/strings/uk.json b/src/i18n/strings/uk.json index e6af85240a..2485880ad8 100644 --- a/src/i18n/strings/uk.json +++ b/src/i18n/strings/uk.json @@ -1,149 +1,16 @@ { - "A new version of Riot is available.": "Доступне оновлення для Riot.", - "All messages": "Усі повідомлення", - "All messages (noisy)": "Усі повідомлення (гучно)", - "All Rooms": "Усі кімнати", - "All notifications are currently disabled for all targets.": "Сповіщення для усіх цілей на даний момент вимкнені.", - "An error occurred whilst saving your email notification preferences.": "Під час збереження налаштувань сповіщень е-поштою трапилася помилка.", - "Cancel": "Скасувати", - "Cancel Sending": "Скасувати надсилання", - "Can't update user notification settings": "Неможливо оновити налаштування користувацьких сповіщень", - "Changelog": "Журнал змін", - "Close": "Закрити", - "Collapse panel": "Згорнути панель", - "Collecting app version information": "Збір інформації про версію застосунка", - "Collecting logs": "Збір журналів", - "Couldn't find a matching Matrix room": "Неможливо знайти відповідну кімнату", - "Custom Server Options": "Нетипові параметри сервера", - "customServer_text": "Ви можете скористатись нетиповими параметрами сервера щоб увійти в інші сервери Matrix, зазначивши посилання на окремий Домашній сервер
    Це дозволяє вам використовувати Riot із вже існуючою обліковкою Matrix на іншому Домашньому сервері.

    Ви також можете зазначити нетиповий сервер ідентифікації, але ви не матимете змоги ані запрошувати користувачів за е-поштою, ані бути запрошеними за е-поштою самі.", - "delete the alias.": "видалити псевдонім.", + "Custom Server Options": "Власні параметри сервера", "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s через %(browserName)s на %(osName)s", - "Safari and Opera work too.": "Safari та Opera також підтримуються.", - "Add an email address above to configure email notifications": "Додайте вище адресу е-пошти щоб налаштувати сповіщення е-поштою", - "Advanced notification settings": "Додаткові налаштування сповіщень", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Видалити псевдонім %(alias)s та прибрати з каталогу %(name)s?", - "Describe your problem here.": "Опишіть вашу проблему тут.", - "Direct Chat": "Прямий чат", - "Directory": "Каталог", "Dismiss": "Відхилити", - "Download this file": "Звантажити цей файл", - "Enable audible notifications in web client": "Увімкнути звукові сповіщення у мережевому застосунку", - "Enable desktop notifications": "Увімкнути сповіщення на стільниці", - "Enable email notifications": "Увімкнути сповіщення е-поштою", - "Enable notifications for this account": "Увімкнути сповіщення для цієї обліковки", - "Enable them now": "Увімкнути їх зараз", - "Enter keywords separated by a comma:": "Введіть ключові слова через кому:", - "Error": "Помилка", - "Error saving email notification preferences": "Помилка при збереженні параметрів сповіщень е-поштою", - "#example": "#зразок", - "Expand panel": "Розгорнути панель", - "Failed to add tag %(tagName)s to room": "Не вдалось додати до кімнати мітку %(tagName)s", - "Failed to change settings": "Не вдалось змінити налаштування", - "Failed to forget room %(errCode)s": "Не вдалось видалити кімнату %(errCode)s", - "Failed to update keywords": "Не вдалось оновити ключові слова", - "Failed to get protocol list from Home Server": "Не вдалось отримати перелік протоколів з Домашнього серверу", - "Failed to get public room list": "Не вдалось отримати перелік прилюдних кімнат", - "Failed to remove tag %(tagName)s from room": "Не вдалося прибрати з кімнати мітку %(tagName)s", - "Failed to send report: ": "Не вдалося надіслати звіт: ", - "Failed to set direct chat tag": "Не вдалося встановити мітку прямого чату", - "Favourite": "Вибране", - "Fetching third party location failed": "Не вдалось отримати стороннє місцеперебування", - "Files": "Файли", - "Filter room names": "Відфільтрувати назви кімнат", - "Forget": "Забути", - "Forward Message": "Переслати повідомлення", - "Guests can join": "Гості можуть приєднуватися", - "Hide panel": "Сховати панель", - "(HTTP status %(httpStatus)s)": "(статус HTTP %(httpStatus)s)", - "I understand the risks and wish to continue": "Я ознайомлений з ризиками і хочу продовжити", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "З метою діагностики проблем журнали з цього застосунку будуть надіслані разом зі звітом про вади. Якщо ви бажаєте надіслати лише вищенаведений текст, відозначте, будь ласка:", - "Invite to this room": "Запросити до цієї кімнати", - "Keywords": "Ключові слова", - "Leave": "Вийти", - "Login": "Зайти", - "Loading bug report module": "Завантаження модуля звітів про вади", - "Low Priority": "Неважливі", - "Members": "Члени", - "Mentions only": "Тільки згадки", - "Messages containing keywords": "Повідомлення, що містять ключові слова", - "Messages containing my user name": "Повідомлення, що містять моє ім'я користувача", - "Messages in group chats": "Повідомлення у групових чатах", - "Messages sent by bot": "Повідомлення, надіслані ботом", - "more": "докладніше", - "Mute": "Стишити", - "Notification targets": "Цілі сповіщень", - "Notifications": "Сповіщення", - "Notify for all other messages/rooms": "Сповіщати щодо всіх повідомлень/кімнат", - "Notify me for anything else": "Сповіщати мене про будь-що інше", - "Off": "Вимкнено", - "On": "Увімкнено", - "Operation failed": "Не вдалося виконати дію", - "Permalink": "Постійне посилання", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Опишіть, будь ласка, ваду. Що ви зробили? На що ви очікували? Що трапилось натомість?", - "Please describe the bug and/or send logs.": "Опишіть, будь ласка, ваду та/або надішліть журнали.", - "Please install Chrome or Firefox for the best experience.": "Для більшої зручності у використанні встановіть, будь ласка, Chrome або Firefox.", "powered by Matrix": "працює на Matrix", - "Quote": "Цитувати", - "Reject": "Відмовитись", - "Remove %(name)s from the directory?": "Прибрати %(name)s з каталогу?", - "Remove": "Прибрати", - "remove %(name)s from the directory.": "прибрати %(name)s з каталогу.", - "Remove from Directory": "Прибрати з каталогу", - "Report a bug": "Звітувати про вади", - "Resend": "Перенадіслати", "Riot Desktop on %(platformName)s": "Riot Desktop на %(platformName)s", - "Call invitation": "Запрошення до виклику", - "Riot does not know how to join a room on this network": "Riot не знає як приєднатись до кімнати у цій мережі", "Riot is not supported on mobile web. Install the app?": "Riot не працює через оглядач на мобільних пристроях. Встановити застосунок?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot використовує багато новітніх функцій, деякі з яких не доступні або є експериментальними у вашому оглядачі.", - "Room not found": "Кімнату не знайдено", - "Search": "Пошук", - "Search…": "Пошук…", - "Search for a room": "Пошук кімнати", - "Send": "Надіслати", - "Send logs": "Надіслати журнали", - "Source URL": "Джерельне посилання", - "Sorry, your browser is not able to run Riot.": "Вибачте, ваш оглядач не спроможний запустити Riot.", - "The Home Server may be too old to support third party networks": "Домашній сервер може бути застарим для підтримки сторонніх мереж", - "There are advanced notifications which are not shown here": "Є додаткові сповіщення, що не показуються тут", - "The server may be unavailable or overloaded": "Сервер може бути недосяжним або перевантаженим", - "This Room": "Ця кімната", - "Unable to fetch notification target list": "Неможливо отримати перелік цілей сповіщення", - "Unable to join network": "Неможливо приєднатись до мережі", - "Unable to look up room ID from server": "Неможливо знайти ID кімнати на сервері", "Unknown device": "Невідомий пристрій", - "unknown error code": "невідомий код помилки", - "Unnamed room": "Неназвана кімната", - "Update": "Оновити", - "Uploaded on %(date)s by %(user)s": "Завантажено %(date)s користувачем %(user)s", - "Uploading report": "Завантаження звіту", - "View Decrypted Source": "Переглянути розшифроване джерело", - "View Source": "Переглянути джерело", - "What's New": "Що нового", - "What's new?": "Що нового?", - "Waiting for response from server": "Очікується відповідь від сервера", - "When I'm invited to a room": "Коли мене запрошено до кімнати", - "World readable": "Відкрито для світу", - "You cannot delete this image. (%(code)s)": "Ви не можете видалити це зображення. (%(code)s)", - "You cannot delete this message. (%(code)s)": "Ви не можете видалити це повідомлення. (%(code)s)", - "You are not receiving desktop notifications": "Ви не отримуєте сповіщення на стільниці", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Можливо, ви налаштували їх не у Riot, а у іншому застосунку. Ви не можете регулювати їх у Riot, але вони все ще мають силу", - "Sunday": "Неділя", - "Monday": "Понеділок", - "Tuesday": "Вівторок", - "Wednesday": "Середа", - "Thursday": "Четвер", - "Friday": "П'ятниця", - "Saturday": "Субота", - "Today": "Сьогодні", - "Yesterday": "Вчора", - "OK": "Гаразд", "You need to be using HTTPS to place a screen-sharing call.": "Ви маєте використовувати HTTPS щоб зробити виклик із поширенням екрану.", - "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "У вашому оглядачі вигляд застосунку може бути повністю іншим, а деякі або навіть усі функції можуть не працювати. Якщо ви наполягаєте, то можете продовжити користування, але ви маєте впоратись з усіма можливими проблемами власноруч!", "Welcome to Riot.im": "Ласкаво просимо до Riot.im", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Децентралізований, шифрований чат та засіб для співробітництва, що працює на [matrix]", "Search the room directory": "Шукати у каталозі кімнат", - "Chat with Riot Bot": "Розмовляти з Riot-ботом", + "Chat with Riot Bot": "Чат із Riot-ботом", "Get started with some tips from Riot Bot!": "Розпочніть за допомогою декількох підказок від Riot-боту!", "General discussion about Matrix and Riot": "Загальне обговорення Matrix та Riot", "Discussion of all things Matrix!": "Обговорення усіх деталей про Matrix!", @@ -165,62 +32,18 @@ "Contributing code to Matrix and Riot": "Тим, хто хоче долучитись до розробки Matrix та Riot", "Dev chat for the Riot/Web dev team": "Чат команди розробників Riot/Web", "Dev chat for the Dendrite dev team": "Чат команди розробників Dendrite", - "Co-ordination for Riot/Web translators": "Координація для перекладачів Riot/Web", "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "У мережі Matrix вже існує багато кімнат, що з'єднані як з існуючими мережами (Slack, IRC, Gitter тощо), так і незалежними. Подивіться у каталозі кімнат!", - "Failed to change password. Is your password correct?": "Не вдалось змінити пароль. Ви впевнені, що пароль введено правильно?", - "You have successfully set a password!": "Пароль успішно встановлено!", - "You can now return to your account after signing out, and sign in on other devices.": "Тепер ви можете повернутися до своєї обліковки після виходу з неї, та зайти з інших пристроїв.", - "Continue": "Продовжити", - "Please set a password!": "Встановіть пароль, будь ласка!", - "This will allow you to return to your account after signing out, and sign in on other devices.": "Це дозволить вам повернутися до своєї обліковки після виходу з неї, та заходити з інших пристроїв.", - "You have successfully set a password and an email address!": "Пароль та адресу е-пошти успішно встановлено!", - "Remember, you can always set an email address in user settings if you change your mind.": "Пам'ятайте, що ви завжди можете встановити адресу е-пошти у налаштуваннях, якщо передумаєте.", - "Messages in one-to-one chats": "Повідомлення у чатах \"сам на сам\"", - "No rooms to show": "Кімнати відсутні", - "Noisy": "Шумний", - "Unavailable": "Нема в наявності", - "Unhide Preview": "Відкрити попередній перегляд", - "Failed to set Direct Message status of room": "Не вдалось встановити статус прямого спілкування в кімнаті", - "Messages containing my display name": "Повідомлення, вміщає моє ім'я", "Running Matrix services": "Запуск служби Matrix", - "Set Password": "Задати пароль", - "Notifications on the following keywords follow rules which can’t be displayed here:": "Сповіщення з наступних ключових слів дотримуються правил, що не можуть бути показані тут:", - "To return to your account in future you need to set a password": "Щоб мати змогу використовувати вашу обліковку у майбутньому, зазначте пароль", - "Warning": "Попередження", - "Checking for an update...": "Перевірка оновлень…", - "Error encountered (%(errorDetail)s).": "Трапилась помилка (%(errorDetail)s).", - "No update available.": "Оновлення відсутні.", - "Downloading update...": "Звантаженя оновлення…", - "Couldn't load home page": "Не вдалось завантажити домівку", - "Back": "Назад", - "Bug report sent": "Звіт про помилки відправлений", - "Developer Tools": "Інструменти розробника", - "Failed to send custom event.": "Не вдалося відправити приватний захід.", - "Filter results": "Фільтр результатів", - "Send Custom Event": "Відправити приватний захід", - "Send Custom State Event": "Відправити статус приватного заходу", - "Explore Room State": "Перегляд статуса кімнати", - "You must specify an event type!": "Необхідно вказати тип захода!", - "Thank you!": "Дякую!", - "Event sent!": "Захід відправлено!", - "Event Type": "Тип західу", - "Event Content": "Зміст заходу", - "State Key": "Ключ стану", - "Show message in desktop notification": "Показати повідомлення в сповіщення на робочому столі", - "Edit": "Редактувати", - "Unpin Message": "Відкріпити повідомлення", - "Pin Message": "Прикріпити повідомлення", - "Register": "Зарегіструватись", - "Rooms": "Кімнати", - "Invite to this community": "Запросити в це суспільство", - "Add rooms to this community": "Добавити кімнати в це суспільство", - "Toolbox": "Панель інструментів", - "Send Account Data": "Відправити данні аккаунта", - "Explore Account Data": "Продивитись данні аккаунта", "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Ви можете використовувати параметри користувача сервера для входа на другі сервера Matrix, вказав другий URL-адресу домашнього сервера.
    Це дозволяє використовувати Riot з обліковим записом Matrix який існує на другому домашньому сервері.

    Окрім цього, можливо встановити ідентифікаційний сервер користувача, але ви не зможете запросити других користувачів та бути запрошенному використовуючи адресу електронної пошти.", - "Appear Offline": "Відображати як не в мережі", - "Away": "Нема на місці", - "Please install Chrome or Firefox for the best experience.": "Краще встановіть Chrome або Firefox.", - "Safari and Opera work too.": "Safari та Opera працюють теж.", - "Reply": "Відповісти" + "Co-ordination for Riot translators": "Координаційний чат для перекладачів Riot", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Ви можете використати власні параметри сервера для входу в інші Matrix сервери, вказавши інший URL. Це дозволить використовувати Riot з наявним обліковим записом Matrix на іншому сервері.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Ви також можете встановити власний сервер ідентифікації, але Ви не зможете запрошувати користувачів (або бути запрошеним самому) за адресою електронної пошти.", + "Need help?": "Допомогти?", + "Sign In": "Вхід", + "Create Account": "Створити аккаунт", + "Explore rooms": "Дослідити кімнати", + "Room Directory": "Каталог кімнат", + "Unexpected error preparing the app. See console for details.": "Неочікувана помилка при підготовці програми. Дивіться деталі у виводі консолі.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Невірна конфігурація: можна вказати лише default_server_config, default_server_name або default_hs_url.", + "Invalid configuration: no default server specified.": "Невірна конфігурація: не вказано сервер за замовчуванням." } diff --git a/src/i18n/strings/vi.json b/src/i18n/strings/vi.json new file mode 100644 index 0000000000..e1f9933d66 --- /dev/null +++ b/src/i18n/strings/vi.json @@ -0,0 +1,34 @@ +{ + "Riot is not supported on mobile web. Install the app?": "Riot không được hỗ trợ trên mobile web. Hãy cài app?", + "Riot Desktop on %(platformName)s": "Riot Desktop trên %(platformName)s", + "Unknown device": "Thiết bị không được nhận biết", + "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s với %(browserName)s trên %(osName)s", + "You need to be using HTTPS to place a screen-sharing call.": "Bạn phải sử dụng HTTPS để dùng chức năng chia sẻ màn hình.", + "Custom Server Options": "Các lựa chọn máy chủ", + "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Bạn có thể sử dụng các máy chủ khác để đăng nhập vào Matrix bằng cách khai báo đường dẫn Home server.
    Cách này cho phép bạn sử dụng tài khoản hiện tại trên một Home server khác.

    Bạn cũng có thể chọn một Server định danh nhưng bạn không thể mời người dùng khác qua email.", + "Dismiss": "Bỏ qua", + "powered by Matrix": "tài trợ bởi Matrix", + "Welcome to Riot.im": "Chào mừng tới Riot.im", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat phân tán, mã hóa & giao tiếp được tài trợ bởi [matrix]", + "Search the room directory": "Tìm trong danh sách phòng", + "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Rất nhiều phòng đã có sẵn trong Matrix, liên kết với các hệ thống mạng xã hội khác (Slack, IRC, Gitter,...) hoặc hoạt động độc lập. Hãy kiểm tra!", + "Chat with Riot Bot": "Chat với Riot Bot", + "Get started with some tips from Riot Bot!": "Bắt đầu với các hướng dẫn từ Riot Bot!", + "General discussion about Matrix and Riot": "Thảo luận chung về Matrix và Riot", + "Discussion of all things Matrix!": "Thào luận về mọi vấn đề liên quan đến Matrix!", + "Riot/Web & Desktop chat": "Riot/Web & Desktop chat", + "Unexpected error preparing the app. See console for details.": "Lỗi xảy ra trong lúc chuẩn bị app. Xem console log để biết chi tiết.", + "Your Riot is misconfigured": "Hệ thống Riot của bạn bị thiết lập sai", + "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Thiết lập Riot của bạn chứa JSON không hợp lệ. Bạn hãy sửa lỗi và tải lại trang.", + "The message from the parser is: %(message)s": "Nội dung tin là: %(message)s", + "Invalid JSON": "JSON không hợp lệ", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Thiết lập không hợp lệ: chỉ có thể điền một trong số default_server_config, default_server_name, hoặc default_hs_url.", + "Invalid configuration: no default server specified.": "Cấu hình không hợp lệ: máy chủ mặc định không được thiết lập.", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Bạn có thể sử dụng lựa chọn máy chủ khác để đăng nhập vào máy chủ Matrix bằng cách nhập đường dẫn máy chủ riêng. Cách này giúp bạn sử dụng Riot với máy chủ riêng của bạn.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Bạn có thể sử dụng máy chủ định danh riêng, nhưng bạn sẽ không thể mời người dùng bằng email, hoặc được mời bằng email của bạn.", + "Sign In": "Đăng nhập", + "Create Account": "Tạo tài khoản", + "Need help?": "Cần hỗ trợ?", + "Explore rooms": "Khám phá phòng chat", + "Room Directory": "Danh mục phòng" +} diff --git a/src/i18n/strings/vls.json b/src/i18n/strings/vls.json new file mode 100644 index 0000000000..5749e322eb --- /dev/null +++ b/src/i18n/strings/vls.json @@ -0,0 +1,27 @@ +{ + "Unexpected error preparing the app. See console for details.": "’t Is een onverwachte foute ipgetreedn by ’t voorbereidn van den app. Bekykt de console vo details.", + "This installation of Riot seems to have an invalid server configuration. If you are the administrator, please correct the error below": "De serverconfiguroatie van deze Riot-instantie lykt oungeldig. A je gy den beheerder zyt, gelieve ton de foute hierounder te corrigeern", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Oungeldige configuroasje: ku moar één van default_server_config, default_server_name, of default_hs_url ingeevn.", + "Invalid configuration: no default server specified.": "Oungeldige configuroasje: geen standoardserver ingegeevn.", + "Riot Desktop on %(platformName)s": "Riot Desktop ip %(platformName)s", + "Unknown device": "Ounbekend toestel", + "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s ip %(osName)s", + "You need to be using HTTPS to place a screen-sharing call.": "Je moet HTTPS gebruukn vo een iproep me schermdeeln te kunn startn.", + "powered by Matrix": "meuglik gemakt deur Matrix", + "Custom Server Options": "Angepaste serverinstelliengn", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Je kut d’angepaste serverinstelliengn gebruukn vo jen eigen an te meldn by andere Matrix-servers, deur een andere thuusserver-URL in te geevn. Da lat je toe van Riot te gebruukn met e bestoande Matrix-account by een andere thuusserver.", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Je kut ook een angepasten identiteitsserver instelln, ma je goa geen gebruukers kunn uutnodign via e-mail, of zelve via e-mail uutgenodigd wirden.", + "Dismiss": "Afwyzn", + "Welcome to Riot.im": "Welgekommn by Riot.im", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "Gedecentraliseerd en versleuteld chattn & soamenwerkn meuglik gemakt deur [matrix]", + "Sign In": "Anmeldn", + "Create Account": "Account anmoakn", + "Need help?": "Hulp nodig?", + "Chat with Riot Bot": "Chattn me Riot-robot", + "Explore rooms": "Gesprekkn ountdekkn", + "Room Directory": "Gesprekscataloog", + "Your Riot is misconfigured": "Je Riot is verkeerd geconfigureerd gewist", + "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Je Riot-configuroasje bevat oungeldigen JSON. Corrigeer ’t probleem en herload ’t blad.", + "The message from the parser is: %(message)s": "’t Bericht van de verwerker is: %(message)s", + "Invalid JSON": "Oungeldigen JSON" +} diff --git a/src/i18n/strings/zh_Hans.json b/src/i18n/strings/zh_Hans.json index 5d43d6045e..bdafbed28d 100644 --- a/src/i18n/strings/zh_Hans.json +++ b/src/i18n/strings/zh_Hans.json @@ -1,226 +1,46 @@ { - "Close": "关闭", - "Mute": "静音", - "Notifications": "通知", - "OK": "确定", - "Operation failed": "操作失败", - "%(appName)s via %(browserName)s on %(osName)s": "应用 %(appName)s 通过 %(osName)s 上的 %(browserName)s 浏览器运行", - "Safari and Opera work too.": "SafariOpera 均可运行。", - "A new version of Riot is available.": "Riot 有更新可用。", - "Add an email address above to configure email notifications": "请在上方输入电子邮件地址以接收邮件通知", - "Advanced notification settings": "通知高级设置", - "All messages": "全部消息", - "All messages (noisy)": "全部消息(高亮)", - "All Rooms": "全部聊天室", - "All notifications are currently disabled for all targets.": "当前所有目标的通知均已禁用。", - "An error occurred whilst saving your email notification preferences.": "保存邮件通知首选项设定时出现错误。", - "Call invitation": "语音邀请", - "Cancel": "取消", - "Cancel Sending": "取消发送", - "Can't update user notification settings": "不能更新用户通知设置", - "Changelog": "变更日志", - "Collecting app version information": "正在收集应用版本信息", - "Collecting logs": "正在收集日志", - "Couldn't find a matching Matrix room": "未找到符合的 Matrix 聊天室", + "%(appName)s via %(browserName)s on %(osName)s": "在 %(osName)s 下 %(browserName)s 浏览器中运行的 %(appName)s", "Custom Server Options": "自定义服务器选项", - "customServer_text": "你可以通过指定自定义服务器选项中的其他主服务器的 URL 来登录其他 Matrix 服务器。
    该选项允许你在 Riot 上使用其他主服务器上的帐号。

    你也可以自定义身份验证服务器,但你将不能通过邮件邀请其他用户,同样的,你也不能通过邮件被其他用户邀请。", - "delete the alias.": "删除别名。", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "确定要删除聊天室别名 %(alias)s 并将 %(name)s 从列表中删除吗?", - "Describe your problem here.": "在这里描述你的问题。", - "Directory": "聊天室目录", - "Dismiss": "设为已读", - "Download this file": "下载该文件", - "Collapse panel": "折叠面板", - "Direct Chat": "私聊", - "Enable audible notifications in web client": "在网页客户端启用音频通知", - "Enable desktop notifications": "启用桌面通知", - "Enable email notifications": "启用电子邮件通知", - "Enable notifications for this account": "为本账号启用通知", - "Enable them now": "现在启用", - "Enter keywords separated by a comma:": "输入以逗号间隔的关键字:", - "Error": "错误", - "Error saving email notification preferences": "保存电子邮件通知的首选项时出错", - "#example": "#例子", - "Expand panel": "展开面板", - "Failed to add tag %(tagName)s to room": "无法为聊天室新增标签 %(tagName)s", - "Failed to change settings": "变更设置失败", - "Failed to forget room %(errCode)s": "无法忘记聊天室 %(errCode)s", - "Failed to update keywords": "无法更新关键字", - "Failed to get protocol list from Home Server": "无法从主服务器取得协议列表", - "Failed to get public room list": "无法取得公开的聊天室列表", - "Failed to remove tag %(tagName)s from room": "移除聊天室标签 %(tagName)s 失败", - "Failed to send report: ": "无法发送报告: ", - "Failed to set direct chat tag": "无法设定私聊标签", - "Failed to set Direct Message status of room": "无法设置聊天室的私聊状态", - "Favourite": "收藏", - "Fetching third party location failed": "获取第三方位置失败", - "Files": "文件", - "Filter room names": "过滤聊天室名称", - "Forget": "忘记", - "Forward Message": "转发消息", - "Guests can join": "访客可以加入", - "Hide panel": "隐藏面板", - "(HTTP status %(httpStatus)s)": "(HTTP 状态 %(httpStatus)s)", - "I understand the risks and wish to continue": "我了解这些风险并愿意继续", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "为了诊断问题,来自客户端的活动记录会随着这个程序 bug 报告一并发出。如果你只想送出以上文字,请取消勾选:", - "Invite to this room": "邀请加入此聊天室", - "Keywords": "关键字", - "Leave": "离开", - "Login": "登录", - "Loading bug report module": "正在载入 bug 报告模块", - "Low Priority": "低优先级", - "Members": "成员", - "Mentions only": "只限提及", - "Messages containing my display name": "消息中含有我的显示名称", - "Messages containing keywords": "消息包含 关键字", - "Messages containing my user name": "消息中包含我的用户名", - "Messages in group chats": "群组聊天中的消息", - "Messages in one-to-one chats": "一对一聊天种的消息", - "Messages sent by bot": "由机器人发出的消息", - "more": "更多", - "No rooms to show": "无聊天室", - "Noisy": "吵闹", - "Notification targets": "通知目标", - "Notifications on the following keywords follow rules which can’t be displayed here:": "以下关键字依照规则将不会在此显示:", - "Notify for all other messages/rooms": "为所有其他消息/聊天室显示通知", - "Notify me for anything else": "所有消息都通知我", - "Off": "关闭", - "On": "打开", - "Permalink": "永久链接", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "请描述这个 bug,您做了什么动作?预期会发生的状况?以及实际发生的?", - "Please describe the bug and/or send logs.": "请描述这个 bug 和/或发送日志。", - "Please install Chrome or Firefox for the best experience.": "请安装 ChromeFirefox 来得到最佳体验。", - "powered by Matrix": "由 Matrix 提供", - "Quote": "引述", - "Reject": "拒绝", - "Remove %(name)s from the directory?": "从目录中移除 %(name)s 吗?", - "Remove": "移除", - "remove %(name)s from the directory.": "从目录中移除 %(name)s。", - "Remove from Directory": "从目录中移除", - "Report a bug": "报告一个 bug", - "Resend": "重新发送", - "Riot Desktop on %(platformName)s": "Riot 桌面版在 %(platformName)s", - "Riot does not know how to join a room on this network": "Riot 不知道如何在此网络中加入聊天室", - "Riot is not supported on mobile web. Install the app?": "Riot 不支持浏览器网页,要安装 app 吗?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot 使用了许多先进的浏览器功能,有些在你目前所用的浏览器上无法使用或仅为实验性的功能。", - "Room not found": "找不到聊天室", - "Search": "搜索", - "Search…": "搜索…", - "Search for a room": "搜索聊天室", - "Send": "发送", - "Send logs": "发送日志", - "Source URL": "源网址", - "Sorry, your browser is not able to run Riot.": "抱歉,您的浏览器 无法 运行 Riot.", - "The Home Server may be too old to support third party networks": "主服务器可能太老旧无法支持第三方网络", - "There are advanced notifications which are not shown here": "更多的通知并没有在此显示出来", - "The server may be unavailable or overloaded": "服务器可能无法使用或超过负载", - "This Room": "此聊天室", - "Unable to fetch notification target list": "无法获取通知目标列表", - "Unable to join network": "无法加入网络", - "Unable to look up room ID from server": "无法在服务器上找到聊天室 ID", - "Unavailable": "无法获得", - "Unhide Preview": "取消隐藏预览", + "Dismiss": "标记为已读", + "powered by Matrix": "由 Matrix 驱动", + "Riot Desktop on %(platformName)s": "在 %(platformName)s 上运行的 Riot 桌面版", + "Riot is not supported on mobile web. Install the app?": "Riot Web 端不支持移动端网页,你想安装 Riot APP 吗?", "Unknown device": "未知设备", - "unknown error code": "未知错误代码", - "Unnamed room": "未命名的聊天室", - "Update": "更新", - "Uploaded on %(date)s by %(user)s": "由 %(user)s 在 %(date)s 上传", - "Uploading report": "上传报告", - "View Decrypted Source": "查看解密的来源", - "View Source": "查看源码", - "What's New": "新鲜事", - "What's new?": "有什么新闻?", - "Waiting for response from server": "正在等待来自服务器的回应", - "When I'm invited to a room": "当我被邀请进入聊天室", - "World readable": "公开可读", - "You cannot delete this image. (%(code)s)": "您不能删除这个图片。(%(code)s)", - "You cannot delete this message. (%(code)s)": "您不能删除此消息。(%(code)s)", - "You are not receiving desktop notifications": "您将不会收到桌面通知", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "您也许不曾在其他 Riot 之外的客户端设置它们。在 Riot 下你无法调整他们但仍然可用", - "Sunday": "星期日", - "Monday": "星期一", - "Tuesday": "星期二", - "Wednesday": "星期三", - "Thursday": "星期四", - "Friday": "星期五", - "Saturday": "星期六", - "Today": "今天", - "Yesterday": "昨天", - "Warning": "警告", - "Checking for an update...": "正在检查更新…", - "Error encountered (%(errorDetail)s).": "遇到错误 (%(errorDetail)s)。", - "No update available.": "没有可用更新。", - "Downloading update...": "正在下载更新…", - "You need to be using HTTPS to place a screen-sharing call.": "你需要使用 HTTPS 来放置屏幕分享通话。", - "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "您目前的浏览器,应用程序的外观和感觉完全不正确,有些或全部功能可能无法使用。如果您仍想继续尝试,可以继续,但请自行负担其后果!", + "You need to be using HTTPS to place a screen-sharing call.": "您需要使用 HTTPS 以进行共享屏幕通话。", "Welcome to Riot.im": "欢迎来到 Riot.im", - "Decentralised, encrypted chat & collaboration powered by [matrix]": "去中心化,加密聊天 & 由 [matrix] 提供", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "去中心化,加密聊天 & 由 [matrix] 驱动", "Search the room directory": "搜索聊天室目录", "Chat with Riot Bot": "与 Riot 机器人聊天", - "Get started with some tips from Riot Bot!": "使用从 Riot 机器人学来的小窍门开始!", - "General discussion about Matrix and Riot": "关于 Matrix 与 Riot 的一般讨论", + "Get started with some tips from Riot Bot!": "从 Riot 机器人开始,学习使用 Riot 的小窍门吧!", + "General discussion about Matrix and Riot": "关于 Matrix 与 Riot 的综合讨论", "Discussion of all things Matrix!": "讨论所有关于 Matrix 的事情!", "Riot/Web & Desktop chat": "Riot/Web & 桌面聊天", - "Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk 聊天", - "Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk 聊天", + "Riot/iOS & matrix-ios-sdk chat": "关于 Riot/iOS 与 matrix-ios-sdk 的讨论", + "Riot/Android & matrix-android-sdk chat": "关于 Riot/Android 与 matrix-android-sdk 的讨论", "Matrix technical discussions": "Matrix 技术讨论", - "Running Matrix services": "正在运行 Matrix 服务", - "Community-run support for Synapse": "运行 Synapse 的社区支持", - "Admin support for Dendrite": "Dendrite 的管理员支持", - "Announcements about Synapse releases": "Synapse 的发布公告", - "Support for those using and running matrix-appservice-irc": "使用与执行 matrix-appservice-irc 的支持", - "Building services on Matrix": "正在 Matrix 上建立服务", - "Support for those using the Matrix spec": "使用 Matrix 规范的支持", + "Running Matrix services": "正在运行的 Matrix 服务", + "Community-run support for Synapse": "Synapse 支持", + "Admin support for Dendrite": "Dendrite 管理支持", + "Announcements about Synapse releases": "Synapse 发布与公告", + "Support for those using and running matrix-appservice-irc": "matrix-appservice-irc 使用与运维支持", + "Building services on Matrix": "在 Matrix 上建立的服务", + "Support for those using the Matrix spec": "Matrix 规范使用支持", "Design and implementation of E2E in Matrix": "在 Matrix 中 E2E 的设计与实现", "Implementing VR services with Matrix": "使用 Matrix 实现虚拟现实服务", "Implementing VoIP services with Matrix": "使用 Matrix 实现 VoIP 服务", - "Discussion of the Identity Service API": "识别服务 API 的讨论", - "Support for those using, running and writing other bridges": "那些使用、运行并撰写其他桥接应用的支持", - "Contributing code to Matrix and Riot": "贡献程序代码给 Matrix 与 Riot", - "Dev chat for the Riot/Web dev team": "Riot/Web 开发团队的开发聊天", - "Dev chat for the Dendrite dev team": "Dendrite 的开发团队的开发聊天", - "Co-ordination for Riot/Web translators": "Riot/Web 翻译者的协调区", + "Discussion of the Identity Service API": "关于身份认证服务 API 的讨论", + "Support for those using, running and writing other bridges": "使用、运行、撰写其他桥接服务的支持", + "Contributing code to Matrix and Riot": "为 Matrix 和 Riot 贡献代码", + "Dev chat for the Riot/Web dev team": "Riot/Web 开发团队的开发讨论", + "Dev chat for the Dendrite dev team": "Dendrite 的开发团队的开发讨论", "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Matrix 中已有许多聊天室,连接到已有的网络(Slack、IRC 与 Gitter 等)或独立的网络,请查看目录!", - "Failed to change password. Is your password correct?": "修改密码失败。确认原密码输入正确吗?", - "You have successfully set a password!": "您已成功设置密码!", - "You can now return to your account after signing out, and sign in on other devices.": "您可以在注销后回到您的账号,并在其他设备上登录。", - "Continue": "继续", - "Please set a password!": "请设置密码!", - "This will allow you to return to your account after signing out, and sign in on other devices.": "这让您可以在注销后回到您的账号,并在其他设备上登录。", - "You have successfully set a password and an email address!": "您已经成功设置了密码和电子邮件地址!", - "Remember, you can always set an email address in user settings if you change your mind.": "请记住,如果您改变想法,您永远可以在用户设置中设置电子邮件。", - "To return to your account in future you need to set a password": "要在未来回到您的账号,您需要 设置密码", - "Set Password": "设置密码", - "Couldn't load home page": "不能加载首页", - "Bug report sent": "发送DEBUG报告", - "Thank you!": "谢谢!", - "Developer Tools": "开发者工具", - "Failed to send custom event.": "发送自定义事件失败。", - "Filter results": "过滤结果", - "Send Custom Event": "发送自定义事件", - "Send Custom State Event": "发送自定义状态事件", - "You must specify an event type!": "你必须制定一个事件类型!", - "Event sent!": "事件已发出!", - "Event Type": "事件类型", - "Event Content": "事件内容", - "State Key": "状态密钥", - "Show message in desktop notification": "在桌面通知中显示信息", - "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "您可以使用自订的服务器选项,并指定不同的主服务器 URL 来登录其他的 Matrix 服务器。
    这让您可以在不同的服务器上以既有的 Matrix 帐号使用 Riot。

    您也可以设置一个自订的身份服务器,但您可能无法透过电子邮件地址来邀请用户,或是让别人透过电子邮件邀请您。", - "Toolbox": "工具箱", - "Back": "返回", - "Edit": "编辑", - "Send Account Data": "发送账户数据", - "Explore Account Data": "探索账户数据", - "Explore Room State": "探索聊天室状态", - "Unpin Message": "取消置顶消息", - "Pin Message": "置顶消息", - "Register": "注册", - "Rooms": "聊天室", - "Invite to this community": "邀请加入此社区", - "Add rooms to this community": "添加聊天室到此社区", - "Appear Offline": "似乎离线了", - "Away": "离开", - "Please install Chrome or Firefox for the best experience.": "请安装 ChromeFirefox 以获得最佳体验。", - "Safari and Opera work too.": "SafariOpera 也能工作。", - "Reply": "回复" + "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "你可以修改主服务器 URL 以登录其他的 Matrix 服务器。
    这样,你就可以使用你在其他 Matrix 服务器上的账号。

    你也可以修改身份认证服务器,但你可能因此无法使用电子邮件地址来邀请其他用户,或者被其他用户通过电子邮件邀请。", + "Co-ordination for Riot translators": "Riot 翻译人员的合作讨论", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "您也可以自定义身份服务器,但是您将不能用电子邮箱地址邀请他人或被邀请。", + "Sign In": "登入", + "Create Account": "创建帐号", + "Need help?": "需要帮助?", + "Explore rooms": "探索房间", + "Room Directory": "房间目录", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "您可以在自定义服务器选项中通过指定其他主服务器的 URL 来登录其他 Matrix 服务器。 这允许您在不同的主服务器上通过已有的 Matrix 帐户来使用 Riot 。" } diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index 7181278361..62c735168a 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -1,226 +1,54 @@ { - "Direct Chat": "私人聊天", - "Error": "錯誤", - "Failed to forget room %(errCode)s": "無法忘記聊天室 %(errCode)s", - "Favourite": "我的最愛", - "Search": "搜尋", - "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s 透過 %(browserName)s 在 %(osName)s", - "Safari and Opera work too.": "SafariOpera 也能使用。", - "Advanced notification settings": "進階通知設定", - "All messages": "所有訊息", - "All messages (noisy)": "所有訊息(吵鬧)", - "All Rooms": "所有的聊天室", - "Call invitation": "通話邀請", - "Cancel": "取消", - "Cancel Sending": "取消傳送", - "Can't update user notification settings": "無法更新使用者的通知設定", - "Changelog": "變更記錄", - "Close": "關閉", - "Collapse panel": "摺疊面板", - "Collecting logs": "收集記錄", - "Couldn't find a matching Matrix room": "不能找到符合 Matrix 的聊天室", + "%(appName)s via %(browserName)s on %(osName)s": "在 %(osName)s 的 %(browserName)s 上的 %(appName)s", "Custom Server Options": "自訂伺服器選項", - "delete the alias.": "刪除別名。", - "Describe your problem here.": "在此描述你的問題。", - "Directory": "目錄", - "Dismiss": "無視", - "Download this file": "下載這個檔案", - "Enable desktop notifications": "啟用桌面通知", - "Enable email notifications": "啟用電子郵件通知", - "Enable notifications for this account": "本帳號啟用通知", - "Enable them now": "現在啟用它們", - "#example": "#範例", - "Expand panel": "展開面板", - "Failed to change settings": "變更設定失敗", - "Failed to update keywords": "無法更新關鍵字", - "Members": "成員", - "Mentions only": "僅提及", - "Messages containing my display name": "訊息中有包含我的顯示名稱", - "Messages containing keywords": "訊息包含 關鍵字", - "Messages containing my user name": "訊息中有我的使用者名稱", - "Messages in group chats": "在群組聊天中的訊息", - "Messages in one-to-one chats": "在一對一聊天中的訊息", - "Messages sent by bot": "由機器人送出的訊息", - "more": "更多", - "Mute": "靜音", - "No rooms to show": "未顯示聊天室", - "Noisy": "吵鬧", - "Notifications": "通知", - "Off": "關閉", - "On": "開啟", - "Operation failed": "操作失敗", - "powered by Matrix": "由 Matrix 架設", - "Quote": "引用", - "Remove": "移除", - "Resend": "重新傳送", - "Room not found": "找不到聊天室", - "Search…": "搜尋…", - "Search for a room": "搜尋聊天室", - "Send": "傳送", - "Send logs": "傳送記錄", - "Source URL": "來源網址", - "This Room": "這個聊天室", - "Unable to join network": "無法加入網路", - "Unable to look up room ID from server": "無法從伺服器找到聊天室 ID", - "Unavailable": "無法取得", - "Unhide Preview": "取消隱藏預覽", + "Dismiss": "關閉", + "powered by Matrix": "由 Matrix 提供", "Unknown device": "未知裝置", - "unknown error code": "未知的錯誤代碼", - "Unnamed room": "未命名的聊天室", - "Update": "更新", - "Uploaded on %(date)s by %(user)s": "由 %(user)s 在 %(date)s 上傳", - "Uploading report": "上傳報告", - "View Decrypted Source": "檢視解密的來源", - "View Source": "檢視來源", - "What's New": "新鮮事", - "What's new?": "有什麼新聞?", - "Waiting for response from server": "正在等待來自伺服器的回應", - "When I'm invited to a room": "當我被邀請加入聊天室", - "You cannot delete this message. (%(code)s)": "你不能刪除這個訊息。(%(code)s)", - "Sunday": "星期日", - "Monday": "星期一", - "Tuesday": "星期二", - "Wednesday": "星期三", - "Thursday": "星期四", - "Friday": "星期五", - "Saturday": "星期六", - "Today": "今天", - "Yesterday": "昨天", - "OK": "確定", - "You need to be using HTTPS to place a screen-sharing call.": "你需要使用 HTTPS 來放置螢幕分享的通話。", - "A new version of Riot is available.": "Riot 釋出了新版本。", - "Add an email address above to configure email notifications": "在上面新增電子郵件以設定電子郵件通知", - "All notifications are currently disabled for all targets.": "目前所有的通知功能已停用。", - "An error occurred whilst saving your email notification preferences.": "在儲存你的電子郵件通知偏好時發生錯誤。", - "Collecting app version information": "收集應用程式版本資訊", - "Delete the room alias %(alias)s and remove %(name)s from the directory?": "刪除聊天室別名 %(alias)s 並從目錄移除 %(name)s?", - "Enable audible notifications in web client": "在網頁客戶端啟用音訊通知", - "Enter keywords separated by a comma:": "輸入以逗號隔開的關鍵字:", - "Error saving email notification preferences": "儲存電子郵件通知偏好設定時出錯", - "Failed to add tag %(tagName)s to room": "無法為聊天室新增標籤 %(tagName)s", - "Failed to get protocol list from Home Server": "無法從主機伺服器取得協定清單", - "Failed to get public room list": "無法取得公開的聊天室清單", - "Failed to remove tag %(tagName)s from room": "移除聊天室的標籤 %(tagName)s 失敗", - "Failed to send report: ": "無法傳送報告: ", - "Failed to set direct chat tag": "無法設定私人聊天標籤", - "Failed to set Direct Message status of room": "無法設定聊天室的私人訊息狀態", - "Fetching third party location failed": "抓取第三方位置失敗", - "Files": "檔案", - "Filter room names": "過濾聊天室名稱", - "Forget": "忘記", - "Forward Message": "轉寄訊息", - "Guests can join": "訪客可加入", - "Hide panel": "隱藏面板", - "I understand the risks and wish to continue": "我了解這些風險並願意繼續", - "Invite to this room": "邀請加入這個聊天室", - "Keywords": "關鍵字", - "Leave": "離開", - "Loading bug report module": "正在載入程式臭蟲報告模組", - "Low Priority": "低優先度", - "Notify for all other messages/rooms": "通知其他所有的訊息/聊天室", - "Notify me for anything else": "所有消息都通知我", - "Permalink": "永久連結", - "Please install Chrome or Firefox for the best experience.": "諘安裝 ChromeFirefox 來取得最佳體驗。", - "Reject": "拒絕", - "Remove %(name)s from the directory?": "自目錄中移除 %(name)s?", - "remove %(name)s from the directory.": "自目錄中移除 %(name)s。", - "Remove from Directory": "自目錄中移除", - "Report a bug": "回報程式臭蟲", - "Riot Desktop on %(platformName)s": "Riot 桌面版在 %(platformName)s", - "Riot does not know how to join a room on this network": "Riot 不知道如何在此網路中加入聊天室", - "Sorry, your browser is not able to run Riot.": "可惜,您的瀏覽器 無法 執行 Riot.", - "The Home Server may be too old to support third party networks": "主機伺服器可能太老舊無法支援第三方網路", - "The server may be unavailable or overloaded": "伺服器可能無法使用或是超過負載", - "Unable to fetch notification target list": "無法抓取通知的目標清單", - "customServer_text": "你可以使用自訂伺服器選項來登入其它的 Matrix 伺服器,只要在在主機伺服器網址上指定其網址資料。
    這可讓你透過已有的 Matrix 帳號在不同的主機伺服器上使用 Riot。

    你也可以設定自定的識別伺服器但你將無法透過電子郵件來邀請用戶或是以自己的電子郵件來接受別人的邀請。", - "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "為了診斷問題,來自客戶端的活動記錄會隨著這個程式臭蟲報告一起送出。如果你只想送出以上文字,請取消勾選:", - "Notification targets": "通知目標", - "Notifications on the following keywords follow rules which can’t be displayed here:": "以下關鍵字依照規則其通知將不會顯示在此:", - "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "請描述這個程式臭蟲,您做了什麼動作?您預期會發生什麼狀況?以及實際發生的狀況為何?", - "Please describe the bug and/or send logs.": "請描述這個程式臭蟲以及/或送出活動記錄。", + "You need to be using HTTPS to place a screen-sharing call.": "你需要使用 HTTPS 來撥打螢幕分享的通話。", + "Riot Desktop on %(platformName)s": "%(platformName)s 的 Riot 桌面版", "Riot is not supported on mobile web. Install the app?": "Riot 不支援行動版網頁,要安裝應用程式嗎?", - "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Roit 使用了許多先進的瀏覽器功能,有些在你目前所用的瀏覽器上無法使用或僅為實驗中的功能。", - "There are advanced notifications which are not shown here": "有些進階的通知並未在此顯示", - "World readable": "所有人可讀", - "You cannot delete this image. (%(code)s)": "你不能刪除這個圖片。(%(code)s)", - "You are not receiving desktop notifications": "你將不會收到桌面通知", - "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "你也許不曾在其它 Riot 之外的客戶端設定它們。在 Riot 底下你無法調整它們但其仍然可用", - "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "您目前的瀏覽器,其應用程式的外觀和感覺可能完全不正確,有些或全部功能可以無法使用。如果您仍想要繼續嘗試,可以繼續,但必須自行承擔後果!", - "(HTTP status %(httpStatus)s)": "(HTTP 狀態 %(httpStatus)s)", - "Login": "登入", - "Warning": "警告", - "Checking for an update...": "正在檢查更新...", - "Error encountered (%(errorDetail)s).": "遇到錯誤 (%(errorDetail)s)。", - "No update available.": "沒有可用的更新。", - "Downloading update...": "正在下䵧更新...", "Welcome to Riot.im": "歡迎來到 Riot.im", - "Decentralised, encrypted chat & collaboration powered by [matrix]": "去中心化、加密聊天 & 由 [matrix] 提供協作", + "Decentralised, encrypted chat & collaboration powered by [matrix]": "去中心化、保密的聊天與協作,由 [matrix] 提供", "Search the room directory": "搜尋聊天室目錄", "Chat with Riot Bot": "與 Riot 機器人聊天", - "Get started with some tips from Riot Bot!": "使用從 Riot 機器人來的一些訣竅開始!", - "General discussion about Matrix and Riot": "關於 Matrix 與 Riot 的一般討論", - "Discussion of all things Matrix!": "討論所有關於 Matrix 的事情!", - "Riot/Web & Desktop chat": "Riot/網路 & 桌面聊天", - "Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk 聊天", - "Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk 聊天", + "Get started with some tips from Riot Bot!": "從 Riot 機器人了解使用 Riot 的訣竅吧!", + "General discussion about Matrix and Riot": "Matrix 與 Riot 的一般討論", + "Discussion of all things Matrix!": "所有 Matrix 相關的一般討論", + "Riot/Web & Desktop chat": "Riot/Web 與桌面版的討論", + "Riot/iOS & matrix-ios-sdk chat": "Riot/iOS 與 matrix-ios-sdk 的討論", + "Riot/Android & matrix-android-sdk chat": "Riot/Android 與 matrix-android-sdk 的討論", "Matrix technical discussions": "Matrix 技術討論", - "Running Matrix services": "正在執行 Matrix 服務", - "Community-run support for Synapse": "Synapse 的社群支援", - "Admin support for Dendrite": "Dendrite 的管理員支援", - "Announcements about Synapse releases": "關於 Synapse 釋出的公告", - "Support for those using and running matrix-appservice-irc": "使用與執行 matrix-appservice-irc 的支援", - "Building services on Matrix": "正在 Matrix 上建立服務", - "Support for those using the Matrix spec": "那些使用 Matrix 規範的支援", - "Design and implementation of E2E in Matrix": "在 Matrix 中 E2E 的設計與實作", - "Implementing VR services with Matrix": "使用 Matrix 實作虛擬實境服務", - "Implementing VoIP services with Matrix": "使用 Matrix 實作 VoIP 服務", + "Running Matrix services": "關於 Matrix 服務營運", + "Community-run support for Synapse": "Synapse 社群支援聊天室", + "Admin support for Dendrite": "Dendrite 管理員支援聊天室", + "Announcements about Synapse releases": "Synapse 發行公告", + "Support for those using and running matrix-appservice-irc": "matrix-appservice-irc 使用者與營運的支援", + "Building services on Matrix": "關於在 Matrix 上開發服務", + "Support for those using the Matrix spec": "Matrix 規格使用者支援聊天室", + "Design and implementation of E2E in Matrix": "Matrix 中點對點加密的設計與實作討論", + "Implementing VR services with Matrix": "使用 Matrix 實作虛擬實境服務的討論", + "Implementing VoIP services with Matrix": "使用 Matrix 實作 VoIP 服務的討論", "Discussion of the Identity Service API": "識別服務 API 的討論", - "Support for those using, running and writing other bridges": "那些使用、執行與撰寫其他橋接的支援", - "Contributing code to Matrix and Riot": "為 Matrix 和 Riot 做出貢獻", - "Dev chat for the Riot/Web dev team": "Riot/Web 開發團隊的開發聊天", - "Dev chat for the Dendrite dev team": "Dendrite 開發團隊的開發聊天", - "Co-ordination for Riot/Web translators": "Riot/Web 翻譯者的協調區", - "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Matrix 中已有許多聊天室,連結到已有的網路(Slack、IRC 與 Gitter 等等)或是獨立的網路。看看目錄!", - "Failed to change password. Is your password correct?": "變更密碼失敗。您的密碼正確嗎?", - "You have successfully set a password!": "您已經成功設定密碼!", - "You can now return to your account after signing out, and sign in on other devices.": "您可以在登出後回到您的帳號,並在其他裝置上登入。", - "Continue": "繼續", - "Please set a password!": "請設定密碼!", - "This will allow you to return to your account after signing out, and sign in on other devices.": "這讓您可以在登入後回到您帳號,並在其他裝置上登入。", - "You have successfully set a password and an email address!": "您已經成功設定密碼與電子郵件地址!", - "Remember, you can always set an email address in user settings if you change your mind.": "記住,如果您改變心意了,您永遠可以在使用者設定中設定電子郵件地址。", - "To return to your account in future you need to set a password": "要在未來回到您的帳號,您需要 設定密碼", - "Set Password": "設定密碼", - "Couldn't load home page": "無法載入首頁", - "Bug report sent": "已傳送臭蟲回報", - "Thank you!": "感謝您!", - "Back": "返回", - "Developer Tools": "開發者工具", - "Failed to send custom event.": "傳送自訂式件失敗。", - "Send Custom Event": "傳送自訂事件", - "Send Custom State Event": "傳送自訂狀態事件", - "Explore Room State": "探索聊天室狀態", - "Event sent!": "事件已傳送!", - "Event Type": "事件類型", - "Event Content": "事件內容", - "State Key": "狀態金鑰", - "Filter results": "過濾結果", - "You must specify an event type!": "您必須指定事件類型!", - "Show message in desktop notification": "在桌面通知中顯示訊息", - "Pin Message": "釘選訊息", - "Unpin Message": "取消釘選訊息", + "Support for those using, running and writing other bridges": "使用、執行與撰寫其他橋接服務的支援聊天室", + "Contributing code to Matrix and Riot": "關於貢獻 Matrix 和 Riot", + "Dev chat for the Riot/Web dev team": "Riot/Web 開發團隊的開發聊天室", + "Dev chat for the Dendrite dev team": "Dendrite 開發團隊的開發聊天室", + "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Matrix 中已有許多聊天室,連結到已有的網路(Slack、IRC 與 Gitter 等等)或是獨立的網路。來看看聊天室目錄吧!", "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.
    This allows you to use Riot with an existing Matrix account on a different home server.

    You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "您可以使用自訂的伺服器選項,並指定不同的家伺服器 URL 來登入其他的 Matrix 伺服器。
    這讓您可以在不同的伺服器上以既有的 Matrix 帳號使用 Riot。

    您也可以設定一個自訂的識別伺服器,但您可能無法透過電子郵件地址來邀請使用者,或是讓別人透過電子郵件邀請您。", - "Edit": "編輯", - "Register": "註冊", - "Rooms": "聊天室", - "Invite to this community": "邀請至此社群", - "Add rooms to this community": "新增聊天室到此社群", - "Toolbox": "工具箱", - "Send Account Data": "傳送帳號資料", - "Explore Account Data": "探索帳號資料", - "Appear Offline": "顯示為離線", - "Away": "離開", - "Please install Chrome or Firefox for the best experience.": "請安裝 ChromeFirefox 以取得最佳體驗。", - "Safari and Opera work too.": "SafariOpera 也可以運作。", - "Reply": "回覆" + "Co-ordination for Riot translators": "Riot 翻譯的協作", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "您可以以使用自訂伺服器選項指定不同的家伺服器 URL 以登入其他 Matrix 伺服器。這讓您可以在不同的家伺服器上使用既有的 Matrix 帳號登入 Riot。", + "You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "您也可以設定自訂的身份識別伺服器,但您無法透過電子郵件地址邀請使用者,或是被邀請。", + "Sign In": "登入", + "Create Account": "建立帳號", + "Need help?": "需要協助?", + "Explore rooms": "探索聊天室", + "Room Directory": "聊天室目錄", + "Unexpected error preparing the app. See console for details.": "準備應用程式時發生未預期的錯誤。請見主控台以取得更多資訊。", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "無效的設定:只能指定 default_server_config、default_server_name 或 default_hs_url 其中之一。", + "Invalid configuration: no default server specified.": "無效設定:未指定預設的伺服器。", + "This installation of Riot seems to have an invalid server configuration. If you are the administrator, please correct the error below": "這個 Riot 安裝似乎有無效的伺服器設定。如果您是管理員,請在下方更正錯誤", + "Your Riot is misconfigured": "您的 Riot 沒有設定好", + "Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "您的 Riot 包含無效的 JSON。請修正問題並重新整理頁面。", + "The message from the parser is: %(message)s": "從解析器而來的訊息為:%(message)s", + "Invalid JSON": "無效的 JSON" } diff --git a/src/notifications/ContentRules.js b/src/notifications/ContentRules.js deleted file mode 100644 index 25a7bac96e..0000000000 --- a/src/notifications/ContentRules.js +++ /dev/null @@ -1,125 +0,0 @@ -/* -Copyright 2016 OpenMarket Ltd - -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. -*/ - -'use strict'; - -var PushRuleVectorState = require('./PushRuleVectorState'); - -module.exports = { - /** - * Extract the keyword rules from a list of rules, and parse them - * into a form which is useful for Vector's UI. - * - * Returns an object containing: - * rules: the primary list of keyword rules - * vectorState: a PushRuleVectorState indicating whether those rules are - * OFF/ON/LOUD - * externalRules: a list of other keyword rules, with states other than - * vectorState - */ - parseContentRules: function(rulesets) { - // first categorise the keyword rules in terms of their actions - var contentRules = this._categoriseContentRules(rulesets); - - // Decide which content rules to display in Vector UI. - // Vector displays a single global rule for a list of keywords - // whereas Matrix has a push rule per keyword. - // Vector can set the unique rule in ON, LOUD or OFF state. - // Matrix has enabled/disabled plus a combination of (highlight, sound) tweaks. - - // The code below determines which set of user's content push rules can be - // displayed by the vector UI. - // Push rules that does not fit, ie defined by another Matrix client, ends - // in externalRules. - // There is priority in the determination of which set will be the displayed one. - // The set with rules that have LOUD tweaks is the first choice. Then, the ones - // with ON tweaks (no tweaks). - - if (contentRules.loud.length) { - return { - vectorState: PushRuleVectorState.LOUD, - rules: contentRules.loud, - externalRules: [].concat(contentRules.loud_but_disabled, contentRules.on, contentRules.on_but_disabled, contentRules.other), - }; - } - else if (contentRules.loud_but_disabled.length) { - return { - vectorState: PushRuleVectorState.OFF, - rules: contentRules.loud_but_disabled, - externalRules: [].concat(contentRules.on, contentRules.on_but_disabled, contentRules.other), - }; - } - else if (contentRules.on.length) { - return { - vectorState: PushRuleVectorState.ON, - rules: contentRules.on, - externalRules: [].concat(contentRules.on_but_disabled, contentRules.other), - }; - } - else if (contentRules.on_but_disabled.length) { - return { - vectorState: PushRuleVectorState.OFF, - rules: contentRules.on_but_disabled, - externalRules: contentRules.other, - } - } else { - return { - vectorState: PushRuleVectorState.ON, - rules: [], - externalRules: contentRules.other, - } - } - }, - - _categoriseContentRules: function(rulesets) { - var contentRules = {on: [], on_but_disabled:[], loud: [], loud_but_disabled: [], other: []}; - for (var kind in rulesets.global) { - for (var i = 0; i < Object.keys(rulesets.global[kind]).length; ++i) { - var r = rulesets.global[kind][i]; - - // check it's not a default rule - if (r.rule_id[0] === '.' || kind !== 'content') { - continue; - } - - r.kind = kind; // is this needed? not sure - - switch (PushRuleVectorState.contentRuleVectorStateKind(r)) { - case PushRuleVectorState.ON: - if (r.enabled) { - contentRules.on.push(r); - } - else { - contentRules.on_but_disabled.push(r); - } - break; - case PushRuleVectorState.LOUD: - if (r.enabled) { - contentRules.loud.push(r); - } - else { - contentRules.loud_but_disabled.push(r); - } - break; - default: - contentRules.other.push(r); - break; - } - } - } - return contentRules; - }, -}; diff --git a/src/notifications/NotificationUtils.js b/src/notifications/NotificationUtils.js deleted file mode 100644 index c8aeb46854..0000000000 --- a/src/notifications/NotificationUtils.js +++ /dev/null @@ -1,89 +0,0 @@ -/* -Copyright 2016 OpenMarket Ltd - -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. -*/ - -'use strict'; - -module.exports = { - // Encodes a dictionary of { - // "notify": true/false, - // "sound": string or undefined, - // "highlight: true/false, - // } - // to a list of push actions. - encodeActions: function(action) { - var notify = action.notify; - var sound = action.sound; - var highlight = action.highlight; - if (notify) { - var actions = ["notify"]; - if (sound) { - actions.push({"set_tweak": "sound", "value": sound}); - } - if (highlight) { - actions.push({"set_tweak": "highlight"}); - } else { - actions.push({"set_tweak": "highlight", "value": false}); - } - return actions; - } else { - return ["dont_notify"]; - } - }, - - // Decode a list of actions to a dictionary of { - // "notify": true/false, - // "sound": string or undefined, - // "highlight: true/false, - // } - // If the actions couldn't be decoded then returns null. - decodeActions: function(actions) { - var notify = false; - var sound = null; - var highlight = false; - - for (var i = 0; i < actions.length; ++i) { - var action = actions[i]; - if (action === "notify") { - notify = true; - } else if (action === "dont_notify") { - notify = false; - } else if (typeof action === 'object') { - if (action.set_tweak === "sound") { - sound = action.value - } else if (action.set_tweak === "highlight") { - highlight = action.value; - } else { - // We don't understand this kind of tweak, so give up. - return null; - } - } else { - // We don't understand this kind of action, so give up. - return null; - } - } - - if (highlight === undefined) { - // If a highlight tweak is missing a value then it defaults to true. - highlight = true; - } - - var result = {notify: notify, highlight: highlight}; - if (sound !== null) { - result.sound = sound; - } - return result; - }, -}; diff --git a/src/notifications/PushRuleVectorState.js b/src/notifications/PushRuleVectorState.js deleted file mode 100644 index c838aa20ed..0000000000 --- a/src/notifications/PushRuleVectorState.js +++ /dev/null @@ -1,94 +0,0 @@ -/* -Copyright 2016 OpenMarket Ltd - -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. -*/ - -'use strict'; - -var StandardActions = require('./StandardActions'); -var NotificationUtils = require('./NotificationUtils'); - -var states = { - /** The push rule is disabled */ - OFF: "off", - - /** The user will receive push notification for this rule */ - ON: "on", - - /** The user will receive push notification for this rule with sound and - highlight if this is legitimate */ - LOUD: "loud", -}; - - -module.exports = { - /** - * Enum for state of a push rule as defined by the Vector UI. - * @readonly - * @enum {string} - */ - states: states, - - /** - * Convert a PushRuleVectorState to a list of actions - * - * @return [object] list of push-rule actions - */ - actionsFor: function(pushRuleVectorState) { - if (pushRuleVectorState === this.ON) { - return StandardActions.ACTION_NOTIFY; - } - else if (pushRuleVectorState === this.LOUD) { - return StandardActions.ACTION_HIGHLIGHT_DEFAULT_SOUND; - } - }, - - /** - * Convert a pushrule's actions to a PushRuleVectorState. - * - * Determines whether a content rule is in the PushRuleVectorState.ON - * category or in PushRuleVectorState.LOUD, regardless of its enabled - * state. Returns null if it does not match these categories. - */ - contentRuleVectorStateKind: function(rule) { - var decoded = NotificationUtils.decodeActions(rule.actions); - - if (!decoded) { - return null; - } - - // Count tweaks to determine if it is a ON or LOUD rule - var tweaks = 0; - if (decoded.sound) { - tweaks++; - } - if (decoded.highlight) { - tweaks++; - } - var stateKind = null; - switch (tweaks) { - case 0: - stateKind = this.ON; - break; - case 2: - stateKind = this.LOUD; - break; - } - return stateKind; - }, -}; - -for (var k in states) { - module.exports[k] = states[k]; -}; diff --git a/src/notifications/StandardActions.js b/src/notifications/StandardActions.js deleted file mode 100644 index 22a8f1db40..0000000000 --- a/src/notifications/StandardActions.js +++ /dev/null @@ -1,30 +0,0 @@ -/* -Copyright 2016 OpenMarket Ltd - -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. -*/ - -'use strict'; - -var NotificationUtils = require('./NotificationUtils'); - -var encodeActions = NotificationUtils.encodeActions; - -module.exports = { - ACTION_NOTIFY: encodeActions({notify: true}), - ACTION_NOTIFY_DEFAULT_SOUND: encodeActions({notify: true, sound: "default"}), - ACTION_NOTIFY_RING_SOUND: encodeActions({notify: true, sound: "ring"}), - ACTION_HIGHLIGHT_DEFAULT_SOUND: encodeActions({notify: true, sound: "default", highlight: true}), - ACTION_DONT_NOTIFY: encodeActions({notify: false}), - ACTION_DISABLED: null, -}; diff --git a/src/notifications/VectorPushRulesDefinitions.js b/src/notifications/VectorPushRulesDefinitions.js deleted file mode 100644 index 6f72164265..0000000000 --- a/src/notifications/VectorPushRulesDefinitions.js +++ /dev/null @@ -1,146 +0,0 @@ -/* -Copyright 2016 OpenMarket Ltd - -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. -*/ - -'use strict'; - -import { _td } from 'matrix-react-sdk/lib/languageHandler'; - -var StandardActions = require('./StandardActions'); -var PushRuleVectorState = require('./PushRuleVectorState'); - -class VectorPushRuleDefinition { - constructor(opts) { - this.kind = opts.kind; - this.description = opts.description; - this.vectorStateToActions = opts.vectorStateToActions; - } - - // Translate the rule actions and its enabled value into vector state - ruleToVectorState(rule) { - var enabled = false; - var actions = null; - if (rule) { - enabled = rule.enabled; - actions = rule.actions; - } - - for (var stateKey in PushRuleVectorState.states) { - var state = PushRuleVectorState.states[stateKey]; - var vectorStateToActions = this.vectorStateToActions[state]; - - if (!vectorStateToActions) { - // No defined actions means that this vector state expects a disabled (or absent) rule - if (!enabled) { - return state; - } - } else { - // The actions must match to the ones expected by vector state - if (enabled && JSON.stringify(rule.actions) === JSON.stringify(vectorStateToActions)) { - return state; - } - } - } - - console.error("Cannot translate rule actions into Vector rule state. Rule: " + - JSON.stringify(rule)); - return undefined; - } -}; - -/** - * The descriptions of rules managed by the Vector UI. - */ -module.exports = { - // Messages containing user's display name - ".m.rule.contains_display_name": new VectorPushRuleDefinition({ - kind: "override", - description: _td("Messages containing my display name"), // passed through _t() translation in src/components/views/settings/Notifications.js - vectorStateToActions: { // The actions for each vector state, or null to disable the rule. - on: StandardActions.ACTION_NOTIFY, - loud: StandardActions.ACTION_HIGHLIGHT_DEFAULT_SOUND, - off: StandardActions.ACTION_DISABLED - } - }), - - // Messages containing user's username (localpart/MXID) - ".m.rule.contains_user_name": new VectorPushRuleDefinition({ - kind: "override", - description: _td("Messages containing my user name"), // passed through _t() translation in src/components/views/settings/Notifications.js - vectorStateToActions: { // The actions for each vector state, or null to disable the rule. - on: StandardActions.ACTION_NOTIFY, - loud: StandardActions.ACTION_HIGHLIGHT_DEFAULT_SOUND, - off: StandardActions.ACTION_DISABLED - } - }), - - // Messages just sent to the user in a 1:1 room - ".m.rule.room_one_to_one": new VectorPushRuleDefinition({ - kind: "underride", - description: _td("Messages in one-to-one chats"), // passed through _t() translation in src/components/views/settings/Notifications.js - vectorStateToActions: { - on: StandardActions.ACTION_NOTIFY, - loud: StandardActions.ACTION_NOTIFY_DEFAULT_SOUND, - off: StandardActions.ACTION_DONT_NOTIFY - } - }), - - // Messages just sent to a group chat room - // 1:1 room messages are catched by the .m.rule.room_one_to_one rule if any defined - // By opposition, all other room messages are from group chat rooms. - ".m.rule.message": new VectorPushRuleDefinition({ - kind: "underride", - description: _td("Messages in group chats"), // passed through _t() translation in src/components/views/settings/Notifications.js - vectorStateToActions: { - on: StandardActions.ACTION_NOTIFY, - loud: StandardActions.ACTION_NOTIFY_DEFAULT_SOUND, - off: StandardActions.ACTION_DONT_NOTIFY - } - }), - - // Invitation for the user - ".m.rule.invite_for_me": new VectorPushRuleDefinition({ - kind: "underride", - description: _td("When I'm invited to a room"), // passed through _t() translation in src/components/views/settings/Notifications.js - vectorStateToActions: { - on: StandardActions.ACTION_NOTIFY, - loud: StandardActions.ACTION_NOTIFY_DEFAULT_SOUND, - off: StandardActions.ACTION_DISABLED - } - }), - - // Incoming call - ".m.rule.call": new VectorPushRuleDefinition({ - kind: "underride", - description: _td("Call invitation"), // passed through _t() translation in src/components/views/settings/Notifications.js - vectorStateToActions: { - on: StandardActions.ACTION_NOTIFY, - loud: StandardActions.ACTION_NOTIFY_RING_SOUND, - off: StandardActions.ACTION_DISABLED - } - }), - - // Notifications from bots - ".m.rule.suppress_notices": new VectorPushRuleDefinition({ - kind: "override", - description: _td("Messages sent by bot"), // passed through _t() translation in src/components/views/settings/Notifications.js - vectorStateToActions: { - // .m.rule.suppress_notices is a "negative" rule, we have to invert its enabled value for vector UI - on: StandardActions.ACTION_DISABLED, - loud: StandardActions.ACTION_NOTIFY_DEFAULT_SOUND, - off: StandardActions.ACTION_DONT_NOTIFY, - } - }), -}; diff --git a/src/notifications/index.js b/src/notifications/index.js deleted file mode 100644 index 8ed77e9d41..0000000000 --- a/src/notifications/index.js +++ /dev/null @@ -1,24 +0,0 @@ -/* -Copyright 2016 OpenMarket Ltd - -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. -*/ - -'use strict'; - -module.exports = { - NotificationUtils: require('./NotificationUtils'), - PushRuleVectorState: require('./PushRuleVectorState'), - VectorPushRulesDefinitions: require('./VectorPushRulesDefinitions'), - ContentRules: require('./ContentRules'), -}; diff --git a/src/skins/vector/css/_common.scss b/src/skins/vector/css/_common.scss deleted file mode 100644 index e81c228430..0000000000 --- a/src/skins/vector/css/_common.scss +++ /dev/null @@ -1,361 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2017 Vector Creations Ltd -Copyright 2017 New Vector Ltd - -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. -*/ - -html { - /* hack to stop overscroll bounce on OSX and iOS. - N.B. Breaks things when we have legitimate horizontal overscroll */ - height: 100%; - overflow: hidden; -} - -body { - font-family: $font-family; - font-size: 15px; - background-color: $primary-bg-color; - color: $primary-fg-color; - border: 0px; - margin: 0px; - /* This should render the fonts the same accross browsers */ - -webkit-font-smoothing: subpixel-antialiased; -} - -div.error, div.warning { - color: $warning-color; -} - -h2 { - color: $primary-fg-color; - font-weight: 400; - font-size: 18px; - margin-top: 16px; - margin-bottom: 16px; -} - -a:hover, -a:link, -a:visited { - color: $accent-color; -} - -input[type=text], input[type=password], textarea { - background-color: transparent; - color: $primary-fg-color; -} - -input[type=text].error, input[type=password].error { - border: 1px solid $warning-color; -} - -input[type=text]:focus, input[type=password]:focus, textarea:focus { - border: 1px solid $accent-color; - outline: none; - box-shadow: none; -} - -/* Required by Firefox */ -textarea { - font-family: $font-family; -} - -/* Prevent ugly dotted highlight around selected elements in Firefox */ -::-moz-focus-inner { - border: 0; -} - -/* applied to side-panels and messagepanel when in RoomSettings */ -.mx_fadable { - opacity: 1; - transition: opacity 0.2s ease-in-out; -} - -.mx_fadable.mx_fadable_faded { - opacity: 0.3; - pointer-events: none; -} - -/* XXX: critical hack to GeminiScrollbar to allow them to work in FF 42 and Chrome 48. - Stop the scrollbar view from pushing out the container's overall sizing, which causes - flexbox to adapt to the new size and cause the view to keep growing. - */ -.gm-scrollbar-container .gm-scroll-view { - position: absolute; -} - -/* Expand thumbs on hoverover */ -.gm-scrollbar { - border-radius: 5px ! important; -} -.gm-scrollbar.-vertical { - width: 6px; - transition: width 120ms ease-out ! important; -} -.gm-scrollbar.-vertical:hover, -.gm-scrollbar.-vertical:active { - width: 8px; - transition: width 120ms ease-out ! important; -} -.gm-scrollbar.-horizontal { - height: 6px; - transition: height 120ms ease-out ! important; -} -.gm-scrollbar.-horizontal:hover, -.gm-scrollbar.-horizontal:active { - height: 8px; - transition: height 120ms ease-out ! important; -} - -// These are magic constants which are excluded from tinting, to let themes -// (which only have CSS, unlike skins) tell the app what their non-tinted -// colourscheme is by inspecting the stylesheet DOM. -// -// They are not used for layout!! -#mx_theme_accentColor { - color: $accent-color; -} - -#mx_theme_secondaryAccentColor { - color: $secondary-accent-color; -} - -#mx_theme_tertiaryAccentColor { - color: $roomsublist-label-bg-color; -} - -.mx_Dialog_wrapper { - position: fixed; - z-index: 4000; - top: 0; - left: 0; - width: 100%; - height: 100%; - - display: flex; - align-items: center; - justify-content: center; -} - -/* Spinner Dialog overide */ -.mx_Dialog_wrapper.mx_Dialog_spinner .mx_Dialog { - width: auto; - border-radius: 8px; - padding: 0px; - box-shadow: none; -} - -/* View Source Dialog overide */ -.mx_Dialog_wrapper.mx_Dialog_viewsource .mx_Dialog { - padding-left: 10px; - padding-right: 10px; -} - -.mx_Dialog { - background-color: $primary-bg-color; - color: $light-fg-color; - z-index: 4010; - font-weight: 300; - font-size: 15px; - position: relative; - padding-left: 58px; - padding-bottom: 36px; - width: 60%; - max-width: 704px; - box-shadow: 0 1px 0 0 rgba(0, 0, 0, 0.2); - max-height: 80%; - overflow-y: auto; -} - -.mx_Dialog_background { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: $dialog-background-bg-color; - opacity: 0.8; -} - -.mx_Dialog_lightbox .mx_Dialog_background { - opacity: 0.85; - background-color: $lightbox-background-bg-color; -} - -.mx_Dialog_lightbox .mx_Dialog { - border-radius: 0px; - background-color: transparent; - width: 100%; - height: 100%; - max-width: 100%; - max-height: 100%; - pointer-events: none; -} - -.mx_Dialog_cancelButton { - position: absolute; - right: 11px; - top: 13px; - cursor: pointer; -} - -.mx_Dialog_cancelButton object { - pointer-events: none; -} - -.mx_Dialog_content { - margin: 24px 58px 68px 0; - font-size: 14px; - color: $primary-fg-color; - word-wrap: break-word; -} - -.mx_Dialog button, .mx_Dialog input[type="submit"] { - @mixin mx_DialogButton; - margin-left: 0px; - margin-right: 8px; - - // flip colours for the secondary ones - font-weight: 600; - border: 1px solid $accent-color ! important; - color: $accent-color; - background-color: $accent-fg-color; -} - -.mx_Dialog button:hover, .mx_Dialog input[type="submit"]:hover { - @mixin mx_DialogButton_hover; -} - -.mx_Dialog button:focus, .mx_Dialog input[type="submit"]:focus { - filter: brightness($focus-brightness); -} - -.mx_Dialog button.mx_Dialog_primary, .mx_Dialog input[type="submit"].mx_Dialog_primary { - color: $accent-fg-color; - background-color: $accent-color; -} - -.mx_Dialog button.danger, .mx_Dialog input[type="submit"].danger { - background-color: $warning-color; - border: solid 1px $warning-color; -} - -.mx_Dialog button:disabled, .mx_Dialog input[type="submit"]:disabled { - background-color: $light-fg-color; - border: solid 1px $light-fg-color; - opacity: 0.7; -} - -.mx_Dialog_title { - min-height: 16px; - padding-top: 40px; - font-weight: bold; - font-size: 22px; - line-height: 1.4; - color: $primary-fg-color; -} - -.mx_Dialog_title.danger { - color: $warning-color; -} - -.mx_TextInputDialog_label { - text-align: left; - padding-bottom: 12px; -} - -.mx_TextInputDialog_input { - font-size: 15px; - border-radius: 3px; - border: 1px solid $input-border-color; - padding: 9px; - color: $primary-fg-color; - background-color: $primary-bg-color; -} - -.mx_emojione { - height: 1em; - vertical-align: middle; -} - -::-moz-selection { - background-color: $accent-color; - color: $selection-fg-color; -} - -::selection { - background-color: $accent-color; - color: $selection-fg-color; -} - -.mx_textButton { - @mixin mx_DialogButton_small; -} - -.mx_textButton:hover { - @mixin mx_DialogButton_hover; -} - -.mx_button_row { - margin-top: 69px; -} - -.mx_Beta { - color: red; - margin-right: 10px; - position: relative; - top: -3px; - background-color: white; - padding: 0 4px; - border-radius: 3px; - border: 1px solid darkred; - cursor: help; - transition-duration: 200ms; - font-size: smaller; - filter: opacity(0.5); -} - -.mx_Beta:hover { - color: white; - border: 1px solid gray; - background-color: darkred; -} - -.mx_TintableSvgButton { - position: relative; - display: flex; - flex-direction: row; - justify-content: center; - align-content: center; -} - -.mx_TintableSvgButton object { - margin: 0; - padding: 0; - width: 100%; - height: 100%; - max-width: 100%; - max-height: 100%; -} - -.mx_TintableSvgButton span { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - opacity: 0; - cursor: pointer; -} diff --git a/src/skins/vector/css/_components.scss b/src/skins/vector/css/_components.scss deleted file mode 100644 index 837fe4532f..0000000000 --- a/src/skins/vector/css/_components.scss +++ /dev/null @@ -1,109 +0,0 @@ -// autogenerated by rethemendex.sh -@import "./_common.scss"; -@import "./matrix-react-sdk/structures/_ContextualMenu.scss"; -@import "./matrix-react-sdk/structures/_CreateRoom.scss"; -@import "./matrix-react-sdk/structures/_FilePanel.scss"; -@import "./matrix-react-sdk/structures/_GroupView.scss"; -@import "./matrix-react-sdk/structures/_LoginBox.scss"; -@import "./matrix-react-sdk/structures/_MatrixChat.scss"; -@import "./matrix-react-sdk/structures/_MyGroups.scss"; -@import "./matrix-react-sdk/structures/_NotificationPanel.scss"; -@import "./matrix-react-sdk/structures/_RoomStatusBar.scss"; -@import "./matrix-react-sdk/structures/_RoomView.scss"; -@import "./matrix-react-sdk/structures/_SearchBox.scss"; -@import "./matrix-react-sdk/structures/_TagPanel.scss"; -@import "./matrix-react-sdk/structures/_UploadBar.scss"; -@import "./matrix-react-sdk/structures/_UserSettings.scss"; -@import "./matrix-react-sdk/structures/login/_Login.scss"; -@import "./matrix-react-sdk/views/avatars/_BaseAvatar.scss"; -@import "./matrix-react-sdk/views/avatars/_MemberPresenceAvatar.scss"; -@import "./matrix-react-sdk/views/dialogs/_BugReportDialog.scss"; -@import "./matrix-react-sdk/views/dialogs/_ChatCreateOrReuseChatDialog.scss"; -@import "./matrix-react-sdk/views/dialogs/_ChatInviteDialog.scss"; -@import "./matrix-react-sdk/views/dialogs/_ConfirmUserActionDialog.scss"; -@import "./matrix-react-sdk/views/dialogs/_CreateGroupDialog.scss"; -@import "./matrix-react-sdk/views/dialogs/_CreateRoomDialog.scss"; -@import "./matrix-react-sdk/views/dialogs/_EncryptedEventDialog.scss"; -@import "./matrix-react-sdk/views/dialogs/_GroupAddressPicker.scss"; -@import "./matrix-react-sdk/views/dialogs/_QuestionDialog.scss"; -@import "./matrix-react-sdk/views/dialogs/_SetMxIdDialog.scss"; -@import "./matrix-react-sdk/views/dialogs/_UnknownDeviceDialog.scss"; -@import "./matrix-react-sdk/views/elements/_AccessibleButton.scss"; -@import "./matrix-react-sdk/views/elements/_AddressSelector.scss"; -@import "./matrix-react-sdk/views/elements/_AddressTile.scss"; -@import "./matrix-react-sdk/views/elements/_DirectorySearchBox.scss"; -@import "./matrix-react-sdk/views/elements/_Dropdown.scss"; -@import "./matrix-react-sdk/views/elements/_EditableItemList.scss"; -@import "./matrix-react-sdk/views/elements/_MemberEventListSummary.scss"; -@import "./matrix-react-sdk/views/elements/_ProgressBar.scss"; -@import "./matrix-react-sdk/views/elements/_Quote.scss"; -@import "./matrix-react-sdk/views/elements/_RichText.scss"; -@import "./matrix-react-sdk/views/elements/_RoleButton.scss"; -@import "./matrix-react-sdk/views/elements/_ToolTipButton.scss"; -@import "./matrix-react-sdk/views/groups/_GroupPublicityToggle.scss"; -@import "./matrix-react-sdk/views/groups/_GroupRoomList.scss"; -@import "./matrix-react-sdk/views/groups/_GroupUserSettings.scss"; -@import "./matrix-react-sdk/views/login/_InteractiveAuthEntryComponents.scss"; -@import "./matrix-react-sdk/views/login/_ServerConfig.scss"; -@import "./matrix-react-sdk/views/messages/_MEmoteBody.scss"; -@import "./matrix-react-sdk/views/messages/_MFileBody.scss"; -@import "./matrix-react-sdk/views/messages/_MImageBody.scss"; -@import "./matrix-react-sdk/views/messages/_MNoticeBody.scss"; -@import "./matrix-react-sdk/views/messages/_MTextBody.scss"; -@import "./matrix-react-sdk/views/messages/_RoomAvatarEvent.scss"; -@import "./matrix-react-sdk/views/messages/_TextualEvent.scss"; -@import "./matrix-react-sdk/views/messages/_UnknownBody.scss"; -@import "./matrix-react-sdk/views/rooms/_AppsDrawer.scss"; -@import "./matrix-react-sdk/views/rooms/_Autocomplete.scss"; -@import "./matrix-react-sdk/views/rooms/_EntityTile.scss"; -@import "./matrix-react-sdk/views/rooms/_EventTile.scss"; -@import "./matrix-react-sdk/views/rooms/_LinkPreviewWidget.scss"; -@import "./matrix-react-sdk/views/rooms/_MemberDeviceInfo.scss"; -@import "./matrix-react-sdk/views/rooms/_MemberInfo.scss"; -@import "./matrix-react-sdk/views/rooms/_MemberList.scss"; -@import "./matrix-react-sdk/views/rooms/_MessageComposer.scss"; -@import "./matrix-react-sdk/views/rooms/_PinnedEventTile.scss"; -@import "./matrix-react-sdk/views/rooms/_PinnedEventsPanel.scss"; -@import "./matrix-react-sdk/views/rooms/_PresenceLabel.scss"; -@import "./matrix-react-sdk/views/rooms/_QuotePreview.scss"; -@import "./matrix-react-sdk/views/rooms/_RoomHeader.scss"; -@import "./matrix-react-sdk/views/rooms/_RoomList.scss"; -@import "./matrix-react-sdk/views/rooms/_RoomPreviewBar.scss"; -@import "./matrix-react-sdk/views/rooms/_RoomSettings.scss"; -@import "./matrix-react-sdk/views/rooms/_RoomTile.scss"; -@import "./matrix-react-sdk/views/rooms/_SearchableEntityList.scss"; -@import "./matrix-react-sdk/views/rooms/_TopUnreadMessagesBar.scss"; -@import "./matrix-react-sdk/views/settings/_DevicesPanel.scss"; -@import "./matrix-react-sdk/views/settings/_IntegrationsManager.scss"; -@import "./matrix-react-sdk/views/voip/_CallView.scss"; -@import "./matrix-react-sdk/views/voip/_IncomingCallbox.scss"; -@import "./matrix-react-sdk/views/voip/_VideoView.scss"; -@import "./vector-web/_fonts.scss"; -@import "./vector-web/structures/_CompatibilityPage.scss"; -@import "./vector-web/structures/_HomePage.scss"; -@import "./vector-web/structures/_LeftPanel.scss"; -@import "./vector-web/structures/_RightPanel.scss"; -@import "./vector-web/structures/_RoomDirectory.scss"; -@import "./vector-web/structures/_RoomSubList.scss"; -@import "./vector-web/structures/_ViewSource.scss"; -@import "./vector-web/views/context_menus/_MessageContextMenu.scss"; -@import "./vector-web/views/context_menus/_PresenceContextMenuOption.scss"; -@import "./vector-web/views/context_menus/_RoomTileContextMenu.scss"; -@import "./vector-web/views/context_menus/_TagTileContextMenu.scss"; -@import "./vector-web/views/dialogs/_ChangelogDialog.scss"; -@import "./vector-web/views/dialogs/_DevtoolsDialog.scss"; -@import "./vector-web/views/dialogs/_SetEmailDialog.scss"; -@import "./vector-web/views/dialogs/_SetPasswordDialog.scss"; -@import "./vector-web/views/directory/_NetworkDropdown.scss"; -@import "./vector-web/views/elements/_ImageView.scss"; -@import "./vector-web/views/elements/_InlineSpinner.scss"; -@import "./vector-web/views/elements/_Spinner.scss"; -@import "./vector-web/views/elements/_SyntaxHighlight.scss"; -@import "./vector-web/views/globals/_MatrixToolbar.scss"; -@import "./vector-web/views/messages/_DateSeparator.scss"; -@import "./vector-web/views/messages/_MessageTimestamp.scss"; -@import "./vector-web/views/messages/_SenderProfile.scss"; -@import "./vector-web/views/rooms/_RoomDropTarget.scss"; -@import "./vector-web/views/rooms/_RoomTooltip.scss"; -@import "./vector-web/views/rooms/_SearchBar.scss"; -@import "./vector-web/views/settings/_Notifications.scss"; diff --git a/src/skins/vector/css/matrix-react-sdk/structures/_ContextualMenu.scss b/src/skins/vector/css/matrix-react-sdk/structures/_ContextualMenu.scss deleted file mode 100644 index a0191b92cf..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/structures/_ContextualMenu.scss +++ /dev/null @@ -1,160 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_ContextualMenu_wrapper { - position: fixed; - z-index: 2000; -} - -.mx_ContextualMenu_background { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - opacity: 1.0; - z-index: 2000; -} - -.mx_ContextualMenu { - border: solid 1px $menu-border-color; - border-radius: 4px; - background-color: $menu-bg-color; - color: $primary-fg-color; - position: absolute; - padding: 6px; - font-size: 14px; - z-index: 2001; -} - -.mx_ContextualMenu.mx_ContextualMenu_right { - right: 8px; -} - -.mx_ContextualMenu_chevron_right { - position: absolute; - right: -8px; - top: 0px; - width: 0; - height: 0; - border-top: 8px solid transparent; - border-left: 8px solid $menu-border-color; - border-bottom: 8px solid transparent; -} - -.mx_ContextualMenu_chevron_right:after { - content:''; - width: 0; - height: 0; - border-top: 7px solid transparent; - border-left: 7px solid $menu-bg-color; - border-bottom: 7px solid transparent; - position:absolute; - top: -7px; - right: 1px; -} - -.mx_ContextualMenu.mx_ContextualMenu_left { - left: 8px; -} - -.mx_ContextualMenu_chevron_left { - position: absolute; - left: -8px; - top: 0px; - width: 0; - height: 0; - border-top: 8px solid transparent; - border-right: 8px solid $menu-border-color; - border-bottom: 8px solid transparent; -} - -.mx_ContextualMenu_chevron_left:after{ - content:''; - width: 0; - height: 0; - border-top: 7px solid transparent; - border-right: 7px solid $menu-bg-color; - border-bottom: 7px solid transparent; - position:absolute; - top: -7px; - left: 1px; -} - -.mx_ContextualMenu.mx_ContextualMenu_top { - top: 8px; -} - -.mx_ContextualMenu_chevron_top { - position: absolute; - left: 0px; - top: -8px; - width: 0; - height: 0; - border-left: 8px solid transparent; - border-bottom: 8px solid $menu-border-color; - border-right: 8px solid transparent; -} - -.mx_ContextualMenu_chevron_top:after{ - content:''; - width: 0; - height: 0; - border-left: 7px solid transparent; - border-bottom: 7px solid $menu-bg-color; - border-right: 7px solid transparent; - position:absolute; - left: -7px; - top: 1px; -} - -.mx_ContextualMenu.mx_ContextualMenu_bottom { - bottom: 8px; -} - -.mx_ContextualMenu_chevron_bottom { - position: absolute; - left: 0px; - bottom: -8px; - width: 0; - height: 0; - border-left: 8px solid transparent; - border-top: 8px solid $menu-border-color; - border-right: 8px solid transparent; -} - -.mx_ContextualMenu_chevron_bottom:after{ - content:''; - width: 0; - height: 0; - border-left: 7px solid transparent; - border-top: 7px solid $menu-bg-color; - border-right: 7px solid transparent; - position:absolute; - left: -7px; - bottom: 1px; -} - -.mx_ContextualMenu_field { - padding: 3px 6px 3px 6px; - cursor: pointer; - white-space: nowrap; -} - -.mx_ContextualMenu_spinner { - display: block; - margin: 0 auto; -} diff --git a/src/skins/vector/css/matrix-react-sdk/structures/_CreateRoom.scss b/src/skins/vector/css/matrix-react-sdk/structures/_CreateRoom.scss deleted file mode 100644 index 2be193525e..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/structures/_CreateRoom.scss +++ /dev/null @@ -1,37 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_CreateRoom { - width: 960px; - margin-left: auto; - margin-right: auto; - color: $primary-fg-color; -} - -.mx_CreateRoom input, -.mx_CreateRoom textarea { - border-radius: 3px; - border: 1px solid $strong-input-border-color; - font-weight: 300; - font-size: 13px; - padding: 9px; - margin-top: 6px; -} - -.mx_CreateRoom_description { - width: 330px; -} - diff --git a/src/skins/vector/css/matrix-react-sdk/structures/_FilePanel.scss b/src/skins/vector/css/matrix-react-sdk/structures/_FilePanel.scss deleted file mode 100644 index 58e090645f..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/structures/_FilePanel.scss +++ /dev/null @@ -1,114 +0,0 @@ -/* -Copyright 2016 OpenMarket Ltd - -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. -*/ - -.mx_FilePanel { - order: 2; - - flex: 1 1 0; - - width: 100%; - - overflow-y: auto; -} - -.mx_FilePanel .mx_RoomView_messageListWrapper { - margin-right: 20px; -} - -.mx_FilePanel .mx_RoomView_MessageList h2 { - display: none; -} - -/* FIXME: rather than having EventTile's default CSS be for MessagePanel, - we should make EventTile a base CSS class and customise it specifically - for usage in {Message,File,Notification}Panel. */ - -.mx_FilePanel .mx_EventTile_avatar { - display: none; -} - -/* Overrides for the attachment body tiles */ - -.mx_FilePanel .mx_EventTile { - word-break: break-word; -} - -.mx_FilePanel .mx_EventTile .mx_MImageBody { - margin-right: 0px; -} - -.mx_FilePanel .mx_EventTile .mx_MImageBody_download { - display: flex; - font-size: 14px; - color: $event-timestamp-color; -} - -.mx_FilePanel .mx_EventTile .mx_MImageBody_downloadLink { - flex: 1 1 auto; - color: $light-fg-color; -} - -.mx_FilePanel .mx_EventTile .mx_MImageBody_size { - flex: 1 0 0; - font-size: 11px; - text-align: right; - white-space: nowrap; -} - -/* Overides for the sender details line */ - -.mx_FilePanel .mx_EventTile_senderDetails { - display: flex; - margin-top: -2px; -} - -.mx_FilePanel .mx_EventTile_senderDetailsLink { - text-decoration: none; -} - -.mx_FilePanel .mx_EventTile .mx_SenderProfile { - flex: 1 1 auto; - line-height: initial; - padding: 0px; - font-size: 11px; - opacity: 1.0; - color: $event-timestamp-color; -} - -.mx_FilePanel .mx_EventTile .mx_MessageTimestamp { - flex: 1 0 0; - text-align: right; - visibility: visible; - position: initial; - font-size: 11px; - opacity: 1.0; - color: $event-timestamp-color; -} - -/* Overrides for the wrappers around the body tile */ - -.mx_FilePanel .mx_EventTile_line { - margin-right: 0px; - padding-left: 0px; -} - -.mx_FilePanel .mx_EventTile:hover .mx_EventTile_line { - background-color: $primary-bg-color; -} - -.mx_FilePanel .mx_EventTile_selected .mx_EventTile_line { - padding-left: 0px; -} diff --git a/src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss b/src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss deleted file mode 100644 index 68b2ba298f..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss +++ /dev/null @@ -1,326 +0,0 @@ -/* -Copyright 2017 Vector Creations Ltd - -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. -*/ - -.mx_GroupView { - max-width: 960px; - width: 100%; - margin-left: auto; - margin-right: auto; - display: flex; - flex-direction: column; - overflow: hidden; -} - -.mx_GroupView_error { - margin: auto; -} - -.mx_GroupView_header { - max-width: 960px; - min-height: 70px; - align-items: center; - display: flex; - padding-bottom: 10px; -} - -.mx_GroupView_header_view { - border-bottom: 1px solid $primary-hairline-color; - padding-bottom: 0px; -} - -.mx_GroupView_header_avatar, .mx_GroupView_header_info { - display: table-cell; - vertical-align: middle; -} - -.mx_GroupHeader_button { - margin-left: 12px; - cursor: pointer; -} - -.mx_GroupHeader_button object { - // prevents clicks from being swallowed by svg in 'object' tag - pointer-events: none; -} - -.mx_GroupView_editable { - border-bottom: 1px solid $strong-input-border-color ! important; - min-width: 150px; - cursor: text; -} - -.mx_GroupView_editable:focus { - border-bottom: 1px solid $accent-color ! important; - outline: none; - box-shadow: none; -} - -.mx_GroupView_header_isUserMember .mx_GroupView_header_name:hover div:not(.mx_GroupView_editable) { - color: $accent-color; - cursor: pointer; -} - -.mx_GroupView_avatarPicker { - position: relative; -} - -.mx_GroupView_avatarPicker_edit { - position: absolute; - top: 50px; - left: 15px; -} - -.mx_GroupView_avatarPicker .mx_Spinner { - width: 48px; - height: 48px ! important; -} - -.mx_GroupView_header_leftCol { - flex: 1; - - overflow: hidden; -} - -.mx_GroupView_header_rightCol { - display: flex; - align-items: center; -} - -.mx_GroupView_textButton { - display: inline-block; -} - -.mx_GroupView_header_groupid { - font-weight: normal; - font-size: initial; - padding-left: 10px; -} - -.mx_GroupView_header_name { - vertical-align: middle; - width: 100%; - height: 31px; - overflow: hidden; - color: $primary-fg-color; - font-weight: bold; - font-size: 22px; - padding-left: 19px; - padding-right: 16px; - /* why isn't text-overflow working? */ - text-overflow: ellipsis; - border-bottom: 1px solid transparent; -} - -.mx_GroupView_header_shortDesc { - vertical-align: bottom; - float: left; - max-height: 42px; - color: $settings-grey-fg-color; - font-weight: 300; - font-size: 13px; - padding-left: 19px; - margin-right: 16px; - overflow: hidden; - text-overflow: ellipsis; - border-bottom: 1px solid transparent; -} - -.mx_GroupView_avatarPicker_label { - cursor: pointer; -} - -.mx_GroupView_cancelButton { - padding-left: 8px; -} - -.mx_GroupView_cancelButton img { - position: relative; - top: 5px; -} - -.mx_GroupView_body { - flex-grow: 1; -} - -.mx_GroupView_rooms { - flex-grow: 1; - display: flex; - flex-direction: column; - min-height: 200px; - user-select: none; -} - -.mx_GroupView h3 { - text-transform: uppercase; - color: $h3-color; - font-weight: 600; - font-size: 13px; - margin-bottom: 10px; -} - -.mx_GroupView_rooms_header .mx_AccessibleButton { - padding-left: 14px; - margin-bottom: 14px; - height: 24px; -} - -.mx_GroupView_group { - border-top: 1px solid $primary-hairline-color; -} - -.mx_GroupView_group_disabled { - opacity: 0.3; - pointer-events: none; -} - -.mx_GroupView_rooms_header_addRow_button { - display: inline-block; -} - -.mx_GroupView_rooms_header_addRow_button object { - pointer-events: none; -} - -.mx_GroupView_rooms_header_addRow_label { - display: inline-block; - vertical-align: top; - line-height: 24px; - padding-left: 28px; - color: $accent-color; -} - -.mx_GroupView_rooms .mx_RoomDetailList { - flex-grow: 1; - border-top: 1px solid $primary-hairline-color; - padding-top: 10px; - word-break: break-word; -} - -.mx_GroupView .mx_RoomView_messageListWrapper { - justify-content: flex-start; -} - -.mx_GroupView_membershipSection { - color: $greyed-fg-color; - margin-top: 10px; -} - -.mx_GroupView_membershipSubSection { - justify-content: space-between; - display: flex; -} - -.mx_GroupView_membershipSection_description { - /* To match textButton */ - line-height: 34px; -} - -.mx_GroupView_membershipSection_description .mx_BaseAvatar { - margin-right: 10px; -} - -.mx_GroupView_membershipSection .mx_GroupView_textButton { - margin-right: 0px; - margin-top: 0px; - margin-left: 8px; -} - -.mx_GroupView_memberSettings_toggle label { - cursor: pointer; - user-select: none; -} - -.mx_GroupView_memberSettings input { - margin-right: 6px; -} - -.mx_GroupView_featuredThings { - margin-top: 20px; -} - -.mx_GroupView_featuredThings_header { - font-weight: bold; - font-size: 120%; - margin-bottom: 20px; -} - -.mx_GroupView_featuredThings_category { - font-weight: bold; - font-size: 110%; - margin-top: 10px; -} - -.mx_GroupView_featuredThings_container { - display: flex; -} - -.mx_GroupView_featuredThings_addButton, -.mx_GroupView_featuredThing { - display: table-cell; - text-align: center; - - width: 100px; - margin: 0px 20px; -} - -.mx_GroupView_featuredThing { - position: relative; -} - -.mx_GroupView_featuredThing .mx_GroupView_featuredThing_deleteButton { - position: absolute; - top: -7px; - right: 11px; - opacity: 0.4; -} - -.mx_GroupView_featuredThing .mx_BaseAvatar { - /* To prevent misalignment with mx_TintableSvg (in addButton) */ - vertical-align: initial; -} - -.mx_GroupView_featuredThings_addButton object { - pointer-events: none; -} - -.mx_GroupView_featuredThing_name { - word-wrap: break-word; -} - -.mx_GroupView_uploadInput { - display: none; -} - -.mx_GroupView_body .gm-scroll-view > *{ - margin: 11px 50px 0px 68px; -} - -.mx_GroupView_groupDesc textarea { - width: 100%; - max-width: 100%; - height: 150px; -} - -.mx_GroupView_groupDesc_placeholder { - background-color: $info-plinth-bg-color; - color: $info-plinth-fg-color; - border-radius: 10px; - text-align: center; - - cursor: pointer; - padding: 100px 20px; - margin: 20px 0px; -} diff --git a/src/skins/vector/css/matrix-react-sdk/structures/_LoginBox.scss b/src/skins/vector/css/matrix-react-sdk/structures/_LoginBox.scss deleted file mode 100644 index 7f6199c451..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/structures/_LoginBox.scss +++ /dev/null @@ -1,47 +0,0 @@ -/* -Copyright 2017 OpenMarket Ltd - -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. -*/ - -.mx_LoginBox { - min-height: 24px; - height: unset !important; - padding-top: 13px !important; - padding-bottom: 14px !important; -} - -.mx_LoginBox_loginButton_wrapper { - text-align: center; - width: 100%; -} - -.mx_LoginBox_loginButton, -.mx_LoginBox_registerButton { - margin-top: 3px; - height: 40px; - border: 0px; - border-radius: 40px; - margin-left: 4px; - margin-right: 4px; - min-width: 80px; - - background-color: $accent-color; - color: $primary-bg-color; - - cursor: pointer; - - font-size: 15px; - padding: 0 11px; - word-break: break-word; -} diff --git a/src/skins/vector/css/matrix-react-sdk/structures/_MatrixChat.scss b/src/skins/vector/css/matrix-react-sdk/structures/_MatrixChat.scss deleted file mode 100644 index 156b1709fe..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/structures/_MatrixChat.scss +++ /dev/null @@ -1,104 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_MatrixChat_splash { - position: relative; - height: 100%; -} - -.mx_MatrixChat_splashButtons { - text-align: center; - width: 100%; - position: absolute; - bottom: 30px; -} - -.mx_MatrixChat_wrapper { - display: flex; - - flex-direction: column; - - width: 100%; - height: 100%; -} - -.mx_MatrixToolbar { - order: 1; - - height: 40px; -} - -.mx_MatrixChat_toolbarShowing { - height: auto; -} - -.mx_MatrixChat { - width: 100%; - height: 100%; - - display: flex; - - order: 2; - - flex: 1; -} - -.mx_MatrixChat .mx_LeftPanel { - order: 1; - - background-color: $secondary-accent-color; - - flex: 0 0 235px; -} - -.mx_MatrixChat .mx_LeftPanel.collapsed { - flex: 0 0 60px; -} - -.mx_MatrixChat .mx_MatrixChat_middlePanel { - order: 2; - - padding-left: 20px; - padding-right: 22px; - background-color: $primary-bg-color; - - flex: 1; - - /* Experimental fix for https://github.com/vector-im/vector-web/issues/947 - and https://github.com/vector-im/vector-web/issues/946. - Empirically this stops the MessagePanel's width exploding outwards when - gemini is in 'prevented' mode - */ - overflow-x: auto; - - display: flex; - - /* To fix https://github.com/vector-im/riot-web/issues/3298 where Safari - needed height 100% all the way down to the HomePage. Height does not - have to be auto, empirically. - */ - height: 100%; -} - -.mx_MatrixChat .mx_RightPanel { - order: 3; - - flex: 0 0 235px; -} - -.mx_MatrixChat .mx_RightPanel.collapsed { - flex: 0 0 122px; -} diff --git a/src/skins/vector/css/matrix-react-sdk/structures/_MyGroups.scss b/src/skins/vector/css/matrix-react-sdk/structures/_MyGroups.scss deleted file mode 100644 index 576ea12369..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/structures/_MyGroups.scss +++ /dev/null @@ -1,155 +0,0 @@ -/* -Copyright 2017 Vector Creations Ltd - -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. -*/ - -.mx_MyGroups { - max-width: 960px; - margin-left: auto; - margin-right: auto; - - display: flex; - flex-direction: column; -} - -.mx_MyGroups .mx_RoomHeader_simpleHeader { - margin-left: 0px; -} - -.mx_MyGroups_header { - /* Keep mid-point of create button aligned with icon in page header */ - margin-left: 2px; - display: flex; - flex-wrap: wrap; -} - -.mx_MyGroups_headerCard { - flex: 1 0 50%; - margin-bottom: 30px; - min-width: 400px; - display: flex; - align-items: center; -} - -.mx_MyGroups_headerCard .mx_MyGroups_headerCard_button { - margin-right: 13px; - height: 50px; -} - -.mx_MyGroups_headerCard_button object { - /* Otherwise the SVG object absorbs clicks and the button doesn't work */ - pointer-events: none; -} - -.mx_MyGroups_headerCard_header { - font-weight: bold; - margin-bottom: 10px; -} - -.mx_MyGroups_headerCard_content { - padding-right: 15px; -} - -/* Until the button is wired up */ -.mx_MyGroups_joinBox { - visibility: hidden; - - /* When joinBox wraps onto its own row, it should take up zero height so - that there isn't an awkward gap between MyGroups_createBox and - MyGroups_content. - */ - height: 0px; - margin: 0px; -} - -.mx_MyGroups_content { - margin-left: 2px; - - flex: 1 0 0; - - display: flex; - flex-direction: column; -} - -.mx_MyGroups_content h3 { - margin-bottom: 10px; -} - -.mx_MyGroups_placeholder { - background-color: $info-plinth-bg-color; - color: $info-plinth-fg-color; - line-height: 400px; - border-radius: 10px; - text-align: center; -} - -.mx_MyGroups_joinedGroups { - border-top: 1px solid $primary-hairline-color; - overflow-x: hidden; - - display: flex; - flex-direction: row; - flex-flow: wrap; - align-content: flex-start; -} - -.mx_MyGroups_joinedGroups .mx_GroupTile { - min-width: 300px; - max-width: 33%; - flex: 1 0 300px; - height: 75px; - margin: 10px 0px; - display: flex; - align-items: flex-start; - cursor: pointer; -} - -.mx_GroupTile_avatar { - cursor: grab, -webkit-grab; -} - -.mx_GroupTile_profile { - margin-left: 10px; - display: flex; - flex-direction: column; - justify-content: center; -} - -.mx_GroupTile_profile .mx_GroupTile_name, -.mx_GroupTile_profile .mx_GroupTile_groupId, -.mx_GroupTile_profile .mx_GroupTile_desc { - padding-right: 10px; -} - -.mx_GroupTile_profile .mx_GroupTile_name { - margin: 0px; - font-size: 15px; -} - -.mx_GroupTile_profile .mx_GroupTile_groupId { - font-size: 13px; -} - -.mx_GroupTile_profile .mx_GroupTile_desc { - display: -webkit-box; - -webkit-line-clamp: 2; - -webkit-box-orient: vertical; - font-size: 13px; - max-height: 36px; - overflow: hidden; -} - -.mx_GroupTile_profile .mx_GroupTile_groupId { - opacity: 0.7; -} diff --git a/src/skins/vector/css/matrix-react-sdk/structures/_NotificationPanel.scss b/src/skins/vector/css/matrix-react-sdk/structures/_NotificationPanel.scss deleted file mode 100644 index ef75678dce..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/structures/_NotificationPanel.scss +++ /dev/null @@ -1,100 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_NotificationPanel { - order: 2; - - flex: 1 1 0; - - width: 100%; - - overflow-y: auto; -} - -.mx_NotificationPanel .mx_RoomView_messageListWrapper { - margin-right: 20px; -} - -.mx_NotificationPanel .mx_RoomView_MessageList h2 { - margin-left: 0px; -} - -/* FIXME: rather than having EventTile's default CSS be for MessagePanel, - we should make EventTile a base CSS class and customise it specifically - for usage in {Message,File,Notification}Panel. */ - -.mx_NotificationPanel .mx_EventTile { - word-break: break-word; -} - -.mx_NotificationPanel .mx_EventTile_roomName { - font-weight: bold; - font-size: 14px; -} - -.mx_NotificationPanel .mx_EventTile_roomName a { - color: $primary-fg-color; -} - -.mx_NotificationPanel .mx_EventTile_avatar { - top: 8px; - left: 0px; -} - -.mx_NotificationPanel .mx_EventTile .mx_SenderProfile, -.mx_NotificationPanel .mx_EventTile .mx_MessageTimestamp { - color: $primary-fg-color; - font-size: 12px; - display: inline; - padding-left: 0px; -} - -.mx_NotificationPanel .mx_EventTile_senderDetails { - padding-left: 32px; - padding-top: 8px; - position: relative; -} - -.mx_NotificationPanel .mx_EventTile_roomName a, -.mx_NotificationPanel .mx_EventTile_senderDetails a { - text-decoration: none ! important; -} - -.mx_NotificationPanel .mx_EventTile .mx_MessageTimestamp { - visibility: visible; - position: initial; - display: inline; -} - -.mx_NotificationPanel .mx_EventTile_line { - margin-right: 0px; - padding-left: 32px; - padding-top: 0px; - padding-bottom: 0px; - padding-right: 0px; -} - -.mx_NotificationPanel .mx_EventTile:hover .mx_EventTile_line { - background-color: $primary-bg-color; -} - -.mx_NotificationPanel .mx_EventTile_selected .mx_EventTile_line { - padding-left: 0px; -} - -.mx_NotificationPanel .mx_EventTile_content { - margin-right: 0px; -} \ No newline at end of file diff --git a/src/skins/vector/css/matrix-react-sdk/structures/_RoomStatusBar.scss b/src/skins/vector/css/matrix-react-sdk/structures/_RoomStatusBar.scss deleted file mode 100644 index ca7431eac2..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/structures/_RoomStatusBar.scss +++ /dev/null @@ -1,181 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_RoomStatusBar { - margin-left: 65px; - min-height: 50px; -} - -/* position the indicator in the same place horizontally as .mx_EventTile_avatar. */ -.mx_RoomStatusBar_indicator { - padding-left: 17px; - padding-right: 12px; - margin-left: -73px; - margin-top: 15px; - float: left; - width: 24px; - text-align: center; -} - -.mx_RoomStatusBar_callBar { - height: 50px; - line-height: 50px; -} - -.mx_RoomStatusBar_placeholderIndicator span { - color: $primary-fg-color; - opacity: 0.5; - position: relative; - top: -4px; -/* - animation-duration: 1s; - animation-name: bounce; - animation-direction: alternate; - animation-iteration-count: infinite; -*/ -} - -.mx_RoomStatusBar_placeholderIndicator span:nth-child(1) { - animation-delay: 0.3s; -} -.mx_RoomStatusBar_placeholderIndicator span:nth-child(2) { - animation-delay: 0.6s; -} -.mx_RoomStatusBar_placeholderIndicator span:nth-child(3) { - animation-delay: 0.9s; -} - -@keyframes bounce { - from { - opacity: 0.5; - top: 0; - } - - to { - opacity: 0.2; - top: -3px; - } -} - -.mx_RoomStatusBar_typingIndicatorAvatars { - width: 52px; - margin-top: -1px; - text-align: left; -} - -.mx_RoomStatusBar_typingIndicatorAvatars .mx_BaseAvatar_image { - margin-right: -12px; - border: 1px solid $primary-bg-color; -} - -.mx_RoomStatusBar_typingIndicatorAvatars .mx_BaseAvatar_initial { - padding-left: 1px; - padding-top: 1px; -} - -.mx_RoomStatusBar_typingIndicatorRemaining { - display: inline-block; - color: #acacac; - background-color: #ddd; - border: 1px solid $primary-bg-color; - border-radius: 40px; - width: 24px; - height: 24px; - line-height: 24px; - font-size: 0.8em; - vertical-align: top; - text-align: center; - position: absolute; -} - -.mx_RoomStatusBar_scrollDownIndicator { - cursor: pointer; - padding-left: 1px; -} - -.mx_RoomStatusBar_unreadMessagesBar { - padding-top: 10px; - color: $warning-color; - cursor: pointer; -} - -.mx_RoomStatusBar_connectionLostBar { - margin-top: 19px; - min-height: 58px; -} - -.mx_RoomStatusBar_connectionLostBar img { - padding-left: 10px; - padding-right: 22px; - vertical-align: middle; - float: left; -} - -.mx_RoomStatusBar_connectionLostBar_title { - color: $warning-color; -} - -.mx_RoomStatusBar_connectionLostBar_desc { - color: $primary-fg-color; - font-size: 13px; - opacity: 0.5; -} - -.mx_RoomStatusBar_resend_link { - color: $primary-fg-color ! important; - text-decoration: underline ! important; - cursor: pointer; -} - -.mx_RoomStatusBar_typingBar { - height: 50px; - line-height: 50px; - - color: $primary-fg-color; - opacity: 0.5; - overflow-y: hidden; - display: block; -} - -.mx_RoomStatusBar_isAlone { - height: 50px; - line-height: 50px; - - color: $primary-fg-color; - opacity: 0.5; - overflow-y: hidden; - display: block; -} - -.mx_MatrixChat_useCompactLayout { - .mx_RoomStatusBar { - min-height: 40px; - } - - .mx_RoomStatusBar_indicator { - margin-top: 10px; - } - - .mx_RoomStatusBar_callBar { - height: 40px; - line-height: 40px; - } - - .mx_RoomStatusBar_typingBar { - height: 40px; - line-height: 40px; - } -} diff --git a/src/skins/vector/css/matrix-react-sdk/structures/_RoomView.scss b/src/skins/vector/css/matrix-react-sdk/structures/_RoomView.scss deleted file mode 100644 index 7944d01dc0..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/structures/_RoomView.scss +++ /dev/null @@ -1,267 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_RoomView { - word-wrap: break-word; - position: relative; - - display: flex; - width: 100%; - - flex-direction: column; -} - -.mx_RoomView .mx_RoomHeader { - order: 1; - - flex: 0 0 70px; -} - -.mx_RoomView_fileDropTarget { - min-width: 0px; - max-width: 960px; - width: 100%; - font-size: 18px; - text-align: center; - - pointer-events: none; - - padding-left: 12px; - padding-right: 12px; - margin-left: -12px; - - border-top-left-radius: 10px; - border-top-right-radius: 10px; - - background-color: $droptarget-bg-color; - border: 2px #e1dddd solid; - border-bottom: none; - position: absolute; - top: 70px; - bottom: 0px; - z-index: 3000; -} - -.mx_RoomView_fileDropTargetLabel { - top: 50%; - width: 100%; - margin-top: -50px; - position: absolute; -} - -.mx_RoomView_auxPanel { - order: 2; - - min-width: 0px; - max-width: 960px; - width: 100%; - margin: 0px auto; - - overflow: auto; - border-bottom: 1px solid $primary-hairline-color; - - flex: 0 0 auto; -} - -.mx_RoomView_auxPanel_apps { - max-width: 1920px ! important; -} - - -.mx_RoomView_body { - order: 3; - flex: 1 1 0; - flex-direction: column; - display: flex; -} - -.mx_RoomView_body .mx_RoomView_topUnreadMessagesBar { - order: 1; -} - -.mx_RoomView_body .mx_RoomView_messagePanel { - order: 2; -} - -.mx_RoomView_body .mx_RoomView_statusArea { - order: 3; -} - -.mx_RoomView_body .mx_MessageComposer { - order: 4; -} - -.mx_RoomView_messagePanel { - width: 100%; - overflow-y: auto; -} - -.mx_RoomView_messageListWrapper { - max-width: 960px; - margin: auto; - - min-height: 100%; - - display: flex; - - flex-direction: column; - - justify-content: flex-end; -} - -.mx_RoomView_searchResultsPanel .mx_RoomView_messageListWrapper { - justify-content: flex-start; -} - -.mx_RoomView_empty { - flex: 1 1 auto; - font-size: 13px; - padding-left: 3em; - padding-right: 3em; - margin-right: 20px; - margin-top: 33%; - text-align: center; -} - -.mx_RoomView_MessageList { - width: 100%; - list-style-type: none; - padding: 0px; -} - -.mx_RoomView_MessageList li { - clear: both; -} - -li.mx_RoomView_myReadMarker_container { - height: 0px; - margin: 0px; - padding: 0px; - border: 0px; -} - -hr.mx_RoomView_myReadMarker { - border-top: solid 1px $accent-color; - border-bottom: solid 1px $accent-color; - margin-top: 0px; - position: relative; - top: -1px; - z-index: 1; -} - -.mx_RoomView_statusArea { - width: 100%; - flex: 0 0 auto; - - max-height: 0px; - background-color: $primary-bg-color; - z-index: 1000; - overflow: hidden; - - -webkit-transition: all .2s ease-out; - -moz-transition: all .2s ease-out; - -ms-transition: all .2s ease-out; - -o-transition: all .2s ease-out; -} - -.mx_RoomView_statusArea_expanded { - max-height: 100px; -} - -.mx_RoomView_statusAreaBox { - max-width: 960px; - margin: auto; - min-height: 50px; -} - -.mx_RoomView_statusAreaBox_line { - margin-left: 65px; - border-top: 1px solid $primary-hairline-color; - height: 1px; -} - -.mx_RoomView_callStatusBar .mx_UploadBar_uploadProgressInner { - background-color: $primary-bg-color; -} - -.mx_RoomView_callStatusBar .mx_UploadBar_uploadFilename { - color: $accent-fg-color; - opacity: 1.0; -} - -.mx_RoomView_inCall .mx_RoomView_statusAreaBox_line { - margin-top: 2px; - border: none; - height: 0px; -} - -.mx_RoomView_inCall .mx_MessageComposer_wrapper { - border-top: 2px hidden; - padding-top: 1px; -} - -.mx_RoomView_inCall .mx_RoomView_statusAreaBox { - background-color: $accent-color; - color: $accent-fg-color; - position: relative; -} - -.mx_RoomView_voipChevron { - position: absolute; - bottom: -11px; - right: 11px; -} - -.mx_RoomView_voipButton { - float: right; - margin-right: 13px; - margin-top: 10px; - cursor: pointer; -} - -.mx_RoomView_voipButton object { - pointer-events: none; -} - -.mx_RoomView .mx_MessageComposer { - width: 100%; - flex: 0 0 auto; - margin-right: 2px; -} - -.mx_RoomView_ongoingConfCallNotification { - width: 100%; - text-align: center; - background-color: $warning-color; - color: $accent-fg-color; - font-weight: bold; - padding: 6px 0; - cursor: pointer; -} - -.mx_RoomView_ongoingConfCallNotification a { - color: $accent-fg-color ! important; -} - -.mx_MatrixChat_useCompactLayout { - .mx_RoomView_MessageList { - margin-bottom: 4px; - } - - .mx_RoomView_statusAreaBox { - min-height: 42px; - } -} diff --git a/src/skins/vector/css/matrix-react-sdk/structures/_SearchBox.scss b/src/skins/vector/css/matrix-react-sdk/structures/_SearchBox.scss deleted file mode 100644 index 6f08fd47b2..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/structures/_SearchBox.scss +++ /dev/null @@ -1,68 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_SearchBox { - height: 24px; - margin-left: 16px; - margin-right: 16px; - padding-top: 24px; - padding-bottom: 22px; - - border-bottom: 1px solid $panel-divider-color; - - display: flex; -} - -.mx_SearchBox_searchButton { - margin-right: 10px; - margin-top: 5px; - pointer-events: none; -} - -.mx_SearchBox_closeButton { - cursor: pointer; - margin-top: -5px; -} - -.mx_SearchBox_search { - flex: 1 1 auto; - width: 0px; - font-family: $font-family; - font-size: 12px; - margin-top: -2px; - height: 24px; - border: 0px ! important; - /* border-bottom: 1px solid rgba(0, 0, 0, 0.1) ! important; */ - border: 0px; -} - -.mx_SearchBox_minimise, -.mx_SearchBox_maximise { - margin-top: 3px; - cursor: pointer; -} - -.mx_SearchBox_minimise { - margin-left: 10px; -} - -.mx_SearchBox_maximise { - margin-left: 9px; -} - -.mx_SearchBox object { - pointer-events: none; -} diff --git a/src/skins/vector/css/matrix-react-sdk/structures/_TagPanel.scss b/src/skins/vector/css/matrix-react-sdk/structures/_TagPanel.scss deleted file mode 100644 index 31209bae4b..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/structures/_TagPanel.scss +++ /dev/null @@ -1,97 +0,0 @@ -/* -Copyright 2017 New Vector Ltd. - -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. -*/ - -.mx_TagPanel { - flex: 0 0 60px; - background-color: $tertiary-accent-color; - cursor: pointer; - - display: flex; - flex-direction: column; - align-items: center; - justify-content: space-between; -} - -.mx_TagPanel .mx_TagPanel_tagTileContainer { - display: flex; - flex-direction: column; - align-items: center; - padding-top: 65px; - - flex-grow: 1; -} - -.mx_TagPanel .mx_TagTile { - padding: 6px 3px; - opacity: 0.5; - position: relative; -} -.mx_TagPanel .mx_TagTile:focus, -.mx_TagPanel .mx_TagTile:hover, -.mx_TagPanel .mx_TagTile.mx_TagTile_selected { - opacity: 1; -} - -.mx_TagPanel .mx_TagTile.mx_TagTile_selected { - /* To offset border of mx_TagTile_avatar */ - padding: 3px 0px; -} - -.mx_TagPanel .mx_TagTile.mx_TagTile_selected .mx_TagTile_avatar { - border: 3px solid $accent-color; - border-radius: 60px; -} - -.mx_TagPanel .mx_TagTile.mx_AccessibleButton:focus { - filter: none; -} - -.mx_TagTile_tooltip { - position: relative; - top: -30px; - left: 5px; -} - -.mx_TagTile_context_button { - min-width: 15px; - height: 15px; - position: absolute; - right: -5px; - top: 1px; - border-radius: 8px; - background-color: $neutral-badge-color; - color: #ffffff; - font-weight: 600; - font-size: 10px; - text-align: center; - padding-top: 1px; - padding-left: 4px; - padding-right: 4px; -} - -.mx_TagPanel_createGroupButton { - opacity: 0.5; - margin-bottom: 17px; - height: 25px; -} - -.mx_TagPanel_createGroupButton:hover { - opacity: 1; -} - -.mx_TagPanel_createGroupButton object { - pointer-events: none; -} diff --git a/src/skins/vector/css/matrix-react-sdk/structures/_UploadBar.scss b/src/skins/vector/css/matrix-react-sdk/structures/_UploadBar.scss deleted file mode 100644 index d76c81668c..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/structures/_UploadBar.scss +++ /dev/null @@ -1,61 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_UploadBar { - position: relative; -} - -.mx_UploadBar_uploadProgressOuter { - height: 5px; - margin-left: 63px; - margin-top: -1px; - padding-bottom: 5px; -} - -.mx_UploadBar_uploadProgressInner { - background-color: $accent-color; - height: 5px; -} - -.mx_UploadBar_uploadFilename { - margin-top: 5px; - margin-left: 65px; - opacity: 0.5; - color: $primary-fg-color; -} - -.mx_UploadBar_uploadIcon { - float: left; - margin-top: 5px; - margin-left: 14px; -} - -.mx_UploadBar_uploadCancel { - float: right; - margin-top: 5px; - margin-right: 10px; - position: relative; - opacity: 0.6; - cursor: pointer; - z-index: 1; -} - -.mx_UploadBar_uploadBytes { - float: right; - margin-top: 5px; - margin-right: 30px; - color: $accent-color; -} diff --git a/src/skins/vector/css/matrix-react-sdk/structures/_UserSettings.scss b/src/skins/vector/css/matrix-react-sdk/structures/_UserSettings.scss deleted file mode 100644 index f6341dd6cd..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/structures/_UserSettings.scss +++ /dev/null @@ -1,253 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2017 Vector Creations Ltd - -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. -*/ - -.mx_UserSettings { - max-width: 960px; - width: 100%; - margin-left: auto; - margin-right: auto; - - display: flex; - flex-direction: column; -} - -.mx_UserSettings .mx_RoomHeader { - order: 1; - - flex: 0 0 70px; -} - -.mx_UserSettings_body { - order: 2; - - flex: 1 1 0; - - margin-top: -20px; - overflow-y: auto; -} - -.mx_UserSettings h3 { - clear: both; - margin-left: 63px; - text-transform: uppercase; - color: $h3-color; - font-weight: 600; - font-size: 13px; - margin-top: 26px; - margin-bottom: 10px; -} - -.mx_UserSettings_section h3 { - margin-left: 0px; -} - -.mx_UserSettings_spinner { - display: inline-block; - vertical-align: middle; - margin-right: 12px; - width: 32px; - height: 32px; -} - -.mx_UserSettings_button { - @mixin mx_DialogButton; - display: inline; - margin: auto; -} - -.mx_UserSettings_button:hover { - @mixin mx_DialogButton_hover; -} - -.mx_UserSettings_button.danger { - background-color: $warning-color; -} - -.mx_UserSettings_section { - margin-left: 63px; - margin-top: 28px; - margin-bottom: 28px; -} - -.mx_UserSettings_cryptoSection ul { - display: table; -} -.mx_UserSettings_cryptoSection li { - display: table-row; -} -.mx_UserSettings_cryptoSection label, -.mx_UserSettings_cryptoSection span { - display: table-cell; - padding-right: 1em; -} - -.mx_UserSettings_passwordWarning { - /* To move the "Sign out" button out of the way */ - clear: both; - color: $warning-color; - margin-bottom: 5px; -} - -.mx_UserSettings_importExportButtons { - padding-top: 10px; - padding-left: 40px; -} - -.mx_UserSettings_importExportButtons .mx_UserSettings_button { - margin-right: 1em; -} - -.mx_UserSettings_toggle input { - width: 16px; - margin-right: 8px; - margin-bottom: 8px; -} - -.mx_UserSettings_toggle label { - padding-bottom: 21px; -} - -.mx_UserSettings_accountTable -.mx_UserSettings_notifTable -{ - display: table; -} - -.mx_UserSettings_notifTable .mx_Spinner { - position: absolute; -} - -.mx_UserSettings_language { - width: 200px; -} - -.mx_UserSettings_webRtcDevices_dropdown{ - width: 200px; -} - -.mx_UserSettings_profileTable -{ - display: table; - float: left; -} - -.mx_UserSettings_profileTableRow -{ - display: table-row; -} - -.mx_UserSettings_profileLabelCell -{ - padding-bottom: 21px; - display: table-cell; - font-weight: bold; - padding-right: 24px; -} - -.mx_UserSettings_profileInputCell { - display: table-cell; - padding-bottom: 21px; - width: 240px; -} - -.mx_UserSettings_profileInputCell input, -.mx_UserSettings_profileInputCell .mx_EditableText -{ - display: inline-block; - border: 0px; - border-bottom: 1px solid $input-underline-color; - padding: 0px; - width: 240px; - color: $input-fg-color; - font-family: 'Open Sans', Helvetica, Arial, Sans-Serif; - font-size: 16px; -} - -.mx_UserSettings_threepidButton { - display: table-cell; - padding-left: 0.5em; - position: relative; - cursor: pointer; -} - -.mx_UserSettings_phoneSection { - display:table; -} - -.mx_UserSettings_phoneCountry { - width: 70px; - display: table-cell; -} - -input.mx_UserSettings_phoneNumberField { - margin-left: 3px; - width: 172px; - border: 1px solid transparent; -} - -.mx_UserSettings_changePasswordButton { - float: right; - margin-right: 32px; - margin-left: 32px; -} - -.mx_UserSettings_logout { - float: right; - margin-right: 32px; - margin-left: 32px; -} - -.mx_UserSettings_avatarPicker { - margin-left: 32px; - margin-right: 32px; - float: right; - cursor: pointer; -} - -.mx_UserSettings_avatarPicker_img .mx_BaseAvatar_image { - object-fit: cover; -} - -.mx_UserSettings_avatarPicker_edit { - text-align: center; - margin-top: 10px; -} - -.mx_UserSettings_avatarPicker_edit img { - cursor: pointer; -} - -.mx_UserSettings_avatarPicker_edit > input { - display: none; -} - -.mx_UserSettings_avatarPicker_imgContainer { - display: inline-block; -} - -.mx_UserSettings_avatarPicker_remove { - display: inline-block; - float: right; - margin-right: -15px; -} - -.mx_UserSettings_advanced_spoiler, -.mx_UserSettings_link { - cursor: pointer; - color: $accent-color; - word-break: break-all; -} diff --git a/src/skins/vector/css/matrix-react-sdk/structures/login/_Login.scss b/src/skins/vector/css/matrix-react-sdk/structures/login/_Login.scss deleted file mode 100644 index 84b8306a74..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/structures/login/_Login.scss +++ /dev/null @@ -1,284 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_Login { - width: 100%; - height: 100%; - - display: flex; - align-items: center; - justify-content: center; - - overflow: auto; -} - -.mx_Login h2 { - font-weight: 300; - margin-top: 32px; - margin-bottom: 20px; -} - -.mx_Login_box { - width: 300px; - min-height: 450px; - padding-top: 50px; - padding-bottom: 50px; - margin: auto; -} - -.mx_Login_logo { - text-align: center; - height: 150px; - margin-bottom: 45px; -} - -.mx_Login_logo img { - max-height: 100% -} - -.mx_Login_support { - text-align: center; - font-size: 13px; - margin-top: 0px; - opacity: 0.7; -} - -.mx_Login_field { - width: 280px; - border-radius: 3px; - border: 1px solid $strong-input-border-color; - font-weight: 300; - font-size: 13px; - padding: 9px; - margin-bottom: 14px; -} - -.mx_Login_field_disabled { - opacity: 0.3; -} - -.mx_Login_fieldLabel { - margin-top: -10px; - margin-left: 8px; - margin-bottom: 14px; - font-size: 13px; - opacity: 0.8; -} - -.mx_Login_submit { - @mixin mx_DialogButton; - width: 100%; - margin-top: 35px; - margin-bottom: 24px; -} - -.mx_Login_submit:hover { - @mixin mx_DialogButton_hover; -} - -.mx_Login_submit:disabled { - opacity: 0.3; -} - -.mx_Login_label { - font-size: 13px; - opacity: 0.8; -} - -.mx_Login_checkbox, -.mx_Login_radio { - margin-right: 10px; -} - -.mx_Login_create { - display: block; - text-align: center; - width: 100%; - font-size: 13px; - opacity: 0.8; -} - -.mx_Login_create:link { - color: $primary-fg-color; -} - -.mx_Login_links { - display: block; - text-align: center; - margin-top: 15px; - width: 100%; - font-size: 13px; - opacity: 0.8; -} - -.mx_Login_links a:link { - color: $primary-fg-color; -} - -.mx_Login_prompt { - padding-top: 15px; - padding-bottom: 15px; - font-size: 13px; -} - -.mx_Login_forgot { - font-size: 15px; -} - -.mx_Login_forgot:link { - color: $primary-fg-color; -} - -.mx_Login_loader { - display: inline; - position: relative; - top: 2px; - left: 8px; -} - -.mx_Login_loader .mx_Spinner { - display: inline; -} - -.mx_Login_loader .mx_Spinner img { - width: 16px; - height: 16px; -} - -.mx_Login_error { - color: $warning-color; - font-weight: bold; - text-align: center; -/* - height: 24px; -*/ - margin-top: 12px; - margin-bottom: 12px; -} - -.mx_Login_type_container { - display: flex; - margin-bottom: 14px; -} - -.mx_Login_type_label { - flex-grow: 1; - line-height: 35px; -} - -.mx_Login_type_dropdown { - display: inline-block; - min-width: 170px; - align-self: flex-end; - flex: 1 1 auto; -} - -.mx_Login_field_group { - display: flex; -} - -.mx_Login_field_prefix { - height: 34px; - padding: 0px 5px; - line-height: 33px; - - background-color: #eee; - border: 1px solid #c7c7c7; - border-right: 0px; - border-radius: 3px 0px 0px 3px; - - text-align: center; -} - -.mx_Login_field_suffix { - height: 34px; - padding: 0px 5px; - line-height: 33px; - - background-color: #eee; - border: 1px solid #c7c7c7; - border-left: 0px; - border-radius: 0px 3px 3px 0px; - - text-align: center; - flex-grow: 1; -} - -.mx_Login_username { - height: 16px; - flex-shrink: 1; - min-width: 0px; -} - -.mx_Login_phoneNumberField { - height: 16px; -} - -.mx_Login_field_has_prefix { - border-top-left-radius: 0px; - border-bottom-left-radius: 0px; -} - -.mx_Login_field_has_suffix { - border-top-right-radius: 0px; - border-bottom-right-radius: 0px; -} - -.mx_Login_phoneSection { - display:flex; -} - -.mx_Login_phoneCountry { - margin-bottom: 14px; - width: 150px; - - /* To override mx_Login_field_prefix */ - text-align: left; - padding: 0px; - background-color: $primary-bg-color; -} - -.mx_Login_field_prefix .mx_Dropdown_input { - /* To use prefix border instead of dropdown border */ - border: 0; -} - -.mx_Login_phoneCountry .mx_Dropdown_option { - /* - To match height of mx_Login_field - 33px + 2px border from mx_Dropdown_option = 35px - */ - height: 33px; - line-height: 33px; -} - -.mx_Login_phoneCountry .mx_Dropdown_option img { - margin: 3px; - vertical-align: top; -} - -.mx_Login_language { - margin-left: auto; - margin-right: auto; - min-width: 60%; -} - -.mx_Login_language_div { - display: flex; - margin-top: 12px; - margin-bottom: 12px; -} - diff --git a/src/skins/vector/css/matrix-react-sdk/views/avatars/_BaseAvatar.scss b/src/skins/vector/css/matrix-react-sdk/views/avatars/_BaseAvatar.scss deleted file mode 100644 index ee2d9c190f..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/avatars/_BaseAvatar.scss +++ /dev/null @@ -1,35 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_BaseAvatar { - position: relative; -} - -.mx_BaseAvatar_initial { - position: absolute; - left: 0px; - color: $avatar-initial-color; - text-align: center; - speak: none; - pointer-events: none; - font-weight: normal; -} - -.mx_BaseAvatar_image { - border-radius: 40px; - vertical-align: top; - background-color: $avatar-bg-color; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/avatars/_MemberPresenceAvatar.scss b/src/skins/vector/css/matrix-react-sdk/views/avatars/_MemberPresenceAvatar.scss deleted file mode 100644 index a15f8eaa65..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/avatars/_MemberPresenceAvatar.scss +++ /dev/null @@ -1,43 +0,0 @@ -/* -Copyright 2017 Travis Ralston - -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. -*/ - -.mx_MemberPresenceAvatar { - display: inline-block; - position: relative; -} - -.mx_MemberPresenceAvatar_status { - display: block; - width: 10px; - height: 10px; - border-radius: 10px; - - position: absolute; - bottom: -2px; - right: -3px; -} - -.mx_MemberPresenceAvatar_status_online { - background-color: $presence-online; -} - -.mx_MemberPresenceAvatar_status_unavailable { - background-color: $presence-unavailable; -} - -.mx_MemberPresenceAvatar_status_offline { - background-color: $presence-offline; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/dialogs/_BugReportDialog.scss b/src/skins/vector/css/matrix-react-sdk/views/dialogs/_BugReportDialog.scss deleted file mode 100644 index 0f47e974da..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/dialogs/_BugReportDialog.scss +++ /dev/null @@ -1,20 +0,0 @@ -/* -Copyright 2017 OpenMarket Ltd - -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. -*/ - -.mx_BugReportDialog_input { - width: 100%; - box-sizing: border-box; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/dialogs/_ChatCreateOrReuseChatDialog.scss b/src/skins/vector/css/matrix-react-sdk/views/dialogs/_ChatCreateOrReuseChatDialog.scss deleted file mode 100644 index 0f358a588e..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/dialogs/_ChatCreateOrReuseChatDialog.scss +++ /dev/null @@ -1,41 +0,0 @@ -/* -Copyright 2016 OpenMarket Ltd - -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. -*/ - -.mx_ChatCreateOrReuseDialog .mx_ChatCreateOrReuseDialog_tiles { - margin-top: 24px; -} - -.mx_ChatCreateOrReuseDialog .mx_Dialog_content { - margin-bottom: 24px; - - /* - To stop spinner that mx_ChatCreateOrReuseDialog_profile replaces from causing a - height change - */ - min-height: 100px; -} - -.mx_ChatCreateOrReuseDialog .mx_RoomTile_badge { - display: none; -} - -.mx_ChatCreateOrReuseDialog_profile { - display: flex; -} - -.mx_ChatCreateOrReuseDialog_profile_name { - padding: 14px; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/dialogs/_ChatInviteDialog.scss b/src/skins/vector/css/matrix-react-sdk/views/dialogs/_ChatInviteDialog.scss deleted file mode 100644 index 6fc211743d..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/dialogs/_ChatInviteDialog.scss +++ /dev/null @@ -1,77 +0,0 @@ -/* -Copyright 2016 OpenMarket Ltd - -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. -*/ - -.mx_ChatInviteDialog { - /* XXX: padding-left is on mx_Dialog but padding-right has subsequently - * been added on other dialogs. Surely all our dialogs should have consistent - * right hand padding? - */ - padding-right: 58px; -} - -/* Using a textarea for this element, to circumvent autofill */ -.mx_ChatInviteDialog_input, -.mx_ChatInviteDialog_input:focus -{ - height: 26px; - font-size: 14px; - font-family: $font-family; - padding-left: 12px; - padding-right: 12px; - margin: 0 !important; - border: 0 !important; - outline: 0 !important; - width: 1000%; /* Pretend that this is an "input type=text" */ - resize: none; - overflow: hidden; - vertical-align: middle; - box-sizing: border-box; - word-wrap: nowrap; -} - -.mx_ChatInviteDialog .mx_Dialog_content { - min-height: 50px -} - -.mx_ChatInviteDialog_inputContainer { - border-radius: 3px; - border: solid 1px $input-border-color; - line-height: 36px; - padding-left: 4px; - padding-right: 4px; - padding-top: 1px; - padding-bottom: 1px; - max-height: 150px; - overflow-x: hidden; - overflow-y: auto; -} - -.mx_ChatInviteDialog_error { - margin-top: 10px; - color: $warning-color; -} - -.mx_ChatInviteDialog_cancel { - position: absolute; - right: 11px; - top: 13px; - cursor: pointer; -} - -.mx_ChatInviteDialog_cancel object { - pointer-events: none; -} - diff --git a/src/skins/vector/css/matrix-react-sdk/views/dialogs/_ConfirmUserActionDialog.scss b/src/skins/vector/css/matrix-react-sdk/views/dialogs/_ConfirmUserActionDialog.scss deleted file mode 100644 index b859d6bf4d..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/dialogs/_ConfirmUserActionDialog.scss +++ /dev/null @@ -1,53 +0,0 @@ -/* -Copyright 2017 Vector Creations Ltd. - -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. -*/ - -.mx_ConfirmUserActionDialog .mx_Dialog_content { - min-height: 48px; - margin-bottom: 24px; -} - -.mx_ConfirmUserActionDialog_avatar { - float: left; - margin-right: 20px; - margin-top: -2px; -} - -.mx_ConfirmUserActionDialog_name { - font-size: 18px; -} - -.mx_ConfirmUserActionDialog_userId { - font-size: 13px; -} - -.mx_ConfirmUserActionDialog_reasonField { - font-family: $font-family; - font-size: 14px; - color: $primary-fg-color; - background-color: $primary-bg-color; - - border-radius: 3px; - border: solid 1px $input-border-color; - line-height: 36px; - padding-left: 16px; - padding-right: 16px; - padding-top: 1px; - padding-bottom: 1px; - - margin-bottom: 24px; - - width: 90%; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/dialogs/_CreateGroupDialog.scss b/src/skins/vector/css/matrix-react-sdk/views/dialogs/_CreateGroupDialog.scss deleted file mode 100644 index 500e12ee49..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/dialogs/_CreateGroupDialog.scss +++ /dev/null @@ -1,62 +0,0 @@ -/* -Copyright 2017 Vector Creations Ltd - -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. -*/ - -.mx_CreateGroupDialog_inputRow { - margin-top: 10px; - margin-bottom: 10px; -} - -.mx_CreateGroupDialog_label { - text-align: left; - padding-bottom: 12px; -} - -.mx_CreateGroupDialog_input { - font-size: 15px; - border-radius: 3px; - border: 1px solid $input-border-color; - padding: 9px; - color: $primary-fg-color; - background-color: $primary-bg-color; -} - -.mx_CreateGroupDialog_input_hasPrefixAndSuffix { - border-radius: 0px; -} - -.mx_CreateGroupDialog_input_group { - display: flex; -} - -.mx_CreateGroupDialog_prefix, -.mx_CreateGroupDialog_suffix { - height: 35px; - padding: 0px 5px; - line-height: 37px; - background-color: $input-border-color; - border: 1px solid $input-border-color; - text-align: center; -} - -.mx_CreateGroupDialog_prefix { - border-right: 0px; - border-radius: 3px 0px 0px 3px; -} - -.mx_CreateGroupDialog_suffix { - border-left: 0px; - border-radius: 0px 3px 3px 0px; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/dialogs/_CreateRoomDialog.scss b/src/skins/vector/css/matrix-react-sdk/views/dialogs/_CreateRoomDialog.scss deleted file mode 100644 index 888f147d21..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/dialogs/_CreateRoomDialog.scss +++ /dev/null @@ -1,33 +0,0 @@ -/* -Copyright 2017 Michael Telatynski <7t3chguy@gmail.com> - -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. -*/ - -.mx_CreateRoomDialog_details_summary { - outline: none; -} - -.mx_CreateRoomDialog_label { - text-align: left; - padding-bottom: 12px; -} - -.mx_CreateRoomDialog_input { - font-size: 15px; - border-radius: 3px; - border: 1px solid $input-border-color; - padding: 9px; - color: $primary-fg-color; - background-color: $primary-bg-color; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/dialogs/_EncryptedEventDialog.scss b/src/skins/vector/css/matrix-react-sdk/views/dialogs/_EncryptedEventDialog.scss deleted file mode 100644 index b4dd353370..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/dialogs/_EncryptedEventDialog.scss +++ /dev/null @@ -1,27 +0,0 @@ -/* -Copyright 2016 OpenMarket Ltd - -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. -*/ - -.mx_EncryptedEventDialog .mx_MemberDeviceInfo { - float: right; - padding: 0px; - margin-right: 42px; -} - -.mx_EncryptedEventDialog .mx_MemberDeviceInfo_textButton { - @mixin mx_DialogButton; - background-color: $primary-bg-color; - color: $accent-color; -} \ No newline at end of file diff --git a/src/skins/vector/css/matrix-react-sdk/views/dialogs/_GroupAddressPicker.scss b/src/skins/vector/css/matrix-react-sdk/views/dialogs/_GroupAddressPicker.scss deleted file mode 100644 index d6c961c0ec..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/dialogs/_GroupAddressPicker.scss +++ /dev/null @@ -1,25 +0,0 @@ -/* -Copyright 2017 New Vector Ltd - -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. -*/ - -.mx_GroupAddressPicker_checkboxContainer{ - margin-top: 10px; - display: flex; -} - -.mx_GroupAddressPicker_checkboxContainer input[type="checkbox"] { - /* Stop flex from shrinking the checkbox */ - width: 20px; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/dialogs/_QuestionDialog.scss b/src/skins/vector/css/matrix-react-sdk/views/dialogs/_QuestionDialog.scss deleted file mode 100644 index 3d47f17592..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/dialogs/_QuestionDialog.scss +++ /dev/null @@ -1,18 +0,0 @@ -/* -Copyright 2017 New Vector Ltd. - -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. -*/ -.mx_QuestionDialog { - padding-right: 58px; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/dialogs/_SetMxIdDialog.scss b/src/skins/vector/css/matrix-react-sdk/views/dialogs/_SetMxIdDialog.scss deleted file mode 100644 index f7d8a3d001..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/dialogs/_SetMxIdDialog.scss +++ /dev/null @@ -1,50 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2017 Vector Creations Ltd - -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. -*/ - -.mx_SetMxIdDialog .mx_Dialog_title { - padding-right: 40px; -} - -.mx_SetMxIdDialog_input_group { - display: flex; -} - -.mx_SetMxIdDialog_input { - border-radius: 3px; - border: 1px solid $input-border-color; - padding: 9px; - color: $primary-fg-color; - background-color: $primary-bg-color; - font-size: 15px; - width: 100%; - max-width: 280px; -} - -.mx_SetMxIdDialog_input.error, -.mx_SetMxIdDialog_input.error:focus { - border: 1px solid $warning-color; -} - -.mx_SetMxIdDialog_input_group .mx_Spinner { - height: 37px; - padding-left: 10px; - justify-content: flex-start; -} - -.mx_SetMxIdDialog .success { - color: $accent-color; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/dialogs/_UnknownDeviceDialog.scss b/src/skins/vector/css/matrix-react-sdk/views/dialogs/_UnknownDeviceDialog.scss deleted file mode 100644 index 3457e50b92..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/dialogs/_UnknownDeviceDialog.scss +++ /dev/null @@ -1,54 +0,0 @@ -/* -Copyright 2016 OpenMarket Ltd - -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. -*/ - -// CSS voodoo to support a gemini-scrollbar for the contents of the dialog -.mx_Dialog_unknownDevice .mx_Dialog { - // ideally we'd shrink the height to fit when needed, but in practice this - // is a pain in the ass. plus might as well make the dialog big given how - // important it is. - height: 100%; - - // position the gemini scrollbar nicely - padding-right: 58px; -} - -.mx_UnknownDeviceDialog { - height: 100%; - display: flex; - flex-direction: column; -} - -.mx_UnknownDeviceDialog .mx_Dialog_content { - margin-bottom: 24px; -} - -.mx_UnknownDeviceDialog .mx_MemberDeviceInfo { - float: right; - clear: both; - padding: 0px; - padding-top: 8px; -} - -.mx_UnknownDeviceDialog .mx_MemberDeviceInfo_textButton { - @mixin mx_DialogButton_small; - background-color: $primary-bg-color; - color: $accent-color; -} - -.mx_UnknownDeviceDialog .mx_UnknownDeviceDialog_deviceList li { - height: 40px; - border-bottom: 1px solid $primary-hairline-color; -} \ No newline at end of file diff --git a/src/skins/vector/css/matrix-react-sdk/views/elements/_AccessibleButton.scss b/src/skins/vector/css/matrix-react-sdk/views/elements/_AccessibleButton.scss deleted file mode 100644 index edf455049b..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/elements/_AccessibleButton.scss +++ /dev/null @@ -1,24 +0,0 @@ -/* -Copyright 2017 Vector Creations Ltd - -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. -*/ - -.mx_AccessibleButton:focus { - outline: 0; - filter: brightness($focus-brightness); -} - -.mx_AccessibleButton { - cursor: pointer; -} \ No newline at end of file diff --git a/src/skins/vector/css/matrix-react-sdk/views/elements/_AddressSelector.scss b/src/skins/vector/css/matrix-react-sdk/views/elements/_AddressSelector.scss deleted file mode 100644 index 9871a7e881..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/elements/_AddressSelector.scss +++ /dev/null @@ -1,45 +0,0 @@ -/* -Copyright 2016 OpenMarket Ltd - -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. -*/ - -.mx_AddressSelector { - position: absolute; - background-color: $primary-bg-color; - width: 485px; - max-height: 116px; - overflow-y: auto; - border-radius: 3px; - background-color: $primary-bg-color; - border: solid 1px $accent-color; - cursor: pointer; -} - -.mx_AddressSelector.mx_AddressSelector_empty { - display: none; -} - -.mx_AddressSelector_addressListElement .mx_AddressTile { - background-color: $primary-bg-color; - border: solid 1px $primary-bg-color; -} - -.mx_AddressSelector_addressListElement.mx_AddressSelector_selected { - background-color: $selected-color; -} - -.mx_AddressSelector_addressListElement.mx_AddressSelector_selected .mx_AddressTile { - background-color: $selected-color; - border: solid 1px $selected-color; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/elements/_AddressTile.scss b/src/skins/vector/css/matrix-react-sdk/views/elements/_AddressTile.scss deleted file mode 100644 index 0ecfb17c83..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/elements/_AddressTile.scss +++ /dev/null @@ -1,138 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_AddressTile { - display: inline-block; - border-radius: 3px; - background-color: rgba(74, 73, 74, 0.1); - border: solid 1px $input-border-color; - line-height: 26px; - color: $primary-fg-color; - font-size: 14px; - font-weight: normal; - margin-right: 4px; -} - -.mx_AddressTile.mx_AddressTile_error { - background-color: rgba(255, 0, 100, 0.1); - color: $warning-color; - border-color: $warning-color; -} - -.mx_AddressTile_network { - display: inline-block; - position: relative; - padding-left: 2px; - padding-right: 4px; - vertical-align: middle; -} - -.mx_AddressTile_avatar { - display: inline-block; - position: relative; - padding-left: 2px; - padding-right: 7px; - vertical-align: middle; -} - -.mx_AddressTile_mx { - display: inline-block; - margin: 0; - border: 0; - padding: 0; -} - -.mx_AddressTile_name { - display: inline-block; - padding-right: 4px; - font-weight: 600; - overflow: hidden; - height: 26px; - vertical-align: middle; -} - -.mx_AddressTile_name.mx_AddressTile_justified { - width: 180px; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - vertical-align: middle; -} - -.mx_AddressTile_id { - display: inline-block; - padding-right: 11px; -} - -.mx_AddressTile_id.mx_AddressTile_justified { - width: 200px; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - vertical-align: middle; -} - -.mx_AddressTile_unknownMx { - display: inline-block; - font-weight: 600; - padding-right: 11px; -} - -.mx_AddressTile_unknownMxl.mx_AddressTile_justified { - width: 380px; /* name + id width */ - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - vertical-align: middle; -} - -.mx_AddressTile_email { - display: inline-block; - font-weight: 600; - padding-right: 11px; -} - -.mx_AddressTile_email.mx_AddressTile_justified { - width: 200px; /* same as id width */ - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - vertical-align: middle; -} - -.mx_AddressTile_unknown { - display: inline-block; - padding-right: 11px; -} - -.mx_AddressTile_unknown.mx_AddressTile_justified { - width: 380px; /* name + id width */ - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - vertical-align: middle; -} - -.mx_AddressTile_dismiss { - display: inline-block; - padding-right: 11px; - padding-left: 1px; - cursor: pointer; -} - -.mx_AddressTile_dismiss object { - pointer-events: none; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/elements/_DirectorySearchBox.scss b/src/skins/vector/css/matrix-react-sdk/views/elements/_DirectorySearchBox.scss deleted file mode 100644 index 94a92b23ce..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/elements/_DirectorySearchBox.scss +++ /dev/null @@ -1,70 +0,0 @@ -/* -Copyright 2016 OpenMarket Ltd - -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. -*/ - -.mx_DirectorySearchBox { - position: relative; - border-radius: 3px; - border: 1px solid $strong-input-border-color; -} - -.mx_DirectorySearchBox_container { - display: flex; - padding-left: 9px; - padding-right: 9px; -} - -.mx_DirectorySearchBox_input { - flex-grow: 1; - border: 0; - padding: 0; - font-weight: 300; - font-size: 13px; -} -input[type=text].mx_DirectorySearchBox_input:focus { - border: 0; -} - -.mx_DirectorySearchBox_joinButton { - display: table-cell; - padding: 3px; - padding-left: 10px; - padding-right: 10px; - background-color: $plinth-bg-color; - border-radius: 3px; - background-image: url('../../img/icon-return.svg'); - background-position: 8px 70%; - background-repeat: no-repeat; - text-indent: 18px; - font-weight: 600; - font-size: 12px; - user-select: none; - cursor: pointer; -} - -.mx_DirectorySearchBox_clear_wrapper { - display: table-cell; -} - -.mx_DirectorySearchBox_clear { - display: inline-block; - vertical-align: middle; - background: url('../../img/icon_context_delete.svg'); - background-position: 0 50%; - background-repeat: no-repeat; - width: 15px; - height: 15px; - cursor: pointer; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/elements/_Dropdown.scss b/src/skins/vector/css/matrix-react-sdk/views/elements/_Dropdown.scss deleted file mode 100644 index 2ddbb36c2a..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/elements/_Dropdown.scss +++ /dev/null @@ -1,120 +0,0 @@ -/* -Copyright 2017 OpenMarket Ltd - -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. -*/ - -.mx_Dropdown { - position: relative; -} - -.mx_Dropdown_disabled { - opacity: 0.3; -} - -.mx_Dropdown_input { - position: relative; - border-radius: 3px; - border: 1px solid $strong-input-border-color; - font-weight: 300; - font-size: 13px; - user-select: none; -} - -.mx_Dropdown_input:focus { - border-color: $accent-color; -} - -/* Disable dropdown highlight on focus */ -.mx_Dropdown_input.mx_AccessibleButton:focus { - filter: none; -} - -.mx_Dropdown_arrow { - border-color: $primary-fg-color transparent transparent; - border-style: solid; - border-width: 5px 5px 0; - display: block; - height: 0; - position: absolute; - right: 10px; - top: 14px; - width: 0 -} - -.mx_Dropdown.left_aligned .mx_Dropdown_arrow { - left: 10px; -} - -.mx_Dropdown.left_aligned .mx_Dropdown_input > .mx_Dropdown_option { - padding-left: 25px; -} - -.mx_Dropdown_option { - height: 35px; - line-height: 35px; - padding-left: 8px; - padding-right: 8px; -} - -.mx_Dropdown_option div { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.mx_Dropdown_option img { - margin: 5px; - width: 27px; - vertical-align: middle; -} - -input.mx_Dropdown_option, input.mx_Dropdown_option:focus { - border: 0; - padding-top: 0; - padding-bottom: 0; - // XXX: hack to prevent text box being too big and pushing - // its parent out / overlapping the dropdown arrow. Only really - // works in the Country dropdown. - width: 60%; -} - -.mx_Dropdown_menu { - position: absolute; - left: -1px; - right: -1px; - top: 100%; - z-index: 2; - margin: 0; - padding: 0px; - border-radius: 3px; - border: 1px solid $accent-color; - background-color: $primary-bg-color; - max-height: 200px; - overflow-y: auto; -} - -.mx_Dropdown_menu .mx_Dropdown_option_highlight { - background-color: $focus-bg-color; -} - -.mx_Dropdown_menu { - font-weight: bold; -} - -.mx_Dropdown_searchPrompt { - font-weight: normal; - margin-left: 5px; - margin-bottom: 5px; -} - diff --git a/src/skins/vector/css/matrix-react-sdk/views/elements/_EditableItemList.scss b/src/skins/vector/css/matrix-react-sdk/views/elements/_EditableItemList.scss deleted file mode 100644 index 9fbb39aa17..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/elements/_EditableItemList.scss +++ /dev/null @@ -1,62 +0,0 @@ -/* -Copyright 2017 New Vector Ltd. - -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. -*/ - -.mx_EditableItemList { - margin-top: 12px; - margin-bottom: 0px; -} - -.mx_EditableItem { - display: flex; - margin-left: 56px; -} - -.mx_EditableItem .mx_EditableItem_editable { - border: 0px; - border-bottom: 1px solid $strong-input-border-color; - padding: 0px; - min-width: 240px; - max-width: 400px; - margin-bottom: 16px; -} - -.mx_EditableItem .mx_EditableItem_editable:focus { - border-bottom: 1px solid $accent-color; - outline: none; - box-shadow: none; -} - -.mx_EditableItem .mx_EditableItem_editablePlaceholder { - color: $settings-grey-fg-color; -} - -.mx_EditableItem .mx_EditableItem_addButton, -.mx_EditableItem .mx_EditableItem_removeButton { - padding-left: 0.5em; - position: relative; - cursor: pointer; - - visibility: hidden; -} - -.mx_EditableItem:hover .mx_EditableItem_addButton, -.mx_EditableItem:hover .mx_EditableItem_removeButton { - visibility: visible; -} - -.mx_EditableItemList_label { - margin-bottom: 8px; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/elements/_MemberEventListSummary.scss b/src/skins/vector/css/matrix-react-sdk/views/elements/_MemberEventListSummary.scss deleted file mode 100644 index 02ecb5d84a..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/elements/_MemberEventListSummary.scss +++ /dev/null @@ -1,71 +0,0 @@ -/* -Copyright 2016 OpenMarket Ltd - -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. -*/ - -.mx_MemberEventListSummary { - position: relative; -} - -.mx_TextualEvent.mx_MemberEventListSummary_summary { - font-size: 14px; - display: inline-flex; -} - -.mx_MemberEventListSummary_avatars { - display: inline-block; - margin-right: 8px; - padding-top: 8px; - line-height: 12px; -} - -.mx_MemberEventListSummary_avatars .mx_BaseAvatar { - margin-right: -4px; - cursor: pointer; -} - -.mx_MemberEventListSummary_toggle { - color: $accent-color; - cursor: pointer; - float: right; - margin-right: 10px; - margin-top: 8px; -} - -.mx_MemberEventListSummary_line { - border-bottom: 1px solid $primary-hairline-color; - margin-left: 63px; - line-height: 30px; -} - -.mx_MatrixChat_useCompactLayout { - .mx_MemberEventListSummary { - font-size: 13px; - .mx_EventTile_line { - line-height: 20px; - } - } - - .mx_MemberEventListSummary_line { - line-height: 22px; - } - - .mx_MemberEventListSummary_toggle { - margin-top: 3px; - } - - .mx_TextualEvent.mx_MemberEventListSummary_summary { - font-size: 13px; - } -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/elements/_ProgressBar.scss b/src/skins/vector/css/matrix-react-sdk/views/elements/_ProgressBar.scss deleted file mode 100644 index a3fee232d0..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/elements/_ProgressBar.scss +++ /dev/null @@ -1,25 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_ProgressBar { - height: 5px; - border: 1px solid $progressbar-color; -} - -.mx_ProgressBar_fill { - height: 100%; - background-color: $progressbar-color; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/elements/_Quote.scss b/src/skins/vector/css/matrix-react-sdk/views/elements/_Quote.scss deleted file mode 100644 index 0af555b5aa..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/elements/_Quote.scss +++ /dev/null @@ -1,26 +0,0 @@ -/* -Copyright 2017 Vector Creations Ltd - -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. -*/ - -.mx_Quote .mx_DateSeparator { - font-size: 1em !important; - margin-bottom: 0; - padding-bottom: 1px; - bottom: -5px; -} - -.mx_Quote_show { - cursor: pointer; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/elements/_RichText.scss b/src/skins/vector/css/matrix-react-sdk/views/elements/_RichText.scss deleted file mode 100644 index 474a123455..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/elements/_RichText.scss +++ /dev/null @@ -1,75 +0,0 @@ -// XXX: bleurgh, what is this? These classes totally break the component -// naming scheme; it's completely unclear where or how they're being used -// --Matthew - -.mx_UserPill, -.mx_RoomPill, -.mx_AtRoomPill { - border-radius: 16px; - display: inline-block; - height: 20px; - line-height: 20px; - padding-left: 5px; -} - -.mx_EventTile_body .mx_UserPill, -.mx_EventTile_body .mx_RoomPill { - cursor: pointer; -} - -/* More specific to override `.markdown-body a` color */ -.mx_EventTile_content .markdown-body a.mx_UserPill, -.mx_UserPill { - color: $primary-fg-color; - background-color: $other-user-pill-bg-color; - padding-right: 5px; -} - -.mx_EventTile_highlight .mx_EventTile_content .markdown-body a.mx_UserPill_me, -.mx_EventTile_content .mx_AtRoomPill, -.mx_MessageComposer_input .mx_AtRoomPill { - color: $accent-fg-color; - background-color: $mention-user-pill-bg-color; - padding-right: 5px; -} - -/* More specific to override `.markdown-body a` color */ -.mx_EventTile_content .markdown-body a.mx_RoomPill, -.mx_RoomPill { - color: $accent-fg-color; - background-color: $rte-room-pill-color; - padding-right: 5px; -} - -.mx_UserPill .mx_BaseAvatar, -.mx_RoomPill .mx_BaseAvatar, -.mx_AtRoomPill .mx_BaseAvatar { - position: relative; - left: -3px; - top: 2px; -} - -.mx_Markdown_BOLD { - font-weight: bold; -} - -.mx_Markdown_ITALIC { - font-style: italic; -} - -.mx_Markdown_CODE { - padding: .2em 0; - margin: 0; - font-size: 85%; - background-color: $rte-code-bg-color; - border-radius: 3px; -} - -.mx_Markdown_HR { - display: block; - background: $rte-bg-color; -} - -.mx_Markdown_STRIKETHROUGH { - text-decoration: line-through; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/elements/_RoleButton.scss b/src/skins/vector/css/matrix-react-sdk/views/elements/_RoleButton.scss deleted file mode 100644 index 094e0b9b1b..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/elements/_RoleButton.scss +++ /dev/null @@ -1,33 +0,0 @@ -/* -Copyright 2107 Vector Creations Ltd - -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. -*/ - -.mx_RoleButton { - margin-left: 4px; - margin-right: 4px; - cursor: pointer; - display: inline-block; -} - -.mx_RoleButton object { - pointer-events: none; -} - -.mx_RoleButton_tooltip { - display: inline-block; - position: relative; - top: -25px; - left: 6px; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/elements/_ToolTipButton.scss b/src/skins/vector/css/matrix-react-sdk/views/elements/_ToolTipButton.scss deleted file mode 100644 index ef9dd02b2a..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/elements/_ToolTipButton.scss +++ /dev/null @@ -1,51 +0,0 @@ -/* -Copyright 2017 New Vector Ltd. - -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. -*/ - -.mx_ToolTipButton { - display: inline-block; - width: 11px; - height: 11px; - margin-left: 5px; - - border: 2px solid $neutral-badge-color; - border-radius: 20px; - color: $neutral-badge-color; - - transition: opacity 0.2s ease-in; - opacity: 0.6; - - line-height: 11px; - text-align: center; - - cursor: pointer; -} - -.mx_ToolTipButton:hover { - opacity: 1.0; -} - -.mx_ToolTipButton_container { - position: relative; - top: -18px; - left: 4px; -} - -.mx_ToolTipButton_helpText { - width: 200px; - text-align: center; - line-height: 17px !important; -} - diff --git a/src/skins/vector/css/matrix-react-sdk/views/groups/_GroupPublicityToggle.scss b/src/skins/vector/css/matrix-react-sdk/views/groups/_GroupPublicityToggle.scss deleted file mode 100644 index 3ea4aa07d6..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/groups/_GroupPublicityToggle.scss +++ /dev/null @@ -1,42 +0,0 @@ -/* -Copyright 2017 New Vector Ltd - -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. -*/ - -.mx_GroupPublicity_toggle { - display: flex; - align-items: center; - margin: 8px; -} - -.mx_GroupPublicity_toggle > label { - display: flex; - align-items: flex-start; -} - -.mx_GroupPublicity_toggle > label, -.mx_GroupPublicity_toggle .mx_GroupTile { - width: 50%; -} - -.mx_GroupPublicity_toggle input { - margin-right: 8px; - vertical-align: -4px; -} - -.mx_GroupPublicity_toggle .mx_GroupTile { - display: flex; - align-items: flex-start; - cursor: pointer; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/groups/_GroupRoomList.scss b/src/skins/vector/css/matrix-react-sdk/views/groups/_GroupRoomList.scss deleted file mode 100644 index fb41ebaa9e..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/groups/_GroupRoomList.scss +++ /dev/null @@ -1,21 +0,0 @@ -/* -Copyright 2017 New Vector Ltd - -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. -*/ - -.mx_GroupRoomTile { - position: relative; - color: $primary-fg-color; - cursor: pointer; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/groups/_GroupUserSettings.scss b/src/skins/vector/css/matrix-react-sdk/views/groups/_GroupUserSettings.scss deleted file mode 100644 index 0c909b7cf7..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/groups/_GroupUserSettings.scss +++ /dev/null @@ -1,23 +0,0 @@ -/* -Copyright 2017 New Vector Ltd - -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. -*/ - -.mx_GroupUserSettings_groupPublicity_scrollbox { - height: 200px; - border: 1px solid $primary-hairline-color; - border-radius: 3px; - margin-right: 32px; - overflow: hidden; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/login/_InteractiveAuthEntryComponents.scss b/src/skins/vector/css/matrix-react-sdk/views/login/_InteractiveAuthEntryComponents.scss deleted file mode 100644 index 183b5cd251..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/login/_InteractiveAuthEntryComponents.scss +++ /dev/null @@ -1,42 +0,0 @@ -/* -Copyright 2017 Vector Creations Ltd - -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. -*/ - -.mx_InteractiveAuthEntryComponents_msisdnWrapper { - text-align: center; -} - -.mx_InteractiveAuthEntryComponents_msisdnEntry { - font-size: 200%; - font-weight: bold; - border: 1px solid $strong-input-border-color; - border-radius: 3px; - width: 6em; -} - -.mx_InteractiveAuthEntryComponents_msisdnEntry:focus { - border: 1px solid $accent-color; -} - -.mx_InteractiveAuthEntryComponents_msisdnSubmit { - margin-top: 4px; - margin-bottom: 5px; -} - -// XXX: This should be a common button class -.mx_InteractiveAuthEntryComponents_msisdnSubmit:disabled { - background-color: $light-fg-color; - cursor: default; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/login/_ServerConfig.scss b/src/skins/vector/css/matrix-react-sdk/views/login/_ServerConfig.scss deleted file mode 100644 index 894ce19827..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/login/_ServerConfig.scss +++ /dev/null @@ -1,36 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_ServerConfig { - margin-top: 7px; -} - -.mx_ServerConfig .mx_Login_field { - margin-top: 4px; - margin-bottom: 5px; -} - -.mx_ServerConfig_help:link { - opacity: 0.8; - font-size: 13px; - font-weight: 300; - color: $primary-fg-color; -} - -.mx_ServerConfig_selector { - text-align: center; - width: 302px; // for fr i18n -} \ No newline at end of file diff --git a/src/skins/vector/css/matrix-react-sdk/views/messages/_MEmoteBody.scss b/src/skins/vector/css/matrix-react-sdk/views/messages/_MEmoteBody.scss deleted file mode 100644 index cf722e5ae8..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/messages/_MEmoteBody.scss +++ /dev/null @@ -1,23 +0,0 @@ -/* -Copyright 2017 Vector Creations Ltd. - -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. -*/ - -.mx_MEmoteBody { - white-space: pre-wrap; -} - -.mx_MEmoteBody_sender { - cursor: pointer; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/messages/_MFileBody.scss b/src/skins/vector/css/matrix-react-sdk/views/messages/_MFileBody.scss deleted file mode 100644 index 6cbce68745..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/messages/_MFileBody.scss +++ /dev/null @@ -1,47 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_MFileBody_download { - color: $accent-color; -} - -.mx_MFileBody_download a { - color: $accent-color; - text-decoration: none; - cursor: pointer; -} - -.mx_MFileBody_download object { - margin-left: -16px; - padding-right: 4px; - margin-top: -4px; - vertical-align: middle; - pointer-events: none; -} - -/* Remove the border and padding for iframes for download links. */ -.mx_MFileBody_download iframe { - margin: 0px; - padding: 0px; - border: none; - width: 100%; - /* Set the height of the iframe to be 1 line of text. - * Iframes don't automatically size themselves to fit their content. - * So either we have to fix the height of the iframe using CSS or - * use javascript's cross-origin postMessage API to communicate how - * big the content of the iframe is. */ - height: 1.5em; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/messages/_MImageBody.scss b/src/skins/vector/css/matrix-react-sdk/views/messages/_MImageBody.scss deleted file mode 100644 index 1702aac8ad..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/messages/_MImageBody.scss +++ /dev/null @@ -1,29 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_MImageBody { - display: block; - margin-right: 34px; -} - -.mx_MImageBody_thumbnail { - max-width: 100%; -/* - background-color: $primary-bg-color; - border: 2px solid $primary-bg-color; - border-radius: 1px; -*/ -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/messages/_MNoticeBody.scss b/src/skins/vector/css/matrix-react-sdk/views/messages/_MNoticeBody.scss deleted file mode 100644 index a88c20863d..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/messages/_MNoticeBody.scss +++ /dev/null @@ -1,20 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_MNoticeBody { - white-space: pre-wrap; - opacity: 0.6; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/messages/_RoomAvatarEvent.scss b/src/skins/vector/css/matrix-react-sdk/views/messages/_RoomAvatarEvent.scss deleted file mode 100644 index 9adce42eef..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/messages/_RoomAvatarEvent.scss +++ /dev/null @@ -1,26 +0,0 @@ -/* -Copyright 2017 Vector Creations Ltd - -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. -*/ - -.mx_RoomAvatarEvent { - opacity: 0.5; - overflow-y: hidden; -} - -.mx_RoomAvatarEvent_avatar { - display: inline; - position: relative; - top: 5px; -} \ No newline at end of file diff --git a/src/skins/vector/css/matrix-react-sdk/views/messages/_TextualEvent.scss b/src/skins/vector/css/matrix-react-sdk/views/messages/_TextualEvent.scss deleted file mode 100644 index be7565b3c5..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/messages/_TextualEvent.scss +++ /dev/null @@ -1,20 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_TextualEvent { - opacity: 0.5; - overflow-y: hidden; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/messages/_UnknownBody.scss b/src/skins/vector/css/matrix-react-sdk/views/messages/_UnknownBody.scss deleted file mode 100644 index 9036e12bf0..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/messages/_UnknownBody.scss +++ /dev/null @@ -1,16 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd -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. -*/ - -.mx_UnknownBody { - white-space: pre-wrap; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss deleted file mode 100644 index 2d61ca7743..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss +++ /dev/null @@ -1,266 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_AppsDrawer { - margin: 5px; -} - -.mx_AppsContainer { - display: flex; - flex-direction: row; - align-items: center; - justify-content: center; -} - -.mx_AddWidget_button { - order: 2; - cursor: pointer; - padding-right: 12px; - padding: 0; - margin: 5px auto 5px auto; - color: $accent-color; - font-size: 12px; -} - -.mx_AddWidget_button_full_width { - max-width: 960px; -} - -.mx_SetAppURLDialog_input { - border-radius: 3px; - border: 1px solid $input-border-color; - padding: 9px; - color: $primary-hairline-color; - background-color: $primary-bg-color; - font-size: 15px; -} - -.mx_AppTile { - max-width: 960px; - width: 50%; - margin-right: 5px; - border: 1px solid $primary-hairline-color; - border-radius: 2px; -} - -.mx_AppTile:last-child { - margin-right: 1px; -} - -.mx_AppTileFullWidth { - max-width: 960px; - width: 100%; - margin: 0; - padding: 0; - border: 1px solid $primary-hairline-color; - border-radius: 2px; - // height: 350px; - // display: inline-block; -} - -.mx_AppTile, .mx_AppTileFullWidth { - margin-top: 3px; -} - -.mx_AppTileMenuBar { - margin: 0; - padding: 2px 10px; - border-bottom: 1px solid $primary-hairline-color; - font-size: 10px; - background-color: $widget-menu-bar-bg-color; - display: flex; - flex-direction: row; - align-items: center; - justify-content: space-between; - cursor: pointer; -} - -.mx_AppTileMenuBarTitle { - display: flex; - flex-direction: row; - align-items: center; - pointer-events: none; -} - -.mx_AppTileMenuBarWidgets { - float: right; - display: flex; - flex-direction: row; - align-items: center; -} - -.mx_AppTileMenuBarWidget { - // pointer-events: none; - cursor: pointer; - width: 10px; - height: 10px; - padding: 1px; - transition-duration: 500ms; - border: 1px solid transparent; -} - -.mx_AppTileMenuBarWidgetDelete { - filter: none; -} - -.mx_AppTileMenuBarWidget:hover { - border: 1px solid $primary-fg-color; - border-radius: 2px; -} - -.mx_AppTileBody{ - height: 350px; - width: 100%; - overflow: hidden; -} - -.mx_AppTileBody iframe { - width: 100%; - height: 350px; - overflow: hidden; - border: none; - padding: 0; - margin: 0; - display: block; -} - -// .mx_CloseAppWidget { -// } - -.mx_AppTileMenuBarWidgetPadding { - margin-right: 5px; -} - -.mx_AppIconTile { - background-color: $lightbox-bg-color; - border: 1px solid rgba(0, 0, 0, 0); - width: 200px; - box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2); - transition: 0.3s; - border-radius: 3px; - margin: 5px; - display: inline-block; -} - -.mx_AppIconTile.mx_AppIconTile_active { - color: $accent-color; - border-color: $accent-color; -} - -.mx_AppIconTile:hover { - border: 1px solid $accent-color; - box-shadow: 0 0 10px 5px rgba(200,200,200,0.5); -} - -.mx_AppIconTile_content { - padding: 2px 16px; - height: 60px; - overflow: hidden; -} - -.mx_AppIconTile_content h4 { - margin-top: 5px; - margin-bottom: 2px; -} - -.mx_AppIconTile_content p { - margin-top: 0; - margin-bottom: 5px; - font-size: smaller; -} - -.mx_AppIconTile_image { - padding: 10px; - width: 75%; - max-width:100px; - max-height:100px; - width: auto; - height: auto; -} - -.mx_AppIconTile_imageContainer { - text-align: center; - width: 100%; - background-color: white; - border-radius: 3px 3px 0 0; - height: 155px; - display: flex; - justify-content: center; - align-items: center; -} - -form.mx_Custom_Widget_Form div { - margin-top: 10px; - margin-bottom: 10px; -} - -.mx_AppPermissionWarning { - text-align: center; - background-color: $primary-bg-color; - display: flex; - height: 100%; - flex-direction: column; - justify-content: center; - align-items: center; -} - -.mx_AppPermissionWarningImage { - margin: 10px 0; -} - -.mx_AppPermissionWarningImage img { - width: 100px; -} - -.mx_AppPermissionWarningText { - max-width: 400px; - margin: 10px auto 10px auto; - color: $primary-fg-color; -} - -.mx_AppPermissionWarningTextLabel { - font-weight: bold; - display: block; -} - -.mx_AppPermissionWarningTextURL { - color: $accent-color; -} - -.mx_AppPermissionButton { - padding: 5px; - border-radius: 5px; - color: $warning-color; - background-color: $primary-bg-color; -} - -.mx_AppPermissionButton:hover { - background-color: $primary-fg-color; - cursor: pointer; -} - -.mx_AppLoading { - min-height: 305px; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - font-weight: bold; -} - -.mx_AppLoading iframe { - display: none; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_Autocomplete.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_Autocomplete.scss deleted file mode 100644 index 732ada088b..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_Autocomplete.scss +++ /dev/null @@ -1,93 +0,0 @@ -.mx_Autocomplete { - position: absolute; - bottom: 0; - z-index: 1001; - width: 100%; - border: 1px solid $primary-hairline-color; - background: $primary-bg-color; - border-bottom: none; - border-radius: 4px 4px 0 0; - max-height: 50vh; - overflow: auto -} - -.mx_Autocomplete_ProviderSection { - border-bottom: 1px solid $primary-hairline-color; -} - -.mx_Autocomplete_Completion_container_pill { - margin: 12px; - display: flex; -} - -/* a "block" completion takes up a whole line */ -.mx_Autocomplete_Completion_block { - height: 34px; - display: flex; - padding: 0 12px; - user-select: none; - cursor: pointer; - align-items: center; - color: $primary-fg-color; -} - -.mx_Autocomplete_Completion_block * { - margin: 0 3px; -} - -.mx_Autocomplete_Completion_pill { - border-radius: 17px; - height: 34px; - padding: 0px 5px; - display: flex; - user-select: none; - cursor: pointer; - align-items: center; - color: $primary-fg-color; -} - -.mx_Autocomplete_Completion_pill > * { - margin: 0 3px; -} - -.mx_Autocomplete_Completion_container_truncate { - .mx_Autocomplete_Completion_title, - .mx_Autocomplete_Completion_subtitle, - .mx_Autocomplete_Completion_description { - /* Ellipsis for long names/subtitles/descriptions*/ - max-width: 150px; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - } -} - -/* container for pill-style completions */ -.mx_Autocomplete_Completion_container_pill { - margin: 12px; - display: flex; - flex-flow: wrap; -} - -.mx_Autocomplete_Completion.selected { - background: $menu-bg-color; - outline: none; -} - -.mx_Autocomplete_provider_name { - margin: 12px; - color: $primary-fg-color; - font-weight: 400; - opacity: 0.4; -} - -/* styling for common completion elements */ -.mx_Autocomplete_Completion_subtitle { - font-style: italic; - flex: 1; -} - -.mx_Autocomplete_Completion_description { - color: gray; -} - diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_EntityTile.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_EntityTile.scss deleted file mode 100644 index 031894afde..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_EntityTile.scss +++ /dev/null @@ -1,114 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_EntityTile { - display: table-row; - position: relative; - color: $primary-fg-color; - cursor: pointer; -} - -.mx_EntityTile_invite { - display: table-cell; - vertical-align: middle; - margin-left: 10px; - width: 26px; -} - -.mx_EntityTile_avatar, -.mx_GroupRoomTile_avatar { - display: table-cell; - padding-left: 3px; - padding-right: 12px; - padding-top: 4px; - padding-bottom: 4px; - vertical-align: middle; - width: 36px; - height: 36px; - position: relative; -} - -.mx_EntityTile_power { - position: absolute; - width: 16px; - height: 17px; - top: 0px; - right: 6px; -} - -.mx_EntityTile_name, -.mx_GroupRoomTile_name { - display: table-cell; - vertical-align: middle; - overflow: hidden; - font-size: 14px; - text-overflow: ellipsis; - white-space: nowrap; - max-width: 155px; -} - -.mx_EntityTile_details { - display: table-cell; - padding-right: 14px; - vertical-align: middle; -} - -.mx_EntityTile_name_hover { - font-size: 13px; -} - -.mx_EntityTile_chevron { - margin-top: 8px; - margin-right: -4px; - margin-left: 6px; - float: right; -} - -.mx_EntityTile_ellipsis .mx_EntityTile_name { - font-style: italic; - color: $primary-fg-color; -} - -.mx_EntityTile_invitePlaceholder .mx_EntityTile_name { - font-style: italic; - color: $primary-fg-color; -} - -.mx_EntityTile_unavailable .mx_EntityTile_avatar, -.mx_EntityTile_unavailable .mx_EntityTile_name, -.mx_EntityTile_unavailable .mx_EntityTile_name_hover, -.mx_EntityTile_offline_beenactive .mx_EntityTile_avatar, -.mx_EntityTile_offline_beenactive .mx_EntityTile_name, -.mx_EntityTile_offline_beenactive .mx_EntityTile_name_hover -{ - opacity: 0.66; -} - -.mx_EntityTile_offline_neveractive .mx_EntityTile_avatar, -.mx_EntityTile_offline_neveractive .mx_EntityTile_name, -.mx_EntityTile_offline_neveractive .mx_EntityTile_name_hover -{ - opacity: 0.25; -} - -.mx_EntityTile_unknown .mx_EntityTile_avatar, -.mx_EntityTile_unknown .mx_EntityTile_name, -.mx_EntityTile_unknown .mx_EntityTile_name_hover -{ - opacity: 0.25; -} - - diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_EventTile.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_EventTile.scss deleted file mode 100644 index 48afc86df9..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_EventTile.scss +++ /dev/null @@ -1,502 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_EventTile { - max-width: 100%; - clear: both; - padding-top: 18px; - font-size: 14px; - position: relative; -} - -.mx_EventTile.mx_EventTile_info { - padding-top: 0px; -} - -.mx_EventTile_avatar { - position: absolute; - top: 14px; - left: 8px; - cursor: pointer; - z-index: 2; -} - -.mx_EventTile.mx_EventTile_info .mx_EventTile_avatar { - top: 8px; - left: 65px; -} - -.mx_EventTile_continuation { - padding-top: 0px ! important; -} - -.mx_EventTile .mx_SenderProfile { - color: $primary-fg-color; - font-size: 14px; - display: block; /* anti-zalgo, with overflow hidden */ - overflow-y: hidden; - cursor: pointer; - padding-left: 65px; /* left gutter */ - padding-bottom: 0px; - padding-top: 0px; - margin: 0px; - line-height: 22px; -} - -.mx_EventTile .mx_SenderProfile .mx_SenderProfile_name, -.mx_EventTile .mx_SenderProfile .mx_SenderProfile_aux { - opacity: 0.5; -} - -.mx_EventTile .mx_SenderProfile .mx_Flair { - opacity: 0.7; - margin-left: 5px; -} - -.mx_EventTile .mx_SenderProfile .mx_Flair img { - vertical-align: -2px; - margin-right: 2px; - border-radius: 8px; -} - -.mx_EventTile .mx_MessageTimestamp { - display: block; - visibility: hidden; - white-space: nowrap; - color: $event-timestamp-color; - font-size: 10px; - left: 0px; - width: 46px; /* 8 + 30 (avatar) + 8 */ - text-align: center; - position: absolute; -} - -.mx_EventTile_line { - position: relative; - /* ideally should be 100px, but 95px gives us a max thumbnail size of 800x600, which is nice */ - margin-right: 110px; - padding-left: 65px; /* left gutter */ - padding-top: 4px; - padding-bottom: 2px; - border-radius: 4px; - min-height: 24px; - line-height: 22px; -} - -.mx_EventTile_quote { - margin-right: 10px; -} - -.mx_EventTile_info .mx_EventTile_line { - padding-left: 83px; -} - -/* HACK to override line-height which is already marked important elsewhere */ -.mx_EventTile_bigEmoji.mx_EventTile_bigEmoji { - font-size: 48px ! important; - line-height: 48px ! important; -} - -/* this is used for the tile for the event which is selected via the URL. - * TODO: ultimately we probably want some transition on here. - */ -.mx_EventTile_selected > .mx_EventTile_line { - border-left: $accent-color 5px solid; - padding-left: 60px; - background-color: $event-selected-color; -} - -.mx_EventTile:hover .mx_EventTile_line:not(.mx_EventTile_quote), -.mx_EventTile.menu .mx_EventTile_line -{ - background-color: $event-selected-color; -} - -.mx_EventTile_searchHighlight { - background-color: $accent-color; - color: $accent-fg-color; - border-radius: 5px; - padding-left: 2px; - padding-right: 2px; - cursor: pointer; -} - -.mx_EventTile_searchHighlight a { - background-color: $accent-color; - color: $accent-fg-color; -} - -.mx_EventTile_encrypting { - color: $event-encrypting-color ! important; -} - -.mx_EventTile_sending { - color: $event-sending-color; -} - -.mx_EventTile_sending .mx_UserPill, -.mx_EventTile_sending .mx_RoomPill, -.mx_EventTile_sending .mx_emojione { - opacity: 0.5; -} - -.mx_EventTile_notSent { - color: $event-notsent-color; -} - -.mx_EventTile_redacted .mx_EventTile_line .mx_UnknownBody { - display: block; - width: 100%; - height: 22px; - width: 250px; - border-radius: 11px; - background: repeating-linear-gradient( - -45deg, - $event-redacted-fg-color, - $event-redacted-fg-color 3px, - transparent 3px, - transparent 6px - ); - box-shadow: 0px 0px 3px $event-redacted-border-color inset; -} - -.mx_EventTile_highlight, -.mx_EventTile_highlight .markdown-body - { - color: $warning-color; -} - -.mx_EventTile_contextual { - opacity: 0.4; -} - -.mx_EventTile_msgOption { - float: right; - text-align: right; - z-index: 1; - position: relative; - width: 90px; - - /* Hack to stop the height of this pushing the messages apart. - Replaces margin-top: -6px. This interacts better with a read - marker being in between. Content overflows. */ - height: 1px; - - margin-right: 10px; -} - -.mx_EventTile_msgOption a { - text-decoration: none; -} - -.mx_EventTile_last .mx_MessageTimestamp, -.mx_EventTile:hover .mx_MessageTimestamp, -.mx_EventTile.menu .mx_MessageTimestamp -{ - visibility: visible; -} - -.mx_MessagePanel_alwaysShowTimestamps .mx_MessageTimestamp { - visibility: visible; -} - -.mx_EventTile_selected > div > a > .mx_MessageTimestamp { - left: 3px; - width: auto; -} - -.mx_EventTile_editButton { - position: absolute; - display: inline-block; - visibility: hidden; - cursor: pointer; - top: 6px; - right: 6px; - width: 19px; - height: 19px; - background-image: url($edit-button-url); - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.mx_EventTile:hover .mx_EventTile_editButton, -.mx_EventTile.menu .mx_EventTile_editButton -{ - visibility: visible; -} - -.mx_EventTile.menu .mx_MessageTimestamp { - visibility: visible; -} - -.mx_EventTile_readAvatars { - position: relative; - display: inline-block; - width: 14px; - height: 14px; - top: 29px; -} - -.mx_EventTile_continuation .mx_EventTile_readAvatars, -.mx_EventTile_info .mx_EventTile_readAvatars, -.mx_EventTile_emote .mx_EventTile_readAvatars { - top: 7px; -} - -.mx_EventTile_readAvatars .mx_BaseAvatar { - position: absolute; - display: inline-block; -} - -.mx_EventTile_readAvatarRemainder { - color: $event-timestamp-color; - font-size: 11px; - position: absolute; -} - -/* all the overflow-y: hidden; are to trap Zalgos - - but they introduce an implicit overflow-x: auto. - so make that explicitly hidden too to avoid random - horizontal scrollbars occasionally appearing, like in - https://github.com/vector-im/vector-web/issues/1154 - */ -.mx_EventTile_content { - display: block; - overflow-y: hidden; - overflow-x: hidden; - margin-right: 34px; -} - -/* De-zalgoing */ -.mx_EventTile_body { - overflow-y: hidden; -} - -/* End to end encryption stuff */ - -.mx_EventTile_e2eIcon { - display: block; - position: absolute; - top: 9px; - left: 46px; - z-index: 2; - cursor: pointer; -} - -.mx_EventTile_12hr .mx_EventTile_e2eIcon { - padding-left: 5px; -} - -.mx_EventTile:hover.mx_EventTile_verified .mx_EventTile_line, -.mx_EventTile:hover.mx_EventTile_unverified .mx_EventTile_line { - padding-left: 60px; -} - -.mx_EventTile_selected.mx_EventTile_info .mx_EventTile_line, -.mx_EventTile:hover.mx_EventTile_verified.mx_EventTile_info .mx_EventTile_line, -.mx_EventTile:hover.mx_EventTile_unverified.mx_EventTile_info .mx_EventTile_line { - padding-left: 78px; -} - -.mx_EventTile:hover.mx_EventTile_verified .mx_EventTile_line { - border-left: $e2e-verified-color 5px solid; -} -.mx_EventTile:hover.mx_EventTile_unverified .mx_EventTile_line { - border-left: $e2e-unverified-color 5px solid; -} - -.mx_EventTile:hover.mx_EventTile_verified .mx_MessageTimestamp, -.mx_EventTile:hover.mx_EventTile_unverified .mx_MessageTimestamp { - left: 3px; - width: auto; -} - -/* -.mx_EventTile_verified .mx_EventTile_e2eIcon { - display: none; -} -*/ - -.mx_EventTile:hover.mx_EventTile_verified .mx_EventTile_e2eIcon, -.mx_EventTile:hover.mx_EventTile_unverified .mx_EventTile_e2eIcon { - display: block; - left: 41px; -} - -/* Various markdown overrides */ - -.mx_EventTile_content .markdown-body { - font-family: inherit ! important; - white-space: normal ! important; - line-height: inherit ! important; - color: inherit; // inherit the colour from the dark or light theme by default (but not for code blocks) - font-size: 14px; -} - -/* have to use overlay rather than auto otherwise Linux and Windows - Chrome gets very confused about vertical spacing: - https://github.com/vector-im/vector-web/issues/754 -*/ -.mx_EventTile_content .markdown-body pre { - overflow-x: overlay; - overflow-y: visible; -} - -.mx_EventTile_content .markdown-body code { - // deliberate constants as we're behind an invert filter - background-color: #f8f8f8; - color: #333; -} - -.mx_EventTile_copyButton { - position: absolute; - display: inline-block; - visibility: hidden; - cursor: pointer; - top: 6px; - right: 6px; - width: 19px; - height: 19px; - background-image: url($copy-button-url); -} - -.mx_EventTile_body pre { - position: relative; - border: 1px solid transparent; -} - -.mx_EventTile:hover .mx_EventTile_body pre -{ - border: 1px solid #e5e5e5; // deliberate constant as we're behind an invert filter -} - -.mx_EventTile_body pre:hover .mx_EventTile_copyButton -{ - visibility: visible; -} - -.mx_EventTile_content .markdown-body h1, -.mx_EventTile_content .markdown-body h2, -.mx_EventTile_content .markdown-body h3, -.mx_EventTile_content .markdown-body h4, -.mx_EventTile_content .markdown-body h5, -.mx_EventTile_content .markdown-body h6 -{ - font-family: inherit ! important; - color: inherit; -} - - -/* Make h1 and h2 the same size as h3. */ -.mx_EventTile_content .markdown-body h1, -.mx_EventTile_content .markdown-body h2 -{ - font-size: 1.5em; -} - -.mx_EventTile_content .markdown-body a { - color: $accent-color; -} - -.mx_EventTile_content .markdown-body .hljs { - display: inline ! important; -} - -/* end of overrides */ - -.mx_MatrixChat_useCompactLayout { - .mx_EventTile { - padding-top: 4px; - } - - .mx_EventTile.mx_EventTile_info { - // same as the padding for non-compact .mx_EventTile.mx_EventTile_info - padding-top: 0px; - font-size: 13px; - .mx_EventTile_line { - line-height: 20px; - } - .mx_EventTile_avatar { - top: 4px; - } - } - - .mx_EventTile .mx_SenderProfile { - font-size: 13px; - } - - .mx_EventTile.mx_EventTile_emote { - // add a bit more space for emotes so that avatars don't collide - padding-top: 8px; - .mx_EventTile_avatar { - top: 2px; - } - .mx_EventTile_line { - padding-top: 0px; - padding-bottom: 1px; - } - } - - .mx_EventTile.mx_EventTile_emote.mx_EventTile_continuation { - padding-top: 0; - .mx_EventTile_line { - padding-top: 0px; - padding-bottom: 0px; - } - } - - .mx_EventTile_line { - padding-top: 0px; - padding-bottom: 0px; - } - - .mx_EventTile_avatar { - top: 2px; - } - - .mx_EventTile_e2eIcon { - top: 7px; - } - - .mx_EventTile_editButton { - top: 3px; - } - - .mx_EventTile_readAvatars { - top: 27px; - } - - .mx_EventTile_continuation .mx_EventTile_readAvatars, - .mx_EventTile_emote .mx_EventTile_readAvatars { - top: 5px; - } - - .mx_EventTile_info .mx_EventTile_readAvatars { - top: 4px; - } - - .mx_RoomView_MessageList h2 { - margin-top: 6px; - } - - .mx_EventTile_content .markdown-body { - p, ul, ol, dl, blockquote, pre, table { - margin-bottom: 4px; // 1/4 of the non-compact margin-bottom - } - } -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_LinkPreviewWidget.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_LinkPreviewWidget.scss deleted file mode 100644 index 4495b142e6..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_LinkPreviewWidget.scss +++ /dev/null @@ -1,69 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_LinkPreviewWidget { - margin-top: 15px; - margin-right: 15px; - margin-bottom: 15px; - display: flex; - border-left: 4px solid $preview-widget-bar-color; - color: $preview-widget-fg-color; -} - -.mx_LinkPreviewWidget_image { - flex: 0 0 100px; - margin-left: 15px; - text-align: center; - cursor: pointer; -} - -.mx_LinkPreviewWidget_caption { - margin-left: 15px; - flex: 1 1 auto; -} - -.mx_LinkPreviewWidget_title { - display: inline; - font-weight: bold; - white-space: normal; -} - -.mx_LinkPreviewWidget_siteName { - display: inline; -} - -.mx_LinkPreviewWidget_description { - margin-top: 8px; - white-space: normal; - word-wrap: break-word; -} - -.mx_LinkPreviewWidget_cancel { - visibility: hidden; - cursor: pointer; - flex: 0 0 40px; -} - -.mx_LinkPreviewWidget:hover .mx_LinkPreviewWidget_cancel { - visibility: visible; -} - -.mx_MatrixChat_useCompactLayout { - .mx_LinkPreviewWidget { - margin-top: 6px; - margin-bottom: 6px; - } -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MemberDeviceInfo.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MemberDeviceInfo.scss deleted file mode 100644 index 5888820e0d..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MemberDeviceInfo.scss +++ /dev/null @@ -1,74 +0,0 @@ -/* -Copyright 2016 OpenMarket Ltd - -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. -*/ - -.mx_MemberDeviceInfo { - padding: 10px 0px; -} - -.mx_MemberDeviceInfo.mx_DeviceVerifyButtons { - padding: 6px 0; - display: flex; - flex-wrap: wrap; - justify-content: space-between; -} - -.mx_MemberDeviceInfo_textButton { - @mixin mx_DialogButton_small; - margin: 2px; - flex: 1; -} - -.mx_MemberDeviceInfo_textButton:hover { - @mixin mx_DialogButton_hover; -} - -.mx_MemberDeviceInfo_deviceId { - font-size: 13px; -} - -.mx_MemberDeviceInfo_deviceInfo { - margin-bottom: 10px; - padding-bottom: 10px; - border-bottom: 1px solid rgba(0,0,0,0.1); -} - -/* "Unblacklist" is too long for a regular button: make it wider and - reduce the padding. */ -.mx_EncryptedEventDialog .mx_MemberDeviceInfo_blacklist, -.mx_EncryptedEventDialog .mx_MemberDeviceInfo_unblacklist { - width: 8em; - padding-left: 1em; - padding-right: 1em; -} - -.mx_MemberDeviceInfo div.mx_MemberDeviceInfo_verified, -.mx_MemberDeviceInfo div.mx_MemberDeviceInfo_unverified, -.mx_MemberDeviceInfo div.mx_MemberDeviceInfo_blacklisted { - float: right; - padding-left: 1em; -} - -.mx_MemberDeviceInfo div.mx_MemberDeviceInfo_verified { - color: $e2e-verified-color; -} - -.mx_MemberDeviceInfo div.mx_MemberDeviceInfo_unverified { - color: $e2e-unverified-color; -} - -.mx_MemberDeviceInfo div.mx_MemberDeviceInfo_blacklisted { - color: $e2e-warning-color; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MemberInfo.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MemberInfo.scss deleted file mode 100644 index 5d47275efe..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MemberInfo.scss +++ /dev/null @@ -1,112 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_MemberInfo { - margin-top: 20px; - padding-right: 20px; - height: 100%; - overflow-y: auto; -} - -.mx_MemberInfo h2 { - margin-top: 6px; -} - -.mx_MemberInfo .mx_RoomTile_nameContainer { - width: 154px; -} - -.mx_MemberInfo .mx_RoomTile_badge { - display: none; -} - -.mx_MemberInfo .mx_RoomTile_name { - width: 160px; -} - -.mx_MemberInfo_cancel { - float: right; - margin-right: 10px; - cursor: pointer; -} - -.mx_MemberInfo_avatar { - clear: both; -} - -.mx_MemberInfo_avatar .mx_BaseAvatar { -} - -.mx_MemberInfo_avatar .mx_BaseAvatar.mx_BaseAvatar_image { - cursor: zoom-in; -} - -.mx_MemberInfo_profile { - margin-bottom: 16px; -} - -.mx_MemberInfo h3 { - text-transform: uppercase; - color: $h3-color; - font-weight: 600; - font-size: 13px; - margin-top: 16px; - margin-bottom: 14px; -} - -.mx_MemberInfo_profileField { - font-size: 13px; - position: relative; - background-color: $primary-bg-color; -} - -.mx_MemberInfo_buttons { - margin-bottom: 16px; -} - -.mx_MemberInfo_field { - cursor: pointer; - font-size: 13px; - color: $accent-color; - margin-left: 8px; - line-height: 23px; -} - -.mx_MemberInfo_createRoom { - cursor: pointer; -} - -.mx_MemberInfo_createRoom_label { - width: initial ! important; - cursor: pointer; -} - -.mx_MemberInfo label { - font-size: 13px; -} - -.mx_MemberInfo label .mx_MemberInfo_label_text { - display: inline-block; - max-width: 180px; - vertical-align: text-top; -} - -.mx_MemberInfo input[type="radio"] { - vertical-align: -2px; - margin-right: 5px; - margin-left: 8px; -} - diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MemberList.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MemberList.scss deleted file mode 100644 index 83fc70aefb..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MemberList.scss +++ /dev/null @@ -1,116 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_MemberList, -.mx_GroupMemberList, -.mx_GroupRoomList { - height: 100%; - - margin-top: 12px; - margin-right: 20px; - - flex: 1; - - display: flex; - - flex-direction: column; -} - -.mx_MemberList .mx_Spinner { - flex: 0 0 auto; -} - -.mx_MemberList_chevron { - position: absolute; - right: 35px; - margin-top: -15px; -} - -.mx_MemberList_border { - overflow-y: auto; - - order: 1; - flex: 1 1 0px; -} - -.mx_MemberList_query, -.mx_GroupMemberList_query, -.mx_GroupRoomList_query { - font-family: $font-family; - border-radius: 3px; - border: 1px solid $input-border-color; - padding: 9px; - color: $primary-fg-color; - background-color: $primary-bg-color; - margin-left: 3px; - font-size: 14px; - margin-bottom: 8px; - width: 189px; -} - -.mx_MemberList_query::-moz-placeholder, -.mx_GroupMemberList_query::-moz-placeholder, -.mx_GroupRoomList_query::-moz-placeholder { - color: $primary-fg-color; - opacity: 0.5; - font-size: 14px; -} - -.mx_MemberList_query::-webkit-input-placeholder, -.mx_GroupMemberList_query::-webkit-input-placeholder, -.mx_GroupRoomList_query::-webkit-input-placeholder { - color: $primary-fg-color; - opacity: 0.5; - font-size: 14px; -} - -.mx_MemberList_joined { - order: 2; - flex: 1 0 0; - - overflow-y: auto; -} - -/* -.mx_MemberList_invited { - order: 3; - flex: 0 0 100px; - overflow-y: auto; -} -*/ - -.mx_GroupMemberList_invited h2, -.mx_MemberList_invited h2 { - text-transform: uppercase; - color: $h3-color; - font-weight: 600; - font-size: 13px; - padding-left: 3px; - padding-right: 12px; - margin-top: 8px; - margin-bottom: 4px; -} - -/* we have to have display: table in order for the horizontal wrapping to work */ -.mx_MemberList_wrapper { - display: table; - table-layout: fixed; - width: 100%; -} - -.mx_MemberList_outerWrapper { - height: 0px; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss deleted file mode 100644 index 98be3885cc..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss +++ /dev/null @@ -1,240 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_MessageComposer_wrapper { - max-width: 960px; - vertical-align: middle; - margin: auto; - border-top: 1px solid $primary-hairline-color; - position: relative; -} - -.mx_MessageComposer_autocomplete_wrapper { - position: relative; - height: 0; -} - -.mx_MessageComposer_row { - display: flex; - flex-direction: row; - align-items: center; - width: 100%; -} - -.mx_MessageComposer .mx_MessageComposer_avatar { - padding-left: 10px; - padding-right: 28px; -} - -.mx_MessageComposer .mx_MessageComposer_avatar .mx_BaseAvatar { - display: block; -} - -.mx_MessageComposer_composecontrols { - width: 100%; -} - -.mx_MessageComposer_e2eIcon { - position: absolute; - left: 44px; -} - -.mx_MessageComposer_noperm_error { - width: 100%; - height: 60px; - font-style: italic; - color: $greyed-fg-color; - display: flex; - align-items: center; - justify-content: center; -} - -.mx_MessageComposer_input_wrapper { - flex: 1; - display: flex; - flex-direction: column; -} - -.mx_MessageComposer_input { - flex: 1; - vertical-align: middle; - display: flex; - flex-direction: column; - min-height: 60px; - justify-content: center; - align-items: flex-start; - font-size: 14px; - margin-right: 6px; -} - -@keyframes visualbell -{ - from { background-color: #faa } - to { background-color: $primary-bg-color } -} - -.mx_MessageComposer_input_error { - animation: 0.2s visualbell; -} - -.mx_MessageComposer_input_empty .public-DraftEditorPlaceholder-root { - display: none; -} - -.mx_MessageComposer_input .DraftEditor-root { - width: 100%; - flex: 1; - word-break: break-word; - max-height: 120px; - min-height: 21px; - overflow: auto; -} - -.mx_MessageComposer_input .DraftEditor-root .DraftEditor-editorContainer { - /* Ensure mx_UserPill and mx_RoomPill (see _RichText) are not obscured from the top */ - padding-top: 2px; -} - -.mx_MessageComposer .public-DraftStyleDefault-block { - overflow-x: hidden; -} - -.mx_MessageComposer_input blockquote { - color: $blockquote-fg-color; - margin: 0 0 16px; - padding: 0 15px; - border-left: 4px solid $blockquote-bar-color; -} - -.mx_MessageComposer_input pre.public-DraftStyleDefault-pre pre { - background-color: $rte-code-bg-color; - border-radius: 3px; - padding: 10px; -} - -.mx_MessageComposer_input textarea { - display: block; - width: 100%; - padding: 0px; - margin-top: 6px; - margin-bottom: 6px; - border: 0px; - resize: none; - outline: none; - box-shadow: none; - color: $primary-fg-color; - background-color: $primary-bg-color; - font-size: 14px; - max-height: 120px; - overflow: auto; - /* needed for FF */ - font-family: $font-family; -} - -/* hack for FF as vertical alignment of custom placeholder text is broken */ -.mx_MessageComposer_input textarea::-moz-placeholder { - line-height: 100%; - color: $accent-color; - opacity: 1.0; -} -.mx_MessageComposer_input textarea::-webkit-input-placeholder { - color: $accent-color; -} - -.mx_MessageComposer_upload, -.mx_MessageComposer_hangup, -.mx_MessageComposer_voicecall, -.mx_MessageComposer_videocall, -.mx_MessageComposer_apps { - /*display: table-cell;*/ - /*vertical-align: middle;*/ - /*padding-left: 10px;*/ - padding-right: 5px; - cursor: pointer; - padding-top: 4px; -} - -.mx_MessageComposer_upload object, -.mx_MessageComposer_hangup object, -.mx_MessageComposer_voicecall object, -.mx_MessageComposer_videocall object, -.mx_MessageComposer_apps object { - pointer-events: none; -} - -.mx_MessageComposer_formatting { - cursor: pointer; - margin: 0 11px; - width: 24px; - height: 18px; -} - -.mx_MessageComposer_formatbar_wrapper { - width: 100%; - background-color: $menu-bg-color; - box-shadow: inset 0 1px 0 0 rgba(0, 0, 0, 0.08); -} - -.mx_MessageComposer_formatbar { - margin: auto; - max-width: 960px; - display: flex; - - height: 30px; - - box-sizing: border-box; - padding-left: 62px; - - flex-direction: row; - align-items: center; - font-size: 10px; - color: $greyed-fg-color; -} - -.mx_MessageComposer_formatbar * { - margin-right: 4px; -} - -.mx_MessageComposer_format_button, -.mx_MessageComposer_formatbar_cancel, -.mx_MessageComposer_formatbar_markdown { - cursor: pointer; -} - -.mx_MessageComposer_formatbar_cancel { - margin-right: 22px; -} - -.mx_MessageComposer_formatbar_markdown { - margin-right: 64px; -} - -.mx_MessageComposer_input_markdownIndicator { - cursor: pointer; - height: 10px; - padding: 4px 4px 4px 0; - opacity: 0.8; -} - -.mx_MatrixChat_useCompactLayout { - .mx_MessageComposer_input { - min-height: 50px; - } - - .mx_MessageComposer_noperm_error { - height: 50px; - } -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_PinnedEventTile.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_PinnedEventTile.scss deleted file mode 100644 index ca790ef8f0..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_PinnedEventTile.scss +++ /dev/null @@ -1,67 +0,0 @@ -/* -Copyright 2017 Travis Ralston - -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. -*/ - -.mx_PinnedEventTile { - min-height: 40px; - margin-bottom: 5px; - width: 100%; - border-radius: 5px; // for the hover -} - -.mx_PinnedEventTile:hover { - background-color: $event-selected-color; -} - -.mx_PinnedEventTile .mx_PinnedEventTile_sender { - color: #868686; - font-size: 0.8em; - vertical-align: top; - display: block; - padding-bottom: 3px; -} - -.mx_PinnedEventTile .mx_EventTile_content { - margin-left: 50px; - position: relative; - top: 0; - left: 0; -} - -.mx_PinnedEventTile .mx_BaseAvatar { - float: left; - margin-right: 10px; -} - -.mx_PinnedEventTile:hover .mx_PinnedEventTile_actions { - display: block; -} - -.mx_PinnedEventTile_actions { - float: right; - margin-right: 10px; - display: none; -} - -.mx_PinnedEventTile_unpinButton { - display: inline-block; - cursor: pointer; - margin-left: 10px; -} - -.mx_PinnedEventTile_gotoButton { - display: inline-block; - font-size: 0.8em; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_PinnedEventsPanel.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_PinnedEventsPanel.scss deleted file mode 100644 index 663d5bdf6e..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_PinnedEventsPanel.scss +++ /dev/null @@ -1,37 +0,0 @@ -/* -Copyright 2017 Travis Ralston - -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. -*/ - -.mx_PinnedEventsPanel { - border-top: 1px solid $primary-hairline-color; -} - -.mx_PinnedEventsPanel_body { - max-height: 300px; - overflow-y: auto; - padding-bottom: 15px; -} - -.mx_PinnedEventsPanel_header { - margin: 0; - padding-top: 8px; - padding-bottom: 15px; -} - -.mx_PinnedEventsPanel_cancel { - margin: 12px; - float: right; - display: inline-block; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_PresenceLabel.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_PresenceLabel.scss deleted file mode 100644 index 682c849cee..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_PresenceLabel.scss +++ /dev/null @@ -1,20 +0,0 @@ -/* -Copyright 2016 OpenMarket Ltd - -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. -*/ - -.mx_PresenceLabel { - font-size: 11px; - opacity: 0.5; -} \ No newline at end of file diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_QuotePreview.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_QuotePreview.scss deleted file mode 100644 index 86fd79d473..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_QuotePreview.scss +++ /dev/null @@ -1,36 +0,0 @@ -.mx_QuotePreview { - position: absolute; - bottom: 0; - z-index: 1000; - width: 100%; - border: 1px solid $primary-hairline-color; - background: $primary-bg-color; - border-bottom: none; - border-radius: 4px 4px 0 0; - max-height: 50vh; - overflow: auto -} - -.mx_QuotePreview_section { - border-bottom: 1px solid $primary-hairline-color; -} - -.mx_QuotePreview_header { - margin: 12px; - color: $primary-fg-color; - font-weight: 400; - opacity: 0.4; -} - -.mx_QuotePreview_title { - float: left; -} - -.mx_QuotePreview_cancel { - float: right; - cursor: pointer; -} - -.mx_QuotePreview_clear { - clear: both; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_RoomHeader.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_RoomHeader.scss deleted file mode 100644 index 9c1349adbc..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_RoomHeader.scss +++ /dev/null @@ -1,245 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -/* add 20px to the height of the header when editing */ -.mx_RoomHeader_editing { - flex: 0 0 93px ! important; -} - -.mx_RoomHeader_wrapper { - max-width: 960px; - margin: auto; - height: 70px; - align-items: center; - display: flex; -} - -.mx_RoomHeader_leftRow { - margin-left: -2px; - order: 1; - flex: 1; - overflow: hidden; -} - -.mx_RoomHeader_spinner { - height: 36px; - order: 2; - padding-left: 12px; - padding-right: 12px; -} - -.mx_RoomHeader_textButton { - @mixin mx_DialogButton; - margin-right: 8px; - margin-top: -5px; - order: 2; -} - -.mx_RoomHeader_textButton:hover { - @mixin mx_DialogButton_hover; -} - -.mx_RoomHeader_textButton_danger { - background-color: $warning-color; -} - -.mx_RoomHeader_cancelButton { - order: 2; - cursor: pointer; - padding-left: 12px; - padding-right: 12px; -} - -.mx_RoomHeader_rightRow { - margin-top: 4px; - background-color: $primary-bg-color; - display: flex; - align-items: center; - order: 3; -} - -.mx_RoomHeader_info { - display: table-cell; - width: 100%; - vertical-align: middle; -} - -.mx_RoomHeader_simpleHeader { - line-height: 70px; - color: $primary-fg-color; - font-size: 22px; - font-weight: bold; - overflow: hidden; - margin-left: 63px; - text-overflow: ellipsis; - width: 100%; -} - -.mx_RoomHeader_simpleHeader .mx_RoomHeader_cancelButton { - float: right; -} - -.mx_RoomHeader_simpleHeader .mx_RoomHeader_icon { - margin-left: 14px; - margin-right: 24px; - vertical-align: -4px; -} - -.mx_RoomHeader_name { - vertical-align: middle; - width: 100%; - height: 31px; - overflow: hidden; - color: $primary-fg-color; - font-weight: bold; - font-size: 22px; - padding-left: 19px; - padding-right: 16px; - /* why isn't text-overflow working? */ - text-overflow: ellipsis; - border-bottom: 1px solid transparent; -} - -.mx_RoomHeader_nametext { - display: inline-block; -} - -.mx_RoomHeader_settingsHint { - color: $settings-grey-fg-color ! important; -} - -.mx_RoomHeader_searchStatus { - display: inline-block; - font-weight: normal; - opacity: 0.6; -} - -.mx_RoomHeader_settingsButton object { - pointer-events: none; -} - -.mx_RoomHeader_name, -.mx_RoomHeader_avatar, -.mx_RoomHeader_avatarPicker, -.mx_RoomHeader_avatarPicker_edit, -.mx_RoomHeader_avatarPicker_remove { - cursor: pointer; -} - -.mx_RoomHeader_avatarPicker_remove { - position: absolute; - top: -11px; - right: -9px; -} - -.mx_RoomHeader_name:hover div:not(.mx_RoomHeader_editable) { - color: $accent-color; -} - -.mx_RoomHeader_placeholder { - color: $settings-grey-fg-color ! important; -} - -.mx_RoomHeader_editable { - border-bottom: 1px solid $strong-input-border-color ! important; - min-width: 150px; - cursor: text; -} - -.mx_RoomHeader_editable:focus { - border-bottom: 1px solid $accent-color ! important; - outline: none; - box-shadow: none; -} - -.mx_RoomHeader_topic { - vertical-align: bottom; - float: left; - max-height: 38px; - color: $settings-grey-fg-color; - font-weight: 300; - font-size: 13px; - margin-left: 19px; - margin-right: 16px; - overflow: hidden; - text-overflow: ellipsis; - border-bottom: 1px solid transparent; - column-width: 960px; -} - -.mx_RoomHeader_avatar { - display: table-cell; - width: 48px; - height: 50px; - vertical-align: middle; -} - -.mx_RoomHeader_avatar .mx_BaseAvatar_image { - object-fit: cover; -} - -.mx_RoomHeader_avatarPicker { - margin-top: 23px; - position: relative; -} - -.mx_RoomHeader_avatarPicker_edit { - margin-left: 16px; - margin-top: 4px; -} - -.mx_RoomHeader_avatarPicker_edit > label { - cursor: pointer; -} - -.mx_RoomHeader_avatarPicker_edit > input { - display: none; -} - -.mx_RoomHeader_button { - margin-left: 12px; - cursor: pointer; -} - -.mx_RoomHeader_button object { - pointer-events: none; -} - -.mx_RoomHeader_voipButton { - display: table-cell; -} - -.mx_RoomHeader_voipButtons { - margin-top: 18px; -} - -.mx_RoomHeader_pinnedButton { - position: relative; -} - -.mx_RoomHeader_pinsIndicator { - position: absolute; - right: 0; - bottom: 4px; - width: 8px; - height: 8px; - border-radius: 8px; - background-color: $pinned-color; -} - -.mx_RoomHeader_pinsIndicatorUnread { - background-color: $pinned-unread-color; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_RoomList.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_RoomList.scss deleted file mode 100644 index d8a8d58a9c..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_RoomList.scss +++ /dev/null @@ -1,63 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2107 Vector Creations Ltd - -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. -*/ - -.mx_RoomList { - padding-bottom: 12px; - min-height: 400px; -} - -.mx_RoomList_expandButton { - margin-left: 8px; - cursor: pointer; - padding-left: 12px; - padding-right: 12px; -} - -/* Evil hacky override until Chrome fixes drop and drag table cells - and we can correctly fix horizontal wrapping in the sidebar again */ -.mx_RoomList_scrollbar .gm-scroll-view { - overflow-x: hidden ! important; - overflow-y: scroll ! important; -} - -/* Make sure the scrollbar is above the sticky headers from RoomList */ -.mx_RoomList_scrollbar .gm-scrollbar.-vertical { - z-index: 6; -} - -.mx_RoomList_emptySubListTip { - font-size: 13px; - margin-left: 18px; - margin-right: 18px; - margin-top: 8px; - margin-bottom: 7px; - padding: 5px; - border: 1px dashed $accent-color; - color: $primary-fg-color; - background-color: $droptarget-bg-color; - border-radius: 4px; - line-height: 16px; -} - -.mx_RoomList_emptySubListTip .mx_RoleButton { - vertical-align: -2px; -} - -.mx_RoomList_headerButtons { - position: absolute; - right: 60px; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_RoomPreviewBar.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_RoomPreviewBar.scss deleted file mode 100644 index 331eb582ea..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_RoomPreviewBar.scss +++ /dev/null @@ -1,58 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_RoomPreviewBar { - text-align: center; - height: 176px; - background-color: $event-selected-color; - align-items: center; - flex-direction: column; - justify-content: center; - display: flex; - background-color: $preview-bar-bg-color; - -webkit-align-items: center; -} - -.mx_RoomPreviewBar_wrapper { -} - -.mx_RoomPreviewBar_invite_text { - color: $primary-fg-color; -} - -.mx_RoomPreviewBar_join_text { - color: $warning-color; -} - -.mx_RoomPreviewBar_preview_text { - margin-top: 25px; - color: $settings-grey-fg-color; -} - -.mx_RoomPreviewBar_join_text a { - text-decoration: underline; - cursor: pointer; -} - -.mx_RoomPreviewBar_warning { - display: flex; - align-items: center; - padding: 8px; -} - -.mx_RoomPreviewBar_warningIcon { - padding: 12px; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_RoomSettings.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_RoomSettings.scss deleted file mode 100644 index 4013af4c7c..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_RoomSettings.scss +++ /dev/null @@ -1,247 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd -Copyright 2017 Vector Creations Ltd - -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. -*/ - -.mx_RoomSettings { - margin-left: 65px; - margin-bottom: 20px; -} - -.mx_RoomSettings_leaveButton, -.mx_RoomSettings_unbanButton { - @mixin mx_DialogButton; - position: relative; - margin-right: 8px; -} - -.mx_RoomSettings_leaveButton:hover, -.mx_RoomSettings_unbanButton:hover { - @mixin mx_DialogButton_hover; -} - -.mx_RoomSettings_integrationsButton_error { - position: relative; - cursor: not-allowed; -} -.mx_RoomSettings_integrationsButton_error img { - position: absolute; - right: -5px; - top: -5px; -} -.mx_RoomSettings_leaveButton, -.mx_RoomSettings_integrationsButton_error { - float: right; -} -.mx_RoomSettings_integrationsButton_error .mx_RoomSettings_integrationsButton_errorPopup { - display: none; -} -.mx_RoomSettings_integrationsButton_error:hover .mx_RoomSettings_integrationsButton_errorPopup { - display: inline; -} -.mx_RoomSettings_integrationsButton_errorPopup { - position: absolute; - top: 110%; - left: -125%; - width: 348%; - padding: 2%; - font-size: 10pt; - line-height: 1.5em; - border-radius: 5px; - background-color: $accent-color; - color: $accent-fg-color; - text-align: center; -} -.mx_RoomSettings_unbanButton { - display: inline; -} - -.mx_RoomSettings_e2eIcon { - padding-left: 4px; - padding-right: 7px; -} - -.mx_RoomSettings_leaveButton { - margin-right: 32px; -} - -.mx_RoomSettings_powerLevels { - display: table; -} - -.mx_RoomSettings_powerLevel { - display: table-row; -} - -.mx_RoomSettings_powerLevelKey, -.mx_RoomSettings_powerLevel .mx_PowerSelector { - display: table-cell; - padding-bottom: 5px; -} - -.mx_RoomSettings_powerLevelKey { - text-align: right; - padding-right: 0.3em; -} - -.mx_RoomSettings h3 { - text-transform: uppercase; - color: $h3-color; - font-weight: 600; - font-size: 13px; - margin-top: 36px; - margin-bottom: 10px; -} - -.mx_RoomSettings .mx_RoomSettings_toggles label { - margin-bottom: 8px; - display: block; -} - -.mx_RoomSettings .mx_RoomSettings_toggles input[type="checkbox"], -.mx_RoomSettings .mx_RoomSettings_toggles input[type="radio"] { - margin-right: 7px; -} - -.mx_RoomSettings .mx_RoomSettings_tags input[type="checkbox"] { - margin-left: 1em; - margin-right: 7px; -} - -.mx_RoomSettings .mx_RoomSettings_tags { - margin-bottom: 8px; -} - -.mx_RoomSettings .mx_RoomSettings_roomColor { - display: inline-block; - position: relative; - width: 37px; - height: 37px; - border: 1px solid #979797; - margin-right: 13px; - cursor: pointer; -} - -.mx_RoomSettings .mx_RoomSettings_roomColor_selected { - position: absolute; - left: 10px; - top: 4px; - cursor: default ! important; -} - -.mx_RoomSettings .mx_RoomSettings_roomColorPrimary { - height: 10px; - position: absolute; - bottom: 0px; - width: 100%; -} - -.mx_RoomSettings .mx_RoomSettings_aliasLabel { - margin-bottom: 8px; -} - -.mx_RoomSettings .mx_RoomSettings_aliasesTable { - margin-top: 12px; - margin-bottom: 0px; - margin-left: 56px; - display: table; -} - -.mx_RoomSettings .mx_RoomSettings_aliasesTableRow { - display: table-row; - margin-bottom: 16px; -} - -.mx_RoomSettings .mx_RoomSettings_alias { - max-width: 400px; - margin-bottom: 16px; - /* - commented out so margin applies - display: table-cell; */ -} - -.mx_RoomSettings .mx_RoomSettings_addAlias, -.mx_RoomSettings .mx_RoomSettings_deleteAlias { - display: table-cell; - padding-left: 0.5em; - position: relative; - cursor: pointer; -} - -.mx_RoomSettings .mx_RoomSettings_addAlias img, -.mx_RoomSettings .mx_RoomSettings_deleteAlias img { - visibility: hidden; -} - -.mx_RoomSettings .mx_RoomSettings_aliasesTableRow:hover .mx_RoomSettings_addAlias img, -.mx_RoomSettings .mx_RoomSettings_aliasesTableRow:hover .mx_RoomSettings_deleteAlias img { - visibility: visible; -} - -.mx_RoomSettings_warning { - color: $warning-color; - font-weight: bold; - margin-top: 8px; - margin-bottom: 8px; -} - -.mx_RoomSettings_editable { - border: 0px; - border-bottom: 1px solid $strong-input-border-color; - padding: 0px; - min-width: 240px; -} - -.mx_RoomSettings_editable:focus { - border-bottom: 1px solid $accent-color; - outline: none; - box-shadow: none; -} - -.mx_RoomSettings_deleteAlias, -.mx_RoomSettings_addAlias { - display: table-cell; - visibility: visible; -} - -.mx_RoomSettings_deleteAlias:hover, -.mx_RoomSettings_addAlias:hover { - visibility: visible; -} - -.mx_RoomSettings_aliasPlaceholder { - color: $settings-grey-fg-color; -} - -.mx_RoomSettings_buttons { - text-align: right; - margin-bottom: 16px; -} - -.mx_RoomSettings_button { - display: inline; - border: 0px; - height: 36px; - border-radius: 36px; - font-weight: 400; - font-size: 15px; - color: $accent-fg-color; - background-color: $accent-color; - width: auto; - margin: auto; - padding: 6px; - padding-left: 1em; - padding-right: 1em; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_RoomTile.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_RoomTile.scss deleted file mode 100644 index a59cd3e80b..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_RoomTile.scss +++ /dev/null @@ -1,182 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_RoomTile { - position: relative; - cursor: pointer; - font-size: 13px; - display: block; - height: 34px; - - background-color: $secondary-accent-color; -} - -.mx_RoomTile_tooltip { - display: inline-block; - position: relative; - top: -54px; - left: -12px; -} - - -.mx_RoomTile_nameContainer { - display: inline-block; - width: 180px; - height: 24px; -} - -.mx_RoomTile_avatar_container { - position: relative; -} - -.mx_RoomTile_avatar { - display: inline-block; - padding-top: 5px; - padding-bottom: 5px; - padding-left: 16px; - padding-right: 6px; - width: 24px; - height: 24px; - vertical-align: middle; -} - -.mx_RoomTile_dm { - display: block; - position: absolute; - bottom: 0; - right: -5px; - z-index: 2; -} - -.mx_RoomTile_name { - display: inline-block; - position: relative; - width: 165px; - vertical-align: middle; - padding-left: 6px; - padding-right: 6px; - padding-top: 2px; - padding-bottom: 3px; - color: $roomtile-name-color; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.mx_RoomTile_invite { -/* color: rgba(69, 69, 69, 0.5); */ -} - -.collapsed .mx_RoomTile_nameContainer { - width: 60px; /* colapsed panel width */ -} - -.collapsed .mx_RoomTile_name { - display: none; -} - -.collapsed .mx_RoomTile_badge { - top: 0px; - min-width: 12px; - border-radius: 16px; - padding: 0px 4px 0px 4px; - z-index: 3; -} - -/* Hide the bottom of speech bubble */ -.collapsed .mx_RoomTile_highlight .mx_RoomTile_badge:after { - display: none; -} - -/* This is the bottom of the speech bubble */ -.mx_RoomTile_highlight .mx_RoomTile_badge:after { - content: ""; - position: absolute; - display: block; - width: 0; - height: 0; - margin-left: 5px; - border-top: 5px solid $warning-color; - border-right: 7px solid transparent; -} - -.mx_RoomTile_badge { - display: inline-block; - min-width: 15px; - height: 15px; - position: absolute; - right: 8px; /*gutter */ - top: 9px; - border-radius: 8px; - color: $accent-fg-color; - font-weight: 600; - font-size: 10px; - text-align: center; - padding-top: 1px; - padding-left: 4px; - padding-right: 4px; -} - -.mx_RoomTile .mx_RoomTile_badge.mx_RoomTile_badgeButton, -.mx_RoomTile.mx_RoomTile_menuDisplayed .mx_RoomTile_badge { - letter-spacing: 0.1em; - opacity: 1; -} - -.mx_RoomTile.mx_RoomTile_noBadges .mx_RoomTile_badge.mx_RoomTile_badgeButton, -.mx_RoomTile.mx_RoomTile_menuDisplayed.mx_RoomTile_noBadges .mx_RoomTile_badge { - background-color: $neutral-badge-color; -} - -.mx_RoomTile_unreadNotify .mx_RoomTile_badge { - background-color: $accent-color; -} - -.mx_RoomTile_highlight .mx_RoomTile_badge { - background-color: $warning-color; -} - -.mx_RoomTile_unread, .mx_RoomTile_highlight { - font-weight: 800; -} - -.mx_RoomTile_selected { - background-color: $roomtile-selected-bg-color; -} - -.mx_DNDRoomTile { - transform: none; - transition: transform 0.2s; -} - -.mx_DNDRoomTile_dragging { - transform: scale(1.05, 1.05); -} - -.mx_RoomTile:focus { - filter: none ! important; - background-color: $roomtile-focused-bg-color; -} - -.mx_RoomTile .mx_RoomTile_name.mx_RoomTile_badgeShown { - width: 140px; -} - -.mx_RoomTile_arrow { - position: absolute; - right: 0px; -} - diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_SearchableEntityList.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_SearchableEntityList.scss deleted file mode 100644 index 37a663123d..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_SearchableEntityList.scss +++ /dev/null @@ -1,77 +0,0 @@ -/* -Copyright 2016 OpenMarket Ltd - -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. -*/ - -.mx_SearchableEntityList { - display: flex; - - flex-direction: column; -} - -.mx_SearchableEntityList_query { - font-family: $font-family; - border-radius: 3px; - border: 1px solid $input-border-color; - padding: 9px; - color: $primary-fg-color; - background-color: $primary-bg-color; - margin-left: 3px; - font-size: 15px; - margin-bottom: 8px; - width: 189px; -} - -.mx_SearchableEntityList_query::-moz-placeholder { - color: $primary-fg-color; - opacity: 0.5; - font-size: 12px; -} - -.mx_SearchableEntityList_query::-webkit-input-placeholder { - color: $primary-fg-color; - opacity: 0.5; - font-size: 12px; -} - -.mx_SearchableEntityList_listWrapper { - flex: 1; - - overflow-y: auto; -} - -.mx_SearchableEntityList_list { - display: table; - table-layout: fixed; - width: 100%; -} - -.mx_SearchableEntityList_list .mx_EntityTile_chevron { - display: none; -} - -.mx_SearchableEntityList_hrWrapper { - width: 100%; - flex: 0 0 auto; -} - -.mx_SearchableEntityList hr { - height: 1px; - border: 0px; - color: $primary-fg-color; - background-color: $primary-fg-color; - margin-right: 15px; - margin-top: 11px; - margin-bottom: 11px; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_TopUnreadMessagesBar.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_TopUnreadMessagesBar.scss deleted file mode 100644 index 1ee56d9532..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_TopUnreadMessagesBar.scss +++ /dev/null @@ -1,53 +0,0 @@ -/* -Copyright 2016 OpenMarket Ltd - -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. -*/ - -.mx_TopUnreadMessagesBar { - margin: auto; /* centre horizontally */ - max-width: 960px; - padding-top: 10px; - padding-bottom: 10px; - border-bottom: 1px solid $primary-hairline-color; -} - -.mx_TopUnreadMessagesBar_scrollUp { - display: inline; - cursor: pointer; - text-decoration: underline; -} - -.mx_TopUnreadMessagesBar_scrollUp img { - padding-left: 10px; - padding-right: 31px; - vertical-align: middle; -} - -.mx_TopUnreadMessagesBar_scrollUp span { - opacity: 0.5; -} - -.mx_TopUnreadMessagesBar_close { - float: right; - padding-right: 14px; - padding-top: 3px; - cursor: pointer; -} - -.mx_MatrixChat_useCompactLayout { - .mx_TopUnreadMessagesBar { - padding-top: 4px; - padding-bottom: 4px; - } -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/settings/_DevicesPanel.scss b/src/skins/vector/css/matrix-react-sdk/views/settings/_DevicesPanel.scss deleted file mode 100644 index e4856531d9..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/settings/_DevicesPanel.scss +++ /dev/null @@ -1,51 +0,0 @@ -/* -Copyright 2016 OpenMarket Ltd - -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. -*/ - -.mx_DevicesPanel { - display: table; - table-layout: fixed; - width: 880px; - border-spacing: 2px; -} - -.mx_DevicesPanel_header { - display: table-header-group; - font-weight: bold; -} - -.mx_DevicesPanel_header > div { - display: table-cell; -} - -.mx_DevicesPanel_header .mx_DevicesPanel_deviceLastSeen { - width: 30%; -} - -.mx_DevicesPanel_header .mx_DevicesPanel_deviceButtons { - width: 20%; -} - -.mx_DevicesPanel_device { - display: table-row; -} - -.mx_DevicesPanel_device > div { - display: table-cell; -} - -.mx_DevicesPanel_myDevice { - font-weight: bold; -} \ No newline at end of file diff --git a/src/skins/vector/css/matrix-react-sdk/views/settings/_IntegrationsManager.scss b/src/skins/vector/css/matrix-react-sdk/views/settings/_IntegrationsManager.scss deleted file mode 100644 index 93ee0e20fe..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/settings/_IntegrationsManager.scss +++ /dev/null @@ -1,31 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_IntegrationsManager .mx_Dialog { - width: 60%; - height: 70%; - overflow: hidden; - padding: 0px; - max-width: initial; - max-height: initial; -} - -.mx_IntegrationsManager iframe { - background-color: #fff; - border: 0px; - width: 100%; - height: 100%; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/voip/_CallView.scss b/src/skins/vector/css/matrix-react-sdk/views/voip/_CallView.scss deleted file mode 100644 index deb89a837c..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/voip/_CallView.scss +++ /dev/null @@ -1,25 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_CallView_voice { - background-color: $accent-color; - color: $accent-fg-color; - cursor: pointer; - text-align: center; - padding: 6px; - font-weight: bold; - font-size: 13px; -} \ No newline at end of file diff --git a/src/skins/vector/css/matrix-react-sdk/views/voip/_IncomingCallbox.scss b/src/skins/vector/css/matrix-react-sdk/views/voip/_IncomingCallbox.scss deleted file mode 100644 index 64eac25d01..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/voip/_IncomingCallbox.scss +++ /dev/null @@ -1,69 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_IncomingCallBox { - text-align: center; - border: 1px solid #a4a4a4; - border-radius: 8px; - background-color: $primary-bg-color; - position: fixed; - z-index: 1000; - padding: 6px; - margin-top: -3px; - margin-left: -20px; - width: 200px; -} - -.mx_IncomingCallBox_chevron { - padding: 12px; - position: absolute; - left: -21px; - top: 0px; -} - -.mx_IncomingCallBox_title { - padding: 6px; - font-weight: bold; -} - -.mx_IncomingCallBox_buttons { - display: flex; -} - -.mx_IncomingCallBox_buttons_cell { - vertical-align: middle; - padding: 6px; - flex: 1; -} - -.mx_IncomingCallBox_buttons_decline, -.mx_IncomingCallBox_buttons_accept { - vertical-align: middle; - width: 80px; - height: 36px; - line-height: 36px; - border-radius: 36px; - color: $accent-fg-color; - margin: auto; -} - -.mx_IncomingCallBox_buttons_decline { - background-color: $voip-decline-color; -} - -.mx_IncomingCallBox_buttons_accept { - background-color: $voip-accept-color; -} diff --git a/src/skins/vector/css/matrix-react-sdk/views/voip/_VideoView.scss b/src/skins/vector/css/matrix-react-sdk/views/voip/_VideoView.scss deleted file mode 100644 index feb60f4763..0000000000 --- a/src/skins/vector/css/matrix-react-sdk/views/voip/_VideoView.scss +++ /dev/null @@ -1,49 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_VideoView { - width: 100%; - position: relative; - z-index: 30; -} - -.mx_VideoView video { - width: 100%; -} - -.mx_VideoView_remoteVideoFeed { - width: 100%; - background-color: #000; - z-index: 50; -} - -.mx_VideoView_localVideoFeed { - width: 25%; - height: 25%; - position: absolute; - left: 10px; - bottom: 10px; - z-index: 100; -} - -.mx_VideoView_localVideoFeed video { - width: auto; - height: 100%; -} - -.mx_VideoView_localVideoFeed.mx_VideoView_localVideoFeed_flipped video { - transform: scale(-1, 1); -} diff --git a/src/skins/vector/css/rethemendex.sh b/src/skins/vector/css/rethemendex.sh deleted file mode 100755 index a7d9a657ac..0000000000 --- a/src/skins/vector/css/rethemendex.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash - -cd `dirname $0` - -{ - echo "// autogenerated by rethemendex.sh" - - find . \! \( -path ./themes -prune \) -iname _\*.scss | - fgrep -v _components.scss | LC_ALL=C sort | - while read i; do - echo "@import \"$i\";" - done -} > _components.scss diff --git a/src/skins/vector/css/themes/_base.scss b/src/skins/vector/css/themes/_base.scss deleted file mode 100644 index 35fc1a7908..0000000000 --- a/src/skins/vector/css/themes/_base.scss +++ /dev/null @@ -1,180 +0,0 @@ -/* Open Sans lacks combining diacritics, so these will fall through - to the next font. Helevetica's diacritics however do not combine - nicely with Open Sans (on OSX, at least) and result in a huge - horizontal mess. Arial empirically gets it right, hence prioritising - Arial here. */ -$font-family: 'Open Sans', Arial, Helvetica, Sans-Serif; - -// typical text (dark-on-white in light skin) -$primary-fg-color: #454545; -$primary-bg-color: #ffffff; - -// used for dialog box text -$light-fg-color: #747474; - -// used for focusing form controls -$focus-bg-color: #dddddd; - -// button UI (white-on-green in light skin) -$accent-fg-color: #ffffff; -$accent-color: #76CFA6; - -$selection-fg-color: $primary-bg-color; - -$focus-brightness: 125%; - -// red warning colour -$warning-color: #ff0064; -$mention-user-pill-bg-color: #ff0064; -$other-user-pill-bg-color: rgba(0, 0, 0, 0.1); - -// pinned events indicator -$pinned-unread-color: #ff0064; // $warning-color -$pinned-color: #888; - -// informational plinth -$info-plinth-bg-color: #f7f7f7; -$info-plinth-fg-color: #888; - -$preview-bar-bg-color: #f7f7f7; - -// left-panel style muted accent color -$secondary-accent-color: #eaf5f0; -$tertiary-accent-color: #d3efe1; - -// used by RoomDirectory permissions -$plinth-bg-color: $secondary-accent-color; - -// used by RoomDropTarget -$droptarget-bg-color: rgba(255,255,255,0.5); - -// used by AddressSelector -$selected-color: $secondary-accent-color; - -// selected for hoverover & selected event tiles -$event-selected-color: #f7f7f7; - -// used for the hairline dividers in RoomView -$primary-hairline-color: #e5e5e5; - -// used for the border of input text fields -$input-border-color: #f0f0f0; - -// apart from login forms, which have stronger border -$strong-input-border-color: #c7c7c7; - -// used for UserSettings EditableText -$input-underline-color: rgba(151, 151, 151, 0.5); -$input-fg-color: rgba(74, 74, 74, 0.9); - -// context menus -$menu-border-color: rgba(187, 187, 187, 0.5); -$menu-bg-color: #f6f6f6; - -$avatar-initial-color: #ffffff; -$avatar-bg-color: #ffffff; - -$h3-color: #3d3b39; - -$dialog-background-bg-color: #e9e9e9; -$lightbox-background-bg-color: #000; - -$greyed-fg-color: #888; - -$neutral-badge-color: #dbdbdb; - -$preview-widget-bar-color: #ddd; -$preview-widget-fg-color: $greyed-fg-color; - -$blockquote-bar-color: #ddd; -$blockquote-fg-color: #777; - -$settings-grey-fg-color: #a2a2a2; - -$voip-decline-color: #f48080; -$voip-accept-color: #80f480; - -$rte-bg-color: #e9e9e9; -$rte-code-bg-color: rgba(0, 0, 0, 0.04); -$rte-room-pill-color: #aaa; - -// ******************** - -$roomtile-name-color: rgba(69, 69, 69, 0.8); -$roomtile-selected-bg-color: rgba(255, 255, 255, 0.8); -$roomtile-focused-bg-color: rgba(255, 255, 255, 0.9); - -$roomsublist-background: #badece; -$roomsublist-label-fg-color: $h3-color; -$roomsublist-label-bg-color: $tertiary-accent-color; -$roomsublist-chevron-color: $accent-color; - -$panel-divider-color: rgba(118, 207, 166, 0.2); - -// ******************** - -$widget-menu-bar-bg-color: $tertiary-accent-color; - -// ******************** - -// event tile lifecycle -$event-encrypting-color: #abddbc; -$event-sending-color: #ddd; -$event-notsent-color: #f44; - -// event redaction -$event-redacted-fg-color: #e2e2e2; -$event-redacted-border-color: #cccccc; - -// event timestamp -$event-timestamp-color: #acacac; - -$edit-button-url: "../../img/icon_context_message.svg"; -$copy-button-url: "../../img/icon_copy_message.svg"; - -// e2e -$e2e-verified-color: #76cfa5; // N.B. *NOT* the same as $accent-color -$e2e-unverified-color: #e8bf37; -$e2e-warning-color: #ba6363; - -// presence -$presence-online: #60de00; -$presence-unavailable: #deb800; -$presence-offline: #b7b7b7; - -/*** ImageView ***/ -$lightbox-bg-color: #454545; -$lightbox-fg-color: #ffffff; -$lightbox-border-color: #ffffff; - -// unused? -$progressbar-color: #000; - -// ***** Mixins! ***** - -@define-mixin mx_DialogButton { - /* align images in buttons (eg spinners) */ - vertical-align: middle; - border: 0px; - border-radius: 36px; - font-family: $font-family; - font-size: 14px; - color: $accent-fg-color; - background-color: $accent-color; - width: auto; - padding: 7px; - padding-left: 1.5em; - padding-right: 1.5em; - cursor: pointer; - display: inline-block; - outline: none; -} - -@define-mixin mx_DialogButton_hover { -} - -@define-mixin mx_DialogButton_small { - @mixin mx_DialogButton; - font-size: 15px; - padding: 0px 1.5em 0px 1.5em; -} diff --git a/src/skins/vector/css/themes/_dark.scss b/src/skins/vector/css/themes/_dark.scss deleted file mode 100644 index b0ca76b8b6..0000000000 --- a/src/skins/vector/css/themes/_dark.scss +++ /dev/null @@ -1,199 +0,0 @@ - -// typical text (dark-on-white in light skin) -$primary-fg-color: #dddddd; -$primary-bg-color: #2d2d2d; - -// used for focusing form controls -$focus-bg-color: #101010; - -// used for dialog box text -$light-fg-color: #747474; - -// button UI (white-on-green in light skin) -$accent-fg-color: $primary-bg-color; -$accent-color: #76CFA6; - -$selection-fg-color: $primary-fg-color; - -$focus-brightness: 200%; - -// red warning colour -$warning-color: #ff0064; - -// groups -$info-plinth-bg-color: #454545; - -$other-user-pill-bg-color: rgba(255, 255, 255, 0.1); - -$preview-bar-bg-color: #333; - -// left-panel style muted accent color -$secondary-accent-color: $primary-bg-color; -$tertiary-accent-color: #454545; - -// stop the tinter trying to change the secondary accent color -// by overriding the key to something untintable -// XXX: this is a bit of a hack. -#mx_theme_secondaryAccentColor { - color: #c0ffee ! important; -} - -#mx_theme_tertiaryAccentColor { - color: #c0ffee ! important; -} - -// used by RoomDirectory permissions -$plinth-bg-color: #474747; - -// used by RoomDropTarget -$droptarget-bg-color: rgba(45,45,45,0.5); - -// used by AddressSelector -$selected-color: #000000; - -// selected for hoverover & selected event tiles -$event-selected-color: #353535; - -// used for the hairline dividers in RoomView -$primary-hairline-color: #474747; - -// used for the border of input text fields -$input-border-color: #3a3a3a; - -// apart from login forms, which have stronger border -$strong-input-border-color: #656565; - -// used for UserSettings EditableText -$input-underline-color: $primary-fg-color; -$input-fg-color: $primary-fg-color; - -// context menus -$menu-border-color: rgba(187, 187, 187, 0.5); -$menu-bg-color: #373737; - -$avatar-initial-color: #2d2d2d; -$avatar-bg-color: #ffffff; - -$h3-color: $primary-fg-color; - -$dialog-background-bg-color: #000; -$lightbox-background-bg-color: #000; - -$greyed-fg-color: #888; - -$neutral-badge-color: #888; - -$preview-widget-bar-color: $menu-bg-color; -$preview-widget-fg-color: $greyed-fg-color; - -$blockquote-bar-color: #ddd; -$blockquote-fg-color: #777; - -$settings-grey-fg-color: #a2a2a2; - -$voip-decline-color: #f48080; -$voip-accept-color: #80f480; - -$rte-bg-color: #353535; -$rte-code-bg-color: #000; - -// ******************** - -$roomtile-name-color: rgba(186, 186, 186, 0.8); -$roomtile-selected-bg-color: #333; -$roomtile-focused-bg-color: rgba(255, 255, 255, 0.2); - -$roomsublist-background: #222; -$roomsublist-label-fg-color: $h3-color; -$roomsublist-label-bg-color: $tertiary-accent-color; -$roomsublist-chevron-color: $accent-color; - -$panel-divider-color: rgba(118, 207, 166, 0.2); - -// ******************** - -$widget-menu-bar-bg-color: $tertiary-accent-color; - -// ******************** - -// event tile lifecycle -$event-encrypting-color: rgba(171, 221, 188, 0.4); -$event-sending-color: #888; -$event-notsent-color: #f44; - -// event redaction -$event-redacted-fg-color: #606060; -$event-redacted-border-color: #000000; - -// event timestamp -$event-timestamp-color: #acacac; - -$edit-button-url: "../../img/icon_context_message_dark.svg"; -$copy-button-url: "../../img/icon_copy_message_dark.svg"; - -// e2e -$e2e-verified-color: #76cfa5; // N.B. *NOT* the same as $accent-color -$e2e-unverified-color: #e8bf37; -$e2e-warning-color: #ba6363; - -/*** ImageView ***/ -$lightbox-bg-color: #454545; -$lightbox-fg-color: #ffffff; -$lightbox-border-color: #ffffff; - -// unused? -$progressbar-color: #000; - -// XXX: copypasted from _base in order to pick up the right FG color... -@define-mixin mx_DialogButton { - /* align images in buttons (eg spinners) */ - vertical-align: middle; - border: 0px; - border-radius: 36px; - font-family: $font-family; - font-size: 14px; - color: $accent-fg-color; - background-color: $accent-color; - width: auto; - padding: 7px; - padding-left: 1.5em; - padding-right: 1.5em; - cursor: pointer; - display: inline-block; - outline: none; -} - -// Nasty hacks to apply a filter to arbitrary monochrome artwork to make it -// better match the theme. Typically applied to dark grey 'off' buttons or -// light grey 'on' buttons. -.mx_filterFlipColor { - filter: invert(1); -} - -.gm-scrollbar .thumb { - filter: invert(1); -} - -// markdown overrides: -.mx_EventTile_content .markdown-body pre:hover { - border-color: #808080 !important; // inverted due to rules below -} -.mx_EventTile_content .markdown-body { - pre, code { - filter: invert(1); - } - - pre code { - filter: none; - } - - table { - tr { - background-color: #000000; - } - - tr:nth-child(2n) { - background-color: #080808; - } - } -} diff --git a/src/skins/vector/css/themes/dark.scss b/src/skins/vector/css/themes/dark.scss deleted file mode 100644 index 5a37d0368e..0000000000 --- a/src/skins/vector/css/themes/dark.scss +++ /dev/null @@ -1,3 +0,0 @@ -@import "_base.scss"; -@import "_dark.scss"; -@import "../_components.scss"; diff --git a/src/skins/vector/css/themes/light.scss b/src/skins/vector/css/themes/light.scss deleted file mode 100644 index ea0f93d5a3..0000000000 --- a/src/skins/vector/css/themes/light.scss +++ /dev/null @@ -1,2 +0,0 @@ -@import "_base.scss"; -@import "../_components.scss"; \ No newline at end of file diff --git a/src/skins/vector/css/vector-web/_fonts.scss b/src/skins/vector/css/vector-web/_fonts.scss deleted file mode 100644 index 52ac95b569..0000000000 --- a/src/skins/vector/css/vector-web/_fonts.scss +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Open Sans - * Includes extended Latin, Greek, Cyrillic and Vietnamese character sets - */ - -/* the 'src' links are relative to the bundle.css, which is in a subdirectory. - */ -@font-face { - font-family: 'Open Sans'; - src: url('../../fonts/Open_Sans/OpenSans-Regular.ttf') format('truetype'); - font-weight: 400; - font-style: normal; -} - -@font-face { - font-family: 'Open Sans'; - src: url('../../fonts/Open_Sans/OpenSans-Italic.ttf') format('truetype'); - font-weight: 400; - font-style: italic; -} - -@font-face { - font-family: 'Open Sans'; - src: url('../../fonts/Open_Sans/OpenSans-Semibold.ttf') format('truetype'); - font-weight: 600; - font-style: normal; -} - -@font-face { - font-family: 'Open Sans'; - src: url('../../fonts/Open_Sans/OpenSans-SemiboldItalic.ttf') format('truetype'); - font-weight: 600; - font-style: italic; -} - -@font-face { - font-family: 'Open Sans'; - src: url('../../fonts/Open_Sans/OpenSans-Bold.ttf') format('truetype'); - font-weight: 700; - font-style: normal; -} - -@font-face { - font-family: 'Open Sans'; - src: url('../../fonts/Open_Sans/OpenSans-BoldItalic.ttf') format('truetype'); - font-weight: 700; - font-style: italic; -} - -/* - * Fira Mono - * Used for monospace copy, i.e. code - */ - -@font-face { - font-family: 'Fira Mono'; - src: url('../../fonts/Fira_Mono/FiraMono-Regular.ttf') format('truetype'); - font-weight: 400; - font-style: normal; -} - -@font-face { - font-family: 'Fira Mono'; - src: url('../../fonts/Fira_Mono/FiraMono-Bold.ttf') format('truetype'); - font-weight: 700; - font-style: normal; -} diff --git a/src/skins/vector/css/vector-web/structures/_CompatibilityPage.scss b/src/skins/vector/css/vector-web/structures/_CompatibilityPage.scss deleted file mode 100644 index f3f032c975..0000000000 --- a/src/skins/vector/css/vector-web/structures/_CompatibilityPage.scss +++ /dev/null @@ -1,19 +0,0 @@ -.mx_CompatibilityPage { - width: 100%; - height: 100%; - background-color: #e55; -} - -.mx_CompatibilityPage_box { - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - margin: auto; - width: 500px; - height: 300px; - border: 1px solid; - padding: 10px; - background-color: #fcc; -} \ No newline at end of file diff --git a/src/skins/vector/css/vector-web/structures/_HomePage.scss b/src/skins/vector/css/vector-web/structures/_HomePage.scss deleted file mode 100644 index cdac1bcc8a..0000000000 --- a/src/skins/vector/css/vector-web/structures/_HomePage.scss +++ /dev/null @@ -1,35 +0,0 @@ -/* -Copyright 2016 OpenMarket Ltd -Copyright 2017 Vector Creations Ltd - -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. -*/ - -.mx_HomePage { - max-width: 960px; - width: 100%; - height: 100%; - margin-left: auto; - margin-right: auto; -} - -.mx_HomePage iframe { - display: block; - width: 100%; - height: 100%; - border: 0px; -} - -.mx_HomePage_body { -// margin-left: 63px; -} diff --git a/src/skins/vector/css/vector-web/structures/_LeftPanel.scss b/src/skins/vector/css/vector-web/structures/_LeftPanel.scss deleted file mode 100644 index 96ed5878ac..0000000000 --- a/src/skins/vector/css/vector-web/structures/_LeftPanel.scss +++ /dev/null @@ -1,129 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_LeftPanel { - position: relative; - - display: flex; - flex-direction: column; -} - -.mx_LeftPanel_container { - display: flex; - /* LeftPanel 235px */ - flex: 0 0 235px; -} - -.mx_LeftPanel_container.mx_LeftPanel_container_hasTagPanel { - /* TagPanel 60px + LeftPanel 235px */ - flex: 0 0 295px; -} - -.mx_LeftPanel_container_collapsed { - /* Collapsed LeftPanel 60px */ - flex: 0 0 60px; -} - -.mx_LeftPanel_container_collapsed.mx_LeftPanel_container_hasTagPanel { - /* TagPanel 60px + Collapsed LeftPanel 60px */ - flex: 0 0 120px; -} - -.mx_LeftPanel_hideButton { - position: absolute; - top: 10px; - right: 0px; - padding: 8px; - cursor: pointer; -} - -.mx_LeftPanel_callView { - -} - -.mx_LeftPanel .mx_RoomList_scrollbar { - order: 1; - - flex: 1 1 0; - - overflow-y: auto; - z-index: 6; -} - -.mx_LeftPanel.collapsed .mx_BottomLeftMenu { - flex: 0 0 160px; - margin-bottom: 9px; -} - -.mx_LeftPanel .mx_BottomLeftMenu { - order: 3; - - border-top: 1px solid $panel-divider-color; - margin-left: 16px; /* gutter */ - margin-right: 16px; /* gutter */ - flex: 0 0 60px; - z-index: 1; -} - -.mx_LeftPanel .mx_BottomLeftMenu_options { - margin-top: 18px; -} - -.mx_BottomLeftMenu_options object { - pointer-events: none; -} - -.collapsed .mx_RoleButton { - margin-right: 0px ! important; - padding-top: 3px ! important; - padding-bottom: 3px ! important; -} - -.mx_BottomLeftMenu_options > div { - display: inline-block; -} - -.mx_BottomLeftMenu_options .mx_RoleButton { - margin-left: 0px; - margin-right: 10px; - height: 30px; -} - -.mx_BottomLeftMenu_options .mx_BottomLeftMenu_settings { - float: right; -} - -.mx_BottomLeftMenu_options .mx_BottomLeftMenu_settings .mx_RoleButton { - margin-right: 0px; -} - -.mx_LeftPanel.collapsed .mx_BottomLeftMenu_settings { - float: none; -} - -.mx_MatrixChat_useCompactLayout { - .mx_LeftPanel .mx_BottomLeftMenu { - flex: 0 0 50px; - } - - .mx_LeftPanel.collapsed .mx_BottomLeftMenu { - flex: 0 0 160px; - } - - .mx_LeftPanel .mx_BottomLeftMenu_options { - margin-top: 12px; - } -} diff --git a/src/skins/vector/css/vector-web/structures/_RightPanel.scss b/src/skins/vector/css/vector-web/structures/_RightPanel.scss deleted file mode 100644 index 85057410ce..0000000000 --- a/src/skins/vector/css/vector-web/structures/_RightPanel.scss +++ /dev/null @@ -1,128 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_RightPanel { - position: relative; - - display: flex; - flex-direction: column; -} - -.mx_RightPanel_header { - order: 1; - - border-bottom: 1px solid $primary-hairline-color; - margin-right: 20px; - - flex: 0 0 70px; -} - -/** Fixme - factor this out with the main header **/ - -.mx_RightPanel_headerButtonGroup { - margin-top: 6px; - display: flex; - width: 100%; - background-color: $primary-bg-color; - margin-left: 0px; -} - -.mx_RightPanel_headerButton { - cursor: pointer; - flex: 0 0 auto; - vertical-align: top; - padding-left: 4px; - padding-right: 5px; - text-align: center; - position: relative; -} - -.mx_RightPanel_headerButton object { - pointer-events: none; - padding-bottom: 3px; -} - -.mx_RightPanel_headerButton_highlight { - width: 25px; - height: 5px; - border-radius: 5px; - background-color: $accent-color; - opacity: 0.2; -} - -.mx_RightPanel_headerButton_badge { - font-size: 11px; - color: $accent-color; - font-weight: bold; - padding-bottom: 2px; -} - -.mx_RightPanel_collapsebutton { - flex: 1; - text-align: right; - margin-top: 20px; -} - -.mx_RightPanel .mx_MemberList, -.mx_RightPanel .mx_MemberInfo, -.mx_RightPanel .mx_GroupRoomList, -.mx_RightPanel_blank { - order: 2; - flex: 1 1 0; -} - -.mx_RightPanel_footer { - order: 3; - - border-top: 1px solid $primary-hairline-color; - margin-right: 20px; - - flex: 0 0 60px; -} - -.mx_RightPanel_footer .mx_RightPanel_invite { - font-size: 14px; - color: $primary-fg-color; - padding-top: 13px; - padding-left: 5px; - cursor: pointer; - display: flex; - align-items: center; -} - -.collapsed .mx_RightPanel_footer .mx_RightPanel_invite { - display: none; -} - -.mx_RightPanel_invite .mx_RightPanel_icon object { - pointer-events: none; -} - -.mx_RightPanel_invite .mx_RightPanel_message { - padding-left: 10px; - line-height: 18px; -} - -.mx_MatrixChat_useCompactLayout { - .mx_RightPanel_footer { - flex: 0 0 50px; - } - - .mx_RightPanel_footer .mx_RightPanel_invite { - line-height: 25px; - padding-top: 8px; - } -} diff --git a/src/skins/vector/css/vector-web/structures/_RoomDirectory.scss b/src/skins/vector/css/vector-web/structures/_RoomDirectory.scss deleted file mode 100644 index 9cd3e7284c..0000000000 --- a/src/skins/vector/css/vector-web/structures/_RoomDirectory.scss +++ /dev/null @@ -1,131 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_RoomDirectory { - max-width: 960px; - width: 100%; - margin-left: auto; - margin-right: auto; - margin-bottom: 12px; - color: $primary-fg-color; - word-break: break-word; - - display: flex; - - flex-direction: column; -} - -.mx_RoomDirectory .mx_RoomHeader_simpleHeader { - margin-left: 0px; -} - -.mx_RoomDirectory_list { - flex: 1; - - display: flex; - - flex-direction: column; -} - -.mx_RoomDirectory_list .mx_RoomView_messageListWrapper { - justify-content: flex-start; -} - -.mx_RoomDirectory_listheader { - display: table; - table-layout: fixed; - width: 100%; - margin-top: 12px; - margin-bottom: 12px; - border-spacing: 5px; -} - -.mx_RoomDirectory_searchbox { - display: table-cell; - vertical-align: middle; -} - -.mx_RoomDirectory_listheader .mx_NetworkDropdown { - display: table-cell; - width: 200px; -} - -.mx_RoomDirectory_tableWrapper { - overflow-y: auto; - flex: 1 1 0; -} - -.mx_RoomDirectory_table { - font-size: 14px; - color: $primary-fg-color; - width: 100%; - text-align: left; - table-layout: fixed; -} - -.mx_RoomDirectory_roomAvatar { - width: 24px; - padding-left: 12px; - padding-right: 24px; - vertical-align: top; -} - -.mx_RoomDirectory_roomDescription { - padding-bottom: 16px; -} - -.mx_RoomDirectory_name { - display: inline-block; - font-weight: 600; -} - -.mx_RoomDirectory_perms { - display: inline-block; -} - -.mx_RoomDirectory_perm { - display: inline; - padding-left: 5px; - padding-right: 5px; - margin-right: 5px; - height: 15px; - border-radius: 11px; - background-color: $plinth-bg-color; - text-transform: uppercase; - font-weight: 600; - font-size: 11px; - color: $accent-color; -} - -.mx_RoomDirectory_topic { - cursor: initial; -} - -.mx_RoomDirectory_alias { - font-size: 12px; - color: $settings-grey-fg-color; -} - -.mx_RoomDirectory_roomMemberCount { - text-align: right; - width: 100px; - padding-right: 10px; -} - -.mx_RoomDirectory_table tr { - padding-bottom: 10px; - cursor: pointer; -} diff --git a/src/skins/vector/css/vector-web/structures/_RoomSubList.scss b/src/skins/vector/css/vector-web/structures/_RoomSubList.scss deleted file mode 100644 index a2863460ad..0000000000 --- a/src/skins/vector/css/vector-web/structures/_RoomSubList.scss +++ /dev/null @@ -1,244 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_RoomSubList { - display: table; - table-layout: fixed; - width: 100%; - - background-color: $roomsublist-background; -} - -.mx_RoomSubList_labelContainer { - height: 31px; /* mx_RoomSubList_label height including border */ - width: 235px; /* LHS Panel width */ - position: relative; -} - -.mx_RoomSubList_label { - position: relative; - text-transform: uppercase; - color: $roomsublist-label-fg-color; - font-weight: 600; - font-size: 12px; - width: 203px; /* padding + width = LHS Panel width */ - height: 19px; /* height + padding = 31px = mx_RoomSubList_label height */ - padding-left: 16px; /* gutter */ - padding-right: 16px; /* gutter */ - padding-top: 6px; - padding-bottom: 6px; - cursor: pointer; - background-color: $secondary-accent-color; -} - -.mx_RoomSubList_label.mx_RoomSubList_fixed { - position: fixed; - top: 0; - z-index: 5; - /* pointer-events: none; */ -} - -.collapsed .mx_RoomSubList_label { - height: 17px; - width: 28px; /* collapsed LHS Panel width */ -} - -.collapsed .mx_RoomSubList_labelContainer { - width: 28px; /* collapsed LHS Panel width */ -} - -.mx_RoomSubList_roomCount { - display: inline-block; - font-size: 12px; - font-weight: normal; - color: $accent-color; - padding-left: 5px; - text-transform: none; -} - -.collapsed .mx_RoomSubList_roomCount { - display: none; -} - -.mx_RoomSubList_badge { - display: inline-block; - min-width: 15px; - height: 15px; - position: absolute; - right: 8px; /*gutter */ - top: 7px; - border-radius: 8px; - color: $accent-fg-color; - font-weight: 600; - font-size: 10px; - text-align: center; - padding-top: 1px; - padding-left: 4px; - padding-right: 4px; - background-color: $accent-color; -} - -/* -.collapsed .mx_RoomSubList_badge { - display: none; -} -*/ - -.mx_RoomSubList_badgeHighlight { - background-color: $warning-color; -} - -/* This is the bottom of the speech bubble */ -.mx_RoomSubList_badgeHighlight:after { - content: ""; - position: absolute; - display: block; - width: 0; - height: 0; - margin-left: 5px; - border-top: 5px solid $warning-color; - border-right: 7px solid transparent; -} - -/* Hide the bottom of speech bubble */ -.collapsed .mx_RoomSubList_badgeHighlight:after { - display: none; -} - -.mx_RoomSubList_chevron { - pointer-events: none; - position: absolute; - right: 41px; - top: 11px; -} - -.mx_RoomSubList_chevronDown { - width: 0; - height: 0; - border-left: 5px solid transparent; - border-right: 5px solid transparent; - border-top: 6px solid $roomsublist-chevron-color; -} - -.mx_RoomSubList_chevronUp { - width: 0; - height: 0; - border-left: 5px solid transparent; - border-right: 5px solid transparent; - border-bottom: 6px solid $roomsublist-chevron-color; -} - -.mx_RoomSubList_chevronRight { - width: 0; - height: 0; - border-top: 5px solid transparent; - border-left: 6px solid $roomsublist-chevron-color; - border-bottom: 5px solid transparent; -} - -/* The overflow section */ -.mx_RoomSubList_ellipsis { - display: block; - line-height: 11px; - height: 18px; - position: relative; - cursor: pointer; - font-size: 13px; - - background-color: $secondary-accent-color; -} - -.collapsed .mx_RoomSubList_ellipsis { - height: 20px; -} - -.mx_RoomSubList_line { - display: inline-block; - width: 159px; - border-top: dotted 2px $accent-color; - vertical-align: middle; -} - -.collapsed .mx_RoomSubList_line { - display: none; -} - -.mx_RoomSubList_more { - display: inline-block; - text-transform: uppercase; - font-size: 10px; - font-weight: 600; - text-align: left; - color: $accent-color; - padding-left: 7px; - padding-right: 7px; - padding-left: 7px; - vertical-align: middle; -} - -.collapsed .mx_RoomSubList_more { - display: none; -} - -.mx_RoomSubList_moreBadge { - display: inline-block; - min-width: 15px; - height: 13px; - position: absolute; - right: 8px; /*gutter */ - top: -2px; - border-radius: 8px; - border: solid 1px $accent-color; - color: $accent-fg-color; - font-weight: 600; - font-size: 10px; - text-align: center; - padding-top: 1px; - padding-left: 3px; - padding-right: 3px; - background-color: $primary-bg-color; - vertical-align: middle; -} - -.mx_RoomSubList_moreBadge.mx_RoomSubList_moreBadgeNotify { - background-color: $accent-color; - border: 0; - padding-top: 3px; - padding-left: 4px; - padding-right: 4px; -} - -.mx_RoomSubList_moreBadge.mx_RoomSubList_moreBadgeHighlight { - background-color: $warning-color; - border: 0; - padding-top: 3px; - padding-left: 4px; - padding-right: 4px; -} - -.collapsed .mx_RoomSubList_moreBadge { - position: static; - margin-left: 16px; - margin-top: 2px; -} - -.mx_RoomSubList_ellipsis .mx_RoomSubList_chevronDown { - position: relative; - top: 4px; - left: 2px; -} - - diff --git a/src/skins/vector/css/vector-web/structures/_ViewSource.scss b/src/skins/vector/css/vector-web/structures/_ViewSource.scss deleted file mode 100644 index a4c7dcf58a..0000000000 --- a/src/skins/vector/css/vector-web/structures/_ViewSource.scss +++ /dev/null @@ -1,23 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_ViewSource pre { - text-align: left; - font-size: 12px; - padding: 0.5em 1em 0.5em 1em; - word-wrap: break-word; - white-space: pre-wrap; -} diff --git a/src/skins/vector/css/vector-web/views/context_menus/_MessageContextMenu.scss b/src/skins/vector/css/vector-web/views/context_menus/_MessageContextMenu.scss deleted file mode 100644 index 85e8080c88..0000000000 --- a/src/skins/vector/css/vector-web/views/context_menus/_MessageContextMenu.scss +++ /dev/null @@ -1,25 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_MessageContextMenu_field { - padding: 3px 6px 3px 6px; - cursor: pointer; - white-space: nowrap; -} - -.mx_MessageContextMenu_field.mx_MessageContextMenu_fieldSet { - font-weight: bold; -} diff --git a/src/skins/vector/css/vector-web/views/context_menus/_PresenceContextMenuOption.scss b/src/skins/vector/css/vector-web/views/context_menus/_PresenceContextMenuOption.scss deleted file mode 100644 index bfe81125e0..0000000000 --- a/src/skins/vector/css/vector-web/views/context_menus/_PresenceContextMenuOption.scss +++ /dev/null @@ -1,42 +0,0 @@ -/* -Copyright 2017 Travis Ralston - -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. -*/ -.mx_PresenceContextMenuOption_indicator { - width: 10px; - height: 10px; - border-radius: 10px; - display: inline-block; - margin-right: 5px; -} - -.mx_PresenceContextMenuOption_indicator.mx_PresenceContextMenuOption_indicator_online { - background-color: $presence-online; -} - -.mx_PresenceContextMenuOption_indicator.mx_PresenceContextMenuOption_indicator_unavailable { - background-color: $presence-unavailable; -} - -.mx_PresenceContextMenuOption_indicator.mx_PresenceContextMenuOption_indicator_offline { - background-color: $presence-offline; -} - -.mx_PresenceContextMenuOption { - padding: 2px; -} - -.mx_PresenceContextMenuOption.mx_PresenceContextMenuOption_current { - font-weight: 700; -} diff --git a/src/skins/vector/css/vector-web/views/context_menus/_RoomTileContextMenu.scss b/src/skins/vector/css/vector-web/views/context_menus/_RoomTileContextMenu.scss deleted file mode 100644 index 598f8ac249..0000000000 --- a/src/skins/vector/css/vector-web/views/context_menus/_RoomTileContextMenu.scss +++ /dev/null @@ -1,114 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_RoomTileContextMenu_tag_field, .mx_RoomTileContextMenu_leave { - padding-top: 8px; - padding-right: 20px; - padding-bottom: 8px; - cursor: pointer; - white-space: nowrap; - display: flex; - align-items: center; - line-height: 16px; -} - -.mx_RoomTileContextMenu_tag_field.mx_RoomTileContextMenu_tag_fieldSet { - font-weight: bold; -} - -.mx_RoomTileContextMenu_tag_field.mx_RoomTileContextMenu_tag_fieldSet .mx_RoomTileContextMenu_tag_icon { - display: none; -} - -.mx_RoomTileContextMenu_tag_field.mx_RoomTileContextMenu_tag_fieldSet .mx_RoomTileContextMenu_tag_icon_set { - display: inline-block; -} - -.mx_RoomTileContextMenu_tag_field.mx_RoomTileContextMenu_tag_fieldDisabled { - color: rgba(0, 0, 0, 0.2); -} - -.mx_RoomTileContextMenu_tag_icon { - padding-right: 8px; - padding-left: 4px; - display: inline-block -} - -.mx_RoomTileContextMenu_tag_icon_set { - padding-right: 8px; - padding-left: 4px; - display: none; -} - -.mx_RoomTileContextMenu_separator { - margin-top: 0; - margin-bottom: 0; - border-bottom-style: none; - border-left-style: none; - border-right-style: none; - border-top-style: solid; - border-top-width: 1px; - border-color: $menu-border-color; -} - -.mx_RoomTileContextMenu_leave { - color: $warning-color; -} - -.mx_RoomTileContextMenu_tag_fieldSet .mx_RoomTileContextMenu_tag_icon { - /* Something to indicate that the icon is the set tag */ -} - -.mx_RoomTileContextMenu_notif_picker { - position: absolute; - top: 16px; - left: 5px; -} - -.mx_RoomTileContextMenu_notif_field { - padding-top: 4px; - padding-right: 6px; - padding-bottom: 10px; - padding-left: 8px; /* 20px */ - cursor: pointer; - white-space: nowrap; - display: flex; - align-items: center; -} - -.mx_RoomTileContextMenu_notif_field.mx_RoomTileContextMenu_notif_fieldSet { - font-weight: bold; -} - -.mx_RoomTileContextMenu_notif_field.mx_RoomTileContextMenu_notif_fieldDisabled { - color: rgba(0, 0, 0, 0.2); -} - -.mx_RoomTileContextMenu_notif_icon { - padding-right: 4px; - padding-left: 4px; -} - -.mx_RoomTileContextMenu_notif_activeIcon { - display: inline-block; - opacity: 0; - position: relative; - left: -5px; -} - -.mx_RoomTileContextMenu_notif_fieldSet .mx_RoomTileContextMenu_notif_activeIcon { - opacity: 1; -} diff --git a/src/skins/vector/css/vector-web/views/context_menus/_TagTileContextMenu.scss b/src/skins/vector/css/vector-web/views/context_menus/_TagTileContextMenu.scss deleted file mode 100644 index 759b92bd68..0000000000 --- a/src/skins/vector/css/vector-web/views/context_menus/_TagTileContextMenu.scss +++ /dev/null @@ -1,44 +0,0 @@ -/* -Copyright 2018 New Vector Ltd - -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. -*/ - -.mx_TagTileContextMenu_item { - padding-top: 8px; - padding-right: 20px; - padding-bottom: 8px; - cursor: pointer; - white-space: nowrap; - display: flex; - align-items: center; - line-height: 16px; -} - - -.mx_TagTileContextMenu_item_icon { - padding-right: 8px; - padding-left: 4px; - display: inline-block -} - -.mx_TagTileContextMenu_separator { - margin-top: 0; - margin-bottom: 0; - border-bottom-style: none; - border-left-style: none; - border-right-style: none; - border-top-style: solid; - border-top-width: 1px; - border-color: $menu-border-color; -} diff --git a/src/skins/vector/css/vector-web/views/dialogs/_ChangelogDialog.scss b/src/skins/vector/css/vector-web/views/dialogs/_ChangelogDialog.scss deleted file mode 100644 index 460a5f94b1..0000000000 --- a/src/skins/vector/css/vector-web/views/dialogs/_ChangelogDialog.scss +++ /dev/null @@ -1,24 +0,0 @@ -/* -Copyright 2016 Aviral Dasgupta - -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. -*/ - -.mx_ChangelogDialog_content { - max-height: 300px; - overflow: auto; -} - -.mx_ChangelogDialog_li { - padding: 0.2em; -} diff --git a/src/skins/vector/css/vector-web/views/dialogs/_DevtoolsDialog.scss b/src/skins/vector/css/vector-web/views/dialogs/_DevtoolsDialog.scss deleted file mode 100644 index 8918373ecf..0000000000 --- a/src/skins/vector/css/vector-web/views/dialogs/_DevtoolsDialog.scss +++ /dev/null @@ -1,166 +0,0 @@ -/* -Copyright 2017 Michael Telatynski <7t3chguy@gmail.com> - -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. -*/ - -.mx_DevTools_RoomStateExplorer_button, .mx_DevTools_RoomStateExplorer_query { - margin-bottom: 10px; -} - -.mx_DevTools_label_left { - float: left; -} - -.mx_DevTools_label_right { - float: right; -} - -.mx_DevTools_label_bottom { - clear: both; - border-bottom: 1px solid #e5e5e5; -} - -.mx_DevTools_inputRow -{ - display: table-row; -} - -.mx_DevTools_inputLabelCell -{ - padding-bottom: 21px; - display: table-cell; - font-weight: bold; - padding-right: 24px; -} - -.mx_DevTools_inputCell { - display: table-cell; - padding-bottom: 21px; - width: 240px; -} - -.mx_DevTools_inputCell input -{ - display: inline-block; - border: 0; - border-bottom: 1px solid $input-underline-color; - padding: 0; - width: 240px; - color: $input-fg-color; - font-family: 'Open Sans', Helvetica, Arial, Sans-Serif; - font-size: 16px; -} - -.mx_DevTools_tgl { - display: none; - - // add default box-sizing for this scope - &, - &:after, - &:before, - & *, - & *:after, - & *:before, - & + .mx_DevTools_tgl-btn { - box-sizing: border-box; - &::selection { - background: none; - } - } - - + .mx_DevTools_tgl-btn { - outline: 0; - display: block; - width: 7em; - height: 2em; - position: relative; - cursor: pointer; - user-select: none; - &:after, - &:before { - position: relative; - display: block; - content: ""; - width: 50%; - height: 100%; - } - - &:after { - left: 0; - } - - &:before { - display: none; - } - } - - &:checked + .mx_DevTools_tgl-btn:after { - left: 50%; - } -} - -.mx_DevTools_tgl-flip { - + .mx_DevTools_tgl-btn { - padding: 2px; - transition: all .2s ease; - font-family: sans-serif; - perspective: 100px; - &:after, - &:before { - display: inline-block; - transition: all .4s ease; - width: 100%; - text-align: center; - position: absolute; - line-height: 2em; - font-weight: bold; - color: #fff; - top: 0; - left: 0; - backface-visibility: hidden; - border-radius: 4px; - } - - &:after { - content: attr(data-tg-on); - background: #02C66F; - transform: rotateY(-180deg); - } - - &:before { - background: #FF3A19; - content: attr(data-tg-off); - } - - &:active:before { - transform: rotateY(-20deg); - } - } - - &:checked + .mx_DevTools_tgl-btn { - &:before { - transform: rotateY(180deg); - } - - &:after { - transform: rotateY(0); - left: 0; - background: #7FC6A6; - } - - &:active:after { - transform: rotateY(20deg); - } - } -} diff --git a/src/skins/vector/css/vector-web/views/dialogs/_SetEmailDialog.scss b/src/skins/vector/css/vector-web/views/dialogs/_SetEmailDialog.scss deleted file mode 100644 index 588f10c9cb..0000000000 --- a/src/skins/vector/css/vector-web/views/dialogs/_SetEmailDialog.scss +++ /dev/null @@ -1,36 +0,0 @@ -/* -Copyright 2017 Vector Creations Ltd - -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. -*/ - -.mx_SetEmailDialog_email_input { - border-radius: 3px; - border: 1px solid $input-border-color; - padding: 9px; - color: $input-fg-color; - background-color: $primary-bg-color; - font-size: 15px; - width: 100%; - max-width: 280px; - margin-bottom: 10px; -} - -.mx_SetEmailDialog_email_input:focus { - outline: none; - box-shadow: none; - border: 1px solid $accent-color; -} - -.mx_SetEmailDialog_email_input_placeholder { -} diff --git a/src/skins/vector/css/vector-web/views/dialogs/_SetPasswordDialog.scss b/src/skins/vector/css/vector-web/views/dialogs/_SetPasswordDialog.scss deleted file mode 100644 index 28a8b7c9d7..0000000000 --- a/src/skins/vector/css/vector-web/views/dialogs/_SetPasswordDialog.scss +++ /dev/null @@ -1,35 +0,0 @@ -/* -Copyright 2017 Vector Creations Ltd - -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. -*/ - -.mx_SetPasswordDialog_change_password input { - border-radius: 3px; - border: 1px solid $input-border-color; - padding: 9px; - color: $primary-fg-color; - background-color: $primary-bg-color; - font-size: 15px; - width: 100%; - max-width: 280px; - margin-bottom: 10px; -} - -.mx_SetPasswordDialog_change_password_button { - margin-top: 68px; -} - -.mx_SetPasswordDialog .mx_Dialog_content { - margin-bottom: 0px; -} diff --git a/src/skins/vector/css/vector-web/views/directory/_NetworkDropdown.scss b/src/skins/vector/css/vector-web/views/directory/_NetworkDropdown.scss deleted file mode 100644 index 9850379597..0000000000 --- a/src/skins/vector/css/vector-web/views/directory/_NetworkDropdown.scss +++ /dev/null @@ -1,84 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_NetworkDropdown { - position: relative; -} - -.mx_NetworkDropdown_input { - position: relative; - border-radius: 3px; - border: 1px solid $strong-input-border-color; - font-weight: 300; - font-size: 13px; - user-select: none; -} - -.mx_NetworkDropdown_arrow { - border-color: $primary-fg-color transparent transparent; - border-style: solid; - border-width: 5px 5px 0; - display: block; - height: 0; - position: absolute; - right: 10px; - top: 14px; - width: 0 -} - -.mx_NetworkDropdown_networkoption { - height: 35px; - line-height: 35px; - padding-left: 8px; - padding-right: 8px; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -.mx_NetworkDropdown_networkoption img { - margin: 5px; - width: 25px; - vertical-align: middle; -} - -input.mx_NetworkDropdown_networkoption, input.mx_NetworkDropdown_networkoption:focus { - border: 0; - padding-top: 0; - padding-bottom: 0; -} - -.mx_NetworkDropdown_menu { - position: absolute; - left: -1px; - right: -1px; - top: 100%; - z-index: 2; - margin: 0; - padding: 0px; - border-radius: 3px; - border: 1px solid $accent-color; - background-color: $primary-bg-color; -} - -.mx_NetworkDropdown_menu .mx_NetworkDropdown_networkoption:hover { - background-color: $focus-bg-color; -} - -.mx_NetworkDropdown_menu_network { - font-weight: bold; -} - diff --git a/src/skins/vector/css/vector-web/views/elements/_ImageView.scss b/src/skins/vector/css/vector-web/views/elements/_ImageView.scss deleted file mode 100644 index 8ed0698a72..0000000000 --- a/src/skins/vector/css/vector-web/views/elements/_ImageView.scss +++ /dev/null @@ -1,134 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -/* This has got to be the most fragile piece of CSS ever written. - But empirically it works on Chrome/FF/Safari - */ - -.mx_ImageView { - display: flex; - width: 100%; - height: 100%; - align-items: center; -} - -.mx_ImageView_lhs { - order: 1; - flex: 1 1 10%; - min-width: 60px; - // background-color: #080; - // height: 20px; -} - -.mx_ImageView_content { - order: 2; - /* min-width hack needed for FF */ - min-width: 0px; - height: 90%; - flex: 15 15 0; - display: flex; - align-items: center; - justify-content: center; -} - -.mx_ImageView_content img { - max-width: 100%; - /* XXX: max-height interacts badly with flex on Chrome and doesn't relayout properly until you refresh */ - max-height: 100%; - /* object-fit hack needed for Chrome due to Chrome not re-laying-out until you refresh */ - object-fit: contain; - /* background-image: url('../../img/trans.png'); */ - pointer-events: all; -} - -.mx_ImageView_labelWrapper { - position: absolute; - top: 0px; - right: 0px; - height: 100%; - overflow: auto; - pointer-events: all; -} - -.mx_ImageView_label { - text-align: left; - display: flex; - justify-content: center; - flex-direction: column; - padding-left: 30px; - padding-right: 30px; - min-height: 100%; - max-width: 240px; - color: $lightbox-fg-color; -} - -.mx_ImageView_cancel { - position: absolute; - top: 0px; - right: 0px; - padding: 35px; - cursor: pointer; -} - -.mx_ImageView_name { - font-size: 18px; - margin-bottom: 6px; - word-wrap: break-word; -} - -.mx_ImageView_metadata { - font-size: 15px; - opacity: 0.5; -} - -.mx_ImageView_download { - display: table; - margin-top: 24px; - margin-bottom: 6px; - border-radius: 5px; - background-color: $lightbox-bg-color; - font-size: 14px; - padding: 9px; - border: 1px solid $lightbox-border-color; -} - -.mx_ImageView_size { - font-size: 11px; -} - -.mx_ImageView_link { - color: $lightbox-fg-color ! important; - text-decoration: none ! important; -} - -.mx_ImageView_button { - font-size: 15px; - opacity: 0.5; - margin-top: 18px; - cursor: pointer; -} - -.mx_ImageView_shim { - height: 30px; -} - -.mx_ImageView_rhs { - order: 3; - flex: 1 1 10%; - min-width: 300px; - // background-color: #800; - // height: 20px; -} diff --git a/src/skins/vector/css/vector-web/views/elements/_InlineSpinner.scss b/src/skins/vector/css/vector-web/views/elements/_InlineSpinner.scss deleted file mode 100644 index 612b6209c6..0000000000 --- a/src/skins/vector/css/vector-web/views/elements/_InlineSpinner.scss +++ /dev/null @@ -1,24 +0,0 @@ -/* -Copyright 2017 New Vector Ltd. - -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. -*/ - -.mx_InlineSpinner { - display: inline; -} - -.mx_InlineSpinner img { - margin: 0px 6px; - vertical-align: -3px; -} diff --git a/src/skins/vector/css/vector-web/views/elements/_Spinner.scss b/src/skins/vector/css/vector-web/views/elements/_Spinner.scss deleted file mode 100644 index aea5737918..0000000000 --- a/src/skins/vector/css/vector-web/views/elements/_Spinner.scss +++ /dev/null @@ -1,28 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_Spinner { - display: flex; - align-items: center; - justify-content: center; - width: 100%; - height: 100%; - flex: 1; -} - -.mx_MatrixChat_middlePanel .mx_Spinner { - height: auto; -} \ No newline at end of file diff --git a/src/skins/vector/css/vector-web/views/elements/_SyntaxHighlight.scss b/src/skins/vector/css/vector-web/views/elements/_SyntaxHighlight.scss deleted file mode 100644 index e97401a160..0000000000 --- a/src/skins/vector/css/vector-web/views/elements/_SyntaxHighlight.scss +++ /dev/null @@ -1,21 +0,0 @@ -/* -Copyright 2017 Michael Telatynski <7t3chguy@gmail.com> - -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. -*/ - -.mx_SyntaxHighlight { - /* inhibit hljs styling */ - background: none !important; - color: $light-fg-color !important; -} diff --git a/src/skins/vector/css/vector-web/views/globals/_MatrixToolbar.scss b/src/skins/vector/css/vector-web/views/globals/_MatrixToolbar.scss deleted file mode 100644 index be69b15f37..0000000000 --- a/src/skins/vector/css/vector-web/views/globals/_MatrixToolbar.scss +++ /dev/null @@ -1,62 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_MatrixToolbar { - background-color: $accent-color; - color: $accent-fg-color; - - display: flex; - align-items: center; -} - -.mx_MatrixToolbar_warning { - margin-left: 16px; - margin-right: 8px; - margin-top: -2px; -} - -.mx_MatrixToolbar_content { - flex: 1; -} - -.mx_MatrixToolbar_link -{ - color: $accent-fg-color ! important; - text-decoration: underline ! important; - cursor: pointer; -} - -.mx_MatrixToolbar_clickable { - cursor: pointer; -} - -.mx_MatrixToolbar_close { - cursor: pointer; -} - -.mx_MatrixToolbar_close img { - display: block; - float: right; - margin-right: 10px; -} - -.mx_MatrixToolbar_action { - margin-right: 16px; -} - -.mx_MatrixToolbar_changelog { - white-space: pre; -} \ No newline at end of file diff --git a/src/skins/vector/css/vector-web/views/messages/_DateSeparator.scss b/src/skins/vector/css/vector-web/views/messages/_DateSeparator.scss deleted file mode 100644 index f676d24bef..0000000000 --- a/src/skins/vector/css/vector-web/views/messages/_DateSeparator.scss +++ /dev/null @@ -1,25 +0,0 @@ -/* -Copyright 2017 Vector Creations Ltd - -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. -*/ - -.mx_DateSeparator { - clear: both; - margin-top: 32px; - margin-bottom: 8px; - margin-left: 63px; - padding-bottom: 6px; - border-bottom: 1px solid $primary-hairline-color; -} - diff --git a/src/skins/vector/css/vector-web/views/messages/_MessageTimestamp.scss b/src/skins/vector/css/vector-web/views/messages/_MessageTimestamp.scss deleted file mode 100644 index e21189c59e..0000000000 --- a/src/skins/vector/css/vector-web/views/messages/_MessageTimestamp.scss +++ /dev/null @@ -1,18 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_MessageTimestamp { -} diff --git a/src/skins/vector/css/vector-web/views/messages/_SenderProfile.scss b/src/skins/vector/css/vector-web/views/messages/_SenderProfile.scss deleted file mode 100644 index 060709b82e..0000000000 --- a/src/skins/vector/css/vector-web/views/messages/_SenderProfile.scss +++ /dev/null @@ -1,15 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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/src/skins/vector/css/vector-web/views/rooms/_RoomDropTarget.scss b/src/skins/vector/css/vector-web/views/rooms/_RoomDropTarget.scss deleted file mode 100644 index 08229e377b..0000000000 --- a/src/skins/vector/css/vector-web/views/rooms/_RoomDropTarget.scss +++ /dev/null @@ -1,50 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_RoomDropTarget { - font-size: 13px; - margin-left: 18px; - margin-right: 18px; - margin-top: 8px; - margin-bottom: 7px; - padding-top: 5px; - padding-bottom: 5px; - border: 1px dashed $accent-color; - color: $primary-fg-color; - background-color: $droptarget-bg-color; - border-radius: 4px; -} - -.collapsed .mx_RoomDropTarget { - margin-right: 10px; - margin-left: 10px; -} - -.mx_RoomDropTarget_label { - position: relative; - margin-top: 3px; - line-height: 21px; - z-index: 1; - text-align: center; -} - -.collapsed .mx_RoomDropTarget_avatar { - float: none; -} - -.collapsed .mx_RoomDropTarget_label { - display: none; -} diff --git a/src/skins/vector/css/vector-web/views/rooms/_RoomTooltip.scss b/src/skins/vector/css/vector-web/views/rooms/_RoomTooltip.scss deleted file mode 100644 index 5469a9e6d3..0000000000 --- a/src/skins/vector/css/vector-web/views/rooms/_RoomTooltip.scss +++ /dev/null @@ -1,53 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_RoomTooltip_chevron { - position: absolute; - left: -8px; - top: 4px; - width: 0; - height: 0; - border-top: 8px solid transparent; - border-right: 8px solid $menu-border-color; - border-bottom: 8px solid transparent; -} - -.mx_RoomTooltip_chevron:after { - content:''; - width: 0; - height: 0; - border-top: 7px solid transparent; - border-right: 7px solid $primary-bg-color; - border-bottom: 7px solid transparent; - position:absolute; - top: -7px; - left: 1px; -} - -.mx_RoomTooltip { - display: none; - position: fixed; - border: 1px solid $menu-border-color; - border-radius: 5px; - background-color: $primary-bg-color; - z-index: 2000; - padding: 5px; - pointer-events: none; - line-height: 14px; - font-size: 13px; - color: $primary-fg-color; -} - diff --git a/src/skins/vector/css/vector-web/views/rooms/_SearchBar.scss b/src/skins/vector/css/vector-web/views/rooms/_SearchBar.scss deleted file mode 100644 index 079ea16c68..0000000000 --- a/src/skins/vector/css/vector-web/views/rooms/_SearchBar.scss +++ /dev/null @@ -1,83 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_SearchBar { - padding-top: 5px; - padding-bottom: 5px; - display: flex; - align-items: center; -} - -.mx_SearchBar_input { - display: inline block; - border-radius: 3px 0px 0px 3px; - border: 1px solid $input-border-color; - font-size: 15px; - padding: 9px; - padding-left: 11px; - width: auto; - flex: 1 1 0; -} - -.mx_SearchBar_searchButton { - cursor: pointer; - margin-right: 10px; - width: 37px; - height: 37px; - border-radius: 0px 3px 3px 0px; - background-color: $accent-color; -} - -@keyframes pulsate { - 0% { opacity: 1.0; } - 50% { opacity: 0.1; } - 100% { opacity: 1.0; } -} - -.mx_SearchBar_searching img { - animation: pulsate 0.5s ease-out; - animation-iteration-count: infinite; -} - -.mx_SearchBar_button { - display: inline; - border: 0px; - border-radius: 36px; - font-weight: 400; - font-size: 15px; - color: $accent-fg-color; - background-color: $accent-color; - width: auto; - margin: auto; - margin-left: 7px; - padding-top: 6px; - padding-bottom: 4px; - padding-left: 24px; - padding-right: 24px; - cursor: pointer; -} - -.mx_SearchBar_unselected { - background-color: $primary-bg-color; - color: $accent-color; - border: $accent-color 1px solid; -} - -.mx_SearchBar_cancel { - padding-left: 14px; - padding-right: 14px; - cursor: pointer; -} diff --git a/src/skins/vector/css/vector-web/views/settings/_Notifications.scss b/src/skins/vector/css/vector-web/views/settings/_Notifications.scss deleted file mode 100644 index 4c88e44952..0000000000 --- a/src/skins/vector/css/vector-web/views/settings/_Notifications.scss +++ /dev/null @@ -1,70 +0,0 @@ -/* -Copyright 2015, 2016 OpenMarket Ltd - -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. -*/ - -.mx_UserNotifSettings_tableRow -{ - display: table-row; -} - -.mx_UserNotifSettings_inputCell { - display: table-cell; - padding-bottom: 8px; - padding-right: 8px; - width: 16px; -} - -.mx_UserNotifSettings_labelCell -{ - padding-bottom: 8px; - width: 400px; - display: table-cell; -} - -.mx_UserNotifSettings_pushRulesTableWrapper { - padding-bottom: 8px; -} - -.mx_UserNotifSettings_pushRulesTable { - width: 100%; - table-layout: fixed; -} - -.mx_UserNotifSettings_pushRulesTable thead { - font-weight: bold; - font-size: 15px; -} - -.mx_UserNotifSettings_pushRulesTable tbody th { - font-weight: 400; - font-size: 15px; -} - -.mx_UserNotifSettings_pushRulesTable tbody th:first-child { - text-align: left; -} - -.mx_UserNotifSettings_keywords { - cursor: pointer; - color: $accent-color; -} - -.mx_UserSettings_devicesTable td { - padding-left: 20px; - padding-right: 20px; -} -.mx_UserSettings_devicesTable_nodevices { - font-style: italic; -} diff --git a/src/skins/vector/fonts/Fira_Mono/FiraMono-Bold.ttf b/src/skins/vector/fonts/Fira_Mono/FiraMono-Bold.ttf deleted file mode 100755 index 4b8b1cfbcb..0000000000 Binary files a/src/skins/vector/fonts/Fira_Mono/FiraMono-Bold.ttf and /dev/null differ diff --git a/src/skins/vector/fonts/Fira_Mono/FiraMono-Regular.ttf b/src/skins/vector/fonts/Fira_Mono/FiraMono-Regular.ttf deleted file mode 100755 index 5238c09eda..0000000000 Binary files a/src/skins/vector/fonts/Fira_Mono/FiraMono-Regular.ttf and /dev/null differ diff --git a/src/skins/vector/fonts/Fira_Mono/OFL.txt b/src/skins/vector/fonts/Fira_Mono/OFL.txt deleted file mode 100755 index ba853c049e..0000000000 --- a/src/skins/vector/fonts/Fira_Mono/OFL.txt +++ /dev/null @@ -1,92 +0,0 @@ -Copyright (c) 2012-2013, The Mozilla Corporation and Telefonica S.A. -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/src/skins/vector/fonts/Open_Sans/LICENSE.txt b/src/skins/vector/fonts/Open_Sans/LICENSE.txt deleted file mode 100755 index 75b52484ea..0000000000 --- a/src/skins/vector/fonts/Open_Sans/LICENSE.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/src/skins/vector/fonts/Open_Sans/OpenSans-Bold.ttf b/src/skins/vector/fonts/Open_Sans/OpenSans-Bold.ttf deleted file mode 100755 index fd79d43bea..0000000000 Binary files a/src/skins/vector/fonts/Open_Sans/OpenSans-Bold.ttf and /dev/null differ diff --git a/src/skins/vector/fonts/Open_Sans/OpenSans-BoldItalic.ttf b/src/skins/vector/fonts/Open_Sans/OpenSans-BoldItalic.ttf deleted file mode 100755 index 9bc800958a..0000000000 Binary files a/src/skins/vector/fonts/Open_Sans/OpenSans-BoldItalic.ttf and /dev/null differ diff --git a/src/skins/vector/fonts/Open_Sans/OpenSans-Italic.ttf b/src/skins/vector/fonts/Open_Sans/OpenSans-Italic.ttf deleted file mode 100755 index c90da48ff3..0000000000 Binary files a/src/skins/vector/fonts/Open_Sans/OpenSans-Italic.ttf and /dev/null differ diff --git a/src/skins/vector/fonts/Open_Sans/OpenSans-Regular.ttf b/src/skins/vector/fonts/Open_Sans/OpenSans-Regular.ttf deleted file mode 100755 index db433349b7..0000000000 Binary files a/src/skins/vector/fonts/Open_Sans/OpenSans-Regular.ttf and /dev/null differ diff --git a/src/skins/vector/fonts/Open_Sans/OpenSans-Semibold.ttf b/src/skins/vector/fonts/Open_Sans/OpenSans-Semibold.ttf deleted file mode 100755 index 1a7679e394..0000000000 Binary files a/src/skins/vector/fonts/Open_Sans/OpenSans-Semibold.ttf and /dev/null differ diff --git a/src/skins/vector/fonts/Open_Sans/OpenSans-SemiboldItalic.ttf b/src/skins/vector/fonts/Open_Sans/OpenSans-SemiboldItalic.ttf deleted file mode 100755 index 59b6d16b06..0000000000 Binary files a/src/skins/vector/fonts/Open_Sans/OpenSans-SemiboldItalic.ttf and /dev/null differ diff --git a/src/skins/vector/img/50e2c2.png b/src/skins/vector/img/50e2c2.png deleted file mode 100644 index ee0f855895..0000000000 Binary files a/src/skins/vector/img/50e2c2.png and /dev/null differ diff --git a/src/skins/vector/img/76cfa6.png b/src/skins/vector/img/76cfa6.png deleted file mode 100644 index de1ea60d54..0000000000 Binary files a/src/skins/vector/img/76cfa6.png and /dev/null differ diff --git a/src/skins/vector/img/80cef4.png b/src/skins/vector/img/80cef4.png deleted file mode 100644 index 637d03f63c..0000000000 Binary files a/src/skins/vector/img/80cef4.png and /dev/null differ diff --git a/src/skins/vector/img/admin.svg b/src/skins/vector/img/admin.svg deleted file mode 100644 index 7ea7459304..0000000000 --- a/src/skins/vector/img/admin.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - icons_owner - Created with sketchtool. - - - - - - - - - - - - diff --git a/src/skins/vector/img/attach.png b/src/skins/vector/img/attach.png deleted file mode 100644 index 1bcb70045d..0000000000 Binary files a/src/skins/vector/img/attach.png and /dev/null differ diff --git a/src/skins/vector/img/avatar-error.svg b/src/skins/vector/img/avatar-error.svg deleted file mode 100644 index c5e168944c..0000000000 --- a/src/skins/vector/img/avatar-error.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - 5EF602F6-A36C-41EE-BAEC-50801DFD5492 - Created with sketchtool. - - - - - - - - - - diff --git a/src/skins/vector/img/button-md-false.png b/src/skins/vector/img/button-md-false.png deleted file mode 100644 index 6debbccc93..0000000000 Binary files a/src/skins/vector/img/button-md-false.png and /dev/null differ diff --git a/src/skins/vector/img/button-md-false.svg b/src/skins/vector/img/button-md-false.svg deleted file mode 100644 index 6414933d96..0000000000 --- a/src/skins/vector/img/button-md-false.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - D335F9E8-C813-47D7-B1BE-C8DEF2C8214F - Created with sketchtool. - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/button-md-false@2x.png b/src/skins/vector/img/button-md-false@2x.png deleted file mode 100644 index 497f5385d1..0000000000 Binary files a/src/skins/vector/img/button-md-false@2x.png and /dev/null differ diff --git a/src/skins/vector/img/button-md-false@3x.png b/src/skins/vector/img/button-md-false@3x.png deleted file mode 100644 index 1184e6b351..0000000000 Binary files a/src/skins/vector/img/button-md-false@3x.png and /dev/null differ diff --git a/src/skins/vector/img/button-md-true.png b/src/skins/vector/img/button-md-true.png deleted file mode 100644 index 2e39c55e1e..0000000000 Binary files a/src/skins/vector/img/button-md-true.png and /dev/null differ diff --git a/src/skins/vector/img/button-md-true.svg b/src/skins/vector/img/button-md-true.svg deleted file mode 100644 index 2acc4f675c..0000000000 --- a/src/skins/vector/img/button-md-true.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - 2A63B135-4281-4FBB-A88C-012AE22E9594 - Created with sketchtool. - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/button-md-true@2x.png b/src/skins/vector/img/button-md-true@2x.png deleted file mode 100644 index ad9067f385..0000000000 Binary files a/src/skins/vector/img/button-md-true@2x.png and /dev/null differ diff --git a/src/skins/vector/img/button-md-true@3x.png b/src/skins/vector/img/button-md-true@3x.png deleted file mode 100644 index d615867dc4..0000000000 Binary files a/src/skins/vector/img/button-md-true@3x.png and /dev/null differ diff --git a/src/skins/vector/img/button-text-bold-o-n.svg b/src/skins/vector/img/button-text-bold-o-n.svg deleted file mode 100644 index 161e740e90..0000000000 --- a/src/skins/vector/img/button-text-bold-o-n.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - 01F3F9B2-8F38-4BAF-A345-AECAC3D88E79 - Created with sketchtool. - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/button-text-bold.svg b/src/skins/vector/img/button-text-bold.svg deleted file mode 100644 index 0fd0baa07e..0000000000 --- a/src/skins/vector/img/button-text-bold.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - 9BC64A5B-F157-43FF-BCC4-02D30CDF520B - Created with sketchtool. - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/button-text-bullet-o-n.svg b/src/skins/vector/img/button-text-bullet-o-n.svg deleted file mode 100644 index d4a40e889c..0000000000 --- a/src/skins/vector/img/button-text-bullet-o-n.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - 654917CF-20A4-49B6-B0A1-9875D7B733C8 - Created with sketchtool. - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/button-text-bullet.svg b/src/skins/vector/img/button-text-bullet.svg deleted file mode 100644 index ae3e640d8e..0000000000 --- a/src/skins/vector/img/button-text-bullet.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - B7D94619-44BC-4184-A60A-DBC5BB54E5F9 - Created with sketchtool. - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/button-text-code-o-n.svg b/src/skins/vector/img/button-text-code-o-n.svg deleted file mode 100644 index 8d1439c97b..0000000000 --- a/src/skins/vector/img/button-text-code-o-n.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - B76754AB-42E6-48D2-9443-80CBC0DE02ED - Created with sketchtool. - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/button-text-code.svg b/src/skins/vector/img/button-text-code.svg deleted file mode 100644 index 24026cb709..0000000000 --- a/src/skins/vector/img/button-text-code.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - 4CAFF494-61AE-4916-AFE8-D1E62F7CF0DE - Created with sketchtool. - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/button-text-formatting.svg b/src/skins/vector/img/button-text-formatting.svg deleted file mode 100644 index d697010d40..0000000000 --- a/src/skins/vector/img/button-text-formatting.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - diff --git a/src/skins/vector/img/button-text-italic-o-n.svg b/src/skins/vector/img/button-text-italic-o-n.svg deleted file mode 100644 index 15fe588596..0000000000 --- a/src/skins/vector/img/button-text-italic-o-n.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - 116426C2-0B55-480E-92B3-57D4B3ABAB90 - Created with sketchtool. - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/button-text-italic.svg b/src/skins/vector/img/button-text-italic.svg deleted file mode 100644 index b5722e827b..0000000000 --- a/src/skins/vector/img/button-text-italic.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - 9FBC844D-96CF-4DCB-B545-FCD23727218B - Created with sketchtool. - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/button-text-numbullet-o-n.svg b/src/skins/vector/img/button-text-numbullet-o-n.svg deleted file mode 100644 index 869a2c2cc2..0000000000 --- a/src/skins/vector/img/button-text-numbullet-o-n.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - 294F929B-31AA-4D0C-98B3-9CA96764060D - Created with sketchtool. - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/button-text-numbullet.svg b/src/skins/vector/img/button-text-numbullet.svg deleted file mode 100644 index 8e5b8b87b6..0000000000 --- a/src/skins/vector/img/button-text-numbullet.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - F0F58459-A13A-48C5-9332-ABFB96726F05 - Created with sketchtool. - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/button-text-quote-o-n.svg b/src/skins/vector/img/button-text-quote-o-n.svg deleted file mode 100644 index f8a86125c9..0000000000 --- a/src/skins/vector/img/button-text-quote-o-n.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - 3B24B8C7-64BE-4B3E-A748-94DB72E1210F - Created with sketchtool. - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/button-text-quote.svg b/src/skins/vector/img/button-text-quote.svg deleted file mode 100644 index d70c261f5d..0000000000 --- a/src/skins/vector/img/button-text-quote.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - BFC0418B-9081-4789-A231-B75953157748 - Created with sketchtool. - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/button-text-strike-o-n.svg b/src/skins/vector/img/button-text-strike-o-n.svg deleted file mode 100644 index 2914fcabe6..0000000000 --- a/src/skins/vector/img/button-text-strike-o-n.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - 69B11088-0F3A-4E14-BD9F-4FEF4115E99B - Created with sketchtool. - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/button-text-strike.svg b/src/skins/vector/img/button-text-strike.svg deleted file mode 100644 index 5f262dc350..0000000000 --- a/src/skins/vector/img/button-text-strike.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - A34F2223-34C6-46AE-AA47-38EC8984E9B3 - Created with sketchtool. - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/button-text-underline-o-n.svg b/src/skins/vector/img/button-text-underline-o-n.svg deleted file mode 100644 index 870be3ce6a..0000000000 --- a/src/skins/vector/img/button-text-underline-o-n.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - FD84FF7C-43E4-4312-90AB-5A59AD018377 - Created with sketchtool. - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/button-text-underline.svg b/src/skins/vector/img/button-text-underline.svg deleted file mode 100644 index 26f448539c..0000000000 --- a/src/skins/vector/img/button-text-underline.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - 13E7EE68-9B16-4A3D-8F9F-31E4BAB7E438 - Created with sketchtool. - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/call.png b/src/skins/vector/img/call.png deleted file mode 100644 index a7805e0596..0000000000 Binary files a/src/skins/vector/img/call.png and /dev/null differ diff --git a/src/skins/vector/img/call.svg b/src/skins/vector/img/call.svg deleted file mode 100644 index f528f9a24e..0000000000 --- a/src/skins/vector/img/call.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - icons_video - Created with bin/sketchtool. - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/camera.svg b/src/skins/vector/img/camera.svg deleted file mode 100644 index 6519496f78..0000000000 --- a/src/skins/vector/img/camera.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - icon_camera - Created with Sketch. - - - - - - - diff --git a/src/skins/vector/img/camera_green.svg b/src/skins/vector/img/camera_green.svg deleted file mode 100644 index 5aae5502cd..0000000000 --- a/src/skins/vector/img/camera_green.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - diff --git a/src/skins/vector/img/cancel-black.png b/src/skins/vector/img/cancel-black.png deleted file mode 100644 index 87dcfd41a8..0000000000 Binary files a/src/skins/vector/img/cancel-black.png and /dev/null differ diff --git a/src/skins/vector/img/cancel-black2.png b/src/skins/vector/img/cancel-black2.png deleted file mode 100644 index a928c61b09..0000000000 Binary files a/src/skins/vector/img/cancel-black2.png and /dev/null differ diff --git a/src/skins/vector/img/cancel-red.svg b/src/skins/vector/img/cancel-red.svg deleted file mode 100644 index a72a970b62..0000000000 --- a/src/skins/vector/img/cancel-red.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - Slice 1 - Created with Sketch. - - - - - diff --git a/src/skins/vector/img/cancel-small.svg b/src/skins/vector/img/cancel-small.svg deleted file mode 100644 index e4c8cafc10..0000000000 --- a/src/skins/vector/img/cancel-small.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - Line + Line - Created with Sketch. - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/cancel-white.svg b/src/skins/vector/img/cancel-white.svg deleted file mode 100644 index 65e14c2fbc..0000000000 --- a/src/skins/vector/img/cancel-white.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - Slice 1 - Created with Sketch. - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/cancel.png b/src/skins/vector/img/cancel.png deleted file mode 100644 index 2bda8ff5bf..0000000000 Binary files a/src/skins/vector/img/cancel.png and /dev/null differ diff --git a/src/skins/vector/img/cancel.svg b/src/skins/vector/img/cancel.svg deleted file mode 100644 index e32060025e..0000000000 --- a/src/skins/vector/img/cancel.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - Slice 1 - Created with Sketch. - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/cancel_green.svg b/src/skins/vector/img/cancel_green.svg deleted file mode 100644 index 2e3d759be2..0000000000 --- a/src/skins/vector/img/cancel_green.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - Slice 1 - Created with Sketch. - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/chevron-left.png b/src/skins/vector/img/chevron-left.png deleted file mode 100644 index efb0065de9..0000000000 Binary files a/src/skins/vector/img/chevron-left.png and /dev/null differ diff --git a/src/skins/vector/img/chevron-right.png b/src/skins/vector/img/chevron-right.png deleted file mode 100644 index 18a4684e47..0000000000 Binary files a/src/skins/vector/img/chevron-right.png and /dev/null differ diff --git a/src/skins/vector/img/chevron.png b/src/skins/vector/img/chevron.png deleted file mode 100644 index 81236f91bc..0000000000 Binary files a/src/skins/vector/img/chevron.png and /dev/null differ diff --git a/src/skins/vector/img/close-white.png b/src/skins/vector/img/close-white.png deleted file mode 100644 index d8752ed9fe..0000000000 Binary files a/src/skins/vector/img/close-white.png and /dev/null differ diff --git a/src/skins/vector/img/create-big.png b/src/skins/vector/img/create-big.png deleted file mode 100644 index b7307a11c7..0000000000 Binary files a/src/skins/vector/img/create-big.png and /dev/null differ diff --git a/src/skins/vector/img/create-big.svg b/src/skins/vector/img/create-big.svg deleted file mode 100644 index 2450542b63..0000000000 --- a/src/skins/vector/img/create-big.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - - icons_create_room - Created with sketchtool. - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/create.png b/src/skins/vector/img/create.png deleted file mode 100644 index 2d6107ac50..0000000000 Binary files a/src/skins/vector/img/create.png and /dev/null differ diff --git a/src/skins/vector/img/delete.png b/src/skins/vector/img/delete.png deleted file mode 100644 index 8ff20a116d..0000000000 Binary files a/src/skins/vector/img/delete.png and /dev/null differ diff --git a/src/skins/vector/img/directory-big.png b/src/skins/vector/img/directory-big.png deleted file mode 100644 index 03cab69c4a..0000000000 Binary files a/src/skins/vector/img/directory-big.png and /dev/null differ diff --git a/src/skins/vector/img/directory-big.svg b/src/skins/vector/img/directory-big.svg deleted file mode 100644 index 5631a2ae3e..0000000000 --- a/src/skins/vector/img/directory-big.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - icons_directory - Created with sketchtool. - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/download.png b/src/skins/vector/img/download.png deleted file mode 100644 index 1999ebf7ab..0000000000 Binary files a/src/skins/vector/img/download.png and /dev/null differ diff --git a/src/skins/vector/img/download.svg b/src/skins/vector/img/download.svg deleted file mode 100644 index d0ea090d8a..0000000000 --- a/src/skins/vector/img/download.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - Fill 75 - Created with Sketch. - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/e2e-blocked.svg b/src/skins/vector/img/e2e-blocked.svg deleted file mode 100644 index 0ab2c6efbe..0000000000 --- a/src/skins/vector/img/e2e-blocked.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - 2805649B-D39D-43EA-A357-659EF9B97BA4 - Created with sketchtool. - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/e2e-unencrypted.svg b/src/skins/vector/img/e2e-unencrypted.svg deleted file mode 100644 index 1467223638..0000000000 --- a/src/skins/vector/img/e2e-unencrypted.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - 16F5F38E-A6A3-472A-BC13-13F0F12876CF - Created with sketchtool. - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/e2e-verified.svg b/src/skins/vector/img/e2e-verified.svg deleted file mode 100644 index b65f50b2b6..0000000000 --- a/src/skins/vector/img/e2e-verified.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - 48BF5D32-306C-4B20-88EB-24B1F743CAC9 - Created with sketchtool. - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/e2e-warning.svg b/src/skins/vector/img/e2e-warning.svg deleted file mode 100644 index 8a55f199ba..0000000000 --- a/src/skins/vector/img/e2e-warning.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - CCDDE6F6-B552-48FD-AD54-6939841CA2DD - Created with sketchtool. - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/edit.png b/src/skins/vector/img/edit.png deleted file mode 100644 index 6f373d3f3d..0000000000 Binary files a/src/skins/vector/img/edit.png and /dev/null differ diff --git a/src/skins/vector/img/edit.svg b/src/skins/vector/img/edit.svg deleted file mode 100644 index 9ba0060774..0000000000 --- a/src/skins/vector/img/edit.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - diff --git a/src/skins/vector/img/edit_green.svg b/src/skins/vector/img/edit_green.svg deleted file mode 100644 index f7f4c7adcb..0000000000 --- a/src/skins/vector/img/edit_green.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - diff --git a/src/skins/vector/img/ellipsis.svg b/src/skins/vector/img/ellipsis.svg deleted file mode 100644 index d60c844089..0000000000 --- a/src/skins/vector/img/ellipsis.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - icons_archive - Created with Sketch. - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/eol.svg b/src/skins/vector/img/eol.svg deleted file mode 100644 index 02d1946cf4..0000000000 --- a/src/skins/vector/img/eol.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - icon_eol - Created with sketchtool. - - - - - - - - - - - diff --git a/src/skins/vector/img/f4c371.png b/src/skins/vector/img/f4c371.png deleted file mode 100644 index ad3b8f1616..0000000000 Binary files a/src/skins/vector/img/f4c371.png and /dev/null differ diff --git a/src/skins/vector/img/file.png b/src/skins/vector/img/file.png deleted file mode 100644 index 5904ea8284..0000000000 Binary files a/src/skins/vector/img/file.png and /dev/null differ diff --git a/src/skins/vector/img/filegrid.png b/src/skins/vector/img/filegrid.png deleted file mode 100644 index c2c2799f37..0000000000 Binary files a/src/skins/vector/img/filegrid.png and /dev/null differ diff --git a/src/skins/vector/img/fileicon.png b/src/skins/vector/img/fileicon.png deleted file mode 100644 index af018efa6d..0000000000 Binary files a/src/skins/vector/img/fileicon.png and /dev/null differ diff --git a/src/skins/vector/img/filelist.png b/src/skins/vector/img/filelist.png deleted file mode 100644 index 3cf6cb494e..0000000000 Binary files a/src/skins/vector/img/filelist.png and /dev/null differ diff --git a/src/skins/vector/img/files.png b/src/skins/vector/img/files.png deleted file mode 100644 index 83932267f8..0000000000 Binary files a/src/skins/vector/img/files.png and /dev/null differ diff --git a/src/skins/vector/img/files.svg b/src/skins/vector/img/files.svg deleted file mode 100644 index 20aba851ea..0000000000 --- a/src/skins/vector/img/files.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - icons_browse_files - Created with bin/sketchtool. - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/fullscreen.svg b/src/skins/vector/img/fullscreen.svg deleted file mode 100644 index e333abb6fb..0000000000 --- a/src/skins/vector/img/fullscreen.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - Zoom - Created with Sketch. - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/hangup.svg b/src/skins/vector/img/hangup.svg deleted file mode 100644 index be038d2b30..0000000000 --- a/src/skins/vector/img/hangup.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - Fill 72 + Path 98 - Created with Sketch. - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/hide.png b/src/skins/vector/img/hide.png deleted file mode 100644 index c5aaf0dd0d..0000000000 Binary files a/src/skins/vector/img/hide.png and /dev/null differ diff --git a/src/skins/vector/img/icon-address-delete.svg b/src/skins/vector/img/icon-address-delete.svg deleted file mode 100644 index 1289d5aafc..0000000000 --- a/src/skins/vector/img/icon-address-delete.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - 943783E9-DBD7-4D4E-BAC9-35437C17C2C4 - Created with sketchtool. - - - - - - - - - - diff --git a/src/skins/vector/img/icon-call.svg b/src/skins/vector/img/icon-call.svg deleted file mode 100644 index 0ca5c29e9d..0000000000 --- a/src/skins/vector/img/icon-call.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/src/skins/vector/img/icon-context-delete.svg b/src/skins/vector/img/icon-context-delete.svg deleted file mode 100644 index fba9fa117b..0000000000 --- a/src/skins/vector/img/icon-context-delete.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/src/skins/vector/img/icon-context-fave-on.svg b/src/skins/vector/img/icon-context-fave-on.svg deleted file mode 100644 index 2ae172d8eb..0000000000 --- a/src/skins/vector/img/icon-context-fave-on.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - DAE17B64-40B5-478A-8E8D-97AD1A6E25C8 - Created with sketchtool. - - - - - - - - - - diff --git a/src/skins/vector/img/icon-context-fave.svg b/src/skins/vector/img/icon-context-fave.svg deleted file mode 100644 index 451e1849c8..0000000000 --- a/src/skins/vector/img/icon-context-fave.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - 8A6E1837-F0F1-432E-A0DA-6F3741F71EBF - Created with sketchtool. - - - - - - - - - - diff --git a/src/skins/vector/img/icon-context-low-on.svg b/src/skins/vector/img/icon-context-low-on.svg deleted file mode 100644 index 7578c6335c..0000000000 --- a/src/skins/vector/img/icon-context-low-on.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - CD51482C-F2D4-4F63-AF9E-86513F9AF87F - Created with sketchtool. - - - - - - - - - - diff --git a/src/skins/vector/img/icon-context-low.svg b/src/skins/vector/img/icon-context-low.svg deleted file mode 100644 index 663f3ca9eb..0000000000 --- a/src/skins/vector/img/icon-context-low.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - B160345F-40D3-4BE6-A860-6D04BF223EF7 - Created with sketchtool. - - - - - - - - - - diff --git a/src/skins/vector/img/icon-context-mute-mentions.svg b/src/skins/vector/img/icon-context-mute-mentions.svg deleted file mode 100644 index 3693b7a82a..0000000000 --- a/src/skins/vector/img/icon-context-mute-mentions.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/src/skins/vector/img/icon-context-mute-off-copy.svg b/src/skins/vector/img/icon-context-mute-off-copy.svg deleted file mode 100644 index 861f2975de..0000000000 --- a/src/skins/vector/img/icon-context-mute-off-copy.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/src/skins/vector/img/icon-context-mute-off.svg b/src/skins/vector/img/icon-context-mute-off.svg deleted file mode 100644 index d801823b5d..0000000000 --- a/src/skins/vector/img/icon-context-mute-off.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/src/skins/vector/img/icon-context-mute.svg b/src/skins/vector/img/icon-context-mute.svg deleted file mode 100644 index f53b868a76..0000000000 --- a/src/skins/vector/img/icon-context-mute.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/src/skins/vector/img/icon-delete-pink.svg b/src/skins/vector/img/icon-delete-pink.svg deleted file mode 100644 index aafa87f1b2..0000000000 --- a/src/skins/vector/img/icon-delete-pink.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - diff --git a/src/skins/vector/img/icon-email-user.svg b/src/skins/vector/img/icon-email-user.svg deleted file mode 100644 index 2d41e06f98..0000000000 --- a/src/skins/vector/img/icon-email-user.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - 6F488856-F8EF-479C-9747-AB6E0945C7DE - Created with sketchtool. - - - - - - - - - - - - diff --git a/src/skins/vector/img/icon-invite-people.svg b/src/skins/vector/img/icon-invite-people.svg deleted file mode 100644 index f13a03ed70..0000000000 --- a/src/skins/vector/img/icon-invite-people.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - 9BA71BF4-DC4F-42D2-B2D0-9EAE0F7F8D45 - Created with sketchtool. - - - - - - - - - - - - - - - - - - - diff --git a/src/skins/vector/img/icon-mx-user.svg b/src/skins/vector/img/icon-mx-user.svg deleted file mode 100644 index 5780277f38..0000000000 --- a/src/skins/vector/img/icon-mx-user.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - diff --git a/src/skins/vector/img/icon-return.svg b/src/skins/vector/img/icon-return.svg deleted file mode 100644 index 80da0f82aa..0000000000 --- a/src/skins/vector/img/icon-return.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - B542A09B-DBBF-41D4-A5FD-D05EE1E6BBC4 - Created with sketchtool. - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/icon-text-cancel.svg b/src/skins/vector/img/icon-text-cancel.svg deleted file mode 100644 index ce28d128aa..0000000000 --- a/src/skins/vector/img/icon-text-cancel.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - 28D80248-63BA-4A5F-9216-4CFE72784BAC - Created with sketchtool. - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/icon_context_delete.svg b/src/skins/vector/img/icon_context_delete.svg deleted file mode 100644 index 896b94ad13..0000000000 --- a/src/skins/vector/img/icon_context_delete.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/src/skins/vector/img/icon_context_fave.svg b/src/skins/vector/img/icon_context_fave.svg deleted file mode 100644 index da7b14a1f4..0000000000 --- a/src/skins/vector/img/icon_context_fave.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/src/skins/vector/img/icon_context_fave_on.svg b/src/skins/vector/img/icon_context_fave_on.svg deleted file mode 100644 index e22e92d36e..0000000000 --- a/src/skins/vector/img/icon_context_fave_on.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/skins/vector/img/icon_context_low.svg b/src/skins/vector/img/icon_context_low.svg deleted file mode 100644 index ea579ef4c5..0000000000 --- a/src/skins/vector/img/icon_context_low.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/src/skins/vector/img/icon_context_low_on.svg b/src/skins/vector/img/icon_context_low_on.svg deleted file mode 100644 index 28300f9a74..0000000000 --- a/src/skins/vector/img/icon_context_low_on.svg +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/skins/vector/img/icon_context_message.svg b/src/skins/vector/img/icon_context_message.svg deleted file mode 100644 index f2ceccfa78..0000000000 --- a/src/skins/vector/img/icon_context_message.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - ED5D3E59-2561-4AC1-9B43-82FBC51767FC - Created with sketchtool. - - - - - - - - - - diff --git a/src/skins/vector/img/icon_context_message_dark.svg b/src/skins/vector/img/icon_context_message_dark.svg deleted file mode 100644 index b4336cc377..0000000000 --- a/src/skins/vector/img/icon_context_message_dark.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - ED5D3E59-2561-4AC1-9B43-82FBC51767FC - Created with sketchtool. - - - - - - - - - - diff --git a/src/skins/vector/img/icon_context_person.svg b/src/skins/vector/img/icon_context_person.svg deleted file mode 100644 index fff019d377..0000000000 --- a/src/skins/vector/img/icon_context_person.svg +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - image/svg+xml - - 81230A28-D944-4572-B5DB-C03CAA2B1FCA - - - - - - 81230A28-D944-4572-B5DB-C03CAA2B1FCA - Created with sketchtool. - - - - - - - - - - diff --git a/src/skins/vector/img/icon_context_person_on.svg b/src/skins/vector/img/icon_context_person_on.svg deleted file mode 100644 index 362944332d..0000000000 --- a/src/skins/vector/img/icon_context_person_on.svg +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - image/svg+xml - - 81230A28-D944-4572-B5DB-C03CAA2B1FCA - - - - - - 81230A28-D944-4572-B5DB-C03CAA2B1FCA - Created with sketchtool. - - - - - - - - - - diff --git a/src/skins/vector/img/icon_copy_message.svg b/src/skins/vector/img/icon_copy_message.svg deleted file mode 100644 index 8d8887bb22..0000000000 --- a/src/skins/vector/img/icon_copy_message.svg +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - image/svg+xml - - ED5D3E59-2561-4AC1-9B43-82FBC51767FC - - - - - - ED5D3E59-2561-4AC1-9B43-82FBC51767FC - Created with sketchtool. - - - - - - - - - diff --git a/src/skins/vector/img/icon_copy_message_dark.svg b/src/skins/vector/img/icon_copy_message_dark.svg deleted file mode 100644 index b81e617d8c..0000000000 --- a/src/skins/vector/img/icon_copy_message_dark.svg +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - image/svg+xml - - ED5D3E59-2561-4AC1-9B43-82FBC51767FC - - - - - - ED5D3E59-2561-4AC1-9B43-82FBC51767FC - Created with sketchtool. - - - - - - - diff --git a/src/skins/vector/img/icon_person.svg b/src/skins/vector/img/icon_person.svg deleted file mode 100644 index 4be70df0db..0000000000 --- a/src/skins/vector/img/icon_person.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - 815EF7DE-169A-4322-AE2A-B65CBE91DCED - Created with sketchtool. - - - - - - - - - - - - - - - - - - diff --git a/src/skins/vector/img/icons-apps-active.svg b/src/skins/vector/img/icons-apps-active.svg deleted file mode 100644 index ea222d0511..0000000000 --- a/src/skins/vector/img/icons-apps-active.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/src/skins/vector/img/icons-apps.svg b/src/skins/vector/img/icons-apps.svg deleted file mode 100644 index affd8e6408..0000000000 --- a/src/skins/vector/img/icons-apps.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - diff --git a/src/skins/vector/img/icons-close-button.svg b/src/skins/vector/img/icons-close-button.svg deleted file mode 100644 index f960d73a3c..0000000000 --- a/src/skins/vector/img/icons-close-button.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - 206C270A-EB00-48E4-8CC3-5D403C59177C - Created with sketchtool. - - - - - - - - - - diff --git a/src/skins/vector/img/icons-close.svg b/src/skins/vector/img/icons-close.svg deleted file mode 100644 index 453b51082f..0000000000 --- a/src/skins/vector/img/icons-close.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - -icons_create_room -Created with sketchtool. - - - - - - - - - - - - - - diff --git a/src/skins/vector/img/icons-create-room.svg b/src/skins/vector/img/icons-create-room.svg deleted file mode 100644 index 252bd2df3b..0000000000 --- a/src/skins/vector/img/icons-create-room.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - 0F9BCC43-B3A7-4C9F-8E34-1F38194362C2 - Created with sketchtool. - - - - - - - - - - - - - diff --git a/src/skins/vector/img/icons-directory.svg b/src/skins/vector/img/icons-directory.svg deleted file mode 100644 index 2688b84713..0000000000 --- a/src/skins/vector/img/icons-directory.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - icons_directory - Created with Sketch. - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/icons-files.svg b/src/skins/vector/img/icons-files.svg deleted file mode 100644 index 97ba4228e3..0000000000 --- a/src/skins/vector/img/icons-files.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - 7C98C075-AB4D-45A3-85F9-CCD46F84DA7F - Created with sketchtool. - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/icons-groups.svg b/src/skins/vector/img/icons-groups.svg deleted file mode 100644 index 8f89ba83c4..0000000000 --- a/src/skins/vector/img/icons-groups.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/src/skins/vector/img/icons-hide-apps.svg b/src/skins/vector/img/icons-hide-apps.svg deleted file mode 100644 index b622e97f71..0000000000 --- a/src/skins/vector/img/icons-hide-apps.svg +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/skins/vector/img/icons-home.svg b/src/skins/vector/img/icons-home.svg deleted file mode 100644 index eb5484c883..0000000000 --- a/src/skins/vector/img/icons-home.svg +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - 81230A28-D944-4572-B5DB-C03CAA2B1FCA - Created with sketchtool. - - - - - - - - - - - - - - - - - diff --git a/src/skins/vector/img/icons-notifications.svg b/src/skins/vector/img/icons-notifications.svg deleted file mode 100644 index 66a49d6c0c..0000000000 --- a/src/skins/vector/img/icons-notifications.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - 5E723325-BD0B-454D-BE25-638AF09A97AC - Created with sketchtool. - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/icons-people.svg b/src/skins/vector/img/icons-people.svg deleted file mode 100644 index 8854506127..0000000000 --- a/src/skins/vector/img/icons-people.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - 81230A28-D944-4572-B5DB-C03CAA2B1FCA - Created with sketchtool. - - - - - - - - - - - - - - - - - diff --git a/src/skins/vector/img/icons-pin.svg b/src/skins/vector/img/icons-pin.svg deleted file mode 100644 index a6fbf13baa..0000000000 --- a/src/skins/vector/img/icons-pin.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/icons-room-add.svg b/src/skins/vector/img/icons-room-add.svg deleted file mode 100644 index fc0ab750b6..0000000000 --- a/src/skins/vector/img/icons-room-add.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/src/skins/vector/img/icons-room.svg b/src/skins/vector/img/icons-room.svg deleted file mode 100644 index d2abb21301..0000000000 --- a/src/skins/vector/img/icons-room.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/src/skins/vector/img/icons-search-copy.svg b/src/skins/vector/img/icons-search-copy.svg deleted file mode 100644 index b026718b84..0000000000 --- a/src/skins/vector/img/icons-search-copy.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/src/skins/vector/img/icons-search.svg b/src/skins/vector/img/icons-search.svg deleted file mode 100644 index d85709e66c..0000000000 --- a/src/skins/vector/img/icons-search.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/src/skins/vector/img/icons-settings-room.svg b/src/skins/vector/img/icons-settings-room.svg deleted file mode 100644 index 117d134c95..0000000000 --- a/src/skins/vector/img/icons-settings-room.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - 69011392-CE9D-4404-A85C-A8548C5D850B - Created with sketchtool. - - - - - - - - - - diff --git a/src/skins/vector/img/icons-settings.svg b/src/skins/vector/img/icons-settings.svg deleted file mode 100644 index 3ca2b655f4..0000000000 --- a/src/skins/vector/img/icons-settings.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - 4D42A2A7-7430-4D4F-A0A2-E19278CF66E3 - Created with sketchtool. - - - - - - - - - - diff --git a/src/skins/vector/img/icons-show-apps.svg b/src/skins/vector/img/icons-show-apps.svg deleted file mode 100644 index 3438157301..0000000000 --- a/src/skins/vector/img/icons-show-apps.svg +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/skins/vector/img/icons-upload.svg b/src/skins/vector/img/icons-upload.svg deleted file mode 100644 index b0101e87a0..0000000000 --- a/src/skins/vector/img/icons-upload.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/src/skins/vector/img/icons-video.svg b/src/skins/vector/img/icons-video.svg deleted file mode 100644 index d367f49609..0000000000 --- a/src/skins/vector/img/icons-video.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - 05D354CE-86A7-4B6F-B9BE-F1CEBBD81B21 - Created with sketchtool. - - - - - - - - - - - - - - - diff --git a/src/skins/vector/img/icons_ellipsis.svg b/src/skins/vector/img/icons_ellipsis.svg deleted file mode 100644 index ba600ccacc..0000000000 --- a/src/skins/vector/img/icons_ellipsis.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/skins/vector/img/info.png b/src/skins/vector/img/info.png deleted file mode 100644 index 699fd64e01..0000000000 Binary files a/src/skins/vector/img/info.png and /dev/null differ diff --git a/src/skins/vector/img/leave.svg b/src/skins/vector/img/leave.svg deleted file mode 100644 index 1acbe59313..0000000000 --- a/src/skins/vector/img/leave.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/src/skins/vector/img/list-close.png b/src/skins/vector/img/list-close.png deleted file mode 100644 index 82b322f9d4..0000000000 Binary files a/src/skins/vector/img/list-close.png and /dev/null differ diff --git a/src/skins/vector/img/list-close.svg b/src/skins/vector/img/list-close.svg deleted file mode 100644 index cd88b2a88f..0000000000 --- a/src/skins/vector/img/list-close.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - -Slice 1 -Created with Sketch. - - - - diff --git a/src/skins/vector/img/list-open.png b/src/skins/vector/img/list-open.png deleted file mode 100644 index f8c8063197..0000000000 Binary files a/src/skins/vector/img/list-open.png and /dev/null differ diff --git a/src/skins/vector/img/list-open.svg b/src/skins/vector/img/list-open.svg deleted file mode 100644 index e180be8870..0000000000 --- a/src/skins/vector/img/list-open.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - -Slice 1 -Created with Sketch. - - - - diff --git a/src/skins/vector/img/logos/riot-im-logo-1.png b/src/skins/vector/img/logos/riot-im-logo-1.png deleted file mode 100644 index 768679da66..0000000000 Binary files a/src/skins/vector/img/logos/riot-im-logo-1.png and /dev/null differ diff --git a/src/skins/vector/img/logos/riot-im-logo-1.svg b/src/skins/vector/img/logos/riot-im-logo-1.svg deleted file mode 100644 index a806c3bfda..0000000000 --- a/src/skins/vector/img/logos/riot-im-logo-1.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/src/skins/vector/img/logos/riot-im-logo-2.svg b/src/skins/vector/img/logos/riot-im-logo-2.svg deleted file mode 100644 index f9cc92f13b..0000000000 --- a/src/skins/vector/img/logos/riot-im-logo-2.svg +++ /dev/null @@ -1,165 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/src/skins/vector/img/logos/riot-im-logo-3.svg b/src/skins/vector/img/logos/riot-im-logo-3.svg deleted file mode 100644 index 7f81dacd72..0000000000 --- a/src/skins/vector/img/logos/riot-im-logo-3.svg +++ /dev/null @@ -1,173 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/src/skins/vector/img/logos/riot-im-logo-4.svg b/src/skins/vector/img/logos/riot-im-logo-4.svg deleted file mode 100644 index 307868e604..0000000000 --- a/src/skins/vector/img/logos/riot-im-logo-4.svg +++ /dev/null @@ -1,185 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/src/skins/vector/img/logos/riot-im-logo-5.svg b/src/skins/vector/img/logos/riot-im-logo-5.svg deleted file mode 100644 index 2653d7c9c8..0000000000 --- a/src/skins/vector/img/logos/riot-im-logo-5.svg +++ /dev/null @@ -1,110 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/src/skins/vector/img/logos/riot-logo-1.svg b/src/skins/vector/img/logos/riot-logo-1.svg deleted file mode 100644 index 297608b899..0000000000 --- a/src/skins/vector/img/logos/riot-logo-1.svg +++ /dev/null @@ -1 +0,0 @@ -Asset 4 \ No newline at end of file diff --git a/src/skins/vector/img/logos/riot-logo-2.svg b/src/skins/vector/img/logos/riot-logo-2.svg deleted file mode 100644 index 757f62309e..0000000000 --- a/src/skins/vector/img/logos/riot-logo-2.svg +++ /dev/null @@ -1 +0,0 @@ -Asset 2 \ No newline at end of file diff --git a/src/skins/vector/img/logos/riot-logo-3.svg b/src/skins/vector/img/logos/riot-logo-3.svg deleted file mode 100644 index d71b489a44..0000000000 --- a/src/skins/vector/img/logos/riot-logo-3.svg +++ /dev/null @@ -1 +0,0 @@ -Asset 5 \ No newline at end of file diff --git a/src/skins/vector/img/logos/riot-logo-4.svg b/src/skins/vector/img/logos/riot-logo-4.svg deleted file mode 100644 index aa5522f609..0000000000 --- a/src/skins/vector/img/logos/riot-logo-4.svg +++ /dev/null @@ -1 +0,0 @@ -Asset 3 \ No newline at end of file diff --git a/src/skins/vector/img/logos/riot-logo-5.svg b/src/skins/vector/img/logos/riot-logo-5.svg deleted file mode 100644 index 6cbc259257..0000000000 --- a/src/skins/vector/img/logos/riot-logo-5.svg +++ /dev/null @@ -1 +0,0 @@ -Asset 1 \ No newline at end of file diff --git a/src/skins/vector/img/logos/riot-logo-bw.svg b/src/skins/vector/img/logos/riot-logo-bw.svg deleted file mode 100644 index e7d6e869ba..0000000000 --- a/src/skins/vector/img/logos/riot-logo-bw.svg +++ /dev/null @@ -1 +0,0 @@ -Asset 6 \ No newline at end of file diff --git a/src/skins/vector/img/logos/riot-logo.svg b/src/skins/vector/img/logos/riot-logo.svg deleted file mode 100644 index cbfaa62577..0000000000 --- a/src/skins/vector/img/logos/riot-logo.svg +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/skins/vector/img/logos/riot.im logo.svg b/src/skins/vector/img/logos/riot.im logo.svg deleted file mode 100644 index 5ebd96e84b..0000000000 --- a/src/skins/vector/img/logos/riot.im logo.svg +++ /dev/null @@ -1,169 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/src/skins/vector/img/maximise.svg b/src/skins/vector/img/maximise.svg deleted file mode 100644 index 79c6c0ab8b..0000000000 --- a/src/skins/vector/img/maximise.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - -minimise -Created with sketchtool. - - - - - - - - - - - - diff --git a/src/skins/vector/img/maximize.svg b/src/skins/vector/img/maximize.svg deleted file mode 100644 index 4f9e10191f..0000000000 --- a/src/skins/vector/img/maximize.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - diff --git a/src/skins/vector/img/member_chevron.png b/src/skins/vector/img/member_chevron.png deleted file mode 100644 index cbbd289dcf..0000000000 Binary files a/src/skins/vector/img/member_chevron.png and /dev/null differ diff --git a/src/skins/vector/img/menu.png b/src/skins/vector/img/menu.png deleted file mode 100755 index b45f88950f..0000000000 Binary files a/src/skins/vector/img/menu.png and /dev/null differ diff --git a/src/skins/vector/img/minimise.svg b/src/skins/vector/img/minimise.svg deleted file mode 100644 index 491756b15a..0000000000 --- a/src/skins/vector/img/minimise.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - minimise - Created with sketchtool. - - - - - - - - - - - - - diff --git a/src/skins/vector/img/minimize.svg b/src/skins/vector/img/minimize.svg deleted file mode 100644 index 410b0bc08e..0000000000 --- a/src/skins/vector/img/minimize.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - diff --git a/src/skins/vector/img/mod.svg b/src/skins/vector/img/mod.svg deleted file mode 100644 index 847baf98f9..0000000000 --- a/src/skins/vector/img/mod.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - icons_admin - Created with sketchtool. - - - - - - - - - - - diff --git a/src/skins/vector/img/network-matrix.svg b/src/skins/vector/img/network-matrix.svg deleted file mode 100644 index bb8278ae39..0000000000 --- a/src/skins/vector/img/network-matrix.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - diff --git a/src/skins/vector/img/newmessages.png b/src/skins/vector/img/newmessages.png deleted file mode 100644 index a22156ab21..0000000000 Binary files a/src/skins/vector/img/newmessages.png and /dev/null differ diff --git a/src/skins/vector/img/newmessages.svg b/src/skins/vector/img/newmessages.svg deleted file mode 100644 index a2ffca9020..0000000000 --- a/src/skins/vector/img/newmessages.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - icon_newmessages - Created with Sketch. - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/notif-active.svg b/src/skins/vector/img/notif-active.svg deleted file mode 100644 index 9eb279f851..0000000000 --- a/src/skins/vector/img/notif-active.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - E15782FC-B5FA-472A-AE12-CFFF484E7253 - Created with sketchtool. - - - - - - - - - - - - - - - diff --git a/src/skins/vector/img/notif-slider.svg b/src/skins/vector/img/notif-slider.svg deleted file mode 100644 index 55fa06d11a..0000000000 --- a/src/skins/vector/img/notif-slider.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - 16CB4618-0BD3-4568-BB20-FC56EBC46046 - Created with sketchtool. - - - - - - - - - - - - - - - - - diff --git a/src/skins/vector/img/p/p0.png b/src/skins/vector/img/p/p0.png deleted file mode 100644 index 300cc22654..0000000000 Binary files a/src/skins/vector/img/p/p0.png and /dev/null differ diff --git a/src/skins/vector/img/p/p1.png b/src/skins/vector/img/p/p1.png deleted file mode 100644 index 5a6e3054e4..0000000000 Binary files a/src/skins/vector/img/p/p1.png and /dev/null differ diff --git a/src/skins/vector/img/p/p10.png b/src/skins/vector/img/p/p10.png deleted file mode 100644 index 7cead0f239..0000000000 Binary files a/src/skins/vector/img/p/p10.png and /dev/null differ diff --git a/src/skins/vector/img/p/p11.png b/src/skins/vector/img/p/p11.png deleted file mode 100644 index d744d8af2f..0000000000 Binary files a/src/skins/vector/img/p/p11.png and /dev/null differ diff --git a/src/skins/vector/img/p/p12.png b/src/skins/vector/img/p/p12.png deleted file mode 100644 index 02492d554a..0000000000 Binary files a/src/skins/vector/img/p/p12.png and /dev/null differ diff --git a/src/skins/vector/img/p/p13.png b/src/skins/vector/img/p/p13.png deleted file mode 100644 index 0ae8029d87..0000000000 Binary files a/src/skins/vector/img/p/p13.png and /dev/null differ diff --git a/src/skins/vector/img/p/p14.png b/src/skins/vector/img/p/p14.png deleted file mode 100644 index 23a3840bf8..0000000000 Binary files a/src/skins/vector/img/p/p14.png and /dev/null differ diff --git a/src/skins/vector/img/p/p15.png b/src/skins/vector/img/p/p15.png deleted file mode 100644 index b07f463a07..0000000000 Binary files a/src/skins/vector/img/p/p15.png and /dev/null differ diff --git a/src/skins/vector/img/p/p16.png b/src/skins/vector/img/p/p16.png deleted file mode 100644 index f8fa4abfa1..0000000000 Binary files a/src/skins/vector/img/p/p16.png and /dev/null differ diff --git a/src/skins/vector/img/p/p17.png b/src/skins/vector/img/p/p17.png deleted file mode 100644 index 20e985bb1c..0000000000 Binary files a/src/skins/vector/img/p/p17.png and /dev/null differ diff --git a/src/skins/vector/img/p/p18.png b/src/skins/vector/img/p/p18.png deleted file mode 100644 index 2ecd29b350..0000000000 Binary files a/src/skins/vector/img/p/p18.png and /dev/null differ diff --git a/src/skins/vector/img/p/p19.png b/src/skins/vector/img/p/p19.png deleted file mode 100644 index ec35f0fc80..0000000000 Binary files a/src/skins/vector/img/p/p19.png and /dev/null differ diff --git a/src/skins/vector/img/p/p2.png b/src/skins/vector/img/p/p2.png deleted file mode 100644 index 82f16d6078..0000000000 Binary files a/src/skins/vector/img/p/p2.png and /dev/null differ diff --git a/src/skins/vector/img/p/p20.png b/src/skins/vector/img/p/p20.png deleted file mode 100644 index 0ff816d61b..0000000000 Binary files a/src/skins/vector/img/p/p20.png and /dev/null differ diff --git a/src/skins/vector/img/p/p3.png b/src/skins/vector/img/p/p3.png deleted file mode 100644 index ae215557a8..0000000000 Binary files a/src/skins/vector/img/p/p3.png and /dev/null differ diff --git a/src/skins/vector/img/p/p4.png b/src/skins/vector/img/p/p4.png deleted file mode 100644 index 011ff6f541..0000000000 Binary files a/src/skins/vector/img/p/p4.png and /dev/null differ diff --git a/src/skins/vector/img/p/p5.png b/src/skins/vector/img/p/p5.png deleted file mode 100644 index 1a90da9aac..0000000000 Binary files a/src/skins/vector/img/p/p5.png and /dev/null differ diff --git a/src/skins/vector/img/p/p6.png b/src/skins/vector/img/p/p6.png deleted file mode 100644 index 453110f62f..0000000000 Binary files a/src/skins/vector/img/p/p6.png and /dev/null differ diff --git a/src/skins/vector/img/p/p7.png b/src/skins/vector/img/p/p7.png deleted file mode 100644 index 6418817ca8..0000000000 Binary files a/src/skins/vector/img/p/p7.png and /dev/null differ diff --git a/src/skins/vector/img/p/p8.png b/src/skins/vector/img/p/p8.png deleted file mode 100644 index 0e821fd675..0000000000 Binary files a/src/skins/vector/img/p/p8.png and /dev/null differ diff --git a/src/skins/vector/img/p/p9.png b/src/skins/vector/img/p/p9.png deleted file mode 100644 index f4b6941b24..0000000000 Binary files a/src/skins/vector/img/p/p9.png and /dev/null differ diff --git a/src/skins/vector/img/p/piechart.pde b/src/skins/vector/img/p/piechart.pde deleted file mode 100644 index 44fe628378..0000000000 --- a/src/skins/vector/img/p/piechart.pde +++ /dev/null @@ -1,19 +0,0 @@ -// a trivial processing.org snippet to generate these -// using java2d (ugh). Peity and JS might have been -// a better idea. Or SVG. - -size(48, 48); -g = createGraphics(48, 48, JAVA2D); - -for (int i = 0; i <= 20; i++) { - g.beginDraw(); - g.background(0.0, 0.0); - g.smooth(); - g.strokeCap(SQUARE); - g.strokeWeight(3); - g.stroke(0x80, 0xcf, 0xf4, 255.0); - g.fill(0.0, 0.0); - g.arc(24, 24, 43, 43, -PI/2, -PI/2 + (i*2*PI/20.0)); - g.save("p" + i + ".png"); - g.endDraw(); -} diff --git a/src/skins/vector/img/placeholder.png b/src/skins/vector/img/placeholder.png deleted file mode 100644 index 7da32f259c..0000000000 Binary files a/src/skins/vector/img/placeholder.png and /dev/null differ diff --git a/src/skins/vector/img/plus.svg b/src/skins/vector/img/plus.svg deleted file mode 100644 index e1d59ec6f4..0000000000 --- a/src/skins/vector/img/plus.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - Line + Line - Created with Sketch. - - - - - - - - diff --git a/src/skins/vector/img/redacted-dark.jpg b/src/skins/vector/img/redacted-dark.jpg deleted file mode 100644 index f0a91ceadb..0000000000 Binary files a/src/skins/vector/img/redacted-dark.jpg and /dev/null differ diff --git a/src/skins/vector/img/redacted.jpg b/src/skins/vector/img/redacted.jpg deleted file mode 100644 index e19d5cc4a8..0000000000 Binary files a/src/skins/vector/img/redacted.jpg and /dev/null differ diff --git a/src/skins/vector/img/right_search.svg b/src/skins/vector/img/right_search.svg deleted file mode 100644 index b430a6be19..0000000000 --- a/src/skins/vector/img/right_search.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - right_search - Created with Sketch. - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/scrolldown.svg b/src/skins/vector/img/scrolldown.svg deleted file mode 100644 index d6599c5fc7..0000000000 --- a/src/skins/vector/img/scrolldown.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - icon_newmessages - Created with Sketch. - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/scrollto.svg b/src/skins/vector/img/scrollto.svg deleted file mode 100644 index 75df053a68..0000000000 --- a/src/skins/vector/img/scrollto.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - Slice 1 - Created with Sketch. - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/scrollup.svg b/src/skins/vector/img/scrollup.svg deleted file mode 100644 index 1692f2a6c0..0000000000 --- a/src/skins/vector/img/scrollup.svg +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - image/svg+xml - - - - - - - icon_newmessages - Created with Sketch. - - - - - - - - - - diff --git a/src/skins/vector/img/search-button.svg b/src/skins/vector/img/search-button.svg deleted file mode 100644 index f4808842ff..0000000000 --- a/src/skins/vector/img/search-button.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - icon_search - Created with Sketch. - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/search-icon-vector.svg b/src/skins/vector/img/search-icon-vector.svg deleted file mode 100644 index 5780277f38..0000000000 --- a/src/skins/vector/img/search-icon-vector.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - diff --git a/src/skins/vector/img/search.png b/src/skins/vector/img/search.png deleted file mode 100644 index 2f98d29048..0000000000 Binary files a/src/skins/vector/img/search.png and /dev/null differ diff --git a/src/skins/vector/img/search.svg b/src/skins/vector/img/search.svg deleted file mode 100644 index bd4cd9200c..0000000000 --- a/src/skins/vector/img/search.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - icons_search - Created with bin/sketchtool. - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/selected.png b/src/skins/vector/img/selected.png deleted file mode 100644 index 8931cba75f..0000000000 Binary files a/src/skins/vector/img/selected.png and /dev/null differ diff --git a/src/skins/vector/img/settings-big.png b/src/skins/vector/img/settings-big.png deleted file mode 100644 index cb2e0a62d0..0000000000 Binary files a/src/skins/vector/img/settings-big.png and /dev/null differ diff --git a/src/skins/vector/img/settings-big.svg b/src/skins/vector/img/settings-big.svg deleted file mode 100644 index c9587d58c2..0000000000 --- a/src/skins/vector/img/settings-big.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - icons_settings - Created with sketchtool. - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/settings.png b/src/skins/vector/img/settings.png deleted file mode 100644 index 264b3c9bc3..0000000000 Binary files a/src/skins/vector/img/settings.png and /dev/null differ diff --git a/src/skins/vector/img/settings.svg b/src/skins/vector/img/settings.svg deleted file mode 100644 index 4190c7b8de..0000000000 --- a/src/skins/vector/img/settings.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - icon_settings_small - Created with bin/sketchtool. - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/sound-indicator.svg b/src/skins/vector/img/sound-indicator.svg deleted file mode 100644 index 9b8de53d81..0000000000 --- a/src/skins/vector/img/sound-indicator.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - sound_indicator - Created with Sketch. - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/spinner.gif b/src/skins/vector/img/spinner.gif deleted file mode 100644 index ab4871214b..0000000000 Binary files a/src/skins/vector/img/spinner.gif and /dev/null differ diff --git a/src/skins/vector/img/tick.svg b/src/skins/vector/img/tick.svg deleted file mode 100644 index 6177f15f5e..0000000000 --- a/src/skins/vector/img/tick.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - icon_tick - Created with sketchtool. - - - - - - - diff --git a/src/skins/vector/img/trans.png b/src/skins/vector/img/trans.png deleted file mode 100644 index 8ba2310a06..0000000000 Binary files a/src/skins/vector/img/trans.png and /dev/null differ diff --git a/src/skins/vector/img/typing.png b/src/skins/vector/img/typing.png deleted file mode 100644 index 066a0ce8fd..0000000000 Binary files a/src/skins/vector/img/typing.png and /dev/null differ diff --git a/src/skins/vector/img/upload-big.png b/src/skins/vector/img/upload-big.png deleted file mode 100644 index c11c0c452d..0000000000 Binary files a/src/skins/vector/img/upload-big.png and /dev/null differ diff --git a/src/skins/vector/img/upload-big.svg b/src/skins/vector/img/upload-big.svg deleted file mode 100644 index 6099c2e976..0000000000 --- a/src/skins/vector/img/upload-big.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - icons_upload_drop - Created with bin/sketchtool. - - - - - - - - - - - - - - diff --git a/src/skins/vector/img/upload.png b/src/skins/vector/img/upload.png deleted file mode 100644 index 7457bcd0f1..0000000000 Binary files a/src/skins/vector/img/upload.png and /dev/null differ diff --git a/src/skins/vector/img/upload.svg b/src/skins/vector/img/upload.svg deleted file mode 100644 index 039014a2f3..0000000000 --- a/src/skins/vector/img/upload.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - icons_upload - Created with bin/sketchtool. - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/video-mute.svg b/src/skins/vector/img/video-mute.svg deleted file mode 100644 index 6de60ba39b..0000000000 --- a/src/skins/vector/img/video-mute.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - icons_video copy - Created with Sketch. - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/video-unmute.svg b/src/skins/vector/img/video-unmute.svg deleted file mode 100644 index a6c6c3b681..0000000000 --- a/src/skins/vector/img/video-unmute.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - icons_video copy - Created with Sketch. - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/video.png b/src/skins/vector/img/video.png deleted file mode 100644 index 2a788f6fa4..0000000000 Binary files a/src/skins/vector/img/video.png and /dev/null differ diff --git a/src/skins/vector/img/voice-mute.svg b/src/skins/vector/img/voice-mute.svg deleted file mode 100644 index 336641078e..0000000000 --- a/src/skins/vector/img/voice-mute.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - Audio - Created with Sketch. - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/voice-unmute.svg b/src/skins/vector/img/voice-unmute.svg deleted file mode 100644 index 0d7e6f429f..0000000000 --- a/src/skins/vector/img/voice-unmute.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - Audio - Created with Sketch. - - - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/voice.png b/src/skins/vector/img/voice.png deleted file mode 100644 index 5ba765b0f4..0000000000 Binary files a/src/skins/vector/img/voice.png and /dev/null differ diff --git a/src/skins/vector/img/voice.svg b/src/skins/vector/img/voice.svg deleted file mode 100644 index ff87270ba5..0000000000 --- a/src/skins/vector/img/voice.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - icon_voice - Created with Sketch. - - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/voip-chevron.svg b/src/skins/vector/img/voip-chevron.svg deleted file mode 100644 index 5f7cbe7153..0000000000 --- a/src/skins/vector/img/voip-chevron.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - Triangle 1 - Created with Sketch. - - - - - - - \ No newline at end of file diff --git a/src/skins/vector/img/voip-mute.png b/src/skins/vector/img/voip-mute.png deleted file mode 100644 index a16d1001e5..0000000000 Binary files a/src/skins/vector/img/voip-mute.png and /dev/null differ diff --git a/src/skins/vector/img/voip.png b/src/skins/vector/img/voip.png deleted file mode 100644 index e8f05bcc37..0000000000 Binary files a/src/skins/vector/img/voip.png and /dev/null differ diff --git a/src/skins/vector/img/warning.png b/src/skins/vector/img/warning.png deleted file mode 100644 index c5553530a8..0000000000 Binary files a/src/skins/vector/img/warning.png and /dev/null differ diff --git a/src/skins/vector/img/warning.svg b/src/skins/vector/img/warning.svg deleted file mode 100644 index b9a96a88e5..0000000000 --- a/src/skins/vector/img/warning.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/skins/vector/img/warning2.png b/src/skins/vector/img/warning2.png deleted file mode 100644 index db0fd4a897..0000000000 Binary files a/src/skins/vector/img/warning2.png and /dev/null differ diff --git a/src/skins/vector/img/warning_yellow.svg b/src/skins/vector/img/warning_yellow.svg deleted file mode 100644 index 4d227517d2..0000000000 --- a/src/skins/vector/img/warning_yellow.svg +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/skins/vector/img/zoom.png b/src/skins/vector/img/zoom.png deleted file mode 100644 index f05ea959b4..0000000000 Binary files a/src/skins/vector/img/zoom.png and /dev/null differ diff --git a/src/skins/vector/themes/status/css/_StatusLogin.scss b/src/skins/vector/themes/status/css/_StatusLogin.scss deleted file mode 100644 index 6872727423..0000000000 --- a/src/skins/vector/themes/status/css/_StatusLogin.scss +++ /dev/null @@ -1,232 +0,0 @@ -/* -Copyright 2017 New Vector Ltd - -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. -*/ - -// overrides for mx_Login* specific to Status. -// Ideally this would be all Status prefixes for a Status specific version of the component -// but given we're not doing Status as a dedicated 'skin' yet... - -.mx_StatusLogin { - - width: 100%; - height: 100%; - - display: flex; - align-items: center; - justify-content: center; - - overflow: auto; - - .mx_StatusLogin_brand { - position: absolute; - top: 30px; - left: 30px; - } - - .mx_StatusLogin_content { - margin: auto; - } - - .mx_StatusLogin_header { - text-align: center; - margin-top: 70px; - margin-bottom: 50px; - } - - .mx_StatusLogin_header h1 { - font-size: 29px; - margin-bottom: 3px; - } - - .mx_StatusLogin_subtitle { - font-size: 18px; - } - - .mx_StatusLogin_subtitle a { - color: $riot-link-color; - } - - .mx_StatusLogin_footer { - margin-top: 30px; - margin-bottom: 30px; - text-align: center; - font-size: 16px; - color: $footer-color; - } - - .mx_StatusLogin_footer p { - margin-top: 0.5em; - margin-bottom: 0.5em; - } - - .mx_StatusLogin_footer_cta { - color: $callout-color; - font-family: $header-font-family; - letter-spacing: 1px; - font-size: 13px; - text-transform: uppercase; - opacity: 1.0; - transition: opacity .2s ease; - } - - .mx_StatusLogin_footer_cta:hover { - opacity: 0.5; - text-decoration: none; - } - - // overrides of .mx_Login - - .mx_Login_box { - width: 330px; - min-height: initial; - padding-top: 40px; - padding-bottom: 20px; - padding-left: 10px; - padding-right: 10px; - border-radius: 8px; - color: $form-fg-color; - font-size: 16px; - line-height: 25px; - background-color: $form-bg-color; - background-image: url(../../themes/status/img/dot.svg); - box-shadow: 0px 5px 16px 0px rgba(25,12,46,0.16); - position: relative; - text-align: center; - } - - .mx_Login_logo { - background-color: #fff; - width: 74px; - height: 74px; - border-radius: 37px; - box-shadow: 0px 5px 16px 0px rgba(0,0,0,0.2); - position: absolute; - top: -36px; - left: 50%; - margin-left: -36px; - } - - .mx_Login_logo img { - width: 36px; - height: 36px; - padding: 19px; - } - - .mx_Login_box h2 { - text-align: center; - color: $form-fg-color; - font-size: 25px; - margin-bottom: 24px; - } - - .mx_Login_field { - width: 260px; - height: 27px; - padding: 8px 20px 10px 20px; - border-radius: 10px; - text-align: left; - border: 1px solid transparent; - background-color: $form-field-bg-color; - color: $form-field-fg-color; - font-weight: 300; - font-size: 15px; - margin-bottom: 14px; - transition: background-color .2s ease; - } - - .mx_Login_field:focus { - border: 1px solid transparent; - background-color: $form-field-bg-hover-color; - } - - .mx_Login_field::-webkit-input-placeholder { - font-family: $font-family; - color: $form-field-fg-color; - opacity: 0.6; - } - - .mx_Login_field::-moz-placeholder { - font-family: $font-family; - color: $form-field-fg-color; - opacity: 0.6; - } - - .mx_Login_field_disabled { - opacity: 0.3; - } - - .mx_Login_prompt { - font-size: 16px; - } - - .mx_Login_submit { - min-width: 200px; - width: auto; - margin-top: 13px; - margin-bottom: 10px; - } - - .mx_Login_submit:disabled { - opacity: 0.3; - } - - .mx_Login_create { - margin-top: 10px; - display: block; - text-align: center; - width: 100%; - font-size: 15px; - opacity: 1.0; - } - - .mx_Login_create:link, - .mx_Login_create:hover, - .mx_Login_create:visited - { - color: $form-fg-color; - } - - .mx_Login_forgot { - display: block; - font-size: 15px; - } - - .mx_Login_forgot:link, - .mx_Login_forgot:hover, - .mx_Login_forgot:visited - { - color: $form-fg-color; - } - - .mx_Login_error { - color: $warning-color; - font-size: 18px; - width: 300px; - height: 44px; - display: flex; - justify-content: center; - align-items: center; - margin: auto; - text-align: center; - margin-top: 12px; - margin-bottom: 16px; - } - - .mx_Login_smallError { - font-size: 13px; - line-height: initial; - } - -} diff --git a/src/skins/vector/themes/status/css/_status.scss b/src/skins/vector/themes/status/css/_status.scss deleted file mode 100644 index be4c3c7fd7..0000000000 --- a/src/skins/vector/themes/status/css/_status.scss +++ /dev/null @@ -1,286 +0,0 @@ -@font-face { - font-family:PostGrotesk-Medium; - src:url('https://status.im/fonts/PostGrotesk-Medium.eot'); - src:url('https://status.im/fonts/PostGrotesk-Medium.eot?#iefix') format("embedded-opentype"),url('https://status.im/fonts/PostGrotesk-Medium.woff') format("woff"),url('https://status.im/fonts/PostGrotesk-Medium.svg#PostGrotesk-Medium') format("svg"); - font-weight: 400; - font-style: normal; -} - -@font-face { - font-family:PostGrotesk-Book; - src:url('https://status.im/fonts/PostGrotesk-Book.eot'); - src:url('https://status.im/fonts/PostGrotesk-Book.eot?#iefix') format("embedded-opentype"),url('https://status.im/fonts/PostGrotesk-Book.woff') format("woff"),url('https://status.im/fonts/PostGrotesk-Book.svg#PostGrotesk-Book') format("svg"); - font-weight: 400; - font-style: normal; -} - -// We deliberately prioritise Arial over Helvetica here due to diacritic problems (see _base.scss) -// N.B. that the status.im website uses: -// font-family:PostGrotesk-Book,-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif; -// ...but can't be bothered to work out how the apple fonts & segoe interact, so keepingn it simple for now. - -$font-family: PostGrotesk-Book, Arial, Helvetica, Sans-Serif; - -// typical text (dark-on-white in light skin) -$primary-fg-color: #70808D; -$primary-bg-color: #EEF2F5; - -// ***** Start of Status theme specifics ****** -$header-color: #49555F; -$header-font-family: PostGrotesk-Medium, Arial, Helvetica, Sans-Serif; - -$footer-color: #8D99A4; - -$riot-link-color: #A26988; - -a { - text-decoration: none; -} - -a:hover { - text-decoration: underline; -} - -h1,h2,h3,h4,h5 { - color: $header-color; - font-family: $header-font-family; - font-weight: 400 ! important; -} - -$callout-color: #4360DF; // or #4957b8 from status.im homepage - -$form-bg-color: $callout-color; -$form-fg-color: #ffffff; - -$form-field-bg-color: rgba(244, 242, 247, 0.12); -$form-field-bg-hover-color: rgba(255, 255, 255, 0.2); -$form-field-fg-color: #ffffff; - -// ***** End of Status theme specifics ****** - - -// used for dialog box text -$light-fg-color: #747474; - -// used for focusing form controls -$focus-bg-color: #dddddd; - -// button UI (white-on-green in light skin) -$accent-fg-color: #ffffff; -$accent-color: #6CC1F6; -$accent-hover-color: #84cfff; - -$selection-fg-color: $primary-bg-color; - -$focus-brightness: 125%; - -// red warning colour -$warning-color: #F69E98; -$mention-user-pill-bg-color: #ff0064; -$other-user-pill-bg-color: rgba(0, 0, 0, 0.1); - -$group-alert-color: #774f7e; - -$preview-bar-bg-color: #f7f7f7; - -// left-panel style muted accent color -$secondary-accent-color: #586C7B; -$tertiary-accent-color: #DBEBF6; - -// stop the tinter trying to change the secondary accent color -// by overriding the key to something untintable -// XXX: this is a bit of a hack. -#mx_theme_secondaryAccentColor { - color: #c0ffee ! important; -} - -#mx_theme_tertiaryAccentColor { - color: #c0ffee ! important; -} - -// used by RoomDirectory permissions -$plinth-bg-color: $secondary-accent-color; - -// used by RoomDropTarget -$droptarget-bg-color: rgba(255,255,255,0.5); - -// used by AddressSelector -$selected-color: #eaf5f0; - -// selected for hoverover & selected event tiles -$event-selected-color: #f7f7f7; - -// used for the hairline dividers in RoomView -$primary-hairline-color: #e5e5e5; - -// used for the border of input text fields -$input-border-color: #c9cfd4; - -// apart from login forms, which have stronger border -$strong-input-border-color: #c7c7c7; - -// used for UserSettings EditableText -$input-underline-color: rgba(151, 151, 151, 0.5); -$input-fg-color: rgba(74, 74, 74, 0.9); - -// context menus -$menu-border-color: rgba(187, 187, 187, 0.5); -$menu-bg-color: #f6f6f6; - -$avatar-initial-color: #ffffff; -$avatar-bg-color: transparent; - -$h3-color: #3d3b39; - -$dialog-background-bg-color: #e9e9e9; -$lightbox-background-bg-color: #000; - -$greyed-fg-color: #888; - -$neutral-badge-color: #dbdbdb; - -$preview-widget-bar-color: #ddd; -$preview-widget-fg-color: $greyed-fg-color; - -$blockquote-bar-color: #ddd; -$blockquote-fg-color: #777; - -$settings-grey-fg-color: #a2a2a2; - -$voip-decline-color: #f48080; -$voip-accept-color: #80f480; - -$rte-bg-color: #e9e9e9; -$rte-code-bg-color: rgba(0, 0, 0, 0.04); -$rte-room-pill-color: #aaa; - -// ******************** - -$roomtile-name-color: #ffffff; -$roomtile-selected-bg-color: #465561; -$roomtile-focused-bg-color: #6d8597; - -$roomsublist-background: #465561; -$roomsublist-label-fg-color: #ffffff; -$roomsublist-label-bg-color: $secondary-accent-color; -$roomsublist-chevron-color: #ffffff; - -$panel-divider-color: rgba(0, 0, 0, 0.2); - -// ******************** - -$widget-menu-bar-bg-color: #f7f7f7; - -// ******************** - -// event tile lifecycle -$event-encrypting-color: #abddbc; -$event-sending-color: #ddd; -$event-notsent-color: #f44; - -// event redaction -$event-redacted-fg-color: #e2e2e2; -$event-redacted-border-color: #cccccc; - -// event timestamp -$event-timestamp-color: #acacac; - -$edit-button-url: "../../img/icon_context_message.svg"; -$copy-button-url: "../../img/icon_copy_message.svg"; - -// e2e -$e2e-verified-color: #76cfa5; // N.B. *NOT* the same as $accent-color -$e2e-unverified-color: #e8bf37; -$e2e-warning-color: #ba6363; - -/*** ImageView ***/ -$lightbox-bg-color: #454545; -$lightbox-fg-color: #ffffff; -$lightbox-border-color: #ffffff; - -// unused? -$progressbar-color: #000; - -@define-mixin mx_DialogButton { - /* align images in buttons (eg spinners) */ - vertical-align: middle; - border-radius: 8px; - border: 1px solid rgba(199, 206, 209, 0.12); - background-color: $accent-color; - font-size: 13px; - font-family: $header-font-family; - text-transform: uppercase; - letter-spacing: 1px; - color: $accent-fg-color; - cursor: pointer; - outline: none; - padding: 14px; - box-sizing: border-box; - padding-left: 1.5em; - padding-right: 1.5em; - display: inline-block; - transition: background-color .2s ease; -} - -@define-mixin mx_DialogButton_hover { - background-color: $accent-hover-color; -} - -@define-mixin mx_DialogButton_small { - @mixin mx_DialogButton; - height: auto; - padding-top: 7px; - padding-bottom: 7px; - padding-left: 1em; - padding-right: 1em; -} - -.mx_RoomSubList_label { - font-size: 13px; - font-family: $header-font-family; - letter-spacing: 1px; -} - -// FIXME: all these ! importants are horrid - we should instead go and define -// variables or something. -.mx_SearchBox_search { - color: #fff ! important; -} - -.mx_SearchBox_search::-webkit-input-placeholder { - color: rgba(255, 255, 255, 0.6) ! important; -} - -.mx_SearchBox_search::-moz-placeholder { - color: rgba(255, 255, 255, 0.6) ! important; -} - -.mx_RoomList_emptySubListTip, -.mx_RoomDropTarget { - font-size: 14px ! important; - border: 1.5px dashed rgba(0,0,0,0.2) ! important; - color: #fff ! important; - background-color: transparent ! important; - border-radius: 6px ! important; - margin-left: 6px ! important; - margin-right: 6px ! important; - margin-top: 8px ! important; - margin-bottom: 7px ! important; - padding: 8px ! important; -} - -.mx_RoomDirectory_perm { - font-family: $header-font-family ! important; - background-color: #fff ! important; -} - -.mx_RoomTile_badge, -.mx_RoomSubList_badge { - height: 12px ! important; - padding-top: 1px ! important; - padding-bottom: 1px ! important; -} - -.mx_RoomSubList_chevron { - top: 8px ! important; -} \ No newline at end of file diff --git a/src/skins/vector/themes/status/css/status.scss b/src/skins/vector/themes/status/css/status.scss deleted file mode 100644 index 09f5c78f17..0000000000 --- a/src/skins/vector/themes/status/css/status.scss +++ /dev/null @@ -1,4 +0,0 @@ -@import "../../../css/themes/_base.scss"; -@import "_status.scss"; -@import "../../../css/_components.scss"; -@import "_StatusLogin.scss"; diff --git a/src/skins/vector/themes/status/fonts/README b/src/skins/vector/themes/status/fonts/README deleted file mode 100644 index d7900145ed..0000000000 --- a/src/skins/vector/themes/status/fonts/README +++ /dev/null @@ -1 +0,0 @@ -We link out to status.im for fonts, although ideally we'd put them here. diff --git a/src/skins/vector/themes/status/img/a.png b/src/skins/vector/themes/status/img/a.png deleted file mode 100644 index defbcc4bcd..0000000000 Binary files a/src/skins/vector/themes/status/img/a.png and /dev/null differ diff --git a/src/skins/vector/themes/status/img/d.png b/src/skins/vector/themes/status/img/d.png deleted file mode 100644 index daeb0b0785..0000000000 Binary files a/src/skins/vector/themes/status/img/d.png and /dev/null differ diff --git a/src/skins/vector/themes/status/img/dot.svg b/src/skins/vector/themes/status/img/dot.svg deleted file mode 100644 index 45df23c049..0000000000 --- a/src/skins/vector/themes/status/img/dot.svg +++ /dev/null @@ -1 +0,0 @@ -Artboard \ No newline at end of file diff --git a/src/skins/vector/themes/status/img/g.png b/src/skins/vector/themes/status/img/g.png deleted file mode 100644 index f675a33022..0000000000 Binary files a/src/skins/vector/themes/status/img/g.png and /dev/null differ diff --git a/src/skins/vector/themes/status/img/i.png b/src/skins/vector/themes/status/img/i.png deleted file mode 100644 index b63eeae13b..0000000000 Binary files a/src/skins/vector/themes/status/img/i.png and /dev/null differ diff --git a/src/skins/vector/themes/status/img/logo.svg b/src/skins/vector/themes/status/img/logo.svg deleted file mode 100644 index 68e4a77a5c..0000000000 --- a/src/skins/vector/themes/status/img/logo.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - Status logo - Created with Sketch. - - - - - \ No newline at end of file diff --git a/src/skins/vector/themes/status/img/n.png b/src/skins/vector/themes/status/img/n.png deleted file mode 100644 index b8e33d41f7..0000000000 Binary files a/src/skins/vector/themes/status/img/n.png and /dev/null differ diff --git a/src/utils/DirectoryUtils.js b/src/utils/DirectoryUtils.js deleted file mode 100644 index 72e44681b6..0000000000 --- a/src/utils/DirectoryUtils.js +++ /dev/null @@ -1,23 +0,0 @@ -// Find a protocol 'instance' with a given instance_id -// in the supplied protocols dict -export function instanceForInstanceId(protocols, instance_id) { - if (!instance_id) return null; - for (const proto of Object.keys(protocols)) { - if (!protocols[proto].instances && protocols[proto].instances instanceof Array) continue; - for (const instance of protocols[proto].instances) { - if (instance.instance_id == instance_id) return instance; - } - } -} - -// given an instance_id, return the name of the protocol for -// that instance ID in the supplied protocols dict -export function protocolNameForInstanceId(protocols, instance_id) { - if (!instance_id) return null; - for (const proto of Object.keys(protocols)) { - if (!protocols[proto].instances && protocols[proto].instances instanceof Array) continue; - for (const instance of protocols[proto].instances) { - if (instance.instance_id == instance_id) return proto; - } - } -} diff --git a/src/vector/getconfig.js b/src/vector/getconfig.js new file mode 100644 index 0000000000..984b105190 --- /dev/null +++ b/src/vector/getconfig.js @@ -0,0 +1,71 @@ +/* +Copyright 2018 New Vector Ltd + +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. +*/ + +import Promise from 'bluebird'; +import request from 'browser-request'; + +// Load the config file. First try to load up a domain-specific config of the +// form "config.$domain.json" and if that fails, fall back to config.json. +export async function getVectorConfig(relativeLocation) { + if (relativeLocation === undefined) relativeLocation = ''; + if (relativeLocation !== '' && !relativeLocation.endsWith('/')) relativeLocation += '/'; + try { + const configJson = await getConfig(`${relativeLocation}config.${document.domain}.json`); + // 404s succeed with an empty json config, so check that there are keys + if (Object.keys(configJson).length === 0) { + throw new Error(); // throw to enter the catch + } + return configJson; + } catch (e) { + return await getConfig(relativeLocation + "config.json"); + } +} + +function getConfig(configJsonFilename) { + return new Promise(function(resolve, reject) { + request( + { method: "GET", url: configJsonFilename, qs: { cachebuster: Date.now() } }, + (err, response, body) => { + try { + if (err || response.status < 200 || response.status >= 300) { + // Lack of a config isn't an error, we should + // just use the defaults. + // Also treat a blank config as no config, assuming + // the status code is 0, because we don't get 404s + // from file: URIs so this is the only way we can + // not fail if the file doesn't exist when loading + // from a file:// URI. + if (response) { + if (response.status == 404 || (response.status == 0 && body == '')) { + resolve({}); + } + } + reject({err: err, response: response}); + return; + } + + // We parse the JSON ourselves rather than use the JSON + // parameter, since this throws a parse error on empty + // which breaks if there's no config.json and we're + // loading from the filesystem (see above). + resolve(JSON.parse(body)); + } catch (e) { + reject({err: e}); + } + }, + ); + }); +} diff --git a/src/vector/index.html b/src/vector/index.html index ec1b2025d4..864337eac2 100644 --- a/src/vector/index.html +++ b/src/vector/index.html @@ -3,25 +3,25 @@ Riot - - - - - - - - - + + + + + + + + + - + - - + + - + <% for (var i=0; i < htmlWebpackPlugin.files.css.length; i++) { var file = htmlWebpackPlugin.files.css[i]; var match = file.match(/^bundles\/.*?\/theme-(.*)\.css$/); @@ -35,23 +35,14 @@ } %> -
    +
    - <% for (var i=0; i < htmlWebpackPlugin.files.js.length; i++) { - // Not a particularly graceful way of not putting the indexeddb worker script - // into the main page - if (_.endsWith(htmlWebpackPlugin.files.js[i], 'indexeddb-worker.js')) { - %> - - <% - continue; - } - %> - - <% } %> - + + + + -