diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..dfe07704 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/.gitignore b/.gitignore index e5832e60..5b1955b2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,12 +1,9 @@ - *.zip - *.crx - *.pem - *.map - -ModernDeck\README.md - -node_modules \ No newline at end of file +dist +node_modules +.DS_Store +*.log +yarn.lock diff --git a/.stylelintrc.json b/.stylelintrc.json new file mode 100644 index 00000000..9bae7e7f --- /dev/null +++ b/.stylelintrc.json @@ -0,0 +1,74 @@ +{ + "rules": { + "at-rule-empty-line-before": "always", + "at-rule-no-unknown": true, + "at-rule-no-vendor-prefix": true, + "at-rule-property-requirelist": {}, + "at-rule-semicolon-space-before": "never", + "block-no-empty": true, + "color-hex-length": "short", + "color-named": "never", + "color-no-invalid-hex": true, + "comment-empty-line-before": "always", + "comment-no-empty": true, + "comment-whitespace-inside": "always", + "declaration-block-no-duplicate-properties": true, + "declaration-block-no-redundant-longhand-properties": true, + "declaration-block-no-shorthand-property-overrides": true, + "declaration-colon-space-after": "never", + "declaration-colon-space-before": "never", + "declaration-empty-line-before": "never", + "font-family-name-quotes": "always-where-required", + "font-family-no-duplicate-names": true, + "font-weight-notation": "numeric", + "function-calc-no-invalid": true, + "function-calc-no-unspaced-operator": true, + "function-comma-space-after": "never", + "function-comma-space-before": "never", + "function-linear-gradient-no-nonstandard-direction": true, + "function-max-empty-lines": 4, + "function-name-case": "lower", + "function-url-no-scheme-relative": true, + "function-url-quotes": "always", + "indentation": "tab", + "keyframe-declaration-no-important": true, + "length-zero-no-unit": true, + "linebreaks": "windows", + "max-empty-lines": 4, + "max-nesting-depth": 4, + "media-feature-name-blacklist": [], + "media-feature-name-case": "lower", + "media-feature-name-no-unknown": true, + "media-feature-name-no-vendor-prefix": true, + "media-feature-name-value-whitelist": {}, + "no-duplicate-at-import-rules": true, + "no-duplicate-selectors": true, + "no-empty-source": true, + "no-empty-first-line": true, + "no-eol-whitespace": true, + "no-extra-semicolons": true, + "no-invalid-double-slash-comments": true, + "no-missing-end-of-source-newline": true, + "no-unknown-animations": true, + "number-max-precision": 6, + "number-no-trailing-zeros": true, + "property-blacklist":["-webkit-appearance","-moz-tab-width"], + "property-case": "lower", + "property-no-unknown": true, + "rule-empty-line-before": "always-multi-line", + "selector-attribute-quotes": "always", + "selector-descendant-combinator-no-non-space": true, + "selector-no-vendor-prefix": true, + "selector-pseudo-class-case": "lower", + "selector-pseudo-element-case": "lower", + "selector-pseudo-element-no-unknown": true, + "selector-pseudo-element-blacklist": ["-webkit-slider-thumb","-moz-range-thumb"], + "selector-type-case": "lower", + "selector-type-no-unknown": true, + "string-no-newline": true, + "string-quotes": "double", + "unit-case": "lower", + "unit-no-unknown": true, + "value-no-vendor-prefix": true + } +} \ No newline at end of file diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..d8f0e7ec --- /dev/null +++ b/.travis.yml @@ -0,0 +1,19 @@ +language: node_js +os: osx +node_js: +- lts/* +deploy: + provider: releases + cache: + directories: + - node_modules + - $HOME/.cache/electron + - $HOME/.cache/electron-builder + + file_glob: true + draft: true + api_key: + secure: dk/aARK5ENlFTyiHLMGymGPLOQuQNp4qxSlbr7/jkc6mEB1AnDyMjEJtDLXfiJi+tZD+AIpBnoHel71Sz9MLK3IUrZaLXqelusS6t8MmWYlIgPVcyx8G5gSAbBCqWkJ/0Eja3X1PUIPP6aYxVrcKNARM4kOMjljvMTsOnE+rR6dL/PWbeZE7cek0EhChvcI8XpxgdDiA/yi26Cf1CK4PtqNPBXfyrSlfSZ0xGiQU7xweHLbcqe86o+T/KwFQ7IMqztnmx35KFw+IUV2oCX0TwG06hNt2O2eB5LAMRpq4k/fDpJb3aiyN36B19DsNZmf1OGbVZNONurowTslDYuSgLyvYSxU6GJtGRgahn7KceXlJ8LIwODl/PuBbftKGgbieMIxc0knL2InV9EGhNMnkq/tfPAePUSc5uO+sFjl9j0uZltFuP5Q4aBRTTUSIqDMC/N4TbQSPZEPiibnlqFWTKnqK4tZ8Gb2efc5Eb+cCjsj4C9oYiJEI4fcDXJrVYYzWn3BKcPn7oTjFmNToqPAn5Ao2AtsdOkrd5mXn4ZlfGDwF7Mec3B2m+Vf6oWg4WsOaPTB5WxQDxKR17/mSP1LbRVS7GS3O6hoEn6tOnwnfEtQ2N+mTKHLJ7F081Xdznvu5lVfecLnzz+MkZXy7dSMKT+bvZLRLSMyg3qI9GUSTHqk= + file: dist/*.* + on: + repo: dangeredwolf/ModernDeckAPPTEST diff --git a/LICENSE.md b/LICENSE.md deleted file mode 100644 index b823bcc4..00000000 --- a/LICENSE.md +++ /dev/null @@ -1,39 +0,0 @@ -CC0 1.0 Universal -================== - -Statement of Purpose ---------------------- - -The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work"). - -Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others. - -For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights. - -1. Copyright and Related Rights. --------------------------------- -A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following: - -i. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work; -ii. moral rights retained by the original author(s) and/or performer(s); -iii. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work; -iv. rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below; -v. rights protecting the extraction, dissemination, use and reuse of data in a Work; -vi. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and -vii. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof. - -2. Waiver. ------------ -To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose. - -3. Public License Fallback. ----------------------------- -Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose. - -4. Limitations and Disclaimers. --------------------------------- - -a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document. -b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law. -c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work. -d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work. diff --git a/ModernDeck/LICENCES b/ModernDeck/LICENCES deleted file mode 100644 index fd522ff8..00000000 --- a/ModernDeck/LICENCES +++ /dev/null @@ -1,4 +0,0 @@ -=== Material Design Spinner === -ModernDeck contains some content from the particular version of the following project: -Copyright 2014 The Polymer Project Authors. All rights reserved. -This code may only be used under the BSD style licence found at http://polymer.github.io/LICENSE.txt \ No newline at end of file diff --git a/ModernDeck/LICENCES.md b/ModernDeck/LICENCES.md new file mode 100644 index 00000000..a9ef8637 --- /dev/null +++ b/ModernDeck/LICENCES.md @@ -0,0 +1,389 @@ +ModernDeck is made possible by other open source projects! + +=== Electron (ModernDeck App only) === + +Copyright (c) 2013-2019 GitHub Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== Material Design Spinner === + +Non-Licence Note: ModernDeck does not use Polymer for anything other than the material design spinner + + +Copyright (c) 2014 The Polymer Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== Roboto Font AND Material Design Icons === + +https://github.com/google/roboto/ +https://github.com/google/material-design-icons/ + + 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. + +=== Noto Sans Fonts === + +https://github.com/googlefonts/noto-fonts + +Copyright 2018 The Noto Project Authors (github.com/googlei18n/noto-fonts) + +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. + +=== moduleRaid === + +https://github.com/pixeldesu/moduleRaid + +MIT License + +Copyright (c) 2018 Andreas N. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/ModernDeck/README.md b/ModernDeck/README.md deleted file mode 100644 index 7e007640..00000000 --- a/ModernDeck/README.md +++ /dev/null @@ -1,53 +0,0 @@ - - -ModernDeck Full Source - -================== - -Hello fellow Mozilla reviewer! - -ModernDeck is an extension, originally for Chrome, that refreshes TweetDeck's interface with a nice looking Material-design-inspired interface, as well as offering its users extra customization options. - - -This is ModernDeck's full source tree. I've been working on it with Chrome for a long time and I am excited to bring it to Firefox. - -There are no special build instructions. It is ready to test using about:debugging and loading the unpacked folder. - - - -Why the extra source code submission if it doesn't need built? - -================== - -ModernDeck, as a material design theme/customization extension, uses Roboto and Noto Sans to render fonts. Roboto isn't particularly big, but the Noto Sans collection absolutely dwarfs it, pushing it over 70 MB in size. A lot of this space is not necessary if you aren't viewing tweets in languages such as Chinese or Japanese. So, ModernDeck loads it over the Internet, specifically GitHub, and the browser caches it. - -CSS files are also loaded on the fly. The main file, moderndeck.css, styles the main page, but one of ModernDeck's prominent features is having several themes to choose from. - -The primary CSS file is sources\moderndeck.css. This is the theme-neutral base for the extension. in sources\cssextensions, it includes every css extension, which is usually only loaded via GitHub if the user requests it. - -As TweetDeck releases updates big and small at random, it is not uncommon to make emergency patches to ModernDeck to fix it. -Due to this, moderndeck.css and MTDinject.js are also streamed. - -moderndeck.css updates mean minor visual issues can be fixed by simply refreshing after a fix is out. - -MTDinject.js is also streamed, but it is isolated from all Web Extension APIs, and functions much like a user's own userscript. The background and main load scripts are contained within the extension itself, and must be updated through the extension marketplace (AMO, Chrome Webstore, etc) - -Because of how Twitter's API and Oauth authentication works with TweetDeck, ModernDeck cannot under any circumstances ever see, let alone process your Twitter password, and no user data is sent to me or third parties, even for analytics, unless a serious error/crash occurs, in which case the user is prompted to send a stacktrace, or if the user writes a submission using the "Send Feedback" option. - -How to test ModernDeck - -================== - -ModernDeck's code does not require extra building. In Firefox, it's a matter of going to about:debugging and adding the ModernDeck folder. It is also ready for testing in Chromium-based browsers, as well as Microsoft Edge. - -From there, it is a matter of either clicking the new "Launch TweetDeck" icon, or going to https://tweetdeck.twitter.com. Both will take you to the same place. - -To test, you will need a Twitter account. You can make a free one at twitter.com, or use any existing account. - -Once you open TweetDeck, it is a matter of authenticating, which takes you outside of TweetDeck, to Twitter's main site, where you login over Oauth. - - - -From there, I invite you to test whatever features you like! - -If you have any other questions, please don't hesitate to contact me through AMO's Developer Hub, or by email at d@ngeredwolf.me \ No newline at end of file diff --git a/ModernDeck/_locales/en/messages.json b/ModernDeck/_locales/en/messages.json index 97c5e963..414e8ca6 100644 --- a/ModernDeck/_locales/en/messages.json +++ b/ModernDeck/_locales/en/messages.json @@ -1,6 +1,6 @@ { "description":{ - "message":"TweetDeck, just more beautiful, colourful, customisable, and fun than ever." + "message":"TweetDeck, but more beautiful and fun than ever." }, "launch":{ "message":"Launch TweetDeck" diff --git a/ModernDeck/_locales/en_CA/messages.json b/ModernDeck/_locales/en_CA/messages.json index 75bfc47d..414e8ca6 100644 --- a/ModernDeck/_locales/en_CA/messages.json +++ b/ModernDeck/_locales/en_CA/messages.json @@ -1,6 +1,6 @@ { "description":{ - "message":"TweetDeck, just more beautiful, colourful, customizable, and fun than ever." + "message":"TweetDeck, but more beautiful and fun than ever." }, "launch":{ "message":"Launch TweetDeck" diff --git a/ModernDeck/_locales/en_US/messages.json b/ModernDeck/_locales/en_US/messages.json index bc4fb7c1..414e8ca6 100644 --- a/ModernDeck/_locales/en_US/messages.json +++ b/ModernDeck/_locales/en_US/messages.json @@ -1,6 +1,6 @@ { "description":{ - "message":"TweetDeck, just more beautiful, colorful, customizable, and fun than ever." + "message":"TweetDeck, but more beautiful and fun than ever." }, "launch":{ "message":"Launch TweetDeck" diff --git a/ModernDeck/_locales/es/messages.json b/ModernDeck/_locales/es/messages.json index 10ed27ce..efba96ba 100644 --- a/ModernDeck/_locales/es/messages.json +++ b/ModernDeck/_locales/es/messages.json @@ -1,6 +1,6 @@ { "description":{ - "message":"TweetDeck, simplemente más hermoso, colorido, personalizable y divertido que nunca." + "message":"TweetDeck, pero más hermoso y divertido que nunca." }, "launch":{ "message":"Inicia TweetDeck" diff --git a/ModernDeck/extension/ITD.js b/ModernDeck/extension/ITD.js index a944ab11..bbf55187 100644 --- a/ModernDeck/extension/ITD.js +++ b/ModernDeck/extension/ITD.js @@ -1 +1,2 @@ -window.open("https://tweetdeck.twitter.com"); \ No newline at end of file +var a = typeof browser !== "undefined" ? browser : chrome; +a.tabs.create({url:"https://tweetdeck.twitter.com"}, function(){}) \ No newline at end of file diff --git a/ModernDeck/extension/MTDBackground.js b/ModernDeck/extension/MTDBackground.js index 695efcde..c9e7a47b 100644 --- a/ModernDeck/extension/MTDBackground.js +++ b/ModernDeck/extension/MTDBackground.js @@ -3,9 +3,11 @@ // Released under the MIT license -if (chrome !== "undefined") { +var browser = browser || chrome; - chrome.webRequest.onHeadersReceived.addListener(function(details) { +if (browser !== "undefined") { + + browser.webRequest.onHeadersReceived.addListener(function(details) { if (details.type !== "main_frame" && details.type !== "sub_frame") { @@ -14,40 +16,43 @@ if (chrome !== "undefined") { for (i = 0; i < details.responseHeaders.length; i++) { if (typeof details.responseHeaders[i].name !== "undefined" && details.responseHeaders[i].name === "content-security-policy") { - details.responseHeaders[i].value = "default-src 'self'; connect-src *; font-src https: data: *; frame-src https:; frame-ancestors 'self' https:; img-src https: data:; media-src *; object-src 'self' https:; script-src 'self' 'unsafe-eval' 'unsafe-inline' https://sentry.io https://cdn.jsdelivr.net https://ajax.googleapis.com https://dangeredwolf.com https://tweetdeckenhancer.com https://cdn.ravenjs.com/ https://*.twitter.com https://*.twimg.com https://rawgit.com https://*.rawgit.com https://ssl.google-analytics.com https://api-ssl.bitly.com; style-src 'self' 'unsafe-inline' https:;"; + details.responseHeaders[i].value = "default-src 'self'; connect-src *; font-src https: data: *; frame-src https:; frame-ancestors 'self' https:; img-src https: data:; media-src *; object-src 'self' https:; script-src 'self' 'unsafe-eval' 'unsafe-inline' https://c6.patreon.com https://sentry.io https://cdn.jsdelivr.net https://ajax.googleapis.com https://cdn.ravenjs.com/ https://*.twitter.com https://*.twimg.com https://api-ssl.bitly.com; style-src 'self' 'unsafe-inline' https:;"; return {responseHeaders:details.responseHeaders}; } } }, {urls:["https://tweetdeck.twitter.com/*","https://twitter.com/i/cards/*"]}, ["responseHeaders","blocking"]); - chrome.webRequest.onBeforeRequest.addListener(function(details) { + browser.webRequest.onBeforeRequest.addListener(function(details) { if (details.url.indexOf(".css") > -1 && (details.url.indexOf("bundle") > -1 && details.url.indexOf("dist") > -1)) { return {cancel:true}; } + if (details.url.indexOf(".css") > -1 && (details.url.indexOf("tfw/css") > -1 && details.url.indexOf("tweetdeck_bundle") > -1)) { + return ({redirectURL:browser.runtime.getURL("sources/cssextensions/twittercard.css")}); + } + return; - }, {urls:["https://ton.twimg.com/*"]}, ["blocking"]); + }, {urls:["https://ton.twimg.com/*"]}, ["blocking","requestBody"]); - chrome.runtime.onMessage.addListener(function(m){ + browser.runtime.onMessage.addListener(function(m){ console.log("Message received"); console.log(m); if (m == "getStorage") { - chrome.storage.local.get(null, function(items){ - chrome.tabs.query({url: "https://tweetdeck.twitter.com/"}, function(tabs){ + browser.storage.local.get(null, function(items){ + browser.tabs.query({url: "https://tweetdeck.twitter.com/"}, function(tabs){ if (typeof tabs[0] !== "undefined") { - chrome.tabs.sendMessage(tabs[0].id, {"name": "sendStorage", "storage": JSON.stringify(items)}); + browser.tabs.sendMessage(tabs[0].id, {"name": "sendStorage", "storage": JSON.stringify(items)}); } else { - chrome.tabs.sendMessage(tabs.id, {"name": "sendStorage", "message": JSON.stringify(items)}); + browser.tabs.sendMessage(tabs.id, {"name": "sendStorage", "message": JSON.stringify(items)}); } console.log("Reply sent"); console.log(items); }); }); } else if (m.name == "setStorage") { - chrome.storage.local.set(m.content); + browser.storage.local.set(m.content); } }); } - diff --git a/ModernDeck/extension/MTDLoad.js b/ModernDeck/extension/MTDLoad.js index 8569173f..714cad83 100644 --- a/ModernDeck/extension/MTDLoad.js +++ b/ModernDeck/extension/MTDLoad.js @@ -2,45 +2,19 @@ // Copyright (c) 2019 dangered wolf "use strict"; -console.log("MTDLoad 6.0"); +console.log("MTDLoad 7.0"); var isDev = true; -var isApp = typeof require !== "undefined"; -var isChromium = typeof chrome !== "undefined"; // NOTE TO SELF: This probably triggers on Microsoft Edge but idk -var isSafari = typeof safari !== "undefined"; -var isFirefox = !isChromium && !isSafari && !isApp; +var isEdge = typeof MSGesture !== "undefined"; var storage = {}; var electron,app,BrowserWindow,mainWindow; -if (isApp) { - - electron = require('electron'); - app = electron.app; - BrowserWindow = electron.BrowserWindow; - - app.on('ready',function(){ - mainWindow = new BrowserWindow({width: 1280, height: 720, autoHideMenuBar: true, frame:true}); - - mainWindow.loadURL('file://' + __dirname + '../../../index.html'); - - if (isDev) { - mainWindow.webContents.openDevTools(); - } - - //mainWindow.webContents.executeJavaScript("var links=document.querySelectorAll(\"link[title='dark'],link[title='light']\");for(i=0;i -1; +var isMac = navigator.userAgent.indexOf("Mac OS X") > -1; +var ctrlShiftText = isMac ? "⌃⇧" : "Ctrl+Shift+"; -var twitterSucks = document.createElement("script"); -twitterSucks.type = "text/javascript"; +var injectedFonts = false; var make = function(a){return $(document.createElement(a))}; var head,body,html = undefined; @@ -56,91 +68,832 @@ var MTDStorage = {}; var contextMenuFunctions; +var newLoginPage = '
'; -var welcomeScreenHtml = '

New in ModernDeck 6.0

Themes

Home@dangeredwolf

People\'s personalities are far more than just black and white. Make your TweetDeck experience truly personal with a variety of styles to suit whatever your tastes might be. This and many of the other options are adjustable with ModernDeck

Refreshed Icons


As of this release, 100% of icons are either created inhouse for ModernDeck, or are borrowed from the material design icon library. This includes the new Retweet icon, which was obvious from the beginning that an inhouse solution was mandatory.

Refreshed UI

ModernDeck 6.0 has a refreshed UI, taking advantage of an all-new edge-to-edge design that snaps to the left side. This helps take better advantage of screen real estate while still being elegant to use, and isn\'t a bad match with ModernDeck\'s navigation drawer.

Tweet Shortener Assistant

Have you ever dealt with a moment where you\'re just barely over the 140 character limit and need to cut down the size a bit? In ModernDeck 6.0, we have you covered. If you go over the 140 character limit, we\'ll prompt you with suggestions of what ways it detects will help shorten your tweet. This uses a number of algorithms such as checking for excess spacing and punctuation, to more advanced ones such as detecting and replacing applicable letters with liguatures, a Unicode feature that allows combining of certain letters to replace 2, 3, or sometimes even 4 characters, into what Twitter registers as just 1 character, and oftentimes looks about the same. All of these are suggestions, so you can click on the one you want, and you\'ll get no more, no less, than you asked for. Then you can finally send that Tweet, and you\'ve saved some precious time.

Hearts or Stars

ModernDeck allows you to pick between hearts and stars. The new default is hearts.

Change How the Scroll Bar Looks

In ModernDeck 6.0, you now have the option to change the scroll bar\'s appearance, such as either making it narrower, or making it never appear outright, to help build a cleaner TweetDeck experience to your specification.

A New Option for dealing with Sensitive Media

ModernDeck 6.0 also introduces another new feature, which changes the workflow of dealing with sensitive media, if you have it enabled to ask beforehand. Before, you had to click a tiny "View" link beforehand. Now, simply click anywhere on the designated background, and it will open up a preview of the image, as expected, but the thumbnail itself never shows content marked as sensitive.

Faster and More Reliable CSS Extension Engine

Building a truly versatile theming system wasn\'t as easy as slapping a feature on top of the old codebase. It\'s possible to do it that way, but it\'d hurt performance by creating extra overhead created by having to load all themes into memory at once, only to render one. Much of ModernDeck\'s CSS/UI codebase, kept in one single CSS file, has been broken up and componentified into separate silos, called CSS extensions, and besides critical system extensions, most of these extensions can be swapped in or out at any time, making it easier for the browser to discard an old theme, and load a new theme into memory, all transparently, in real-time, with virtually no hiccup on average, modern hardware. Any UI tweaks from themes to hearts to even more are now all extensions that run on top of ModernDeck. This architecture carries through much of the system now. For example, all animations are kept in animations.css. By keeping similar items in the same place, it makes it easier for the CSS to reference, as well as making it easier to develop ModernDeck in the future. This took an enormous amount of work, but now we\'re left with a more functional, stable, as well as modular ModernDeck.

'; -// Asks MTDLoad for the storage -// window.postMessage({ -// type: "getStorage" -//}, "*"); +let mtdStarted = new Date(); -// Adds each key in the extension storage to MTDStorage -window.addEventListener("message", function(e) { - console.log("Message received"); - console.log(e); - if (e.source == window) { - if (e.data.type == "sendStorage") { - var settings = e.data.message; - for (var key in settings) { - MTDStorage.setItem(key, settings[key]); +if (mtdStarted.getHours() < 12) { + newLoginPage = newLoginPage.replace("Good evening","Good morning"); +} else if (mtdStarted.getHours() < 18) { + newLoginPage = newLoginPage.replace("Good evening","Good afternoon"); +} + +var settingsData = { + themes: { + tabName:"Themes", + tabId:"themes", + options:{ + coretheme:{ + headerBefore:"Themes", + title:"Core Theme", + type:"dropdown", + activate:{ + func:function(opt){ + console.log("ACTIVATE FUNC"); + console.log(opt); + disableStylesheetExtension("dark"); + disableStylesheetExtension("light"); + + var opt = opt; + + if (hasPref("mtd_highcontrast") && getPref("mtd_highcontrast") === true) { + opt = "dark"; + } + + html.removeClass("dark").removeClass("light").addClass(opt); + TD.settings.setTheme(opt); + enableStylesheetExtension(opt); + + if (opt === "light" && (isStylesheetExtensionEnabled("amoled"))) { + disableStylesheetExtension("amoled"); + setPref("mtd_theme","default"); + } + if (opt === "dark" && isStylesheetExtensionEnabled("paper")) { + disableStylesheetExtension("paper"); + setPref("mtd_theme","default"); + } + + if (hasPref("mtd_customcss")) { + disableStylesheetExtension("customcss"); + enableCustomStylesheetExtension("customcss",getPref("mtd_customcss")); + } + } + }, + options:{ + dark:{value:"dark",text:"Dark"}, + light:{value:"light",text:"Light"} + }, + queryFunction:function(){ + console.log(TD.settings.getTheme()); + html.addClass(TD.settings.getTheme()); + return TD.settings.getTheme() + }, + settingsKey:"mtd_core_theme", + default:"dark" + }, + theme:{ + title:"Custom Theme", + type:"dropdown", + activate:{ + func:function(opt){ + + if (getPref("mtd_highcontrast") === true) { + return; + } + + if (!hasPref("mtd_theme")) { + setPref("mtd_theme","default") + } + + disableStylesheetExtension(getPref("mtd_theme")); + setPref("mtd_theme",opt); + enableStylesheetExtension(opt || "default"); + var opt = opt; + + if (opt === "amoled" && TD.settings.getTheme() === "light") { + console.log("theme is light, opt is amoled"); + TD.settings.setTheme("dark"); + disableStylesheetExtension("light"); + enableStylesheetExtension("dark"); + html.removeClass("light").addClass("dark"); + } + + if (opt === "paper" && TD.settings.getTheme() === "dark") { + console.log("theme is dark, opt is paper"); + TD.settings.setTheme("light"); + disableStylesheetExtension("dark"); + enableStylesheetExtension("light"); + html.removeClass("dark").addClass("light"); + } + + if (opt === "black" && TD.settings.getTheme() === "dark") { + console.log("theme is dark, opt is black"); + disableStylesheetExtension("black"); + enableStylesheetExtension("amoled"); + setPref("mtd_theme","amoled"); + } + + if (hasPref("mtd_customcss")) { + disableStylesheetExtension("customcss"); + enableCustomStylesheetExtension("customcss",getPref("mtd_customcss")); + } + } + }, + options:{ + default:{value:"default","text":"Default"}, + complete:{ + name:"Complete Themes", + children:{ + paper:{value:"paper",text:"Paperwhite"}, + amoled:{value:"amoled",text:"AMOLED"} + } + }, + complementary:{ + name:"Complementary Themes", + children:{ + grey:{value:"grey","text":"Grey"}, + red:{value:"red","text":"Red"}, + pink:{value:"pink","text":"Pink"}, + orange:{value:"orange","text":"Orange"}, + violet:{value:"violet","text":"Violet"}, + teal:{value:"teal","text":"Teal"}, + green:{value:"green","text":"Green"}, + yellow:{value:"yellow","text":"Yellow"}, + cyan:{value:"cyan","text":"Cyan"}, + black:{value:"black","text":"Black"}, + blue:{value:"blue","text":"Blue"}, + } + } + }, + settingsKey:"mtd_theme", + default:"default" + }, customCss:{ + title:"Custom CSS ("+ctrlShiftText+"C disables it in case something went wrong)", + type:"textarea", + placeholder:":root {\n"+ + " --retweetColor:red;\n"+ + " --primaryColor:#00ff00!important;\n"+ + "}\n\n"+ + "a:hover {\n"+ + " text-decoration:underline\n"+ + "}", + activate:{ + func:function(opt){ + + setPref("mtd_customcss",opt); + enableCustomStylesheetExtension("customcss",opt); + + } + }, + settingsKey:"mtd_customcss", + default:"" } } + }, + appearance: { + tabName:"Appearance", + tabId:"appearance", + options:{ + dockedmodals:{ + headerBefore:"Behavior", + title:"Use docked modals", + type:"checkbox", + activate:{ + disableStylesheet:"undockedmodals" + }, + deactivate:{ + enableStylesheet:"undockedmodals" + }, + settingsKey:"mtd_dockedmodals", + default:false + }, + undockednavdrawer:{ + title:"Replace navigation drawer with menu", + type:"checkbox", + activate:{ + enableStylesheet:"undockednavdrawer" + }, + deactivate:{ + disableStylesheet:"undockednavdrawer" + }, + settingsKey:"mtd_undockednavdrawer", + default:false + }, + nonewtweetsbutton:{ + title:"Enable \"New Tweets\" indicator", + type:"checkbox", + activate:{ + disableStylesheet:"nonewtweetsbutton" + }, + deactivate:{ + enableStylesheet:"nonewtweetsbutton" + }, + settingsKey:"mtd_nonewtweetsbutton", + default:true + }, + scrollbarstyle:{ + title:"Scrollbar Style", + type:"dropdown", + activate:{ + func:function(opt){ + disableStylesheetExtension(getPref("mtd_scrollbar_style")); + setPref("mtd_scrollbar_style",opt); + enableStylesheetExtension(opt || "default"); + } + }, + options:{ + scrollbarsdefault:{value:"scrollbarsdefault",text:"Default"}, + scrollbarsnarrow:{value:"scrollbarsnarrow",text:"Narrow"}, + scrollbarsnone:{value:"scrollbarsnone",text:"Hidden"} + }, + settingsKey:"mtd_scrollbar_style", + default:"scrollbarsdefault" + }, + columnwidth:{ + title:"Column width", + type:"slider", + activate:{ + func:function(opt){ + console.log(opt); + setPref("mtd_columnwidth",opt); + enableCustomStylesheetExtension("columnwidth",":root{--columnSize:"+opt+"px!important}"); + } + }, + minimum:275, + maximum:500, + settingsKey:"mtd_columnwidth", + displayUnit:"px", + default:325 + }, + fontSize:{ + title:"Font Size", + type:"slider", + activate:{ + func:function(opt){ + console.log(opt); + setPref("mtd_fontsize",opt); + enableCustomStylesheetExtension("fontsize","html{font-size:"+((opt/100)*16)+"px!important}"); + } + }, + minimum:75, + maximum:130, + settingsKey:"mtd_fontsize", + displayUnit:"%", + default:100 + }, + roundprofilepics:{ + headerBefore:"Display", + title:"Use round profile pictures", + type:"checkbox", + activate:{ + disableStylesheet:"squareavatars" + }, + deactivate:{ + enableStylesheet:"squareavatars" + }, + settingsKey:"mtd_round_avatars", + default:true + }, + avatarSize:{ + title:"Profile picture size", + type:"slider", + activate:{ + func:function(opt){ + console.log(opt); + //setPref("mtd_avatarsize",opt); + enableCustomStylesheetExtension("avatarsize",":root{--avatarSize:"+opt+"px!important}"); + } + }, + minimum:24, + maximum:64, + enabled:false, + settingsKey:"mtd_avatarsize", + displayUnit:"px", + default:48 + }, + newcharindicator:{ + title:"Use new character limit indicator", + type:"checkbox", + activate:{ + enableStylesheet:"newcharacterindicator" + }, + deactivate:{ + disableStylesheet:"newcharacterindicator" + }, + settingsKey:"mtd_newcharindicator", + default:true + }, + nocontextmenuicons:{ + title:"Display contextual icons in menus", + type:"checkbox", + activate:{ + disableStylesheet:"nocontextmenuicons" + }, + deactivate:{ + enableStylesheet:"nocontextmenuicons" + }, + settingsKey:"mtd_nocontextmenuicons", + default:true + }, + sensitive:{ + title:"Display media that may contain sensitive content", + type:"checkbox", + activate:{ + func:function(){ + TD.settings.setDisplaySensitiveMedia(true); + } + }, + deactivate:{ + func:function(){ + TD.settings.setDisplaySensitiveMedia(false); + } + }, + queryFunction:function(){ + return TD.settings.getDisplaySensitiveMedia(); + } + }, + altsensitive:{ + title:"Use alternative sensitive media workflow", + type:"checkbox", + activate:{ + enableStylesheet:"altsensitive" + }, + deactivate:{ + disableStylesheet:"altsensitive" + }, + settingsKey:"mtd_sensitive_alt", + default:false + }, + colNavAlwaysVis:{ + title:"Always display column icons in navigator", + type:"checkbox", + activate:{ + htmlAddClass:"mtd-mtd-column-nav-always-visible" + }, + deactivate:{ + htmlRemoveClass:"mtd-mtd-column-nav-always-visible" + }, + settingsKey:"mtd_column_nav_always_visible", + default:false + }, + accoutline:{ + headerBefore:"Accessibility", + title:"Always show outlines around focused items ("+ctrlShiftText+"A to toggle)", + type:"checkbox", + activate:{ + htmlAddClass:"mtd-acc-focus-ring" + }, + deactivate:{ + htmlRemoveClass:"mtd-acc-focus-ring" + }, + settingsKey:"mtd_outlines", + default:false + }, + highcont:{ + title:"Enable High Contrast theme ("+ctrlShiftText+"H to toggle)", + type:"checkbox", + activate:{ + func:function(opt){ + if (TD.settings.getTheme() === "light") { + TD.settings.setTheme("dark"); + disableStylesheetExtension("light"); + enableStylesheetExtension("dark"); + } + disableStylesheetExtension(getPref("mtd_theme") || "default"); + setPref("mtd_theme","amoled"); + setPref("mtd_highcontrast",true); + enableStylesheetExtension("amoled"); + enableStylesheetExtension("highcontrast"); + } + }, + deactivate:{ + func:function(opt){ + setPref("mtd_highcontrast",false); + disableStylesheetExtension("highcontrast"); + } + }, + settingsKey:"mtd_highcontrast", + default:false + } + } + }, tweets: { + tabName:"Tweets", + tabId:"tweets", + options:{ + stream:{ + headerBefore:"Function", + title:"Stream Tweets in realtime", + type:"checkbox", + activate:{ + func:function(){ + TD.settings.setUseStream(true); + } + }, + deactivate:{ + func:function(){ + TD.settings.setUseStream(false); + } + }, + queryFunction:function(){ + return TD.settings.getUseStream(); + } + }, + autoplayGifs:{ + title:"Automatically play GIFs", + type:"checkbox", + activate:{ + func:function(){ + TD.settings.setAutoPlayGifs(true); + } + }, + deactivate:{ + func:function(){ + TD.settings.setAutoPlayGifs(false); + } + }, + queryFunction:function(){ + return TD.settings.getAutoPlayGifs(); + } + }, + startupNotifications:{ + title:"Show notifications on startup", + type:"checkbox", + activate:{ + func:function(){ + TD.settings.setShowStartupNotifications(true); + } + }, + deactivate:{ + func:function(){ + TD.settings.setShowStartupNotifications(false); + } + }, + queryFunction:function(){ + return TD.settings.getShowStartupNotifications(); + } + }, + linkshort:{ + headerBefore:"Link Shortening", + title:"Link Shortener Service", + type:"dropdown", + activate:{ + func:function(set){ + if (shortener === "twitter") { + $("bitlyUsername").addClass("hidden"); + $("bitlyApiKey").addClass("hidden"); + } else if (shortener === "bitly") { + $("bitlyUsername").removeClass("hidden"); + $("bitlyApiKey").removeClass("hidden"); + } + TD.settings.setLinkShortener(set); + } + }, + queryFunction:function(){ + var shortener = TD.settings.getLinkShortener(); + if (shortener === "twitter") { + $("bitlyUsername").addClass("hidden"); + $("bitlyApiKey").addClass("hidden"); + } else if (shortener === "bitly") { + $("bitlyUsername").removeClass("hidden"); + $("bitlyApiKey").removeClass("hidden"); + } + return shortener; + }, + options:{ + twitter:{value:"twitter",text:"Twitter"}, + bitly:{value:"bitly",text:"Bit.ly"} + } + }, + bitlyUsername:{ + title:"Bit.ly Username", + type:"textbox", + activate:{ + func:function(set){ + TD.settings.setBitlyAccount({ + apiKey:((TD.settings.getBitlyAccount() && TD.settings.getBitlyAccount().apiKey) ? TD.settings.getBitlyAccount() : {apiKey:""}).login, + login:set + }) + } + }, + queryFunction:function(){ + return ((TD.settings.getBitlyAccount() && TD.settings.getBitlyAccount().login) ? TD.settings.getBitlyAccount() : {login:""}).login; + } + }, + bitlyApiKey:{ + title:"Bit.ly API Key", + type:"textbox", + addClass:"mtd-big-text-box", + activate:{ + func:function(set){ + TD.settings.setBitlyAccount({ + login:((TD.settings.getBitlyAccount() && TD.settings.getBitlyAccount().login) ? TD.settings.getBitlyAccount() : {login:""}).login, + apiKey:set + }); + } + }, + queryFunction:function(){ + return ((TD.settings.getBitlyAccount() && TD.settings.getBitlyAccount().apiKey) ? TD.settings.getBitlyAccount() : {apiKey:""}).apiKey; + } + } + } + }, mutes: { + tabName:"Mutes", + tabId:"mutes", + options:{}, + enum:"mutepage" + }, app: { + tabName:"App", + tabId:"app", + enabled:isApp, + options:{ + nativeTitlebar:{ + headerBefore:"App settings", + title:"Use native OS titlebar (restarts ModernDeck)", + type:"checkbox", + activate:{ + func:function(){ + if (!exists($(".mtd-settings-panel")[0])) { + return; + } + + setPref("mtd_nativetitlebar",true); + + const {ipcRenderer} = require('electron'); + if (!!ipcRenderer) + ipcRenderer.send("setNativeTitlebar", true); + } + }, + deactivate:{ + func:function(){ + if (!exists($(".mtd-settings-panel")[0])) { + return; + } + + setPref("mtd_nativetitlebar",false); + + const {ipcRenderer} = require('electron'); + if (!!ipcRenderer) + ipcRenderer.send("setNativeTitlebar", false); + } + }, + settingsKey:"mtd_nativetitlebar", + default:false + }, + inspectElement:{ + title:"Show Inspect Element in context menus", + type:"checkbox", + activate:{ + func:function(){ + setPref("mtd_inspectElement",true); + } + }, + deactivate:{ + func:function(){ + setPref("mtd_inspectElement",false); + } + }, + settingsKey:"mtd_inspectElement", + default:false + }, + nativeContextMenus:{ + title:"Use OS native context menus", + type:"checkbox", + activate:{ + func:function(){ + setPref("mtd_nativecontextmenus",true); + useNativeContextMenus = true; + } + }, + deactivate:{ + func:function(){ + setPref("mtd_nativecontextmenus",false); + useNativeContextMenus = false; + } + }, + settingsKey:"mtd_nativecontextmenus", + default:isApp ? process.platform === "darwin" : false + },theme:{ + title:"App update channel", + type:"dropdown", + activate:{ + func:function(opt){ + if (!isApp) { + return; + } + setPref("mtd_updatechannel",opt); + + setTimeout(function(){ + const {ipcRenderer} = require('electron'); + if (!!ipcRenderer) + ipcRenderer.send("changeChannel", opt); + + },300) + } + }, + options:{ + latest:{value:"latest","text":"Latest"}, + beta:{value:"beta","text":"Beta"} + }, + settingsKey:"mtd_updatechannel", + default:"latest" + } + }}, system: { + tabName:"System", + tabId:"system", + options:{ + mtdResetSettings:{ + title:"Reset Settings", + label:"restoreReset settings
If you want to reset ModernDeck to default settings, you can do so here. This will restart ModernDeck.", + type:"button", + activate:{ + func:function(){ + purgePrefs(); + + if (isApp) { + const {ipcRenderer} = require('electron'); + ipcRenderer.send('restartApp'); + } else { + window.location.reload(); + } + } + }, + settingsKey:"mtd_resetSettings" + }, + mtdClearData:{ + title:"Clear Data", + label:"delete_foreverClear data
This option clears all caches and preferences. This option will log you out.", + type:"button", + activate:{ + func:function(){ + if (isApp) { + const {ipcRenderer} = require('electron'); + + ipcRenderer.send('destroyEverything'); + } + } + }, + settingsKey:"mtd_resetSettings", + enabled:isApp + }, + mtdSaveBackup:{ + title:"Save Backup", + label:"save_altSave backup
Saves your preferences to a file to be loaded later.", + type:"button", + activate:{ + func:function(){ + const app = require("electron").remote; + const dialog = app.dialog; + const fs = require("fs"); + const {ipcRenderer} = require('electron'); + + var file = "ModernDeck Preferences"; + + var preferences = JSON.stringify(store.store); + + dialog.showSaveDialog( + { + title: "ModernDeck Preferences", + filters: [{ name: "Preferences JSON File", extensions: ["json"] }] + }, + function(file) { + if (file === undefined) { + return; + } + fs.writeFile(file, preferences, function(e){}); + } + ); + } + }, + settingsKey:"mtd_backupSettings", + enabled:isApp + }, + mtdLoadBackup:{ + title:"Load Backup", + label:"refreshLoad backup
Loads your preferences that you have saved previously. This will restart ModernDeck.", + type:"button", + activate:{ + func:function(){ + const app = require("electron").remote; + const dialog = app.dialog; + const fs = require("fs"); + const {ipcRenderer} = require('electron'); + + dialog.showOpenDialog( + { filters: [{ name: "Preferences JSON File", extensions: ["json"] }] }, + function(file) { + if (file === undefined) { + return; + } + + fs.readFile(file[0],"utf-8",function(e, load) { + store.store = JSON.parse(load); + ipcRenderer.send("restartApp"); + }); + } + ); + } + }, + settingsKey:"mtd_resetSettings", + enabled:isApp + }, + tdLegacySettings: { + title:"Legacy settings", + label:"Is there a new TweetDeck setting we're missing? Visit legacy settings", + type:"link", + activate:{ + func:function(){ + openLegacySettings(); + } + } + } + } + }, about: { + tabName:"About", + tabId:"about", + options:{}, + enum:"aboutpage" } -}); +} + +function retrieveImageFromClipboardAsBlob(pasteEvent, callback){ + + var items = pasteEvent.clipboardData.items; + + if(items == undefined || pasteEvent.clipboardData == false){ + console.log("RIP the paste data"); + return; + }; + + for (var i = 0; i < items.length; i++) { + // Skip content if not image + if (items[i].type.indexOf("image") == -1) continue; + // Retrieve image on clipboard as blob + var blob = items[i].getAsFile(); + + if(typeof(callback) == "function"){ + callback(blob); + } + } +} + +// Paste event to allow for pasting images in TweetDeck + +window.addEventListener("paste", function(e){ + console.log("got paste"); + console.log(e); + retrieveImageFromClipboardAsBlob(e, function(imageBlob){ + if(imageBlob){ + console.log("got imageBlob"); -window.addEventListener("beforeunload",savePreferencesToDisk); + let buildEvent = jQuery.Event("dragenter",{originalEvent:{dataTransfer:{files:[imageBlob]}}}); + let buildEvent2 = jQuery.Event("drop",{originalEvent:{dataTransfer:{files:[imageBlob]}}}); + + console.info("alright so these are the events we're gonna be triggering:"); + console.info(buildEvent); + console.info(buildEvent2); + + $(document).trigger(buildEvent); + $(document).trigger(buildEvent2); + } + }); +}, false); + +// Alerts the app itself if it becomes offline + +const forceAppUpdateOnlineStatus = function(e){ + if (!require) {return;} + const {ipcRenderer} = require('electron'); + ipcRenderer.send('online-status-changed', e) +} if (typeof MTDURLExchange === "object" && typeof MTDURLExchange.getAttribute === "function") { - MTDBaseURL = MTDURLExchange.getAttribute("type") || "https://dangeredwolf.com/assets/mtdtest/"; + MTDBaseURL = MTDURLExchange.getAttribute("type"); console.info("MTDURLExchange completed with URL " + MTDBaseURL); } +// Moduleraid became a requirement for ModernDeck after they removed jQuery from the global context +// Hence why twitter sucks + +var twitterSucks = document.createElement("script"); +twitterSucks.type = "text/javascript"; twitterSucks.src = MTDBaseURL + "sources/libraries/moduleraid.min.js"; document.head.appendChild(twitterSucks); -if (typeof chrome === "undefined" && typeof safari === "undefined") { - TreatGeckoWithCare = true; -} +// shorthand for creating a mutation observer and observing function mutationObserver(obj,func,parms) { - if (typeof MutationObserver !== "undefined") { - (new MutationObserver(func)).observe(obj,parms); - } else { - if (parms.attributes) { - html.on("DOMAttrModified",func); - html.on("DOMAttributeNameChanged",func); - html.on("DOMElementNameChanged",func); - } - if (parms.characterData) { - html.on("DOMCharacterDataModified",func); - } - if (parms.subtree) { - html.on("DOMSubtreeModified",func); - } - if (parms.childList) { - html.on("DOMNodeInserted",func); - html.on("DOMNodeRemoved",func); - } - } + return (new MutationObserver(func)).observe(obj,parms); } +// shorthand function to return true if something exists and false otherwise + function exists(thing) { return ((typeof thing === "object" && thing !== null && thing.length > 0) || !!thing === true || (typeof thing === "string") || (typeof thing === "number")); } -function savePreferencesToDisk() { - // var storage = {} - // for(var i = 0; i < MTDStorage.length; i++){ - // var key = MTDStorage.key(i); - // storage[key] = MTDStorage[key]; - // } - - // window.postMessage({ - // type: "setStorage", - // message: MTDStorage - // }, "*"); -} +// Returns true if stylesheet extension is enabled, false otherwise. Works with custom stylesheets. (see enableCustomStylesheetExtension for more info) -function isEnabledStylesheetExtension(name) { +function isStylesheetExtensionEnabled(name) { + if ($("#mtd_custom_css_"+name).length > 0) { + return true; + } return !!document.querySelector("link.mtd-stylesheet-extension[href=\"" + MTDBaseURL + "sources/cssextensions/" + name + ".css\"\]"); } +// Enables a certain stylesheet extension. +// Stylesheet extensions are loaded from sources/cssextensions/[name].css + +// These are the predefined ModernDeck ones including colour themes, default light and dark themes, and various preferences + +// For custom ones, see enableCustomStylesheetExtension + function enableStylesheetExtension(name) { - if (name === "default" || !exists($)) + if (name === "default" || $("#mtd_custom_css_"+name).length > 0) return; var url = MTDBaseURL + "sources/cssextensions/" + name + ".css"; - if (!isEnabledStylesheetExtension(name)) { + if (!isStylesheetExtensionEnabled(name)) { head.append( make("link") .attr("rel","stylesheet") @@ -152,79 +905,180 @@ function enableStylesheetExtension(name) { } else return; } +// disables stylesheet extensions. Function also works with custom stylesheet extensions + function disableStylesheetExtension(name) { - if (!isEnabledStylesheetExtension(name)) + if (!isStylesheetExtensionEnabled(name)) return; console.log("disableStylesheetExtension(\""+name+"\")"); $('head>link[href="' + MTDBaseURL + "sources/cssextensions/" + name + '.css"]').remove(); -} -function getProfileInfo() { - return TD.cache.twitterUsers.getByScreenName(TD.storage.accountController.getPreferredAccount("twitter").state.username).results[0]; + if ($("#mtd_custom_css_"+name).length > 0) { + $("#mtd_custom_css_"+name).remove(); + } } -function getAccountStatus() { - return TD.storage.accountController.getPreferredAccount("twitter"); +// Custom stylesheet extensions are used for custom user CSS and for certain sliders, such as column width + +function enableCustomStylesheetExtension(name,styles) { + console.log("enableCustomStylesheetExtension(\""+name+"\")"); + if (isStylesheetExtensionEnabled(name)) { + $("#mtd_custom_css_"+name).html(styles); + return; + } + head.append(make("style").html(styles).attr("id","mtd_custom_css_"+name)) } -function getAllAccountStatus() { - return TD.storage.accountController.getAccountsForService("twitter"); +// Default account profile info, used to show your profile pic and background in nav drawer + +function getProfileInfo() { + return TD.cache.twitterUsers.getByScreenName(TD.storage.accountController.getPreferredAccount("twitter").state.username).results[0]; } +// Loads preferences when moderndeck is started + function loadPreferences() { - disableStylesheetExtension("loginpage"); - if (getPref("mtd_round_avatars") === false) - enableStylesheetExtension("squareavatars"); - else - setPref("mtd_round_avatars",true); + for (var key in settingsData) { + + if (!settingsData[key].enum) { + for (var i in settingsData[key].options) { + let prefKey = settingsData[key].options[i].settingsKey; + let pref = settingsData[key].options[i]; + + if (exists(prefKey)) { + var setting; + if (!hasPref(prefKey)) { + if (debugStorageSys) + console.log("loadPreferences is setting default of "+prefKey+" to "+pref.default); + setPref(prefKey, pref.default); + setting = pref.default; + } else { + setting = getPref(prefKey); + } + + switch(pref.type) { + case "checkbox": + if (setting === true) { + parseActions(pref.activate); + } else { + parseActions(pref.deactivate); + } + break; + case "dropdown": + case "textbox": + case "textarea": + case "slider": + parseActions(pref.activate, setting); + break; + case "button": + case "link": + break; + } + } + } + } + } +} - if (getPref("mtd_undocked_modals") === true) - enableStylesheetExtension("undockedmodals"); - else - setPref("mtd_undocked_modals",false); +// getPref(String preferenceKey) +// Returns value of preference, string or boolean - if (getPref("mtd_hearts") === true) - enableStylesheetExtension("hearticon"); - else if (getPref("mtd_hearts") !== false) - setPref("mtd_hearts",true); +function getPref(id) { + if (id === "mtd_core_theme") { + return TD.settings.getTheme(); + } - if (getPref("mtd_sensitive_alt") === true) - enableStylesheetExtension("altsensitive"); - else if (getPref("mtd_sensitive_alt") !== false) - setPref("mtd_sensitive_alt",false); + var val; - if (getPref("mtd_outlines") === true) - html.addClass("mtd-acc-focus-ring"); - else - setPref("mtd_outlines",false); + if (exists(store)) { + if (store.has(id)) + val = store.get(id); + else + val = undefined; + } else { + val = localStorage.getItem(id); + } - if (getPref("mtd_theme") !== "" && getPref("mtd_theme") !== null && typeof getPref("mtd_theme") !== "undefined") - enableStylesheetExtension(getPref("mtd_theme")); + if (debugStorageSys) + console.log("getPref "+id+"? "+val); - if (getPref("mtd_scrollbar_style") !== "" && getPref("mtd_scrollbar_style") !== null && typeof getPref("mtd_scrollbar_style") !== "undefined") - enableStylesheetExtension(getPref("mtd_scrollbar_style")); -} -function getPref(id) { - if ((localStorage[id] ? localStorage[id] : MTDStorage[id]) === "true") + if (val === "true") return true; - else if ((localStorage[id] ? localStorage[id] : MTDStorage[id]) === "false") + else if (val === "false") return false; else - return (localStorage[id] ? localStorage[id] : MTDStorage[id]); + return val; +} + + +// purgePrefs() +// Purges all settings. This is used when you reset ModernDeck in settings + +function purgePrefs() { + for (var key in localStorage) { + if (key.indexOf("mtd_") >= 0) { + localStorage.removeItem(key); + console.log("Removing key "+key+"..."); + } + } + if (isApp) { + const Store = require('electron-store'); + const store = new Store({name:"mtdsettings"}); + store.clear(); + console.log("Clearing electron-store..."); + } } + +// setPref(String preferenceKey) +// Sets preference + function setPref(id,p) { - //MTDStorage[id] = p; - localStorage[id] = p; - //savePreferencesToDisk(); + + if (id === "mtd_core_theme") { + return; + } + + if (exists(store)) { + store.set(id,p); + } else { + localStorage.setItem(id,p); + } + + if (debugStorageSys) + console.log("setPref "+id+" to "+p); } -function GetURL(url) { - return MTDBaseURL + url; + +// hasPref(String preferenceKey) +// return boolean: whether or not the preference manager (electron-store on app, otherwise localStorage) contains a key + +function hasPref(id) { + var hasIt; + + if (typeof id === "undefined") { + throw "id not specified for hasPref"; + } + + if (id === "mtd_core_theme") { + return true; + } + + if (exists(store)) { + hasIt = store.has(id); + } else { + hasIt = localStorage.getItem(id) !== null && typeof localStorage.getItem(id) !== "undefined" && localStorage.getItem(id) !== undefined; + } + + if (debugStorageSys) + console.log("hasPref "+id+"? "+hasIt); + + return hasIt; } + function fontParseHelper(a) { if (typeof a !== "object" || a === null) throw "you forgot to pass the object"; @@ -234,33 +1088,158 @@ function fontParseHelper(a) { function MTDInit(){ console.log("MTDInit"); + + if (typeof document.getElementsByClassName("js-signin-ui block")[0] !== "undefined" && !replacedLoadingSpinnerNew) { document.getElementsByClassName("js-signin-ui block")[0].innerHTML = '
'; replacedLoadingSpinnerNew = true; } + + // The default is dark for the loading screen, once the TD settings load it can use + + enableStylesheetExtension("dark"); + html.addClass("dark"); + + // Here, we inject our fonts + + // ModernDeck uses Roboto as its general font for Latin (and Cyrillic?) scripts + // Noto Sans is used for whatever scripts Roboto doesn't cover + + // font family Material is short for Material icons + // font family MD is short for ModernDeck. It contains ModernDeck supplemental icons + + if (!injectedFonts) { + + $(document.head).append(make("style").html( + fontParseHelper({family:"MD",name:"mdvectors"}) + + fontParseHelper({family:"Material",name:"MaterialIcons"}) + + fontParseHelper({name:"Roboto-Regular"}) + + fontParseHelper({weight:"500",name:"Roboto-Medium"}) + + fontParseHelper({name:"Roboto-Italic",style:"italic"}) + + fontParseHelper({weight:"300",name:"Roboto-Light"}) + + fontParseHelper({weight:"500",name:"Roboto-MediumItalic",style:"italic"}) + + fontParseHelper({weight:"300",name:"Roboto-LightItalic",style:"italic"}) + + fontParseHelper({weight:"100",name:"Roboto-Thin"}) + + fontParseHelper({weight:"100",name:"Roboto-ThinIalic",style:"italic"}) + + fontParseHelper({family:"Noto Sans CJK",weight:"500",name:"NotoSansCJKjp-Medium",format:"opentype",extension:"otf"}) + + fontParseHelper({family:"Noto Sans CJK",name:"NotoSansCJKjp-Regular",format:"opentype",extension:"otf"}) + + fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansHI-Medium",range:"U+0900-097F"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansHI-Regular",range:"U+0900-097F"}) + + fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansArabic-Medium",range:"U+0600-06FF,U+0750–077F,U+08A0–08FF,U+FB50–FDFF,U+FE70–FEFF,U+10E60–10E7F,U+1EE00—1EEFF"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansArabic-Regular",range:"U+0600-06FF,U+0750–077F,U+08A0–08FF,U+FB50–FDFF,U+FE70–FEFF,U+10E60–10E7F,U+1EE00—1EEFF"}) + + fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansArmenian-Medium",range:"U+0530-0580"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansArmenian-Regular",range:"U+0530-0580"}) + + fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansBengali-Medium",range:"U+0980-09FF"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansBengali-Regular",range:"U+0980-09FF"}) + + fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansBengali-Medium",range:"U+0980-09FF"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansBengali-Regular",range:"U+0980-09FF"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansBrahmi",range:"U+11000-1107F"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansBuginese",range:"U+1A00-1A1B,U+1A1E-1A1F"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansBuhid-Regular",range:"U+1740-1753"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansCanadianAboriginal",range:"U+1400-167F"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansCarian-Regular",range:"U+102A0-102DF"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansChakma-Regular",range:"U+11100-1114F"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansCherokee-Regular",range:"U+11100-1114F"}) + + fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansCherokee-Medium",range:"U+13A0-13F4,U+13F5,U+13F8-13FD"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansCherokee-Regular",range:"U+13A0-13F4,U+13F5,U+13F8-13FD"}) + + fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansEthiopic-Medium",range:"U+1200-137F"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansEthiopic-Regular",range:"U+1200-137F"}) + + fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansGeorgian-Medium",range:"U+10A0-10FF,U+2D00-2D2F"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansGeorgian-Regular",range:"U+10A0-10FF,U+2D00-2D2F"}) + + fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansGujaratiUI-Bold",range:"U+0A80-0AFF"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansGujaratiUI",range:"U+0A80-0AFF"}) + + fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansHebrew-Bold",range:"U+0590-05FF"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansHebrew-Regular",range:"U+0590-05FF"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansJavanese",range:"U+A980-A9DF"}) + + fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansKannadaUI-Bold",range:"U+0C80-0CFF"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansKannadaUI",range:"U+0C80-0CFF"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansKayahLi-Regular",range:"U+A900-A92F"}) + + fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansKhmerUI-Medium",range:"U+1780-17FF"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansKhmerUI-Regular",range:"U+1780-17FF"}) + + fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansLaoUI-Medium",range:"U+0E80-0EFF"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansLaoUI-Regular",range:"U+0E80-0EFF"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansLisu-Regular",range:"U+A4D0-A4FF"}) + + fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansMalayalamUI-Bold",range:"U+0D00-0D7F"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansMalayalamUI",range:"U+0D00-0D7F"}) + + fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansMyanmarUI-Bold",range:"U+1000-109F"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansMyanmarUI-Regular",range:"U+1000-109F"}) + + fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansOriyaUI-Medium",range:"U+0B00-0B7F"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansOriyaUI",range:"U+0B00-0B7F"}) + + fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansOriyaUI-Bold",range:"U+0B00-0B7F"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansOsage-Regular",range:"U+104B0-104FF"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansOsmanya-Regular",range:"U+10480-104AF"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansPhagsPa",range:"U+A840-A87F"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansNewTaiLue-Regular",range:"U+1980-19DF"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansNKo-Regular",range:"U+07C0-07FF"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansOlChiki-Regular",range:"U+1C50–1C7F"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansRunic-Regular",range:"U+16A0-16FF"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansShavian-Regular",range:"U+16A0-16FF"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansSinhalaUI-Regular",range:"U+0D80-0DFF"}) + + fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansSinhalaUI-Medium",range:"U+0D80-0DFF"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansSundanese",range:"U+1B80-1BBF"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansSyriacEastern",range:"U+0700-074F"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansSyriacWestern",range:"U+0700-074F"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansSyriacEstrangela",range:"U+0700-074F"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansTagalog",range:"U+1700-171F"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansTagbanwa",range:"U+1760-177F"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansTaiLe",range:"U+1950-197F"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansTaiTham",range:"U+1A20-1AAF"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansTaiViet",range:"U+AA80-AADF"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansTamilUI-Regular",range:"U+0B80-0BFF"}) + + fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansTamilUI-Medium",range:"U+0B80-0BFF"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansTeluguUI",range:"U+0C00-0C7F"}) + + fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansTeluguUI-Bold",range:"U+0C00-0C7F"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansThaana",range:"U+0780-07BF"}) + + fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansThaana-Bold",range:"U+0780-07BF"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansThaiUI-Regular",range:"U+0E00-0E7F"}) + + fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansThaiUI-Medium",range:"U+0E00-0E7F"}) + + fontParseHelper({family:"Noto Sans",name:"NotoSansTibetan",range:"U+0F00-0FFF"}) + + fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansTibetan-Bold",range:"U+0F00-0FFF"}) + + fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansTifinagh-Regular",range:"U+2D30-2D7F"}) + + fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansVai-Regular",range:"U+A500-A63F"}) + + fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansYi-Regular",range:"U+A000-A48F"}) + + fontParseHelper({family:"RobotoMono",name:"RobotoMono-Regular"}) + + fontParseHelper({family:"RobotoMono",weight:"500",name:"RobotoMono-Medium"}) + + fontParseHelper({family:"RobotoMono",name:"RobotoMono-Italic",style:"italic"}) + + fontParseHelper({family:"RobotoMono",weight:"300",name:"RobotoMono-Light"}) + + fontParseHelper({family:"RobotoMono",weight:"500",name:"RobotoMono-MediumItalic",style:"italic"}) + + fontParseHelper({family:"RobotoMono",weight:"300",name:"RobotoMono-LightItalic",style:"italic"}) + + fontParseHelper({family:"RobotoMono",weight:"100",name:"RobotoMono-Thin"}) + + fontParseHelper({family:"RobotoMono",weight:"100",name:"RobotoMono-ThinIalic",style:"italic"}) + )); + injectedFonts = true; + } + + + // These check to see if critical TD variables are in place before proceeding + if ( typeof TD_mustaches === "undefined" || typeof TD === "undefined" || typeof TD.util === "undefined" || - typeof TD.util.prettyTimeString === "undefined" || typeof TD_mustaches["settings/global_setting_filter_row.mustache"] === "undefined" ) { - setTimeout(MTDInit,500); + setTimeout(MTDInit,100); console.log("waiting on something in order to start MTDInit..."); return; } - if (isEdge) { - var beGoneThot = $("link[rel='apple-touch-icon']+link[rel='stylesheet'")[0]; - if (exists(beGoneThot)) { - beGoneThot.remove(); - } + + if (typeof TD_mustaches["login/login_form.mustache"] !== "undefined") + TD_mustaches["login/login_form.mustache"] = newLoginPage; + + // Especially on Edge, but also on Chrome shortly after launch, sometimes the stylesheet isn't blocked by the network, which breaks the page heavily. + // This ensures that the stylesheet is manually removed so that it doesn't cause problems + + var beGone = document.querySelector("link[rel='apple-touch-icon']+link[rel='stylesheet']"); + if (exists(beGone)) { + beGone.remove(); } - enableStylesheetExtension("dark"); + // These are features that can be used to force enable tweetdeck developer features. Code updated by @pixeldesu, deckhackers, et al if (forceFeatureFlags) { - TD.config.config_overlay = { + TD.config.config_overlay = { tweetdeck_devel: { value: true }, tweetdeck_dogfood: { value: true }, tweetdeck_insights: { value: true }, @@ -300,10 +1279,10 @@ function MTDInit(){ TD.config.flight_debug = true TD.config.sync_period = 600 TD.config.force_touchdeck = true - TD.config.internal_build = true + TD.config.internal_build = true TD.config.help_configuration_overlay = true TD.config.disable_metrics_error = true - TD.config.disable_metrics_event = true + TD.config.disable_metrics_event = true TD.controller.stats.setExperiments({ config: { live_engagement_in_column_8020: { @@ -322,113 +1301,29 @@ function MTDInit(){ }); } - $(document.head).append(make("style").html( - // fontParseHelper({name:"Roboto300latin",range:"U+0000-00FF,U+0131,U+0152-0153,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2212,U+2215,U+E0FF,U+EFFD,U+F000"}) + - // fontParseHelper({name:"Roboto300latinext"}) + - // fontParseHelper({weight:"400",name:"Roboto400latin",range:"U+0000-00FF,U+0131,U+0152-0153,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2212,U+2215,U+E0FF,U+EFFD,U+F000"}) + - // fontParseHelper({weight:"400",name:"Roboto400latinext"}) + - // fontParseHelper({weight:"500",name:"Roboto500latin",range:"U+0000-00FF,U+0131,U+0152-0153,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2212,U+2215,U+E0FF,U+EFFD,U+F000"}) + - // fontParseHelper({weight:"500",name:"Roboto500latinext"}) + - // fontParseHelper({family:"Material",weight:"400",name:"MaterialIcons",range:"U+0000-F000"}) + - // fontParseHelper({family:"MD",weight:"400",name:"mdvectors",range:"U+E000-FFFF"}) - // fontParseHelper({family:"Font Awesome",weight:"400",name:"fontawesome",range:"U+0000-F000"}) - fontParseHelper({name:"Roboto-Regular"}) + - fontParseHelper({family:"MD",name:"mdvectors"}) + - fontParseHelper({family:"Material",name:"MaterialIcons"}) + - fontParseHelper({weight:"500",name:"Roboto-Medium"}) + - fontParseHelper({name:"Roboto-Italic",style:"italic"}) + - fontParseHelper({weight:"300",name:"Roboto-Light"}) + - fontParseHelper({weight:"500",name:"Roboto-MediumItalic",style:"italic"}) + - fontParseHelper({weight:"300",name:"Roboto-LightItalic",style:"italic"}) + - fontParseHelper({weight:"100",name:"Roboto-Thin"}) + - fontParseHelper({weight:"100",name:"Roboto-ThinIalic",style:"italic"}) + - //fontParseHelper({family:"Noto Sans CJK",weight:"500",name:"NotoSansJP-Medium",range:"U+3000-303F,U+3040-309F,U+30A0-30FF,U+FF00-FFEF,U+4E00-9FAF"}) + - //fontParseHelper({family:"Noto Sans CJK",name:"NotoSansJP-Regular",range:"U+3000-303F,U+3040-309F,U+30A0-30FF,U+FF00-FFEF,U+4E00-9FAF"}) + - //fontParseHelper({family:"Noto Sans CJK",weight:"500",name:"NotoSansKR-Medium",format:"opentype",extension:"otf",range:"U+2E80–2EFF,U+2F00–2FDF,U+2FF0–2FFF,U+3000–303F,U+3130–318F,U+3300–33FF,U+F900–FAFF,U+1100–11FF,U+A960–A97F,U+D7B0–D7FF"}) + - //fontParseHelper({family:"Noto Sans CJK",name:"NotoSansKR-Regular",format:"opentype",extension:"otf",range:"U+2E80–2EFF,U+2F00–2FDF,U+2FF0–2FFF,U+3000–303F,U+3130–318F,U+3300–33FF,U+F900–FAFF,U+1100–11FF,U+A960–A97F,U+D7B0–D7FF"}) + - fontParseHelper({family:"Noto Sans CJK",weight:"500",name:"NotoSansCJKjp-Medium",format:"opentype",extension:"otf"}) + - fontParseHelper({family:"Noto Sans CJK",name:"NotoSansCJKjp-Regular",format:"opentype",extension:"otf"}) + - //fontParseHelper({family:"Noto Sans CJK",weight:"500",name:"NotoSansSC-Medium",format:"opentype",extension:"otf",range:"U+4E00-9FFF,U+3400–4DBF,U+20000-2A6DF,U+2A700–2B73F,U+2B740–2B81F,U+2B820–2CEAF,U+2CEB0–2EBEF,U+2E80–303F,U+31C0-31EF,U+3200-33FF,U+F900-FAFF,U+FE30-FE4F,U+1F200-2F800"}) + - //fontParseHelper({family:"Noto Sans CJK",name:"NotoSansSC-Regular",format:"opentype",extension:"otf",range:"U+4E00-9FFF,U+3400–4DBF,U+20000-2A6DF,U+2A700–2B73F,U+2B740–2B81F,U+2B820–2CEAF,U+2CEB0–2EBEF,U+2E80–303F,U+31C0-31EF,U+3200-33FF,U+F900-FAFF,U+FE30-FE4F,U+1F200-2F800"}) + - //fontParseHelper({family:"Noto Sans CJK",weight:"500",name:"NotoSansTC-Medium",format:"opentype",extension:"otf",range:"U+4E00-9FFF,U+3400–4DBF,U+20000-2A6DF,U+2A700–2B73F,U+2B740–2B81F,U+2B820–2CEAF,U+2CEB0–2EBEF,U+2E80–303F,U+31C0-31EF,U+3200-33FF,U+F900-FAFF,U+FE30-FE4F,U+1F200-2F800"}) + - //fontParseHelper({family:"Noto Sans CJK",name:"NotoSansTC-Regular",format:"opentype",extension:"otf",range:"U+4E00-9FFF,U+3400–4DBF,U+20000-2A6DF,U+2A700–2B73F,U+2B740–2B81F,U+2B820–2CEAF,U+2CEB0–2EBEF,U+2E80–303F,U+31C0-31EF,U+3200-33FF,U+F900-FAFF,U+FE30-FE4F,U+1F200-2F800"}) + - fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansHI-Medium",range:"U+0900-097F"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansHI-Regular",range:"U+0900-097F"}) + - fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansArabic-Medium",range:"U+0600-06FF,U+0750–077F,U+08A0–08FF,U+FB50–FDFF,U+FE70–FEFF,U+10E60–10E7F,U+1EE00—1EEFF"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansArabic-Regular",range:"U+0600-06FF,U+0750–077F,U+08A0–08FF,U+FB50–FDFF,U+FE70–FEFF,U+10E60–10E7F,U+1EE00—1EEFF"}) + - fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansArmenian-Medium",range:"U+0530-0580"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansArmenian-Regular",range:"U+0530-0580"}) + - fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansBengali-Medium",range:"U+0980-09FF"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansBengali-Regular",range:"U+0980-09FF"}) + - fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansBengali-Medium",range:"U+0980-09FF"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansBengali-Regular",range:"U+0980-09FF"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansBrahmi",range:"U+11000-1107F"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansBuginese",range:"U+1A00-1A1B,U+1A1E-1A1F"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansBuhid-Regular",range:"U+1740-1753"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansCanadianAboriginal",range:"U+1400-167F"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansCarian-Regular",range:"U+102A0-102DF"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansChakma-Regular",range:"U+11100-1114F"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansCherokee-Regular",range:"U+11100-1114F"}) + - fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansCherokee-Medium",range:"U+13A0-13F4,U+13F5,U+13F8-13FD"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansCherokee-Regular",range:"U+13A0-13F4,U+13F5,U+13F8-13FD"}) + - fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansEthiopic-Medium",range:"U+1200-137F"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansEthiopic-Regular",range:"U+1200-137F"}) + - fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansGeorgian-Medium",range:"U+10A0-10FF,U+2D00-2D2F"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansGeorgian-Regular",range:"U+10A0-10FF,U+2D00-2D2F"}) + - fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansGujaratiUI-Bold",range:"U+0A80-0AFF"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansGujaratiUI",range:"U+0A80-0AFF"}) + - fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansHebrew-Bold",range:"U+0590-05FF"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansHebrew-Regular",range:"U+0590-05FF"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansJavanese",range:"U+A980-A9DF"}) + - fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansKannadaUI-Bold",range:"U+0C80-0CFF"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansKannadaUI",range:"U+0C80-0CFF"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansKayahLi-Regular",range:"U+A900-A92F"}) + - fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansKhmerUI-Medium",range:"U+1780-17FF"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansKhmerUI-Regular",range:"U+1780-17FF"}) + - fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansLaoUI-Medium",range:"U+0E80-0EFF"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansLaoUI-Regular",range:"U+0E80-0EFF"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansLisu-Regular",range:"U+A4D0-A4FF"}) + - fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansMalayalamUI-Bold",range:"U+0D00-0D7F"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansMalayalamUI",range:"U+0D00-0D7F"}) + - fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansMyanmarUI-Bold",range:"U+1000-109F"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansMyanmarUI-Regular",range:"U+1000-109F"}) + - fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansOriyaUI-Medium",range:"U+0B00-0B7F"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansOriyaUI",range:"U+0B00-0B7F"}) + - fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansOriyaUI-Bold",range:"U+0B00-0B7F"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansOsage-Regular",range:"U+104B0-104FF"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansOsmanya-Regular",range:"U+10480-104AF"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansPhagsPa",range:"U+A840-A87F"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansNewTaiLue-Regular",range:"U+1980-19DF"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansNKo-Regular",range:"U+07C0-07FF"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansOlChiki-Regular",range:"U+1C50–1C7F"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansRunic-Regular",range:"U+16A0-16FF"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansShavian-Regular",range:"U+16A0-16FF"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansSinhalaUI-Regular",range:"U+0D80-0DFF"}) + - fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansSinhalaUI-Medium",range:"U+0D80-0DFF"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansSundanese",range:"U+1B80-1BBF"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansSyriacEastern",range:"U+0700-074F"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansSyriacWestern",range:"U+0700-074F"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansSyriacEstrangela",range:"U+0700-074F"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansTagalog",range:"U+1700-171F"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansTagbanwa",range:"U+1760-177F"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansTaiLe",range:"U+1950-197F"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansTaiTham",range:"U+1A20-1AAF"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansTaiViet",range:"U+AA80-AADF"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansTamilUI-Regular",range:"U+0B80-0BFF"}) + - fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansTamilUI-Medium",range:"U+0B80-0BFF"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansTeluguUI",range:"U+0C00-0C7F"}) + - fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansTeluguUI-Bold",range:"U+0C00-0C7F"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansThaana",range:"U+0780-07BF"}) + - fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansThaana-Bold",range:"U+0780-07BF"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansThaiUI-Regular",range:"U+0E00-0E7F"}) + - fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansThaiUI-Medium",range:"U+0E00-0E7F"}) + - fontParseHelper({family:"Noto Sans",name:"NotoSansTibetan",range:"U+0F00-0FFF"}) + - fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansTibetan-Bold",range:"U+0F00-0FFF"}) + - fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansTifinagh-Regular",range:"U+2D30-2D7F"}) + - fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansVai-Regular",range:"U+A500-A63F"}) + - fontParseHelper({family:"Noto Sans",weight:"500",name:"NotoSansYi-Regular",range:"U+A000-A48F"}) - - )); + // This makes numbers appear nicer by overriding tweetdeck's original function which did basically nothing + + TD.util.prettyNumber = function(e) { + var howPretty = parseInt(e, 10) + if (howPretty >= 100000000) { + return parseInt(howPretty/1000000) + "M"; + } else if (howPretty >= 10000000) { + return parseInt(howPretty/100000)/10 + "M"; + } else if (howPretty >= 1000000) { + return parseInt(howPretty/10000)/100 + "M"; + } else if (howPretty >= 100000) { + return parseInt(howPretty/1000) + "K"; + } else if (howPretty >= 10000) { + return parseInt(howPretty/100)/10 + "K"; + } else if (howPretty >= 1000) { + howPretty = howPretty.toString().substring(0,1) + "," + howPretty.toString().substring(1); + } + return howPretty; + } + + + + // here we add event listeners to add a fading out animation when a modal dialog is closed document.querySelectorAll(".js-modals-container")[0].removeChild = function(rmnode){ $(rmnode).addClass("mtd-modal-window-fade-out"); @@ -446,14 +1341,14 @@ function MTDInit(){ }; }) - if ($(".js-modal").length > 0) { - $(".js-modal").on("removeChild",function(rmnode){ - $(rmnode).addClass("mtd-modal-window-fade-out"); - setTimeout(function(){ - rmnode.remove(); - },200); - }); - } + $(".js-modal").on("removeChild",function(rmnode){ + $(rmnode).addClass("mtd-modal-window-fade-out"); + setTimeout(function(){ + rmnode.remove(); + },200); + }); + + // body's removeChild function is overriden to give tooltips their fade out animation body.removeChild = function(i) { if ($(i).hasClass("tooltip")) { @@ -465,8 +1360,10 @@ function MTDInit(){ } }; + // change favicon and notification sound $("link[rel=\"shortcut icon\"]").attr("href",MTDBaseURL + "sources/favicon.ico"); - $(document.querySelector("audio")).attr("src",GetURL("sources/alert_2.mp3")); + $(document.querySelector("audio")).attr("src",MTDBaseURL + "sources/alert_2.mp3"); + if (typeof TD_mustaches["settings/global_setting_filter_row.mustache"] !== "undefined") TD_mustaches["settings/global_setting_filter_row.mustache"]='
  • {{_i}}
    {{>text/global_filter_value}}{{/i}}
  • '; if (typeof TD_mustaches["column_loading_placeholder.mustache"] !== "undefined") @@ -484,7 +1381,7 @@ function MTDInit(){ if (typeof TD_mustaches["modal.mustache"] !== "undefined") TD_mustaches["modal.mustache"] = TD_mustaches["modal.mustache"].replace('{{_i}}Loading…{{/i}}','
    '); if (typeof TD_mustaches["twitter_profile.mustache"] !== "undefined") - TD_mustaches["twitter_profile.mustache"] = TD_mustaches["twitter_profile.mustache"].replace('{{_i}}Loading…{{/i}} ','
    '); + TD_mustaches["twitter_profile.mustache"] = TD_mustaches["twitter_profile.mustache"].replace('{{_i}}Loading…{{/i}}','
    '); if (typeof TD_mustaches["follow_button.mustache"] !== "undefined") TD_mustaches["follow_button.mustache"] = TD_mustaches["follow_button.mustache"].replace('{{_i}}Loading…{{/i}} ','
    ') if (typeof TD_mustaches["login/2fa_verification_code.mustache"] !== "undefined") @@ -503,41 +1400,60 @@ function MTDInit(){ TD_mustaches["follow_button.mustache"] = TD_mustaches["follow_button.mustache"].replace(' {{_i}}Loading…{{/i}} ','
    '); if (typeof TD_mustaches["lists/member.mustache"] !== "undefined") TD_mustaches["lists/member.mustache"] = TD_mustaches["lists/member.mustache"].replace(' {{_i}}Loading…{{/i}} ','
    '); + if (typeof TD_mustaches["keyboard_shortcut_list.mustache"] !== "undefined") + TD_mustaches["keyboard_shortcut_list.mustache"] = TD_mustaches["keyboard_shortcut_list.mustache"].replace("X Expand/Collapse navigation","Q Open Navigation Drawer/Menu") + + if (typeof TD_mustaches["menus/actions.mustache"] !== "undefined") { + TD_mustaches["menus/actions.mustache"] = TD_mustaches["menus/actions.mustache"] + .replace("Embed this Tweet","Embed Tweet") + .replace("Copy link to this Tweet","Copy link address") + .replace("Share via Direct Message","Share via message") + //.replace("Like from accounts…","Like from...") + .replace("Send a Direct Message","Send message") + .replace("Add or remove from Lists…","Add/remove from list...") + .replace("See who quoted this Tweet","View quotes") + .replace("Flagged (learn more)","Flagged") + .replace("Mute this conversation","Mute conversation") + .replace("Unmute this conversation","Unmute conversation") + .replace("Translate this Tweet","Translate Tweet") + .replace("{{_i}}Delete{{/i}}","{{_i}}Delete Tweet{{/i}}") + .replace(/\…/g,"..."); + } - if (typeof TD.i !== "undefined") { - TD.util.prettyTimeString = function(e) { - return TD.i("{{hours12}}:{{minutes}} {{amPm}}, {{day}} {{month}} {{fullYear}}", TD.util.prettyTime(e)); - }; + if ($(".app-signin-wrap:not(.mtd-signin-wrap)").length > 0) { + console.info("oh no, we're too late!"); + $(".app-signin-wrap:not(.mtd-signin-wrap)").remove(); + $(".login-container .startflow").html(newLoginPage); + startUpdateGoodLoginText(); } - // setTimeout(MTDAFCheckDate,1000); - // setInterval(MTDAFCheckDate,3000); + navigationSetup(); - TD.util.prettyNumber = function(e) { - //if (!TD.util.isValidNumber(e) || typeof e !== "string") - //return ""; - var yip = parseInt(e, 10) - if (yip >= 100000000) { - return parseInt(yip/1000000) + "M"; - } else if (yip >= 10000000) { - return parseInt(yip/100000)/10 + "M"; - } else if (yip >= 1000000) { - return parseInt(yip/10000)/100 + "M"; - } else if (yip >= 100000) { - return parseInt(yip/1000) + "K"; - } else if (yip >= 10000) { - return parseInt(yip/100)/10 + "K"; - } else if (yip >= 1000) { - yip = yip.toString().substring(0,1) + "," + yip.toString().substring(1); - } - return yip; - } +} + +function startUpdateGoodLoginText() { + if (ugltStarted) {return;} + ugltStarted = true; + + $(".startflow-background").attr("style","background-image:url("+MTDBaseURL+"sources/img/bg1.jpg)") - NavigationSetup(); + setInterval(function(){ + var text; + let newDate = new Date(); + + if (newDate.getHours() < 12) { + text = "Good morning!"; + } else if (newDate.getHours() < 18) { + text = "Good afternoon!"; + } else { + text = "Good evening!"; + } + $(".form-login h2").html(text); + },10000); } -function SendNotificationMessage(txt) { +function sendNotificationMessage(txt) { var knotty = $(MTDNotification); if (knotty.hasClass("mtd-appbar-notification-hidden")) { knotty.removeClass("mtd-appbar-notification-hidden").html(txt); @@ -546,7 +1462,7 @@ function SendNotificationMessage(txt) { } } -function WaitForNotificationDismiss(node,prevmsgID) { +function waitForNotificationDismiss(node,prevmsgID) { if (typeof node === "undefined" || node === null || typeof node.parentNode === "undefined" || node.parentNode === null) { if (msgID === prevmsgID) { $(MTDNotification).addClass("mtd-appbar-notification-hidden"); @@ -555,189 +1471,443 @@ function WaitForNotificationDismiss(node,prevmsgID) { return; } - setTimeout(function(){WaitForNotificationDismiss(node,prevmsgID);},500); + setTimeout(function(){waitForNotificationDismiss(node,prevmsgID);},500); } -function ResetSettingsUI() { - $("#mtd-appearance-form,#mtd-accessibility-form,#mtd-about-form").css("display","none"); - $("#mtd-appearance-li,#mtd-accessibility-li,#mtd-about-li").removeClass("selected"); +function openLegacySettings() { + $(".mtd-settings-panel").remove(); + new TD.components.GlobalSettings; } -function PrefsListener() { - if (document.querySelector("#mtd-round-avatars-control") !== null ) { +function openSettings(openMenu) { - if (getPref("mtd_round_avatars") && !$("#mtd-round-avatars-control").is(":checked")) { - console.log("someone unticked me!!"); - setPref("mtd_round_avatars",false); - enableStylesheetExtension("squareavatars"); - } + mtdPrepareWindows(); - if (!getPref("mtd_round_avatars") && $("#mtd-round-avatars-control").is(":checked")) { - console.log("someone ticked me!!"); - setPref("mtd_round_avatars",true); - disableStylesheetExtension("squareavatars"); - } + var tabs = make("div").addClass("mtd-settings-tab-container mtd-tabs"); + var container = make("div").addClass("mtd-settings-inner"); + var panel = make("div").addClass("mdl mtd-settings-panel").append(tabs).append(container); - if (!getPref("mtd_hearts") && $("#mtd-hearts").is(":checked")) { - console.log("someone ticked me!!"); - setPref("mtd_hearts",true); - enableStylesheetExtension("hearticon"); - } - if (getPref("mtd_hearts") && !$("#mtd-hearts").is(":checked")) { - console.log("someone unticked me!!"); - setPref("mtd_hearts",false); - disableStylesheetExtension("hearticon"); - } + for (var key in settingsData) { - if (!getPref("mtd_sensitive_alt") && $("#mtd-sensitive-alt").is(":checked")) { - console.log("someone ticked me!!"); - setPref("mtd_sensitive_alt",true); - enableStylesheetExtension("altsensitive"); + if (settingsData[key].enabled === false) { + continue; } - if (getPref("mtd_sensitive_alt") && !$("#mtd-sensitive-alt").is(":checked")) { - console.log("someone unticked me!!"); - setPref("mtd_sensitive_alt",false); - disableStylesheetExtension("altsensitive"); - } + var tab = make("button").addClass("mtd-settings-tab").attr("data-action",key).html(settingsData[key].tabName).click(function(){ + console.log(settingsData[key].number); + $(".mtd-settings-tab-selected").removeClass("mtd-settings-tab-selected"); + $(this).addClass("mtd-settings-tab-selected"); + container.css("margin-left","-"+($(this).index()*700)+"px"); + }); - if (!getPref("mtd_undocked_modals") && $("#mtd-undocked-modals").is(":checked")) { - console.log("someone ticked me!!"); - setPref("mtd_undocked_modals",true); - enableStylesheetExtension("undockedmodals"); - } + var subPanel = make("div").addClass("mtd-settings-subpanel mtd-col scroll-v").attr("id",key); - if (getPref("mtd_undocked_modals") && !$("#mtd-undocked-modals").is(":checked")) { - console.log("someone unticked me!!"); - setPref("mtd_undocked_modals",false); - disableStylesheetExtension("undockedmodals"); - } + if (!settingsData[key].enum && settingsData[key].enabled !== false) { + for (var prefKey in settingsData[key].options) { + let pref = settingsData[key].options[prefKey]; - if (!getPref("mtd_outlines") && $("#mtd-outlines-control").is(":checked")) { - console.log("someone ticked me!!"); - setPref("mtd_outlines",true); - html.addClass("mtd-acc-focus-ring"); - } + var option = make("div").addClass("mtd-settings-option").addClass("mtd-settings-option-"+pref.type); + + if (exists(pref.addClass)) { + option.addClass(pref.addClass); + } + + if (pref.enabled === false) { + continue; + } + + if (exists(pref.headerBefore)) { + subPanel.append( + make("h3").addClass("mtd-settings-panel-subheader").html(pref.headerBefore) + ); + } + + if (exists(pref.settingsKey) && exists(pref.default) && !hasPref(pref.settingsKey)) { + setPref(pref.settingsKey, pref.default); + } + + let input,select,label,minimum,maximum,button,link; + + + switch(pref.type) { + case "checkbox": + input = make("input").attr("type","checkbox").attr("id",prefKey).change(function(){ + setPref(pref.settingsKey,$(this).is(":checked")); + parseActions($(this).is(":checked") ? pref.activate : pref.deactivate, $(this).val()); + + }); + + if (exists(pref.settingsKey) && getPref(pref.settingsKey) === true) { + input.attr("checked","checked"); + } + + if (!exists(pref.settingsKey) && exists(pref.queryFunction)) { + if (pref.queryFunction()) { + input.attr("checked","checked"); + } + } + + label = make("label").addClass("checkbox").html(pref.title).append(input); + + option.append(label); + + if (exists(pref.initFunc)) { + pref.initFunc(select); + } + break; + case "dropdown": + select = make("select").attr("type","select").attr("id",prefKey).change(function(){ + //setPref(pref.settingsKey,$(this).val()); + parseActions(pref.activate, $(this).val()); + }); + + for (var prefKey in pref.options) { + if (!!(pref.options[prefKey].value)) { + let newPrefSel = pref.options[prefKey]; + let newoption = make("option").attr("value",newPrefSel.value).html(newPrefSel.text); + console.log(newoption); + + select.append(newoption); + } else { + + var group = make("optgroup").attr("label",pref.options[prefKey].name) + + for (var subkey in pref.options[prefKey].children) { + let newSubPrefSel = pref.options[prefKey].children[subkey]; + let newsuboption = make("option").attr("value",newSubPrefSel.value).html(newSubPrefSel.text); + + group.append(newsuboption); + } + + select.append(group); + } + } + + if (exists(pref.settingsKey)) { + select.val(getPref(pref.settingsKey)); + } else if (!exists(pref.settingsKey) && exists(pref.queryFunction)) { + select.val(pref.queryFunction()) + } + + label = make("label").addClass("control-label").html(pref.title); + + option.append(label,select); + + if (exists(pref.initFunc)) { + pref.initFunc(select); + } + break; + case "textbox": + input = make("input").attr("type","text").attr("id",prefKey); + + if (pref.instantApply === true) { + input.on("input",function(){ + parseActions(pref.activate, $(this).val()); + }); + } else { + input.change(function(){ + parseActions(pref.activate, $(this).val()); + }); + } + + if (exists(pref.settingsKey)) { + input.val(getPref(pref.settingsKey)); + } else if (!exists(pref.settingsKey) && exists(pref.queryFunction)) { + input.val(pref.queryFunction()) + } + + label = make("label").addClass("control-label").html(pref.title); + + if (exists(pref.initFunc)) { + pref.initFunc(input); + } + + option.append(label,input); + break; + case "textarea": + input = make("textarea").addClass("mtd-textarea").attr("id",prefKey).attr("rows","10").attr("cols","80").attr("placeholder",pref.placeholder || "").attr("spellcheck",false); + + if (pref.instantApply === true) { + input.on("input",function(){ + parseActions(pref.activate, $(this).val()); + }); + } else { + input.change(function(){ + parseActions(pref.activate, $(this).val()); + }); + } + + + // thank you https://sumtips.com/snippets/javascript/tab-in-textarea/ for this amazing hack for tabs to work + input.keydown(function(e) + { + + var kC = e.keyCode ? e.keyCode : e.charCode ? e.charCode : e.which; + if (kC == 9 && !e.shiftKey && !e.ctrlKey && !e.metaKey && !e.altKey) + { + var oS = input[0].scrollTop; + if (input[0].setSelectionRange) + { + var sS = input[0].selectionStart; + var sE = input[0].selectionEnd; + input[0].value = input[0].value.substring(0, sS) + "\t" + input[0].value.substr(sE); + input[0].setSelectionRange(sS + 1, sS + 1); + input[0].focus(); + } + else if (input[0].createTextRange) + { + document.selection.createRange().text = "\t"; + e.returnValue = false; + } + input[0].scrollTop = oS; + if (e.preventDefault) + { + e.preventDefault(); + } + return false; + } + return true; + }); + + if (exists(pref.settingsKey)) { + input.val(getPref(pref.settingsKey)); + } else if (!exists(pref.settingsKey) && exists(pref.queryFunction)) { + input.val(pref.queryFunction()) + } + + label = make("label").addClass("control-label").html(pref.title); + + if (exists(pref.initFunc)) { + pref.initFunc(input); + } + + option.append(label,input); + break; + case "slider": + label = make("label").addClass("control-label"); + + input = make("input").attr("type","range") + .attr("min",pref.minimum) + .attr("max",pref.maximum) + .change(function(){ + parseActions(pref.activate, $(this).val()); + }).on("input",function(){ + label.html(pref.title + " " + $(this).val() + (pref.displayUnit || "") +""); + console.log("changed: "+$(this).val()); + }); + + if (exists(pref.settingsKey)) { + input.val(parseInt(getPref(pref.settingsKey))); + } else if (!exists(pref.settingsKey) && exists(pref.queryFunction)) { + input.val(pref.queryFunction()); + } else if (exists(pref.default)) { + input.val(pref.default); + } + + label.html(pref.title + " " + input.val() + (pref.displayUnit || "") +""); + + maximum = make("label").addClass("control-label mtd-slider-maximum").html(pref.maximum + (pref.displayUnit || "")); + minimum = make("label").addClass("control-label mtd-slider-minimum").html(pref.minimum + (pref.displayUnit || "")); + + if (exists(pref.initFunc)) { + pref.initFunc(input); + } + + option.append(label,maximum,input,minimum); + break; + case "button": + label = make("label").addClass("control-label").html(pref.label || ""); + + button = make("button").html(pref.title).addClass("btn btn-positive mtd-settings-button") + .click(function(){ + parseActions(pref.activate,true); + }); + + if (exists(pref.initFunc)) { + pref.initFunc(button); + } + + option.append(label,button); + break; + case "link": + link = make("a").html(pref.label).addClass("mtd-settings-link") + .click(function(){ + parseActions(pref.activate,true); + }); + + if (exists(pref.initFunc)) { + pref.initFunc(link); + } + + option.append(link); + break; + } + + subPanel.append(option); + } + } else if (settingsData[key].enum === "aboutpage") { + var logo = make("i").addClass("mtd-logo icon-moderndeck icon"); + var h1 = make("h1").addClass("mtd-about-title").html("ModernDeck 7"); + var h2 = make("h2").addClass("mtd-version-title").html("Version " +SystemVersion); + var logoCont = make("div").addClass("mtd-logo-container"); + + if (!isApp) { + logoCont.append( + make("p").addClass("mtd-check-out-app").html("Did you know ModernDeck has a native app now? Check it out!") + ) + } + + logoCont.append(logo,h1,h2); + + subPanel.append(logoCont); + + var updateCont = make("div").addClass("mtd-update-container").html('
    '); + var updateSpinner = $(".mtd-update-spinner"); + var updateIcon = make("i").addClass("material-icon hidden"); + var updateh2 = make("h2").addClass("mtd-update-h2").html("Checking for updates..."); + var updateh3 = make("h3").addClass("mtd-update-h3 hidden").html(""); + var tryAgain = make("button").addClass("btn hidden").html("Try Again"); + var restartNow = make("button").addClass("btn hidden").html("Restart Now") + + var info = make("p").html("Made with by dangeredwolf in Columbus, OH since 2014

    ModernDeck is an open source project released under the MIT license."); + var infoCont = make("div").addClass("mtd-about-info").append(info); + + var patronInfo = make("div").addClass("mtd-patron-info").append( + make("div").addClass("mtd-patreon-button").append( + make("iframe").attr("src","https://www.patreon.com/platform/iframe?widget=become-patron-button&creatorID=3469384") + ), + make("div").addClass("mtd-patron-list").append( + make("iframe") + ) + ) + updateCont.append(updateIcon,updateh2,updateh3,tryAgain,restartNow); + + if (isApp) { + if (!html.hasClass("mtd-winstore") && !html.hasClass("mtd-macappstore")) { + subPanel.append(updateCont); + } + } + + subPanel.append(infoCont); + //subPanel.append(patronInfo); + + if (isApp) { + if (!html.hasClass("mtd-winstore") && !html.hasClass("mtd-macappstore")) { + mtdAppUpdatePage(updateCont,updateh2,updateh3,updateIcon,updateSpinner,tryAgain,restartNow); + } + } + } else if (settingsData[key].enum === "mutepage") { + + let filterInput = make("input").addClass("js-filter-input").attr("name","filter-input").attr("size",30).attr("type","text").attr("placeholder","Enter a word or phrase") + + let selectFilterType = make("select").attr("name","filter").addClass("js-filter-types").append( + make("option").attr("value","phrase").html("Words or phrases"), + make("option").attr("value","source").html("Tweet source") + ).change(function(){ + filterInput.attr("placeholder",$(this).val() === "phrase" ? "Enter a word or phrase" : "eg Tweeten") + }); + + let muteButton = make("button").attr("name","add-filter").addClass("js-add-filter btn-on-dark disabled").html("Mute").click(function(){ + if (filterInput.val().length > 0) { + TD.controller.filterManager.addFilter(selectFilterType.val(),filterInput.val(),false); + + updateFilterPanel(filterList); + } + }); + + let muteTypes = make("div").addClass("control-group").append( + make("label").attr("for","filter-types").addClass("control-label").html("Mute"), + make("div").addClass("controls").append(selectFilterType) + ) + let muteInput = make("div").addClass("control-group").append( + make("label").attr("for","filter-input").addClass("control-label").html("Matching"), + make("div").addClass("controls").append(filterInput) + ).on("input",function(){ + if ($(this).val().length > 0) { + muteButton.removeClass("disabled"); + } else { + muteButton.addClass("disabled"); + } + }); + + let muteAdd = make("div").addClass("control-group").append( + make("div").addClass("controls js-add-filter-container").append(muteButton) + ) + + let filterList = make("ul"); + + let filterListGroup = make("div").addClass("js-filter-list").append(filterList) - if (getPref("mtd_outlines") && !$("#mtd-outlines-control").is(":checked")) { - console.log("someone unticked me!!"); - setPref("mtd_outlines",false); - html.removeClass("mtd-acc-focus-ring"); - } - if ($("#mtd-theme-control option:selected").length > 0 && getPref("mtd_theme") !== $("#mtd-theme-control option:selected").val() && (getPref("mtd_theme") !== "AF_2019_fabulous")) { - disableStylesheetExtension(getPref("mtd_theme")); - setPref("mtd_theme",$("#mtd-theme-control option:selected").val()) - enableStylesheetExtension($("#mtd-theme-control option:selected").val() || "default"); + + + let form = make("form").addClass("js-global-settings frm").attr("id","global-settings").attr("action","#").append( + make("fieldset").attr("id","global_filter_settings").append( + muteTypes, + muteInput, + muteAdd, + filterListGroup + ) + ) + + updateFilterPanel(filterList); + + subPanel.append(form); } - if ($("#mtd-scrollbar-style option:selected").length > 0 && getPref("mtd_scrollbar_style") !== $("#mtd-scrollbar-style option:selected").val()) { - disableStylesheetExtension(getPref("mtd_scrollbar_style")); - setPref("mtd_scrollbar_style",$("#mtd-scrollbar-style option:selected").val()); - enableStylesheetExtension($("#mtd-scrollbar-style option:selected").val() || "default"); + tabs.append(tab); + container.append(subPanel); + + console.log("openMenu ?"+exists(openMenu)); + console.log(openMenu); + + + if (!exists(openMenu) && tab.index() === 0) { + tab.addClass("mtd-settings-tab-selected"); + tab.click(); } - setTimeout(PrefsListener,500); + if (exists(openMenu) && openMenu === key) { + tab.click(); + } } + + new TD.components.GlobalSettings; + + $("#settings-modal>.mdl").remove(); + $("#settings-modal").append(panel); + + return panel; } -function MTDSettings() { - MTDPrepareWindows(); - setTimeout(function(){$(".js-app-settings").click();},10); - setTimeout(function(){ - $("a[data-action='globalSettings']").click(); - var mtdsettingsmodalview = $("#settings-modal .mdl"); - mtdsettingsmodalview.addClass("mtd-settings-panel"); - var mtdsettingsmodalinner = $("#settings-modal .mdl .mdl-inner"); - $("#settings-modal .mdl .js-header-title").removeClass("js-header-title"); - $("#settings-modal .mdl .mdl-header-title").html("ModernDeck"); - mtdsettingsmodalinner.html('
    \ - \ - \ -
    \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ -
    \ - \ - \ - \ - \ - \ -
    '); - - $("#mtd-round-avatars-control").attr("checked",getPref("mtd_round_avatars")); - $("#mtd-undocked-modals").attr("checked",getPref("mtd_undocked_modals")); - $("#mtd-sensitive-alt").attr("checked",getPref("mtd_sensitive_alt")); - $("#mtd-outlines-control").attr("checked",getPref("mtd_outlines")); - $("#mtd-hearts").attr("checked",getPref("mtd_hearts")); - if (getPref("mtd_theme") !== "AF_2019_fabulous") - $("#mtd-theme-control").val(getPref("mtd_theme")); - $("#mtd-scrollbar-style").val(getPref("mtd_scrollbar_style")); - - PrefsListener(); - - $("#mtd_settings_about_button").on("mouseup",function() { - ResetSettingsUI(); - $("#mtd-about-li").addClass("selected"); - $("#mtd-about-form").css("display","block"); - }); +function updateFilterPanel(filterList) { + let filters = TD.controller.filterManager.getAll(); + filterList.html(""); - $("#mtd_settings_appearance_button").on("mouseup",function() { - ResetSettingsUI(); - $("#mtd-appearance-li").addClass("selected"); - $("#mtd-appearance-form").css("display","block"); - }); + for (var n in filters) { + let myFilter = filters[n]; - $("#mtd_settings_accessibility_button").on("mouseup",function() { - ResetSettingsUI(); - $("#mtd-accessibility-li").addClass("selected"); - $("#mtd-accessibility-form").css("display","block"); - }); - },100); + filterList.append( + make("li").addClass("list-filter").append( + make("div").addClass("mtd-mute-text mtd-mute-text-" + (myFilter.type === "source" ? "source" : "")), + make("em").html(myFilter.value), + make("input").attr("type","button").attr("name","remove-filter").attr("value","Remove").addClass("js-remove-filter small btn btn-negative").click(function(){ + TD.controller.filterManager.removeFilter(myFilter); + updateFilterPanel(filterList); + }) + ) + ); + + } + + return filterList; } -function LoginStuffs() { +function loginStuff() { var profileInfo = getProfileInfo(); if (profileInfo === null || typeof profileInfo === "undefined" || typeof profileInfo._profileBannerURL === "undefined" || profileInfo.profileImageURL === "undefined") { - setTimeout(LoginStuffs,150); + setTimeout(loginStuff,150); return; } var bannerPhoto = profileInfo._profileBannerURL.search("empty") > 0 ? "" : profileInfo._profileBannerURL; @@ -748,9 +1918,9 @@ function LoginStuffs() { $(mtd_nd_header_image).attr("style","background-image:url(" + bannerPhoto + ");"); // Fetch header and place in nav drawer $(mtd_nd_header_photo).attr("src",avatarPhoto) .mouseup(function(){ - var profileLinkyThing = $("a[href=\"https://twitter.com/"+getProfileInfo().screenName+"\"]"); + var profileLinkyThing = $(document.querySelector(".account-settings-bb a[href=\"https://twitter.com/"+getProfileInfo().screenName+"\"]")); - MTDPrepareWindows(); + mtdPrepareWindows(); if (profileLinkyThing.length > -1) { setTimeout(function(){ profileLinkyThing.click(); @@ -759,29 +1929,25 @@ function LoginStuffs() { }); // Fetch profile picture and place in nav drawer $(mtd_nd_header_username).html(name); // Fetch twitter handle and place in nav drawer - if (!getPref("has_opened_mtd6") && welcomeEnabled) { - setTimeout(function(){$(".js-app-settings").click()},10); - setTimeout(function() { - $("a[data-action='globalSettings']").click(); - $("#settings-modal .mdl-header-title").html("Welcome to ModernDeck 6.0").removeClass("js-header-title"); - $("#settings-modal .mdl").addClass("mtd-whats-new"); - $("#settings-modal .mdl-inner").html(welcomeScreenHtml); - },20); - setPref("has_opened_mtd6",true) - } - - //loadPreferences(); } -function NavigationSetup() { +function navigationSetup() { + if ($(".app-signin-wrap:not(.mtd-signin-wrap)").length > 0) { + console.info("oh no, we're too late!"); + $(".app-signin-wrap:not(.mtd-signin-wrap)").remove(); + $(".login-container .startflow").html(newLoginPage); + startUpdateGoodLoginText(); + } + if ($(".app-header-inner").length < 1) { - setTimeout(NavigationSetup,100); + setTimeout(navigationSetup,100); return; } loadPreferences(); - $(".column-scroller,.more-tweets-btn-container").each(function(a,b){ // Fixes a bug in TweetDeck's JS caused by ModernDeck having different animations in column preferences + $(".column-scroller,.more-tweets-btn-container").each(function(a,b){ + // Fixes a bug in TweetDeck's JS caused by ModernDeck having different animations in column settings var c = $(b); mutationObserver(b,function(){ if (typeof c.attr("style") !== "undefined") { @@ -798,14 +1964,8 @@ function NavigationSetup() { }) $(".app-header-inner").append( - make("a") - .attr("id","mtd-navigation-drawer-button") - .addClass("js-header-action mtd-drawer-button link-clean cf app-nav-link") - .html('
    ') + make("a").attr("id","mtd-navigation-drawer-button").addClass("js-header-action mtd-drawer-button link-clean cf app-nav-link").html('
    ') .click(function(){ - // TODO: Wire button to open navigation drawer - // TODO: Remove the above TODO from back when i was developing mtd 5.0 - if (typeof mtd_nav_drawer_background !== "undefined") { $("#mtd_nav_drawer_background").attr("class","mtd-nav-drawer-background"); } @@ -820,166 +1980,42 @@ function NavigationSetup() { .attr("id","mtd_nav_drawer") .addClass("mtd-nav-drawer mtd-nav-drawer-hidden") .append( - make("img") - .attr("id","mtd_nd_header_image") - .addClass("mtd-nd-header-image") - .attr("style",""), - make("img") - .addClass("avatar size73 mtd-nd-header-photo") - .attr("id","mtd_nd_header_photo") - .attr("src",""), - make("div") - .addClass("mtd-nd-header-username") - .attr("id","mtd_nd_header_username") - .html("PROFILE ERROR
    Tell @dangeredwolf i said hi"), - make("button") - .addClass("btn mtd-nav-button mtd-settings-button") - .attr("id","tdset") - .append( - make("i") - .addClass("icon icon-td-settings") - ) - .click(function(){ - MTDPrepareWindows(); - + make("img").attr("id","mtd_nd_header_image").addClass("mtd-nd-header-image").attr("style",""), + make("img").addClass("avatar size73 mtd-nd-header-photo").attr("id","mtd_nd_header_photo").attr("src",""), + make("div").addClass("mtd-nd-header-username").attr("id","mtd_nd_header_username").html("PROFILE ERROR
    Tell @dangeredwolf i said hi"), + make("button").addClass("btn mtd-nav-button mtd-nav-first-button").attr("id","tdaccsbutton").append(make("i").addClass("icon icon-twitter-bird")).click(function(){mtdPrepareWindows();$(".js-show-drawer.js-header-action").click();}).append("Your Accounts"), + make("button").addClass("btn mtd-nav-button").attr("id","addcolumn").append(make("i").addClass("icon icon-plus")).click(function(){mtdPrepareWindows();TD.ui.openColumn.showOpenColumn()}).append("Add Column"), + make("div").addClass("mtd-nav-divider"), + make("button").addClass("btn mtd-nav-button").attr("id","kbshortcuts").append(make("i").addClass("icon icon-keyboard")).click(function(){ + mtdPrepareWindows(); + console.log("td-keyboard"); setTimeout(function(){$(".js-app-settings").click()},10); - setTimeout(function(){$("a[data-action='globalSettings']").click()},20); - }) - .append("TweetDeck Settings"), - make("button") - .addClass("btn mtd-nav-button") - .attr("id","mtdsettings") - .append( - make("i") - .addClass("icon icon-mtd-settings") - ) - .click(MTDSettings) - .append("ModernDeck Settings"), - make("button") - .addClass("btn mtd-nav-button") - .attr("id","btdsettings") - .append( - make("i") - .addClass("icon icon-btd-settings") - ) - .click(function(){ - MTDPrepareWindows(); - setTimeout(function(){ - var opn = window.open("chrome-extension://micblkellenpbfapmcpcfhcoeohhnpob/options/options.html", '_blank'); - opn.focus(); - },200); - }) - .append("Better TweetDeck Settings"), - make("div") - .addClass("mtd-nav-divider"), - make("button") - .addClass("btn mtd-nav-button") - .attr("id","tdaccsbutton") - .append( - make("i") - .addClass("icon icon-twitter-bird") - ) - .click(function(){ - MTDPrepareWindows(); - $(".js-show-drawer.js-header-action").click(); - }) - .append("Your Accounts"), - make("button") - .addClass("btn mtd-nav-button") - .attr("id","addcolumn") - .append( - make("i") - .addClass("icon icon-plus") - ) - .click(function(){ - MTDPrepareWindows(); - $(".js-header-add-column").click(); - }) - .append("Add Column"), - make("div") - .addClass("mtd-nav-divider"), - make("button") - .addClass("btn mtd-nav-button mtd-nav-group-expand") - .attr("id","mtd_nav_expand") - .append( - make("i") - .addClass("icon mtd-icon-arrow-down") - .attr("id","mtd_nav_group_arrow") - ) - .click(function(){ + setTimeout(function(){$("a[data-action='keyboardShortcutList']").click()},20); + }).append("Keyboard Shortcuts"), + make("button").addClass("btn mtd-nav-button").attr("id","mtdsettings").append(make("i").addClass("icon icon-settings")).click(function(){openSettings()}).append("Settings"), + make("div").addClass("mtd-nav-divider"), + make("button").addClass("btn mtd-nav-button mtd-nav-group-expand").attr("id","mtd_nav_expand").append(make("i").addClass("icon mtd-icon-arrow-down").attr("id","mtd_nav_group_arrow")).click(function(){ $("#mtd_nav_group").toggleClass("mtd-nav-group-expanded"); $("#mtd_nav_group_arrow").toggleClass("mtd-nav-group-arrow-flipped"); $("#mtd_nav_drawer").toggleClass("mtd-nav-drawer-group-open"); - }) - .append("More..."), - make("div") - .addClass("mtd-nav-group mtd-nav-group-expanded") - .attr("id","mtd_nav_group") - .append( - make("button") - .addClass("btn mtd-nav-button") - .append( - make("i") - .addClass("icon mtd-icon-changelog") - ) - .click(function(){ - MTDPrepareWindows(); - setTimeout(function(){$(".js-app-settings").click()},10); - setTimeout(function(){$("a[href=\"https://twitter.com/i/tweetdeck_release_notes\"]").click()},20); - }) - .append("TweetDeck Release Notes"), - make("button") - .addClass("btn mtd-nav-button") - .attr("id","kbshortcuts") - .append( - make("i") - .addClass("icon icon-keyboard") - ) - .click(function(){ - MTDPrepareWindows(); - setTimeout(function(){$(".js-app-settings").click()},10); - setTimeout(function(){$("a[data-action='keyboardShortcutList']").click()},20); - }) - .append("Keyboard Shortcuts"), - make("button") - .addClass("btn mtd-nav-button") - .append( - make("i") - .addClass("icon icon-search") - ) - .click(function(){ - MTDPrepareWindows(); + }).append("More..."), + make("div").addClass("mtd-nav-group mtd-nav-group-expanded").attr("id","mtd_nav_group").append( + make("button").addClass("btn mtd-nav-button").append(make("i").addClass("icon mtd-icon-changelog")).click(function(){ + mtdPrepareWindows(); + console.log("td-changelog"); + window.open("https://twitter.com/i/tweetdeck_release_notes"); + }).append("TweetDeck Release Notes"), + make("button").addClass("btn mtd-nav-button").append(make("i").addClass("icon icon-search")).click(function(){ + mtdPrepareWindows(); + console.log("td-searchtips"); setTimeout(function(){$(".js-app-settings").click()},10); setTimeout(function(){$("a[data-action=\"searchOperatorList\"]").click()},20); - }) - .append("Search Tips"), - make("div") - .addClass("mtd-nav-divider"), - make("button") - .addClass("btn mtd-nav-button") - .attr("id","mtd_signout") - .append( - make("i") - .addClass("icon icon-logout") - ) - .click(function(){ - MTDPrepareWindows(); - setTimeout(function(){$(".js-app-settings").click()},10); - setTimeout(function(){$("a[data-action='signOut']").click()},20); - }) - .append("Sign Out"), + }).append("Search Tips"), + make("div").addClass("mtd-nav-divider"), + make("button").addClass("btn mtd-nav-button").attr("id","mtd_signout").append(make("i").addClass("icon icon-logout")).click(function(){TD.controller.init.signOut();}).append("Sign Out"), ), - - make("div") - .addClass("mtd-nav-divider mtd-nav-divider-feedback"), - make("button") - .addClass("btn mtd-nav-button mtd-nav-button-feedback") - .attr("id","mtdfeedback") - .append( - make("i") - .addClass("icon icon-feedback") - ) - .click(function(){ + make("div").addClass("mtd-nav-divider mtd-nav-divider-feedback"), + make("button").addClass("btn mtd-nav-button mtd-nav-button-feedback").attr("id","mtdfeedback").append(make("i").addClass("icon icon-feedback")).click(function(){ sendingFeedback = true; try { throw "Manually triggered feedback button"; @@ -987,28 +2023,22 @@ function NavigationSetup() { Raven.captureException(e); Raven.showReportDialog(); } - }) - .append("Send Feedback") + }).append("Send Feedback") ), - make("div") - .attr("id","mtd_nav_drawer_background") - .addClass("mtd-nav-drawer-background mtd-nav-drawer-background-hidden") - .click(function(){ + make("div").attr("id","mtd_nav_drawer_background").addClass("mtd-nav-drawer-background mtd-nav-drawer-background-hidden").click(function(){ $(this).addClass("mtd-nav-drawer-background-hidden"); $(mtd_nav_drawer).addClass("mtd-nav-drawer-hidden"); }) ); - $(".mtd-nav-group-expanded").attr("style","height:"+$(".mtd-nav-group-expanded").height()+"px"); $(".mtd-nav-group-expanded").removeClass("mtd-nav-group-expanded"); $(".app-header-inner").append( - make("div") - .addClass("mtd-appbar-notification mtd-appbar-notification-hidden") - .attr("id","MTDNotification") + make("div").addClass("mtd-appbar-notification mtd-appbar-notification-hidden").attr("id","MTDNotification") ) - window.MTDPrepareWindows = function() { + window.mtdPrepareWindows = function() { + console.info("mtdPrepareWindows called"); $("#update-sound,.js-click-trap").click(); mtd_nav_drawer_background.click(); @@ -1016,194 +2046,53 @@ function NavigationSetup() { $("#mtd_nav_group_arrow").removeClass("mtd-nav-group-arrow-flipped"); } - if (TreatGeckoWithCare) { - btdsettings.remove(); - } - - LoginStuffs(); + loginStuff(); } -function KeyboardShortcutHandler(e) { - if (e.key.toUpperCase() === "A" && e.ctrlKey && e.shiftKey) { //pressing Ctrl+Shift+A toggles the outline accessibility option - console.log("User has pressed the proper key combination to toggle accessibility!"); - if (!getPref("mtd_outlines")) { - setPref("mtd_outlines",true); - html.addClass("mtd-acc-focus-ring"); - } else { - setPref("mtd_outlines",false); - html.removeClass("mtd-acc-focus-ring"); - } - if (document.querySelector("#mtd-outlines-control") !== null) { - $("#mtd-outlines-control").click(); - } - } - if (e.keyCode === 81 && document.querySelector("input:focus,textarea:focus") === null) { - if ($(mtd_nav_drawer).hasClass("mtd-nav-drawer-hidden")) { - $("#mtd-navigation-drawer-button").click(); +function keyboardShortcutHandler(e) { + console.log(e); + + if (e.key.toUpperCase() === "A" && (e.ctrlKey) && e.shiftKey) { //pressing Ctrl+Shift+A toggles the outline accessibility option + console.log("User has pressed the proper key combination to toggle outlines!"); + + if ($("#accoutline").length > 0) { + $("#accoutline").click(); } else { - $(mtd_nav_drawer_background).click(); + settingsData.accessibility.options.accoutline.activate.func(); } + } + if (e.key.toUpperCase() === "C" && (e.ctrlKey) && e.shiftKey) { //pressing Ctrl+Shift+C disabled user CSS + console.log("User disabled custom CSS!"); + disableStylesheetExtension("customcss") -} + } + if (e.key.toUpperCase() === "H" && (e.ctrlKey) && e.shiftKey) { //pressing Ctrl+Shift+H toggles high contrast + console.log("User has pressed the proper key combination to toggle high contrast!"); -function checkIfUserSelectedNewTheme() { - if (html.hasClass("dark")) { - enableStylesheetExtension("dark"); - disableStylesheetExtension("light"); - html.addClass("mtd-dark").removeClass("mtd-light") - MTDDark = true; - // if (typeof getPref("mtd_theme") !== "undefined" && getPref("mtd_theme") === "paper") { - // setPref("mtd_theme","default"); - // disableStylesheetExtension("paper"); - // } + if ($("#highcont").length > 0) { + $("#highcont").click(); } else { - disableStylesheetExtension("dark"); - enableStylesheetExtension("light"); - html.addClass("mtd-light").removeClass("mtd-dark") - MTDDark = false; - // if (typeof getPref("mtd_theme") !== "undefined" && getPref("mtd_theme") ==="amoled") { - // setPref("mtd_theme","default"); - // disableStylesheetExtension("amoled"); - // } + if (getPref("mtd_highcontrast") === true) { + settingsData.accessibility.options.highcont.deactivate.func(); + } else { + settingsData.accessibility.options.highcont.activate.func(); + } } - - enableStylesheetExtension(getPref("mtd_theme") || "default"); -} - -function diag() { - try { - attemptdiag(); } - catch(err) { - $("#open-modal,.js-app-loading").append( - make("div") - .addClass("mdl s-tall-fixed") - .append( - make("header") - .addClass("mdl-header") - .append( - make("h3") - .addClass("mdl-header-title") - .html("Diagnostics") - ), - make("div") - .addClass("mdl-inner") - .append( - make("div") - .addClass("mdl-content") - .css("padding-left","20px") - .html("Well, that's unfortuate. I can't seem to be able to fetch diagnostics right now. Maybe refresh and try again?

    (P.S. the error is " + (err ? err.toString() : "[miraculously, undefined.]") + ")") - ) - ) - ) - .css("display","block"); + if (e.keyCode === 81 && document.querySelector("input:focus,textarea:focus") === null) { + if ($(mtd_nav_drawer).hasClass("mtd-nav-drawer-hidden")) { + $("#mtd-navigation-drawer-button").click(); + } else { + $(mtd_nav_drawer_background).click(); + } } -} -function closediag() { - $("#open-modal,.js-app-loading").css("display","none"); -} -function attemptdiag() { - openModal = $("#open-modal,.js-app-loading"); - - openModal.append( - make("div") - .addClass("mdl s-tall-fixed") - .append( - make("header") - .addClass("mdl-header") - .append( - make("h3") - .addClass("mdl-header-title") - .html("Diagnostics") - ), - make("div") - .addClass("mdl-inner") - .append( - make("div") - .addClass("mdl-content") - .css("padding-left","20px") - .html('\ - \ - \ - \ - \ -
    SystemVersion: ' + SystemVersion + '\ -
    userAgent: ' + navigator.userAgent + '\ -
    vendor: ' + navigator.vendor + '\ -
    vendorSub: ' + navigator.vendorSub + '\ -
    appCodeName: ' + navigator.appCodeName + '\ -
    appName: ' + navigator.appName + '\ -
    cookieEnabled: ' + navigator.cookieEnabled + '\ -
    language: ' + navigator.language + '\ -
    platform: ' + navigator.platform + '\ -
    TreatGeckoWithCare: ' + TreatGeckoWithCare + '\ -
    audiosrc: ' + document.getElementsByTagName("audio")[0].src + '\ -
    MTDBaseURL: ' + MTDBaseURL + '\ -
    MTDDark: ' + MTDDark + '\ -
    FetchProfileInfo: ' + FetchProfileInfo + '\ -
    mtd_round_avatars: ' + getPref("mtd_round_avatars") + '\ -
    mtd_flag_block_secure_ss: ' + getPref("mtd_flag_block_secure_ss") + '\ -
    mtd_flag_block_communications: ' + getPref("mtd_flag_block_communications") + '\ -
    mtd_nd_header_image: ' + (typeof $("#mtd_nd_header_image")[0] !== "undefined" && $("#mtd_nd_header_image")[0].style.cssText) + '\ -
    mtd_nd_header_username: ' + (typeof $("#mtd_nd_header_username")[0] !== "undefined" && $("#mtd_nd_header_username")[0].innerHTML) + '\ -
    mtd_nd_header_photo: ' + (typeof $("#mtd_nd_header_photo")[0] !== "undefined" && $("#mtd_nd_header_photo")[0].src) + '\ -
    guestID: ' + (TD.storage.store._backend.guestID) + '\ -
    msgID: ' + (msgID) + '\ -
    InjectFonts?: ' + (typeof InjectFonts !== "undefined") + '\ - \ - \ - \ - ') - ) - ) - ) - .css("display","block"); } -function dxdiag() { - - openModal = $("#open-modal,.js-app-loading"); - - openModal.append( - make("div") - .addClass("mdl s-tall-fixed") - .append( - make("header") - .addClass("mdl-header") - .append( - make("h3") - .addClass("mdl-header-title") - .html("DxDiag Help") - ), - make("div") - .addClass("mdl-inner") - .append( - make("div") - .addClass("mdl-content") - .css("padding-left","20px") - .html('\ - This is a guide to help you acquire your DxDiag if asked by a developer.\ -

    \ - Warning: This only applies for Windows. If you\'re running OS X / Linux / etc., this won\'t work.\ -

    \ - Step 1: Press the Windows key + R key to open the Run dialog.
    \ - Step 2: In the box of the new window, type in "dxdiag", and press the Enter key.
    \ - Step 3: In the DirectX Diagnostic window, click the "Save All Information..." button at the bottom.
    \ - Step 4: Save this file somewhere you\'ll remember, like the Desktop.
    \ - Step 5: Upload the file to a file hosting site, for example, Mega (no signup needed), or whereever you can easily share the link for the file with developers.\ - ') - ) - ) - ) - .css("display","block"); -} - - var rtbutton; function checkIfSigninFormIsPresent() { @@ -1216,12 +2105,9 @@ function checkIfSigninFormIsPresent() { if (loginIntervalTick > 5) { clearInterval(loginInterval); } - } -} - -function checkIfBTDIsInstalled() { - if (body.hasClass("btd-ready")) { - enableStylesheetExtension("btdsupport"); + } else { + disableStylesheetExtension("loginpage"); + html.removeClass("signin-sheet-now-present"); } } @@ -1266,52 +2152,284 @@ function onElementAddedToDOM(e) { } } -function mtdAppFunctions() { +function roundMe(val) { + return Math.floor(val * 100)/100; +} + +function formatBytes(val) { + if (val < 1000) { + return val + " bytes" + } else if (val < 1000000) { + return roundMe(val/1000) + " KB" + } else if (val < 1000000000) { + return roundMe(val/1000000) + " MB" + } else { + return roundMe(val/1000000000) + " GB" + } +} - const {remote,ipcRenderer} = require('electron'); +function mtdAppUpdatePage(updateCont,updateh2,updateh3,updateIcon,updateSpinner,tryAgain,restartNow) { - var minimise = make("button") - .addClass("windowcontrol min") - .html("") - .click(function(data,handler){ - var window = remote.BrowserWindow.getFocusedWindow(); - window.minimize(); - }); + const {ipcRenderer} = require('electron'); - var maximise = make("button") - .addClass("windowcontrol max") - .html("") - .click(function(data,handler){ - var window = remote.BrowserWindow.getFocusedWindow(); - if (window.isMaximized()) { - window.unmaximize(); + ipcRenderer.on("error",function(e,args,f,g){ + console.log("E:"); + console.log(e); + console.log("args:"); + console.log(args); + console.log("f:"); + console.log(f); + console.log("g:"); + console.log(g); + updateh2.html("There was a problem checking for updates. "); + $(".mtd-update-spinner").addClass("hidden"); + if (exists(args.code)) { + updateh3.html(args.code + " " + args.errno + " " + args.syscall + " " + args.path).removeClass("hidden"); + } else if (exists(f)) { + updateh3.html(f.match(/^(Cannot check for updates: )(.)+\n/g)).removeClass("hidden") } else { - window.maximize(); + updateh3.html("We couldn't interpret the error info we received. Please try again later or DM @ModernDeck on Twitter for further help.").removeClass("hidden"); } + updateIcon.html("error_outline").removeClass("hidden"); + tryAgain.removeClass("hidden").html("Try Again"); + + }); + + ipcRenderer.on("checking-for-update",function(e,args){ + console.log(args); + updateIcon.addClass("hidden"); + $(".mtd-update-spinner").removeClass("hidden"); + updateh2.html("Checking for updates..."); + updateh3.addClass("hidden"); + tryAgain.addClass("hidden"); + restartNow.addClass("hidden"); + }); + + ipcRenderer.on("download-progress",function(e,args){ + console.log(args); + updateIcon.addClass("hidden"); + $(".mtd-update-spinner").removeClass("hidden"); + updateh2.html("Downloading update..."); + updateh3.html(Math.floor(args.percent)+"% complete ("+formatBytes(args.transferred)+"/"+formatBytes(args.total)+", "+formatBytes(args.bytesPerSecond)+"/s)").removeClass("hidden"); + tryAgain.addClass("hidden"); + restartNow.addClass("hidden"); + }); + + + ipcRenderer.on("update-downloaded",function(e,args){ + console.log(args); + $(".mtd-update-spinner").addClass("hidden"); + updateIcon.html("update").removeClass("hidden"); + updateh2.html("Update downloaded"); + updateh3.html("Restart ModernDeck to complete the update").removeClass("hidden"); + tryAgain.addClass("hidden"); + restartNow.removeClass("hidden"); + }); + + + ipcRenderer.on("update-not-available",function(e,args){ + console.log(args); + $(".mtd-update-spinner").addClass("hidden"); + updateh2.html("You're up to date"); + updateIcon.html("check_circle").removeClass("hidden"); + updateh3.html(SystemVersion + " is the latest version.").removeClass("hidden"); + tryAgain.removeClass("hidden").html("Check Again"); + restartNow.addClass("hidden"); + }); + + tryAgain.click(function(){ + ipcRenderer.send('checkForUpdates'); + }) + + restartNow.click(function(){ + ipcRenderer.send('restartAndInstallUpdates'); }); - var closefunc = function() { - window.close(); + ipcRenderer.send('checkForUpdates'); +} + +function notifyUpdate() { + let notifRoot = mR.findFunction("showErrorNotification")[0].showNotification({title:"ModernDeck Updates",timeoutDelayMs:999999999999999999}); + let notifId = notifRoot._id; + let notif = $("li.Notification[data-id=\""+notifId+"\"]"); + let notifContent = $("li.Notification[data-id=\""+notifId+"\"] .Notification-content"); + let notifIcon = $("li.Notification[data-id=\""+notifId+"\"] .Notification-icon .Icon"); + + if (notif.length > 0) { + notifIcon.removeClass("Icon--notifications").addClass("mtd-icon-update"); + + notifContent.append( + make("p").html("We found and downloaded updates for ModernDeck."), + make("button").html("Relaunch Now").click(function(){ + ipcRenderer.send('restartApp'); + }), + make("button").html("Later").click(function(){ + mR.findFunction("showErrorNotification")[0].removeNotification({notification:notif}); + }) + ) } +} - var close = make("button") - .addClass("windowcontrol close") - .html("") - .click(closefunc); +var offlineNotification; +function notifyOffline() { + if (exists(offlineNotification)) { + return; + } + let notifRoot = mR.findFunction("showErrorNotification")[0].showNotification({title:"Internet Disconnected",timeoutDelayMs:999999999999999999}); + let notifId = notifRoot._id; + offlineNotification = $("li.Notification[data-id=\""+notifId+"\"]"); + let notifContent = $("li.Notification[data-id=\""+notifId+"\"] .Notification-content"); + let notifIcon = $("li.Notification[data-id=\""+notifId+"\"] .Notification-icon .Icon"); - var windowcontrols = make("div") - .addClass("windowcontrols") - .append(minimise) - .append(maximise) - .append(close); + if (offlineNotification.length > 0) { + notifIcon.removeClass("Icon--notifications").addClass("mtd-icon-disconnected"); - body.append(windowcontrols); + notifContent.append( + make("p").html("We detected that you are disconnected from the internet. Many features are unavailable without an internet connection.") + ) + } +} + +function dismissOfflineNotification() { + if (!exists(offlineNotification)) {return;} + mR.findFunction("showErrorNotification")[0].removeNotification({notification:offlineNotification}); +} + +function mtdAppFunctions() { + + if (typeof require === "undefined") {return;} + + const { remote, ipcRenderer } = require('electron'); + + const Store = require('electron-store'); + store = new Store({name:"mtdsettings"}); + + + // Enable high contrast if system is set to high contrast + + ipcRenderer.on("inverted-color-scheme-changed",function(e,enabled){ + console.log("inverted colour scheme? "+enabled); + if (enabled && getPref("mtd_highcontrast") !== true) { + try { + settingsData.accessibility.options.highcont.activate.func(); + } catch(e){} + } + }); + + ipcRenderer.on("disable-high-contrast",function(e){ + console.error("DISABLING HIGH CONTRAST "); + try { + settingsData.accessibility.options.highcont.deactivate.func(); + } catch(e){} + }); + + + ipcRenderer.on("aboutMenu",function(e,args){ + if ($(".mtd-settings-tab[data-action=\"about\"]").length > 0){ + $(".mtd-settings-tab[data-action=\"about\"]").click(); + } else { + openSettings("about"); + } + }); + ipcRenderer.on("openSettings",function(e,args){ + openSettings(); + }); + ipcRenderer.on("accountsMan",function(e,args){ + $(".js-show-drawer.js-header-action").click(); + }); + ipcRenderer.on("sendFeedback",function(e,args){ + try { + throw "Manually triggered feedback button"; + } catch(e) { + Raven.captureException(e); + Raven.showReportDialog(); + } + }); + ipcRenderer.on("msgModernDeck",function(e,args){ + $(document).trigger("uiComposeTweet", { + type: "message", + messageRecipients: [{ + screenName: "ModernDeck" + }] + }) + }); + ipcRenderer.on("newTweet",function(e,args){ + $(document).trigger("uiComposeTweet"); + }); + ipcRenderer.on("newDM",function(e,args){ + $(document).trigger("uiComposeTweet"); + $(".js-dm-button").click(); + }); + + if (html.hasClass("mtd-app")) { + var minimise = make("button") + .addClass("windowcontrol min") + .html("") + .click(function(data,handler){ + var window = remote.BrowserWindow.getFocusedWindow(); + window.minimize(); + }); + + var maximise = make("button") + .addClass("windowcontrol max") + .html("") + .click(function(data,handler){ + var window = remote.BrowserWindow.getFocusedWindow(); + if (window.isMaximized()) { + window.unmaximize(); + } else { + window.maximize(); + } + }); + + var close = make("button") + .addClass("windowcontrol close") + .html("") + .click(function() { + window.close(); + }); + + + var windowcontrols = make("div") + .addClass("windowcontrols") + .append(minimise) + .append(maximise) + .append(close); + + body.append(windowcontrols); + } ipcRenderer.on('context-menu', (event, p) => { - console.log(p); // prints "pong" - body.append(buildContextMenu(p)); + const electron = require("electron") + var theMenu = buildContextMenu(p); + let menu = electron.remote.menu; + let Menu = electron.remote.Menu; + + if (useNativeContextMenus) { + Menu.buildFromTemplate(theMenu).popup(); + return; + //ipcRenderer.send('nativeContextMenu',theMenu); + } + + if (exists(theMenu)) + body.append(theMenu); }) + + const updateOnlineStatus = function(){ + + if (!navigator.onLine) { + notifyOffline(); + } else { + dismissOfflineNotification(); + } + + } + + window.addEventListener('online', updateOnlineStatus); + window.addEventListener('offline', updateOnlineStatus); + + updateOnlineStatus(); } function getIpc() { @@ -1357,12 +2475,31 @@ contextMenuFunctions = { }, copyImage:function(e){ getIpc().send("copyImage",e); + }, + saveImage:function(e){ + getIpc().send("saveImage",e); + }, + inspectElement:function(e){ + getIpc().send("inspectElement",e); + }, + restartApp:function(e){ + getIpc().send("restartApp",e); + }, + newSettings:function(e){ + openSettings(); } } function makeCMItem(p) { - var a = make("a").attr("href","#").attr("data-action",p.dataaction).html(p.text); + if (useNativeContextMenus) { + let dataact = p.dataaction; + let data = p.data; + let nativemenu = { label:p.text, click(){console.log("yes, a click has occurred");contextMenuFunctions[dataact](data)}, enabled:p.enabled }; + //nativemenu.click = ; + return nativemenu; + } + var a = make("a").attr("href","#").attr("data-action",p.dataaction).html(p.text).addClass("mtd-context-menu-item"); var li = make("li").addClass("is-selectable").append(a); if (p.enabled === false) { @@ -1375,7 +2512,7 @@ function makeCMItem(p) { if (p.mousex && p.mousey) { document.elementFromPoint(p.mousex, p.mousey).focus(); console.log("Got proper info, keeping context (x="+p.mousex+",y="+p.mousey+")"); - console.log(document.elementFromPoint(p.mousex, p.mousey)); + console.log(); } contextMenuFunctions[p.dataaction](p.data); clearContextMenu(); @@ -1393,6 +2530,9 @@ function clearContextMenu() { } function makeCMDivider() { + if (useNativeContextMenus) { + return {type:'separator'} + } return make("div").addClass("drp-h-divider"); } @@ -1412,18 +2552,27 @@ function buildContextMenu(p) { }) } - if (p.isEditable) { - items.push(makeCMItem({mousex:x,mousey:y,dataaction:"undo",text:"Undo",enabled:p.editFlags.canUndo})); - items.push(makeCMItem({mousex:x,mousey:y,dataaction:"redo",text:"Redo",enabled:p.editFlags.canRedo})); - items.push(makeCMDivider()); - items.push(makeCMItem({mousex:x,mousey:y,dataaction:"cut",text:"Cut",enabled:p.editFlags.canCut})); + if ($(document.elementFromPoint(x,y)).hasClass("mtd-context-menu-item")) { + return; + } + console.log(p); + + if (p.isEditable || (exists(p.selectionText) && p.selectionText.length > 0)) { + if (p.isEditable) { + items.push(makeCMItem({mousex:x,mousey:y,dataaction:"undo",text:"Undo",enabled:p.editFlags.canUndo})); + items.push(makeCMItem({mousex:x,mousey:y,dataaction:"redo",text:"Redo",enabled:p.editFlags.canRedo})); + items.push(makeCMDivider()); + items.push(makeCMItem({mousex:x,mousey:y,dataaction:"cut",text:"Cut",enabled:p.editFlags.canCut})); + } items.push(makeCMItem({mousex:x,mousey:y,dataaction:"copy",text:"Copy",enabled:p.editFlags.canCopy})); - items.push(makeCMItem({mousex:x,mousey:y,dataaction:"paste",text:"Paste",enabled:p.editFlags.canPaste})); - items.push(makeCMItem({mousex:x,mousey:y,dataaction:"selectAll",text:"Select All",enabled:p.editFlags.canSelectAll})); + if (p.isEditable) { + items.push(makeCMItem({mousex:x,mousey:y,dataaction:"paste",text:"Paste",enabled:p.editFlags.canPaste})); + items.push(makeCMItem({mousex:x,mousey:y,dataaction:"selectAll",text:"Select All",enabled:p.editFlags.canSelectAll})); + } items.push(makeCMDivider()); } - if (p.linkURL !== '') { + if (p.linkURL !== '' && p.linkURL !== "https://tweetdeck.twitter.com/#") { items.push(makeCMItem({mousex:x,mousey:y,dataaction:"openLink",text:"Open link in browser",enabled:true,data:p.linkURL})); items.push(makeCMItem({mousex:x,mousey:y,dataaction:"copyLink",text:"Copy link address",enabled:true,data:p.linkURL})); items.push(makeCMDivider()); @@ -1432,9 +2581,18 @@ function buildContextMenu(p) { if (p.srcURL !== '') { items.push(makeCMItem({mousex:x,mousey:y,dataaction:"openImage",text:"Open image in browser",enabled:true,data:p.srcURL})); items.push(makeCMItem({mousex:x,mousey:y,dataaction:"copyImage",text:"Copy image",enabled:true,data:{x:x,y:y}})); + items.push(makeCMItem({mousex:x,mousey:y,dataaction:"saveImage",text:"Save image...",enabled:true,data:p.srcURL})); items.push(makeCMItem({mousex:x,mousey:y,dataaction:"copyImageURL",text:"Copy image address",enabled:true,data:p.srcURL})); items.push(makeCMDivider()); } + if (getPref("mtd_inspectElement")) { + items.push(makeCMItem({mousex:x,mousey:y,dataaction:"inspectElement",text:"Inspect element",enabled:true,data:{x:x,y:y}})); + } + //items.push(makeCMItem({mousex:x,mousey:y,dataaction:"newSettings",text:"Open Settings",enabled:true})); + + if (useNativeContextMenus) { + return items; + } var ul = make("ul"); @@ -1446,74 +2604,117 @@ function buildContextMenu(p) { var menu = make("menu").addClass("mtd-context-menu dropdown-menu").append(ul).attr("style","opacity:0;animation:none;transition:none"); - console.log("x: "+x+" y: "+y+" ul.width(): "+ ul.width() +" ul.height(): "+ ul.height() +" $(document).width(): " + $(document).width() + " $(document).height(): " + $(document).height()) + if (items.length > 0) { + setTimeout(function(){ + console.log("x: "+x+" y: "+y+" menu.width(): "+ menu.width() +" menu.height(): "+ menu.height() +" $(document).width(): " + $(document).width() + " $(document).height(): " + $(document).height()) - setTimeout(function(){ - if (x+xOffset+ul.width() > $(document).width()){ - console.log("you're too wide!"); - x = $(document).width() - ul.width() - xOffset; - } + if (x+xOffset+menu.width() > $(document).width()){ + console.log("you're too wide!"); + x = $(document).width() - menu.width() - xOffset - xOffset; + } - if (y+yOffset+ul.height() > $(document).height()){ - console.log("you're too tall!"); - y = $(document).height() - ul.height() - yOffset; - } + if (y+yOffset+menu.height() > $(document).height()){ + console.log("you're too tall!"); + y = $(document).height() - menu.height(); + } - menu.attr("style","left:"+(x+xOffset)+"px!important;top:"+(y+yOffset)+"px!important") + menu.attr("style","left:"+(x+xOffset)+"px!important;top:"+(y+yOffset)+"px!important") - },0) + },20); + } else { + menu.addClass("hidden"); + } return menu; } -function CoreInit() { - if (typeof Raven === "undefined" || typeof mR === "undefined") { - setTimeout(CoreInit,10); - console.log("waiting on raven or moduleRaid..."); +function parseActions(a,opt) { + for (var key in a) { + console.log(key); + if (key === "enableStylesheet") { + enableStylesheetExtension(a[key]); + } else if (key === "disableStylesheet") { + disableStylesheetExtension(a[key]); + } else if (key === "htmlAddClass") { + if (!html.hasClass(a[key])) + html.addClass(a[key]); + } else if (key === "htmlRemoveClass") { + html.removeClass(a[key]); + } else if (key === "func" && typeof a[key] === "function") { + a[key](opt); + } + } +} + +function coreInit() { + if (useRaven && typeof Raven === "undefined") { + setTimeout(coreInit,10); + console.info("waiting on raven..."); return; } - if (typeof $ === "undefined") { - var jQuery = mR.findFunction('jQuery')[0]; + if (typeof mR === "undefined") { + setTimeout(coreInit,10); + console.info("waiting on moduleRaid..."); + return; + } - window.$ = jQuery; - window.jQuery = jQuery; + if (typeof $ === "undefined") { + try { + var jQuery = mR.findFunction('jQuery')[0]; + + window.$ = jQuery; + window.jQuery = jQuery; + } catch (e) { + console.error(e.message); + if (e.message === "No module constructors to search through!") { + forceAppUpdateOnlineStatus('offline'); + return; + } + } } head = $(document.head); body = $(document.body); html = $(document.querySelector("html")); // Only 1 result; faster to find - if (html.hasClass("mtd-app") && typeof require !== "undefined") { - mtdAppFunctions(); - } - - Raven.config('https://92f593b102fb4c1ca010480faed582ae@sentry.io/242524', { - release: SystemVersion - }).install(); - if (isApp) { + mtdAppFunctions(); window.addEventListener('mousedown', function(e) { clearContextMenu(); }, false); } - setTimeout(Raven.context(MTDInit),10); + if (useRaven) { + Raven.config('https://92f593b102fb4c1ca010480faed582ae@sentry.io/242524', { + release: SystemVersion + }).install(); + + setTimeout(Raven.context(MTDInit),10); + + Raven.context(function(){ + window.addEventListener("keyup",keyboardShortcutHandler,false); + html.addClass("mtd-js-loaded"); + mutationObserver(html[0],onElementAddedToDOM,{attributes:false,subtree:true,childList:true}) - Raven.context(function(){ - window.addEventListener("keyup",KeyboardShortcutHandler,false); - html.addClass("mtd-api-ver-6-2 mtd-js-loaded"); - mutationObserver(html[0],checkIfUserSelectedNewTheme,{attributes:true}); - mutationObserver(body[0],checkIfBTDIsInstalled,{attributes:true}); + checkIfSigninFormIsPresent(); + loginInterval = setInterval(checkIfSigninFormIsPresent,500); + console.info("MTDinject loaded"); + }); + } else { + + MTDInit(); + + window.addEventListener("keyup",keyboardShortcutHandler,false); + html.addClass("mtd-js-loaded"); mutationObserver(html[0],onElementAddedToDOM,{attributes:false,subtree:true,childList:true}) - checkIfUserSelectedNewTheme(); checkIfSigninFormIsPresent(); - checkIfBTDIsInstalled(); loginInterval = setInterval(checkIfSigninFormIsPresent,500); - console.log("MTDinject loaded"); - }); + console.info("MTDinject loaded"); + } + } -CoreInit(); \ No newline at end of file +coreInit(); diff --git a/ModernDeck/sources/cssextensions/altsensitive.css b/ModernDeck/sources/cssextensions/altsensitive.css index 968d1560..c9531514 100644 --- a/ModernDeck/sources/cssextensions/altsensitive.css +++ b/ModernDeck/sources/cssextensions/altsensitive.css @@ -98,3 +98,7 @@ visibility:hidden!important; display:none; } + +.js-media-sensitive-overlay { + background:var(--backdropColor); +} diff --git a/ModernDeck/sources/cssextensions/amoled.css b/ModernDeck/sources/cssextensions/amoled.css index 11cf3a61..f2313d28 100644 --- a/ModernDeck/sources/cssextensions/amoled.css +++ b/ModernDeck/sources/cssextensions/amoled.css @@ -1,153 +1,32 @@ -/* - amoled.css - - Copyright (c) 2014-2019 Dangered Wolf - Released under the MIT Licence -*/ - -.mdl-column, -.column-options .button-tray, -.column-options, -.facet-type, -.application, -.tooltip-inner, -.dropdown-menu, -.app-columns-container, -.column-message, -body[class=""], -html.js, -body, -.mdl-header, -.js-quote-tweet-holder .quoted-tweet, -.app-content, -.compose-media-bar-holder, -optgroup, -.edit-conversation-name, -.popover, -.drawer-header, -.compose-reply-tweet, -.compose-message-recipient-list, -.compose-message-recipient-input-container, -.compose-media-grid-holder, -.drawer .compose-text-container, -.status-message, -.tweet-detail-wrapper .media-sensitive, -.stream-item.is-actionable:not(.is-unread):hover, -.tweet-detail-wrapper, -.compose, -.app-content.is-open .compose, -.tweet-button.is-hidden, -div.drawer[data-drawer="compose"], -.dropdown-menu a[data-action]:active, -.column, -.column-scroller, -.column-detail-level-2, -.js-account-manager-container, -.contributor-manager, -.js-contributor-manager-container, -.contributor-adder-block, -.contributor-row, -.mdl-header.js-mdl-header, -.app-navigator .js-hide-drawer, -.column:not(.is-new) .column-message, -.column-header, -.column-header-temp, -.mtd-nav-drawer, -.mdl:not(.med-fullpanel), -.prf-meta, -.med-fullpanel, -.modal-content, -.med-tweet, -.mdl-column.l-column .search-input, -.is-selected-tweet, -.prf-follow-status, -.typeahead, -.media-sensitive -{ - background:#000!important -} - -option -{ - background:#000 -} - -.is-new .column-header, -.is-new .column-header-temp -{ - background:linear-gradient(#000,#0E4B50)!important -} - -.mtd-nd-header-image, -.prf-header -{ - background-color:#000!important -} - -.stream-item.is-actionable:hover, -.compose-text-container, -.compose-reply-tweet, -.med-tweet, -.status-message, -.column-message, -.column-options, -.quoted-tweet, -.tweet-detail-wrapper, -.dropdown-menu, -.mdl-column.l-column .search-input, -.is-selected-tweet, -.prf-follow-status, -.compose-media-bar-holder, -.compose-message-recipient-input-container, -.typeahead, -.lst .s-selected -{ - box-shadow:0 2px 8px #344248!important -} - -.column-content, -.mtd-nav-divider, -.tweet-detail .margin-tl.txt-small:before, -.cmp-replyto, -.column-background-fill -{ - border-right-color:transparent!important -} - -.mtd-nav-drawer-background, -.ovl, -.overlay, -.ModalOverlay -{ - background:rgba(0,0,0,.4)!important -} - -.mtd-nav-drawer-background-hidden, -.mdl-column.mdl-column-sml.l-column, -.mdl.med-fullpanel, -.mtd-nav-divider, -.tweet-detail .margin-tl.txt-small:before, -.cmp-replyto, -.column-background-fill -{ - background:transparent!important -} - -.compose .typeahead-item span.username { - color:#344248 -} - -.mdl:not(.med-fullpanel),.mtd-nav-drawer { - box-shadow:0 3px 16px #344248!important -} - -.mdl.s-profile, -.mtd-nav-drawer, -.lst-launcher, -.scroll-styled-v, -.scroll-v, -.scroll-styled-h, -#lists-modal .mdl-content, -.keyboard-shortcut-list-modal { - scrollbar-color:rgba(149,175,191,.5) #000!important; +:root{ + --primaryColor:#000 !important; + --typeaheadBackgroundColor:#000 !important; + --tweetDetailWrapperColor:#000 !important; + --contextMenuDividerColor:#1c2225 !important; + --backdropColor:#000 !important; + --modalWindowColor:#000 !important; + --overlayBackgroundColor:rgba(0, 0, 0, 0.65) !important; + --defaultShadowColor:#344248 !important; + --navDrawerBackground:rgba(0,0,0,.4) !important; + --contextMenuShadow:#344248 !important; + --thickerShadow:#344248 !important; + --composeShadow:#344248 !important; + --columnShadow:rgba(17,17,17,0) !important; + --avatarHoverShadow:#5e6e75 !important; + --avatarActiveShadow:#506269 !important; + --genericDropShadow:#47575f !important; + --modalDropShadow:#344248 !important; + --genericBlackShadow:rgba(52, 66, 72, 0.25) !important; + --genericBlack15Shadow:rgba(52, 66, 72,.15) !important; + --genericDarkBlackShadow:rgba(52, 66, 72,.5) !important; + --genericLightBlackShadow:rgba(52, 66, 72,.1) !important; +} + + +div.drawer[data-drawer="compose"],.hide-detail-view-inline .tweet-button:not(.js-hide-drawer) { + background:var(--primaryColor)!important +} + +.media-size-large-height::after,.media-item.media-size-large::after { + background-image:linear-gradient(var(--primaryColor),rgba(0,0,0,0)); } diff --git a/ModernDeck/sources/cssextensions/black.css b/ModernDeck/sources/cssextensions/black.css index f4b4681d..d942d223 100644 --- a/ModernDeck/sources/cssextensions/black.css +++ b/ModernDeck/sources/cssextensions/black.css @@ -5,14 +5,6 @@ Released under the MIT Licence */ -.mdl-header,.application,.mtd-back-black.mtd-light .app-navigator .js-hide-drawer,.app-navigator .js-hide-drawer,.edit-conversation-name,.drawer-header,.column:not(.is-new) .column-message,body,.column-header,.column-header-temp { - background:#000!important -} - -.is-new .column-header,.is-new .column-header-temp { - background:linear-gradient(#000,#0E4B50)!important -} - -.mtd-nd-header-image { - background-color:#000!important +.light:root { + --primaryColor:#263238 !important; } diff --git a/ModernDeck/sources/cssextensions/blue.css b/ModernDeck/sources/cssextensions/blue.css index 6780f3e5..3c43fc01 100644 --- a/ModernDeck/sources/cssextensions/blue.css +++ b/ModernDeck/sources/cssextensions/blue.css @@ -5,14 +5,14 @@ Released under the MIT Licence */ -.mdl-header,.application,.mtd-back-blue.mtd-light .app-navigator .js-hide-drawer,.app-navigator .js-hide-drawer,.edit-conversation-name,.drawer-header,.column:not(.is-new) .column-message,body,.column-header,.column-header-temp { - background:#2196F3!important +.light:root { + --primaryColor:#2196F3 !important; } -.is-new .column-header,.is-new .column-header-temp { - background:linear-gradient(#2196F3,#00BCD4)!important -} - -.mtd-nd-header-image { - background-color:#2196F3!important +.dark:root { + --secondaryColor:#2f86cc !important; + --secondaryColorBright:#2196F3 !important; + --secondaryColorAlt:#2f86cc; + --secondaryColorPress:#2196F3; + --secondaryColorDeep:#1e5b8c; } diff --git a/ModernDeck/sources/cssextensions/btdsupport.css b/ModernDeck/sources/cssextensions/btdsupport.css deleted file mode 100644 index c986ec63..00000000 --- a/ModernDeck/sources/cssextensions/btdsupport.css +++ /dev/null @@ -1,141 +0,0 @@ -/* - btdsupport.css - - Support Library for running Better TweetDeck alongside ModernDeck - - Copyright (c) 2014-2019 Dangered Wolf - Released under the MIT Licence -*/ - -.btd-ready .column-title>.attribution,.btd-ready .column-head-title { - width:inherit!important; - display:inline!important; - height:inherit!important; - line-height:inherit!important; - text-align:inherit!important -} - -.btd-ready .column-head-title { - padding-left:10px -} - -#emojiButton { - width:35px!important; - height:35px; - margin-top:-80px; - margin-left:10px; - margin-right:-3px; - background:transparent!important; - box-shadow:none!important; - font-size:0 -} - -#emojiButton .btd-icon-smile { - font-size:24px; - transition:.2s all -} - -#emojiButton:hover .btd-icon-smile { - transition:.2s all -} - -#emojiButton:active .btd-icon-smile { - transition:.2s all -} - -.emoji-composer-added .js-add-image-button,.emoji-composer-added .js-tweet-button,.emoji-composer-added .js-schedule-button { - margin-left:-5px -} - -.emoji-composer-added .js-dm-button { - margin-left:-5px -} - -.btd-settings { - padding-top:17px; - display:block; - position:absolute; - margin-left:57px!important -} - -.btd-minimal_mode .app-columns { - margin-top:-4px; - margin-left:-6px; - padding:0 0 0 6px!important -} - -.emoji-popover .emojis-compose-panel .emoji-container::before { - background-image:none!important -} - -.emoji-popover { - width:88%; - margin-top:-20px -} - -.emoji-popover .emojis-compose-panel .emoji-container { - width:100%!important -} - -.emoji-popover .emoji-container>{ - animation:menuUpRelative .25s 1 cubic-bezier(.19,1,.22,1)!important -} - -.btd-emoji.emoji-pop[data-cat="Emoji-HumanImage"] { - margin-left:35px -} - -.category-chooser .btd-emoji.emoji-pop:not(.active) { - -webkit-filter:grayscale(100%); - filter:grayscale(100%) -} - -.btd-settings { - top:-100px -} - -.btd-no_columns_icons header > h1.column-title { - padding-left:0!important -} - -.btd-dark-theme.btd-minimal_mode .compose { - background-color:inherit!important -} - -.btd-icon-smile:before { - content:"\e24e"; - font-family:"Material"!important -} - -.btd-blurred_modals.btd-open-modal-on .ovl, .btd-blurred_modals.btd-open-modal-on .overlay { - background-color:rgba(88,100,107,.4) -} - -.btd-dark-theme.btd-minimal_mode .attach-compose-buttons .tweet-button { - background-color:transparent!important -} - -.btd-actions_on_hover .js-stream-item .js-tweet-actions { - margin-top:-35px -} - -.btd-actions_on_hover .js-stream-item:hover .js-tweet-actions { - margin-top:0 -} - -html .btd-small_icons_compose .compose-content button { - width:35px!important -} - -.btd-small_icons_compose .js-add-emojis, .btd-small_icons_compose .js-tweet-type-button, .btd-small_icons_compose .js-scheduler, .btd-small_icons_compose .js-add-image-button { - float:none!important -} - -.btd-small_icons_compose .js-tweet-type-button, .btd-small_icons_compose .js-scheduler, .btd-small_icons_compose .js-add-image-button { - margin-right:0!important; - margin-left:0!important -} - -.btd-dark-theme.btd-minimal_mode .inline-reply { - background-color:transparent -} diff --git a/ModernDeck/sources/cssextensions/classic.css b/ModernDeck/sources/cssextensions/classic.css deleted file mode 100644 index 4ab64bb7..00000000 --- a/ModernDeck/sources/cssextensions/classic.css +++ /dev/null @@ -1,60 +0,0 @@ -/* - classic.css - - Copyright (c) 2014-2019 Dangered Wolf - Released under the MIT Licence -*/ - -* { - font-family:sans-serif!important -} - -.column-head-title { - font-size:18px!important -} - -.column-title .attribution { - font-size:13px!important -} - -.column-title { - margin-top:0!important -} - -.dropdown-menu { - position:absolute!important; - z-index:1!important; - padding:12px 0!important; - padding-top:5px!important; - border-radius:2px!important; - text-align:left!important; - font-weight:normal!important; - font-size:12px!important; - margin-bottom:0!important; - line-height:18px!important; - background:#fff!important -} - -.dropdown-menu li { - height:24px!important -} - -.drp-h-divider { - margin-bottom:0!important -} - -li.is-selectable a[data-action=mute]:before { - font-size:12px!important -} - -.mdl-header-title { - padding-left:18px!important; - font-weight:500!important; - font-size:16px!important; - text-align:left!important -} - -.mdl-header.js-mdl-header { - box-shadow:none!important; - background:transparent!important -} diff --git a/ModernDeck/sources/cssextensions/coredefinitions.css b/ModernDeck/sources/cssextensions/coredefinitions.css index 8eb51d2b..bd1c2431 100644 --- a/ModernDeck/sources/cssextensions/coredefinitions.css +++ b/ModernDeck/sources/cssextensions/coredefinitions.css @@ -5,11 +5,6 @@ Released under the MIT Licence */ -html -{ - font-family:Roboto,"Noto Sans Alphabet","Noto Sans","Noto Sans CJK","Noto Sans CJK JP","Noto Sans CJK KR","Noto Sans CJK SC","Noto Sans CJK TC","Noto Sans JP","Noto Sans KR","Noto Sans SC","Noto Sans TC" -} - body { margin:0 @@ -175,7 +170,7 @@ h2 h3 { - font-size:1.1429rem + font-size:18px } h4 @@ -194,13 +189,6 @@ iframe border:0 } -label -{ - display:block; - margin-bottom:12px; - line-height:inherit -} - fieldset { padding:0; @@ -233,5 +221,26 @@ input,select } p { - margin-top:0 -} \ No newline at end of file + margin-top:0; + margin-block-end:0; + margin-bottom:0 +} + +.mtd-patron-info { + position:absolute; + right:0; + top:0; + bottom: 71px; + float: right; +} + +.mtd-patron-list { + /* bottom:0; */ + /* position:absolute; */ + margin-top: 60px; + /* left:0; */ + right: 100px; + width: 240px; + float: right; + height: 80%; +} diff --git a/ModernDeck/sources/cssextensions/cyan.css b/ModernDeck/sources/cssextensions/cyan.css index efd90bff..21c356c4 100644 --- a/ModernDeck/sources/cssextensions/cyan.css +++ b/ModernDeck/sources/cssextensions/cyan.css @@ -5,14 +5,14 @@ Released under the MIT Licence */ -.mdl-header,.application,.mtd-back-cyan.mtd-light .app-navigator .js-hide-drawer,.app-navigator .js-hide-drawer,.edit-conversation-name,.drawer-header,.column:not(.is-new) .column-message,body,.column-header,.column-header-temp { - background:#00BCD4!important +.light:root { + --primaryColor:#00BCD4 !important; } -.is-new .column-header,.is-new .column-header-temp { - background:linear-gradient(#00BCD4,#eee)!important -} - -.mtd-nd-header-image { - background-color:#00BCD4!important +.dark:root { + --secondaryColor:#00BCD4 !important; + --secondaryColorBright:#00BCD4 !important; + --secondaryColorAlt:#00BCD4; + --secondaryColorPress:#00BCD4; + --secondaryColorDeep:#007786; } diff --git a/ModernDeck/sources/cssextensions/dark.css b/ModernDeck/sources/cssextensions/dark.css index 52a22d58..45f0d966 100644 --- a/ModernDeck/sources/cssextensions/dark.css +++ b/ModernDeck/sources/cssextensions/dark.css @@ -5,6 +5,40 @@ Released under the MIT Licence */ +:root{ + --primaryColor:#263238; + --secondaryColor:#009EAD; + --secondaryColorAlt:#00838F; + --secondaryColorPress:#00737E; + --secondaryColorDeep:#0E4B50; + --secondaryColorDeepTrans:rgba(25,112,120,.5); + --secondaryColorBright:#12c3d4; + --redDefault:#EA6B6B; + --redHover:#FF2727; + --redActive:#B30000; + --redDisabled:rgba(244,101,101,.45); + --txtMuteLink:#708795; + --disabledColor:#54707F; + --linkPressColor:rgba(0,0,0,.05); + --buttonPressColor:rgba(255,255,255,.1); + --scrollbarDefaultColor:rgba(149,175,191,.5); + --scrollbarHoverColor:#8498A5; + --bodyTextColor:#eee; + --bodyTextHoverColor:#eee; + --typeaheadColor:#DFDFDF; + --typeaheadBackgroundColor:#1E272C; + --primaryTextColor:#fff; + --placeholderTextColor:#667A86; + --selectionBackgroundColor:rgba(102,227,228,.57); + --selectionTextColor:#666; + --tweetDetailWrapperColor:#3A4B54; + --contextMenuDividerColor:#323E43; + --backdropColor:#344248; + --modalWindowColor:#2E3B41; + --overlayBackgroundColor:rgba(88,100,107,.4); + --defaultShadowColor:rgba(41,41,41,.35); +} + a, a:not([href="#"]):not(.column-header-link):not(.js-column-back):not(.js-tweet-social-proof-back):not(.account-selector-grid-mode):not(.account-link):hover, .calweek a:hover, @@ -18,16 +52,25 @@ button, input[type="radio"]:checked:before, .mtd-logo { - color:#009EAD; - transition:color .3s + color:var(--secondaryColor); + transition:color .3s; } + a:not(.list-account):not(.js-column-back):not(.compose-account):not(.js-toggle-item):not(.column-header-link):active, a:not(.list-account):not(.js-column-back):not(.compose-account):not(.js-toggle-item):not(.column-header-link):focus, .js-send-button:not([disabled]):active { - color:#00737E; - background-color:rgba(0,0,0,.05) + color:var(--secondaryColorPress); + background-color:var(--linkPressColor) +} + + +.mtd-settings-option-slider input[type="range"]::-webkit-slider-thumb { + background:var(--secondaryColor) +} +.mtd-settings-option-slider input[type="range"]::-moz-range-thumb { + background:var(--secondaryColor) } .account-link, @@ -41,7 +84,7 @@ input, .account-bio, .link-complex.block[rel="user"] { - color:#D3DBE1 + color: var(--bodyTextColor)!important; } .account-summary-text .fullname, @@ -69,27 +112,12 @@ html, .account-remove-check-message, .media-sensitive-title { - color:#eee -} - -.compose .typeahead-item span.username -{ - color:rgba(255,255,255,.3) + color:var(--bodyTextColor) } -.dropdown-menu a[data-action]:active, -.column, -.column-scroller, -.column-detail-level-2, -.js-account-manager-container, -.contributor-manager, -.js-contributor-manager-container, -.contributor-adder-block, -.contributor-row, -.Notification-inner, -.DateRange +.dropdown-menu a[data-action]:active, .column, .column-scroller, .column-detail-level-2, .js-account-manager-container, .contributor-manager, .js-contributor-manager-container, .column-panel, .contributor-adder-block, .contributor-row, .DateRange { - background:#344248 + background:var(--backdropColor) } .gap-chirp-text, @@ -106,14 +134,14 @@ html, .tweet-detail-actions .tweet-action.is-selected, .tweet-detail-actions .js-reply-action.is-selected { - color:#00838F + color:var(--secondaryColorAlt) } .media-sensitive, .stream-item.is-actionable:not(.is-unread):hover, .tweet-detail-wrapper { - background:#3A4B54 + background:var(--tweetDetailWrapperColor); } div.drawer[data-drawer="compose"], @@ -126,7 +154,6 @@ div.drawer[data-drawer="compose"], .column-options, .facet-type, .is-options-open .column-settings-link, -.is-favorite.is-retweet .tweet-dogear, .is-unread, .js-add-column, .mdl .js-add-column, @@ -138,32 +165,23 @@ div.drawer[data-drawer="compose"], .DatePicker-calendarDay.is-withinRange, button.try-query { - background:#00838F + background:var(--secondaryColorAlt) } .prf-actions .js-follow-button { - background:#00838F!important + background:var(--secondaryColorAlt)!important +} + +li:not(.selected) .list-twitter-list .txt-ellipsis, .list-twitter-list .subtitle, .mtd-back-default .js-setting-list>li:not(.selected)>.list-link strong, .txt-mute, .txt-r-dark-gray, .typeahead .username, .l-column.mdl-column.mdl-column-sml .list-link, html .btd-grayscale_notification_icons i.icon.activity-indicator, .other-replies, .tweet-stats>li, .txt-r-deep-gray, .color-twitter-dark-gray, .lst-launcher :not(.is-disabled) .color-twitter-darker-gray, .js-send-button[disabled], button[disabled] +{ + color:var(--placeholderTextColor) } -li:not(.selected) .list-twitter-list .txt-ellipsis, -.list-twitter-list .subtitle, -.mtd-back-default .js-setting-list>li:not(.selected)>.list-link strong, - .txt-mute, - .txt-r-dark-gray, - .typeahead .username, - .l-column.mdl-column.mdl-column-sml .list-link, - .lst-group .list-account .username, - html .btd-grayscale_notification_icons i.icon.activity-indicator, - .other-replies, - .tweet-stats>li, - .txt-r-deep-gray, - .color-twitter-dark-gray, - .lst-launcher :not(.is-disabled) .color-twitter-darker-gray, - .js-send-button[disabled], - button[disabled] + .mtd-settings-tab:not(.mtd-settings-tab-selected), +input[type="checkbox"][disabled]:before { - color:#6D808B + color:var(--placeholderTextColor) !important } .txt-r-deep-gray { @@ -171,15 +189,15 @@ li:not(.selected) .list-twitter-list .txt-ellipsis, } input::-webkit-input-placeholder,textarea::-webkit-input-placeholder { - color:#6D808B + color:var(--placeholderTextColor) } input::-moz-placeholder,textarea::-moz-placeholder { - color:#6D808B + color:var(--placeholderTextColor) } input::placeholder,textarea::placeholder,textarea::placeholder { - color:#6D808B + color:var(--placeholderTextColor) } .search-input, @@ -192,15 +210,16 @@ textarea:not(.compose-text):not(.js-compose-text), .btn-options-tray:not([disabled]):not(.is-disabled), .toggle-item-text, .accordion-panel .txt-bold, -.Notification-icon +.Notification-icon, +.mtd-settings-tab { - color:#fff + color: var(--primaryTextColor)!important; } .is-new .column-message, .is-unread:active { - background:#0E4B50 + background:var(--secondaryColorDeep) } .application, @@ -229,44 +248,46 @@ optgroup, .compose-message-recipient-input-container, .compose-media-grid-holder, .compose-text-container, -.status-message +.status-message, +.mtd-settings-tab-container { - background:#263238 + background:var(--primaryColor) } .btd-dark-theme.btd-minimal_mode .compose-reply-tweet { - background:#263238!important + background:var(--primaryColor)!important } .column-header, .column-header-temp { - background:linear-gradient(#263238,#263238) + background:linear-gradient(var(--primaryColor),var(--primaryColor)) } .is-new .column-header, .is-new .column-header-temp { - background:linear-gradient(#263238,#0E4B50) + background:linear-gradient(var(--primaryColor),var(--secondaryColorDeep)) } .txt-mute a:not(:focus):not(.tweet-action):not([data-action]), -.lst-group h3 +.lst-group h3, +.lst-group .username { - color:#708795 + color:var(--txtMuteLink) } .column-content { - border-right:3px solid #263238 + border-right:3px solid var(--primaryColor) } .tweet-action, .tweet-detail-action, .tweet-stats>li>a { - color:rgba(149,175,191,.52) + color: var(--scrollbarDefaultColor)!important; } .tweet-action:active, @@ -283,13 +304,13 @@ optgroup, .stream-item.is-actionable a.is-selected.tweet-detail-action, .tweet-stats>li>a:hover { - color:#8498A5 + color: var(--scrollbarHoverColor)!important; } .btn:active, .btn.is-selected { - background-color:rgba(255,255,255,.1) + background-color:var(--buttonPressColor) } .app-nav-link.is-selected, @@ -308,7 +329,7 @@ option, .mdl-column, .med-fullpanel { - background:#2E3B41 + background:var(--modalWindowColor) } .mtd-nav-divider, @@ -316,7 +337,7 @@ option, .cmp-replyto, .column-background-fill { - background:#38454B + background:var(--backdropColor) } .social-proof-for-tweet-title, @@ -345,57 +366,61 @@ button.is-disabled:active, .Button-primary.is-disabled, .Button-primary.is-disabled:hover, .Button-primary.is-disabled:focus, -.Button-primary.is-disabled:active +.Button-primary.is-disabled:active, +.stroke-twitter-light-gray { - color:#54707F; - transition:.2s all + color: var(--disabledColor)!important; + transition:.2s all; } ::-moz-selection { - background:#00838F; - color:#eee + background:var(--secondaryColorAlt); + color:var(--bodyTextColor) } ::selection { - background:#00838F; - color:#eee + background:var(--secondaryColorAlt); + color:var(--bodyTextColor) } .js-add-column:active, .lst-group .selected:active { - background:#429BA6 + background:var(--secondaryColorPress) } .tooltip-inner, .Tooltip-inner { - box-shadow:0 3px 10px rgba(41,41,41,.35) + box-shadow:0 3px 10px var(--defaultShadowColor) } .invalid-char-count, .unfollow-text, +.cancel-req-text, #add-filter:not([disabled]), .btn-negative:not([disabled]):not(.is-disabled), .Button--danger:not([disabled]):not(.is-disabled), -.txt-twitter-red +.txt-twitter-red, +.color-twitter-red, +.bg-color-twitter-red { - color:#EA6B6B!important + color:var(--redDefault)!important } .btn-negative:not([disabled]):not(.is-disabled):hover .Button--danger:not([disabled]):not(.is-disabled):hover { - color:#FF2727!important + color:var(--redHover)!important } .btn-negative:active, .btn-negative.is-selected, .Button--danger:not([disabled]):not(.is-disabled):active { - color:#B30000!important + color:var(--redActive)!important } .btn-negative[disabled], @@ -406,33 +431,28 @@ button.is-disabled:active, .btn-negative.is-disabled:focus, .btn-negative.is-disabled:active { - color:rgba(244,101,101,.45)!important + color:var(--redDisabled)!important } .contributor-adder input.js-username-input.js-submittable-input { - border-bottom:3px solid #00838F + border-bottom:3px solid var(--secondaryColorAlt) } .compose-text { - color:#eee; + color:var(--bodyTextColor); border-bottom:none } textarea { - border-color:#667A86 -} - -.social-proof-container -{ - border-color:rgba(0,0,0,.1) + border-color:var(--placeholderTextColor) } .drp-h-divider { - border-color:#323E43 + border-color:var(--contextMenuDividerColor) } .is-unread .txt-mute, @@ -443,9 +463,10 @@ textarea .lst-group .list-link:active { - background:rgba(25,112,120,.5) + background:var(--secondaryColorDeepTrans) } +.mdl::-webkit-scrollbar-thumb, .mdl.s-profile::-webkit-scrollbar-thumb, .mtd-nav-drawer::-webkit-scrollbar-thumb, .lst-launcher::-webkit-scrollbar-thumb, @@ -457,9 +478,10 @@ textarea .keyboard-shortcut-list-modal::-webkit-scrollbar-thumb { border-radius:5px; - background:rgba(149,175,191,.5) + background:var(--scrollbarDefaultColor) } +.mdl::-webkit-scrollbar-thumb:hover, .mdl.s-profile::-webkit-scrollbar-thumb:hover, .mtd-nav-drawer::-webkit-scrollbar-thumb:hover, .lst-launcher::-webkit-scrollbar-thumb:hover, @@ -469,9 +491,10 @@ textarea #lists-modal .mdl-content::-webkit-scrollbar-thumb:hover, .keyboard-shortcut-list-modal::-webkit-scrollbar-thumb:hover { - background:#8498A5 + background:var(--scrollbarHoverColor) } +.mdl, .mdl.s-profile, .mtd-nav-drawer, .lst-launcher, @@ -480,286 +503,239 @@ textarea .scroll-styled-h, #lists-modal .mdl-content, .keyboard-shortcut-list-modal { - scrollbar-color:rgba(149,175,191,.5) #344248; + scrollbar-color:var(--scrollbarDefaultColor) var(--backdropColor); } .s-following .follow-btn:hover { - color:#E15F5F + color:var(--redHover) } -.modal-content +.modal-content,.med-tweet { - background:rgb(37,50,56) + background:var(--modalWindowColor) } .list-item.is-actionable.item-box.is-selected, .js-typeahead-recent-search-clear.js-typeahead-item.is-selected { - background:#384850 + background:var(--backdropColor) } .js-typeahead-item.is-actionable:active { - background:#3C4D56; - color:#D7D7D7 + background:var(--backdropColor); + color:var(--typeaheadColor) } .js-typeahead-recent-search-clear.js-typeahead-item.recent-search-clear:active { - background:#36474F; - color:#DFDFDF + background:var(--backdropColor); + color:var(--typeaheadColor) } .list-placeholder, .mdl-placeholder { - color:#6D7B83 + color:var(--placeholderTextColor) } .is-selected-tweet { - background:#3A4F56 + background:var(--backdropColor) } .typeahead .fullname { - color:#ccc + color:var(--typeaheadColor) } .ovl, .overlay, .ModalOverlay { - background:rgba(88,100,107,.4) + background:var(--overlayBackgroundColor) } .lst-modal, .typeahead { - background:#1E272C + background:var(--typeaheadBackgroundColor) } .more-tweets-btn:active, .more-tweets-btn:focus { - background:#2F9099!important + background:var(--secondaryColorPress)!important } .add-participant .js-username-input.js-submittable-input { - border-bottom:2px solid #667A86 + border-bottom:2px solid var(--placeholderTextColor) } .add-participant input::-moz-placeholder { - color:#667A86; + color:var(--placeholderTextColor); opacity:1 } .app-navigator .js-hide-drawer { - box-shadow:0 -5px 10px rgba(17, 17, 17, .35) -} - -.toggle-switch-label:before -{ - background-color:#56717D -} - -.toggle-switch-label:after -{ - background-color:#ccc -} - -.toggle-switch-input:checked+.toggle-switch-label:before -{ - background-color:#6CCACB -} - -.toggle-switch-input:checked+.toggle-switch-label:after -{ - background-color:#1A7780 -} - -.emoji-popover .category-chooser -{ - background:#263238!important + box-shadow:0 -5px 10px var(--defaultShadowColor) } html.mtd-acc-focus-ring a:focus, html.mtd-acc-focus-ring button:focus { - outline:rgb(16,148,160) solid 3px -} - -option -{ - color:#eee -} - -.med-tweet -{ - background:rgb(37,50,56); + outline:var(--secondaryColor) solid 3px } +option, .list-twitter-list .inner strong { - color:#eaeaea + color:var(--bodyTextColor) } .list-listmember .bio, .list-listmember .username { - color:#637983 + color:var(--txtMuteLink) } input, -textarea, select, .uneditable-input { - border-bottom:2px solid #54707F + border-bottom:2px solid var(--disabledColor) +} + + +textarea { + border:2px solid var(--disabledColor) } .search-input { - border-bottom:2px solid rgba(255,255,255,.7) + border-bottom: 2px solid var(--disabledColor); } .mdl-column.l-column .search-input { - background:#43525A; - color:#fff; + background:var(--tweetDetailWrapperColor); + color:var(--primaryTextColor); } .recent-search-clear.is-actionable.list-item-last { - background-color:#263238; - color:#DBDBDB + background-color:var(--primaryColor); + color:var(--typeaheadColor) } #caldays span, .caloff { - color:#677B86 + color:var(--disabledColor) } .caldisabled, .caldisabled:hover, .caldisabled:active { - color:#667A86!important + color:var(--placeholderTextColor)!important } .prf-header { - background-color:#263238 /* IMPORTANT: This needs to be background colour because background image is SOMETIMES laid over it */ + background-color:var(--primaryColor) /* IMPORTANT: This needs to be background colour because background image is SOMETIMES laid over it */ } .prf-follow-status { - background:#2E3B41; - color:#eee -} - -.mdl-links span -{ - color:#50717F + background:var(--modalWindowColor); + color:var(--bodyTextColor) } .js-translate-call-to-action, -.tweet-translation-original-text +.tweet-translation-original-text, +.mdl-links span { - color:#697F8C + color:var(--placeholderTextColor) } .btn-login[type="submit"], -.login-container .btn-positive +.login-container .btn-positive, +.PollXChoice-vote--button { - background:#00BCD4 + background: var(--secondaryColor)!important; } .btn-login[type="submit"]:active, -.login-container .btn-positive:active +.login-container .btn-positive:active, +.PollXChoice-vote--button:active { - background:#00CDE8 + background:var(--secondaryColorPress)!important } .js-toggle.padding-al button>span { - color:#647883 -} - -.js-column-social-proof .username -{ - color:#d3dbe1 + color:var(--placeholderTextColor) } .spinner-layer { - border-color:#26a69a + border-color:var(--secondaryColor) } .startflow ::selection { - background:rgba(102,227,228,.57); - color:#666 + background:var(--selectionBackgroundColor); + color:var(--selectionTextColor) } .startflow ::-moz-selection { - background:rgba(102,227,228,.57); - color:#666 + background:var(--selectionBackgroundColor); + color:var(--selectionTextColor) } .mdl-column.l-column .search-input::-webkit-input-placeholder { - color:#fff + color:var(--primaryTextColor) } .mdl-column.l-column .search-input::-moz-placeholder { - color:#fff + color:var(--primaryTextColor) } .mdl-column.l-column .search-input:input-placeholder { - color:#fff + color:var(--primaryTextColor) } -button[type="submit"] { - background:#009EAD +button[type="submit"],.mtd-settings-button { + background:var(--secondaryColor) } -button[type="submit"]:hover { - background:#12c3d4 +button[type="submit"]:hover,.mtd-settings-button:hover { + background:var(--secondaryColorBright) } -button[type="submit"]:active,button[type="submit"]:focus { - background:#12c3d4 +button[type="submit"]:active,button[type="submit"]:focus,.mtd-settings-button:focus { + background:var(--secondaryColorBright) } -.js-character-count, -.lst-group .selected, -.lst-launcher a:not(.is-disabled), -.lst-launcher a:not(.is-disabled):hover, -.character-count, -.character-count-compose, -.lst-launcher a:not(.is-disabled):focus, -.lst-launcher a:not(.is-disabled):active, -.lst-launcher li:not(.is-disabled) span, -.calweek a:not(.caloff) +.mtd-settings-button,.js-character-count:not(.color-twitter-red), .lst-group .selected, .lst-launcher a:not(.is-disabled), .lst-launcher a:not(.is-disabled):hover, .character-count, .character-count-compose, .lst-launcher a:not(.is-disabled):focus, .lst-launcher a:not(.is-disabled):active, .lst-launcher li:not(.is-disabled) span, .calweek a:not(.caloff), .mtd-settings-tab { - color:#fff!important + color:var(--primaryTextColor)!important } #id_comments { - border:2px solid #54707F + border:2px solid var(--disabledColor) } .sentry-error-embed .form-submit .powered-by a { - -webkit-filter:brightness(1000%); filter:brightness(1000%) } @@ -768,10 +744,26 @@ button[type="submit"]:active,button[type="submit"]:focus { } .Notification-inner { - background:#222d32; + background:var(--secondaryColor); } - .account-settings-bb a[rel="user"] { - color:#fff; -} \ No newline at end of file + color:var(--primaryTextColor); +} + + +.stroke-twitter-light-gray { + stroke:var(--placeholderTextColor) +} + +.stroke-twitter-blue { + stroke:var(--secondaryColor) +} +.stroke-twitter-red { + stroke:var(--redDefault) +} + +.detail-view-inline-text { + color:var(--txtMuteLink); + border-bottom:3px solid var(--secondaryColorAlt) +} diff --git a/ModernDeck/sources/cssextensions/green.css b/ModernDeck/sources/cssextensions/green.css index 7e516207..108fbecf 100644 --- a/ModernDeck/sources/cssextensions/green.css +++ b/ModernDeck/sources/cssextensions/green.css @@ -5,14 +5,14 @@ Released under the MIT Licence */ -.mdl-header,.application,.mtd-back-green.mtd-light .app-navigator .js-hide-drawer,.app-navigator .js-hide-drawer,.edit-conversation-name,.drawer-header,.column:not(.is-new) .column-message,body,.column-header,.column-header-temp { - background:#4CAF50!important +.light:root { + --primaryColor:#4CAF50 !important; } -.is-new .column-header,.is-new .column-header-temp { - background:linear-gradient(#4CAF50,#00BCD4)!important -} - -.mtd-nd-header-image { - background-color:#4CAF50!important +.dark:root { + --secondaryColor:#338036 !important; + --secondaryColorBright:#338036 !important; + --secondaryColorAlt:#338036; + --secondaryColorPress:#4CAF50; + --secondaryColorDeep:#338036; } diff --git a/ModernDeck/sources/cssextensions/grey.css b/ModernDeck/sources/cssextensions/grey.css index 63ec3b2b..ad4176ad 100644 --- a/ModernDeck/sources/cssextensions/grey.css +++ b/ModernDeck/sources/cssextensions/grey.css @@ -5,14 +5,14 @@ Released under the MIT Licence */ -.mdl-header,.application,.mtd-back-grey.mtd-light .app-navigator .js-hide-drawer,.app-navigator .js-hide-drawer,.edit-conversation-name,.drawer-header,.column:not(.is-new) .column-message,body,.column-header,.column-header-temp { - background:#555!important +.light:root { + --primaryColor:#555 !important; } -.is-new .column-header,.is-new .column-header-temp { - background:linear-gradient(#555,#00BCD4)!important -} - -.mtd-nd-header-image { - background-color:#555!important +.dark:root { + --secondaryColor:#77919e !important; + --secondaryColorBright:#3A4B54 !important; + --secondaryColorAlt:#6c808a; + --secondaryColorPress:#7a8e98; + --secondaryColorDeep:#283135; } diff --git a/ModernDeck/sources/cssextensions/hearticon.css b/ModernDeck/sources/cssextensions/hearticon.css deleted file mode 100644 index 998d06d9..00000000 --- a/ModernDeck/sources/cssextensions/hearticon.css +++ /dev/null @@ -1,23 +0,0 @@ -/* - hearticon.css - - Copyright (c) 2014-2019 Dangered Wolf - Released under the MIT Licence -*/ - -.icon-favorite:before,.icon-heart-filled:before,.icon-heart:before -{ - content:"\e87d" -} - -.txt-r-deep-yellow, -.is-favorite .icon-favorite-toggle, -.icon-heart-filled, -.btn:not(.btn-fav-fav-text)>.icon-favorite-color, -.activity-header .icon-favorite-color, -.obj-left>.icon-favorite-color, -.pull-right.icon-favorite-color, -.tweet-action-item .tweet-action[rel="favorite"]:hover -{ - color:#e91e63!important -} \ No newline at end of file diff --git a/ModernDeck/sources/cssextensions/highcontrast.css b/ModernDeck/sources/cssextensions/highcontrast.css index 1b934349..6828e4b0 100644 --- a/ModernDeck/sources/cssextensions/highcontrast.css +++ b/ModernDeck/sources/cssextensions/highcontrast.css @@ -1,12 +1,23 @@ +/* + highcontrast.css + + Copyright (c) 2014-2019 Dangered Wolf + Released under the MIT Licence +*/ + html { color:#fff; } -.more-tweets-btn,.tooltip,.Tooltip,.dropdown-menu,.mdl:not(.med-fullpanel),.mtd-nav-drawer,.popover { +.is-options-open .column-settings-link,.column-message,.column-options,.more-tweets-btn,.tooltip,.Tooltip,.dropdown-menu,.mdl:not(.med-fullpanel),.mtd-nav-drawer,.popover { background:#000; border:#54707f 2px solid } +.is-options-open .column-settings-link { + border-bottom:0 +} + html .mtd-nav-divider { background:#54707f!important; } @@ -37,7 +48,7 @@ html .mdl:not(.med-fullpanel), html .mtd-nav-drawer { } input, textarea, select, .uneditable-input { - border-bottom-color:#fff + border-color: #fff; } @@ -123,7 +134,8 @@ html .is-new .column-header, html .is-new .column-header-temp background:#000!important; color:#fff; box-shadow:none!important; - border-bottom:3px #54707f solid!important + border-bottom:3px #54707f solid!important; + border-radius: 0; } @@ -160,14 +172,14 @@ html .ovl, html .overlay, html .ModalOverlay { - background:rgba(255,255,255,.2)!important + background:rgba(255,255,255,.5)!important } html .js-modal[style="display: none;"],html .mtd-nav-drawer-background.mtd-nav-drawer-background-hidden { background:rgba(255,255,255,0)!important } -.tweet-text a { +.column-content .accordion-panel a[rel="url noopener noreferrer"],.tweet-text a { color:#fff!important; text-decoration:underline!important; opacity:0.7!important @@ -197,5 +209,19 @@ html .js-modal[style="display: none;"],html .mtd-nav-drawer-background.mtd-nav-d } .compose .spinner-button-container .Button--primary:not(.is-disabled) { - color:#fff!important -} \ No newline at end of file + color:#fff!important +} + +.js-add-column:before { + font-weight:500; + font-size:32px; + margin-top:-8px +} + +.mtd-context-menu a[disabled] { + opacity:0.5 +} + +.account-link, .account-link:hover, .account-link:focus, .mtd-about-title.list-placeholder, .cal, select, input, .txt-normal, .account-bio, .link-complex.block[rel="user"] { + color:#fff!important +} diff --git a/ModernDeck/sources/cssextensions/ios.css b/ModernDeck/sources/cssextensions/ios.css deleted file mode 100644 index cc6b3067..00000000 --- a/ModernDeck/sources/cssextensions/ios.css +++ /dev/null @@ -1,112 +0,0 @@ -/* - ios.css - - Copyright (c) 2014-2019 Dangered Wolf - Released under the MIT Licence -*/ - - -html { - font-family:"San Francisco",Roboto!important -} - -.mdl-column .pin-top .search-input-list,.mdl-header.js-mdl-header,.mtd-theme-ios.mtd-back-paper .is-new .column-header,.mtd-back-paper.is-new .column-header-temp,.app-header,.column-header,.column-header-temp { - background:#fff!important -} - -.app-header { - border-bottom:2px solid #eee -} - -.column-header,.column-header-temp { - border-right:3px solid #eee -} - -.mtd-theme-ios.mtd-back-paper .app-search .app-search-fake { - color:#00BCD4!important -} - -.column-holder .column-panel { - top:0!important; - left:0 -} - -.column-holder .column-panel:nth-child(2) { - opacity:1 -} - -.is-shifted-1 .column-panel:not(.column-detail):not(.column-detail-level-2),.is-shifted-2 .column-panel:not(.column-detail-level-2):not(.column-detail) { - left:-30% -} - -.column-panel { - transition:.4s left cubic-bezier(.19,1,.22,1) -} - -.column-panel:nth-child(n+2),.column-panel:nth-child(n+2) { - left:100%; - box-shadow:none -} - -.is-shifted-1 .column-panel:nth-child(n+2),.is-shifted-2 .column-panel:nth-child(n+2) { - left:0; - box-shadow:0 4px 10px rgba(0,0,0,.4); - transition:.4s left cubic-bezier(.19,1,.22,1) -} - -.column-holder { - overflow:hidden -} - -.column-title-back .column-head-title { - font-size:17px; - padding-top:2px; - margin-left:-32px; - color:#00c3dc -} - -.column-title-back .icon { - color:#00c3dc!important -} - -.icon-arrow-l { - margin-top:2px -} - -.icon-arrow-l:before { - content:"\e314"; - margin-left:-5px; - padding-top:5px; - font-size:36px -} - -.tweet-detail-wrapper { - animation:none -} - -.is-shifted-1 .column-panel:not(.column-detail):not(.column-detail-level-2) .column-header,.column-header,.column-header-temp { - box-shadow:none; - border-bottom:2px solid #eee -} - -.column-title-back { - width:100% -} - -.js-column-detail .column-title-back:before { - color:#000; - font-weight:500; - text-align:center; - position:relative; - margin-left:-70px; - top:3px; - width:100% -} - -.mdl { - border-radius:8px -} - -.mtd-theme-ios.mtd-light .stream-item.is-actionable:hover { - background:#eee!important -} diff --git a/ModernDeck/sources/cssextensions/light.css b/ModernDeck/sources/cssextensions/light.css index c1e44425..216b2a35 100644 --- a/ModernDeck/sources/cssextensions/light.css +++ b/ModernDeck/sources/cssextensions/light.css @@ -5,6 +5,47 @@ Released under the MIT Licence */ + +:root{ + --primaryColor:#03A9F4; + --secondaryColor:#00BCD4; + --secondaryColorPress:#58CDDB; + --secondaryColorDeep:#0E4B50; + --secondaryColorDeepTrans:rgba(25,112,120,.5); + --secondaryColorBright:#00CBE5; + --redDefault:#D80000; + --redHover:#FF2727; + --redActive:#B30000; + --redDisabled:rgba(244,101,101,.45); + --txtMuteLink:#bbb; + --disabledColor:#CACACA; + --linkPressColor:rgba(0,0,0,.05); + --buttonPressColor:rgba(255,255,255,.1); + --scrollbarDefaultColor:#D9D9D9; + --scrollbarHoverColor:#c9c9c9; + --bodyTextColor:#333; + --typeaheadColor:#000; + --typeaheadBackgroundColor:#fff; + --primaryTextColor:#333; + --placeholderTextColor:#aaa; + --selectionBackgroundColor:rgba(0,188,212,.26); + --selectionTextColor:#444; + --tweetDetailWrapperColor:#fff; + --contextMenuDividerColor:#e5e5e5; + --columnBorderColor:#e9e9e9; + --backdropColor:#F9F9F9; + --modalWindowColor:#fff; + --overlayBackgroundColor:rgba(100,100,100,.4); + --defaultShadowColor:rgba(17, 17, 17, .15); + --tweetActionColor:#787878; + --tweetActionHoverColor:#999; + --altTweetActionColor:rgba(149,175,191,.52); + --deepShadowColor:rgba(0,0,0,.25); + --materialSplashColor:rgba(0,0,0,.1); + --mdlPrimaryColor:#29B6F6; + --columnAlt:rgba(255,255,255,.7) +} + a, a:not(.column-header-link):not(.js-column-back):not(.list-account):not(.account-selector-grid-mode):not(.account-link):hover, .calweek a:hover, @@ -22,17 +63,24 @@ input[type="radio"]:checked:before, .icon-toggle-on, .mtd-logo { - color:#00BCD4 + color:var(--secondaryColor) } a:not(.list-account):not(.js-column-back):not(.compose-account):not(.js-toggle-item):not(.column-header-link):not(.js-account-action):not(.js-tweet-social-proof-back):active, a:not(.list-account):not(.js-column-back):not(.compose-account):not(.js-toggle-item):not(.column-header-link):not(.js-account-action):not(.js-tweet-social-proof-back):focus { - color:#0DA8BC; + color:var(--secondaryColor); +} + +.mtd-settings-option-slider input[type="range"]::-webkit-slider-thumb { + background:var(--secondaryColor) +} +.mtd-settings-option-slider input[type="range"]::-moz-range-thumb { + background:var(--secondaryColor) } a:not(.compose-account):not(.js-toggle-item):not(.column-header-link):active, a:not(.compose-account):not(.js-toggle-item):not(.column-header-link):focus { - background-color:rgba(0,0,0,.05) + background-color:var(--linkPressColor) } .form-legend, @@ -48,7 +96,7 @@ option, .inline-account-safeguard-checkbox, .link-complex.block[rel="user"] { - color:#333 + color:var(--primaryTextColor) } .lst-group .selected a, @@ -72,28 +120,28 @@ option, .toggle-item-text, .accordion-panel .txt-bold { - color:#000 + color:var(--typeaheadColor) } .mtd-nav-button { - color:#4c4c4c + color:var(--selectionTextColor)!important } .btn:focus,.Button:focus { - color:#26C6DA + color:var(--secondaryColorBright) } -.btn:active,.Button:active +button:active { - color:#aaa; - background:rgba(0,0,0,.04) + color:var(--placeholderTextColor); + background:var(--buttonPressColor) } -.js-account-action,.accordion:not(.js-account-settings-detail) .is-active,.txt-mute, li:not(.selected) .list-twitter-list .txt-ellipsis, .list-twitter-list .subtitle, .txt-r-dark-gray, .txt-mute a:not(:hover):not(:focus):not(.tweet-action), .txt-normal, .caloff, .l-column.mdl-column.mdl-column-sml .list-link, .typeahead .username, .lst-group .list-account .username, html .btd-grayscale_notification_icons i.icon.activity-indicator, .txt-r-deep-gray, .color-twitter-dark-gray, .color-twitter-darker-gray, .js-send-button.is-disabled +.js-account-action, .accordion:not(.js-account-settings-detail) .is-active, .txt-mute, li:not(.selected) .list-twitter-list .txt-ellipsis, .list-twitter-list .subtitle, .txt-r-dark-gray, .txt-mute a:not(:hover):not(:focus):not(.tweet-action), .txt-normal, .caloff, .l-column.mdl-column.mdl-column-sml .list-link, .typeahead .username, .lst-group li:not(.selected) .list-account .username, html .btd-grayscale_notification_icons i.icon.activity-indicator, .txt-r-deep-gray, .color-twitter-dark-gray, .color-twitter-darker-gray, .js-send-button.is-disabled { - color:#979797; + color:var(--tweetActionColor); } .scroll-styled-v, @@ -103,13 +151,14 @@ option, .lst-launcher, .mtd-nav-drawer, .mdl.s-profile, -#lists-modal .mdl-content +#lists-modal .mdl-content, +.mdl { - scrollbar-face-color:#505254; - scrollbar-highlight-color:#505254; - scrollbar-shadow-color:#505254; - scrollbar-darkshadow-color:#505254; - scrollbar-track-color:#3c3c3c + scrollbar-face-color:var(--scrollbarDefaultColor); + scrollbar-highlight-color:var(--scrollbarDefaultColor); + scrollbar-shadow-color:var(--scrollbarDefaultColor); + scrollbar-darkshadow-color:var(--scrollbarDefaultColor); + scrollbar-track-color:var(--backdropColor) } .btn[disabled], @@ -132,7 +181,12 @@ button.is-disabled:active, .Button.is-disabled:active, button[disabled] { - color:#CACACA + color:var(--disabledColor) +} + + +input[type="checkbox"][disabled]:before { + color:var(--disabledColor)!important; } .btn-positive, @@ -140,7 +194,7 @@ button[disabled] .btn-fav.s-favorited, .s-following .follow-btn { - color:#00CBE5 + color:var(--secondaryColorBright) } .btn-positive[disabled], @@ -172,7 +226,7 @@ button[disabled] .is-disabled.btn-fav.s-favorited:active, .s-following .is-disabled.follow-btn:active { - color:#dedede + color:var(--disabledColor) } .btn-positive-alt:active, @@ -183,35 +237,33 @@ button[disabled] .s-following .is-selected.follow-btn, .s-following .follow-btn:hover { - color:#C22727!important + color:var(--redDefault)!important } .btn-compose, .btn.js-edit span.label.margin-ln, .js-edit.btn-neutral-positive { - color:#fff!important + color:var(--modalWindowColor)!important } -.emoji-popover .category-chooser, -.btd-dark-theme.btd-minimal_mode .compose-reply-tweet -{ - background:#fff!important -} .invalid-char-count, .unfollow-text, +.cancel-req-text, #add-filter:not([disabled]), .btn-negative:not([disabled]):not(.is-disabled), .Button--danger:not([disabled]):not(.is-disabled), -.txt-twitter-red +.txt-twitter-red, +.color-twitter-red, +.bg-color-twitter-red { - color:#D80000!important + color:var(--redDefault)!important } .btn-negative:not([disabled]):not(.is-disabled):hover { - color:#FF2727!important + color:var(--redHover)!important } .btn-negative:not([disabled]):not(.is-disabled):focus, @@ -221,7 +273,7 @@ button[disabled] .Button--danger:not([disabled]):not(.is-disabled):active, .Button--danger:not([disabled]):not(.is-disabled).is-selected { - color:#B30000!important + color:var(--redActive)!important } .btn-negative[disabled], @@ -232,23 +284,18 @@ button[disabled] .btn-negative.is-disabled:focus, .btn-negative.is-disabled:active { - color:rgba(178,0,0,.3)!important + color:var(--redDisabled)!important } .tweet-action[data-actions-menu-position]:focus { - color:#26C6DA -} - -.compose .typeahead-item span.username -{ - color:#808080 + color:var(--secondaryColorBright) } .tweet-actions .tweet-action.is-selected, .tweet-detail-actions .tweet-action.is-selected, .tweet-detail-actions .js-reply-action.is-selected{ - color:#26C6DA!important + color:var(--secondaryColorBright)!important } .js-account-manager-container, @@ -256,19 +303,21 @@ button[disabled] .tooltip-inner, .Tooltip-inner { - background:#f8f8f8 + background:var(--backdropColor) } .media-sensitive-content p, .char-count { - color:#777 + color:var(--disabledColor) } -.js-setting-list .list-link strong +.js-setting-list .list-link strong, + .mtd-settings-tab:not(.mtd-settings-tab-selected) { font-weight:400; - color:rgba(255,255,255,0.5) + color:var(--modalWindowColor); + opacity:0.5 } .selected .list-link strong, @@ -278,55 +327,39 @@ button[disabled] .toggle-item-text, .accordion-panel .txt-bold { - color:#fff -} - -.edit-conversation-name, -.app-navigator .js-hide-drawer, -.column-message, -.app-navigator .js-hide-drawer, -.drawer-header, -body, -.is-options-open .column-settings-link -{ - background:#03A9F4 -} - -html,body { - background:#03A9F4!important; + color:var(--modalWindowColor) } -.prf-actions .js-follow-button -{ - background:#00bcd4!important +.dropdown-menu ul li a,.dropdown-menu ul li a:hover { + color: var(--typeaheadColor)!important; } -.mtd-dark-media-previews .med-fullpanel .txt-mute +.edit-conversation-name, .app-navigator .js-hide-drawer, .column-message, .app-navigator .js-hide-drawer, .drawer-header, body, .mtd-settings-tab-container { - color:#6D808B + background:var(--primaryColor) } -.mtd-dark-media-previews .med-fullpanel .account-link -{ - color:#D3DBE1 +html,body:not(.signin-sheet-now-present) { + background:var(--primaryColor); } -.mtd-dark-media-previews .tweet-action +.prf-actions .js-follow-button { - color:rgba(149,175,191,.52) + background:var(--secondaryColor)!important } .gap-chirp-text { - color:#00B8D9 + color:var(--secondaryColor) } .gap-chirp { - border-top:3px solid #e9e9e9; - border-bottom:3px solid #e9e9e9 + border-top:3px solid var(--columnBorderColor); + border-bottom:3px solid var(--columnBorderColor) } +.mdl::-webkit-scrollbar-thumb, .mdl.s-profile::-webkit-scrollbar-thumb, .mtd-nav-drawer::-webkit-scrollbar-thumb, .lst-launcher::-webkit-scrollbar-thumb, @@ -339,9 +372,10 @@ html,body { .keyboard-shortcut-list-modal::-webkit-scrollbar-thumb { border-radius:5px; - background:#D9D9D9 + background:var(--scrollbarDefaultColor) } +.mdl::-webkit-scrollbar-thumb:hover, .mdl.s-profile::-webkit-scrollbar-thumb:hover, .mtd-nav-drawer::-webkit-scrollbar-thumb:hover, .lst-launcher::-webkit-scrollbar-thumb:hover, @@ -352,10 +386,11 @@ html,body { #lists-modal .mdl-content::-webkit-scrollbar-thumb:hover, .keyboard-shortcut-list-modal::-webkit-scrollbar-thumb:hover { - background:#c9c9c9 + background:var(--scrollbarHoverColor) } +.mdl, .mdl.s-profile, .mtd-nav-drawer, .lst-launcher, @@ -364,36 +399,35 @@ html,body { .scroll-styled-h, #lists-modal .mdl-content, .keyboard-shortcut-list-modal { - scrollbar-color:#bbb #f9f9f9; + scrollbar-color:var(--txtMuteLink) var(--backdropColor); } .sprite:before { - color:#0EC5D5 + color:var(--secondaryColor) } .btn-compose:not(.js-hide-drawer), .btn-compose:not(.js-hide-drawer):hover, .btn-compose:not(.js-hide-drawer):focus { - background: #00bcd4; + background: var(--secondaryColor); } .btn-compose:not(.js-hide-drawer):active { - background:#58CDDB + background:var(--secondaryColorPress) } .popover .column-title-back .icon:after { - background:rgba(0,0,0,.1) + background:var(--materialSplashColor) } .mdl-column-med, .recent-search-clear.list-item-last, .popover, .recent-search-clear.list-item-last, -html:not(.mtd-dark-media-previews) .med-tweet, .js-quote-tweet-holder .quoted-tweet, .toggle-switch-label:after, .compose-media-grid-holder, @@ -421,37 +455,39 @@ html:not(.mtd-dark-media-previews) .med-tweet, .profile-full, .profile-full-avatar, .lst-modal, -.dropdown-menu +.dropdown-menu, +#media-gallery-tray+.med-tweet { - background:#fff + background:var(--modalWindowColor) } .column-scroller, .column-detail-level-2, .contributor-manager, .js-contributor-manager-container, +.column-panel, .contributor-adder-block { - background:#F9F9F9 + background:var(--backdropColor) } .is-new .column-header, .is-new .column-header-temp { - background:linear-gradient(#03A9F4,#00BCD4) + background:linear-gradient(var(--primaryColor),var(--secondaryColor)) } .column-header, .column-header-temp { - background:linear-gradient(#03A9F4,#03A9F4) + background:linear-gradient(var(--primaryColor),var(--primaryColor)) } .column-temp .column-header, .column-header-temp { /* Quirk specific to light mode, default theme */ - background:linear-gradient(#29B6F6,#29B6F6) + background:linear-gradient(var(--mdlPrimaryColor),var(--mdlPrimaryColor)) } .is-new .column-message, @@ -468,7 +504,7 @@ html:not(.mtd-dark-media-previews) .med-tweet, .lst-group .selected, button.try-query { - background:#00BCD4 + background:var(--secondaryColor) } .js-add-column, @@ -480,23 +516,23 @@ button.try-query .facet-type, .is-options-open .column-settings-link { - background:#26C6DA!important + background:var(--secondaryColorBright)!important } .lst-group.js-setting-list .selected { - background:rgba(0,195,220,.87) + background:var(--secondaryColorBright) } .contributor-row.contributor-focus { - background:#e1e8ed + background:var(--disabledColor) } .list-item, .frm, .compose-text { - color:#444 + color:var(--selectionTextColor) } .list-listmember .username, @@ -526,7 +562,7 @@ button.try-query .account-bio, .tweet-stats>li>a:hover { - color:#999 + color:var(--tweetActionHoverColor) } .list-icon @@ -536,27 +572,27 @@ button.try-query .js-typeahead-recent-search-clear.js-typeahead-item.is-selected { - background:#ededed + background:var(--contextMenuDividerColor) } .list-item.is-actionable.is-selected { - background:#ededed + background:var(--contextMenuDividerColor) } .js-typeahead-recent-search-clear.js-typeahead-item.recent-search-clear:active { - background:#EAEAEA + background:var(--contextMenuDividerColor) } .js-typeahead-item.is-actionable:active { - background:#E7E7E7 + background:var(--contextMenuDividerColor) } .list-item-button { - background:#f0f0f0 + background:var(--contextMenuDividerColor) } .list-item-button, @@ -564,23 +600,23 @@ button.try-query .mdl-placeholder, .input-clear-control { - color:#aaa + color:var(--placeholderTextColor) } +.media-sensitive-title, .account-link, .account-link:hover, .account-link:active { - color:#292f33 + color:var(--primaryTextColor) } .cal, .list-listmember .bio, -.media-sensitive-title, .popover .js-column-back, .popover .js-column-detail .column-title-back:before { - color:#666 + color:var(--disabledColor) } .is-selected-tweet, @@ -588,23 +624,17 @@ button.try-query .mtd-nav-divider, .DateRange { - background:#eee + background:var(--columnBorderColor) } .tweet-translation-original-text { - color:#888 + color:var(--txtMuteLink) } .popover .facet-type.is-expanded { - background:#26C6DA -} - -.mtd-dark-media-previews .med-fullpanel -{ - background:#353F46; - color:#eee + background:var(--secondaryColorBright) } .ovl, @@ -617,12 +647,12 @@ button.try-query .mdl-header, .list-item.is-selected { - background:#29B6F6 + background:var(--mdlPrimaryColor) } .tweet-detail-wrapper .media-sensitive { - background:#FAFAFA + background:var(--backdropColor) } #calcurrent, @@ -630,65 +660,45 @@ button.try-query .more-tweets-btn:hover, .more-tweets-btn:active { - background:#00BCD4 + background:var(--secondaryColor) } .add-participant .js-username-input.js-submittable-input { - border-bottom:2px solid #ccc + border-bottom:2px solid var(--scrollbarHoverColor) } .app-navigator .js-hide-drawer { - box-shadow:0 -3px 5px rgba(17, 17, 17, .15) -} - -.toggle-switch-label:before -{ - background:#BDC7CE -} - -.toggle-switch-input:checked+.toggle-switch-label:after -{ - background:#1DA2B4 -} - -.toggle-switch-input:checked+.toggle-switch-label:before -{ - background:#20C9DF + box-shadow:0 -3px 5px var(--defaultShadowColor) } .detail-view-inline-text { - border-bottom:3px solid #00BCD4 -} - -.is-favorite.is-retweet .tweet-dogear -{ - background:#1FC9DF + border-bottom:3px solid var(--secondaryColor) } .mtd-acc-focus-ring a:focus, .mtd-acc-focus-ring button:focus { - outline:#0BCAE2 solid 3px + outline:var(--secondaryColor) solid 3px } .app-columns-container, .column, .contributor-row { - background:#f9f9f9; + background:var(--backdropColor); } .compose-media-info-bar { - background:#ddd + background:var(--disabledColor) } .text-like-keyboard-key { - background:#333 + background:var(--primaryTextColor) } .list-account .username @@ -698,7 +708,7 @@ button.try-query .popover .search-input-control input:not(.search-input) { - border-bottom:2px solid #333!important + border-bottom:2px solid var(--primaryTextColor)!important } input, @@ -707,40 +717,40 @@ select, .uneditable-input, .contributor-adder .js-username-input { - border-bottom:2px solid #ddd + border-bottom:2px solid var(--disabledColor) } .popover input.txt-mute, .popover textarea.txt-mute { - border-bottom:2px solid #fff!important + border-bottom:2px solid var(--modalWindowColor)!important } .search-input { - border-bottom:2px solid #ddd + border-bottom:2px solid var(--disabledColor) } .mdl-column.l-column .search-input { - background:rgba(255,255,255,.04) + background:var(--buttonPressColor) } ::placeholder, input::placeholder, textarea::placeholder { - color:#a8a8a8 + color:var(--placeholderTextColor) } .mdl-column.l-column .search-input::-webkit-input-placeholder { - color:#555 + color:var(--placeholderTextColor) } .mdl-column.l-column .search-input::-moz-placeholder { - color:#555 + color:var(--placeholderTextColor) } .js-add-column, @@ -749,98 +759,94 @@ textarea::placeholder .js-add-column:active, .draggable-dragging.column { - box-shadow:0 5px 15px 1px rgba(0,0,0,.25) + box-shadow:0 5px 15px 1px var(--deepShadowColor) } .js-add-column:active { - background:#58CDDB + background:var(--secondaryColorPress) } #caldays span { - color:#5a5a5a + color:var(--placeholderTextColor) } .caldisabled[href], .caldisabled[href]:hover, .caldisabled[href]:active { - color:rgba(128,128,128,.5)!important + color:var(--disabledColor)!important } .prf-header { - background-color:#1FC0CF + background-color:var(--secondaryColor) } .lst-group .selected:active { - background:#58CDDB + background:var(--secondaryColorPress) } .mdl-links span { - color:#bbb -} - -.mtd-dark-media-previews .med-fullpanel .tweet-timestamp a -{ - color:#677985!important + color:var(--txtMuteLink) } .tweet-detail .margin-tl.txt-small:before { - background:#ccc + background:var(--scrollbarHoverColor) } .btn-compose:not(.js-hide-drawer):hover, .btn-compose:not(.js-hide-drawer):focus { - background:#00C3DC; - box-shadow:0 3px 6px 2px rgba(0,0,0,.25) + background:var(--secondaryColor); + box-shadow:0 3px 6px 2px var(--deepShadowColor) } .stream-item.is-unread:hover { - background:#2AD1D5 + background:var(--secondaryColor) } .is-unread:active { - background:#30A2B0 + background:var(--secondaryColorPress) } .is-unread .txt-mute, -.is-unread .conversation-indicator +.is-unread .conversation-indicator, +.column-header .txt-mute,.column-header-title>.attribution { - color:rgba(255,255,255,.7) + color:var(--columnAlt) } .is-unread.is-selected-tweet { - background:#2AD1D5 + background:var(--secondaryColor) } .prf-stats>li>a { - color:#888!important + color:var(--tweetActionColor)!important } .mtd-nd-header-image { - background-color:#0BCAE2 + background-color:var(--secondaryColor) } .popover .column-header { - background:#f5f5f5; - color:#333 + background:var(--backdropColor); + color:var(--primaryTextColor) } .detail-view-inline-text { - border-bottom:3px solid #00BCD4 + border-bottom:3px solid var(--secondaryColor) } .mtd-minimal .app-header @@ -850,110 +856,124 @@ textarea::placeholder .tweet-detail .txt-small a,.other-replies:before { - color:#979797 + color:var(--disabledColor) } -.js-column-social-proof .username, -.dropdown-menu a, -.js-character-count -{ - color:#000!important +.js-character-count { + + color:var(--typeaheadColor) } .mdl-column-small { - background:#F8F8F8 + background:var(--backdropColor) } .mtd-nav-drawer { - background:#fbfbfb + background:var(--modalWindowColor) } .spinner-layer,.spinner-default { - border-color:#00BCD4 + border-color:var(--secondaryColor) } .facet-type.is-active, .facet-type:active { - background:#58CDDB + background:var(--secondaryColorPress) } .stream-item.is-actionable .tweet-action, .stream-item.is-actionable .tweet-detail-action, .tweet-stats>li>a { - color:#bbb; + color:var(--txtMuteLink); } ::selection { - background:rgba(0,188,212,.26); - color:#444 + background:var(--selectionBackgroundColor); + color:var(--selectionTextColor) } ::-moz-selection { - background:rgba(0,188,212,.26); - color:#444 + background:var(--selectionBackgroundColor); + color:var(--selectionTextColor) } .tooltip-inner, .Tooltip-inner { - color:#535353; - box-shadow:0 3px 10px rgba(17,17,17,.35) + color:var(--selectionTextColor); + box-shadow:0 3px 10px var(--defaultShadowColor) } .drp-h-divider { - border-color:#e5e5e5 + border-color:var(--contextMenuDividerColor) } textarea { - border-color:#333 + border: 2px solid var(--disabledColor) } .column-content { - border-right:3px solid rgb(233,233,233); + border-right:3px solid var(--columnBorderColor); } .tweet-action, .tweet-detail-action, .social-proof-for-tweet-title { - color:#787878; + color:var(--tweetActionColor); } -button[type="submit"] { - background:#12c3d4 +button[type="submit"],.mtd-settings-button { + background:var(--secondaryColorBright) } -button[type="submit"]:hover { - background:#12c3d4 +button[type="submit"]:hover,.mtd-settings-button:hover { + background:var(--secondaryColorBright) } -button[type="submit"]:active,button[type="submit"]:focus { - background:#12c3d4 +button[type="submit"]:active,button[type="submit"]:focus,.mtd-settings-button:focus { + background:var(--secondaryColorBright) } .lst-launcher a,.lst-launcher a:hover,.lst-launcher a:focus,.lst-launcher a:active,.lst-launcher span { - color:#000!important + color:var(--typeaheadColor)!important } #id_comments { - border:2px solid #ddd + border:2px solid var(--disabledColor) } -.js-column-message .dark-only--color-twitter-gray { - color:#fff!important; +.js-column-message .dark-only--color-twitter-gray,.mtd-settings-button { + color:var(--modalWindowColor)!important; } .account-settings-bb a[rel="user"] { - color:#000; -} \ No newline at end of file + color:var(--typeaheadColor); +} + +.stroke-twitter-light-gray { + stroke:var(--disabledColor) +} + +.stroke-twitter-blue { + stroke:var(--secondaryColor) +} +.stroke-twitter-red { + stroke:var(--redDefault) +} + +.detail-view-inline-text { + color:var(--txtMuteLink); + border-bottom:3px solid var(--secondaryColorAlt) +} diff --git a/ModernDeck/sources/cssextensions/lite.css b/ModernDeck/sources/cssextensions/lite.css index 3b33aa26..247fc4f5 100644 --- a/ModernDeck/sources/cssextensions/lite.css +++ b/ModernDeck/sources/cssextensions/lite.css @@ -1,3 +1,10 @@ +/* + lite.css + + Copyright (c) 2014-2019 Dangered Wolf + Released under the MIT Licence +*/ + * { transition:none!important; animation:none!important; @@ -14,4 +21,4 @@ .preloader-wrapper { display:none!important; -} \ No newline at end of file +} diff --git a/ModernDeck/sources/cssextensions/loginpage.css b/ModernDeck/sources/cssextensions/loginpage.css index 05f0492c..c8e0b2bb 100644 --- a/ModernDeck/sources/cssextensions/loginpage.css +++ b/ModernDeck/sources/cssextensions/loginpage.css @@ -5,10 +5,16 @@ Released under the MIT Licence */ -@import "animations.css"; +img.spinner-centered { + display:none +} + +html:not(.signin-sheet-now-present) body { + background:#263238!important +} ::selection { - background:rgba(102,227,228,.57); + background:rgba(0,0,0,0); color:inherit } @@ -31,19 +37,25 @@ select,input { } .startflow { - height:100% + top: -40px; + bottom: 0; + left: 0; + right: 0; + position: absolute; } .app-signin-wrap { position:relative; margin:0 auto; - max-width:800px; - top:110px + max-width: 360px; + top: 50%; + margin: auto; + margin-top: -128px; } @media (max-width:800px) { .app-signin-form { - margin-top:150px + margin-top: 30px; } } @@ -71,32 +83,14 @@ select,input { .form-legend { text-align:left; font-weight:500; - font-size:20px + font-size:20px; } .startflow-panel,.startflow-panel-rounded { background:#fff; color:#444; box-shadow:0 10px 30px rgba(0,0,0,.75); - border-radius:2px -} - -.form-login-pwd,.form-login-email,.form-login-username { - height:20px; - font-size:16px; - padding:10px 8px -} - -.form-login-pwd::placeholder,.form-login-email::placeholder,.form-login-username::placeholder { - color:#939393 -} - -.form-login-username { - width:256px -} - -.form-login-pwd::placeholder,.form-login-email::placeholder,.form-login-username::placeholder { - color:#939393 + border-radius: 4px; } .form-message { @@ -120,14 +114,6 @@ select,input { z-index:5 } -.startflow-message-wrap .startflow-panel { - animation:windowDown .3s 1 cubic-bezier(.19,1,.22,1) -} - -body.scroll-v .mdl .startflow-panel { - animation:none -} - .startflow-panel .bg-r-dark-blue { background:rgb(14,208,210) } @@ -140,18 +126,8 @@ body.scroll-v .mdl .startflow-panel { font-size:16px!important } -.startflow-panel .txt-large.padding-tn:before { - font-weight:500; - font-size:20px!important; - content:"Your account uses two factor authentication"; - display:block; - padding-right:50px; - padding-bottom:20px -} - - .startflow-background { - background-image:url(https://ton.twimg.com/tweetdeck-web/web/assets/global/backgrounds/login_bg.36f68cdcb5.jpg); + background-image:url(moderndeck://sources/img/bg1.jpg); background-size:cover; background-position:center } @@ -164,17 +140,19 @@ body.scroll-v .mdl .startflow-panel { bottom:0; left:0; opacity:.8; - background-image:linear-gradient(#00BCD4 0%, transparent 150%) + background-image:linear-gradient(#000000b3 0%, transparent 150%); } .login-container { - animation:windowSlider .75s cubic-bezier(.19,1,.22,1); - height:100% + animation: columnFlyin .6s cubic-bezier(.19,1,.22,1); + height:100%; + /* margin-top: 15px; */ } .form-login h2 { font-weight:400; - font-size:22px + font-size:22px; + margin-bottom: 35px; } .form-login p { @@ -182,8 +160,13 @@ body.scroll-v .mdl .startflow-panel { padding-bottom:5px } +@keyframes menuDownLoginError { + 0% {margin-top:-30px;opacity:0} + 100% {margin-top:0;opacity:1} +} + .js-login-error-message { - animation:menuDownLarge .4s 1 cubic-bezier(.19,1,.22,1) + animation: menuDownLoginError .5s cubic-bezier(.19,1,.22,1); } .app-signin-form .cf.margin-txs { @@ -191,18 +174,82 @@ body.scroll-v .mdl .startflow-panel { padding-top:18px } -.js-login-forgot-password { - padding-left:25px; - text-transform:uppercase +.login-container .btn-positive { + width:277px!important; + padding: 15px 0px 8px 24px; + text-align:center; + text-transform: none; + font-size:18px; + margin-top: 20px; } -.signin-sheet-now-present .align-top[type="submit"]:not(.btn-login) { - text-transform:none; - margin-top:4px +.login-container .btn-positive:before { + font-family:"MD"; + content:"\f000"; + font-size:26px; + vertical-align:middle; + line-height:0; + margin-left:-50px; + padding-right:10px } -.login-container .btn-positive { - width:277px!important; - padding:15px 0 1px 15px; - text-align:center +.form-login .padding-axl:not(.form-legend) { + display:none; +} + +.form-login h3 { + display:inline; + /* padding-top: 20px; */ + /* line-height: 80px; */ + /* font-weight: 600; */ + padding-bottom: 36px; + /* margin-top: 22px; */ +} + +.app-signin-form { + -webkit-app-region:no-drag; + display: block; + position: relative; +} + +body { + -webkit-app-region:drag; +} + +.login-container { + top: 0; + -webkit-app-region:no-drag; + position: absolute; + right: 0; + left: 0; + bottom: 0; + height: auto; + overflow: hidden; +} + +.mtd-app .login-container:before { + content:""; + position:absolute; + display:block; + top:0; + left:0; + right:0; + height:40px; + -webkit-app-region: drag; +} + +.mtd-signin-wrap .icon-moderndeck { + font-size: 69px; + font-size: 78px; + /* margin-left: 104px; */ + display: block; + /* color: var(--secondaryColor); */ + position: absolute; + top: 10px; + right: 10px; + opacity: 0.3; +} + +.app-info { + display:none } diff --git a/ModernDeck/sources/cssextensions/marginclasses.css b/ModernDeck/sources/cssextensions/marginclasses.css index c7437c3d..2f4db4b2 100644 --- a/ModernDeck/sources/cssextensions/marginclasses.css +++ b/ModernDeck/sources/cssextensions/marginclasses.css @@ -46,9 +46,12 @@ } .margin-t--12 { - margin-top: -42px!important; - padding-bottom: 15px; - margin-right: 2px + margin-top:12px +} + + +.cf.margin-t--12.margin-b--30 { + margin-top:-42px!important; } .margin-t--14,.margin-v--14 { diff --git a/ModernDeck/sources/cssextensions/minimal.css b/ModernDeck/sources/cssextensions/minimal.css deleted file mode 100644 index b7639dc2..00000000 --- a/ModernDeck/sources/cssextensions/minimal.css +++ /dev/null @@ -1,72 +0,0 @@ -/* - minimal.css - - Copyright (c) 2014-2019 Dangered Wolf - Released under the MIT Licence -*/ - -.btn-compose.is-hidden { - top:10px -} - -.mtd-nav-activator { - margin-top:6px -} - -.mtd-nav-activator:before { - text-shadow:#000 0 2px 5px -} - -.mtd-appbar-notification { - text-shadow:#000 0 2px 5px; - margin-top:15px -} - -.js-hide-drawer { - top:35px!important; - margin-top:-30px!important; - max-height:35px; - min-height:35px -} - -.app-header { - height:54px -} - -.app-content { - top:0 -} - -.tweet-button { - margin-top:4px; - box-shadow:rgba(0,0,0,.75) 0 2px 5px; - position:fixed; - bottom:150px; - left:65%; - transition:.3s all; - width:55px; - height:55px; - top:80% -} - -.hide-detail-view-inline .tweet-button { - left:0 -} - -.tweet-button .icon-compose:before { - font-size:36px -} - -.tweet-button .icon-compose { - margin-left:1px -} - -.app-search-fake .icon { - text-shadow:#000 0 2px 5px; - font-size:28px -} - -.app-search-fake { - margin-top:7px; - display:none -} diff --git a/ModernDeck/sources/cssextensions/mobile.css b/ModernDeck/sources/cssextensions/mobile.css deleted file mode 100644 index 2dbac5e1..00000000 --- a/ModernDeck/sources/cssextensions/mobile.css +++ /dev/null @@ -1,39 +0,0 @@ -/* - mobile.css - - Copyright (c) 2014-2019 Dangered Wolf - Released under the MIT Licence -*/ - -.column-options,.column,.column-header,.column-content { - width:100%!important -} - -.mdl { - width:100%; - top:50px -} - -.mdl-column-sml { - width:120px -} - -.mdl-column-med:not(.mdl-column-rhs) { - width:50px -} - -.mtd-nav-activator:before { - text-shadow:none -} - -.mtd-nav-activator { - margin-top:5px -} - -.icon-sliders:before { - content:"\e5d4" -} - -.mdl-column-lrg { - width:300px -} diff --git a/ModernDeck/sources/cssextensions/newcharacterindicator.css b/ModernDeck/sources/cssextensions/newcharacterindicator.css new file mode 100644 index 00000000..a3fa048b --- /dev/null +++ b/ModernDeck/sources/cssextensions/newcharacterindicator.css @@ -0,0 +1,44 @@ +/* + newcharacterindicator.css + + Copyright (c) 2014-2019 Dangered Wolf + Released under the MIT Licence +*/ + +.js-progress-svg { + display:inline-block; + float:left +} + +.js-character-count.is-hidden { + display:none!important +} + +.drawer .js-character-count { + font-size:12px; + bottom:2px; + right:1px; + text-align:right +} + + +.txt-right.height--16.margin-t--4.margin-r---3.margin-b--1 { + width:0; + position:absolute; + right:78px; + bottom:16px +} + +.txt-right.height--16.margin-t--4.margin-r--7.margin-b--11 { + width:0; + position:absolute; + right: 126px; + bottom:-4px +} + +.inline-reply .js-character-count { + width:49px; + right:51px!important; + padding-bottom:21px; + margin-left:-57px +} \ No newline at end of file diff --git a/ModernDeck/sources/cssextensions/nocontextmenuicons.css b/ModernDeck/sources/cssextensions/nocontextmenuicons.css new file mode 100644 index 00000000..83c837cb --- /dev/null +++ b/ModernDeck/sources/cssextensions/nocontextmenuicons.css @@ -0,0 +1,15 @@ +/* + nocontextmenuicons.css + + Copyright (c) 2014-2019 Dangered Wolf + Released under the MIT Licence +*/ + +.dropdown-menu a[data-action]:before { + content:""!important; + display:none +} + +.dropdown-menu a[data-action] { + font-size:14.5px +} \ No newline at end of file diff --git a/ModernDeck/sources/cssextensions/nonewtweetsbutton.css b/ModernDeck/sources/cssextensions/nonewtweetsbutton.css new file mode 100644 index 00000000..31fb008b --- /dev/null +++ b/ModernDeck/sources/cssextensions/nonewtweetsbutton.css @@ -0,0 +1,10 @@ +/* + nonewtweetsbutton.css + + Copyright (c) 2014-2019 Dangered Wolf + Released under the MIT Licence +*/ + +.more-tweets-btn-container { + display:none +} diff --git a/ModernDeck/sources/cssextensions/orange.css b/ModernDeck/sources/cssextensions/orange.css index 181f7503..e994bfbd 100644 --- a/ModernDeck/sources/cssextensions/orange.css +++ b/ModernDeck/sources/cssextensions/orange.css @@ -5,14 +5,14 @@ Released under the MIT Licence */ -.mdl-header,.application,.mtd-light .app-navigator .js-hide-drawer,.app-navigator .js-hide-drawer,.edit-conversation-name,.drawer-header,.column:not(.is-new) .column-message,body,.column-header,.column-header-temp { - background:#FF5722!important +.light:root { + --primaryColor:#FF5722 !important; } -.is-new .column-header,.is-new .column-header-temp { - background:linear-gradient(#FF5722,#00BCD4)!important -} - -.mtd-nd-header-image { - background-color:#FF5722!important +.dark:root { + --secondaryColor:#d25c37 !important; + --secondaryColorBright:#FF5722 !important; + --secondaryColorAlt:#d25c37; + --secondaryColorPress:#FF5722; + --secondaryColorDeep:#a0492e; } diff --git a/ModernDeck/sources/cssextensions/paper.css b/ModernDeck/sources/cssextensions/paper.css index fbcc0e7c..c2c6aecc 100644 --- a/ModernDeck/sources/cssextensions/paper.css +++ b/ModernDeck/sources/cssextensions/paper.css @@ -5,60 +5,101 @@ Released under the MIT Licence */ -.l-column.mdl-column.mdl-column-sml .selected { - border-color:#555!important +:root { + --primaryColor:#eee!important; + --secondaryColorBright:#eee!important; + --paperColor:#555!important; + --rootWhiteColor:#555!important; + --mdlPrimaryColor:#eee!important; + --pureWhite:#fff!important } -.more-tweets-btn,.mdl-header,.application,.mtd-back-paper.mtd-light .app-navigator .js-hide-drawer,.app-navigator .js-hide-drawer,.edit-conversation-name,.drawer-header,.column:not(.is-new) .column-message,body,.column-header,.column-header-temp { - background:#eee!important +.prf-header .prf-bio a,.is-options-open .column-settings-link,.prf-header .prf-siteurl,.prf .fullname,.prf-actions .action-text:after,.prf-header,.prf-header .username,.prf-header .link-clean { + color:var(--pureWhite)!important } -.mtd-nd-header-image { - background-color:#eee!important +.is-new .column-message, .btn-login[type="submit"], .login-container .btn-positive, .more-tweets-btn, .is-unread, .more-tweets-btn, .compose, .drawer, .tweet-button:not(.js-hide-drawer), .PillGroup .Pill.is-selected, .DatePicker-calendarDay.is-withinRange, .lst-group .selected, button.try-query { + background:var(--primaryColor)!important } -.is-options-open .column-settings-link { - color:#fff +html body .js-column-message .dark-only--color-twitter-gray, +.selected .list-link strong, +.js-submittable-input.js-compose-text, +.popover input.txt-mute, +.popover textarea.txt-mute, +.toggle-item-text, +.accordion-panel .txt-bold, +.facet-title, +.facet-type, +.windowcontrol, +.mtd-settings-tab, +.lst-launcher a, +.lst-launcher a:hover, +.lst-launcher a:focus, +.lst-launcher a:active, +.lst-launcher span, +.message-text>.btn, +.message-banner, +.js-compose-stay-open, +.js-compose-stay-open:before, +.mdl-header-title a, +.title-content .txt-mute, +.column-title .attribution, +.compose-remember-state, +.more-tweets-btn, +.selected .list-link strong, +.account-selector-grid-mode, +.account-selector-grid-mode:hover, +.account-selector-grid-mode, +.account-selector-grid-mode.is-selected, +.js-dm-participants-back:after, +.conversation-title .title-content b, +.js-tweet-social-proof-back:after, +.js-column-detail .column-title-back:before, +.js-hide-drawer.app-nav-tab:after, +.app-nav-tab, +.drawer-header-title.drawer-column-header-title, +.btn-back:before, +.mdl-header-title, +.column-header-temp, +.mdl-column.l-column .search-input, +.numbered-badge, +.app-search .app-search-fake, +.column-message, +.app-nav-link, +.column-title, +.column-header .icon, +.btn-compose.tweet-button>.icon-compose, +.js-add-image-button, +.js-tweet-button, +.js-dm-button, +.js-schedule-button +{ + color:var(--rootWhiteColor)!important } -.lst-launcher a, .lst-launcher a:hover, .lst-launcher a:focus, .lst-launcher a:active, .lst-launcher span, .message-text>.btn, .message-banner, .js-compose-stay-open, .js-compose-stay-open:before, .mdl-header-title a, .title-content .txt-mute, .mtd-nd-header-username, .column-title .attribution, .compose-remember-state, .more-tweets-btn, .selected .list-link strong, .account-selector-grid-mode, .account-selector-grid-mode:hover, .account-selector-grid-mode, .account-selector-grid-mode.is-selected, .js-dm-participants-back:after, .conversation-title .title-content b, .js-tweet-social-proof-back:after, .js-column-detail .column-title-back:before, .js-hide-drawer.app-nav-tab:after, .app-nav-tab, .drawer-header-title.drawer-column-header-title, .btn-back:before, .mdl-header-title, .column-header-temp, .mdl-column.l-column .search-input, .numbered-badge, .app-search .app-search-fake, .column-message, .app-nav-link, .column-title, .column-header .icon, .btn-compose.tweet-button>.icon-compose { - color:#555!important +.mtd-nd-header-username { + color:var(--pureWhite)!important +} + +.is-new .column-header, +.is-new .column-header-temp +{ + background:linear-gradient(var(--primaryColor),rgba(199, 199, 199, 0.75))!important } -.title-content .txt-mute,.column-title .attribution { - opacity:.5 +.is-new .column-message { + background:rgba(199, 199, 199, 0.75)!important } a.column-nav-link,.column-nav-item,.js-setting-list .list-link strong { - color:rgba(85,85,85,.75)!important + color:rgba(85,85,85,.75) !important } a .column-title-back .icon:after,.drawer-header:active .drawer-header-title .icon:after,.btn-back:after,.app-search-fake .icon:after,.mtd-drawer-button:active:after { background:rgba(85,85,85,.2)!important } -.conversation-name,.column-title-edit-box { - border-bottom:2px solid #555!important -} - -.tweet-button,.tweet-button:hover,.tweet-button:focus,.tweet-button:active,.compose,.drawer { - background: #eeeeee!important; - color:#666!important; -} - -.js-send-button,.js-add-image-button,.js-tweet-button,.js-dm-button,.js-schedule-button { - color:#777!important -} - -input.column-title-edit-box { - border-bottom:3px solid #666; - color:#666 -} - -.tweet-button.js-hide-drawer { - background:transparent!important -} - .spinner-layer,.spinner-default { border-color:#555!important @@ -67,3 +108,11 @@ input.column-title-edit-box { .js-send-button.is-disabled { color:#ccc!important; } + +.dropdown-menu a { + opacity:1!important +} + +.mtd-settings-button { + background:#00CBE5!important +} diff --git a/ModernDeck/sources/cssextensions/pink.css b/ModernDeck/sources/cssextensions/pink.css index ea20edfd..32230bcf 100644 --- a/ModernDeck/sources/cssextensions/pink.css +++ b/ModernDeck/sources/cssextensions/pink.css @@ -5,14 +5,14 @@ Released under the MIT Licence */ -.mdl-header,.application,.mtd-back-pink.mtd-light .app-navigator .js-hide-drawer,.app-navigator .js-hide-drawer,.edit-conversation-name,.drawer-header,.column:not(.is-new) .column-message,body,.column-header,.column-header-temp { - background:#E91E63!important +.light:root { + --primaryColor:#E91E63 !important; } -.is-new .column-header,.is-new .column-header-temp { - background:linear-gradient(#E91E63,#00BCD4)!important -} - -.mtd-nd-header-image { - background-color:#E91E63!important +.dark:root { + --secondaryColor:#d84074 !important; + --secondaryColorBright:#E91E63 !important; + --secondaryColorAlt:#d84074; + --secondaryColorPress:#E53935; + --secondaryColorDeep:#b52858; } diff --git a/ModernDeck/sources/cssextensions/progress.css b/ModernDeck/sources/cssextensions/progress.css deleted file mode 100644 index 11e2eab5..00000000 --- a/ModernDeck/sources/cssextensions/progress.css +++ /dev/null @@ -1,52 +0,0 @@ -/* - progress.css - - Copyright (c) 2014-2019 Dangered Wolf - Released under the MIT Licence -*/ - -.progress { - position:relative; - height:4px; - display:block; - width:100%; - background-color:#235450; - border-radius:2px; - margin:.5rem 0 1rem 0; - overflow:hidden -} - -.progress>.determinate { - position:absolute; - top:0; - left:0; - bottom:0; - background-color:#26a69a; - transition:width .3s linear -} - -.progress>.indeterminate { - background-color:#26a69a -} - -.progress>.indeterminate:before { - content:''; - position:absolute; - background-color:inherit; - top:0; - left:0; - bottom:0; - will-change:left,right; - animation:indeterminate 2.1s cubic-bezier(.65,.815,.735,.395) infinite -} - -.progress>.indeterminate:after { - content:''; - position:absolute; - background-color:inherit; - top:0; - left:0; - bottom:0; - will-change:left,right; - animation:indeterminateShort 2.1s cubic-bezier(.165,.84,.44,1) infinite 1.15s -} diff --git a/ModernDeck/sources/cssextensions/red.css b/ModernDeck/sources/cssextensions/red.css index 61001566..ff13346f 100644 --- a/ModernDeck/sources/cssextensions/red.css +++ b/ModernDeck/sources/cssextensions/red.css @@ -5,14 +5,15 @@ Released under the MIT Licence */ -.mdl-header,.application,.mtd-light .app-navigator .js-hide-drawer,.app-navigator .js-hide-drawer,.edit-conversation-name,.drawer-header,.column:not(.is-new) .column-message,body,.column-header,.column-header-temp { - background:#E53935!important -} -.is-new .column-header,.is-new .column-header-temp { - background:linear-gradient(#E53935,#00BCD4)!important +.light:root { + --primaryColor:#E53935 !important; } -.mtd-nd-header-image { - background-color:#E53935!important +.dark:root { + --secondaryColor:#d4504c !important; + --secondaryColorBright:#E53935 !important; + --secondaryColorAlt:#a23d3a; + --secondaryColorPress:#E53935; + --secondaryColorDeep:#8a3331; } diff --git a/ModernDeck/sources/cssextensions/scrollbarsnarrow.css b/ModernDeck/sources/cssextensions/scrollbarsnarrow.css index 68c1a843..2e4311d5 100644 --- a/ModernDeck/sources/cssextensions/scrollbarsnarrow.css +++ b/ModernDeck/sources/cssextensions/scrollbarsnarrow.css @@ -5,7 +5,7 @@ Released under the MIT Licence */ -.keyboard-shortcut-list-modal::-webkit-scrollbar,.mdl.s-profile::-webkit-scrollbar,.scroll-styled-v::-webkit-scrollbar,.scroll-v::-webkit-scrollbar,.lst-launcher::-webkit-scrollbar,.mtd-nav-drawer::-webkit-scrollbar,.emoji-container>div::-webkit-scrollbar,.emoji-container::-webkit-scrollbar { +.mdl::-webkit-scrollbar,.keyboard-shortcut-list-modal::-webkit-scrollbar,.mdl.s-profile::-webkit-scrollbar,.scroll-styled-v::-webkit-scrollbar,.scroll-v::-webkit-scrollbar,.lst-launcher::-webkit-scrollbar,.mtd-nav-drawer::-webkit-scrollbar,.emoji-container>div::-webkit-scrollbar,.emoji-container::-webkit-scrollbar { width:5px; pointer-events:all } @@ -20,6 +20,7 @@ .lst-launcher, .scroll-styled-v, .scroll-v, +.mdl, .scroll-styled-h, #lists-modal .mdl-content, .keyboard-shortcut-list-modal { diff --git a/ModernDeck/sources/cssextensions/scrollbarsnone.css b/ModernDeck/sources/cssextensions/scrollbarsnone.css index 7f6363bf..6e891578 100644 --- a/ModernDeck/sources/cssextensions/scrollbarsnone.css +++ b/ModernDeck/sources/cssextensions/scrollbarsnone.css @@ -5,7 +5,7 @@ Released under the MIT Licence */ -.keyboard-shortcut-list-modal::-webkit-scrollbar,.mdl.s-profile::-webkit-scrollbar,.scroll-styled-v::-webkit-scrollbar,.scroll-v::-webkit-scrollbar,.lst-launcher::-webkit-scrollbar,.mtd-nav-drawer::-webkit-scrollbar,.emoji-container>div::-webkit-scrollbar,.emoji-container::-webkit-scrollbar { +.mdl::-webkit-scrollbar,.keyboard-shortcut-list-modal::-webkit-scrollbar,.mdl.s-profile::-webkit-scrollbar,.scroll-styled-v::-webkit-scrollbar,.scroll-v::-webkit-scrollbar,.lst-launcher::-webkit-scrollbar,.mtd-nav-drawer::-webkit-scrollbar,.emoji-container>div::-webkit-scrollbar,.emoji-container::-webkit-scrollbar { width:0; pointer-events:none } @@ -40,6 +40,7 @@ .scroll-v, .scroll-styled-h, #lists-modal .mdl-content, -.keyboard-shortcut-list-modal { +.keyboard-shortcut-list-modal, +.mdl { scrollbar-width:none; } \ No newline at end of file diff --git a/ModernDeck/sources/cssextensions/spinner.css b/ModernDeck/sources/cssextensions/spinner.css deleted file mode 100644 index cfdd41f5..00000000 --- a/ModernDeck/sources/cssextensions/spinner.css +++ /dev/null @@ -1,138 +0,0 @@ -/* - spinner.css - - Copyright (c) 2014-2019 Dangered Wolf - Released under the MIT Licence -*/ - -.preloader-wrapper { - display:inline-block; - position:relative; - width:48px; - height:48px; - box-sizing:border-box -} - -.med-embeditem>.preloader-wrapper { - top:50%; - position:absolute; - margin-top:-20px -} - -.column-loading-placeholder>.preloader-wrapper { - left:50%; - margin-left:-20px; - margin-top:20px -} - -.chirp-container>.preloader-wrapper { - margin-bottom:50px; - margin-top:50px; - left:50%; - margin-left:-20px -} - -.preloader-wrapper.small { - width:36px; - height:36px -} - -.preloader-wrapper.tiny { - width:20px; - height:20px -} - -.preloader-wrapper.big { - width:64px; - height:64px -} - -.preloader-wrapper { - animation:containerRotate 1.568s linear infinite -} - -body.scroll-v .spinner-layer { - border-color:#26a69a -} - -.spinner-layer { - position:absolute; - box-sizing:border-box; - width:100%; - height:100%; - opacity:1; - animation:fillUnfillRotate 5.332s cubic-bezier(.4,0,.2,1) infinite both -} - -.gap-patch { - position:absolute; - top:0; - left:45%; - width:10%; - height:100%; - overflow:hidden; - border-color:inherit; - display:none; - box-sizing:border-box -} - -.gap-patch .circle { - box-sizing:border-box; - width:1000%; - left:-450% -} - -.circle-clipper { - display:inline-block; - position:relative; - width:50%; - height:100%; - overflow:hidden; - text-align:center; - box-sizing:border-box; - border-color:inherit -} - -.circle-clipper .circle { - width:200%; - height:100%; - border-width:5px; - border-color:inherit; - border-style:solid; - border-bottom-color:transparent; - border-radius:50%; - box-sizing:inherit; - animation:none; - position:absolute; - top:0; - right:0; - bottom:0 -} - -.tiny .circle-clipper .circle { - border-width:3px -} - -.circle-clipper.left .circle { - left:0; - border-right-color:transparent; - transform:rotate(129deg) -} - -.circle-clipper.right .circle { - left:-100%; - border-left-color:transparent; - transform:rotate(-129deg) -} - -.circle-clipper.left .circle { - animation:leftSpin 1.333s cubic-bezier(.4,0,.2,1) infinite both -} - -.circle-clipper.right .circle { - animation:rightSpin 1.333s cubic-bezier(.4,0,.2,1) infinite both -} - -#spinnerContainer { - animation:containerRotate 1.568s linear infinite,fadeOut .4s cubic-bezier(.4,0,.2,1) -} diff --git a/ModernDeck/sources/cssextensions/squareavatars.css b/ModernDeck/sources/cssextensions/squareavatars.css index 1405c77c..7e54bb43 100644 --- a/ModernDeck/sources/cssextensions/squareavatars.css +++ b/ModernDeck/sources/cssextensions/squareavatars.css @@ -5,6 +5,6 @@ Released under the MIT Licence */ -.avatar { +.avatar,.compose-message-recipient>img { border-radius:5px!important } diff --git a/ModernDeck/sources/cssextensions/superclasses.css b/ModernDeck/sources/cssextensions/superclasses.css index 674364c8..f56fd38c 100644 --- a/ModernDeck/sources/cssextensions/superclasses.css +++ b/ModernDeck/sources/cssextensions/superclasses.css @@ -5,33 +5,21 @@ Released under the MIT Licence */ -.txt-r-deep-yellow, -.is-favorite .icon-favorite-toggle, -.icon-heart-filled, -.btn:not(.btn-fav-fav-text)>.icon-favorite-color, -.activity-header .icon-favorite-color, -.obj-left>.icon-favorite-color, -.pull-right.icon-favorite-color, -.tweet-action-item .tweet-action[rel="favorite"]:hover { - color:#FF9701!important -} - -.txt-r-medium-green, -.is-retweet .icon-retweet-toggle, -.icon-retweet-color, -.pull-right>button[data-action="retweet"], -.color-twitter-green, -.tweet-action-item .tweet-action[rel="retweet"]:hover { - color:#13B33F!important +.txt-r-deep-yellow, .is-favorite .icon-favorite-toggle, .icon-heart-filled, .btn:not(.btn-fav-fav-text)>.icon-favorite-color, .activity-header .icon-favorite-color, .obj-left>.icon-favorite-color, .pull-right.icon-favorite-color, .stream-item .tweet-action-item .tweet-action[rel="favorite"]:hover,.tweet-detail-action[rel="favorite"]:hover +{ + color:var(--likeColor)!important +} +.txt-r-medium-green, .is-retweet .icon-retweet-toggle, .icon-retweet-color, .pull-right>button[data-action="retweet"], .color-twitter-green, .stream-item .tweet-action-item .tweet-action[rel="retweet"]:hover,.tweet-detail-action[rel="retweet"]:hover { + color:var(--retweetColor)!important } .color-twitter-red, .bg-color-twitter-red { - color:#e91e63!important + color:var(--likeColor)!important } -.quoted-tweet>div>p.margin-t--4.txt-mute, .column-title-back .attribution.txt-mute, .js-drawer-close.column-close-link.color-twitter-darker-gray, .js-compose-hint.margin-vl, .contributor-row[data-state="confirmRemove"] .contributor-settings-role[data-hide-when-state="confirmRemove"], .cmp-replyto p.txt-mute, .form-submit>.close, .js-progress-svg, .js-action-header-user-list, p.txt-ellipsis.link-complex-target.margin-b--5, .align-below-header+.nbfc, .column .quoted-tweet .tweet-img, .prf-actions .action-text>i, .tweet-stats .stat-word, .is-paused .gif-pause, .is-gif:not(.is-paused) .gif-play, .ovl-plain, .ovl, .gif-badge, .overlay, .link-complex[rel="viewDetails"], .cmp-info, .btn.js-done, .icon.column-nav-updates, .mdl>.txt-seamful-black, .accs i, .account-summary-text.nbfc>a, .txt-center>.js-dismiss, .s-thats-you .btn-loader, .mdl-dismiss, .privacy-info, .mdl-drag-handle, .preloader-wrapper+.preloader-wrapper, .is-loaded>.preloader-wrapper, .nav-user-info>.avatar, .release-notes-image, .release-notes-image-bullet, .accordion .icon-arrow-u, .med-fullpanel .tweet-dogear, .tweet-detail-wrapper .tweet-dogear, .js-hide-drawer .icon-compose, .js-hide-drawer .icon-compose-dm, .mdl-buttonbar>.js-dismiss, .mdl .search-input-control:before, .startflow-panel .txt-center:not(.form-error-message), .add-participant .search-input-control:before, .drawer-content .search-input-control:before, .cf.account-remove-check, .facet-type .search-input-control:before, .accordion .is-active .facet-subtitle, .mdl-dismiss, .mdl-dismiss-media, .mtd-mobile .column-type-icon, .column-type-message .js-column-detail .column-title-back:before, .add-on.with-emphasis, .mtd-minimal .column-navigator, .app-navigator .dropdown-menu, .caret, .js-column-detail .column-title-back.conversation-title:after, .more-tweets-btn-inner-mouse-release, .more-tweets-btn-inner-loading, .more-tweets-btn-container--mouse-release .more-tweets-btn-inner-default, .more-tweets-btn-container--loading .more-tweets-btn-inner-default, .app-masthead, .cmp-spinner, .chev-right, .compose-text-title, .cmp button b, .cmp .mdl-header-title:empty, .app-search-tweet-results .column-header-temp, .spinner-centered, .without-tweet-drag-handles .tweet-drag-handle, .account-remove-check, .js-app-settings .obj-left, .tweet-action-item.feature-customtimelines.tweet-drag-handle, .tweet-detail-action-item.feature-customtimelines.tweet-drag-handle, .column-nav-link:after, .more-tweets-btn-inner-mouse-release, .more-tweets-btn-inner-loading, .more-tweets-btn-container--mouse-release .more-tweets-btn-inner-default, .more-tweets-btn-container--loading .more-tweets-btn-inner-default, .list-item .icon-search.list-icon, .js-typeahead-recent-search-item .obj-left, .s-following .follow-btn .btn-loader, .btd-settings, body:not(.btd-ready) #btdsettings, .edit-conversation-name .nbfc, .js-app-add-column, .js-dismiss, .js-schedule-datepicker-holder .popover .padding-as .btn .icon-trash, .js-dismiss.btn.btn-positive i.icon.icon-check.icon-small.padding-rs, .column-close-link.txt-r-dark-gray, .js-app-loading .js-header-container, .js-add-image-button-label, .js-schedule-button-label, .js-tweet-button-label, .js-dm-button .label.padding-ls, .column-nav-flyout, .release-notes-modal .mdl-drag-handle, #datepicker, .search-input-spinner, .search-input-clear-search, .toggle-item-text-truncated, .sch.s-searching .sch-clear, legend, .frm-legend, .action-btn, .med-origlink, .med-flaglink, .hide-detail-view-inline .detail-view-inline, .compose-account-selected, .js-compose-hint.margin-vl.anim.anim-fade-in, #file-upload-input, .s-sending .char-count, .s-profile .mdl-buttonbar, .s-profile h3, .mdl.s-nonav .mdl-inner .mdl-buttonbar, .ovl.is-dragging:before, .is-dragging.overlay:before, .numbered-badge-onheader, .tooltip-arrow, .app-search-in-popover, .app-search-form, .app-header .app-nav-logo-text, .app-header .hide-condensed, .app-header .sprite-logo, .app-header .tweet-button .label, .app-header .app-nav-link .icon-arrow-l-double, .app-header .app-nav-link .icon-arrow-r-double, .app-nav-link .icon-arrow-r-double, .app-nav-tab .icon-user-switch, .tweet-message-status, .icon.icon-move, .tweet-drag-handle, .is-narrow-columns .media-size-medium .media-sensitive-title, .contributor-row[data-contributor-role="contributor"] [data-show-when-contributor-role="admin"], .contributor-row[data-contributor-role="admin"] [data-show-when-contributor-role="contributor"], .contributor-row[data-state-error="closed-error"] [data-hide-when-state-error="closed-error"], .contributor-row[data-state="settings"] [data-hide-when-state="settings"], .contributor-row[data-state-error="settings-error"] [data-hide-when-state-error="settings-error"], .contributor-row[data-show-when-state], .contributor-row[data-show-when-state-error], .is-options-open .column-settings-link .icon-arrow-d, .column-header-link .icon-arrow-u, .column-title-back .attribution, .js-add-to-customtimeline-button, .column-title-editable .js-show-tip.avatar.size24, .account-remove-check, .with-add-by-url .list-placeholder.pin-all, .app-title, .btn-fav-protected-text, .s-protected .btn-loader, .s-not-following .btn-loader, .action-text, .btn-options-tray.is-invisible, .action-text:not(.unfollow-text), .btn-relation-group:not(.s-following) .unfollow-text, .l-table.column-drag-drop-overlay-inner, .js-account-manager-container .drawer-header, .btn-options-tray>.label, .contributor-row>div:not(.account-summary), .heart-anim, #__lpform_username_numspan #__lpform_password_numspan +.quoted-tweet>div>p.margin-t--4.txt-mute, .column-title-back .attribution.txt-mute, .js-drawer-close.column-close-link.color-twitter-darker-gray, .js-compose-hint.margin-vl, .contributor-row[data-state="confirmRemove"] .contributor-settings-role[data-hide-when-state="confirmRemove"], .cmp-replyto p.txt-mute, .form-submit>.close, .js-progress-svg, .js-action-header-user-list, p.txt-ellipsis.link-complex-target.margin-b--5, .align-below-header+.nbfc, .column .quoted-tweet .tweet-img, .prf-actions .action-text>i, .tweet-stats .stat-word, .is-paused .gif-pause, .is-gif:not(.is-paused) .gif-play, .ovl-plain, .ovl, .overlay, .link-complex[rel="viewDetails"], .cmp-info, .btn.js-done, .icon.column-nav-updates, .mdl>.txt-seamful-black, .accs i, .account-summary-text.nbfc>a, .txt-center>.js-dismiss, .s-thats-you .btn-loader, .mdl-dismiss, .privacy-info, .mdl-drag-handle, .preloader-wrapper+.preloader-wrapper, .is-loaded>.preloader-wrapper, .nav-user-info>.avatar, .release-notes-image, .release-notes-image-bullet, .accordion .icon-arrow-u, .med-fullpanel .tweet-dogear, .tweet-detail-wrapper .tweet-dogear, .js-hide-drawer .icon-compose, .js-hide-drawer .icon-compose-dm, .mdl-buttonbar>.js-dismiss, .mdl .search-input-control:before, .startflow-panel .txt-center:not(.form-error-message), .add-participant .search-input-control:before, .drawer-content .search-input-control:before, .cf.account-remove-check, .facet-type .search-input-control:before, .accordion .is-active .facet-subtitle, .mdl-dismiss, .mdl-dismiss-media, .mtd-mobile .column-type-icon, .column-type-message .js-column-detail .column-title-back:before, .add-on.with-emphasis, .mtd-minimal .column-navigator, .app-navigator .dropdown-menu, .caret, .js-column-detail .column-title-back.conversation-title:after, .more-tweets-btn-inner-mouse-release, .more-tweets-btn-inner-loading, .more-tweets-btn-container--mouse-release .more-tweets-btn-inner-default, .more-tweets-btn-container--loading .more-tweets-btn-inner-default, .app-masthead, .cmp-spinner, .chev-right, .compose-text-title, .cmp button b, .cmp .mdl-header-title:empty, .app-search-tweet-results .column-header-temp, .spinner-centered, .without-tweet-drag-handles .tweet-drag-handle, .account-remove-check, .js-app-settings .obj-left, .tweet-action-item.feature-customtimelines.tweet-drag-handle, .tweet-detail-action-item.feature-customtimelines.tweet-drag-handle, .column-nav-link:after, .more-tweets-btn-inner-mouse-release, .more-tweets-btn-inner-loading, .more-tweets-btn-container--mouse-release .more-tweets-btn-inner-default, .more-tweets-btn-container--loading .more-tweets-btn-inner-default, .list-item .icon-search.list-icon, .js-typeahead-recent-search-item .obj-left, .s-following .follow-btn .btn-loader, .btd-settings, body:not(.btd-ready) #btdsettings, .edit-conversation-name .nbfc, .js-app-add-column, .js-dismiss, .js-schedule-datepicker-holder .popover .padding-as .btn .icon-trash, .js-dismiss.btn.btn-positive i.icon.icon-check.icon-small.padding-rs, .column-close-link.txt-r-dark-gray, .js-app-loading .js-header-container, .js-add-image-button-label, .js-schedule-button-label, .js-tweet-button-label, .js-dm-button .label.padding-ls, .column-nav-flyout, .release-notes-modal .mdl-drag-handle, #datepicker, .search-input-spinner, .search-input-clear-search, .toggle-item-text-truncated, .sch.s-searching .sch-clear, legend, .frm-legend, .action-btn, .med-origlink, .med-flaglink, .hide-detail-view-inline .detail-view-inline, .compose-account-selected, .js-compose-hint.margin-vl.anim.anim-fade-in, #file-upload-input, .s-sending .char-count, .s-profile .mdl-buttonbar, .s-profile h3, .mdl.s-nonav .mdl-inner .mdl-buttonbar, .ovl.is-dragging:before, .is-dragging.overlay:before, .numbered-badge-onheader, .tooltip-arrow, .app-search-in-popover, .app-search-form, .app-header .app-nav-logo-text, .app-header .hide-condensed, .app-header .sprite-logo, .app-header .tweet-button .label, .app-header .app-nav-link .icon-arrow-l-double, .app-header .app-nav-link .icon-arrow-r-double, .app-nav-link .icon-arrow-r-double, .app-nav-tab .icon-user-switch, .tweet-message-status, .icon.icon-move, .tweet-drag-handle, .is-narrow-columns .media-size-medium .media-sensitive-title, .contributor-row[data-contributor-role="contributor"] [data-show-when-contributor-role="admin"], .contributor-row[data-contributor-role="admin"] [data-show-when-contributor-role="contributor"], .contributor-row[data-state-error="closed-error"] [data-hide-when-state-error="closed-error"], .contributor-row[data-state="settings"] [data-hide-when-state="settings"], .contributor-row[data-state-error="settings-error"] [data-hide-when-state-error="settings-error"], .contributor-row[data-show-when-state], .contributor-row[data-show-when-state-error], .is-options-open .column-settings-link .icon-arrow-d, .column-header-link .icon-arrow-u, .column-title-back .attribution, .js-add-to-customtimeline-button, .column-title-editable .js-show-tip.avatar.size24, .account-remove-check, .with-add-by-url .list-placeholder.pin-all, .app-title, .btn-fav-protected-text, .s-protected .btn-loader, .s-not-following .btn-loader,.s-blocking .btn-loader, .action-text, .btn-options-tray.is-invisible, .action-text:not(.unfollow-text), .btn-relation-group:not(.s-following) .unfollow-text, .l-table.column-drag-drop-overlay-inner, .js-account-manager-container .drawer-header, .btn-options-tray>.label, .contributor-row>div:not(.account-summary), .heart-anim, #__lpform_username_numspan #__lpform_password_numspan { display:none } @@ -40,7 +28,7 @@ display:none!important } -.button-tray:before,.s-thats-you .thats-you-text,.edit-conversation-name.is-visible .nbfc,.prf-img img,.has-value .input-clear-control,.sch.s-searching .sch-spinner,.search-input-control.has-value .search-input-clear-search,.search-input-control.is-waiting-for-response .search-input-spinner,.overlay.mtd-modal-window-fade-out,.dropdown-menu.mtd-dropdown-fade-out .s-working .working,.s-nonmember .nonmember,.s-member .member,.s-message-to .cmp-message,.s-photo-added .cmp-info,.s-link-added .cmp-info,.s-inreply .cmp-replyto,.app-search-in-popover,.rpl.s-replying .rpl-actions,.img-strip-media img,.account-remove-check-open .account-remove-check,.contributor-row[data-state="closed"] [data-show-when-state="closed"],.contributor-row[data-state="settings"] [data-show-when-state="settings"],.contributor-row[data-state="settings"] [data-show-when-state="settings confirmRemove"],.contributor-row[data-state="confirmRemove"] [data-show-when-state="settings confirmRemove"],.contributor-row[data-state="confirmRemove"] .contributor-confirm-remove,.contributor-row[data-state-error="confirmRemove-removing-error"] [data-show-when-state-error="confirmRemove-removing-error"],.contributor-row[data-state="confirmRemove-removing"] [data-show-when-state="confirmRemove-removing"],.contributor-row[data-state-error="confirmRemove-error"] [data-show-when-state-error="confirmRemove-error"],.contributor-row[data-state="confirmRemove"] [data-show-when-state="confirmRemove"],.contributor-row[data-state="confirmRemove-removing"] [data-show-when-state="confirmRemove"],.contributor-row[data-state-error="confirmDeadmin-error"] [data-show-when-state-error="confirmDeadmin-error"],.contributor-row[data-state="confirmDeadmin"] [data-show-when-state="confirmDeadmin"],.contributor-row[data-state-error="confirmAdd-added-error"] [data-show-when-state-error="confirmAdd-added-error"],.contributor-row[data-state="confirmAdd-added"] [data-show-when-state="confirmAdd-added"],.contributor-row[data-state="confirmAdd"] [data-show-when-state="confirmAdd"],.contributor-row[data-state-error="confirmAdd-error"] [data-show-when-state-error="confirmAdd-error"],.s-pending .pending-text,.s-blocking .follow-btn:hover .unblock-text,.s-blocking .block-text,.s-following .follow-btn:hover .unfollow-text,.s-following .following-text,.s-not-favorited .btn-fav-fav-text,.s-favorited .btn-fav-faved-text,.s-protected .btn-fav-protected-text,.btn-fav.s-favorited:hover .btn-fav-unfav-text,.follow-btn:disabled>.btn-loader,.cf,.tweet-action,.tweet-detail-action,.compose-account-img,article,aside,details,figcaption,figure,footer,header,hgroup,nav,section,summary,li,ul,.contributor-row[data-state="confirmAdd"]>.contributor-confirm-add { +.button-tray:before, .s-thats-you .thats-you-text, .edit-conversation-name.is-visible .nbfc, .prf-img img, .has-value .input-clear-control, .sch.s-searching .sch-spinner, .search-input-control.has-value .search-input-clear-search, .search-input-control.is-waiting-for-response .search-input-spinner, .overlay.mtd-modal-window-fade-out, .dropdown-menu.mtd-dropdown-fade-out .s-working .working, .s-nonmember .nonmember, .s-member .member, .s-message-to .cmp-message, .s-photo-added .cmp-info, .s-link-added .cmp-info, .s-inreply .cmp-replyto, .app-search-in-popover, .rpl.s-replying .rpl-actions, .img-strip-media img, .account-remove-check-open .account-remove-check, .contributor-row[data-state="closed"] [data-show-when-state="closed"], .contributor-row[data-state="settings"] [data-show-when-state="settings"], .contributor-row[data-state="settings"] [data-show-when-state="settings confirmRemove"], .contributor-row[data-state="confirmRemove"] [data-show-when-state="settings confirmRemove"], .contributor-row[data-state="confirmRemove"] .contributor-confirm-remove, .contributor-row[data-state-error="confirmRemove-removing-error"] [data-show-when-state-error="confirmRemove-removing-error"], .contributor-row[data-state="confirmRemove-removing"] [data-show-when-state="confirmRemove-removing"], .contributor-row[data-state-error="confirmRemove-error"] [data-show-when-state-error="confirmRemove-error"], .contributor-row[data-state="confirmRemove"] [data-show-when-state="confirmRemove"], .contributor-row[data-state="confirmRemove-removing"] [data-show-when-state="confirmRemove"], .contributor-row[data-state-error="confirmDeadmin-error"] [data-show-when-state-error="confirmDeadmin-error"], .contributor-row[data-state="confirmDeadmin"] [data-show-when-state="confirmDeadmin"], .contributor-row[data-state-error="confirmAdd-added-error"] [data-show-when-state-error="confirmAdd-added-error"], .contributor-row[data-state="confirmAdd-added"] [data-show-when-state="confirmAdd-added"], .contributor-row[data-state="confirmAdd"] [data-show-when-state="confirmAdd"], .contributor-row[data-state-error="confirmAdd-error"] [data-show-when-state-error="confirmAdd-error"], .s-pending .follow-btn:not(:hover) .pending-text, .s-pending .follow-btn:hover .cancel-req-text, .s-blocking .follow-btn:hover .unblock-text, .s-blocking .block-text, .s-following .follow-btn:hover .unfollow-text, .s-following .following-text, .s-not-favorited .btn-fav-fav-text, .s-favorited .btn-fav-faved-text, .s-protected .btn-fav-protected-text, .btn-fav.s-favorited:hover .btn-fav-unfav-text, .follow-btn:disabled>.btn-loader, .cf, .tweet-action, .tweet-detail-action, .compose-account-img, article, aside, details, figcaption, figure, footer, header, hgroup, nav, section, summary, li, ul, .contributor-row[data-state="confirmAdd"]>.contributor-confirm-add { display:block } @@ -88,16 +76,16 @@ color:transparent } -.btn-options-tray,.accordion:not(.js-account-settings-detail) .is-active,.accordion .is-active .accordion-header,.accordion .is-active .accordion-header:hover,.compose-account p,.account-selector-grid-mode,.account-selector-grid-mode:hover,.account-selector-grid-mode.is-selected,.prf-header .prf-siteurl,.prf-header .prf-bio a,.prf-header .pretty-link,.controls>label.txt-mute,.column-nav-link.is-selected,.column-nav-link:hover,.is-unread .tweet-text,.js-dm-participants-back,.js-dm-participants-back:hover,.js-dm-participants-back:focus,.column-settings-link:focus,.js-tweet-social-proof-back,.js-tweet-social-proof-back:hover,article.is-unread .account-link,.js-customtimeline-description .txt-mute,input.column-title-edit-box,.controls .icon-small-valigned,.conversation-title .title-content b,.js-toggle.padding-al button.is-selected>span,#mtd-theme-control>option,.caloff:hover,#calcurrent,.app-search .app-search-fake,.accordion-header,.compose-remember-state,.icon-user-switch,.is-unread .link-complex-target,.mdl-header-title a,.facet-type,.facet-subtitle,.numbered-badge,.mdl-header,.mdl-header-title,.accs-header,.compose,.compose-account,.inline-reply,.js-save.block i,.js-cancel.block i,.mtd-drawer-button,.mtd-drawer-button:hover,.mtd-drawer-button:focus,.mtd-nd-header-username,.mtd-appbar-notification,.conversation-name,.js-dm-participants-back:after,.js-column-back,.js-column-back:hover,.js-column-back:active,.js-column-back:focus,.js-column-detail .column-title-back:before,.conversation-title .title-content,.drawer-header-title.drawer-column-header-title,.column-header,.column-header-temp,.column-title,.column-title-edit-box,.column-header-link,.is-options-open .column-settings-link,.column-message,.video-overlay,.app-nav-tab,.message-banner .dismiss,.text-like-keyboard-key,.control-s .control-label,.search-input-perform-search,.search-input-clear-search,.search-input-spinner,.toggle-item.is-selected,.prf-header,.prf-header .prf-siteurl:hover,.prf-header .prf-bio a:hover,.prf-header .pretty-link:hover,.prf .fullname,.prf .username,.lst-group .selected,.lst-group .selected .fullname,.lst-group .selected .inner strong,.lst-group .selected .list-link,.lst-group .selected .list-twitter-list,.lst-group .selected .list-subtitle,.lst-group .selected .list-account,.lst-group .selected .list-listmember,.lst-group.js-setting-list .selected .fullname,.lst-group.js-setting-list .selected .inner strong,.lst-group.js-setting-list .selected .list-link,.lst-group.js-setting-list .selected .list-twitter-list,.lst-group.js-setting-list .selected .list-subtitle,.lst-group.js-setting-list .selected .list-account,.lst-group.js-setting-list .selected .list-listmember,.lst-group .selected .username,.lst-group .selected .bytext,.lst-group .selected .subtitle,.lst-group .selected .icon-protected,.column-title-back:after,.js-tweet-social-proof-back:after,.facet-type .control-group select,.facet-type .control-group input,.js-hide-drawer.app-nav-tab:after,.js-account-action { - color:#fff +.btn-options-tray, .accordion:not(.js-account-settings-detail) .is-active, .accordion .is-active .accordion-header, .accordion .is-active .accordion-header:hover, .compose-account p, .account-selector-grid-mode:hover, .prf-header .prf-siteurl, .prf-header .prf-bio a, .prf-header .pretty-link, .controls>label.txt-mute, .column-nav-link.is-selected, .column-nav-link:hover, .is-unread .tweet-text, .js-dm-participants-back, .js-dm-participants-back:hover, .js-dm-participants-back:focus, .column-settings-link:focus, article.is-unread .account-link, .js-customtimeline-description .txt-mute, input.column-title-edit-box, .controls .icon-small-valigned, .conversation-title .title-content b, .js-toggle.padding-al button.is-selected>span, #mtd-theme-control>option, .caloff:hover, #calcurrent, .app-search .app-search-fake, .accordion-header, .compose-remember-state, .icon-user-switch, .is-unread .link-complex-target, .mdl-header-title a, .facet-type, .facet-subtitle, .numbered-badge, .mdl-header, .mdl-header-title, .accs-header, .compose, .compose-account, .inline-reply, .js-save.block i, .js-cancel.block i, .mtd-drawer-button, .mtd-drawer-button:hover, .mtd-drawer-button:focus, .mtd-nd-header-username, .mtd-appbar-notification, .conversation-name, .js-dm-participants-back:after, .js-column-detail .column-title-back:before, .conversation-title .title-content, .drawer-header-title.drawer-column-header-title, .column-header, .column-header-temp, .column-title, .column-title-edit-box, .is-options-open .column-settings-link, .column-message, .video-overlay, .app-nav-tab, .message-banner .dismiss, .text-like-keyboard-key, .control-s .control-label, .search-input-perform-search, .search-input-clear-search, .search-input-spinner, .toggle-item.is-selected, .prf-header, .prf-header .prf-siteurl:hover, .prf-header .prf-bio a:hover, .prf-header .pretty-link:hover, .prf .fullname, .prf .username, .lst-group .selected, .lst-group .selected .fullname, .lst-group .selected .inner strong, .lst-group .selected .list-link, .lst-group .selected .list-twitter-list, .lst-group .selected .list-subtitle, .lst-group .selected .list-account, .lst-group .selected .list-listmember, .lst-group.js-setting-list .selected .fullname, .lst-group.js-setting-list .selected .inner strong, .lst-group.js-setting-list .selected .list-link, .lst-group.js-setting-list .selected .list-twitter-list, .lst-group.js-setting-list .selected .list-subtitle, .lst-group.js-setting-list .selected .list-account, .lst-group.js-setting-list .selected .list-listmember, .lst-group .selected .username, .lst-group .selected .bytext, .lst-group .selected .subtitle, .lst-group .selected .icon-protected, .column-title-back:after, .js-tweet-social-proof-back:after, .facet-type .control-group select, .facet-type .control-group input, .js-hide-drawer.app-nav-tab:after, .js-account-action, .column-header-title>.attribution,.js-tooltip-target>.username.txt-mute { + color:var(--rootWhiteColor) } .is-unread .fullname { - color:#eee + color:var(--rootLightGreyColor) } .account-summary-text .fullname,.compose-reply-tweet .fullname,.compose-reply-tweet,.compose .typeahead-item strong.fullname { - color:#000 + color:var(--rootBlackColor) } .txt-center,.conversation-event { @@ -121,7 +109,7 @@ button,a.btn,.column-header { -moz-user-select:none } -.antiscroll-scrollbar-shown,.is-selected .compose-account-names,.s-not-favorited>.btn-fav-fav-text,.s-favorited:hover>.btn-fav-unfav-text,.app-header:hover .numbered-badge { +.antiscroll-scrollbar-shown,.is-selected .compose-account-names,.s-not-favorited>.btn-fav-fav-text,.s-favorited:hover>.btn-fav-unfav-text,.app-header:hover .numbered-badge, .mtd-app .numbered-badge { opacity:1 } @@ -134,7 +122,7 @@ button,a.btn,.column-header { } .mdl .column-header-temp { - visibility:hidden + /* visibility:hidden */ } .app-search .app-search-form,#prev-month,#next-month,.pin-all,.gif-pause,.media-grid-2,.media-grid-3,.media-grid-4,.app-columns-container,.app-content,.antiscroll-inner { @@ -146,19 +134,19 @@ button,a.btn,.column-header { } .js-submittable-input.js-compose-text::-webkit-input-placeholder,.facet-type .control-group select::-webkit-input-placeholder,.facet-type .control-group input::-webkit-input-placeholder { - color:#fff + color:var(--rootWhiteColor) } .js-submittable-input.js-compose-text::-moz-placeholder,.facet-type .control-group select::-moz-placeholder,.facet-type .control-group input::-moz-placeholder { - color:#fff + color:var(--rootWhiteColor) } -#general_settings .obj-left:last-child b,.js-display-sensitive-media.checkbox,.js-contributor-manager-back span,.js-send-button,.js-column-loading-placeholder.list-placeholder p,.js-column-loading-placeholder.list-placeholder.column-loading-placeholder,.js-send-tweet-button.spinner-button-is-active:after,.list-filter.cf,.js-add-image-button,.js-tweet-button,.js-dm-button,.js-schedule-button,.recent-search-clear.list-item-last span,.tweet-context .nbfc,.column-title-back .column-head-title,.js-tooltip-target.link-complex-target,.column-detail-level-2>header>a .js-tooltip-target.link-complex-target,.tweet-detail .txt-small,.column-title-back.conversation-title,.js-account-safeguard-text,.js-display-sensitive-media span,.horizontal-flow-container,.column-options .button-tray,.tweet-detail-actions,.accs-header,.compose-remember-state,.js-add-column,.input-prepend { +.js-contributor-manager-back span,.js-send-button,.js-column-loading-placeholder.list-placeholder p,.js-column-loading-placeholder.list-placeholder.column-loading-placeholder,.js-send-tweet-button.spinner-button-is-active:after,.list-filter.cf,.js-add-image-button,.js-tweet-button,.js-dm-button,.js-schedule-button,.recent-search-clear.list-item-last span,.tweet-context .nbfc,.column-title-back .column-head-title,.js-tooltip-target.link-complex-target,.column-detail-level-2>header>a .js-tooltip-target.link-complex-target,.tweet-detail .txt-small,.column-title-back.conversation-title,.js-account-safeguard-text,.js-display-sensitive-media span,.horizontal-flow-container,.column-options .button-tray,.tweet-detail-actions,.accs-header,.compose-remember-state,.js-add-column,.input-prepend { font-size:0 } -.message-text>.btn,.more-tweets-btn,.edit-conversation-name .btn,.btn-login[type="submit"],.login-container .btn-positive,.btn-options-tray-space,.app-nav-link,.tweet-button,.lst-group .selected .list-link { - color:#fff!important +.js-tweet-social-proof-back, .js-tweet-social-proof-back:hover,.message-text>.btn,.more-tweets-btn,.edit-conversation-name .btn,.btn-login[type="submit"],.login-container .btn-positive,.btn-options-tray-space,.app-nav-link,.tweet-button,.lst-group .selected .list-link { + color:var(--rootWhiteColor)!important } .toggle-switch,.pin-bottom.margin-a--15 .checkbox,.scroll-styled-v,.scroll-styled-h,.scroll-alt,.scroll-v,.lst-launcher,.mtd-nav-drawer,.mdl.s-profile,.mdl-col-settings,.app-header a,.app-header button,article.is-actionable,.conversation-title { @@ -177,8 +165,12 @@ button,a.btn,.column-header { margin:0 } -.conversation-name,.l-column.mdl-column.mdl-column-sml .selected,.js-toggle.padding-al button.is-selected,.facet-type .control-group select,.facet-type .control-group input:not([type="checkbox"]) { - border-bottom:2px solid #fff +.conversation-name, .l-column.mdl-column.mdl-column-sml .selected, .js-toggle.padding-al button.is-selected, .facet-type .control-group select, .facet-type .control-group input:not([type="checkbox"]) { + border-bottom:2px solid var(--rootWhiteColor) +} + +.mtd-settings-tab-selected { + border-bottom:3px solid var(--rootWhiteColor) } .is-options-open .column-settings-link,.rpl textarea,.rpl input,.js-submittable-input.js-compose-text,.mdl-inner .column-content,.cmp textarea,.embed-modal .mdl-content,.embed-iframe,.list-account,.prf .lst-profile a { @@ -241,4 +233,12 @@ button,a.btn,.column-header { vertical-align:bottom } - +.account-selector-grid-mode.is-selected, +.account-selector-grid-mode, +.column-header-link, +.js-column-back, +.js-column-back:hover, +.js-column-back:active, +.js-column-back:focus { + color:var(--rootWhiteColor)!important +} diff --git a/ModernDeck/sources/cssextensions/teal.css b/ModernDeck/sources/cssextensions/teal.css index 7fb07003..e42e8518 100644 --- a/ModernDeck/sources/cssextensions/teal.css +++ b/ModernDeck/sources/cssextensions/teal.css @@ -5,15 +5,14 @@ Released under the MIT Licence */ - -.mdl-header,.application,.mtd-light .app-navigator .js-hide-drawer,.app-navigator .js-hide-drawer,.edit-conversation-name,.drawer-header,.column:not(.is-new) .column-message,body,.column-header,.column-header-temp { - background:#009688!important -} - -.is-new .column-header,.is-new .column-header-temp { - background:linear-gradient(#009688,#00BCD4)!important +.light:root { + --primaryColor:#009688 !important; } -.mtd-nd-header-image { - background-color:#009688!important +.dark:root { + --secondaryColor:#0aa596 !important; + --secondaryColorBright:#009688 !important; + --secondaryColorAlt:#007368; + --secondaryColorPress:#0aa596; + --secondaryColorDeep:#0a5f56; } diff --git a/ModernDeck/sources/cssextensions/twittercard.css b/ModernDeck/sources/cssextensions/twittercard.css new file mode 100644 index 00000000..6f32c77b --- /dev/null +++ b/ModernDeck/sources/cssextensions/twittercard.css @@ -0,0 +1,845 @@ + +@import "coredefinitions.css"; +@import "dark.css"; + + +/* fallback */ +@font-face { + font-family: 'Material'; + font-style: normal; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/materialicons/v47/flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2) format('woff2'); +} + +.material-icons { + font-family: 'Material'; + font-weight: normal; + font-style: normal; + font-size: 24px; + line-height: 1; + letter-spacing: normal; + text-transform: none; + display: inline-block; + white-space: nowrap; + word-wrap: normal; + direction: ltr; + -webkit-font-feature-settings: 'liga'; + -webkit-font-smoothing: antialiased; +} + +/* cyrillic-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v19/KFOmCnqEu92Fr1Mu72xKOzY.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v19/KFOmCnqEu92Fr1Mu5mxKOzY.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v19/KFOmCnqEu92Fr1Mu7mxKOzY.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v19/KFOmCnqEu92Fr1Mu4WxKOzY.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v19/KFOmCnqEu92Fr1Mu7WxKOzY.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v19/KFOmCnqEu92Fr1Mu7GxKOzY.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v19/KFOmCnqEu92Fr1Mu4mxK.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmEU9fCRc4EsA.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmEU9fABc4EsA.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmEU9fCBc4EsA.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmEU9fBxc4EsA.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmEU9fCxc4EsA.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmEU9fChc4EsA.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmEU9fBBc4.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +html { + background-color:transparent; + font-family:Roboto,"Noto Sans Alphabet","Noto Sans","Noto Sans CJK","Noto Sans CJK JP","Noto Sans CJK KR","Noto Sans CJK SC","Noto Sans CJK TC","Noto Sans JP","Noto Sans KR","Noto Sans SC","Noto Sans TC"; + height: 200px; +} + +body { + background-color:transparent; + margin:0 +} + +.TwitterCard .is-emojiCharacter { + font-weight:400!important +} + +.TwitterCard .Emoji--forText { + height:1.25em; + width:1.25em; + padding:0 .05em 0 .1em; + vertical-align:-.2em +} + +.TwitterCard .Emoji--forLinks { + background-position:.1em; + background-repeat:no-repeat; + background-size:1.25em 1.25em; + letter-spacing:1.1em; + line-height:1.25em; + padding-top:.15em; + -moz-user-select:none; + -ms-user-select:none +} + +.TwitterCard-title { + font-size:1em; + color:#fff; +} + + +.tcu-imageAspect--1to1:before { + padding-top:100% +} + +.tcu-imageAspect--1to2:before { + padding-top:200% +} + +.tcu-imageAspect--2to1:before { + padding-top:50% +} + +.tcu-imageAspect--1_91to1:before { + padding-top:52.25% +} + +.tcu-imageAspect--3to4:before { + padding-top:133.33% +} + +.tcu-imageAspect--4to3:before { + padding-top:75% +} + +.tcu-imageAspect--5to2:before { + padding-top:40% +} + +.tcu-imageAspect--16to9:before { + padding-top:56.25%; +} + +.tcu-imageAspect--4to1:before { + padding-top:25% +} + +.tcu-imageContainer { + position:relative; + width:100%; + overflow:hidden; + max-height: 170px; +} + +.tcu-imageContainer:before { + content:""; + display:block; +} + +.tcu-imageWrapper { + position:absolute; + top:-1px; + left:-1px; + bottom:-1px; + right:-1px; + background-size:cover; + background-position:center; + background-repeat:no-repeat; + max-height: 200px; +} + +.tcu-imageWrapper img { + width:100%; + height:100%; + opacity:0; + max-height: 200px; +} + +.TwitterCardsGrid-rtl.TwitterCardsGrid-noColSpacing .TwitterCardsGrid-col--1,.TwitterCardsGrid-rtl .TwitterCardsGrid-noColSpacing .TwitterCardsGrid-col--1 { + margin-left:0 +} + +.TwitterCardsGrid .TwitterCardsGrid-col--2 { + float:left; + margin-right:.32333em; + width:15%; + width:calc(16.66667% - .27778em) +} + +.TwitterCardsGrid .TwitterCardsGrid-col--12 { + float:left; + width:100%; + clear:both +} + +.PollXChoice-footer { +} + +.TwitterCardsGrid .TwitterCardsGrid-col--spacerNext,.TwitterCardsGrid-rtl .TwitterCardsGrid-col--spacerPrev { + margin-right: 0; + margin-left: .5em; +} + +.TwitterCard .EdgeButton--smallTransparent>b.u-linkComplex-target { + font-weight:400 +} + +.twitter-hashflag { + height:1.25em; + width:1.25em; + padding:0 .05em 0 .1em; + vertical-align:-.2em +} + +.TwitterCard .LiveBroadcastCard[data-image-state=hidden] { + border-radius:0 0 .85714em .85714em +} + +.TwitterCard .LiveBroadcastCard[data-image-state=hidden] .LiveBroadcastCard-image { + display:none +} + +.TwitterCard .LiveBroadcastCard[data-image-state=visible] .LiveBroadcastCard-image { + display:block +} + +.TwitterCard .LiveBroadcastCard-image { + border-style:solid; + border-width:0; + border-bottom-width:1px +} + +.TwitterCard .LiveBroadcastCard-contentContainer .SummaryCard-content { + padding-left:1em; + padding-right:1em +} + +.TwitterCard .LiveBroadcastCard-contentContainer .SummaryCard-content p { + max-height:2.6em +} + +.TwitterCard .LiveBroadcastCard-contentContainer:not([data-card-breakpoints~=w300]) .Summary-content p { + max-height:1.3em; + white-space:nowrap; + overflow:hidden; + text-overflow:ellipsis +} + +.TwitterCard .LiveEventCard[data-image-state=hidden] { + border-radius:0 0 .85714em .85714em +} + + +.TwitterCard-attribution--category { + font-size:16px; + font-weight:500; + color:#fff +} + +.TwitterCard[data-theme="tweetdeck-light"] { + color:#000 +} + +.TwitterCard .LiveEventCard-iconVerified { + background-repeat:no-repeat; + background-size:cover; + display:inline-block; + height:1em; + vertical-align:middle; + width:1em +} + +.TwitterCard .LiveEventCard-image { + border-style:solid; + border-width:0; + /* border-bottom-width:1px */ + padding-bottom: 8px; +} + +.TwitterCard .LiveEventCard-contentContainer .SummaryCard-content { + padding-left:1em; + padding-right:1em +} + +.TwitterCard .LiveEventCard-contentContainer .SummaryCard-content p { + max-height:2.6em +} + +.TwitterCard .LiveEventCard-contentContainer:not([data-card-breakpoints~=w300]) .Summary-content p { + max-height:1.3em; + white-space:nowrap; + overflow:hidden; + text-overflow:ellipsis +} + +.TwitterCard .LiveEventCard .TwitterCard-attribution--avatar { + margin-right:.28571em +} + +.TwitterCard .LiveEventCard .TwitterCard-title { + font-weight:400 +} + +.TwitterCard .LiveVideoCard[data-state-live=true] .LiveVideoCard-imageContainer { + display:none +} + +.TwitterCard .LiveVideoCard[data-state-live=true] .LiveVideoCard-videoContainer { + display:block +} + +.TwitterCard .LiveVideoCard[data-state-live=true] .LiveVideoCard-videoContainerClickAreaLeft { + cursor:pointer; + left:0; + margin-bottom:calc(-1 * (57% - 55px)); + padding-top:calc(57% - 55px); + position:absolute; + top:0; + width:82% +} + +.TwitterCard .LiveVideoCard[data-state-live=true] .LiveVideoCard-videoContainerClickAreaRight { + cursor:pointer; + margin-bottom:calc(-1 * (57% - 55px)); + padding-top:calc(57% - 55px); + position:absolute; + right:0; + top:0; + width:12% +} + +.TwitterCard .LiveVideoCard[data-state-live=true] .LiveVideoCard-contentContainer--static { + display:none +} + +.TwitterCard .LiveVideoCard[data-state-live=true] .LiveVideoCard-contentContainer--video { + display:block +} + +.TwitterCard .LiveVideoCard[data-state-live=false] .LiveVideoCard-imageContainer { + display:block +} + +.TwitterCard .LiveVideoCard[data-state-live=false] .LiveVideoCard-videoContainer { + display:none +} + +.TwitterCard .LiveVideoCard[data-state-live=false] .LiveVideoCard-videoContainerClickAreaLeft { + display:none +} + +.TwitterCard .LiveVideoCard[data-state-live=false] .LiveVideoCard-videoContainerClickAreaRight { + display:none +} + +.TwitterCard .LiveVideoCard[data-state-live=false] .LiveVideoCard-contentContainer--static { + display:block +} + +.TwitterCard .LiveVideoCard[data-state-live=false] .LiveVideoCard-contentContainer--video { + display:none +} + +.TwitterCard .LiveVideoCard[data-state-live=false] .TwitterCard-pill { + text-transform:none +} + +.TwitterCard .LiveVideoCard[data-playing-ad=true] .TwitterCard-pill { + display:none +} + +.TwitterCard .LiveVideoCard[data-playing-ad=false] .TwitterCard-pill { + display:block +} + +.TwitterCard .LiveVideoCard-mediaContainer { + position:relative +} + +.TwitterCard .LiveVideoCard-videoContainer>.TwitterCardsGrid-col--spacerBottom { + margin-bottom:0 +} + +.TwitterCard .LiveVideoCard-timer { + letter-spacing:.05em +} + +.TwitterCard .LiveVideoCard .EdgeButton--smallTransparent,.TwitterCard .LiveVideoCard .Button--smallTransparent { + top:.5em; + left:1em; + position:absolute +} + +.TwitterCard .LiveVideoCard-postlive .Button--smallTransparent,.TwitterCard .LiveVideoCard-postlive .Button--smallBlue { + display:none +} + +.TwitterCard .LiveVideoCard .SummaryCard-destination { + text-transform:none; + margin-top:3px +} + +.TwitterCard .LiveVideoCard.SummaryCard--noImage .SummaryCard-image { + background-position:-50px -50px; + background-size:170% 170% +} + +.TwitterCard .LiveVideoCard.SummaryCard--noImage .SummaryCard-image .tcu-imageContainer { + background-image:none +} + +.TwitterCard .LiveVideoCard.SummaryCard--noImage .SummaryCard-image .tcu-imageContainer .tcu-imageWrapper { + background-image:none +} + +.TwitterCard .LiveVideoCard.SummaryCard--noImage .SummaryCard-image .tcu-imageContainer:after { + background-image:url(//ton.twimg.com/tfw/assets/twitter_v1_3a8f4c25d89a1e20675893c1d64b2c968a9a9f7f.svg); + background-position:top left; + background-repeat:no-repeat; + background-size:1.5em; + content:"Live Stream"; + display:block; + font-size:1.5em; + font-weight:lighter; + left:1em; + padding-top:2em; + position:absolute; + top:calc(50% - 1.3em) +} + +.TwitterCard .MomentCard-cover { + border-right-width:1px; + border-right-style:solid; + box-sizing:border-box +} + +.TwitterCard .MomentCard-content { + padding:1.14286em 1em +} + +.TwitterCard .MomentCard-title .TwitterCard-title { + font-size:1.14286em; + line-height:1.25em; + margin-bottom:.35714em; + max-height:2.5em; + overflow:hidden +} + +.TwitterCard .MomentCard-title h2 { + font-weight:700 +} + +.TwitterCard .MomentCard-subtitle { + font-size:1em; + font-weight:400; + margin:.57143em 0; + position:relative +} + +.TwitterCard .MomentCard-author,.TwitterCard .MomentCard-authorName { + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap +} + +.TwitterCard .MomentCard-authorName { + display:inline-block; + font-weight:700; + max-width:60%; + vertical-align:middle +} + +.TwitterCard .MomentCard-authorScreenName { + vertical-align:middle +} + +.TwitterCard .MomentCard-authorAvatar { + border-radius:2px; + height:1em; + margin-right:.21429em; + vertical-align:middle; + width:1em +} + +.TwitterCard .MomentCard-description p { + font-weight:400; + max-height:6.5em +} + +.TwitterCard .MomentCard-badge { + bottom:1.35714em; + font-size:1em; + position:absolute +} + +.TwitterCard .MomentCard-badgeText { + font-weight:400; + line-height:1.3em; + margin-left:1.1em +} + +.TwitterCard .MomentCard-iconLightning { + background-repeat:no-repeat; + background-size:cover; + bottom:1px; + display:inline-block; + height:1.07143em; + position:absolute; + width:.57143em +} + +.TwitterCard .MomentCard-iconVerified { + background-repeat:no-repeat; + background-size:cover; + display:inline-block; + height:1em; + vertical-align:middle; + width:1em +} + +.TwitterCard .MomentCard--unavailable { + border-radius:.85714em; + padding:.85714em; + text-align:center +} + +.TwitterCard .MomentCard:not([data-card-breakpoints~=w500]) .MomentCard-cover { + width:40%; + width:calc(41.66667% - .19444em) +} + +.TwitterCard .MomentCard:not([data-card-breakpoints~=w500]) .MomentCard-contentContainer { + width:57%; + width:calc(58.33333% - .13889em) +} + +.TwitterCard .MomentCard:not([data-card-breakpoints~=w500]) .MomentCard-description p { + max-height:2.6em +} + +.TwitterCard .MomentCard:not([data-card-breakpoints~=w450]) .MomentCard-description p { + max-height:1.3em +} + +.TwitterCard .MomentCard:not([data-card-breakpoints~=w400]) .MomentCard-description { + display:none!important +} + +.TwitterCard .MomentCard:not([data-card-breakpoints~=w300]) .MomentCard-title .TwitterCard-title,.TwitterCard .MomentCard:not([data-card-breakpoints~=w300]) .MomentCard-subtitle,.TwitterCard .MomentCard:not([data-card-breakpoints~=w300]) .MomentCard-badge { + font-size:.92857em +} + +.TwitterCard .MomentCard:not([data-card-breakpoints~=w200]) .TwitterCard-title,.TwitterCard .MomentCard:not([data-card-breakpoints~=w200]) .MomentCard-category { + max-height:1.3em; + white-space:nowrap; + overflow:hidden; + text-overflow:ellipsis +} + +.TwitterCard .MomentCard.TwitterCardsGrid-rtl .MomentCard-cover { + border-left-width:1px; + border-left-style:solid; + border-right:0 +} + +.TwitterCard .PlayerCard--clickToLoad { + display:none +} + +.TwitterCard .PollXChoice[data-poll-image=true] .tcu-imageWrapper:before { + position:absolute; + height:100%; + width:100%; + content:"" +} + +.TwitterCard .PollXChoice .PlayerCard--video { + border-top-left-radius:.85714em!important; + border-top-right-radius:.85714em!important +} + +.TwitterCard .PollXChoice .PlayerCard-videoContainer { + border-bottom-width:0!important +} + +.TwitterCard .PollXChoice-optionContainer { + margin-bottom:.57143em; + position:relative; +} + +.TwitterCard .PollXChoice-optionContainer .PollXChoice-progress { + display:inline-block; + max-width:100%; + margin-left:.64286em; + margin-right:.64286em; + overflow:hidden; + transition-duration:.3s; + transition-timing-function:cubic-bezier(.19,1,.22,1); + transition-property:width,margin-left,margin-right +} + +.TwitterCard .PollXChoice-optionContainer .PollXChoice-progress span { + opacity:0 +} + +.TwitterCard [data-poll-state=opened] .PollXChoice-optionContainer .PollXChoice-progress { + max-width:0; + margin-left:-3em; + margin-right:3em +} + +.TwitterCard .PollXChoice-optionContainer .PollXChoice-choice { + height: 45px!important; + margin: 0; + padding: 0; +} + +.TwitterCard .PollXChoice-optionContainer .PollXChoice-choice--chart { + background: #ccc; + position:absolute; + top:0; + left:0; + width:0; + height:100%; + transition:all .3s cubic-bezier(.19,1,.22,1); + opacity:1; + padding-bottom: 2px; + border-radius: 4px; +} + +.TwitterCard[data-theme="tweetdeck-dark"] .PollXChoice-optionContainer .PollXChoice-choice--chart { + background: var(--txtMuteLink); +} + +.TwitterCard [data-poll-state=opened] .PollXChoice-optionContainer .PollXChoice-choice--chart { + opacity:0 +} + +[data-poll-state="closed"] input[type="radio"],[data-poll-state="final"] input[type="radio"] { + display:none +} + +input[type="radio"] { + float:left +} + +input[type="radio"]:before { + content:"\e836"; + line-height:40px; + font-size:24px; + font-family:"Material" +} + +input[type="radio"]:checked:before { + content:"\e837" +} + +.TwitterCard .PollXChoice-optionContainer .PollXChoice-choice--radio:before { + content:"\e836"; + font-family:"Material"; + line-height:27px +} + +.TwitterCard .PollXChoice-optionContainer .PollXChoice-choice--radio { + display:none +} + + +.PollXChoice-vote--button { + display:block; + float:none; + margin-top:40px; + box-shadow:0 3px 7px rgba(17,17,17,.5); + padding:11px; + outline:none; + -webkit-appearance:none; + border:0; + text-transform:uppercase; + border-radius:4px +} + + +.TwitterCard .PollXChoice-optionContainer .PollXChoice-choice--input { + -webkit-appearance:none +} + +.TwitterCard .PollXChoice-optionContainer .PollXChoice-choice--text { + position:relative; + display:inline-block; + padding-top: 0.85em; + /* padding-bottom:.28571em; */ + float:left; +} + + +.TwitterCard[data-theme="tweetdeck-light"] .TwitterCard-title, +.TwitterCard[data-theme="tweetdeck-light"] .PollXChoice-optionContainer .PollXChoice-choice--text, +.TwitterCard[data-theme="tweetdeck-light"] .PollXChoice-footer span { + color:#000 +} + +.TwitterCard[data-theme="tweetdeck-light"] p { + color:#aaa +} + +.TwitterCard[data-theme="tweetdeck-dark"] p { + color:var(--txtMuteLink) +} + + +.TwitterCard[data-theme="tweetdeck-light"] .PollXChoice-vote--button[disabled="true"] { + background-color:#eee!important; + color:#aaa +} + + +.TwitterCard .PollXChoice-optionContainer .PollXChoice-choice--text span { + vertical-align:middle +} + +.TwitterCard .PollXChoice-optionContainer .PollXChoice-choice--anchor { + display:block; + border:0; + margin:0; + padding:0; + position:relative; + text-decoration:none; + outline:0 +} + +.TwitterCard .PollXChoice-optionContainer .PollXChoice-choice--anchor:link,.TwitterCard .PollXChoice-optionContainer .PollXChoice-choice--anchor:visited,.TwitterCard .PollXChoice-optionContainer .PollXChoice-choice--anchor:hover,.TwitterCard .PollXChoice-optionContainer .PollXChoice-choice--anchor:active { + text-decoration:none; + outline:0 +} + +.TwitterCard .PollXChoice-footer span { + vertical-align:middle +} + +.TwitterCard [data-poll-state=closed] .PollXChoice-footer .PollXChoice-info,.TwitterCard [data-poll-state=final] .PollXChoice-footer .PollXChoice-info { + margin-left:0 +} + +.TwitterCard .PollXChoice-footer .PollXChoice-info .PollXChoice-vote { + display:inline-block; + margin-top:0; + padding:4px; + border-radius:.33333em; + transition:all .3s cubic-bezier(.19,1,.22,1) +} + +.TwitterCard .TwitterCardsGrid-rtl .PollXChoice-footer .PollXChoice-info .PollXChoice-vote { + margin-left:.64286em; + margin-right:0 +} + +.TwitterCard .PollXChoice-footer .PollXChoice-info .PollXChoice-vote button { + margin-top:0!important; + outline:0 +} + +.PollXChoice-vote--button[disabled="true"] { + background-color:var(--disabledColor)!important; + color:rgba(255, 255, 255, .25) +} + +.PollXChoice-vote--button { + background-color:var(--secondaryColor)!important; + color:#fff +} + +.TwitterCard .PollXChoice-footer .PollXChoice-info .PollXChoice-vote a:link,.TwitterCard .PollXChoice-footer .PollXChoice-info .PollXChoice-vote a:visited,.TwitterCard .PollXChoice-footer .PollXChoice-info .PollXChoice-vote a:hover,.TwitterCard .PollXChoice-footer .PollXChoice-info .PollXChoice-vote a:active { + text-decoration:none; + outline:0 +} diff --git a/ModernDeck/sources/cssextensions/undockedmodals.css b/ModernDeck/sources/cssextensions/undockedmodals.css index 8bee5f36..d5fc5c01 100644 --- a/ModernDeck/sources/cssextensions/undockedmodals.css +++ b/ModernDeck/sources/cssextensions/undockedmodals.css @@ -5,11 +5,9 @@ Released under the MIT Licence */ -@import "animations.css"; - .mdl:not(.med-fullpanel) { animation:windowDown .3s cubic-bezier(.19,1,.22,1); - width:600px; + width:calc(var(--columnSize) + 252px); margin:0 auto; max-height:900px; bottom:auto; @@ -56,6 +54,10 @@ display:none } +.mdl.cmp.s-inreply { + min-height:250px!important +} + .mdl:not(.sentry-error-embed):not(.med-fullpanel) { display:inline-block; vertical-align:middle; @@ -63,7 +65,12 @@ margin:0 auto!important; text-align:left; border-radius:2px; - min-height:170px + min-height: 500px; + max-height: 707px; +} + +.mdl.s-profile { + min-height:525px!important } .mdl.s-fluid { @@ -86,12 +93,12 @@ } .prf-header { - min-height:300px + min-height: 289px; } .social-proof-container { position:absolute!important; - top:306px + top: 294px; } .s-fluid .mdl-inner, .s-fluid-height .mdl-inner { @@ -105,63 +112,16 @@ padding-bottom:30px } -.mtd-nav-drawer-background { - background:transparent -} - -.mtd-nav-drawer { - height:auto; - padding-bottom:10px -} - -.mtd-nav-drawer-hidden { - margin-top:-40px; - margin-left:0; - opacity:0; - pointer-events:none -} - -#mtd_nd_header_image,.mdl-links { - display:none -} - -.mtd-nd-header-photo.avatar { - height:36px!important; - width:36px!important; - margin-top:10px; - margin-left:10px -} - -.mtd-nd-header-username { - margin-top:20px; - margin-left:60px; - text-align:left; - text-shadow:none -} - -.mtd-settings-button { - margin-top:60px -} - -.mtd-nav-drawer-hidden .mtd-nav-button { - pointer-events:none -} - .settings-modal .mdl { - height:600px; overflow:hidden } -.mdl .js-user-actions-menu { +.mdl .prf-follow-state .js-user-actions-menu { position:absolute; - top:-300px; + top: -290px; left:-40px; color:#fff!important; - margin:0 -} - -.js-add-column { - right:-66px!important + margin:0; } .mdl-drag-handle { @@ -181,41 +141,15 @@ right:50px } -.mtd-light .mtd-nd-header-username { - color:#000 -} - -#mtdfeedback { - position:relative!important; - margin-top:8px -} - -.mtd-nav-divider-feedback { - display:block -} - .s-inreply.s-fluid-height .cf>.pull-right { position:absolute; right:0 } .cf.padding-b--20.padding-r--20.padding-t--5 { - margin-top:-40px + margin-top:-56px } .cmp-replyto { - padding-bottom:40px + padding-bottom:50px } - -.mtd-nav-group-expand { - display:none -} - -.mtd-nav-group:not(.mtd-nav-group-expanded) { - height:inherit!important -} - -#mtd_af_mdl { - left:0!important; - top:0!important; -} \ No newline at end of file diff --git a/ModernDeck/sources/cssextensions/undockednavdrawer.css b/ModernDeck/sources/cssextensions/undockednavdrawer.css new file mode 100644 index 00000000..79409194 --- /dev/null +++ b/ModernDeck/sources/cssextensions/undockednavdrawer.css @@ -0,0 +1,64 @@ + + +.mtd-light .mtd-nd-header-username { + color:#000 +} + +#mtdfeedback { + position:relative!important; + margin-top:8px +} + +.mtd-nav-drawer-background { + background:transparent +} + +.mtd-nav-drawer { + height:auto; + padding-bottom:10px; + border-radius: 0 5px 5px 5px; +} + +.mtd-nav-drawer-hidden { + margin-top:-40px; + margin-left:0; + opacity:0; + pointer-events:none +} + +#mtd_nd_header_image,.mdl-links { + display:none +} + +.mtd-nd-header-photo.avatar { + height:36px!important; + width:36px!important; + margin-top:10px; + margin-left:10px +} + +.mtd-nd-header-username { + margin-top:20px; + margin-left:60px; + text-align:left; + text-shadow:none +} + +.mtd-nav-first-button { + margin-top:60px +} + +.mtd-nav-drawer-hidden .mtd-nav-button { + pointer-events:none +} + +.mtd-nav-divider-feedback { + display:block +} +.mtd-nav-group-expand { + display:none +} + +.mtd-nav-group:not(.mtd-nav-group-expanded) { + height:inherit!important +} diff --git a/ModernDeck/sources/cssextensions/violet.css b/ModernDeck/sources/cssextensions/violet.css index 45277b24..9dbfa15c 100644 --- a/ModernDeck/sources/cssextensions/violet.css +++ b/ModernDeck/sources/cssextensions/violet.css @@ -5,14 +5,14 @@ Released under the MIT Licence */ -.mdl-header,.application,.mtd-light .app-navigator .js-hide-drawer,.app-navigator .js-hide-drawer,.edit-conversation-name,.drawer-header,.column:not(.is-new) .column-message,body,.column-header,.column-header-temp { - background:#673AB7!important +.light:root { + --primaryColor:#673AB7 !important; } -.is-new .column-header,.is-new .column-header-temp { - background:linear-gradient(#673AB7,#00BCD4)!important -} - -.mtd-nd-header-image { - background-color:#673AB7!important +.dark:root { + --secondaryColor:#8a5eda !important; + --secondaryColorBright:#673AB7 !important; + --secondaryColorAlt:#593f88; + --secondaryColorPress:#8a5eda; + --secondaryColorDeep:#512d92; } diff --git a/ModernDeck/sources/cssextensions/yellow.css b/ModernDeck/sources/cssextensions/yellow.css index a8a864c2..da2455fd 100644 --- a/ModernDeck/sources/cssextensions/yellow.css +++ b/ModernDeck/sources/cssextensions/yellow.css @@ -5,14 +5,14 @@ Released under the MIT Licence */ -.mdl-header,.application,.mtd-light .app-navigator .js-hide-drawer,.app-navigator .js-hide-drawer,.edit-conversation-name,.drawer-header,.column:not(.is-new) .column-message,body,.column-header,.column-header-temp { - background:#FFC107!important +.light:root { + --primaryColor:#FFC107 !important; } -.is-new .column-header,.is-new .column-header-temp { - background:linear-gradient(#FFC107,#00BCD4)!important -} - -.mtd-nd-header-image { - background-color:#FFC107!important +.dark:root { + --secondaryColor:#d6a410 !important; + --secondaryColorBright:#d6a410 !important; + --secondaryColorAlt:#b79326; + --secondaryColorPress:#FFC107; + --secondaryColorDeep:#9c7c18; } diff --git a/ModernDeck/sources/fonts/RobotoMono-Bold.woff2 b/ModernDeck/sources/fonts/RobotoMono-Bold.woff2 new file mode 100644 index 00000000..aa9346f9 Binary files /dev/null and b/ModernDeck/sources/fonts/RobotoMono-Bold.woff2 differ diff --git a/ModernDeck/sources/fonts/RobotoMono-BoldItalic.woff2 b/ModernDeck/sources/fonts/RobotoMono-BoldItalic.woff2 new file mode 100644 index 00000000..1891cf63 Binary files /dev/null and b/ModernDeck/sources/fonts/RobotoMono-BoldItalic.woff2 differ diff --git a/ModernDeck/sources/fonts/RobotoMono-Italic.woff b/ModernDeck/sources/fonts/RobotoMono-Italic.woff new file mode 100644 index 00000000..31374144 Binary files /dev/null and b/ModernDeck/sources/fonts/RobotoMono-Italic.woff differ diff --git a/ModernDeck/sources/fonts/RobotoMono-Light.woff2 b/ModernDeck/sources/fonts/RobotoMono-Light.woff2 new file mode 100644 index 00000000..e080c74e Binary files /dev/null and b/ModernDeck/sources/fonts/RobotoMono-Light.woff2 differ diff --git a/ModernDeck/sources/fonts/RobotoMono-LightItalic.woff2 b/ModernDeck/sources/fonts/RobotoMono-LightItalic.woff2 new file mode 100644 index 00000000..661c7b07 Binary files /dev/null and b/ModernDeck/sources/fonts/RobotoMono-LightItalic.woff2 differ diff --git a/ModernDeck/sources/fonts/RobotoMono-Medium.woff2 b/ModernDeck/sources/fonts/RobotoMono-Medium.woff2 new file mode 100644 index 00000000..a6890a88 Binary files /dev/null and b/ModernDeck/sources/fonts/RobotoMono-Medium.woff2 differ diff --git a/ModernDeck/sources/fonts/RobotoMono-MediumItalic.woff2 b/ModernDeck/sources/fonts/RobotoMono-MediumItalic.woff2 new file mode 100644 index 00000000..dd015742 Binary files /dev/null and b/ModernDeck/sources/fonts/RobotoMono-MediumItalic.woff2 differ diff --git a/ModernDeck/sources/fonts/RobotoMono-Regular.woff2 b/ModernDeck/sources/fonts/RobotoMono-Regular.woff2 new file mode 100644 index 00000000..fc140d99 Binary files /dev/null and b/ModernDeck/sources/fonts/RobotoMono-Regular.woff2 differ diff --git a/ModernDeck/sources/fonts/RobotoMono-Thin.woff2 b/ModernDeck/sources/fonts/RobotoMono-Thin.woff2 new file mode 100644 index 00000000..6d07c0ee Binary files /dev/null and b/ModernDeck/sources/fonts/RobotoMono-Thin.woff2 differ diff --git a/ModernDeck/sources/fonts/RobotoMono-ThinItalic.woff2 b/ModernDeck/sources/fonts/RobotoMono-ThinItalic.woff2 new file mode 100644 index 00000000..c5990d14 Binary files /dev/null and b/ModernDeck/sources/fonts/RobotoMono-ThinItalic.woff2 differ diff --git a/ModernDeck/sources/img/bg1.jpg b/ModernDeck/sources/img/bg1.jpg new file mode 100644 index 00000000..734b5e34 Binary files /dev/null and b/ModernDeck/sources/img/bg1.jpg differ diff --git a/ModernDeck/sources/libraries/jquery.visible.min.js b/ModernDeck/sources/libraries/jquery.visible.min.js deleted file mode 100644 index 417039c3..00000000 --- a/ModernDeck/sources/libraries/jquery.visible.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(t){var i=t(window);t.fn.visible=function(t,e,o){if(!(this.length<1)){var r=this.length>1?this.eq(0):this,n=r.get(0),f=i.width(),h=i.height(),o=o?o:"both",l=e===!0?n.offsetWidth*n.offsetHeight:!0;if("function"==typeof n.getBoundingClientRect){var g=n.getBoundingClientRect(),u=g.top>=0&&g.top0&&g.bottom<=h,c=g.left>=0&&g.left0&&g.right<=f,v=t?u||s:u&&s,b=t?c||a:c&&a;if("both"===o)return l&&v&&b;if("vertical"===o)return l&&v;if("horizontal"===o)return l&&b}else{var d=i.scrollTop(),p=d+h,w=i.scrollLeft(),m=w+f,y=r.offset(),z=y.top,B=z+r.height(),C=y.left,R=C+r.width(),j=t===!0?B:z,q=t===!0?z:B,H=t===!0?R:C,L=t===!0?C:R;if("both"===o)return!!l&&p>=q&&j>=d&&m>=L&&H>=w;if("vertical"===o)return!!l&&p>=q&&j>=d;if("horizontal"===o)return!!l&&m>=L&&H>=w}}}}(jQuery); diff --git a/ModernDeck/sources/moderndeck.css b/ModernDeck/sources/moderndeck.css index 0d0fe11f..8f271f75 100644 --- a/ModernDeck/sources/moderndeck.css +++ b/ModernDeck/sources/moderndeck.css @@ -2,7 +2,7 @@ moderndeck.css - ModernDeck 6.5.2 [codename Enlightenment] + ModernDeck 7 [codename Liberty] Copyright 2014-2019 dangered wolf Released under the MIT Licence @@ -10,11 +10,34 @@ */ +/* stylelint-disable */ @import "cssextensions/coredefinitions.css"; -@import "cssextensions/spinner.css"; @import "cssextensions/superclasses.css"; @import "cssextensions/marginclasses.css"; -/*@import "cssextensions/btdsupport.css";*/ +/* stylelint-enable */ + +:root { + --columnSize:328px; + --avatarSize:48px; + --navDrawerBackground:rgba(100,100,100,.4); + --loginBackgroundColor:#263238; + --lightShadow:rgba(17,17,17,.1); + --contextMenuShadow:rgba(0,0,0,.23); + --thickerShadow:rgba(0,0,0,.4); + --composeShadow:rgba(17,17,17,.5); + --columnShadow:rgba(17,17,17,.25); + --avatarHoverShadow:rgba(17,17,17,.475); + --avatarActiveShadow:rgba(17,17,17,.95); + --genericDropShadow:rgba(17,17,17,.25); + --modalDropShadow:rgba(17,17,17,.6); + --retweetColor:#13B33F; + --likeColor:#e91e63; + --rootWhiteColor:#fff; + --rootLightGreyColor:#eee; + --rootBlackColor:#000; + --animationTiming:cubic-bezier(.19,1,.22,1); + --defaultFontOrder:Roboto,"Noto Sans Alphabet","Noto Sans","Noto Sans CJK","Noto Sans CJK JP","Noto Sans CJK KR","Noto Sans CJK SC","Noto Sans CJK TC","Noto Sans JP","Noto Sans KR","Noto Sans SC","Noto Sans TC" +} /* LOADING SCREEN, DO NOT MERGE, MOVE, OR REMOVE */ @@ -22,120 +45,141 @@ img.spinner-centered { display:none } -body { - background:#263238!important +body,body.signin-sheet-present { + background:var(--loginBackgroundColor) } /* Animation Keyframes */ @keyframes moreTweetsButtonDown { - 0% {opacity:1;top:-40px} - 60% {opacity:1;top:25px} - 100% {top:20px} + 0% {opacity:1;top:-35px} + 60% {opacity:1;top:30px} + 100% {top:25px} } + @keyframes socialProofPop { 0% {opacity:0;margin-top:100px} 100% {opacity:1;margin-top:0} } + @keyframes windowDown { - 0% {opacity:.5;transform:scale(1.125,1.125)} + 0% {opacity:0.5;transform:scale(1.125,1.125)} 100% {opacity:1;transform:scale(1,1)} } + @keyframes windowSlider { - 0% {opacity:.5;margin-left:-700px} + 0% {opacity:0.5;margin-left:-700px} 100% {opacity:1;margin-left:0} } + @keyframes menuDown { 0% {opacity:0;margin-top:-38px} 100% {opacity:1;margin-top:-18px} } + @keyframes menuDownLogin { 0% {opacity:0;margin-top:-20px} 100% {opacity:1;margin-top:10px} } + @keyframes menuDownLarge { 0% {opacity:0;margin-top:-40px} 100% {opacity:1;margin-top:0} } + @keyframes contextMenuDown { 0% {opacity:0;margin-top:-28px} 100% {opacity:1;margin-top:-18px} } + @keyframes leftPopoverDown { 0% {opacity:0;margin-top:-15px} 100% {opacity:1;margin-top:5px} } + @keyframes rightPopoverDown { 0% {opacity:0;top:-85px} 100% {opacity:1;top:-60px} } + @keyframes calendarMenuDown { - 0% {opacity:0;margin-top:-40px} - 100% {opacity:1;margin-top:-15px} + 0% {opacity:0;margin-top:-21px} + 100% {opacity:1;margin-top:4px} } + @keyframes mediaDown { 0% {opacity:0;margin-top:-198px} 100% {opacity:1;margin-top:15px} } + @keyframes menuUp { 0% {opacity:0;bottom:-50px} 100% {opacity:1;bottom:0} } + @keyframes menuUpRelative { 0% {opacity:0;margin-top:20px} 100% {opacity:1;margin-top:0} } -@keyframes settingsColumnSlide { - 0% {opacity:0;margin-left:60px} - 100% {opacity:1;margin-right:0} -} + @keyframes profileSlide { 0% {opacity:0;margin-left:-160px} 100% {opacity:1;margin-left:0} } + @keyframes columnStreamItemSlide { 0% {opacity:0;margin-left:160px} 100% {opacity:1;margin-left:0} } + @keyframes tweetIncoming { 0% {opacity:0;border-radius:99px 99px 0 0;margin-top:100px;overflow:hidden} 100% {opacity:1;border-radius:0 0 0 0;margin-top:6px;overflow:hidden} } + @keyframes tweetIncomingTimeline { 0% {opacity:0;margin-top:-50px} 20% {opacity:0} 100% {opacity:1;margin-top:0} } + @keyframes tweetIncomingUp { 0% {opacity:0;transform:translate3d(0,-100px,0)} 100% {opacity:1;transform:translate3d(0,0,0)} } + @keyframes fadeIn { 0% {opacity:0} 100% {opacity:1} } + @keyframes fadeOut { 0% {opacity:1} 100% {opacity:0} } + @keyframes columnFlyin { 0% {top:200%} 100% {top:0} } + @keyframes popIn { 0% {transform:scale(0)} 100% {transform:scale(1)} } + @keyframes leftSpin { 0% {transform:rotate(130deg)} 50% {transform:rotate(-5deg)} 100% {transform:rotate(130deg)} } + @keyframes rightSpin { 0% {transform:rotate(-130deg)} 50% {transform:rotate(5deg)} 100% {transform:rotate(-130deg)} } + @keyframes fillUnfillRotate { 12.5% {transform:rotate(135deg)} 25% {transform:rotate(270deg)} @@ -144,30 +188,36 @@ body { 62.5% {transform:rotate(675deg)} 75% {transform:rotate(810deg)} 87.5% {transform:rotate(945deg)} - 100% {transform:rotate(1080deg)} + 100% {transform:rotate(1080deg)} } + @keyframes containerRotate { to {transform:rotate(360deg)} } + @keyframes indeterminate { 0% {left:-35%;right:100%} 60% {left:100%;right:-90%} 100% {left:100%;right:-90%} } + @keyframes indeterminateShort { 0% {left:-200%;right:100%} 60% {left:107%;right:-8%} 100% {left:107%;right:-8%} } + @keyframes mediaSlideUp { 0% {bottom:-60px} - 100% {bottom:-16px} + 100% {bottom:-20px} } + @keyframes dontTouchMe { 0% {transform:scale(1) rotate(0deg)} 50% {transform:scale(1.05) rotateX(120deg);filter:grayscale(100%)} 100% {transform:scale(1)} } + @keyframes colourDemo { 0% {background:#F44336} 9% {background:#FF5722} @@ -183,6 +233,21 @@ body { 100% {background:#F44336} } +@keyframes colourDemoText { + 0% {color:#F44336} + 9% {color:#FF5722} + 18% {color:#FFC107} + 27% {color:#4CAF50} + 36% {color:#009688} + 45% {color:#2196F3} + 54% {color:#00BCD4} + 63% {color:#673AB7} + 72% {color:#E91E63} + 81% {color:#555} + 90% {color:#000} + 100% {color:#F44336} +} + @keyframes feather-notification-list-show { 0% {display:none;opacity:0;transform:translateY(50%)} 1% {display:block} @@ -196,36 +261,23 @@ body { .account-remove-check-open .account-remove-check, .contributor-row[data-state="confirmRemove"] .contributor-confirm-remove, .contributor-row[data-state="settings"] .contributor-settings { - animation:windowDown .2s cubic-bezier(.19,1,.22,1)!important -} - -.mdl.med-fullpanel, -.typeahead-dropdown.is-hidden, -.is-shifted-1 .column-panel:nth-child(n+2), -.is-shifted-2 .column-detail-level-2, -.is-shifted-2 .column-panel:nth-child(n+3), -.popover.is-hidden, -.js-message-detail>.stream-item, -.tweet-detail-wrapper .stream-item, -.js-modal[style="display: none;"], -.typeahead[style="display: none;"] { - animation:none + animation:windowDown 0.2s var(--animationTiming)!important } .overlay.mtd-modal-window-fade-out, .dropdown-menu.mtd-dropdown-fade-out, .accs-header { - animation:fadeOut .2s cubic-bezier(.19,1,.22,1) + animation:fadeOut 0.2s var(--animationTiming) } .mtd-dropdown-fade-out { animation-fill-mode:both; - pointer-events:none; + pointer-events:none } .js-dropdown, .js-popover { - animation:fadeIn .3s cubic-bezier(.19,1,.22,1) + animation:fadeIn 0.3s var(--animationTiming) } .is-actionable, @@ -269,7 +321,134 @@ a.js-create-list, .js-inline-compose-add-image, .more-tweets-btn, .inline-reply { - transition:.25s all cubic-bezier(.19,1,.22,1) + transition:0.25s all var(--animationTiming) +} + +html { + font-family:var(--defaultFontOrder) +} + +.preloader-wrapper { + display:inline-block; + position:relative; + width:48px; + height:48px; + box-sizing:border-box; + animation:containerRotate 1.568s linear infinite +} + +.med-embeditem>.preloader-wrapper { + top:50%; + position:absolute; + margin-top:-20px +} + +.column-loading-placeholder>.preloader-wrapper { + left:50%; + margin-left:-20px; + margin-top:20px +} + +.chirp-container>.preloader-wrapper { + margin-bottom:50px; + margin-top:50px; + left:50%; + margin-left:-20px +} + +.preloader-wrapper.small { + width:36px; + height:36px +} + +.preloader-wrapper.tiny { + width:20px; + height:20px +} + +.preloader-wrapper.big { + width:64px; + height:64px +} + +body.scroll-v .spinner-layer { + border-color:#26a69a +} + +.spinner-layer { + position:absolute; + box-sizing:border-box; + width:100%; + height:100%; + opacity:1; + animation:fillUnfillRotate 5.332s cubic-bezier(.4,0,.2,1) infinite both +} + +.gap-patch { + position:absolute; + top:0; + left:45%; + width:10%; + height:100%; + overflow:hidden; + border-color:inherit; + display:none; + box-sizing:border-box +} + +.gap-patch .circle { + box-sizing:border-box; + width:1000%; + left:-450% +} + +.circle-clipper { + display:inline-block; + position:relative; + width:50%; + height:100%; + overflow:hidden; + text-align:center; + box-sizing:border-box; + border-color:inherit +} + +.circle-clipper .circle { + width:200%; + height:100%; + border-width:5px; + border-color:inherit; + border-style:solid; + border-bottom-color:transparent; + border-radius:50%; + box-sizing:inherit; + animation:none; + position:absolute; + top:0; + right:0; + bottom:0 +} + +.tiny .circle-clipper .circle { + border-width:3px +} + +.circle-clipper.left .circle { + left:0; + border-right-color:transparent; + transform:rotate(129deg); + animation:leftSpin 1.333s cubic-bezier(.4,0,.2,1) infinite both +} + +.circle-clipper.right .circle { + left:-100%; + border-left-color:transparent; + transform:rotate(-129deg); + animation:rightSpin 1.333s cubic-bezier(.4,0,.2,1) infinite both +} + +#spinnerContainer { + animation:containerRotate 1.568s linear infinite,fadeOut 0.4s cubic-bezier(.4,0,.2,1) } .application { @@ -294,7 +473,7 @@ a.js-create-list, } .account-inline .username,.is-narrow-columns .media-sensitive,.account-stats .txt-base-smallest { - font-size:12px + font-size:0.75rem } .txt-capitalize { @@ -310,14 +489,15 @@ a.js-create-list, } html.scroll-v { - overflow-y:hidden + overflow-y:hidden; + -webkit-app-region:no-drag } .scroll-h { overflow-x:auto } -.keyboard-shortcut-list-modal::-webkit-scrollbar,.mdl.s-profile::-webkit-scrollbar,.scroll-styled-v::-webkit-scrollbar,.scroll-v::-webkit-scrollbar,.lst-launcher::-webkit-scrollbar,.mtd-nav-drawer::-webkit-scrollbar,.emoji-container>div::-webkit-scrollbar,.emoji-container::-webkit-scrollbar { +.mdl:not(.s-tall-fixed)::-webkit-scrollbar,.keyboard-shortcut-list-modal::-webkit-scrollbar,.mdl.s-profile::-webkit-scrollbar,.scroll-styled-v::-webkit-scrollbar,.scroll-v::-webkit-scrollbar,.lst-launcher::-webkit-scrollbar,.mtd-nav-drawer::-webkit-scrollbar,.emoji-container>div::-webkit-scrollbar,.emoji-container::-webkit-scrollbar { width:10px; pointer-events:all } @@ -327,14 +507,14 @@ html.scroll-v { pointer-events:all } -.keyboard-shortcut-list-modal::-moz-scrollbar,.mdl.s-profile::-moz-scrollbar,.scroll-styled-v::-moz-scrollbar,.scroll-v::-moz-scrollbar,.lst-launcher::-moz-scrollbar,.mtd-nav-drawer::-moz-scrollbar,.emoji-container>div::-moz-scrollbar,.emoji-container::-moz-scrollbar { - width:10px; - pointer-events:all +.antiscroll-inner::-webkit-scrollbar { + width:0; + height:0 } -.scroll-styled-h::-moz-scrollbar,.scroll-h::-moz-scrollbar { - height:10px; - pointer-events:all +.antiscroll-inner::-moz-scrollbar { + width:0; + height:0 } .antiscroll-inner { @@ -347,28 +527,13 @@ html.scroll-v { overflow-x:hidden!important } -.antiscroll-inner::-webkit-scrollbar { - width:0; - height:0 -} - -.antiscroll-inner::scrollbar { - width:0; - height:0 -} - -.antiscroll-inner::-moz-scrollbar { - width:0; - height:0 -} - .antiscroll-scrollbar { z-index:6; background:rgba(255,255,255,.2); border-radius:7px; position:absolute; opacity:0; - transition:.3s opacity + transition:0.3s opacity } .antiscroll-scrollbar-horizontal { @@ -456,10 +621,9 @@ html.scroll-v { } .s-with-reply,.column-scroller,.column-content,.column-options { - transition:top .15s cubic-bezier(.19,1,.22,1) + transition:top .15s var(--animationTiming) } - .s-extended { margin-top:37px; top:98px @@ -484,7 +648,24 @@ html.scroll-v { .account-link>.nbfc { overflow:hidden; margin-top:0; - padding:5px 30px 0 5px + padding:5px 0 0 calc((var(--avatarSize)/48) * 5) +} + +.js-card-container { + margin-left:var(--avatarSize); + height:auto!important +} + +.js-card-container[style="height: 150px;"],.js-card-container[style="height: 150px;"]>div,.js-card-container[style="height: 150px;"]>div>div,.js-card-container[style="height: 150px;"]>div>div>iframe { + height:270px!important +} + +.js-card-container[style="height: 270px;"],.js-card-container[style="height: 270px;"]>div,.js-card-container[style="height: 270px;"]>div>div,.js-card-container[style="height: 270px;"]>div>div>iframe { + height:270px!important +} + +.tweet-detail-wrapper .js-card-container { + margin-left:0 } .quoted-tweet .account-link>.nbfc,.tweet.txt-mute .account-link>.nbfc,.padding-al.bg-color-twitter-white.br--3,.tweet-message .account-link>.nbfc,.contributor-settings-role>.radio,.compose-reply-tweet .tweet-text,.js-dropdown-content>ul,.tweet-message .tweet-text,.quoted-tweet .tweet-text,.tweet-detail-wrapper .tweet-text.margin-b--10 { @@ -511,7 +692,7 @@ html.scroll-v { position:relative } -.is-vishidden,.is-narrow-columns .is-vishidden-narrow,.is-medium-columns .is-vishidden-medium,.is-wide-columns .is-vishidden-wide { +.is-vishidden { position:absolute!important; width:1px; height:1px; @@ -519,14 +700,6 @@ html.scroll-v { clip:rect(1px,1px,1px,1px) } -.is-narrow-columns .is-visshown-narrow,.is-medium-columns .is-visshown-medium,.is-wide-columns .is-visshown-wide { - position:static!important; - width:auto; - height:auto; - overflow:visible; - clip:auto -} - .is-invisible { visibility:hidden!important } @@ -553,14 +726,14 @@ html.scroll-v { .with-drop-shadow:after { z-index:6; - content:' '; + content:" "; position:absolute; height:10px; bottom:-10px; left:0; width:100%; - box-shadow:inset 0 2px 1px rgba(17,17,17,.25); - border-top:1px solid rgba(17,17,17,.25) + box-shadow:inset 0 2px 1px var(--genericDropShadow); + border-top:1px solid var(--genericDropShadow) } .pin-top-only,.pin-top { @@ -636,15 +809,84 @@ i { width:1em } -.icon:before,.Icon:before,.search-input-control:before { - font-weight:400; +.dropdown-menu a[data-action]:before, +.icon:before, +.Icon:before, +.search-input-control:before, +.sprite-gif:before, +.material-icon +{ font-style:normal; -webkit-font-smoothing:antialiased; - font-family:"Material" + text-rendering:optimizeLegibility; + -moz-osx-font-smoothing:grayscale; + letter-spacing:normal; + word-wrap:normal; + direction:ltr; + white-space:nowrap; + font-feature-settings:"liga" +} + +.icon:before,.Icon:before,.search-input-control:before,.sprite-gif:before { + font-weight:400; + font-family:Material +} + +.material-icon { + font-family:Material; + font-size:24px; + display:inline-block; + line-height:1; +} + +.mtd-icon-very-large { + font-size:40px +} + +.pull-right>button[data-action="quote"]:before, +.pull-right>button[data-action="retweet"]:before, +.icon-twitter-bird:before, +.icon-logout:before, +.icon-tweetdeck:before, +.icon-moderndeck:before, +.icon-mtdmini:before, +.icon-hashtag:before, +.icon-settings:before, +.icon-td-settings:before, +.icon-retweet:before, +.icon-retweet-filled:before, +.icon-mtd-settings:before, +.icon-btd:before, +.icon-btd-settings:before, +.icon-quote-tweet:before, +.icon-compose-grid:before, +.icon-user-switch:before, +.icon-compose-minigrid:before, +.icon-compose-list:before, +.Icon--quote-tweet:before, +.Icon--compose-grid:before, +.Icon--user-switch:before, +.Icon--compose-minigrid:before, +.Icon--compose-list:before +{ + font-family:MD +} + +.sprite-gif:before { + content:"\e908"; + text-shadow:0 1px 7px rgba(0,0,0,1),0 1px 7px rgba(0,0,0,1); + font-size:32px!important; + color:var(--rootWhiteColor)!important; + z-index:99 } -.pull-right>button[data-action="quote"]:before,.pull-right>button[data-action="retweet"]:before,.icon-twitter-bird:before,.icon-logout:before,.icon-tweetdeck:before,.icon-moderndeck:before,.icon-mtdmini:before,.icon-hashtag:before,.icon-settings:before,.icon-td-settings:before,.icon-retweet:before,.icon-retweet-filled:before,.icon-mtd-settings:before,.icon-btd:before,.icon-btd-settings:before,.icon-quote-tweet:before,.icon-compose-grid:before,.icon-user-switch:before,.icon-user-switch:before,.icon-compose-minigrid:before,.icon-compose-list:before,.Icon--quote-tweet:before,.Icon--compose-grid:before,.Icon--user-switch:before,.Icon--user-switch:before,.Icon--compose-minigrid:before,.Icon--compose-list:before { - font-family:"MD" +.sprite-gif { + font-size:32px!important; + text-shadow:0 30px 70px var(--columnShadow),0 30px 70px var(--columnShadow); + z-index:99; + display:block; + position:absolute; + margin-bottom:30px } .Icon--circleError:before { @@ -655,6 +897,14 @@ i { content:"\e24d" } +.mtd-icon-update:before { + content:"\e923" +} + +.mtd-icon-disconnected:before { + content:"\e1da" +} + .mtd-icon-arrow-down:before { content:"\e313" } @@ -683,40 +933,40 @@ i { content:"\f004" } -.icon-hashtag:before,.Icon--hashtag:before { +.icon-hashtag:before, +.Icon--hashtag:before { content:"\f005" } -.icon-settings:before,.Icon--settings:before { +.icon-settings:before, +.Icon--settings:before { content:"\f006" } -.icon-td-settings:before,.Icon--td-settings:before { - content:"\f007" -} - -.icon-retweet:before,.icon-retweet-filled:before,.Icon--retweet:before,.Icon--retweet-filled:before, -.pull-right>button[data-action="retweet"]:before { +.icon-retweet:before, +.icon-retweet-filled:before, +.Icon--retweet:before, +.Icon--retweet-filled:before, +.pull-right>button[data-action="retweet"]:before +{ content:"\f008" } .icon-mtd-settings:before { - content:"\f009" -} - -.icon-btd:before { - content:"\f00a" -} - -.icon-btd-settings:before { - content:"\f00c" + content:"\f006" } -.icon-quote-tweet:before,.Icon--quote-tweet:before,.pull-right>button[data-action="quote"]:before { +.icon-quote-tweet:before, +.Icon--quote-tweet:before, +.pull-right>button[data-action="quote"]:before { content:"\f01d" } -.icon-compose-grid:before,.icon-user-switch:before,.icon-user-switch:before,.Icon--compose-grid:before,.Icon--user-switch:before,.Icon--user-switch:before { +.icon-user-switch:before, +.icon-compose-grid:before, +.Icon--compose-grid:before, +.Icon--user-switch:before +{ content:"\f03a" } @@ -733,7 +983,7 @@ i { } .icon-favorite:before,.icon-heart-filled:before,.icon-heart:before,.Icon--favorite:before,.Icon--heart-filled:before,.Icon--heart:before { - content:"\e838" + content:"\e87d" } .icon-mention:before,.Icon--mention:before { @@ -753,12 +1003,30 @@ i { } .other-replies:before { - font-size:12px; - font-family:"Material"; + font-size:0.75rem; + font-family:Material; padding-top:4px; margin-top:4px } +input[type="checkbox"]:before,.icon-toggle-off:before,.Icon--toggle-off:before { + content:"\e835"; + font-family:Material +} + +input[type="checkbox"]:checked:before,.icon-toggle-on:before,.Icon--toggle-on:before { + content:"\e834" +} + +input[type="radio"]:before { + content:"\e836"; + font-family:Material +} + +input[type="radio"]:checked:before { + content:"\e837" +} + .icon-drafts:before,.Icon--drafts:before { content:"\e151" } @@ -781,14 +1049,14 @@ i { .tweet-button .icon-compose:after,.tweet-button .Icon--compose:after,.btn-back:before,.icon-arrow-l:before,.Icon--caretLeft:before { content:"\e5c4"; - font-family:"Material" + font-family:Material } .icon-protected:before,.Icon--protected:before { content:"\e897" } -.icon-list:before,.Icon--list:before { +.icon-list:before,.Icon--list:before,.icon-list-filled:before,.Icon--list-filled:before { content:"\e896" } @@ -808,7 +1076,7 @@ i { content:"\e8e5" } -.icon-trending:before,.Icon--trending:before { +.icon-trending:before,.Icon--trending:before,.icon-magic-search:before,.Icon--magic-search:before,.icon-lightning:before,.Icon--lightning:before { content:"\e80e" } @@ -836,6 +1104,10 @@ i { content:"\e8b5" } +.is-new>.icon-dot:before { + content:"\e031" +} + .icon-user:before,.Icon--user:before { content:"\e7fd" } @@ -858,7 +1130,7 @@ span[data-testid="trendMovement"] .icon-pointer-d:before,span[data-testid="trend .js-send-button:after { content:"\e163"; - font-family:"Material"; + font-family:Material; font-size:24px } @@ -878,6 +1150,10 @@ span[data-testid="trendMovement"] .icon-pointer-d:before,span[data-testid="trend content:"\e14b" } +.Icon--circleError:before,.icon-circle-error:before { + content:"\e000" +} + .icon-constrain:before,.Icon--constrain:before { content:"\e8aa" } @@ -924,13 +1200,17 @@ span[data-testid="trendMovement"] .icon-pointer-d:before,span[data-testid="trend .recent-search-clear.list-item-last span:before,.icon-clear-timeline:before,.Icon--clear-timeline:before { content:"\e0b8"; - font-family:"Material" + font-family:Material } .icon-custom-timeline:before,.Icon--custom-timeline:before { content:"\e431" } +.icon-user-add-account:before,.Icon--user-add-account:before { + content:"\e8d3" +} + .icon-user-team-mgr:before,.Icon--user-team-mgr:before { content:"\e7fb" } @@ -955,15 +1235,55 @@ span[data-testid="trendMovement"] .icon-pointer-d:before,span[data-testid="trend content:"\e87f" } +.Icon--calendar:before,.icon-calendar:before { + content:"\e916" +} + +.icon-attachment:before,.Icon--attachment:before { + content:"\e2bc" +} + +.icon-play:before,.Icon--play:before { + content:"\e037" +} + +.icon-pause:before,.Icon--pause:before { + content:"\e034" +} + +.icon-bookmark:before,.Icon--bookmark:before { + content:"\e866" +} + +.icon-play-badge:before,.Icon--play-badge:before { + content:"\e038" +} + +.icon-gif-badge:before,.Icon--gif-badge:before { + content:"\e908" +} + +.icon-speaker:before,.Icon--speaker:before { + content:"\e32d" +} + +.icon-sound:before,.Icon--sound:before { + content:"\e050" +} + +.icon-sound-off:before,.Icon--sound-off:before { + content:"\e04f" +} + .mtd-icon-arrow-down { - transition:transform 0.3s cubic-bezier(.19,1,.22,1) + transition:transform 0.3s var(--animationTiming) } .mtd-nav-activator:before { font-style:normal; font-size:26px; font-weight:400; - font-family:"Material"; + font-family:Material; content:"\e5d2" } @@ -977,10 +1297,6 @@ span[data-testid="trendMovement"] .icon-pointer-d:before,span[data-testid="trend margin-right:12px } -.is-new>.icon-dot:before { - content:"\e031" -} - .icon-xsmall,.Icon--xsmall { font-size:8px } @@ -1087,7 +1403,7 @@ span[data-testid="trendMovement"] .icon-pointer-d:before,span[data-testid="trend } .sprite:before { - font-family:"Material"; + font-family:Material; font-style:normal } @@ -1096,7 +1412,8 @@ span[data-testid="trendMovement"] .icon-pointer-d:before,span[data-testid="trend } .sprite-verified-mini { - width:16px + width:16px; + font-size:1.25rem } .sprite-close { @@ -1155,7 +1472,7 @@ button:hover,button:focus,.Button--primary { .btn-positive,.btn-positive-alt,.btn-fav.s-favorited,.s-following .follow-btn { z-index:5; - transition:.25s all cubic-bezier(.19,1,.22,1),.4s background cubic-bezier(.19,1,.22,1),.4s width cubic-bezier(.19,1,.22,1)!important + transition:0.25s all var(--animationTiming),.4s background var(--animationTiming),.4s width var(--animationTiming)!important } .btn-options-tray i { @@ -1192,6 +1509,10 @@ button:hover,button:focus,.Button--primary { min-width:100px } +.follow-btn { + transition:background-color 0.15s +} + .btn-fav { position:relative; width:100px; @@ -1201,7 +1522,6 @@ button:hover,button:focus,.Button--primary { .s-not-following .follow-text { display:block; - margin-left:-2px; margin-top:7px } @@ -1244,23 +1564,16 @@ button:hover,button:focus,.Button--primary { z-index:1; display:inline-block; overflow:hidden; - width:328px; + width:var(--columnSize); height:100%; font-size:0.9rem; white-space:normal; - border-right:0!important + border-right:0!important; + top:0 } .column:not(.draggable-dragging) { - animation:windowSlider 1s cubic-bezier(.19,1,.22,1)!important -} - -.is-narrow-columns .column { - width:283px -} - -.is-wide-columns .column { - width:352px + animation:windowSlider 1s var(--animationTiming)!important } .column-temp { @@ -1273,12 +1586,22 @@ button:hover,button:focus,.Button--primary { height:100%; margin:auto; position:relative; - transition:transform .25s cubic-bezier(.19,1,.22,1) + transition:transform 0.25s var(--animationTiming); + top:0 +} + +.drawer[data-drawer="compose"] .column-holder { + top:-54px +} + +.mdl-inner .column-holder { + top:0; + overflow:hidden } .mdl-inner .column-content { width:100%!important; - top:0 + height:auto } .column-content { @@ -1305,41 +1628,50 @@ button:hover,button:focus,.Button--primary { } .add-by-url { - height:48px + height:48px; + bottom:0; + position:absolute; + right:0; + left:0 } .column-panel { position:absolute; z-index:5; width:100%; - transition:opacity cubic-bezier(.19,1,.22,1) .5s,left cubic-bezier(.19,1,.22,1) .5s + transition:opacity var(--animationTiming) 0.5s,left var(--animationTiming) 0.5s } -.is-shifted-1 .column-panel:not(.column-detail), -.is-shifted-2 .column-panel:not(.column-detail-level-2):not(.column-detail), -.is-shifted-2 .column-holder .column-panel:nth-child(2) { +.is-shifted-1 .column-panel:not(.column-detail), .is-shifted-2 .column-holder .column-panel:nth-child(2) { pointer-events:none; left:-50% } - -.column-holder .column-panel:nth-child(2), -.is-shifted-1 .column-panel:nth-child(n+2), -.is-shifted-2 .column-detail-level-2, -.is-shifted-2 .column-panel:nth-child(n+3) { - transition:left cubic-bezier(.19,1,.22,1) .3s +.is-shifted-1 .column-panel:not(.column-detail) .scroll-v, +.is-shifted-2 .column-panel:not(.column-detail-level-2) .scroll-v, +.is-shifted-2 .column-panel:not(.column-detail-level-2) a, +.is-shifted-2 .column-holder .column-panel:nth-child(2) .scroll-v { + pointer-events:none!important } .modal-content { - height:100%; width:100%; - margin-left:0!important + position:absolute; + margin-left:0!important; + bottom:0; + top:74px +} + +.prf .modal-content { + top:0 } .column-scroller { width:100%; overflow-x:hidden; - opacity:1!important + opacity:1!important; + overflow-y:auto; + max-height:100% } .column-holder .column-panel:nth-child(2) { @@ -1359,11 +1691,16 @@ button:hover,button:focus,.Button--primary { overflow:hidden } +.mdl-inner .column-panel { + top:0!important +} + .is-shifted-1 .column-panel:nth-child(n+2),.is-shifted-2 .column-detail-level-2,.is-shifted-2 .column-panel:nth-child(n+3) { width:100%; pointer-events:all; left:0; - opacity:1 + opacity:1; + top:0; } .is-shifted-1 .column-detail-level-2 { @@ -1387,23 +1724,15 @@ button:hover,button:focus,.Button--primary { height:54px; padding:0 10px; line-height:50px; - box-shadow:0 1px 10px rgba(17,17,17,.35); + box-shadow:0 1px 10px var(--columnShadow); z-index:7; pointer-events:all; - width:328px -} - -.is-narrow-columns .column-header,.is-narrow-columns .column-header-temp { - width:283px -} - -.is-wide-columns .column-header,.is-wide-columns .column-header-temp { - width:353px + width:var(--columnSize) } .column-temp .column-header,.column-header-temp { width:100%; - box-shadow:0 5px 10px 0 rgba(17,17,17,.25) + box-shadow:0 5px 10px 0 var(--columnShadow) } .column-title { @@ -1424,11 +1753,11 @@ button:hover,button:focus,.Button--primary { width:90% } -.column-header .txt-mute { +.column-header .txt-mute,.column-header-title>.attribution { font-weight:400; font-size:13px; display:inline; - color:rgba(255,255,255,.74); + opacity:0.75; text-overflow:ellipsis; overflow:hidden; margin-left:5px @@ -1445,7 +1774,7 @@ button:hover,button:focus,.Button--primary { width:65%; left:0; margin-left:40px; - border-color:#fff; + border-color:var(--rootWhiteColor); text-align:center; font-weight:500; padding-bottom:0; @@ -1497,7 +1826,7 @@ a:active .column-title-back .icon:after { margin-top:-7px; transform:scale(1); opacity:1; - transition:.07s all,.08s margin + transition:0.07s all,.08s margin } a .column-title-back .icon:after { @@ -1510,10 +1839,14 @@ a .column-title-back .icon:after { margin-top:-10px; z-index:5; transform:scale(.5); - transition:.5s all,.15s opacity; + transition:0.5s all,.15s opacity; opacity:0 } +.is-options-open .column-settings-link { + box-shadow:0 -3px 6px var(--genericDropShadow) +} + .column-title-back .column-heading { display:none } @@ -1528,13 +1861,14 @@ a .column-title-back .icon:after { } .js-item-launch .column-type-icon { + font-size:48px; text-align:center } .column-header-link { position:absolute; top:5px; - bottom:-1px; + bottom:3px; padding:0 4px; font-size:13px } @@ -1554,7 +1888,7 @@ a .column-title-back .icon:after { .column-settings-link { right:5px; - transition:.3s background + transition:0.3s background } .mark-all-read-link { @@ -1574,35 +1908,42 @@ a .column-title-back .icon:after { height:21px!important; box-sizing:border-box; overflow:hidden; - box-shadow:0 1px 10px rgba(0,0,0,.25); + box-shadow:0 1px 10px var(--contextMenuShadow); z-index:7; position:relative; + padding:8px; padding-top:0!important } +.column-message i { + padding:5px; + font-size:16px +} + .facet-content i { - opacity:.75; + opacity:0.75; top:0 } .js-column-options { - box-shadow:0 3px 6px rgba(17,17,17,.1); - overflow:visible; + box-shadow:0 3px 6px var(--lightShadow); + overflow:hidden; pointer-events:all; - transition:height .25s cubic-bezier(.19,1,.22,1); + transition:height 0.25s var(--animationTiming); z-index:13 } -.js-column-options.scroll-none { - height:0 +.is-column-options-animating { + transition:height 0.25s var(--animationTiming) } .column-options .button-tray { - text-align:right + text-align:right; + width:100% } .button-tray:before,.button-tray:after { - content:''; + content:""; width:100% } @@ -1631,7 +1972,12 @@ a .column-title-back .icon:after { height:0 } -.contributor-row[data-state="settings"],.contributor-row[data-state="confirmAdd"],.contributor-row[data-state="confirmAdd-added"],.contributor-row[data-state="confirmRemove-removing"],.contributor-row[data-state="confirmDeadmin"],.contributor-row[data-state="confirmDeadmin"] { +.contributor-row[data-state="settings"], +.contributor-row[data-state="confirmAdd"], +.contributor-row[data-state="confirmAdd-added"], +.contributor-row[data-state="confirmRemove-removing"], +.contributor-row[data-state="confirmDeadmin"] +{ top:-1px } @@ -1646,7 +1992,7 @@ a .column-title-back .icon:after { .chirp-container { opacity:1!important; - transition:padding-top .3s ease-in-out + transition:padding-top 0.3s ease-in-out } .draggable-dragging .chirp-container { @@ -1655,16 +2001,16 @@ a .column-title-back .icon:after { .stream-item { margin-top:3px; - transition:.3s box-shadow,.3s background + transition:0.3s box-shadow,.3s background } .column:not(.draggable-dragging) .stream-item,.js-tweet-translation,.replies-after .stream-item.is-actionable { - animation:tweetIncomingTimeline .4s cubic-bezier(.19,1,.22,1); - transition:box-shadow .25s cubic-bezier(.19,1,.22,1),transform .25s cubic-bezier(.19,1,.22,1),left .35s cubic-bezier(.19,1,.22,1) + animation:tweetIncomingTimeline 0.4s var(--animationTiming); + transition:background 0.25s var(--animationTiming),box-shadow 0.25s var(--animationTiming),transform 0.25s var(--animationTiming),left .35s var(--animationTiming) } .js-column-social-proof .stream-item { - animation:columnStreamItemSlide .5s cubic-bezier(.19,1,.22,1) + animation:columnStreamItemSlide 0.5s var(--animationTiming)!important } .item-box { @@ -1715,8 +2061,7 @@ a .column-title-back .icon:after { } .list-item:hover:not(.is-selected) { - background:transparent; - color:#444 + background:transparent } .item-img-24 { @@ -1746,9 +2091,9 @@ a .column-title-back .icon:after { } .avatar { - width:48px; - height:48px; - border-radius:24px + width:var(--avatarSize); + height:var(--avatarSize); + border-radius:50% } .list-account .avatar { @@ -1762,78 +2107,102 @@ a .column-title-back .icon:after { } .avatar:hover { - box-shadow:0 5px 10px rgba(17,17,17,.475) + box-shadow:0 5px 10px var(--avatarHoverShadow) } .avatar:active { - opacity:.7; - box-shadow:0 5px 10px rgba(17,17,17,.95) + opacity:0.7; + box-shadow:0 5px 10px var(--avatarActiveShadow) } .avatar.size16 { width:16px; height:16px; - border-radius:8px + border-radius:50% } -.avatar.size24 { +.avatar.size24,.compose-message-recipient>img { width:24px; height:24px; - border-radius:12px + border-radius:50% } .avatar.size30 { width:30px; height:30px; - border-radius:15px + border-radius:50% } .avatar.size32 { width:32px; height:32px; - border-radius:16px + border-radius:50% } .avatar.size36 { width:36px; height:36px; - border-radius:18px + border-radius:50% } .avatar.size48 { - width:48px; - height:48px; - border-radius:24px + width:var(--avatarSize); + height:var(--avatarSize); + border-radius:50% } .avatar.size73 { width:73px; height:73px; - border-radius:36.5px + border-radius:50% } .avatar.size90 { width:90px; height:90px; - border-radius:45px + border-radius:50% } .avatar.size128 { width:128px; height:128px; - border-radius:64px + border-radius:50% } .avatar.frm-justify-row { margin:0 2px } +.account-summary-text>a.account-link { + margin-left:6px; + margin-top:17px +} + +.user-results .account-summary-text>a.account-link { + margin-left:6px; + margin-top:-10px +} + +.js-column-social-proof .account-summary-text>a.account-link,.tweet-detail-wrapper .account-summary-text>a.account-link { + margin-top:-12px +} + +.account-summary-text>div>a.account-link { + margin-top:14px; + margin-left:2px +} + +.padding-axl.flex.flex-row.flex-align--center .account-summary-text>div>a.account-link { + margin-top:-1px; + margin-left:-3px +} + .account-link,.account-link:hover,.account-link:active { max-width:100% } .account-link .username { - font-size:12px!important + font-size:0.75rem!important } .account-inline { @@ -1846,22 +2215,10 @@ a .column-title-back .icon:after { .account-inline .fullname,.account-inline .username,.account-link.txt-bold { line-height:1; text-overflow:ellipsis; - font-size:14px; + font-size:0.9rem; margin-left:3px } -.fullname-badged-container,.fullname-badged { - padding-right:18px -} - -.fullname-badged:before { - content:' '; - position:absolute; - right:0; - top:50%; - margin-top:-8px -} - .media-item { width:100%; height:auto; @@ -1871,17 +2228,27 @@ a .column-title-back .icon:after { margin-top:10px; background-repeat:no-repeat; background-position:50% 50%; - background-size:cover + background-size:cover; + box-shadow:0 2px 5px 0 rgba(0,0,0,.16),0 2px 5px 0 var(--contextMenuShadow) +} + +.media-item:active { + box-shadow:0 10px 10px 0 var(--contextMenuShadow),0 6px 3px 0 var(--contextMenuShadow)!important; + opacity:0.7 +} + +.media-item:hover { + box-shadow:0 10px 10px 0 var(--contextMenuShadow) } .media-size-large-height::after,.media-item.media-size-large::after { - content:' '; + content:" "; position:absolute; top:0; width:100%; height:10px; background-size:100%; - background-image:linear-gradient(rgba(17,17,17,.25),rgba(17,17,17,0)) + background-image:linear-gradient(var(--genericDropShadow),rgba(17,17,17,0)) } .media-sensitive { @@ -1898,7 +2265,7 @@ a .column-title-back .icon:after { } .media-sensitive,.facet-subtitle { - transition:opacity .25s cubic-bezier(.19,1,.22,1) + transition:opacity 0.25s var(--animationTiming) } .media-sensitive-detail { @@ -1934,7 +2301,6 @@ a .column-title-back .icon:after { } .media-size-medium { - width:101%; min-height:80px; max-height:116px; border-radius:2px @@ -1952,45 +2318,10 @@ div.media-size-small { } .media-size-large,.media-size-large-height { - max-height:310px; - min-height:150px -} - -.is-narrow-columns .media-size-large { - max-height:270px; + max-height:360px; min-height:150px } -.is-narrow-columns .media-size-medium { - max-height:96px; - min-height:50px -} - -.is-narrow-columns .media-size-small { - max-height:64px; - min-height:30px -} - -.is-wide-columns .media-size-large { - max-height:350px; - min-height:160px; - overflow:hidden -} - -.is-wide-columns .media-size-medium { - max-height:180px; - min-height:136px -} - -.is-wide-columns .media-size-small { - max-height:130px; - min-height:91px -} - -.is-wide-columns .tweet-actions,.l-no-txtarea .mdl-buttonbar,.media-item:first-child { - margin-top:0 -} - .video-overlay { position:absolute; left:50%; @@ -2023,6 +2354,7 @@ div.media-size-small { } .media-image { + box-shadow:0 1px 1.5px 0 rgba(0,0,0,.12),0 1px 1px 0 var(--contextMenuShadow); background:no-repeat center center; background-size:cover } @@ -2088,15 +2420,23 @@ div.media-size-small { display:block } +.tweet-action { + max-width:50px +} + .is-conversation>.tweet-body { margin-left:-15px; margin-top:-15px!important } +.conversation-more { + padding:10px +} + .emoji { width:1em; height:1em; - padding:0 .5em 0 .1em; + padding:0 .2em 0 .1em; vertical-align:-.1em } @@ -2106,7 +2446,7 @@ div.media-size-small { .tweet-timestamp { line-height:1em; - font-size:12px; + font-size:0.75rem; padding-left:1px; padding-right:1px; text-overflow:clip; @@ -2114,10 +2454,18 @@ div.media-size-small { } .tweet-context .nbfc>a { - font-size:14px; + font-size:0.82rem; margin-left:-3px } +.tweet-context .nbfc { + padding-top:2px +} + +.tweet-context { + padding-bottom:0!important +} + .tweet-avatar { margin-top:2px; margin-bottom:2px @@ -2133,7 +2481,6 @@ div.media-size-small { margin-left:auto; margin-right:auto; width:auto!important; - max-width:250px; margin-top:15px; padding-top:0!important; min-height:12px @@ -2150,31 +2497,27 @@ div.media-size-small { margin-left:-20px; margin-bottom:-15px; margin-top:9px; - width:200px!important + width:700px!important; + max-width:700px } .tweet-actions>li { float:left; - margin:0 0 0 8%!important + margin:0 0 0 calc(var(--columnSize) / 8)!important; /* / 10 */ + display:flex } .tweet-action .icon,.tweet-detail-action i { display:block; + font-size:20px; line-height:20px; height:20px; width:20px } .tweet-action .icon-favorite,.tweet-detail-action .icon-favorite,.tweet-action .icon-close,.tweet-detail-action .icon-close,.tweet-action .icon-move,.tweet-detail-action .icon-move { - font-size:17px -} - -.tweet-action .icon-favorite,.tweet-detail-action .icon-favorite,.tweet-action .icon-more,.tweet-detail-action .icon-more { - margin-top:1px -} - -.tweet-footer { - margin-top:10px + font-size:18px; + line-height:20px } .js-mediatable .tweet-footer { @@ -2194,7 +2537,8 @@ div.media-size-small { .tweet-translation-attribution-text { font-size:12px; - line-height:12px + line-height:12px; + padding-bottom:10px } .tweet-detail .tweet-translation-text { @@ -2209,7 +2553,7 @@ div.media-size-small { border:0; font-size:0.9em; margin-top:10px; - box-shadow:0 3px 7px rgba(17,17,17,.5); + box-shadow:0 3px 7px var(--composeShadow); overflow:hidden } @@ -2226,7 +2570,7 @@ div.media-size-small { } .tweet-detail-wrapper,.ovl,.overlay { - animation:fadeIn .25s cubic-bezier(.19,1,.22,1) + animation:fadeIn 0.25s var(--animationTiming) } .tweet-detail-media { @@ -2248,24 +2592,18 @@ div.media-size-small { .tweet-detail-action-item { display:inline-block; - vertical-align:auto; pointer-events:none; margin-top:8px; text-align:center; max-height:20px; - width:20%; - margin-left:2%!important + width:20.1%; + margin-left:6%!important } .social-proof-for-tweet-title { padding-top:30px!important } - -.mdl .social-proof-for-tweet-title { - padding-top:75px!important -} - .is-unread a { color:rgba(255,255,255,.5) } @@ -2300,7 +2638,7 @@ div.media-size-small { } .rpl textarea { - transition:height .25s cubic-bezier(.19,1,.22,1) + transition:height 0.25s var(--animationTiming) } .rpl input { @@ -2332,14 +2670,17 @@ div.media-size-small { .js-add-column:active, .spinner-button-icon-spinner { - transition:.1s all + transition:0.1s all +} + +.inline-reply .spinner-button-icon-spinner { + margin:6px 0 0 13px } .app-header { height:40px; width:100%; background:rgba(0,0,0,.1); - /* z-index:5; */ pointer-events:none } @@ -2354,7 +2695,8 @@ div.media-size-small { top:40px; margin-left:0; overflow:visible; - transition:transform .2s cubic-bezier(.19,1,.22,1) + transition:transform 0.2s var(--animationTiming); + -webkit-app-region:no-drag } .is-chrome .app-columns-container { @@ -2383,7 +2725,7 @@ div.media-size-small { } .app-nav-link,.app-search-fake i { - animation:fadeIn .4s forwards cubic-bezier(.19,1,.22,1) + animation:fadeIn 0.4s forwards var(--animationTiming) } .app-nav-link i { @@ -2422,9 +2764,9 @@ div.media-size-small { margin-left:45px; border-radius:32px; transform:scale(0); - animation:popIn .5s forwards cubic-bezier(.19,1,.22,1); + animation:popIn 0.5s forwards var(--animationTiming); z-index:5; - transition:all .2s cubic-bezier(.19,1,.22,1) + transition:all 0.2s var(--animationTiming) } .tweet-button>i { @@ -2440,6 +2782,7 @@ div.media-size-small { height:26px; position:absolute; transform:scale(.85,.85); + -moz-transform:scale(.85,.85) translateY(-3px)!important; text-align:center } @@ -2453,7 +2796,7 @@ div.media-size-small { z-index:7; background-size:26px 26px; font-style:normal; - transition:all .25s cubic-bezier(.19,1,.22,1); + transition:all 0.25s var(--animationTiming); opacity:0 } @@ -2464,8 +2807,8 @@ div.media-size-small { .tweet-button.is-hidden>i:before { margin-left:108px; - transition:all .25s cubic-bezier(.19,1,.22,1); - transform:scale(1) + transition:all 0.25s var(--animationTiming); + transform:scale(1)!important } .attach-compose-buttons { @@ -2548,7 +2891,7 @@ div.media-size-small { .message-banner { position:relative; text-align:center; - color:#fff!important; + color:var(--rootWhiteColor)!important; background:transparent!important } @@ -2556,7 +2899,7 @@ div.media-size-small { position:absolute; left:5px; margin-top:10px!important; - top:.45em; + top:0.45em; font-size:16px; margin-left:10px } @@ -2582,7 +2925,7 @@ div.media-size-small { left:0; right:0; border-radius:0; - animation:menuDownLarge .4s cubic-bezier(.19,1,.22,1); + animation:menuDownLarge 0.4s var(--animationTiming); width:auto } @@ -2620,7 +2963,7 @@ div.media-size-small { position:relative; box-shadow:none; padding-bottom:8px; - transition:.5s background cubic-bezier(.19,1,.22,1),.7s box-shadow cubic-bezier(.19,1,.22,1),.2s transform cubic-bezier(.19,1,.22,1) + transition:0.5s all var(--animationTiming) } .facet-type.is-active,.facet-type:active { @@ -2688,7 +3031,7 @@ div.media-size-small { .tooltip,.Tooltip { position:absolute; - z-index:6; + z-index:31; padding:5px; font-size:12px; pointer-events:none @@ -2699,7 +3042,7 @@ div.media-size-small { padding:5px 8px 4px; text-align:center; border-radius:2px; - animation:windowDown .3s cubic-bezier(.19,1,.22,1) + animation:windowDown 0.3s var(--animationTiming) } .character-count,.character-count-compose { @@ -2731,7 +3074,7 @@ div.media-size-small { .numbered-badge { position:absolute; - top:9px; + bottom:0; right:-2px; padding:2px 3px; visibility:hidden; @@ -2739,7 +3082,7 @@ div.media-size-small { font-weight:400; font-style:normal; margin-top:0; - font-size:12px; + font-size:13px; width:1px; height:3px; margin-right:5px; @@ -2783,11 +3126,11 @@ div.media-size-small { opacity:1; margin-top:0; overflow-y:hidden; - transition:.2s opacity,0s margin-top!important + transition:0.2s opacity,0s margin-top!important } .ovl-plain:before,.ovl:before,.overlay:before { - content:''; + content:""; display:inline-block; height:100% } @@ -2809,7 +3152,7 @@ div.media-size-small { width:580px; text-align:left; opacity:1; - box-shadow:0 30px 70px rgba(17,17,17,.6); + box-shadow:0 30px 70px var(--modalDropShadow); height:100%; border-radius:0; left:0; @@ -2818,7 +3161,7 @@ div.media-size-small { position:absolute; margin:0; max-height:100%; - animation:windowSlider .3s cubic-bezier(.19,1,.22,1) + animation:windowSlider 0.3s var(--animationTiming) } .Modal { @@ -2836,7 +3179,7 @@ div.media-size-small { z-index:100; pointer-events:none; opacity:0; - transition:opacity .2s ease-in-out + transition:opacity 0.2s ease-in-out } .Modal.is-visible { @@ -2870,7 +3213,7 @@ div.media-size-small { } .mdl-header-title { - font-size:18px; + font-size:16px; text-align:left; margin-top:0; z-index:6; @@ -2890,10 +3233,17 @@ div.media-size-small { } .accs-header { - margin-left:auto; margin-right:auto; text-align:center; - font-weight:normal + font-weight:400; + z-index:6; + position:absolute; + width:100%; + margin-left:-15px; + padding-top:10px; + height:40px; + margin-top:0; + padding-left:15px } .mdl-inner { @@ -2927,11 +3277,6 @@ div.media-size-small { color:inherit } -.mdl-placeholder>*::-moz-selection { - background:transparent; - color:inherit -} - .mdl-column { display:inline-block; font-size:0.9rem; @@ -2951,15 +3296,16 @@ div.media-size-small { .mdl-column-med { width:260px; border-radius:0; - z-index:5 + z-index:4 } .mdl-column-rhs { - width:385px; + width:var(--columnSize); bottom:0; top:-70px; position:absolute; - height:auto + height:auto; + z-index:5 } .s-fluid .mdl-inner,.s-fluid-height .mdl-inner { @@ -3014,7 +3360,8 @@ div.media-size-small { .lst-launcher .attribution { font-size:13px; - display:inline + display:inline; + padding-top:30px } .lst-launcher span { @@ -3051,23 +3398,6 @@ div.media-size-small { bottom:5px } -.settings-modal .js-header-title:before { - content:"TweetDeck "; - font-size:18px -} - -.mdl-links { - position:fixed; - bottom:0; - left:0; - width:500px; - color:transparent; - font-size:12px; - padding-bottom:15px; - text-align:center; - opacity:0.5 -} - .cmp textarea { width:100%; height:85px; @@ -3125,16 +3455,6 @@ div.media-size-small { padding-bottom:50px } -.accs-header { - z-index:6; - position:absolute; - width:100%; - margin-left:-15px; - padding-top:10px; - height:40px; - margin-top:0 -} - .accs-header>h3 { font-size:18px; text-align:left; @@ -3162,7 +3482,7 @@ div.media-size-small { -webkit-filter:grayscale(100%) brightness(100%); -moz-filter:grayscale(100%) brightness(100%); filter:grayscale(100%) brightness(100%); - opacity:.5; + opacity:0.5; border-radius:57px } @@ -3205,7 +3525,7 @@ div.media-size-small { margin-top:8px; left:27%; width:65%; - transition:margin .25s cubic-bezier(.19,1,.22,1) + transition:margin 0.25s var(--animationTiming) } .application .compose-title { @@ -3220,7 +3540,6 @@ div.media-size-small { .compose-accounts { padding-top:20px; padding-left:19px; - /* padding-right:8px; */ margin-bottom:11px; display:inline-block } @@ -3239,7 +3558,8 @@ div.media-size-small { left:0; right:0; top:50px; - transition:.5s all cubic-bezier(.19,1,.22,1) + transition:0.5s all var(--animationTiming); + -webkit-app-region:no-drag } .compose-text-container { @@ -3248,7 +3568,7 @@ div.media-size-small { height:170px; padding:0!important; padding-top:10px!important; - box-shadow:0 3px 7px rgba(17,17,17,.5); + box-shadow:0 3px 7px var(--composeShadow); border-radius:4px; margin-top:10px } @@ -3257,7 +3577,7 @@ div.media-size-small { height:130px!important; resize:none; border:0; - font-size:0.9rem; + font-size:14px; text-overflow:ellipsis; padding-left:15px!important; padding-right:15px!important; @@ -3266,8 +3586,8 @@ div.media-size-small { } .compose-send-button-success { - margin-left:-21px; - margin-top:-17px; + margin-left:6px; + margin-top:0; z-index:5; font-size:30px; opacity:1 @@ -3286,7 +3606,7 @@ div.media-size-small { width:220px; margin-left:10px; z-index:5; - box-shadow:0 3px 7px rgba(17,17,17,.5); + box-shadow:0 3px 7px var(--composeShadow); opacity:1; margin-top:0 } @@ -3307,16 +3627,20 @@ div.media-size-small { top:4px; left:4px; border:0; - background:#eee + background:var(--rootLightGreyColor) } .compose-message-account { line-height:1; height:32px; - padding-left:32px; border:0; font-size:1rem; - box-shadow:0 3px 7px rgba(17,17,17,.5) + box-shadow:none; + width:215px; + padding:8px 0 3px 10px; + margin-bottom:3px; + margin-top:-3px; + margin-left:8px } .is-selected.compose-account:focus .compose-account-img,.compose-account:focus,.compose-message-account:focus { @@ -3339,7 +3663,7 @@ div.media-size-small { line-height:0; padding:0; padding-bottom:10px; - box-shadow:0 3px 7px rgba(17,17,17,.5); + box-shadow:0 3px 7px var(--composeShadow); border-radius:4px; overflow:hidden } @@ -3370,8 +3694,8 @@ div.media-size-small { margin-bottom:5px; -webkit-filter:grayscale(100%); filter:grayscale(100%); - opacity:.35; - /* z-index:10; */ + opacity:0.35; + -webkit-app-region:no-drag } .is-list .compose-account { @@ -3390,13 +3714,13 @@ div.media-size-small { } .account-selector-grid-mode { - opacity:.3; + opacity:0.3; padding:5px; margin-right:3px!important } .is-selected.account-selector-grid-mode { - opacity:.7; + opacity:0.7; z-index:3 } @@ -3404,10 +3728,10 @@ div.media-size-small { cursor:default; height:180px; margin-top:8px; - width:100%; box-sizing:border-box; - box-shadow:0 2px 8px #000; - margin-left:5px + box-shadow:0 2px 8px var(--rootBlackColor); + margin-left:-7px; + margin-bottom:5px } .inline-reply .compose-text-container { @@ -3416,7 +3740,8 @@ div.media-size-small { height:180px; border-radius:0; margin-left:-1px; - margin-top:0 + margin-top:0; + padding-top:0!important } .inline-reply>.padding-axl { @@ -3429,7 +3754,8 @@ div.media-size-small { } .js-inline-reply .pull-right[for] { - margin-top:-80px + margin-top:-50px; + margin-right:-30px } .js-inline-compose-pop,.js-inline-compose-close,.js-inline-compose-add-image { @@ -3453,7 +3779,7 @@ div.media-size-small { .inline-reply .compose-text { padding:10px; - height:120px!important; + height:100px!important; width:100% } @@ -3467,14 +3793,7 @@ div.media-size-small { box-sizing:border-box; background:transparent; line-height:18px; - color:#888; - cursor:text; - border-bottom:3px solid #00BCD4 -} - -.detail-view-inline-text { - color:#697F8C; - border-bottom:3px solid #00838F + cursor:text } .is-inline-inactive { @@ -3490,7 +3809,7 @@ div.media-size-small { } .med-fullpanel:hover .btn-media { - opacity:.5 + opacity:0.5 } .med-fullpanel .embed,.med-fullpanel .embed a { @@ -3514,7 +3833,7 @@ div.media-size-small { box-shadow:0 3px 6px rgba(0,0,0,.7); border-radius:4px 4px 0 0; pointer-events:all; - animation:mediaSlideUp .4s cubic-bezier(.19,1,.22,1) + animation:mediaSlideUp 0.4s var(--animationTiming) } .med-embeditem { @@ -3535,7 +3854,7 @@ div.media-size-small { padding-bottom:0; opacity:1!important; pointer-events:all; - animation:windowDown .4s cubic-bezier(.19,1,.22,1) + animation:windowDown 0.4s var(--animationTiming) } .s-shorter { @@ -3581,7 +3900,7 @@ a:hover .icn-button-next { } .embed-modal { - transition:height .4s + transition:height 0.4s } .embed-modal .mdl-inner { @@ -3617,6 +3936,7 @@ a:hover .icn-button-next { .keyboard-shortcut-list-modal { max-width:480px; + min-height:550px!important; overflow-y:auto; overflow-x:hidden } @@ -3629,7 +3949,8 @@ a:hover .icn-button-next { padding:6px 10px; border-radius:3px; box-shadow:0 3px 5px rgba(0,0,0,.5); - margin-right:3px + margin-right:3px; + font-family:inherit } .keyboard-shortcut-list { @@ -3646,7 +3967,8 @@ a:hover .icn-button-next { } .keyboard-shortcut-definition { - margin:0 0 25px + margin:0 0 25px; + line-height:17px } .keyboard-shortcut-title { @@ -3670,7 +3992,7 @@ a:hover .icn-button-next { display:block } -.list-link,.list-subtitle,.list-account,.list-listmember,.list-subtitle,.list-filter { +.list-link,.list-subtitle,.list-account,.list-listmember,.list-filter { padding:11px 12px } @@ -3813,8 +4135,11 @@ textarea,.l-fullwidth { width:100% } -.mdl-col-settings form.frm fieldset { - animation:settingsColumnSlide .35s cubic-bezier(.19,1,.22,1) +.mtd-textarea { + height:200px; + font-family:RobotoMono; + tab-size:43px; + -moz-tab-size:43px /* https://bugzilla.mozilla.org/show_bug.cgi?id=737785 */ } .frm-input-3-digit { @@ -3864,7 +4189,7 @@ input[type="checkbox"],input[type="radio"] { -moz-appearance:none; font-size:24px; padding:0; - margin-right:10px; + margin-right:11px; display:block; text-align:left; position:absolute; @@ -3875,24 +4200,6 @@ input[type="checkbox"]:active { opacity:0.5 } -input[type="checkbox"]:before,.icon-toggle-off:before,.Icon--toggle-off:before { - content:"\e835"; - font-family:"Material" -} - -input[type="checkbox"]:checked:before,.icon-toggle-on:before,.Icon--toggle-on:before { - content:"\e834" -} - -input[type="radio"]:before { - content:"\e836"; - font-family:"Material" -} - -input[type="radio"]:checked:before { - content:"\e837" -} - .input-with-icon { padding-right:25px } @@ -3913,8 +4220,7 @@ input[type="radio"]:checked:before { } .checkbox,.radio { - min-height:18px; - padding-left:18px + min-height:18px } .checkbox input[type="checkbox"],.radio input[type="radio"] { @@ -4035,7 +4341,7 @@ input[type="radio"]:checked:before { margin-top:-5px; position:absolute; left:0; - color:#fff + color:var(--rootWhiteColor) } .js-search-results-container .js-add-column:before { @@ -4116,7 +4422,12 @@ input[type="radio"]:checked:before { #calhead { height:22px; - padding:2px 0 + padding:12px 5px; + font-size:13px; + font-weight:500; + margin-left:auto; + margin-right:auto; + text-align:center } #calnext,#calprev { @@ -4135,7 +4446,7 @@ input[type="radio"]:checked:before { } .calweek,#caltitle { - animation:menuDownLarge .3s cubic-bezier(.19,1,.22,1); + animation:menuDownLarge 0.3s var(--animationTiming); clear:left } @@ -4188,15 +4499,6 @@ input[type="radio"]:checked:before { font-weight:300 } -#calhead { - padding:12px 5px; - font-size:13px; - font-weight:500; - margin-left:auto; - margin-right:auto; - text-align:center -} - .cal .nav-group { position:absolute; top:15px; @@ -4218,7 +4520,7 @@ input[type="radio"]:checked:before { background-size:100%!important; background-repeat:no-repeat!important; text-align:center; - text-shadow:0 1px 5px #000; + text-shadow:0 2px 6px var(--rootBlackColor); overflow:hidden } @@ -4269,7 +4571,7 @@ input[type="radio"]:checked:before { padding:4px; margin:20px 0 6px; transform:scale(1); - transition:.2s transform + transition:0.2s transform } .prf-meta { @@ -4321,20 +4623,16 @@ input[type="radio"]:checked:before { .prf-stats>li { display:inline-block; zoom:1; - padding-right:0 + padding-right:0; + width:100%; + border-top:2px solid rgba(0,0,0,.1); + box-sizing:border-box } .prf-stats>li:first-child { margin-top:50px } -.prf-stats>li { - display:inline-block; - width:100%; - border-top:2px solid rgba(0,0,0,.1); - box-sizing:border-box -} - .prf-stats>li>a { padding:15px 0 15px 10px; width:100%; @@ -4411,13 +4709,13 @@ input[type="radio"]:checked:before { line-height:18px; text-align:left; position:absolute; - top:328px + top:var(--columnSize) } .social-proof-names,.social-proof-names a { - overflow:hidden; - white-space:nowrap; - height:15px; + overflow:hidden; + white-space:nowrap; + height:15px; vertical-align:middle } @@ -4429,7 +4727,7 @@ input[type="radio"]:checked:before { .social-proof-animating { height:0; - transition:height .2s; + transition:height 0.2s; overflow-y:hidden } @@ -4475,7 +4773,7 @@ input[type="radio"]:checked:before { .lst-modal { border-radius:2px; - box-shadow:0 3px 7px rgba(17,17,17,.5); + box-shadow:0 3px 7px var(--composeShadow); display:none; position:absolute; z-index:5 @@ -4539,13 +4837,13 @@ input[type="radio"]:checked:before { font-weight:400; font-size:14.5px; line-height:18px; - box-shadow:0 2px 5px 0 rgba(0,0,0,.23); + box-shadow:0 2px 5px 0 var(--contextMenuShadow); margin-top:-18px; text-indent:0; width:220px; margin-right:-10px; border-radius:2px; - animation:menuDown .3s cubic-bezier(.19,1,.22,1); + animation:menuDown 0.3s var(--animationTiming) } .dropdown-menu li:not(.drp-h-divider),.dropdown-menu menuitem:not(.drp-h-divider) { @@ -4565,7 +4863,7 @@ input[type="radio"]:checked:before { top:auto; bottom:0; right:0; - animation:menuUp .3s cubic-bezier(.19,1,.22,1) + animation:menuUp 0.3s var(--animationTiming) } .ovl-trap { @@ -4579,8 +4877,8 @@ input[type="radio"]:checked:before { box-shadow:0 2px 5px rgba(117,117,117,.8); margin-left:auto; pointer-events:all; - animation:leftPopoverDown .25s cubic-bezier(.19,1,.22,1); - transition:opacity .25s cubic-bezier(.19,1,.22,1),max-height .2s cubic-bezier(.19,1,.22,1) + animation:leftPopoverDown 0.25s var(--animationTiming); + transition:opacity 0.25s var(--animationTiming),max-height 0.2s var(--animationTiming) } .popover-content { @@ -4590,9 +4888,13 @@ input[type="radio"]:checked:before { .popover-position-rt { z-index:6; left:65px; - top:-60px; + top:-45px; right:0; - animation:rightPopoverDown .25s cubic-bezier(.19,1,.22,1) + animation:rightPopoverDown 0.25s var(--animationTiming) +} + +.mtd-js-app:not(.mtd-app) .popover-position-rt { + top:-60px } .card-holder { @@ -4602,7 +4904,7 @@ input[type="radio"]:checked:before { .card-site-avatar { position:relative; - top:.15em + top:0.15em } .fluid-width-video-wrapper { @@ -4622,20 +4924,16 @@ input[type="radio"]:checked:before { .card-player,.card-image { max-width:100%; border:0; - box-shadow:0 2px 5px 0 rgba(0,0,0,.16),0 2px 5px 0 rgba(0,0,0,.23) -} - -.media-image { - box-shadow:0 1px 1.5px 0 rgba(0,0,0,.12),0 1px 1px 0 rgba(0,0,0,.24) + box-shadow:0 2px 5px 0 rgba(0,0,0,.16),0 2px 5px 0 var(--contextMenuShadow) } .card-image:active,.media-image:active { - box-shadow:0 10px 10px 0 rgba(0,0,0,.2714),0 6px 3px 0 rgba(0,0,0,.328571); - opacity:.7 + box-shadow:0 10px 10px 0 rgba(0,0,0,.15),0 6px 3px 0 var(--contextMenuShadow); + opacity:0.7 } .media-image:hover,.card-image:hover { - box-shadow:0 10px 10px 0 rgba(0,0,0,.19),0 6px 3px 0 rgba(0,0,0,.23) + box-shadow:0 2px 15px 0 var(--contextMenuShadow) } .form-legend { @@ -4647,58 +4945,59 @@ input[type="radio"]:checked:before { font-size:32px } -.media-item { - box-shadow:0 2px 5px 0 rgba(0,0,0,.16),0 2px 5px 0 rgba(0,0,0,.23) -} - -.media-item:active { - box-shadow:0 10px 10px 0 rgba(0,0,0,.22),0 6px 3px 0 rgba(0,0,0,.328)!important; - opacity:.7 -} - -.media-item:hover { - box-shadow:0 10px 10px 0 rgba(0,0,0,.19),0 6px 3px 0 rgba(0,0,0,.23) -} - .media-item, .tweet-button>i { - transition:.3s all + transition:0.3s all } .column-navigator { position:absolute; - top:0; + top:-4px; left:100px; bottom:0; right:0; overflow:visible; opacity:0; - animation:fadeIn .4s forwards 4s cubic-bezier(.19,1,.22,1) + animation:fadeIn 0.4s forwards 4s var(--animationTiming) +} + +.mtd-js-app .column-navigator { + top:0 } .column-navigator, .app-search-fake, .tweet-button>i:before, .attach-compose-buttons .tweet-button { - transition:.15s all cubic-bezier(.19,1,.22,1) + transition:0.15s all var(--animationTiming) } .column-nav-link { position:relative; - height:100%; - color:rgba(255,255,255,.5); + height:30px; + color:rgba(255,255,255,.5)!important; font-size:18px; cursor:pointer; overflow:visible; transform:none!important; box-shadow:none; top:0; - padding-top:0!important + padding:0!important; + margin-top:4px; + display:flex } .column-nav-link, .numbered-badge { - transition:.3s all 2s + transition:0.3s all 2s +} + +.mtd-app .column-nav-link, +.mtd-app .numbered-badge, +.mtd-column-nav-always-visible .column-nav-link, +.mtd-column-nav-always-visible .numbered-badge { + transition:0.3s all 0s; + transition-delay:0s!important } .column-nav-link:focus,.column-nav-link:active { @@ -4710,30 +5009,35 @@ input[type="radio"]:checked:before { .column-nav-item { position:relative!important; width:0; - top:0!important; + top:4px!important; box-sizing:border-box; color:rgba(255,255,255,.75); - display:inline-block; + display:inline-flex; left:initial!important; box-shadow:none!important; background:none; transform:translate3d(15px,0,0); opacity:0; - height:50%; - transition:.4s all cubic-bezier(.19,1,.22,1) 1s + height:30px; + transition:0.4s all var(--animationTiming) 1s +} + +.mtd-app .column-nav-item { + top:-2px!important } .column-navigator:hover .column-nav-item,.column-nav-item.is-new { opacity:1; width:40px; - transition:.2s all cubic-bezier(.19,1,.22,1),.4s transform + transition:0.2s all var(--animationTiming),.4s transform } .column-nav-link i { - padding-left:1px; - vertical-align:-.6em; + padding-left:16px; + vertical-align:4px; padding-right:5px; - padding-top:5px + padding-top:5px; + display:block } .column-nav-link .attribution { @@ -4784,9 +5088,8 @@ input[type="radio"]:checked:before { padding-left:5px; margin-bottom:15px; margin-left:10px!important; - margin-top:-15px!important; width:235px; - animation:calendarMenuDown .3s cubic-bezier(.19,1,.22,1) + animation:calendarMenuDown 0.3s var(--animationTiming) } .js-column-detail .column-title-back:after,.js-tweet-results .column-title-back:after,.js-tweet-social-proof-back:after { @@ -4822,7 +5125,7 @@ input[type="radio"]:checked:before { } .prf-card-inner>a>span.prf-img>.avatar { - box-shadow:0 15px 40px rgba(17,17,17,.4) + box-shadow:0 15px 40px var(--avatarHoverShadow) } .prf-card-inner .location.txt-ellipsis strong { @@ -4832,7 +5135,7 @@ input[type="radio"]:checked:before { .js-add-image-button,.js-tweet-button,.js-dm-button,.js-schedule-button { width:35px!important; height:35px; - margin-top:-90px; + margin-top:-59px; background:transparent!important; box-shadow:none!important } @@ -4888,7 +5191,7 @@ input[type="radio"]:checked:before { padding-right:2px } -.facet-type .control-group select,.facet-type .control-group input:not([type=checkbox]) { +.facet-type .control-group select,.facet-type .control-group input:not([type="checkbox"]) { width:55%; float:right; display:block; @@ -4971,36 +5274,37 @@ input[type="radio"]:checked:before { } .js-account-manager-container { - box-shadow:0 15px 40px rgba(17,17,17,.4); + z-index:6; + box-shadow:0 15px 40px var(--avatarHoverShadow); overflow:hidden } -a[rel=user]:active,.card-holder a[rel=mediaPreview]:active { +a[rel="user"]:active,.card-holder a[rel="mediaPreview"]:active { background:transparent!important } .is-unread .link-complex-target, .account-summary>a.obj-left.item-img, -a[rel=user]:active, -.card-holder a[rel=mediaPreview]:active, +a[rel="user"]:active, +.card-holder a[rel="mediaPreview"]:active, .tweet-action .icon,.tweet-detail-action i, .accs li, .accs .acc-selected, .compose-send-button-success, .compose-reply-tweet { - transition:.15s all + transition:0.15s all } -.card-holder a[rel=mediaPreview]:active { +.card-holder a[rel="mediaPreview"]:active { transform:none!important } .js-media-added { width:240px; margin-left:10px; - box-shadow:0 3px 7px rgba(17,17,17,.5); + box-shadow:0 3px 7px var(--composeShadow); margin-top:15px; - animation:mediaDown .825s cubic-bezier(.19,1,.22,1) + animation:mediaDown .825s var(--animationTiming) } .cal header span { @@ -5044,11 +5348,30 @@ a[rel=user]:active, .prf-header[style="background-image: url(https://ton.twimg.com/tweetdeck-web/web/assets/global/backgrounds/td_profile_empty.b902792cc4.jpg)"], .mtd-nd-header-image[style="background-image: url(https://ton.twimg.com/tweetdeck-web/web/assets/global/backgrounds/td_profile_empty.b902792cc4.jpg)"], -.prf-header[style="background-image: url(https://ton.twimg.com/tweetdeck-web/web/assets/global/backgrounds/td_profile_empty@2x.28d11b0d43.jpg)"], +.prf-header[style="background-image :url(https://ton.twimg.com/tweetdeck-web/web/assets/global/backgrounds/td_profile_empty@2x.28d11b0d43.jpg)"], .mtd-nd-header-image[style="background-image: url(https://ton.twimg.com/tweetdeck-web/web/assets/global/backgrounds/td_profile_empty@2x.28d11b0d43.jpg)"] { background-image:none!important } +.mdl.med-fullpanel, +.typeahead-dropdown.is-hidden, +.is-shifted-1 .column-panel:nth-child(n+2), +.is-shifted-2 .column-detail-level-2, +.is-shifted-2 .column-panel:nth-child(n+3), +.popover.is-hidden, +.js-message-detail>.stream-item, +.tweet-detail-wrapper .stream-item, +.typeahead[style="display: none;"] { + animation:none +} + +.js-modal[style="display: none;"] { + display:block!important; + margin-top:200%; + animation:fadeOut 0.2s forwards var(--animationTiming); + transition:margin-top 1s 0.2s!important +} + .hide-detail-view-inline .column-navigator { left:280px!important } @@ -5057,10 +5380,6 @@ a[rel=user]:active, margin-left:275px!important } -.tweet-action .icon,.tweet-detail-action i { - font-size:20px -} - .tweet-action .icon-retweet,.tweet-detail-action .icon-retweet { margin-right:3px } @@ -5106,7 +5425,7 @@ a[rel=user]:active, } .media-preview video { - box-shadow:0 3px 5px rgba(17,17,17,.3); + box-shadow:0 3px 5px var(--genericDropShadow); margin-top:0 } @@ -5116,14 +5435,17 @@ a[rel=user]:active, } .js-send-button { - margin-right:16px; + margin-right:25px; height:35px; width:35px; - font-size:0 + font-size:0; + padding-top:0; + float:right; + -moz-transform:translateX(-10px) } .drawer-header,.Panel-header { - box-shadow:0 1px 10px rgba(17,17,17,.35); + box-shadow:0 1px 10px var(--avatarHoverShadow); position:relative; height:53px } @@ -5145,7 +5467,7 @@ a[rel=user]:active, position:absolute; top:15px; left:10px; - line-height:.8 + line-height:0.8 } .tweet-button.is-hidden { @@ -5180,15 +5502,8 @@ a[rel=user]:active, margin-left:10px } -.js-modal[style="display: none;"] { - display:block!important; - margin-top:200%; - animation:fadeOut .2s forwards cubic-bezier(.19,1,.22,1); - transition:margin-top 1s .2s!important -} - .mtd-drawer-button { - transition:.15s all; + transition:0.15s all; top:5px; z-index:5 } @@ -5205,7 +5520,7 @@ a[rel=user]:active, transform:scale(1); opacity:1; pointer-events:none; - transition:.07s all,.08s margin + transition:0.07s all,.08s margin } .mtd-drawer-button:after { @@ -5220,7 +5535,7 @@ a[rel=user]:active, z-index:5; transform:scale(.5); opacity:0; - transition:.5s all,.15s opacity + transition:0.5s all,.15s opacity } .hide-detail-view-inline .mtd-drawer-button { @@ -5234,24 +5549,24 @@ a[rel=user]:active, height:100%; z-index:7; position:absolute; - box-shadow:0 15px 40px rgba(17,17,17,.4); - transition:.3s all cubic-bezier(.19,1,.22,1); + box-shadow:0 15px 40px var(--avatarHoverShadow); + transition:0.3s all var(--animationTiming); overflow-x:hidden; overflow-y:auto } .mtd-nav-drawer-hidden { margin-left:-320px; - transition:.4s all cubic-bezier(.19,1,.22,1) + transition:0.4s all var(--animationTiming) } .mtd-nav-drawer-background { position:absolute; z-index:5; - background:rgba(100,100,100,.4); + background:var(--navDrawerBackground); height:100%; width:100%; - transition:.3s all cubic-bezier(.19,1,.22,1); + transition:0.3s all var(--animationTiming); pointer-events:all } @@ -5281,7 +5596,7 @@ a[rel=user]:active, width:100%; margin-top:110px; text-align:center; - text-shadow:0 5px 40px #000; + text-shadow:0 5px 40px var(--rootBlackColor); font-size:16px } @@ -5307,7 +5622,7 @@ a[rel=user]:active, transform:none } -.mtd-settings-button { +.mtd-nav-first-button { margin-top:154px } @@ -5338,7 +5653,8 @@ a[rel=user]:active, .js-compose-message-recipient-container .js-typeahead-dropdown { left:10px; - z-index:5 + z-index:5; + padding-left:0 } .mdl-favorite-from-options .txt-r-deep-yellow { @@ -5350,23 +5666,34 @@ a[rel=user]:active, } .mtd-logo { - width:300px; - font-size:300px; + width:96px; + font-size:96px; line-height:1; - display:block; - margin:10px auto -100px auto + display:inline; + float:left } .mtd-about-title { - padding-top:70px; - padding-bottom:5px + display:inline-block; + position:relative; + padding:0; + vertical-align:middle; + float:left; + font-size:18px; + margin-top:16px; + text-align:left; + width:auto } .mtd-version-title { font-weight:400; - font-size:16px; - text-align:center; - padding-top:10px + font-size:14px; + text-align:left; + display:block; + position:relative; + padding-top:43px; + width:247px; + padding-left:96px } .edit-conversation-name { @@ -5381,7 +5708,7 @@ a[rel=user]:active, line-height:50px; opacity:0; pointer-events:none; - transition:all .25s cubic-bezier(.19,1,.22,1); + transition:all 0.25s var(--animationTiming); z-index:5 } @@ -5408,7 +5735,7 @@ a[rel=user]:active, } .column-content.column-dm-participants { - top:100px + top:120px } .more-tweets-btn-container.more-tweets-btn-container--hidden { @@ -5416,23 +5743,11 @@ a[rel=user]:active, z-index:0 } -#general_settings .obj-left:last-child b:after { - font-size:16px; - content:"Fonts" -} - #general_settings .control-group label.checkbox,#general_settings .control-group label.radio { - margin-left:48px; - margin-right:48px; + margin-left:30px; margin-bottom:4px } -.js-display-sensitive-media.checkbox:after { - font-size:15px; - content:"Show potentially sensitive media" -} - - .mdl .checkbox,.mdl .radio { display:block; pointer-events:all; @@ -5440,12 +5755,6 @@ a[rel=user]:active, vertical-align:bottom } -#link-shortening { - display:block; - top:15px; - position:relative -} - #add-filter { margin-left:auto; margin-right:auto; @@ -5462,10 +5771,6 @@ a[rel=user]:active, content:"Text " } -.mtd-mute-text-user:before { - content:"User " -} - .mtd-mute-text-source:before { content:"Source " } @@ -5486,7 +5791,7 @@ a[rel=user]:active, padding-right:30px!important; position:relative; width:200px; - padding-bottom:70px!important; + padding-bottom:60px!important; margin-top:0 } @@ -5503,13 +5808,13 @@ a[rel=user]:active, } .is-shifted-1 .column-panel:not(.column-detail):not(.column-detail-level-2) .column-header { - box-shadow:-6px 1px 10px rgba(17,17,17,.35) + box-shadow:-6px 1px 10px var(--avatarHoverShadow) } .lst-group .username { display:block; margin-top:2px; - font-size:.9em + font-size:0.9em } .gap-chirp-text { @@ -5532,7 +5837,7 @@ a[rel=user]:active, } .tweet-detail-wrapper .media-sensitive { - opacity:.99 + opacity:0.99 } .js-app-add-column { @@ -5561,10 +5866,10 @@ a[rel=user]:active, } .js-column-options .dropdown-menu { - margin-top:0; - left:0; - top:0; - animation:menuDown .4s cubic-bezier(.19,1,.22,1) + margin-bottom:6px; + bottom:0; + animation:menuUp 0.4s var(--animationTiming); + top:initial } .js-account-safeguard-checkbox { @@ -5611,7 +5916,7 @@ a[rel=user]:active, .more-tweets-btn,.tweet-button:not(.js-hide-drawer),.stream-item.is-actionable:hover,button.try-query,.Notification-inner { - box-shadow:0 2px 5px 0 rgba(0,0,0,.16),0 2px 5px 0 rgba(0,0,0,.23) + box-shadow:0 2px 5px 0 rgba(0,0,0,.16),0 2px 5px 0 var(--contextMenuShadow) } .mdl .more-tweets-btn { @@ -5619,7 +5924,7 @@ a[rel=user]:active, } .Notification-inner:hover,button.try-query:hover,button.try-query:active,.stream-item.is-actionable:active,.more-tweets-btn:active,.more-tweets-btn:hover,.more-tweets-btn:focus,.tweet-button:not(.js-hide-drawer):active,.tweet-button:not(.js-hide-drawer):focus,.tweet-button:not(.js-hide-drawer):hover { - box-shadow:0 2px 10px 0 rgba(0,0,0,.16),0 8px 10px 0 rgba(0,0,0,.23) + box-shadow:0 2px 10px 0 rgba(0,0,0,.16),0 8px 10px 0 var(--contextMenuShadow) } .more-tweets-btn:active { @@ -5628,24 +5933,24 @@ a[rel=user]:active, .more-tweets-btn i { font-size:1.3em; - line-height:.9 + line-height:0.9 } .more-tweets-btn-container--visible .more-tweets-btn,.more-tweets-btn-container--loading .more-tweets-btn { opacity:1; - top:20px; - animation:moreTweetsButtonDown .7s cubic-bezier(.55,0,.1,1) + top:25px; + animation:moreTweetsButtonDown 0.7s cubic-bezier(.55,0,.1,1) } .js-compose-message-recipient-container .typeahead-user-list { - animation:menuDown .225s cubic-bezier(.19,1,.22,1); + animation:menuDown .225s var(--animationTiming); width:240px } .compose-message-recipient-name { padding-left:30px!important; padding-top:5px; - color:#fff + color:var(--rootWhiteColor) } .compose-message-recipient { @@ -5657,38 +5962,24 @@ a[rel=user]:active, border-radius:12px } -.compose-message-account { - width:215px; - padding:0; - margin-bottom:3px; - margin-top:-3px; - padding-bottom:3px; - padding-left:10px; - margin-left:8px; - padding-top:8px -} - .js-compose-message-recipient-input-container { width:240px!important; - box-shadow:0 3px 7px rgba(17,17,17,.5); + box-shadow:0 3px 7px var(--composeShadow); transition:box-shadow 0.3s; padding-bottom:3px; border-radius:4px } .js-compose-message-recipient-input-container.is-focused { - box-shadow:0 6px 10px rgba(17,17,17,.5) -} - -.compose-message-account { - box-shadow:none + box-shadow:0 6px 10px var(--composeShadow) } .typeahead-dropdown { - top:70px; + top:55px; width:240px; overflow-x:hidden; - animation:menuUpRelative .325s cubic-bezier(.19,1,.22,1),fadeIn .325s cubic-bezier(.19,1,.22,1) + animation:menuUpRelative .325s var(--animationTiming),fadeIn .325s var(--animationTiming); + margin-top:0 } .dropdown-menu ul { @@ -5707,22 +5998,18 @@ a[rel=user]:active, } .js-column-back,.js-column-back:hover,.js-column-back:active,.js-column-back:focus { - background:transparent; + background:transparent!important; transform:none } .title-content .txt-mute { - color:rgba(255,255,255,.8) + opacity:0.8 } .add-participant .js-username-input.js-submittable-input { width:95% } -.column-content.column-dm-participants { - top:120px -} - .compose-media-grid-holder { padding-bottom:45px!important } @@ -5740,7 +6027,7 @@ a[rel=user]:active, } .tweet-detail-action-item.margin-ln { - margin-left:7%!important + margin-left:calc((var(--columnSize) / 12) - 35px)!important } .os-windows .js-column-detail .column-title-back:after { @@ -5748,9 +6035,11 @@ a[rel=user]:active, } @media (max-width:900px) { + .mdl.s-full { - width:90%; + width:90% } + } .js-column-detail .column-title-back:before { @@ -5792,20 +6081,15 @@ button.mtd-no-transform-case { position:relative; height:0; padding-left:8px; - overflow-y:hidden; - max-width:310px + overflow-y:hidden } .is-accordion-panel-animating { - transition:.3s box-shadow cubic-bezier(.19,1,.22,1),.2s height cubic-bezier(.19,1,.22,1) + transition:0.3s box-shadow var(--animationTiming),.2s height var(--animationTiming) } .is-expanded .accordion-panel { - height:inherit -} - -.column-nav-item.is-new .obj-left { - margin-top:-30px + height:auto } .lst-group li { @@ -5827,10 +6111,6 @@ button.mtd-no-transform-case { display:block } -.js-search .popover { - width:400px!important -} - .edit-conversation-name .btn { padding:5px; width:40px @@ -5841,7 +6121,7 @@ button.mtd-no-transform-case { } .txt-r-deep-gray { - opacity:.5; + opacity:0.5; color:inherit } @@ -5857,10 +6137,6 @@ button.mtd-no-transform-case { border-radius:4px } -.js-account-manager-container { - z-index:6 -} - .conversation-title a[rel="hashtag"] { display:none; margin-top:-50px; @@ -5880,7 +6156,7 @@ button.mtd-no-transform-case { opacity:0; margin-top:-20px; pointer-events:none; - transition:opacity .2s cubic-bezier(.19,1,.22,1),margin-top .2s cubic-bezier(.19,1,.22,1) + transition:opacity 0.2s var(--animationTiming),margin-top 0.2s var(--animationTiming) } .contributor-row[data-state="settings"] .contributor-settings-role,.contributor-row[data-state="settings"] .contributor-confirm-change,.contributor-row[data-state="closed"] .contributor-detail,.contributor-row[data-state="settings"] .contributor-remove { @@ -5899,10 +6175,19 @@ button.mtd-no-transform-case { margin-top:-48px; margin-left:-30px; transform:scale(1); - transition:.07s all,.08s margin; + transition:0.07s all,.08s margin; opacity:1 } +.js-team-invitations-container .drawer-header:active .drawer-header-title .icon:after { + margin-top:-23px; + margin-left:-41px +} + +.js-team-invitations-back { + margin-top:0 +} + .drawer-header .drawer-header-title .icon:after { content:" "; background:rgba(255,255,255,.2); @@ -5915,7 +6200,7 @@ button.mtd-no-transform-case { z-index:5; transform:scale(.5); opacity:0; - transition:.5s all,.15s opacity + transition:0.5s all,.15s opacity } .conversation-event .item-box { @@ -6008,7 +6293,7 @@ button.mtd-no-transform-case { .accordion .icon-arrow-d { transform:rotate(0deg); - transition:.3s transform cubic-bezier(.19,1,.22,1) + transition:0.3s transform var(--animationTiming) } .accordion .is-expanded .icon-arrow-d { @@ -6026,13 +6311,13 @@ button.mtd-no-transform-case { width:30px!important; height:24px } -r -#list_details input:not([type=radio]),#list_details select { + +#list_details input:not([type="radio"]),#list_details select { margin-left:-550px; margin-top:70px } -#list_details input[type=radio] { +#list_details input[type="radio"] { margin-right:300px; margin-top:40px; margin-bottom:-25px; @@ -6109,17 +6394,17 @@ r pointer-events:none; width:100%; background:0; - position:absolute; - padding-left:168px + position:absolute } .l-column.mdl-column.mdl-column-sml li { - width:130px; display:inline-block; position:relative; text-transform:uppercase; box-shadow:none!important; - text-align:center + text-align:center; + padding-left:20px; + padding-right:20px } .js-toggle.padding-al button.is-selected,.mtd-nav-drawer-background-hidden,.l-column.mdl-column.mdl-column-sml .selected { @@ -6137,12 +6422,12 @@ r left:28px; opacity:0; text-align:center; - transition:opacity .3s cubic-bezier(.19,1,.22,1) .1s,left .25s cubic-bezier(.19,1,.22,1) + transition:opacity 0.3s var(--animationTiming) 0.1s,left 0.25s var(--animationTiming) } .btn-fav-faved-text { left:42px; - transition:opacity .4s cubic-bezier(.19,1,.22,1) .13s,left .25s cubic-bezier(.19,1,.22,1) + transition:opacity 0.4s var(--animationTiming) 0.13s,left 0.25s var(--animationTiming) } .s-favorited:not(:hover)>.btn-fav-faved-text { @@ -6151,7 +6436,8 @@ r } .activity-header+.account-summary .fullname { - padding-left:3px + padding-left:0; + margin-left:0 } .list-account>:nth-child(2).nbfc { @@ -6159,10 +6445,6 @@ r padding-right:10px } -.mdl .js-detail-content { - margin-top:50px -} - .js-right-column.l-fullheight { overflow-x:hidden } @@ -6196,7 +6478,7 @@ r .s-profile { overflow-y:auto; - animation:profileSlide .7s cubic-bezier(.19,1,.22,1) + animation:profileSlide 0.7s var(--animationTiming) } .report-flow { @@ -6210,14 +6492,14 @@ r padding-left:32px } -.mdl .column-detail-level-2 .column-scroller { - top:56px -} - .typeahead-item.padding-am>.padding-ts { padding-left:32px!important } +.typeahead-item { + padding-left:10px!important +} + .quoted-tweet .media-sensitive-title { font-size:14px!important; font-weight:500 @@ -6232,22 +6514,28 @@ r } @media screen and (max-height:800px) { + .prf-stats>li { - width:49.6%; + width:49.6% } + .prf-stats>li:nth-child(2) { - margin-top:50px; + margin-top:50px } + } @media screen and (max-height:600px) { + .prf .lst-profile li { width:19%!important; padding-top:0 } + .prf .lst-profile li a span { - font-size:0; + font-size:0 } + } .column-type-interactions .stream-item:not(.is-actionable) .activity-header:not(.has-source-avatar):not(.activity-header-wrapping) { @@ -6281,62 +6569,69 @@ r cursor:pointer } -#mtd-theme-control option[value="paper"] { +.mtd-settings-option option[value="paper"] { background:#eee; - color:#333 + color:#333!important } -#mtd-theme-control option[value="grey"] { - background:#555 +.mtd-settings-option option[value="grey"] { + background:#555; + color:#fff!important } -#mtd-theme-control option[value="red"] { +.mtd-settings-option option[value="red"] { background:#F44336 } -#mtd-theme-control option[value="pink"] { +.mtd-settings-option option[value="pink"] { background:#E91E63 } -#mtd-theme-control option[value="orange"] { +.mtd-settings-option option[value="orange"] { background:#FF5722 } -#mtd-theme-control option[value="violet"] { - background:#673AB7 +.mtd-settings-option option[value="violet"] { + background:#673AB7; + color:#fff!important } -#mtd-theme-control option[value="teal"] { +.mtd-settings-option option[value="teal"] { background:#009688 } -#mtd-theme-control option[value="green"] { +.mtd-settings-option option[value="green"] { background:#4CAF50 } -#mtd-theme-control option[value="yellow"] { +.mtd-settings-option option[value="yellow"] { background:#FFC107 } -#mtd-theme-control option[value="cyan"] { +.mtd-settings-option option[value="cyan"] { background:#00BCD4 } -#mtd-theme-control option[value="black"],#mtd-theme-control option[value="amoled"] { - background:#000 +.mtd-settings-option option[value="black"],.mtd-settings-option option[value="amoled"] { + background:#000; + color:#fff!important } -#mtd-theme-control option[value="blue"] { +.mtd-settings-option option[value="blue"] { background:#2196F3 } -textarea:not(.compose-text):not(.js-compose-text):not(.js-list-description):not(.height--415):not(#id_comments) { +textarea:not(.compose-text):not(.js-compose-text):not(.js-list-description):not(.height--415):not(#id_comments):not(.mtd-textarea) { width:100%; border-top:none; border-left:none; border-right:none } +.tweet-detail-wrapper .tweet-text.margin-b--10 { + min-height:0 +} + .js-my-custom-timelines>li { padding:10px } @@ -6354,16 +6649,22 @@ textarea:not(.compose-text):not(.js-compose-text):not(.js-list-description):not( } .js-tweet .tweet-text { - padding-left:53px; - margin-top:0 + padding-left:calc(var(--avatarSize) * 1.16); + padding-top:calc(50px - var(--avatarSize)); + margin-top:0; + min-height:17px } .tweet-text:not(.with-linebreaks) { - margin-top:8px + margin-left:2px; + margin-bottom:5px; + margin-top:5px } .txt-mute .tweet-text { - padding-left:6px + padding-left:3px; + padding-top:3px; + padding-bottom:5px } .js-media.item-box-full-bleed { @@ -6371,7 +6672,7 @@ textarea:not(.compose-text):not(.js-compose-text):not(.js-list-description):not( } .js-quoted-tweet-text.with-linebreaks { - margin:5px + margin:0 5px 5px 5px } .js-mediatable .tweet-body { @@ -6379,6 +6680,7 @@ textarea:not(.compose-text):not(.js-compose-text):not(.js-list-description):not( margin-left:55px; margin-top:-3px } + /* Theme standard message banners */ body>.message-banner[style="color:rgb(85, 85, 85); background-color:rgb(178, 213, 237);"] { @@ -6409,6 +6711,7 @@ body>.message-banner[style="color:rgb(85, 85, 85); background-color:rgb(178, 213 .cmp-replyto .tweet-text { font-size:0.9em; + padding-left:55px; margin-top:2px } @@ -6435,7 +6738,7 @@ body>.message-banner[style="color:rgb(85, 85, 85); background-color:rgb(178, 213 } .compose .quoted-tweet { - animation:menuUpRelative .3s cubic-bezier(.19,1,.22,1) + animation:menuUpRelative 0.3s var(--animationTiming) } .compose .quoted-tweet .account-link>.nbfc { @@ -6451,14 +6754,6 @@ body>.message-banner[style="color:rgb(85, 85, 85); background-color:rgb(178, 213 padding-top:0 } -.cmp-replyto .tweet-text { - padding-left:55px -} - -.accs-header { - padding-left:15px -} - .mtd-whats-new h1:not(.column-title) { font-weight:300; text-align:center; @@ -6504,7 +6799,7 @@ body>.message-banner[style="color:rgb(85, 85, 85); background-color:rgb(178, 213 } .lst-group .selected a .username { - color:rgba(255,255,255,.75) + opacity:0.75 } .compose-account .txt-base-small { @@ -6519,11 +6814,11 @@ body>.message-banner[style="color:rgb(85, 85, 85); background-color:rgb(178, 213 .js-compose-stay-open { -webkit-appearance:none; -moz-appearance:none; - color:#fff!important; + color:var(--rootWhiteColor)!important; position:absolute; font-size:24px; cursor:pointer; - opacity:.7; + opacity:0.7; height:60px; bottom:-5px; right:0 @@ -6531,8 +6826,8 @@ body>.message-banner[style="color:rgb(85, 85, 85); background-color:rgb(178, 213 .js-compose-stay-open:before { content:"\e898"!important; - font-family:"Material"; - color:#fff!important + font-family:Material; + color:var(--rootWhiteColor)!important } .js-compose-stay-open:checked:before { @@ -6555,7 +6850,7 @@ label[for="account-safeguard-checkbox"] { #account-safeguard-checkbox { -webkit-appearance:none; -moz-appearance:none; - color:#fff; + color:var(--rootWhiteColor); position:absolute; font-size:24px; cursor:pointer; @@ -6570,8 +6865,8 @@ label[for="account-safeguard-checkbox"] { #account-safeguard-checkbox:before { content:"\e835"; - font-family:"Material"; - color:#fff + font-family:Material; + color:var(--rootWhiteColor) } #account-safeguard-checkbox:checked:before { @@ -6580,23 +6875,40 @@ label[for="account-safeguard-checkbox"] { #inline-account-safeguard-checkbox { position:absolute; - bottom:26px; - left:20px + bottom:27px } .js-column-options input[type="checkbox"]:before { - color:#fff!important + color:var(--rootWhiteColor)!important } input[type="button"] { border-bottom:0 } -p[lang="ar"],p[lang="fa"],p[lang="ha"],p[lang="he"],p[lang="ks"],p[lang="ku"],p[lang="ps"],p[lang="ur"],p[lang="yi"] { +p[lang="ar"], +p[lang="fa"], +p[lang="ha"], +p[lang="he"], +p[lang="ks"], +p[lang="ku"], +p[lang="ps"], +p[lang="ur"], +p[lang="yi"] +{ direction:rtl } -p[lang="ar"] a[rel="hashtag"],p[lang="ar"] a[rel="user"],p[lang="fa"] a[rel="hashtag"],p[lang="fa"] a[rel="user"],p[lang="ha"] a[rel="hashtag"],p[lang="ha"] a[rel="user"],p[lang="he"] a[rel="hashtag"],p[lang="he"] a[rel="user"],p[lang="ks"] a[rel="hashtag"],p[lang="ks"] a[rel="user"],p[lang="ku"] a[rel="hashtag"],p[lang="ku"] a[rel="user"],p[lang="ps"] a[rel="hashtag"],p[lang="ps"] a[rel="user"],p[lang="ur"] a[rel="hashtag"],p[lang="ur"] a[rel="user"],p[lang="yi"] a[rel="hashtag"],p[lang="yi"] a[rel="user"] { +p[lang="ar"] a[rel="hashtag"],p[lang="ar"] a[rel="user"], +p[lang="fa"] a[rel="hashtag"],p[lang="fa"] a[rel="user"], +p[lang="ha"] a[rel="hashtag"],p[lang="ha"] a[rel="user"], +p[lang="he"] a[rel="hashtag"],p[lang="he"] a[rel="user"], +p[lang="ks"] a[rel="hashtag"],p[lang="ks"] a[rel="user"], +p[lang="ku"] a[rel="hashtag"],p[lang="ku"] a[rel="user"], +p[lang="ps"] a[rel="hashtag"],p[lang="ps"] a[rel="user"], +p[lang="ur"] a[rel="hashtag"],p[lang="ur"] a[rel="user"], +p[lang="yi"] a[rel="hashtag"],p[lang="yi"] a[rel="user"] +{ direction:ltr; unicode-bidi:isolate } @@ -6628,16 +6940,22 @@ p[lang="ar"] a[rel="hashtag"],p[lang="ar"] a[rel="user"],p[lang="fa"] a[rel="has } .mdl .column-scroller { - top:0!important + bottom:0; + right:0; + left:0; + height:auto!important; + position:absolute } .contributor-settings-role { + margin-top:10px!important; padding-bottom:0!important } .account-bio { padding-left:3px; - margin-top:7px + margin-top:7px; + line-height:1.5 } .prf-actions .js-follow-button { @@ -6651,7 +6969,7 @@ p[lang="ar"] a[rel="hashtag"],p[lang="ar"] a[rel="user"],p[lang="fa"] a[rel="has margin-left:-65px; border-radius:32px; z-index:5; - box-shadow:0 2px 5px 1px rgba(0,0,0,.25) + box-shadow:0 2px 5px 1px var(--contextMenuShadow) } .prf-actions .action-text { @@ -6660,8 +6978,8 @@ p[lang="ar"] a[rel="hashtag"],p[lang="ar"] a[rel="user"],p[lang="fa"] a[rel="has .prf-actions .action-text:after { font-size:28px; - font-family:"Material"; - color:#fff + font-family:Material; + color:var(--rootWhiteColor) } .prf-actions .follow-text:after { @@ -6683,14 +7001,15 @@ p[lang="ar"] a[rel="hashtag"],p[lang="ar"] a[rel="user"],p[lang="fa"] a[rel="has .mdl .js-user-actions-menu { position:absolute; left:-40px; - color:#fff!important; + color:var(--rootWhiteColor)!important; margin:0; - top:-320px; - text-shadow:0 1px 5px #000 + top:-330px; + text-shadow:0 1px 5px var(--rootBlackColor) } .prf-follow-state .dropdown-menu { - top:-300px + top:-275px; + right:6px } .prf-actions .unfollow-text:after { @@ -6724,19 +7043,23 @@ p[lang="ar"] a[rel="hashtag"],p[lang="ar"] a[rel="user"],p[lang="fa"] a[rel="has } .prf-actions .js-follow-button:hover,.prf-actions .js-follow-button:focus,.prf-actions .js-follow-button:active { - box-shadow:0 5px 15px 1px rgba(0,0,0,.25) + box-shadow:0 5px 15px 1px var(--contextMenuShadow) } .follow-from-accounts-button .follow-btn { height:30px } -.prf .s-following .follow-btn:hover { - background-color:#EA6B6B!important +.prf .s-following .follow-btn:hover,.prf .s-blocking .follow-btn:not(:hover) { + background-color:#EA6B6B !important +} + +.follow-btn:hover>.block-text { + display:none } .s-following .follow-btn:hover .following-text,.s-following .follow-btn:not(:hover) .unfollow-text { - transition:margin-left 0.3s cubic-bezier(.19,1,.22,1),opacity 0.3s cubic-bezier(.19,1,.22,1) 0.15s + transition:margin-left 0.3s var(--animationTiming),opacity 0.3s var(--animationTiming) 0.15s } .tweet-stat>a>*,.tweet-stat>span>* { @@ -6759,7 +7082,7 @@ legend.frm-legend+div+.control-group>.control-label,legend.frm-legend+div+div+.c } .tweet-body>.txt-ellipsis { - padding-left:54px + padding-left:calc(var(--avatarSize) * 1.16) } .tweet.txt-mute .tweet-body>.txt-ellipsis { @@ -6767,20 +7090,22 @@ legend.frm-legend+div+.control-group>.control-label,legend.frm-legend+div+div+.c } .other-replies { - font-size:0 + font-size:0; + margin-top:3px } .other-replies>a { - font-size:12px; + font-size:0.8rem; padding-left:4px } -.js-reply-info-container>.other-replies { - padding:0 12px +.quoted-tweet .other-replies>a { + font-size:0.75rem } -.js-item-launch .column-type-icon { - font-size:48px +.js-reply-info-container>.other-replies { + overflow:hidden; + padding:0 12px } .query:hover .try-query { @@ -6788,12 +7113,13 @@ legend.frm-legend+div+.control-group>.control-label,legend.frm-legend+div+div+.c } .ticker-outer { - height:2em; - line-height:2em; - margin-top:-.4em; - margin-bottom:-.4em; + height:20px; + line-height:29px; + margin-top:-6px; + margin-bottom:-6px; overflow:hidden; - text-align:left + text-align:left; + min-width:52px } .ticker-inner { @@ -6812,7 +7138,9 @@ legend.frm-legend+div+.control-group>.control-label,legend.frm-legend+div+div+.c .tweet-stat { box-sizing:border-box; - width:40px + width:59px; + font-size:14.4px!important; + display:inline } .tweet-stat.tweet-stats { @@ -6821,17 +7149,15 @@ legend.frm-legend+div+.control-group>.control-label,legend.frm-legend+div+div+.c } .tweet-stat[data-type="repliers"] { - margin-left:22%; - display:block + margin-left:calc(var(--columnSize) / 5 + -32px) } .tweet-stat[data-type="retweeters"] { - margin-left:10%; - display:block + margin-left:calc(var(--columnSize) / 4.2 + -50px) } .tweet-stat[data-type="favoriters"] { - margin-left:8% + margin-left:calc(var(--columnSize) / 4.7 + -60px) } .tweet-stats { @@ -6850,11 +7176,6 @@ legend.frm-legend+div+.control-group>.control-label,legend.frm-legend+div+div+.c padding:0!important } - -.inline-reply .compose-text-container { - padding-top:0!important -} - .hashflag { width:16px; height:16px; @@ -6878,27 +7199,31 @@ legend.frm-legend+div+.control-group>.control-label,legend.frm-legend+div+div+.c } @media (min-height:450px) { + #mtd_nav_drawer:not(.mtd-nav-drawer-group-open) .mtd-nav-divider-feedback { display:none } - + #mtd_nav_drawer:not(.mtd-nav-drawer-group-open) .mtd-nav-button-feedback { position:absolute; bottom:5px; left:0 } + } -@media (min-height:635px) { +@media (min-height:575px) { + #mtd_nav_drawer.mtd-nav-drawer-group-open .mtd-nav-divider-feedback { display:none } - + #mtd_nav_drawer.mtd-nav-drawer-group-open .mtd-nav-button-feedback { position:absolute; bottom:5px; left:0 } + } .media-size-image { @@ -6915,7 +7240,7 @@ legend.frm-legend+div+.control-group>.control-label,legend.frm-legend+div+div+.c } .sentry-error-embed { - animation:windowDown .3s cubic-bezier(.19,1,.22,1)!important; + animation:windowDown 0.3s var(--animationTiming)!important; width:600px!important; margin:0 auto!important; max-height:900px!important; @@ -6923,31 +7248,25 @@ legend.frm-legend+div+.control-group>.control-label,legend.frm-legend+div+div+.c height:auto!important; left:50%!important; margin-left:-300px!important; - top:0!important + top:0!important; + text-align:left; + padding:40px; + max-width:700px; + overflow:auto; + border-radius:3px; + box-shadow:0 0 0 1px var(--contextMenuShadow),0 10px 40px var(--contextMenuShadow) } -/** Wrapper class name is provided by JS **/ .sentry-error-embed-wrapper { overflow:auto } .sentry-error-embed * { + -webkit-font-smoothing:antialiased; margin:0; padding:0 } -.sentry-error-embed { - margin:0 auto; - max-height:80%; - margin-top:4%; - text-align:left; - padding:40px; - max-width:700px; - overflow:auto; - border-radius:3px; - box-shadow:0 0 0 1px rgba(0,0,0,.3),0 10px 40px rgba(0,0,0,.3) -} - .sentry-error-embed a, .sentry-error-embed a:visited { color:#546076; @@ -6955,10 +7274,6 @@ legend.frm-legend+div+.control-group>.control-label,legend.frm-legend+div+div+.c text-decoration:none } -.sentry-error-embed * { - -webkit-font-smoothing:antialiased -} - .sentry-error-embed p { margin:0 0 20px } @@ -7008,7 +7323,6 @@ legend.frm-legend+div+.control-group>.control-label,legend.frm-legend+div+div+.c .sentry-error-embed .form-field textarea { font-size:15px; padding:8px 12px; - border-radius:0; box-shadow:none; width:500px; height:auto; @@ -7017,8 +7331,8 @@ legend.frm-legend+div+.control-group>.control-label,legend.frm-legend+div+div+.c margin-left:100px } -.sentry-error-embed .form-field input::-webkit-input-placeholder, -.sentry-error-embed .form-field textarea::-webkit-input-placeholder { +.sentry-error-embed .form-field input::placeholder, +.sentry-error-embed .form-field textarea::placeholder { color:#94A0B3 } @@ -7039,7 +7353,7 @@ legend.frm-legend+div+.control-group>.control-label,legend.frm-legend+div+div+.c .sentry-error-embed .form-submit .btn { border:none; - color:#fff; + color:var(--rootWhiteColor); padding:10px 15px; margin-right:15px; font-weight:500; @@ -7068,13 +7382,13 @@ legend.frm-legend+div+.control-group>.control-label,legend.frm-legend+div+div+.c display:inline-block; width:81px; height:18px; - background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHZpZXdCb3g9IjAgMCAyMzkuOCA1MyIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjM5LjggNTMiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxnPjxnPjxwYXRoIGZpbGw9IiMxRDI2M0MiIGQ9Ik01NCw1M2gtNS42di00LjVINTRjMC41LDAsMC43LTAuMywwLjgtMC41YzAuMS0wLjIsMC4yLTAuNSwwLTFMMzAuNiw1Yy0wLjItMC40LTAuNi0wLjUtMC44LTAuNVMyOS4yLDQuNiwyOC45LDVsLTQuOSw4LjRDMzUuOSwyMi4xLDQzLDM1LjksNDMsNTAuN1Y1M0gyNy43di0yLjNjMC05LjMtNC4zLTE4LTExLjUtMjMuN2wtMy4xLDUuNGM1LjEsNC42LDguMSwxMS4zLDguMSwxOC4zVjUzSDUuNWMtMiwwLTMuOC0xLTQuOC0yLjdzLTEtMy44LDAtNS41bDMuNS02LjFsMy45LDIuM0w0LjcsNDdjLTAuMiwwLjQtMC4xLDAuOCwwLDFjMC4xLDAuMiwwLjMsMC41LDAuOCwwLjVoMTEuMUMxNiw0MywxMy4yLDM4LDguOCwzNC43bC0xLjYtMS4ybDcuNS0xMy4xbDIsMS4zYzkuMSw2LDE0LjcsMTUuOSwxNS40LDI2LjZoNi4yQzM3LjYsMzUuMywzMC44LDIzLjMsMTkuOCwxNkwxOCwxNC44bDctMTIuMUMyNiwxLDI3LjgsMCwyOS44LDBzMy44LDEsNC44LDIuN2wyNC4zLDQyYzEsMS43LDEsMy44LDAsNS41UzU2LDUzLDU0LDUzeiIvPjwvZz48cGF0aCBmaWxsPSIjMUQyNjNDIiBkPSJNODQuMiw0Mi4zYy00LjcsMC05LTEuNi0xMi42LTQuNmwyLjctMy4yYzMuMywyLjcsNi40LDMuOSwxMCwzLjljMy43LDAsNi4xLTEuOCw2LjEtNC41YzAtMi44LTEuOC00LjEtNy42LTUuNGMtNi42LTEuNi0xMC4yLTMuNS0xMC4yLTljMC01LjIsNC4zLTguOCwxMC4zLTguOGM0LjIsMCw3LjYsMS4xLDEwLjgsMy42bC0yLjQsMy40Yy0yLjktMi4xLTUuNy0zLjEtOC41LTMuMWMtMy40LDAtNS43LDEuNy01LjcsNC4zYzAsMi45LDEuNyw0LDcuOSw1LjVjNy4xLDEuNyw5LjgsNC4yLDkuOCw4LjlDOTUsMzguOCw5MC44LDQyLjMsODQuMiw0Mi4zeiIvPjxwb2x5Z29uIGZpbGw9IiMxRDI2M0MiIHBvaW50cz0iOTkuMyw0MS45IDk5LjMsMTEuMSAxMjEuOSwxMS4xIDEyMS45LDE1LjEgMTAzLjksMTUuMSAxMDMuOSwyNC40IDExOS44LDI0LjQgMTE5LjgsMjguMyAxMDMuOSwyOC4zIDEwMy45LDM3LjkgMTIyLjEsMzcuOSAxMjIuMSw0MS45ICIvPjxwb2x5Z29uIGZpbGw9IiMxRDI2M0MiIHBvaW50cz0iMTQ5LjIsNDEuOSAxMzEsMTguMyAxMzEsNDEuOSAxMjYuNSw0MS45IDEyNi41LDExLjEgMTMwLjksMTEuMSAxNDguNywzNC4xIDE0OC43LDExLjEgMTUzLjIsMTEuMSAxNTMuMiw0MS45ICIvPjxwb2x5Z29uIGZpbGw9IiMxRDI2M0MiIHBvaW50cz0iMTY2LjksNDEuOSAxNjYuOSwxNS4zIDE1Ni44LDE1LjMgMTU2LjgsMTEuMSAxODEuNiwxMS4xIDE4MS42LDE1LjMgMTcxLjUsMTUuMyAxNzEuNSw0MS45ICIvPjxwYXRoIGZpbGw9IiMxRDI2M0MiIGQ9Ik0yMDUuNCw0MS45bC03LjgtMTEuMWgtNy44djExLjFoLTQuNlYxMS4xaDEzLjdjNywwLDExLjMsMy43LDExLjMsOS42YzAsNC42LTIuNiw3LjktNy4yLDkuMmwtMC43LDAuMmw4LjQsMTEuOEgyMDUuNHogTTE4OS44LDI2LjloOC43YzQuMywwLDctMi4zLDctNS45YzAtMy43LTIuNi01LjgtNy4xLTUuOGgtOC42VjI2Ljl6Ii8+PHBvbHlnb24gZmlsbD0iIzFEMjYzQyIgcG9pbnRzPSIyMjMsNDEuOSAyMjMsMjkuNyAyMTAuOCwxMS4xIDIxNi4yLDExLjEgMjI1LjQsMjUuNiAyMzQuNiwxMS4xIDIzOS44LDExLjEgMjI3LjYsMjkuNiAyMjcuNiw0MS45ICIvPjwvZz48L3N2Zz4=); + background-image:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHZpZXdCb3g9IjAgMCAyMzkuOCA1MyIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjM5LjggNTMiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxnPjxnPjxwYXRoIGZpbGw9IiMxRDI2M0MiIGQ9Ik01NCw1M2gtNS42di00LjVINTRjMC41LDAsMC43LTAuMywwLjgtMC41YzAuMS0wLjIsMC4yLTAuNSwwLTFMMzAuNiw1Yy0wLjItMC40LTAuNi0wLjUtMC44LTAuNVMyOS4yLDQuNiwyOC45LDVsLTQuOSw4LjRDMzUuOSwyMi4xLDQzLDM1LjksNDMsNTAuN1Y1M0gyNy43di0yLjNjMC05LjMtNC4zLTE4LTExLjUtMjMuN2wtMy4xLDUuNGM1LjEsNC42LDguMSwxMS4zLDguMSwxOC4zVjUzSDUuNWMtMiwwLTMuOC0xLTQuOC0yLjdzLTEtMy44LDAtNS41bDMuNS02LjFsMy45LDIuM0w0LjcsNDdjLTAuMiwwLjQtMC4xLDAuOCwwLDFjMC4xLDAuMiwwLjMsMC41LDAuOCwwLjVoMTEuMUMxNiw0MywxMy4yLDM4LDguOCwzNC43bC0xLjYtMS4ybDcuNS0xMy4xbDIsMS4zYzkuMSw2LDE0LjcsMTUuOSwxNS40LDI2LjZoNi4yQzM3LjYsMzUuMywzMC44LDIzLjMsMTkuOCwxNkwxOCwxNC44bDctMTIuMUMyNiwxLDI3LjgsMCwyOS44LDBzMy44LDEsNC44LDIuN2wyNC4zLDQyYzEsMS43LDEsMy44LDAsNS41UzU2LDUzLDU0LDUzeiIvPjwvZz48cGF0aCBmaWxsPSIjMUQyNjNDIiBkPSJNODQuMiw0Mi4zYy00LjcsMC05LTEuNi0xMi42LTQuNmwyLjctMy4yYzMuMywyLjcsNi40LDMuOSwxMCwzLjljMy43LDAsNi4xLTEuOCw2LjEtNC41YzAtMi44LTEuOC00LjEtNy42LTUuNGMtNi42LTEuNi0xMC4yLTMuNS0xMC4yLTljMC01LjIsNC4zLTguOCwxMC4zLTguOGM0LjIsMCw3LjYsMS4xLDEwLjgsMy42bC0yLjQsMy40Yy0yLjktMi4xLTUuNy0zLjEtOC41LTMuMWMtMy40LDAtNS43LDEuNy01LjcsNC4zYzAsMi45LDEuNyw0LDcuOSw1LjVjNy4xLDEuNyw5LjgsNC4yLDkuOCw4LjlDOTUsMzguOCw5MC44LDQyLjMsODQuMiw0Mi4zeiIvPjxwb2x5Z29uIGZpbGw9IiMxRDI2M0MiIHBvaW50cz0iOTkuMyw0MS45IDk5LjMsMTEuMSAxMjEuOSwxMS4xIDEyMS45LDE1LjEgMTAzLjksMTUuMSAxMDMuOSwyNC40IDExOS44LDI0LjQgMTE5LjgsMjguMyAxMDMuOSwyOC4zIDEwMy45LDM3LjkgMTIyLjEsMzcuOSAxMjIuMSw0MS45ICIvPjxwb2x5Z29uIGZpbGw9IiMxRDI2M0MiIHBvaW50cz0iMTQ5LjIsNDEuOSAxMzEsMTguMyAxMzEsNDEuOSAxMjYuNSw0MS45IDEyNi41LDExLjEgMTMwLjksMTEuMSAxNDguNywzNC4xIDE0OC43LDExLjEgMTUzLjIsMTEuMSAxNTMuMiw0MS45ICIvPjxwb2x5Z29uIGZpbGw9IiMxRDI2M0MiIHBvaW50cz0iMTY2LjksNDEuOSAxNjYuOSwxNS4zIDE1Ni44LDE1LjMgMTU2LjgsMTEuMSAxODEuNiwxMS4xIDE4MS42LDE1LjMgMTcxLjUsMTUuMyAxNzEuNSw0MS45ICIvPjxwYXRoIGZpbGw9IiMxRDI2M0MiIGQ9Ik0yMDUuNCw0MS45bC03LjgtMTEuMWgtNy44djExLjFoLTQuNlYxMS4xaDEzLjdjNywwLDExLjMsMy43LDExLjMsOS42YzAsNC42LTIuNiw3LjktNy4yLDkuMmwtMC43LDAuMmw4LjQsMTEuOEgyMDUuNHogTTE4OS44LDI2LjloOC43YzQuMywwLDctMi4zLDctNS45YzAtMy43LTIuNi01LjgtNy4xLTUuOGgtOC42VjI2Ljl6Ii8+PHBvbHlnb24gZmlsbD0iIzFEMjYzQyIgcG9pbnRzPSIyMjMsNDEuOSAyMjMsMjkuNyAyMTAuOCwxMS4xIDIxNi4yLDExLjEgMjI1LjQsMjUuNiAyMzQuNiwxMS4xIDIzOS44LDExLjEgMjI3LjYsMjkuNiAyMjcuNiw0MS45ICIvPjwvZz48L3N2Zz4="); background-repeat:no-repeat; background-size:81px 18px; margin-left:4px; position:relative; top:2px; - opacity:.75 + opacity:0.75 } .sentry-error-embed .message-success, @@ -7092,25 +7406,33 @@ legend.frm-legend+div+.control-group>.control-label,legend.frm-legend+div+div+.c } @media screen and (max-height:570px) { + .sentry-error-embed { max-height:none; - margin-top:0; + margin-top:0 } + } @media screen and (max-width:660px) { + .sentry-error-embed { padding:10px; - max-width:none; + max-width:none } + .sentry-error-embed h2 { - font-size:22px; + font-size:22px } + .sentry-error-embed header p { - font-size:14px; + font-size:14px } + } + @media screen and (max-width:480px) { + .sentry-error-embed { padding:10px; margin-top:0; @@ -7120,36 +7442,45 @@ legend.frm-legend+div+.control-group>.control-label,legend.frm-legend+div+div+.c right:0; left:0; height:100%; - max-height:none; + max-height:none } + .sentry-error-embed h2 { font-size:20px; - line-height:24px; + line-height:24px } + .sentry-error-embed header p { - font-size:13px; + font-size:13px } + .sentry-error-embed header h2 > span, .sentry-error-embed header p > span { - display:none; + display:none } + .sentry-error-embed .form-submit { - text-align:center; + text-align:center } + .sentry-error-embed .form-submit .btn, .sentry-error-embed .form-submit .close, .sentry-error-embed .form-submit .powered-by { float:none; display:block; - margin:0 auto; + margin:0 auto } + .sentry-error-embed .form-submit .powered-by { margin-top:10px; - font-size:10px; + font-size:10px } + } + button[type="submit"] { - color:#fff!important + border-radius:3px; + color:var(--rootWhiteColor)!important } button[type="submit"]:active { @@ -7157,7 +7488,7 @@ button[type="submit"]:active { } .padding-axl.flex.flex-row.flex-align--center>.flex-auto { - padding-left:20px!important + padding-left:36px!important } .padding-axl.flex.flex-row.flex-align--center>.flex-auto .tweet-avatar { @@ -7178,42 +7509,20 @@ button[type="submit"]:active { margin:7px 0 2px 0 } -.fullname,.username,.location,.prf-bio,.prf-siteurl,.list-account { - overflow:hidden -} - -#mtd-appearance-form input[type="checkbox"] { - margin-top:-15px -} - .compose-reply-tweet:not(.is-hidden)+.compose-text-container>.compose-text { height:100px!important } -.stroke-twitter-light-gray { - stroke:#CCD6DD -} - -.stroke-twitter-blue { - stroke:#1DA1F2 -} - .stroke-twitter-yellow { stroke:#FFAD1F } -.stroke-twitter-red { - stroke:#E0245E -} - .js-progress-svg>svg { - height:32px!important; - width:32px!important + height:20px!important } .js-progress-svg>svg>circle { - stroke-width:3!important; - stroke-dasharray:75!important + stroke-width:3!important } .mdl-inner .js-account-selector { @@ -7239,8 +7548,12 @@ button[type="submit"]:active { padding-left:10px } -.txt-size--13 { - font-size:13px +.txt-size-variable--13,.txt-size--13 { + font-size:0.85rem +} + +.txt-size-variable--12,.txt-size-variable--12 .account-link.txt-bold { + font-size:0.8rem } .icon-user-team-mgr.pull-right.icon-small { @@ -7255,26 +7568,15 @@ button[type="submit"]:active { padding-left:20px!important } -.avatar.size64 { - width:64px; - height:64px; - border-radius:32px -} - -.avatar.size73 { - width:73px; - height:73px; - border-radius:37px -} - .account-profile-header { width:100%; height:90px; - background-size:cover + background-size:cover; + pointer-events:none } .avatar-border--2 { - box-shadow:0 5px 10px rgba(17,17,17,.2) + box-shadow:0 5px 10px var(--genericDropShadow) } .follow-from-accounts-username>.avatar { @@ -7287,10 +7589,6 @@ button[type="submit"]:active { padding-left:10px } -.compose .quoted-tweet .tweet-header+.js-reply-info-container { - padding-top:10px -} - .contributor-option { margin-left:20px } @@ -7303,15 +7601,14 @@ button[type="submit"]:active { margin-top:4px } -.contributor-settings-role { - margin-top:10px!important -} - label[for="inline-account-safeguard-checkbox"] { font-size:0 } -.inline-reply .js-account-safeguard-checkbox {right:140px;} +.inline-reply .js-account-safeguard-checkbox { + margin-top:13px; + right:50% +} .js-reply-info-container { padding-bottom:0 @@ -7322,7 +7619,7 @@ label[for="inline-account-safeguard-checkbox"] { } .media-preview { - margin-top:14px + margin-top:5px } .s-minimal .mdl-inner { @@ -7334,9 +7631,9 @@ label[for="inline-account-safeguard-checkbox"] { } .column-content .accordion-panel a[rel="url noopener noreferrer"] { - color:#fff!important; + color:var(--rootWhiteColor)!important; opacity:0.4!important; - transition:height .25s cubic-bezier(.19,1,.22,1) + transition:height 0.25s var(--animationTiming) } .js-stats-list { @@ -7344,9 +7641,18 @@ label[for="inline-account-safeguard-checkbox"] { padding-top:20px } +li.padding-axl.flex.flex-row.flex-align--center .account-summary-text { + padding-left:0 +} + +li.padding-axl.flex.flex-row.flex-align--center .account-summary-text>a.account-link { + margin-left:calc(var(--avatarSize) + 4px); + margin-top:-13px +} + .account-summary-text { - padding-left:56px; - padding-top:5px + padding-left:calc(var(--avatarSize) * 1.05); + padding-top:15px } .js-list-description { @@ -7358,7 +7664,7 @@ label[for="inline-account-safeguard-checkbox"] { .control-group .controls.color-twitter-darker-gray { text-transform:uppercase; - font-size:12px!important; + font-size:0.7rem!important; padding-top:5px } @@ -7378,10 +7684,6 @@ label[for="inline-account-safeguard-checkbox"] { width:49% } -.js-filter-list { - width:300px -} - .list-filter,.js-filter-list>ul { width:280px } @@ -7390,6 +7692,7 @@ label[for="inline-account-safeguard-checkbox"] { position:absolute; left:50%; top:0; + width:300px; max-height:400px; overflow-y:auto; overflow-x:hidden @@ -7400,14 +7703,6 @@ label[for="inline-account-safeguard-checkbox"] { bottom:40px } -#mtd-appearance-form .checkbox { - font-size:14px -} - -#mtd-appearance-form select { - margin-left:22px -} - .drawer .js-character-count { right:50px; position:absolute @@ -7418,7 +7713,7 @@ label[for="inline-account-safeguard-checkbox"] { } .form-login { - padding:10px + padding:18px } .column-type-message .tweet-text.with-linebreaks { @@ -7440,7 +7735,7 @@ label[for="inline-account-safeguard-checkbox"] { .edit-conversation-name button { height:30px; - color:#fff!important + color:var(--rootWhiteColor)!important } .edit-conversation-name .obj-right { @@ -7461,12 +7756,7 @@ label[for="inline-account-safeguard-checkbox"] { } .js-message-detail .tweet-body { - padding-left:56px; - padding-top:30px -} - -.tweet-translation-attribution-text { - padding-bottom:10px + padding-left:56px } .microsoft-logo:after { @@ -7489,27 +7779,56 @@ label[for="inline-account-safeguard-checkbox"] { } .compose .quoted-tweet .tweet-header { - height:16px + overflow:hidden; + text-overflow:clip; + display:block +} + +.tweet-header { + height:25px +} + +.tweet-detail-reply .tweet-header { + height:50px +} + +.tweet-message .tweet-header { + height:50px +} + +.quoted-tweet .tweet-header { + height:28px } body+div,body+div>div { - box-shadow:0 3px 7px rgba(17,17,17,.5)!important; + box-shadow:0 3px 7px var(--composeShadow)!important; border:0!important; border-radius:5px!important; overflow:hidden!important; pointer-events:none; - animation:windowDown .4s cubic-bezier(.19,1,.22,1) + animation:windowDown 0.4s var(--animationTiming) } .tweet:not(.txt-mute) .tweet-body { - margin-top:-30px + margin-bottom:-5px +} + +.replies-after .tweet:not(.txt-mute) .tweet-body { + margin-top:-28px!important +} + +.js-replies-before .tweet:not(.txt-mute) .tweet-body { + margin-top:-28px!important } .like-count,.retweet-count,.reply-count { font-weight:500; vertical-align:middle; padding-top:3px; - padding-left:4px + position:absolute; + width:33px; + padding-left:3px; + font-size:14px } .like-count { @@ -7521,12 +7840,11 @@ body+div,body+div>div { } .s-following .unfollow-text { - margin-top:7px; - margin-left:-18px + margin-top:7px } .s-following .following-text,.s-following .unfollow-text { - transition:margin-left 0.3s cubic-bezier(.19,1,.22,1),opacity 0.3s cubic-bezier(.19,1,.22,1) + transition:margin-left 0.3s var(--animationTiming),opacity 0.3s var(--animationTiming) } .mtd-nav-group-arrow-flipped { @@ -7538,7 +7856,7 @@ body+div,body+div>div { } .mtd-nav-group { - transition:height 0.3s cubic-bezier(.19,1,.22,1) + transition:height 0.3s var(--animationTiming) } .search-operator-list,.search-operator-list+div { @@ -7565,15 +7883,15 @@ body+div,body+div>div { } .search-tip-item-hover { - font-size:14px + font-size:0.9rem } button.try-query { padding:10px 15px; - color:#fff; + color:var(--rootWhiteColor)!important; opacity:0; visibility:visible!important; - transition:opacity 0.15s cubic-bezier(.19,1,.22,1); + transition:opacity 0.15s var(--animationTiming); border-radius:4px } @@ -7606,7 +7924,7 @@ div[data-testid="trend"]>.txt-bold { } .follow-btn .spinner-button-icon-spinner .spinner-layer { - border-color:#fff!important + border-color:var(--rootWhiteColor)!important } .follow-btn .btn-loader>div { @@ -7618,6 +7936,19 @@ div[data-testid="trend"]>.txt-bold { padding-left:7px } +.follow-btn .action-text.pending-text,.follow-btn .action-text.cancel-req-text { + padding-left:9px; + padding-top:12px +} + +.follow-btn .action-text.block-text { + padding-top:14px +} + +.follow-btn .action-text.unblock-text { + padding-top:10px +} + .btn-fav>.btn-loader { position:absolute; right:50% @@ -7652,7 +7983,7 @@ div[data-testid="trend"]>.txt-bold { .compose-message-recipient .flex-shrink--1 { width:100%; padding-left:10px; - font-size:14px + font-size:0.9rem } .mdl-report-spam-options { @@ -7685,7 +8016,6 @@ div[data-testid="trend"]>.txt-bold { /* CSS Adapted from TweetDeck, copyright Twitter, Inc., all rights reserved */ - .ProgressBar { position:relative; -webkit-appearance:none; @@ -7699,29 +8029,21 @@ div[data-testid="trend"]>.txt-bold { color:#1da1f2 } -.ProgressBar::-ms-fill { - border:none -} - -.ProgressBar::-moz-progress-bar { - background-color:#ccd6dd -} - -.ProgressBar::-webkit-progress-bar { - background-color:#ccd6dd -} - .ProgressBar.ProgressBar:indeterminate { border-top:1.5px solid #ccd6dd; border-bottom:1.5px solid #ccd6dd } .ProgressBar::-moz-progress-bar { - background-color:#1da1f2 + background-color:#1da1f2; + border-radius:2px 0 0 2px; + transition:width 0.6s ease } .ProgressBar::-webkit-progress-value { - background-color:#1da1f2 + background-color:#1da1f2; + border-radius:2px 0 0 2px; + transition:width 0.6s ease } .ProgressBar::-webkit-progress-bar { @@ -7729,15 +8051,6 @@ div[data-testid="trend"]>.txt-bold { overflow:hidden } -.ProgressBar::-webkit-progress-value { - border-radius:2px 0 0 2px; - transition:width .6s ease -} - -.ProgressBar::-moz-progress-bar { - border-radius:2px 0 0 2px -} - .ProgressBar--red { color:#e0245e } @@ -7788,23 +8101,15 @@ div[data-testid="trend"]>.txt-bold { .ProgressBar--white { background-color:#657786; - color:#fff + color:var(--rootWhiteColor) } .ProgressBar--white::-moz-progress-bar { - background-color:#657786 -} - -.ProgressBar--white::-webkit-progress-bar { - background-color:#657786 -} - -.ProgressBar--white::-moz-progress-bar { - background-color:#fff + background-color:var(--rootWhiteColor) } .ProgressBar--white::-webkit-progress-value { - background-color:#fff + background-color:var(--rootWhiteColor) } .ProgressBar--large { @@ -7816,11 +8121,10 @@ div[data-testid="trend"]>.txt-bold { border-bottom:4.5px solid #ccd6dd } - .NotificationList { position:absolute; bottom:40px; - left:50%; + right:30px; width:372px; padding:0; margin:0; @@ -7831,20 +8135,20 @@ div[data-testid="trend"]>.txt-bold { .Notification { height:0; animation-name:feather-notification-list-show; - animation-duration:.17s; + animation-duration:0.17s; animation-fill-mode:both; - animation-timing-function:cubic-bezier(.19,1,.22,1); - transition:height .17s cubic-bezier(.19,1,.22,1); + animation-timing-function:var(--animationTiming); + transition:height .17s var(--animationTiming); pointer-events:all } .Notification:not(:last-child):not(.is-expired) { - animation-delay:.17s + animation-delay:0.17s } .Notification.is-expired { animation-name:feather-notification-list-hide; - animation-timing-function:cubic-bezier(.19,1,.22,1) + animation-timing-function:var(--animationTiming) } .Notification-inner { @@ -7853,9 +8157,30 @@ div[data-testid="trend"]>.txt-bold { width:100%; margin-bottom:9px; border-radius:4px; - transition:box-shadow 0.2s cubic-bezier(.19,1,.22,1); + transition:box-shadow 0.2s var(--animationTiming); background:#363c46; - color:#fff + color:var(--rootWhiteColor) +} + +.Notification-content p { + font-size:13px; + padding-top:3px; + display:block +} + +.Notification-content button { + width:33%; + display:block; + float:right!important; + position:relative; + padding-left:10px; + justify-content:normal; + white-space:nowrap +} + +.Notification-content button+button { + margin-top:-30px; + margin-left:150px } .Notification-icon { @@ -7865,7 +8190,7 @@ div[data-testid="trend"]>.txt-bold { min-width:54px; min-height:54px; border-radius:4px 0 0 4px; - color:#fff + color:var(--rootWhiteColor) } .Notification-icon .Icon { @@ -7886,7 +8211,8 @@ div[data-testid="trend"]>.txt-bold { } .Notification-title { - font-weight:400 + font-weight:400; + display:block } .Notification-title+.Notification-body { @@ -7904,8 +8230,8 @@ div[data-testid="trend"]>.txt-bold { width:55px; line-height:0; font-size:19px; - color:rgba(128,128,128,0.5); - transition:color .15s cubic-bezier(.19,1,.22,1); + color:rgba(255,255,255,0.5); + transition:color .15s var(--animationTiming); cursor:pointer } @@ -7957,6 +8283,10 @@ span[data-testid="trendDescription"] { bottom:0 } +.l-cell+.pin-bottom-full-width { + bottom:-50px +} + .pin-bottom-full-width { left:0; right:0; @@ -7972,8 +8302,10 @@ span[data-testid="trendDescription"] { position:absolute; display:block; width:80px; - top:0; - left:0 + right:2px; + z-index:1006; + height:100%; + margin-top:0!important } .btn-round { @@ -8010,7 +8342,6 @@ span[data-testid="trendDescription"] { display:block } - .width--20 { width:20px } @@ -8074,12 +8405,8 @@ span[data-testid="trendDescription"] { bottom:40px } -button[type="submit"] { - border-radius:3px -} - .Button--link[data-action="edit-list"],.Button--link[data-action="edit-customtimeline"] { - color:#fff!important + color:var(--rootWhiteColor)!important } .Notification-body { @@ -8102,14 +8429,9 @@ button[type="submit"] { font-size:14px } -#mtd-appearance-form select { - display:inline; - width:55% -} - .js-add-image-description:before { content:"\e873"; - font-family:"Material"; + font-family:Material; font-size:32px } @@ -8124,11 +8446,11 @@ button[type="submit"] { } .compose .compose-media-bar i.icon-close,.compose-media-bar>.js-add-image-description { - color:#fff!important + color:var(--rootWhiteColor)!important } .compose-media-bar-remove .icon-close:before,.js-add-image-description:before { - text-shadow:0 2px 5px #000,0 -2px 5px #000 + text-shadow:0 2px 5px var(--rootBlackColor),0 -2px 5px var(--rootBlackColor) } .js-add-image-description.pin-bottom { @@ -8156,6 +8478,11 @@ button[type="submit"] { margin-top:40px } +.s-fluid.mdl .mdl-content.js-mdl-content.horizontal-flow-container.with-scroll.scroll-v.scroll-alt.scroll-styled-v { + margin-top:0; + margin-left:30px +} + .tweet-detail-actions>.feature-customtimelines { position:absolute; display:block; @@ -8164,11 +8491,11 @@ button[type="submit"] { } .txt-mute[data-testid="locationLatLngText"],.js-geo-search::placeholder { - color:#fff!important + color:var(--rootWhiteColor)!important } .js-geo-search { - border-bottom-color:#fff + border-bottom-color:var(--rootWhiteColor) } .height-p--60 { @@ -8191,25 +8518,15 @@ button[type="submit"] { margin-bottom:0 } -.js-reply-info-container { - overflow:hidden -} - -li.padding-axl.flex.flex-row.flex-align--center .tweet-avatar { - width:36px; - height:36px -} - -.txt-size-variable--13 { - font-size:13px -} - li.padding-axl.flex.flex-row.flex-align--center .fullname { overflow:visible } .account-bio.txt-sub-antialiased.color-twitter-darker-gray.txt-size-variable--13.padding-t--5 { - padding-top:0!important; + margin-top:17px!important +} + +.user-results .account-bio.txt-sub-antialiased.color-twitter-darker-gray.txt-size-variable--13.padding-t--5 { margin-top:0!important } @@ -8242,6 +8559,10 @@ li.padding-axl.flex.flex-row.flex-align--center .fullname { padding-bottom:20px } +.prf-header .padding-b--20 { + padding-bottom:0 +} + .margin-t--4 { margin-top:4px } @@ -8272,7 +8593,6 @@ li.padding-axl.flex.flex-row.flex-align--center .fullname { display:none } - .border-box { box-sizing:border-box } @@ -8285,10 +8605,6 @@ li.padding-axl.flex.flex-row.flex-align--center .fullname { cursor:default } -.is-waiting { - cursor:wait -} - .no-radius { border-radius:0!important } @@ -8306,14 +8622,13 @@ li.padding-axl.flex.flex-row.flex-align--center .fullname { } .Tooltip,.ModalOverlay { - transition:opacity 0.25s cubic-bezier(.19,1,.22,1) + transition:opacity 0.25s var(--animationTiming) } .Tooltip.Tooltip--hover { opacity:1 } - .Tooltip-content { font-size:12px; line-height:18px; @@ -8324,7 +8639,7 @@ li.padding-axl.flex.flex-row.flex-align--center .fullname { cursor:pointer; float:right; padding:0 .5px 2px; - transition:color .15s cubic-bezier(.19,1,.22,1) + transition:color .15s var(--animationTiming) } .js-send-feedback { @@ -8393,10 +8708,6 @@ li.padding-axl.flex.flex-row.flex-align--center .fullname { padding-right:90px } -.inline-reply .js-account-safeguard-checkbox { - margin-top:20px -} - .account-settings-bb.hyphenate { margin-top:-34px; padding-top:0!important @@ -8423,36 +8734,25 @@ li.padding-axl.flex.flex-row.flex-align--center .fullname { .contributor-row { overflow:hidden; - transition:background .2s cubic-bezier(.19,1,.22,1),height .2s cubic-bezier(.19,1,.22,1),opacity .2s cubic-bezier(.19,1,.22,1) + transition:background 0.2s var(--animationTiming),height 0.2s var(--animationTiming),opacity 0.2s var(--animationTiming) } .padding-a--8 { padding:8px } -.keyboard-shortcut-list-modal { - min-height:550px!important -} - - .Drawer--modal { opacity:0; position:absolute; top:0; bottom:0; - transition:opacity .2s ease-in-out,left .2s ease-in-out,right .2s ease-in-out -} - -.Drawer--modal.is-open { - opacity:1 -} - -.Drawer--modal { - order:1; - right:-274px + order:1; + right:-274px; + transition:opacity 0.2s ease-in-out,left 0.2s ease-in-out,right 0.2s ease-in-out } .Drawer--modal.is-open { + opacity:1; right:0 } @@ -8462,10 +8762,9 @@ li.padding-axl.flex.flex-row.flex-align--center .fullname { order:1; width:608px; position:relative; - transition:left .4s ease-in-out,right .4s ease-in-out,margin-left .4s ease-in-out,margin-right .4s ease-in-out + transition:left 0.4s ease-in-out,right 0.4s ease-in-out,margin-left 0.4s ease-in-out,margin-right 0.4s ease-in-out } - .Drawer--inline.Drawer--large { right:-844px; margin-left:-844px @@ -8608,7 +8907,7 @@ li.padding-axl.flex.flex-row.flex-align--center .fullname { text-align:right } -.Panel-body,.Panel-title,.DateRangeDropdown-menuItem--footer .Button+.Button,.DateRangeDropdown-menuItem--footer .Button+button,.DateRangeDropdown-menuItem--footer .Button+input[type=button],.DateRangeDropdown-menuItem--footer button+.Button,.DateRangeDropdown-menuItem--footer button+button,.DateRangeDropdown-menuItem--footer button+input[type=button],.DateRangeDropdown-menuItem--footer input[type=button]+.Button,.DateRangeDropdown-menuItem--footer input[type=button]+button,.DateRangeDropdown-menuItem--footer input[type=button]+input[type=button] { +.Panel-body,.Panel-title,.DateRangeDropdown-menuItem--footer .Button+.Button,.DateRangeDropdown-menuItem--footer .Button+button,.DateRangeDropdown-menuItem--footer .Button+input[type="button"],.DateRangeDropdown-menuItem--footer button+.Button,.DateRangeDropdown-menuItem--footer button+button,.DateRangeDropdown-menuItem--footer button+input[type="button"],.DateRangeDropdown-menuItem--footer input[type="button"]+.Button,.DateRangeDropdown-menuItem--footer input[type="button"]+button,.DateRangeDropdown-menuItem--footer input[type="button"]+input[type="button"] { margin-left:10px } @@ -8616,9 +8915,9 @@ li.padding-axl.flex.flex-row.flex-align--center .fullname { display:flex; pointer-events:all; max-width:630px; - box-shadow:0 5px 15px 1px rgba(0,0,0,.25); + box-shadow:0 5px 15px 1px var(--contextMenuShadow); border-radius:3px; - animation:windowDown .4s cubic-bezier(.19,1,.22,1) + animation:windowDown 0.4s var(--animationTiming) } .DateRange-presets.PillGroup { @@ -8695,8 +8994,8 @@ li.padding-axl.flex.flex-row.flex-align--center .fullname { line-height:18px } -.PillGroup .Pill.is-selected>a,.PillGroup .Pill.is-selected>button { - color:#fff +.PillGroup .Pill.is-selected>a,.PillGroup .Pill.is-selected>button,.new-composer-bottom-button { + color:var(--rootWhiteColor) } .PillGroup .Pill.is-selected>a:hover,.PillGroup .Pill.is-selected>button:hover { @@ -8707,7 +9006,6 @@ li.padding-axl.flex.flex-row.flex-align--center .fullname { content:"\F043" } - .DatePickerDropdown.Dropdown { padding:0 } @@ -8725,7 +9023,7 @@ li.padding-axl.flex.flex-row.flex-align--center .fullname { text-align:right } -.DatePickerDropdown-menuItem--footer .Button+.Button,.DatePickerDropdown-menuItem--footer .Button+button,.DatePickerDropdown-menuItem--footer .Button+input[type=button],.DatePickerDropdown-menuItem--footer button+.Button,.DatePickerDropdown-menuItem--footer button+button,.DatePickerDropdown-menuItem--footer button+input[type=button],.DatePickerDropdown-menuItem--footer input[type=button]+.Button,.DatePickerDropdown-menuItem--footer input[type=button]+button,.DatePickerDropdown-menuItem--footer input[type=button]+input[type=button] { +.DatePickerDropdown-menuItem--footer .Button+.Button,.DatePickerDropdown-menuItem--footer .Button+button,.DatePickerDropdown-menuItem--footer .Button+input[type="button"],.DatePickerDropdown-menuItem--footer button+.Button,.DatePickerDropdown-menuItem--footer button+button,.DatePickerDropdown-menuItem--footer button+input[type="button"],.DatePickerDropdown-menuItem--footer input[type="button"]+.Button,.DatePickerDropdown-menuItem--footer input[type="button"]+button,.DatePickerDropdown-menuItem--footer input[type="button"]+input[type="button"] { margin-left:10px } @@ -8745,7 +9043,7 @@ li.padding-axl.flex.flex-row.flex-align--center .fullname { width:73px } -.DatePicker-nav .FormSelect .Button,.DatePicker-nav .FormSelect button,.DatePicker-nav .FormSelect input[type=button] { +.DatePicker-nav .FormSelect .Button,.DatePicker-nav .FormSelect button,.DatePicker-nav .FormSelect input[type="button"] { text-align:center } @@ -8813,8 +9111,8 @@ li.padding-axl.flex.flex-row.flex-align--center .fullname { } .DatePicker-calendarDay.is-withinRange { - border-radius:0; - } + border-radius:0 +} .DatePicker--withPendingRange .DatePicker-calendarDay.is-rangeEnd,.DatePicker--withPendingRange .DatePicker-calendarDay.is-rangeStart,.DatePicker--withPendingRange .DatePicker-calendarDay.is-withinRange { padding:0 1px; @@ -8901,7 +9199,7 @@ li.padding-axl.flex.flex-row.flex-align--center .fullname { cursor:pointer } -.FormSelect .Button,.FormSelect .FormInput,.FormSelect button,.FormSelect input[type=button] { +.FormSelect .Button,.FormSelect .FormInput,.FormSelect button,.FormSelect input[type="button"] { width:inherit; overflow:hidden; text-overflow:ellipsis; @@ -8913,11 +9211,11 @@ li.padding-axl.flex.flex-row.flex-align--center .fullname { position:absolute } -.FormSelect .Button,.FormSelect button,.FormSelect input[type=button] { +.FormSelect .Button,.FormSelect button,.FormSelect input[type="button"] { padding-right:36px } -.FormSelect .Button .Button-adornment,.FormSelect button .Button-adornment,.FormSelect input[type=button] .Button-adornment { +.FormSelect .Button .Button-adornment,.FormSelect button .Button-adornment,.FormSelect input[type="button"] .Button-adornment { right:15px } @@ -8954,6 +9252,10 @@ li.padding-axl.flex.flex-row.flex-align--center .fullname { animation:colourDemo 10s infinite } +.mtd-colours-demo-text { + animation:colourDemoText 10s infinite +} + .compose .typeahead-item .fullname,.compose .typeahead-item .username { overflow:visible } @@ -8963,10 +9265,9 @@ li.padding-axl.flex.flex-row.flex-align--center .fullname { } #mtd_af_mdl { - animation:windowDown .3s cubic-bezier(.19,1,.22,1) + animation:windowDown 0.3s var(--animationTiming) } - @keyframes colourDemoAprilFoolsBackground { 0% {background-color:#E53935} @@ -8983,8 +9284,15 @@ li.padding-axl.flex.flex-row.flex-align--center .fullname { animation:colourDemoAprilFoolsBackground 2s infinite } +.mtd-app.mtd-maximized #column-navigator { + right:30%!important +} + +.mtd-app:not(.mtd-maximized) .app-header { + height:80px +} + .mtd-app .app-header { - height:80px; -webkit-app-region:drag } @@ -8992,11 +9300,11 @@ li.padding-axl.flex.flex-row.flex-align--center .fullname { -webkit-app-region:no-drag } -.mtd-app .app-content { +.mtd-app:not(.mtd-maximized) .app-content { top:80px } -.mtd-app .column-navigator { +.mtd-app:not(.mtd-maximized) .column-navigator { height:40px; margin-top:40px; -webkit-app-region:no-drag; @@ -9005,19 +9313,31 @@ li.padding-axl.flex.flex-row.flex-align--center .fullname { right:40px } -.mtd-app .drawer { +.mtd-app:not(.mtd-maximized) .drawer { top:-40px; bottom:0 } -.mtd-app .app-search-fake { +.mtd-app:not(.mtd-maximized):not(.mtd-app-mac) .app-search-fake { margin-top:40px } -.mtd-app .js-search-in-popover .popover-position-rt { +.mtd-app.mtd-maximized:not(.mtd-app-mac) .app-search-fake { + margin-right:130px +} + +.mtd-app.mtd-maximized .js-search-in-popover .popover-position-rt { + margin-top:10px; + margin-right:130px +} + +.mtd-app:not(.mtd-maximized) .js-search-in-popover .popover-position-rt { margin-top:50px } +.mtd-app-mac .js-search-in-popover .popover-position-rt { + margin-top:10px +} .windowcontrols { margin-left:auto; @@ -9027,9 +9347,14 @@ li.padding-axl.flex.flex-row.flex-align--center .fullname { display:block; margin-top:10px; pointer-events:all; + top:0; -webkit-app-region:no-drag } +html:not(.mtd-app) .windowcontrols, .mtd-app-mac .windowcontrols { + display:none +} + .windowcontrol { background:none; border:none; @@ -9042,19 +9367,19 @@ li.padding-axl.flex.flex-row.flex-align--center .fullname { line-height:0; top:-13px; opacity:0.8; - font-family:"Material"; + font-family:Material; font-weight:600; -webkit-appearance:none; - color:#fff; + color:var(--rootWhiteColor)!important; margin:3px; -webkit-app-region:no-drag; pointer-events:all; - transform:rotate(180deg) + transform:rotate(180deg); + transition:background 300ms,opacity 300ms } .windowcontrol:hover { background:rgba(0,0,0,0.3); - transition:background 300ms,opacity 300ms; cursor:default; opacity:1; border:0 @@ -9071,7 +9396,7 @@ li.padding-axl.flex.flex-row.flex-align--center .fullname { .windowcontrol.close:hover { background:#e44; - color:#fff + color:var(--rootWhiteColor) } .windowcontrol.close:active { @@ -9086,11 +9411,12 @@ li.padding-axl.flex.flex-row.flex-align--center .fullname { right:79px } -.mtd-app .column-nav-item,.mtd-app .column-nav-item.is-new { +.mtd-app .column-nav-item,.mtd-app .column-nav-item.is-new, +.mtd-mtd-column-nav-always-visible .column-nav-item,.mtd-mtd-column-nav-always-visible .column-nav-item.is-new { opacity:1!important; width:40px!important; transform:none; - transition:.2s all cubic-bezier(.19,1,.22,1),.4s transform + transition:0.2s all var(--animationTiming),.4s transform } .mtd-maximized .windowcontrol.max { @@ -9098,58 +9424,623 @@ li.padding-axl.flex.flex-row.flex-align--center .fullname { } .mtd-context-menu,.mtd-context-menu ul,.mtd-context-menu a,.mtd-context-menu div { - -position:relative; - -/* display: table; */ + position:relative } - .mtd-context-menu { animation-name:contextMenuDown; - transition:opacity 0.2s cubic-bezier(.19,1,.22,1); + transition:opacity 0.2s var(--animationTiming); position:absolute; - width: fit-content; - z-index: 31; + width:fit-content; + z-index:31 } .mtd-context-menu li:not(.drp-h-divider) { - width: auto; - float: left; - clear: left; - display: inline-block; - position: relative; - padding: 0; - height: 42px; + width:auto; + float:left; + clear:left; + display:inline-block; + position:relative; + padding:0; + height:42px } .mtd-context-menu div.drp-h-divider { - width: 100%; - float: left; - clear: left; - display: inline-block; - position: relative; - padding: 0; + width:100%; + float:left; + clear:left; + display:inline-block; + position:relative; + padding:0 } .mtd-context-menu a { - /* position:absolute; */ - line-height: 2.75; - padding: 15px; - height: auto; + line-height:2.75; + padding:15px; + height:auto; + -webkit-app-region:no-drag } .mtd-context-menu a[disabled] { - opacity:0.35; + opacity:0.35 } .mtd-context-menu div.drp-h-divider:last-child { - display:none; + display:none } .mtd-context-menu ul { padding:5px; + padding-left:0 +} + +.mtd-app:not(.dark):not(.light):before { + -webkit-app-region:drag; + display:block; + position:absolute; + height:40px; + top:0; + left:0; + right:0 +} + +.mtd-settings-subpanel-hidden { + display:none +} + +.mtd-settings-panel { + display:block; + position:absolute; + left:0; + right:0; + top:0; + bottom:0; + width:700px!important +} + +.mtd-settings-subpanel { + height:100%; + width:660px; + display:block; + position:absolute; + overflow-y:auto; + overflow-x:hidden; + padding:20px; + padding-top:0 +} + +.mtd-settings-subpanel:nth-child(1) { + margin-left:0 +} + +.mtd-settings-subpanel:nth-child(2) { + margin-left:700px +} + +.mtd-settings-subpanel:nth-child(3) { + margin-left:1400px +} + +.mtd-settings-subpanel:nth-child(4) { + margin-left:2100px +} + +.mtd-settings-subpanel:nth-child(5) { + margin-left:2800px +} + +.mtd-settings-subpanel:nth-child(6) { + margin-left:3500px +} + +.mtd-settings-subpanel:nth-child(7) { + margin-left:4200px +} + +.mtd-settings-subpanel:nth-child(8) { + margin-left:4900px +} + +.mtd-settings-inner { + min-height:300px; + transition:margin-left 0.3s var(--animationTiming); + bottom:0; + top:66px; + left:0; + right:0; + position:absolute; + overflow:hidden +} + +.mtd-settings-panel-subheader { + margin-top:0; + padding-top:20px +} + +.mtd-settings-option .checkbox,.mtd-settings-option .radio { + display:block; + pointer-events:all; + margin-bottom:0; + min-height:2px; padding-left:0; - /* height: fit-content; */ - /* display: block; */ + vertical-align:bottom; + padding-top:4px; + height:20px +} + +.mtd-settings-tab { + padding:20px 23.4px; + color:var(--rootWhiteColor); + -webkit-app-region:no-drag; + transition:color 0.3s var(--animationTiming), border-bottom 0.3s var(--animationTiming) +} + +html:not(.mtd-js-app) .mtd-settings-tab { + padding:20px 29.6px +} + +.mtd-settings-tab:not(.mtd-settings-tab-selected) { + border-bottom:0 solid rgba(0,0,0,0)!important +} + +.mtd-settings-tab-container { + box-shadow:0 5px 10px rgba(15,15,15,0.3) +} + +.mtd-logo-container { + padding:12px +} + +.mtd-settings-subpanel select, .mtd-settings-subpanel input[type="text"] { + width:160px; + display:inline-block; + float:right +} + +.mtd-settings-subpanel label { + display:inline-block; + margin-bottom:0; + padding-top:14px; + padding-left:0 +} + +.mtd-settings-option { + width:100%; + height:50px; + margin-top:3px +} + +.mtd-settings-option-checkbox { + height:28px; + margin-bottom:8px +} + +.mtd-settings-option-link { + padding-top:16px; + cursor:pointer +} + +.mtd-settings-subpanel p { + font-size:16px; + padding:30px +} + +.mtd-settings-option input[type="checkbox"], .mtd-settings-option input[type="radio"] { + position:relative; + margin-left:0 +} + +.mtd-update-container,.mtd-update-container>* { + float:left +} + +.mtd-update-container { + margin-top:30px; + display:inline-block; + position:absolute; + left:60px +} + +.mtd-update-container h2 { + font-size:16px; + padding-left:20px; + font-weight:500; + margin-bottom:0; + margin-block-start:0; + margin-block-end:0 +} + +.mtd-update-container h3 { + font-size:14px; + padding-left:55px; + font-weight:400; + margin-block-start:0; + margin-block-end:0; + margin-top:24px; + position:absolute; + width:475px +} + +.mtd-update-container button { + margin-top:-6px +} + +.mtd-update-container i { + font-size:36px +} + +.hidden { + display:none +} + +.mtd-about-info { + bottom:20px; + position:absolute +} + +.mtd-about-info p { + font-size:14px; + line-height:0.9 +} + +label.checkbox::selection,label.control-label::selection { + background:transparent +} + +.mtd-big-text-box>input[type="text"] { + width:300px +} + + +.gif-badge { + margin-top:-30px; + z-index:99; + height:32px +} + +.mtd-slider-minimum,.mtd-slider-maximum { + float:right; + padding-left:8px!important; + padding-top:17px!important +} + +.mtd-settings-option-slider input[type="range"] { + -webkit-appearance:none; + width:55%; + float:right; + border-radius:2px; + padding:0; + padding-top:10px; + height:14px +} + +.mtd-settings-option-slider input[type="range"]::-webkit-slider-thumb { + -webkit-appearance:none; + appearance:none; + width:16px; + height:16px; + border-radius:50%; + margin-top:18px; + cursor:pointer +} + +.mtd-settings-option-slider input[type="range"]::-moz-range-thumb { + width:16px; + height:16px; + border-radius:50%; + margin-top:18px; + cursor:pointer +} + +.item-box .activity-header .account-link { + padding-left:5px +} + +.mtd-settings-option-slider b { + font-size:18px; + padding-left:20px +} + +.list-filter em { + font-style:normal +} + +.compose .spinner-button-container .spinner-button-icon-spinner { + margin-top:7px; + margin-left:9px +} + +.is-shifted-2 .js-accounts-column-holder .column-panel:nth-child(3) { + left:0%!important; + z-index:10 +} + +.js-accounts-column-holder .is-shifted-1 .column-panel:nth-child(n+2) { + left:100%!important +} + +.js-team-invitations-back.is-actionable,.js-team-invitations-back.is-actionable>.drawer-header-title { + pointer-events:all!important +} + +.flex.flex-column.opacity--100.bg-color-twitter-midnight-dark-gray { + -webkit-app-region:no-drag; + pointer-events:none +} + +.js-account-safeguard-checkbox+.margin-t--4 { + margin-top:-3px +} + +.account-summary-text>.account-link { + top:29px; + left:calc(var(--avatarSize) + 10px); + position:absolute +} + +.dropdown-menu a[data-action] { + font-size:14px +} + +.dropdown-menu .dropdown-text-large a[data-action]:before { + display:none!important +} + +.dropdown-menu a[data-action]:before { + height:24px; + width:24px; + font-family:Material; + font-size:22px; + vertical-align:middle; + line-height:28px; + position:relative; + padding-right:5px; + display:block; + float:left +} + +.mtd-context-menu.dropdown-menu a[data-action]:before { + padding-right:0; + padding-top:4px; + margin-left:12px; + margin-right:-10px +} + +.dropdown-menu a[data-action="embed"]:before,.dropdown-menu a[data-action="inspectElement"]:before { + content:"\e86f" +} + +.dropdown-menu a[data-action="reference-to"]:before { + content:"\e157" +} + +.dropdown-menu a[data-action="message-to"]:before,.dropdown-menu a[data-action="message"]:before { + content:"\e0c9" +} + +.dropdown-menu a[data-action="email"]:before { + content:"\e0be" +} + +.dropdown-menu a[data-action="mention"]:before { + content:"\f000"; + font-family:MD +} + +.dropdown-menu a[data-action="followOrUnfollow"]:before { + content:"\e7fe" +} + +.dropdown-menu a[data-action="favoriteOrUnfavorite"]:before { + content:"\e87d" +} + +.dropdown-menu a[data-action="lists"]:before { + content:"\e8ef" +} + +.dropdown-menu a[data-action="customtimelines"]:before { + content:"\e431" +} + +.dropdown-menu a[data-action="search-for-quoted"]:before { + content:"\e244" +} + +.dropdown-menu a[data-action="flag-media"]:before { + content:"\e153" +} + +.dropdown-menu a[data-action="mute"]:before,.dropdown-menu a[data-action="muteConversation"]:before { + content:"\e04f" +} + +.dropdown-menu a[data-action="block"]:before { + content:"\e14b" +} + +.dropdown-menu a[data-action="report-tweet"]:before,.dropdown-menu a[data-action="report-spam"]:before { + content:"\e160" +} + +.dropdown-menu a[data-action="destroy"]:before { + content:"\e872" +} + +.dropdown-menu a[data-action="openLink"]:before,.dropdown-menu a[data-action="openImage"]:before { + content:"\e89d" +} + +.dropdown-menu a[data-action="cut"]:before { + content:"\e14e" +} + +.dropdown-menu a[data-action="copy"]:before,.dropdown-menu a[data-action="copyLink"]:before,.dropdown-menu a[data-action="copyImageURL"]:before { + content:"\e14d" +} + +.dropdown-menu a[data-action="copyImage"]:before { + content:"\e173" +} + +.dropdown-menu a[data-action="paste"]:before { + content:"\e14f" +} + +.dropdown-menu a[data-action="selectAll"]:before { + content:"\e162" +} + +.dropdown-menu a[data-action="undo"]:before { + content:"\e166" +} + +.dropdown-menu a[data-action="redo"]:before { + content:"\e15a" +} + +.dropdown-menu a[data-action="saveImage"]:before { + content:"\e171" +} + +.tweet-message>.l-table { + width:77%; + float:left; + margin-top:-24px +} + +.message-stream-item .tweet-actions>li { + margin:-10px 0 10px 0!important +} + +footer>.js-tweet-stats>.tweet-stats:not(.js-stats-list) { + height:21px; + margin-top:-23px; + margin-bottom:0; + position:absolute; + right:-32px +} + +.modal-content>ul.lst>.padding-axl { + padding:20px +} + +.js-modal-inner.mdl.margin-v--20.s-fluid .modal-content.position-rel.width--600.max-height--400.seamful.scroll-v { + position:absolute; + top:64px; + bottom:0; + left:0; + right:0; + height:auto; + width:auto +} + +.js-in-reply-to.compose-reply-tweet { + overflow:hidden +} + +.js-in-reply-to.compose-reply-tweet>.tweet-header>.account-link>b,.js-in-reply-to.compose-reply-tweet>.tweet-header>.account-link>span { + vertical-align:top; + line-height:24px +} + +.query { + margin-top:16px +} + +.thread.margin-t--4 { + margin-top:10px +} + +.mtd-settings-button { + display:block; + float:none; + margin-top:40px; + box-shadow:0 3px 7px var(--composeShadow); + padding:11px; + border-radius:4px +} + +.mtd-settings-option-button .control-label { + display:block; + float:none +} + +.mtd-settings-option-button .control-label b { + font-size:18px; + font-weight:400; + margin-right:373px; + width:300px; + display:inline; + white-space:nowrap; + margin-left:10px +} + +.mtd-settings-option-button { + height:auto +} + +.mtd-app-mac .tweet-button:not(.is-hidden):not(.js-hide-drawer) { + margin-left:105px +} + +.mtd-app-mac .application:not(.hide-detail-view-inline) .mtd-drawer-button { + margin-left:65px +} + +.mtd-app-mac .windowcontrols,.mtd-app-mac .tweet-button>i:after { + display:none +} + +.mtd-app-mac .tweet-button.is-hidden>i:before { + margin-left:105px +} + +.js-typeahead-dropdown { + padding:10px +} + +.remove-recent-search-item { + margin-top:-16px +} + +.popover .js-typeahead-user-item { + overflow:hidden +} + +.popover .search-results-container { + overflow-y:auto; + position:fixed; + bottom:0; + top:47px; + right:0; + width:355px +} + +.mtd-app:not(.mtd-app-mac) .popover .search-results-container { + top:88px +} + +.column-nav[role="toolbar"] button { + color:var(--rootWhiteColor) +} + +.js-card-container iframe { + height:auto!important +} + +.column-header-temp>.padding-h--10 { + margin-block-end:0; + margin-block-start:0 +} + +.padding-l--10 { + padding-left:10px; + padding-right:10px +} + +.mtd-check-out-app { + position:absolute; + top:100px; + font-size:14px!important } \ No newline at end of file diff --git a/README.md b/README.md index a5a1f4c1..a5a7f494 100644 --- a/README.md +++ b/README.md @@ -1,33 +1,199 @@ +# ModernDeck 7 Beta +[![Build Status](https://travis-ci.com/dangeredwolf/ModernDeck.svg?branch=master)](https://travis-ci.com/dangeredwolf/ModernDeck) -ModernDeck -================== +ModernDeck is an extension/app for TweetDeck that brings a vastly overhauled interface with tons of Material Design influence, as well as new customisation features. -An extension that adds nice things to TweetDeck, like a material design interface. +ModernDeck is designed by dangeredwolf in Columbus, OH and released under the MIT License. -Installation -================== -**Chrome** -1. Go to Chrome Menu > More tools > Extensions +Preparation for building ModernDeck from source varies depending on whether you want to build the extension only, or the extension and app. -2. Check Developer Mode in the top right if you haven't -3. Click "Load unpacked extension..." -4. Select the "ModernDeck" folder +## Building the ModernDeck (Electron-based) app -5. If all is well it'll load! +ℹ *These steps are not required if you only plan on testing the browser extension and not the app, you can skip to "Building the extension for different browsers" below.* -**Opera** -1. Go to View > Extensions (If on Windows you may need to directly go to opera://extensions) -2. Click the "Developer Mode" button if you haven't yet +### Dependencies -3. Click "Load Unpacked Extension..." +To build the ModernDeck app, you need to first install Node.js (which comes with npm), as well as Yarn -4. Select the "ModernDeck" folder +ℹ *ModernDeck is tested against the latest LTS version of Node.js, but it will likely work fine with the Current version as well.* -5. If all is well it'll load! + + +#### Windows + +For Windows, [you can download Node.js here](https://nodejs.org/en/) + + + +#### macOS + +For macOS, you can install the necessary packages using [Homebrew](https://brew.sh/). + +`brew install git node` + +❓ *[Alternatively, you can also install nodejs using the .pkg installer](https://nodejs.org/en/)* + + + +#### Linux + +On Linux, it varies depending on your distribution. If you're using Ubuntu or Debian, you just need to run: + +`sudo apt install git nodejs` + + + +### Checking out + +You'll want to use your Terminal (macOS and Linux) or PowerShell (Windows) for this. + +⚠ *On Windows, you will need to download git if you haven't yet already. You can either [download just git itself](https://git-scm.com/download/win), or [download GitHub's Windows client](https://desktop.github.com/), which also includes git and other tools, even if you don't use the GUI portion.* + +First, of course, `cd` into a directory where you want to clone the source to. + +Next, clone the git. + +`git clone https://github.com/dangeredwolf/ModernDeck.git` + +Finally, install all the necessary dependencies + +`npm install` + +ℹ *This may take several minutes* + + + +### Testing and building + +From the main folder where you just were, you can run the app for testing using: + +`npm start` + +This will allow you to test code changes without creating an installer every time. + + + +If you want to create the proper installers, you can run: + +`npm run build` +...to build for every platform your OS supports building for + +`npm run buildWindows` +...to build for Windows + +`npm run buildMac` +...to build for macOS + +`npm run buildLinux` +...to build for Linux + + + +❓ *For more advanced users, you may prefer to [run electron-builder directly.](https://www.electron.build/)* + +⚠ *Building for macOS requires running under macOS. Under macOS, you can build for Windows, macOS, and Linux. Under both Linux and Windows, you can build for both Linux and Windows.* + + + +## Building the extension for different browsers + +ℹ *If you have already done the steps above to begin building for apps, you can skip the Checking out section.* + + +### Checking out + +You'll want to use your Terminal (macOS and Linux) or PowerShell (Windows) for this. + +⚠ *On Windows, you will need to download git if you haven't yet already. You can either [download just git itself](https://git-scm.com/download/win), or [download GitHub's Windows client](https://desktop.github.com/), which also includes git and other tools, even if you don't use the GUI portion.* + +First, of course, `cd` into a directory where you want to clone the source to. + +Next, clone the git. + +`git clone https://github.com/dangeredwolf/ModernDeck.git` + +❓ *You can also use [GitHub Desktop](https://desktop.github.com/) to clone ModernDeck* + +ℹ *Currently, there is no additional preparation necessary to begin testing ModernDeck in your browser from source.* + + + +### Loading the unpacked extension into your browser + +To test the extension, you'll want to load the unpacked extension. This, of course, varies by browser. + + +#### Chrome + +Open the Chrome menu, go to **More tools > Extensions** + +Check *Developer Mode* in the corner if you haven't already. + +Click the **Load Unpacked** button + +Navigate to *ModernDeck\ModernDeck* and click Select Folder + + +#### Firefox + +Go to *about:debugging* + +Check **Enable add-on debugging** + +Click **Load Temporary Add-on...** + +Navigate to *ModernDeck\ModernDeck\manifest.json* + + +#### Microsoft Edge (Chromium-based) + +Open the **...** menu + +Click **Extension** + +Turn on **Developer Mode** in the bottom left if you haven't already + + +#### Microsoft Edge (EdgeHTML-based) + +First, you need to enabled Developer Features, if you haven't already. + +Go to *about:flags* + +Check *Enable extension developer features* + +Restart Edge if it asks you to + +Open the **...** menu + +Click **Extensions** + +Scroll down to the bottom + +Click **Load Extension** + +Select the folder *ModernDeck\ModernDeck* + + +#### Opera + +Press *Ctrl+Alt+E* to open Extensions + +Check **Developer Mode** if you haven't already + +Click **Load Unpacked** + +Select *ModernDeck\ModernDeck* + + +## ❓ Questions? + +Don't hesitate to ask! +twitter.com/dangeredwolf or twitter.com/ModernDeck diff --git a/build/appx/BadgeLogo.png b/build/appx/BadgeLogo.png new file mode 100644 index 00000000..83c8af22 Binary files /dev/null and b/build/appx/BadgeLogo.png differ diff --git a/build/appx/Square150x150Logo.png b/build/appx/Square150x150Logo.png new file mode 100644 index 00000000..3346b945 Binary files /dev/null and b/build/appx/Square150x150Logo.png differ diff --git a/build/appx/Square310x310Logo.png b/build/appx/Square310x310Logo.png new file mode 100644 index 00000000..a38d92bc Binary files /dev/null and b/build/appx/Square310x310Logo.png differ diff --git a/build/appx/Square44x44Logo.png b/build/appx/Square44x44Logo.png new file mode 100644 index 00000000..1fddf4ed Binary files /dev/null and b/build/appx/Square44x44Logo.png differ diff --git a/build/appx/Square71x71Logo.png b/build/appx/Square71x71Logo.png new file mode 100644 index 00000000..1e0d2bd3 Binary files /dev/null and b/build/appx/Square71x71Logo.png differ diff --git a/build/appx/StoreLogo.png b/build/appx/StoreLogo.png new file mode 100644 index 00000000..ef3fd7aa Binary files /dev/null and b/build/appx/StoreLogo.png differ diff --git a/build/appx/Wide310x150Logo.png b/build/appx/Wide310x150Logo.png new file mode 100644 index 00000000..dcf3c1e8 Binary files /dev/null and b/build/appx/Wide310x150Logo.png differ diff --git a/build/appx/WideLogo.psd b/build/appx/WideLogo.psd new file mode 100644 index 00000000..debacf35 Binary files /dev/null and b/build/appx/WideLogo.psd differ diff --git a/build/appx/mdicon.psd b/build/appx/mdicon.psd new file mode 100644 index 00000000..81e76dbb Binary files /dev/null and b/build/appx/mdicon.psd differ diff --git a/build/appx/mdstore.psd b/build/appx/mdstore.psd new file mode 100644 index 00000000..cbcffb64 Binary files /dev/null and b/build/appx/mdstore.psd differ diff --git a/build/dmg/background.png b/build/dmg/background.png new file mode 100644 index 00000000..6ea2405b Binary files /dev/null and b/build/dmg/background.png differ diff --git a/build/dmg/background@2x.png b/build/dmg/background@2x.png new file mode 100644 index 00000000..5c65f581 Binary files /dev/null and b/build/dmg/background@2x.png differ diff --git a/build/dmg/dmg.png b/build/dmg/dmg.png new file mode 100644 index 00000000..c5d97c29 Binary files /dev/null and b/build/dmg/dmg.png differ diff --git a/build/dmg/dmg.psd b/build/dmg/dmg.psd new file mode 100644 index 00000000..a497bb8c Binary files /dev/null and b/build/dmg/dmg.psd differ diff --git a/build/icon.ico b/build/icon.ico new file mode 100644 index 00000000..6c4efe1c Binary files /dev/null and b/build/icon.ico differ diff --git a/build/icon.png b/build/icon.png new file mode 100644 index 00000000..def25add Binary files /dev/null and b/build/icon.png differ diff --git a/build/icon_.icns b/build/icon_.icns new file mode 100644 index 00000000..4398bcb2 Binary files /dev/null and b/build/icon_.icns differ diff --git a/build/icon_old.png b/build/icon_old.png new file mode 100644 index 00000000..f2b3f3c9 Binary files /dev/null and b/build/icon_old.png differ diff --git a/build/icons/150x150.png b/build/icons/150x150.png new file mode 100644 index 00000000..9d279949 Binary files /dev/null and b/build/icons/150x150.png differ diff --git a/build/icons/16x16.png b/build/icons/16x16.png new file mode 100644 index 00000000..1384b1f9 Binary files /dev/null and b/build/icons/16x16.png differ diff --git a/build/icons/24x24.png b/build/icons/24x24.png new file mode 100644 index 00000000..412d665f Binary files /dev/null and b/build/icons/24x24.png differ diff --git a/build/icons/32x32.png b/build/icons/32x32.png new file mode 100644 index 00000000..68279a99 Binary files /dev/null and b/build/icons/32x32.png differ diff --git a/build/icons/48x48.png b/build/icons/48x48.png new file mode 100644 index 00000000..3b19d222 Binary files /dev/null and b/build/icons/48x48.png differ diff --git a/build/icons/500x500.png b/build/icons/500x500.png new file mode 100644 index 00000000..f2b3f3c9 Binary files /dev/null and b/build/icons/500x500.png differ diff --git a/build/icons/512x512.png b/build/icons/512x512.png new file mode 100644 index 00000000..def25add Binary files /dev/null and b/build/icons/512x512.png differ diff --git a/build/icons/64x64.png b/build/icons/64x64.png new file mode 100644 index 00000000..f1839ff4 Binary files /dev/null and b/build/icons/64x64.png differ diff --git a/dev-app-update.yml b/dev-app-update.yml new file mode 100644 index 00000000..92f422ab --- /dev/null +++ b/dev-app-update.yml @@ -0,0 +1,4 @@ +owner: dangeredwolf +repo: ModernDeck +provider: github +updaterCacheDirName: moderndeck-updater diff --git a/docs/bundle.js b/docs/bundle.js deleted file mode 100644 index 411aca93..00000000 --- a/docs/bundle.js +++ /dev/null @@ -1,52169 +0,0 @@ -// This is solely property of Twitter, Inc. and is included for personal markup and research purposes only. - -webpackJsonp([1], [function(e, t, i) { - i(617), - e.exports = i(575) -} -, , function(e, t, i) { - var s = i(6) - , n = i(45) - , r = i(23) - , o = i(24) - , a = i(46) - , c = "prototype" - , l = function(e, t, i) { - var u, d, h, m, p = e & l.F, f = e & l.G, g = e & l.S, v = e & l.P, T = e & l.B, w = f ? s : g ? s[t] || (s[t] = {}) : (s[t] || {})[c], b = f ? n : n[t] || (n[t] = {}), y = b[c] || (b[c] = {}); - f && (i = t); - for (u in i) - d = !p && w && void 0 !== w[u], - h = (d ? w : i)[u], - m = T && d ? a(h, s) : v && "function" == typeof h ? a(Function.call, h) : h, - w && o(w, u, h, e & l.U), - b[u] != h && r(b, u, m), - v && y[u] != h && (y[u] = h) - } - ; - s.core = n, - l.F = 1, - l.G = 2, - l.S = 4, - l.P = 8, - l.B = 16, - l.W = 32, - l.U = 64, - l.R = 128, - e.exports = l -} -, [877, 10], function(e, t, i) { - var s; - s = function(e) { - function t() { - this.render = function(e, t) { - this.$node.html(this.toHtml(e, t)) - } - , - this.renderTemplate = function(e, t) { - return $(TD.ui.template.render(e, t)) - } - , - this.toHtml = function(e, t) { - return TD.ui.template.render(e, t) - } - , - this.toHtmlFromRaw = function(e, t) { - var i = Hogan.compile(e); - return i.render(t) - } - , - this.toURLFromRaw = function(e, t) { - return e.replace(/\{\{([^}]+?)\}\}/g, function(e, i) { - return encodeURIComponent(t[i]) - }) - } - } - return t - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, function(e, t) { - e.exports = function(e) { - try { - return !!e() - } catch (t) { - return !0 - } - } -} -, function(e, t) { - var i = e.exports = "undefined" != typeof window && window.Math == Math ? window : "undefined" != typeof self && self.Math == Math ? self : Function("return this")(); - "number" == typeof __g && (__g = i) -} -, , , function(e, t) { - "use strict"; - function i(e) { - e = e.replace(h, "/"); - var t = m[e]; - return void 0 === t && (t = c.getHogan(e), - t = l.compile(t, p), - m[e] = t), - t - } - function s(e, t) { - var s = this.partials[e]; - return t = t || {}, - t[s.name] || (t[s.name] = i(s.name)), - Hogan.Template.prototype.ep.call(this, e, t) - } - function n(e, t, i) { - for (var s = Hogan.parse.call(this, e, t, i), n = "", o = 0; o < s.length; o++) - if ("_v" === s[o].tag && 0 === s[o].n.indexOf("%TRANSLATION-HINT")) { - var a = s.splice(o, 1)[0]; - o--, - n = a.n.substring(a.n.indexOf("mode=") + "mode=".length) - } - return r(s, n, t, i) - } - function r(e, t, i, s) { - for (var n = [], c = 0; c < e.length; c++) - if ("#" === e[c].tag && "_i" === e[c].n) { - var l = a(i.substring(e[c].i, e[c].end), t); - "raw" === l.tag ? n.push(l) : Array.prototype.push.apply(n, Hogan.parse(Hogan.scan(l, s.delimiters), i, s)) - } else - "#" === e[c].tag || "^" === e[c].tag || "<" === e[c].tag || "$" === e[c].tag ? (e[c].nodes = r(e[c].nodes, t, i, s), - n.push(e[c])) : n.push(e[c]); - return o(n) - } - function o(e) { - if (0 === e.length) - return e; - for (var t = [e[0]], i = 1; i < e.length; i++) - if ("_t" !== t[t.length - 1].tag || "\n" !== e[i].tag && "_t" !== e[i].tag) - t.push(e[i]); - else { - var s = t[t.length - 1] - , n = e[i].text; - void 0 === n && (n = "\n"), - s.text += "" + n - } - return t - } - function a(e, t) { - var i; - return i = "" !== t ? { - text: e, - mode: t - } : e, - TD.i(i, null , !0) - } - var c = {}; - e.exports = c; - var l, u, d, h = /\\/g, m = {}, p = { - sectionTags: [{ - o: "_i", - c: "i" - }] - }; - d = function(e, t, i, n) { - this.ep = s, - Hogan.Template.call(this, e, t, i, n) - } - , - d.prototype = Hogan.Template.prototype, - u = function() {} - , - u.prototype = Hogan, - l = new u, - l.template = d, - l.parse = n, - c.getHogan = function(e) { - var t = e + ".mustache" - , i = TD.mustaches[t]; - return void 0 === i ? console.error('TD.mustaches["' + t + '"] is not defined') : i = i.trim(), - i - } - , - c.render = function(e, t, s) { - var n, r = i(e), o = []; - t = t || {}; - for (var a in TD.globalRenderOptions) - void 0 === t[a] && (t[a] = TD.globalRenderOptions[a], - o.push(a)); - return n = r.render(t, s), - o.forEach(function(e) { - delete t[e] - }), - n.trim() - } - , - c.toHtml = function(e, t, i) { - var s = l.compile(e, p); - return s.render(t, i).trim() - } - , - c.toHtmlFromRaw = function(e, t) { - var i = Hogan.compile(e); - return i.render(t) - } - , - c.toURLFromRaw = function(e, t) { - return e.replace(/\{\{([^}]+?)\}\}/g, function(e, i) { - return encodeURIComponent(t[i]) - }) - } -} -, function(e, t) { - e.exports = function(e) { - return "object" == typeof e ? null !== e : "function" == typeof e - } -} -, function(e, t, i) { - var s; - s = function(e) { - function t() { - this.getClientByAccountKey = function(e) { - var t; - return t = e ? TD.controller.clients.getClient(e) : this.getTwitterClient("twitter") - } - , - this.getClientByAccount = function(e) { - return this.getClientByAccountKey(e.getKey()) - } - , - this.getPreferredClient = function(e) { - return TD.controller.clients.getPreferredClient(e) - } - , - this.getTwitterClient = function() { - return this.getPreferredClient("twitter") - } - , - this.getTweetDeckClient = function() { - return this.getClientsByService("tweetdeck")[0] - } - , - this.getClientsByService = function(e) { - return TD.controller.clients.getClientsByService(e) - } - , - this.getAccountData = function(e) { - var t = this.getClientByAccountKey(e); - if (!t) - return null ; - var i = t.oauth.account; - return { - accountKey: e, - id: i.getUserID(), - screenName: i.getUsername(), - profileImageURL: i.getProfileImageURL() - } - } - } - return t - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, [922, 110, 61, 6], [881, 5], [899, 3, 203, 41, 13], [917, 53], [918, 36], function(e, t) { - var i = {}.hasOwnProperty; - e.exports = function(e, t) { - return i.call(e, t) - } -} -, function(e, t, i) { - e.exports = { - "default": i(804), - __esModule: !0 - } -} -, function(e, t, i) { - e.exports = { - "default": i(803), - __esModule: !0 - } -} -, , , function(e, t, i) { - var s; - s = function() { - function e() { - this.attributes({ - service: "twitter", - twitterUrlForOAuthEcho: "https://api.twitter.com/1.1/account/verify_credentials.json" - }), - this.getTwitterLoginAccount = function() { - return this.serializeAccount(TD.storage.store.getTwitterLoginAccount()) - } - , - this.getDefaultAccount = function() { - return this.serializeAccount(TD.storage.accountController.getDefault()) || null - } - , - this.setDefaultAccount = function(e) { - TD.storage.accountController.setDefault(e) - } - , - this.getAccount = function(e) { - return this.serializeAccount(TD.storage.accountController.get(e)) - } - , - this.removeAccount = function(e) { - TD.controller.clients.removeClient(e) - } - , - this.getAccountsForService = function(e) { - var t = TD.storage.accountController.getAccountsForService(e); - return this.serializeAccounts(t).sort(this.sortAccounts) - } - , - this.getTwitterAccounts = function() { - return this.getAccountsForService("twitter") - } - , - this.getAccountFromId = function(e) { - return this.serializeAccount(TD.storage.accountController.getAccountFromId(e)) - } - , - this.serializeAccount = function(e) { - if (e) { - var t = TD.storage.accountController.getDefault() - , i = TD.storage.store.getTwitterLoginAccount(); - return { - name: e.getName(), - accountKey: e.getKey(), - profileImageURL: e.getProfileImageURL(), - userId: e.getUserID(), - screenName: e.getUsername(), - isProtected: e.getIsPrivate(), - isDefault: e === t, - isTwoginAccount: e === i, - isAdmin: e.getIsAdmin(), - isContributor: e.isContributor(), - isCookieUser: e.isCookieUser(), - isMissingUserData: e.isMissingUserData(), - hasClient: !!TD.controller.clients.getClient(e.getKey()) - } - } - } - , - this.serializeAccounts = function(e) { - return e.filter(Boolean).map(this.serializeAccount.bind(this)) - } - , - this.filterAccountsWithClient = function(e) { - return e.filter(function(e) { - return e.hasClient - }) - } - , - this.sortAccounts = function(e, t) { - var i, s; - if (TD.storage.store.getTwitterLoginAccount()) { - if (e.isTwoginAccount) - return -1; - if (t.isTwoginAccount) - return 1 - } else { - if (e.isDefault) - return -1; - if (t.isDefault) - return 1 - } - return i = e.screenName.toLowerCase(), - s = t.screenName.toLowerCase(), - s > i ? -1 : i > s ? 1 : 0 - } - , - this.reauthorizeAccount = function(e) { - var t = TD.storage.accountController.get(e); - TD.controller.clients.addClient(this.attr.service, t, !0) - } - , - this.addAccount = function() { - TD.controller.clients.addClient(this.attr.service) - } - , - this.updateAccount = function(e, t) { - var i = TD.storage.accountController.get(e); - t.id === i.getUserID() && (i.setUsername(t.screenName), - i.setName(t.name), - i.setProfileImageURL(t.profileImageURL), - i.setIsPrivate(t.isProtected), - i.setUpdated((new Date).getTime())) - } - , - this.setIsAdmin = function(e, t) { - var i = TD.storage.accountController.get(e); - i.setIsAdmin(t) - } - , - this.getHttpHeadersForOAuthEcho = function() { - return TD.net.ajax.signRequest(TD.storage.store.getTwitterLoginAccount(), this.attr.twitterUrlForOAuthEcho, "GET").addCallback(function(e) { - return { - "X-Auth-Service-Provider": e.data.url, - "X-Verify-Credentials-Authorization": e.data.headers.Authorization - } - }) - } - } - return e - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, [885, 14, 52, 13], function(e, t, i) { - var s = i(6) - , n = i(23) - , r = i(17) - , o = i(61)("src") - , a = "toString" - , c = Function[a] - , l = ("" + c).split(a); - i(45).inspectSource = function(e) { - return c.call(e) - } - , - (e.exports = function(e, t, i, a) { - var c = "function" == typeof i; - c && (r(i, "name") || n(i, "name", t)), - e[t] !== i && (c && (r(i, o) || n(i, o, e[t] ? "" + e[t] : l.join(String(t)))), - e === s ? e[t] = i : a ? e[t] ? e[t] = i : n(e, t, i) : (delete e[t], - n(e, t, i))) - } - )(Function.prototype, a, function() { - return "function" == typeof this && this[o] || c.call(this) - }) -} -, function(e, t, i) { - var s = i(2) - , n = i(5) - , r = i(36) - , o = /"/g - , a = function(e, t, i, s) { - var n = String(r(e)) - , a = "<" + t; - return "" !== i && (a += " " + i + '="' + String(s).replace(o, """) + '"'), - a + ">" + n + "" - } - ; - e.exports = function(e, t) { - var i = {}; - i[e] = t(a), - s(s.P + s.F * n(function() { - var t = ""[e]('"'); - return t !== t.toLowerCase() || t.split('"').length > 3 - }), "String", i) - } -} -, [916, 82, 36], [922, 159, 117, 33], , function(e, t, i) { - function s(e) { - return e && e.__esModule ? e : { - "default": e - } - } - var n, r = i(112), o = s(r), a = i(18), c = s(a); - n = function(e) { - var t = i(21) - , s = {}; - return s.shallowEquals = function() { - return function(e, t) { - try { - return _.union((0, - c.default)(e), (0, - c.default)(t)).every(function(i) { - return t[i] === e[i] - }) - } catch (i) { - return !0 - } - } - } - , - s.filterKeys = function(e) { - return function(t) { - return e && "object" === ("undefined" == typeof t ? "undefined" : (0, - o.default)(t)) ? e.reduce(function(e, i) { - return t.hasOwnProperty(i) && (e[i] = t[i]), - e - }, {}) : t - } - } - , - s.fromDeferred = function(e) { - var i = new t.AsyncSubject; - return e.addCallbacksWith(i, function(e) { - i.onNext(e), - i.onCompleted() - }, i.onError), - i.asObservable() - } - , - s.makeFromDeferred = function(e, t) { - return function() { - return s.fromDeferred(e.apply(t || this, arguments)) - } - } - , - s.fromEventOnce = function(e, i) { - var s = new t.AsyncSubject; - return $(e).one(i, function(e) { - s.onNext(e), - s.onCompleted() - }), - s.asObservable() - } - , - s - } - .call(t, i, t, e), - !(void 0 !== n && (e.exports = n)) -} -, function(e, t, i) { - function s(e) { - return e && e.__esModule ? e : { - "default": e - } - } - var n, r = i(18), o = s(r); - n = function() { - "use strict"; - function e() { - this.before("initialize", function() { - this.watchedDeciders = {}, - this.watchedAccessLevels = {} - }), - this.after("initialize", function() { - this.on(document, "dataDeciderUpdated", this.handleDecidersChanged) - }), - this.watchAccessLevel = function(e, t, i) { - if ("string" != typeof e) - throw new TypeError("watchAccessLevel feature must be a string"); - if ("string" != typeof t) - throw new TypeError("watchAccessLevel level must be a string"); - if ("function" != typeof i) - throw new TypeError("watchAccessLevel callback must be a function"); - var s = [e, t, i]; - this.watchedAccessLevels[s] = this.watchedAccessLevels[s] || { - feature: e, - level: t, - value: TD.decider.hasAccessLevel(e, t), - callback: i - } - } - , - this.watchDecider = function(e, t) { - if ("string" != typeof e) - throw new TypeError("watchDecider decider key list must be a string"); - if ("function" != typeof t) - throw new TypeError("watchDecider callback must be a function"); - e.split(" ").forEach(function(e) { - this.watchedDeciders[e] = this.watchedDeciders[e] || { - value: this.getDecider(e) - }, - this.watchedDeciders[e].callback = t - } - .bind(this)) - } - , - this.handleDecidersChanged = function() { - (0, - o.default)(this.watchedDeciders).forEach(function(e) { - var t = this.watchedDeciders[e] - , i = t.value - , s = this.getDecider(e); - i !== s && (t.value = s, - t.callback.call(this, s, i, e)) - } - .bind(this)), - (0, - o.default)(this.watchedAccessLevels).forEach(function(e) { - var t = this.watchedAccessLevels[e] - , i = t.value - , s = TD.decider.hasAccessLevel(t.feature, t.level); - i !== s && (t.value = s, - t.callback.call(this, s, i, { - feature: t.feature, - level: t.level - })) - } - .bind(this)) - } - , - this.getDecider = function(e) { - return TD.decider.get(e) - } - } - return e - } - .call(t, i, t, e), - !(void 0 !== n && (e.exports = n)) -} -, [901, 83, 52, 26, 41, 17, 203, 13], [904, 17, 16, 142], 6, function(e, t) { - e.exports = function(e) { - if ("function" != typeof e) - throw TypeError(e + " is not a function!"); - return e - } -} -, function(e, t) { - var i = {}.toString; - e.exports = function(e) { - return i.call(e).slice(8, -1) - } -} -, function(e, t) { - e.exports = function(e) { - if (void 0 == e) - throw TypeError("Can't call method on " + e); - return e - } -} -, function(e, t, i) { - var s = i(5); - e.exports = function(e, t) { - return !!e && s(function() { - t ? e.call(null , function() {}, 1) : e.call(null ) - }) - } -} -, function(e, t, i) { - var s; - s = function(e) { - function t() { - this.measureElementHeight = function(e, t) { - var i = $(e); - return i.removeClass(t), - i.height() - } - , - this.animateHeight = function(e, t, i, s) { - var n, r, o = this.measureElementHeight(e, t), a = function() { - "function" == typeof i && i(), - "collapse" === s && e.css("height", "") - } - ; - "expand" === s ? (n = 0, - r = o) : (n = o, - r = 0), - this.animateHeightFromTo(e, n, r, t, a) - } - , - this.animateHeightFromTo = function(e, t, i, s, n) { - var r = function() { - e.removeClass(s), - e.trigger("uiTransitionExpandEnd"), - "function" == typeof n && n() - } - ; - return t === i ? void (n && n()) : (e.css({ - height: t - }), - void _.defer(function() { - e.addClass(s), - e.trigger("uiTransitionExpandStart", { - delta: i - t - }), - e.one("transitionend", r), - e.height(i) - })) - } - , - this.animateElementContentHeight = function(e, t, i, s) { - var n = function() { - e.html(t) - } - ; - this.animateElementHeightChange(e, n, i, s) - } - , - this.animateElementHeightChange = function(e, t, i, s) { - var n, r = this.measureElementHeight(e, i); - e.css({ - height: "" - }), - t(), - n = this.measureElementHeight(e), - this.animateHeightFromTo(e, r, n, i, s) - } - , - this.deferredAnimateElementHeightChange = function(e, t, i) { - i = _.defaults(i || {}, { - isAnimatingClass: "" - }); - var s = new TD.core.defer.Deferred; - return this.animateElementHeightChange(e, t, i.isAnimatingClass, s.callback.bind(s)), - s - } - , - this.transitionExpand = function(e, t, i) { - this.animateHeight(e, t, i, "expand") - } - , - this.transitionCollapse = function(e, t, i) { - this.animateHeight(e, t, i, "collapse") - } - , - this.transitionTop = function(e, t, i, s) { - var n = function() { - e.removeClass(t), - "function" == typeof s && s() - } - ; - e.addClass(t), - e.one("transitionend", n), - e.css("top", i) - } - , - this.addAnimateClass = function(e, t, i) { - i = i || function() {} - , - e.one("animationend webkitAnimationEnd", function() { - e.removeClass(t), - i() - }), - e.addClass(t) - } - , - this.stopAnimation = function(e, t) { - e.off("animationend webkitAnimationEnd"), - e.removeClass(t) - } - } - return t - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, function(e, t, i) { - var s = i(46) - , n = i(82) - , r = i(16) - , o = i(15) - , a = i(620); - e.exports = function(e, t) { - var i = 1 == e - , c = 2 == e - , l = 3 == e - , u = 4 == e - , d = 6 == e - , h = 5 == e || d - , m = t || a; - return function(t, a, p) { - for (var f, g, v = r(t), T = n(v), w = s(a, p, 3), b = o(T.length), y = 0, D = i ? m(t, b) : c ? m(t, 0) : void 0; b > y; y++) - if ((h || y in T) && (f = T[y], - g = w(f, y, v), - e)) - if (i) - D[y] = g; - else if (g) - switch (e) { - case 3: - return !0; - case 5: - return f; - case 6: - return y; - case 2: - D.push(f) - } - else if (u) - return !1; - return d ? -1 : l || u ? u : D - } - } -} -, [907, 2, 45, 5], [919, 10], function(e, t) { - var i = e.exports = { - version: "2.3.0" - }; - "number" == typeof __e && (__e = i) -} -, , function(e, t, i) { - var s; - s = function(e) { - var t = i(1).compose - , s = i(11); - return function() { - t.mixin(this, [s]), - this.after("initialize", function() { - this.attr.baseUrl = this.attr.baseUrl || TD.config.twitter_api_base, - this.attr.apiVersion = this.attr.apiVersion || TD.config.twitter_api_version - }), - this.wrapTwitterApiErrback = function(e) { - return function(t) { - var i = { - request: e.request, - response: t - }; - "function" == typeof e.error ? e.error(i) : "string" == typeof e.error ? this.trigger(e.error, i) : this.trigger("dataTwitterApiError", { - error: "Unknown error" - }) - } - .bind(this) - } - , - this.wrapTwitterApiCallback = function(e, t) { - return function(i) { - var s = { - request: e.request, - response: i - }; - "function" == typeof e.success ? e.success(s) : "string" == typeof e.success ? this.trigger(e.success, s) : this.trigger("dataTwitterApiSuccess", s), - e.processAsStreamData && t.processStreamData(i) - } - .bind(this) - } - , - this.makeTwitterApiCall = function(e) { - e = e || {}; - var t, i, s = this.getClientByAccountKey(e.request.accountKey), n = this.wrapTwitterApiErrback(e, s), r = this.wrapTwitterApiCallback(e, s); - t = this.withTwitterApiUrl(e), - i = e.method || "GET"; - try { - return s.makeTwitterCall(t, e.params, i, e.dataProcessor, r, n, e.feedType) - } catch (o) { - n() - } - } - , - this.makeTwitterRequest = function(e, t, i) { - var s = this.getClientByAccountKey(e) - , n = this.withTwitterApiUrl({ - resource: t - }); - return s ? s.request(n, i) : TD.core.defer.fail("Could not find client for " + e) - } - , - this.withTwitterApiUrl = function(e) { - var t = []; - return t.push(e.baseUrl || this.attr.baseUrl), - t.push(e.apiVersion || this.attr.apiVersion), - t.push(e.resource), - t.join("/") - } - } - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, 42, [880, 34], function(e, t, i) { - var s = i(219) - , n = i(2) - , r = i(110)("metadata") - , o = r.store || (r.store = new (i(222))) - , a = function(e, t, i) { - var n = o.get(e); - if (!n) { - if (!i) - return; - o.set(e, n = new s) - } - var r = n.get(t); - if (!r) { - if (!i) - return; - n.set(t, r = new s) - } - return r - } - , c = function(e, t, i) { - var s = a(t, i, !1); - return void 0 === s ? !1 : s.has(e) - } - , l = function(e, t, i) { - var s = a(t, i, !1); - return void 0 === s ? void 0 : s.get(e) - } - , u = function(e, t, i, s) { - a(i, s, !0).set(e, t) - } - , d = function(e, t) { - var i = a(e, t, !1) - , s = []; - return i && i.forEach(function(e, t) { - s.push(t) - }), - s - } - , h = function(e) { - return void 0 === e || "symbol" == typeof e ? e : String(e) - } - , m = function(e) { - n(n.S, "Reflect", e) - } - ; - e.exports = { - store: o, - map: a, - has: c, - get: l, - set: u, - keys: d, - key: h, - exp: m - } -} -, function(e, t, i) { - "use strict"; - if (i(13)) { - var s = i(56) - , n = i(6) - , r = i(5) - , o = i(2) - , a = i(111) - , c = i(149) - , l = i(46) - , u = i(54) - , d = i(52) - , h = i(23) - , m = i(73) - , p = (i(137), - i(53)) - , f = i(15) - , g = i(60) - , v = i(41) - , T = i(17) - , w = i(216) - , b = i(72) - , y = i(10) - , D = i(16) - , C = i(135) - , _ = i(57) - , S = i(32) - , A = i(58).f - , E = (i(627), - i(151)) - , I = i(61) - , k = i(12) - , x = i(39) - , M = i(100) - , R = i(143) - , F = i(152) - , L = i(55) - , O = i(106) - , N = i(74) - , U = i(128) - , j = i(196) - , P = i(14) - , $ = i(31) - , B = P.f - , H = $.f - , K = n.RangeError - , z = n.TypeError - , q = n.Uint8Array - , W = "ArrayBuffer" - , V = "Shared" + W - , G = "BYTES_PER_ELEMENT" - , Y = "prototype" - , Q = Array[Y] - , J = c.ArrayBuffer - , X = c.DataView - , Z = x(0) - , ee = x(2) - , te = x(3) - , ie = x(4) - , se = x(5) - , ne = x(6) - , re = M(!0) - , oe = M(!1) - , ae = F.values - , ce = F.keys - , le = F.entries - , ue = Q.lastIndexOf - , de = Q.reduce - , he = Q.reduceRight - , me = Q.join - , pe = Q.sort - , fe = Q.slice - , ge = Q.toString - , ve = Q.toLocaleString - , Te = k("iterator") - , we = k("toStringTag") - , be = I("typed_constructor") - , ye = I("def_constructor") - , De = a.CONSTR - , Ce = a.TYPED - , _e = a.VIEW - , Se = "Wrong length!" - , Ae = x(1, function(e, t) { - return Re(R(e, e[ye]), t) - }) - , Ee = r(function() { - return 1 === new q(new Uint16Array([1]).buffer)[0] - }) - , Ie = !!q && !!q[Y].set && r(function() { - new q(1).set({}) - }) - , ke = function(e, t) { - if (void 0 === e) - throw z(Se); - var i = +e - , s = f(e); - if (t && !w(i, s)) - throw K(Se); - return s - } - , xe = function(e, t) { - var i = p(e); - if (0 > i || i % t) - throw K("Wrong offset!"); - return i - } - , Me = function(e) { - if (y(e) && Ce in e) - return e; - throw z(e + " is not a typed array!") - } - , Re = function(e, t) { - if (!(y(e) && be in e)) - throw z("It is not a typed array constructor!"); - return new e(t) - } - , Fe = function(e, t) { - return Le(R(e, e[ye]), t) - } - , Le = function(e, t) { - for (var i = 0, s = t.length, n = Re(e, s); s > i; ) - n[i] = t[i++]; - return n - } - , Oe = function(e, t, i) { - B(e, t, { - get: function() { - return this._d[i] - } - }) - } - , Ne = function(e) { - var t, i, s, n, r, o, a = D(e), c = arguments.length, u = c > 1 ? arguments[1] : void 0, d = void 0 !== u, h = E(a); - if (void 0 != h && !C(h)) { - for (o = h.call(a), - s = [], - t = 0; !(r = o.next()).done; t++) - s.push(r.value); - a = s - } - for (d && c > 2 && (u = l(u, arguments[2], 2)), - t = 0, - i = f(a.length), - n = Re(this, i); i > t; t++) - n[t] = d ? u(a[t], t) : a[t]; - return n - } - , Ue = function() { - for (var e = 0, t = arguments.length, i = Re(this, t); t > e; ) - i[e] = arguments[e++]; - return i - } - , je = !!q && r(function() { - ve.call(new q(1)) - }) - , Pe = function() { - return ve.apply(je ? fe.call(Me(this)) : Me(this), arguments) - } - , $e = { - copyWithin: function(e, t) { - return j.call(Me(this), e, t, arguments.length > 2 ? arguments[2] : void 0) - }, - every: function(e) { - return ie(Me(this), e, arguments.length > 1 ? arguments[1] : void 0) - }, - fill: function(e) { - return U.apply(Me(this), arguments) - }, - filter: function(e) { - return Fe(this, ee(Me(this), e, arguments.length > 1 ? arguments[1] : void 0)) - }, - find: function(e) { - return se(Me(this), e, arguments.length > 1 ? arguments[1] : void 0) - }, - findIndex: function(e) { - return ne(Me(this), e, arguments.length > 1 ? arguments[1] : void 0) - }, - forEach: function(e) { - Z(Me(this), e, arguments.length > 1 ? arguments[1] : void 0) - }, - indexOf: function(e) { - return oe(Me(this), e, arguments.length > 1 ? arguments[1] : void 0) - }, - includes: function(e) { - return re(Me(this), e, arguments.length > 1 ? arguments[1] : void 0) - }, - join: function(e) { - return me.apply(Me(this), arguments) - }, - lastIndexOf: function(e) { - return ue.apply(Me(this), arguments) - }, - map: function(e) { - return Ae(Me(this), e, arguments.length > 1 ? arguments[1] : void 0) - }, - reduce: function(e) { - return de.apply(Me(this), arguments) - }, - reduceRight: function(e) { - return he.apply(Me(this), arguments) - }, - reverse: function() { - for (var e, t = this, i = Me(t).length, s = Math.floor(i / 2), n = 0; s > n; ) - e = t[n], - t[n++] = t[--i], - t[i] = e; - return t - }, - some: function(e) { - return te(Me(this), e, arguments.length > 1 ? arguments[1] : void 0) - }, - sort: function(e) { - return pe.call(Me(this), e) - }, - subarray: function(e, t) { - var i = Me(this) - , s = i.length - , n = g(e, s); - return new (R(i, i[ye]))(i.buffer,i.byteOffset + n * i.BYTES_PER_ELEMENT,f((void 0 === t ? s : g(t, s)) - n)) - } - } - , Be = function(e, t) { - return Fe(this, fe.call(Me(this), e, t)) - } - , He = function(e) { - Me(this); - var t = xe(arguments[1], 1) - , i = this.length - , s = D(e) - , n = f(s.length) - , r = 0; - if (n + t > i) - throw K(Se); - for (; n > r; ) - this[t + r] = s[r++] - } - , Ke = { - entries: function() { - return le.call(Me(this)) - }, - keys: function() { - return ce.call(Me(this)) - }, - values: function() { - return ae.call(Me(this)) - } - } - , ze = function(e, t) { - return y(e) && e[Ce] && "symbol" != typeof t && t in e && String(+t) == String(t) - } - , qe = function(e, t) { - return ze(e, t = v(t, !0)) ? d(2, e[t]) : H(e, t) - } - , We = function(e, t, i) { - return !(ze(e, t = v(t, !0)) && y(i) && T(i, "value")) || T(i, "get") || T(i, "set") || i.configurable || T(i, "writable") && !i.writable || T(i, "enumerable") && !i.enumerable ? B(e, t, i) : (e[t] = i.value, - e) - } - ; - De || ($.f = qe, - P.f = We), - o(o.S + o.F * !De, "Object", { - getOwnPropertyDescriptor: qe, - defineProperty: We - }), - r(function() { - ge.call({}) - }) && (ge = ve = function() { - return me.call(this) - } - ); - var Ve = m({}, $e); - m(Ve, Ke), - h(Ve, Te, Ke.values), - m(Ve, { - slice: Be, - set: He, - constructor: function() {}, - toString: ge, - toLocaleString: Pe - }), - Oe(Ve, "buffer", "b"), - Oe(Ve, "byteOffset", "o"), - Oe(Ve, "byteLength", "l"), - Oe(Ve, "length", "e"), - B(Ve, we, { - get: function() { - return this[Ce] - } - }), - e.exports = function(e, t, i, c) { - c = !!c; - var l = e + (c ? "Clamped" : "") + "Array" - , d = "Uint8Array" != l - , m = "get" + e - , p = "set" + e - , g = n[l] - , v = g || {} - , T = g && S(g) - , w = !g || !a.ABV - , D = {} - , C = g && g[Y] - , E = function(e, i) { - var s = e._d; - return s.v[m](i * t + s.o, Ee) - } - , I = function(e, i, s) { - var n = e._d; - c && (s = (s = Math.round(s)) < 0 ? 0 : s > 255 ? 255 : 255 & s), - n.v[p](i * t + n.o, s, Ee) - } - , k = function(e, t) { - B(e, t, { - get: function() { - return E(this, t) - }, - set: function(e) { - return I(this, t, e) - }, - enumerable: !0 - }) - } - ; - w ? (g = i(function(e, i, s, n) { - u(e, g, l, "_d"); - var r, o, a, c, d = 0, m = 0; - if (y(i)) { - if (!(i instanceof J || (c = b(i)) == W || c == V)) - return Ce in i ? Le(g, i) : Ne.call(g, i); - r = i, - m = xe(s, t); - var p = i.byteLength; - if (void 0 === n) { - if (p % t) - throw K(Se); - if (o = p - m, - 0 > o) - throw K(Se) - } else if (o = f(n) * t, - o + m > p) - throw K(Se); - a = o / t - } else - a = ke(i, !0), - o = a * t, - r = new J(o); - for (h(e, "_d", { - b: r, - o: m, - l: o, - e: a, - v: new X(r) - }); a > d; ) - k(e, d++) - }), - C = g[Y] = _(Ve), - h(C, "constructor", g)) : O(function(e) { - new g(null ), - new g(e) - }, !0) || (g = i(function(e, i, s, n) { - u(e, g, l); - var r; - return y(i) ? i instanceof J || (r = b(i)) == W || r == V ? void 0 !== n ? new v(i,xe(s, t),n) : void 0 !== s ? new v(i,xe(s, t)) : new v(i) : Ce in i ? Le(g, i) : Ne.call(g, i) : new v(ke(i, d)) - }), - Z(T !== Function.prototype ? A(v).concat(A(T)) : A(v), function(e) { - e in g || h(g, e, v[e]) - }), - g[Y] = C, - s || (C.constructor = g)); - var x = C[Te] - , M = !!x && ("values" == x.name || void 0 == x.name) - , R = Ke.values; - h(g, be, !0), - h(C, Ce, l), - h(C, _e, !0), - h(C, ye, g), - (c ? new g(1)[we] == l : we in C) || B(C, we, { - get: function() { - return l - } - }), - D[l] = g, - o(o.G + o.W + o.F * (g != v), D), - o(o.S, l, { - BYTES_PER_ELEMENT: t, - from: Ne, - of: Ue - }), - G in C || h(C, G, t), - o(o.P, l, $e), - N(l), - o(o.P + o.F * Ie, l, { - set: He - }), - o(o.P + o.F * !M, l, Ke), - o(o.P + o.F * (C.toString != ge), l, { - toString: ge - }), - o(o.P + o.F * r(function() { - new g(1).slice() - }), l, { - slice: Be - }), - o(o.P + o.F * (r(function() { - return [1, 2].toLocaleString() != new g([1, 2]).toLocaleString() - }) || !r(function() { - C.toLocaleString.call([1, 2]) - })), l, { - toLocaleString: Pe - }), - L[l] = M ? x : R, - s || M || h(C, Te, R) - } - } else - e.exports = function() {} -} -, [877, 77], , [896, 61, 10, 17, 14, 5], function(e, t) { - e.exports = function(e, t) { - return { - enumerable: !(1 & e), - configurable: !(2 & e), - writable: !(4 & e), - value: t - } - } -} -, function(e, t) { - var i = Math.ceil - , s = Math.floor; - e.exports = function(e) { - return isNaN(e = +e) ? 0 : (e > 0 ? s : i)(e) - } -} -, function(e, t) { - e.exports = function(e, t, i, s) { - if (!(e instanceof t) || void 0 !== s && s in e) - throw TypeError(i + ": incorrect invocation!"); - return e - } -} -, function(e, t) { - e.exports = {} -} -, function(e, t) { - e.exports = !1 -} -, [898, 3, 209, 131, 142, 130, 133], [903, 211, 131], [906, 211, 131], [915, 53], function(e, t) { - var i = 0 - , s = Math.random(); - e.exports = function(e) { - return "Symbol(".concat(void 0 === e ? "" : e, ")_", (++i + s).toString(36)) - } -} -, [881, 86], 17, [885, 65, 115, 62], [899, 49, 225, 161, 62], [916, 814, 154], , , function(e, t, i) { - var s; - s = function(e) { - var t = function() { - this.attributes({ - appColumnsContainerSelector: ".js-app-columns-container", - columnsContainerSelector: ".js-app-columns", - columnStateDetailViewClass: "js-column-state-detail-view", - columnStateSocialProofClass: "js-column-state-social-proof", - columnSelector: ".js-app-columns .js-column", - scrollContainerSelector: ".js-column-scroller", - columnDetailScrollerSelector: ".js-detail-container", - columnOptionsSelector: ".js-column-options", - columnOptionsContainerSelector: ".js-column-options-container", - columnHeaderSelector: ".js-column-header", - columnUnreadCountSelector: ".js-column-header .js-unread-count", - columnContentSelector: ".js-column-content" - }), - this.getColumnScrollContainerByKey = function(e) { - var t = this.getColumnElementByKey(e) - , i = t.find(this.attr.columnDetailScrollerSelector); - return i.length > 0 ? i : t.find(this.attr.scrollContainerSelector) - } - , - this.getColumnElementByKey = function(e) { - return this.select("columnSelector").filter('[data-column="' + e + '"]') - } - , - this.getKeyForColumnAtIndex = function(e) { - return this.select("columnSelector").eq(e).attr("data-column") - } - , - this.getKeyForLastColumn = function() { - return this.select("columnSelector").last().attr("data-column") - } - } - ; - return t - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, function(e, t, i) { - var s; - s = function() { - function e() { - this.focusRequest = function() { - this.trigger("uiFocusRequest", { - id: this.focusId - }) - } - , - this.focusRelease = function() { - this.trigger("uiFocusRelease", { - id: this.focusId - }) - } - , - this.handleFocus = function(e, t) { - t.id === this.focusId ? this.hasFocus = !0 : this.hasFocus = !1 - } - , - this.whenHasFocus = function(e) { - return function() { - return this.hasFocus ? e.apply(this, arguments) : void 0 - } - .bind(this) - } - , - this.getNewFocusId = function() { - return _.uniqueId("focus") - } - , - this.after("teardown", function() { - this.hasFocus && this.trigger("uiFocusRelease", { - id: this.focusId - }) - }), - this.after("initialize", function() { - this.focusId = this.attr.focusId || this.getNewFocusId(), - this.hasFocus = !1, - this.on(document, "uiFocus", this.handleFocus), - this.attr.autoFocus === !0 && this.focusRequest() - }) - } - return e - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, function(e, t, i) { - var s = i(12)("unscopables") - , n = Array.prototype; - void 0 == n[s] && i(23)(n, s, {}), - e.exports = function(e) { - n[s][e] = !0 - } -} -, [879, 35, 12], function(e, t, i) { - var s = i(24); - e.exports = function(e, t, i) { - for (var n in t) - s(e, n, t[n], i); - return e - } -} -, function(e, t, i) { - "use strict"; - var s = i(6) - , n = i(14) - , r = i(13) - , o = i(12)("species"); - e.exports = function(e) { - var t = s[e]; - r && t && !t[o] && n.f(t, o, { - configurable: !0, - get: function() { - return this - } - }) - } -} -, [909, 14, 17, 12], function(e, t, i) { - var s = i(2) - , n = i(36) - , r = i(5) - , o = i(147) - , a = "[" + o + "]" - , c = "​…" - , l = RegExp("^" + a + a + "*") - , u = RegExp(a + a + "*$") - , d = function(e, t, i) { - var n = {} - , a = r(function() { - return !!o[e]() || c[e]() != c - }) - , l = n[e] = a ? t(h) : o[e]; - i && (n[i] = l), - s(s.P + s.F * a, "String", n) - } - , h = d.trim = function(e, t) { - return e = String(n(e)), - 1 & t && (e = e.replace(l, "")), - 2 & t && (e = e.replace(u, "")), - e - } - ; - e.exports = d -} -, 10, , function(e, t, i) { - var s; - s = function(e) { - function t() { - s.mixin(this, [n]), - this.attributes({ - dismissButton: ".js-dismiss", - modal: ".js-modal", - modalPanel: ".js-modal-panel", - modalDragHandle: ".mdl-drag-handle", - isDraggingClass: "is-dragging", - isTouchModalClass: "is-touch-modal", - openModalID: "#open-modal", - autoFocus: !0 - }), - this.handleDragStart = function() { - var e = this.select("modalPanel"); - e.css({ - position: "absolute", - top: e.offset().top, - left: e.offset().left - }), - this.$node.addClass(this.attr.isDraggingClass) - } - , - this.getDragDropBoundary = function() { - return this.$node - } - , - this.dismiss = function(e) { - this.attr.closeEvent && (e && e.preventDefault(), - this.trigger(this.attr.closeEvent)) - } - , - this.handleClickOnOverlay = function(e) { - e.target === this.$node.get(0) && this.dismiss() - } - , - this.before("initialize", function() { - $(document).trigger("uiCloseModal") - }), - this.after("initialize", function() { - this.on(this.$node, "click", this.handleClickOnOverlay), - this.on("click", { - dismissButton: this.dismiss - }), - this.on(document, "uiCloseModal", this.dismiss) - }), - this.after("render", function() { - this.select("modalPanel").draggable({ - boundary: this.getDragDropBoundary.bind(this), - handle: this.select("modalDragHandle") - }), - this.on("start.draggable", this.handleDragStart), - this.focusRequest(); - var e = this.select("modalPanel").parent(this.attr.modal) - , t = $(this.attr.openModalID); - TD.util.isTouchDevice() && TD.decider.get("touchdeck_modals_v2") ? (e.addClass(this.attr.isTouchModalClass), - t.addClass(this.attr.isTouchModalClass)) : (e.removeClass(this.attr.isTouchModalClass), - t.removeClass(this.attr.isTouchModalClass)) - }), - this.before("teardown", function() { - this.$node.removeClass(this.attr.isDraggingClass) - }), - this.after("teardown", function() { - this.$node.hide() - }) - } - var s = i(1).compose - , n = i(70); - return t - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, function(e, t, i) { - var s; - s = function(e) { - function t() { - s.mixin(this, [n]), - this.highlightSubstring = function(e, t) { - var i, s, n = -1; - return t && (n = e.toLowerCase().indexOf(t.toLowerCase())), - -1 !== n ? (s = { - before: e.substr(0, n), - highlight: e.substr(n, t.length), - after: e.substr(n + t.length) - }, - i = this.toHtmlFromRaw("{{before}}{{highlight}}{{after}}", s)) : i = this.toHtmlFromRaw("{{text}}", { - text: e - }), - i - } - , - this.prettyNumber = function(e) { - return TD.util.prettyNumber(e) - } - } - var s = i(1).compose - , n = i(4); - return t - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, [884, 46, 204, 135, 3, 15, 151], [888, 35], function(e, t) { - t.f = {}.propertyIsEnumerable -} -, 35, [880, 153], 5, 55, [906, 231, 156], , , , , function(e, t, i) { - var s; - s = function(e) { - var t = i(1).component - , s = i(533) - , n = function() { - this.attributes({ - searchControlSelector: ".js-search-input-control" - }), - this.waitingForAsyncResponse = function(e, t) { - this.trigger(this.$searchControls, "uiAsyncFormWaitingForResponse") - } - , - this.receivedAsyncResponse = function(e, t) { - this.trigger(this.$searchControls, "uiAsyncFormReceivedResponse") - } - , - this.handleSearchInputCleared = function() { - this.$node.closest("form").submit() - } - , - this.destroy = function(e, t) { - this.teardown() - } - , - this.before("teardown", function() { - this.trigger(this.$searchControls, "uiSearchInputDestroy") - }), - this.after("initialize", function() { - this.on("uiReceivedAsyncResponse", this.receivedAsyncResponse), - this.on("uiWaitingForAsyncResponse", this.waitingForAsyncResponse), - this.on("uiDestroyAsynchronousForm", this.destroy), - this.on("uiSearchInputCleared", this.handleSearchInputCleared), - this.$searchControls = this.select("searchControlSelector"), - s.attachTo(this.$searchControls) - }) - } - ; - return t(n) - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, function(e, t, i) { - var s; - s = function(e) { - function t() { - this.attributes({ - eventMap: { - uiDragStart: "dragstart", - uiDragEnd: "dragend", - mousedown: "predrag" - }, - dropTargetClass: "with-drop-target", - draggableSelector: ".is-draggable" - }), - this.setupDragDrop = function(e) { - e.type || (e.type = ["*"]), - "string" == typeof e.type && (e.type = [e.type]), - _.contains(e.type, "*") && (e.wantsAll = !0), - "undefined" != typeof e.indicateDrop && (this.indicateDrop = !!e.indicateDrop), - e.drop && this.indicateDrop !== !1 && (this.indicateDrop = !0), - this.listeners.push(e) - } - , - this.hasSetupDragDrop = function() { - return this.listeners.length > 0 - } - , - this.wantsDragType = function(e) { - return this.listeners.some(function(t) { - return t.wantsAll || _.contains(t.type, e) - }) - } - , - this.notifyListeners = function(e, t) { - this.listeners.forEach(function(i) { - if (i.wantsAll || _.contains(i.type, t.type)) { - var s = i[e.type] || i[this.attr.eventMap[e.type]]; - s && "function" == typeof s && s.call(i.context || this, e, t) - } - } - .bind(this)) - } - , - this.saveDragState = function(e) { - return function(t, i) { - return this.dragDropState = { - active: !0, - data: i - }, - e.apply(this, [].slice.call(arguments)) - } - } - , - this.clearDragState = function(e) { - return function(t, i) { - return this.dragDropState = this.dragDropStateInit, - e.apply(this, [].slice.call(arguments)) - } - } - , - this.retrieveDragState = function(e) { - return function(t) { - return e.call(this, t, this.dragDropState.data) - } - } - , - this.retrieveAndNotify = function() { - return this.retrieveDragState(this.notifyListeners) - } - , - this.extractDataFromEvent = function(e) { - var t = $(e.target).attr("data-drag-type") - , i = e.target.tagName.toLowerCase(); - return t = t || i, - { - type: t, - el: e.target - } - } - , - this.whenActive = function(e) { - return function(t) { - var i = this.dragDropState.active && this.wantsDragType(this.dragDropState.data.type); - return i ? e.apply(this, arguments) : void 0 - } - .bind(this) - } - , - this.whenSetup = function(e) { - return function() { - return this.hasSetupDragDrop() ? e.apply(this, arguments) : void 0 - } - .bind(this) - } - , - this.whenSetupAndActive = function(e) { - return this.whenSetup(this.whenActive(e)) - } - , - this.before("initialize", function() { - this.listeners = [], - this.dragDropState = this.dragDropStateInit = { - active: !1, - data: {} - }, - this.indicateDrop = !0, - this.dragDepth = 0 - }), - this.after("initialize", function() { - this.on(document, "uiDragStart", this.whenSetup(this.saveDragState(this.notifyListeners))), - this.on(document, "uiDragEnd", this.whenSetup(function() { - this.dragDepth = 0, - this.clearDragState(this.notifyListeners).apply(this, arguments) - })), - this.on("drop", this.whenSetupAndActive(function(e) { - e.preventDefault(), - this.dragDepth = 0, - this.retrieveAndNotify().apply(this, arguments) - })), - this.on("dragenter", this.whenSetupAndActive(function(e) { - this.dragDepth += 1, - 1 === this.dragDepth && this.retrieveAndNotify().apply(this, [].slice.call(arguments)) - })), - this.on("dragleave", this.whenSetupAndActive(function(e) { - this.dragDepth -= 1, - this.dragDepth <= 0 && (this.dragDepth = 0, - this.retrieveAndNotify().apply(this, [].slice.call(arguments))) - })), - this.on("dragover", this.whenSetupAndActive(function(e) { - this.indicateDrop === !0 && e.preventDefault(), - this.retrieveAndNotify().apply(this, [].slice.call(arguments)) - })), - this.on("mousedown", { - draggableSelector: this.whenSetup(function(e, t) { - var i = this.extractDataFromEvent({ - target: t.el - }); - this.notifyListeners(e, i) - }) - }) - }) - } - return t - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, function(e, t, i) { - var s; - s = function(e) { - return function() { - var e = "unknown" - , t = "unknown_xauth"; - this.after("initialize", function() { - this.apiErrors = { - 0: TD.i("Something went wrong. Please check your connection and try again."), - 32: TD.i("The username and password you entered did not match our records. Please double-check and try again."), - 63: TD.i("This user has been suspended."), - 64: TD.i("Your account has been suspended."), - 130: TD.i("Twitter is temporarily over capacity. Please try again later."), - 131: TD.i("There's something wrong. Please try again later."), - 135: TD.i("Could not authenticate you."), - 108: TD.i("There is no user by that name."), - 150: TD.i("This user doesn't follow you. You can only send messages to people who do."), - 151: TD.i("Something went wrong, but don't fret. It's not your fault."), - 185: TD.i("You reached your daily tweet limit. Please try again tomorrow."), - 187: TD.i("You already tweeted that."), - 195: TD.i("Invalid search query."), - 215: TD.i("Could not authenticate you."), - 226: TD.i("This action was flagged as suspicious."), - 231: TD.i("You need to generate a temporary password on twitter.com to log in."), - 235: TD.i("Your login verification request has expired. Please log in again."), - 236: TD.i("That is not the correct code. Please re-enter the code sent to your phone."), - 241: TD.i("The login verification request sent to your phone was rejected."), - 242: TD.i("Your account is deactivated. Please log in on twitter.com to reactivate."), - 243: TD.i("You have too many failed login attempts. Please try again in an hour."), - 244: TD.i("You must reset the password on this account. Please log in on twitter.com to do this."), - 245: TD.i("You have initiated too many login requests. Please try logging in again in an hour."), - 246: TD.i("You have entered too many incorrect codes. Please try logging in again."), - 276: TD.i("Scheduled tweet was rejected. Please try again."), - 297: TD.i("You cannot have both media and tweet."), - 278: TD.i("You are not a member of this group"), - 280: TD.i("You cannot add more people to this conversation. Try starting a new one."), - 311: TD.i("You have already sent this message."), - 429: TD.i("You have initiated too many login requests. Please try logging in again later."), - unknown_xauth: TD.i("Unknown log in error. Please try again."), - unknown: TD.i("Unknown error. Please try again.") - } - }), - this.getXAuthErrorMessage = function(e) { - return e = e || {}, - this.apiErrors[e.code] || e.message || this.apiErrors[t] - } - , - this.getApiErrorMessage = function(t) { - return t = t || {}, - this.apiErrors[t.code] || t.message || this.apiErrors[e] - } - , - this.getXAuthErrorIs2FACodeError = function(e) { - return 236 === e - } - } - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, function(e, t, i) { - var s; - s = function(e) { - "use strict"; - function t() { - s.mixin(this, [n, r]), - this.attributes({ - dropdownContainerSelector: ".js-dropdown-container", - dropdownContentSelector: ".js-dropdown-content", - isSelectableClass: "is-selectable", - isSelectableSelector: ".is-selectable", - isSelectedClass: "is-selected", - isSelectedSelector: ".is-selected", - dropdownOptions: { - position: "", - toggle: !1 - }, - dropdownPositions: { - offsetLeft: "pos-l", - offsetRight: "pos-r", - underLeftIcon: "pos-r-under-icon", - verticalRight: "pos-br", - above: "pos-t" - } - }), - this.after("initialize", function() { - this.on(document, "uiDropdownShowing uiDetailViewOpening uiKeyEscape", this.teardownCurrentDropdown.bind(this)), - this.dropdownFocusId = this.getNewFocusId(), - this.on(document, "uiKeyEnter uiKeySpace", this.whenHasDropdownFocus(this.clickSelectedActionable)), - this.on(document, "uiKeyUp", this.whenHasDropdownFocus(this.makeHandleChangeSelectionIndexBy(-1))), - this.on(document, "uiKeyDown", this.whenHasDropdownFocus(this.makeHandleChangeSelectionIndexBy(1))), - this.on(document, "uiKeyRight uiKeyLeft", this.whenHasDropdownFocus(this.jumpIntoDropdown)) - }), - this.before("teardown", function() { - this.teardownCurrentDropdown() - }), - this.renderDropdown = function(e, t, i, s) { - if (!e || !e.length) - throw new Error("Please supply a node to render dropdown with."); - if (!t) - throw new Error("Please supply a template."); - i = i || {}, - s = _.defaults(s || {}, this.attr.dropdownOptions); - var n = _.uniqueId("dropdown"); - if (this.dropdownIsOpen()) { - if (this.$dropdownSourceNode && e.get(0) === this.$dropdownSourceNode.get(0)) - return s.toggle ? (this.trigger("uiDropdownToggling", { - id: n - }), - this.teardownCurrentDropdown()) : this.trigger("uiDropdownAlreadyOpen", { - id: n - }); - this.teardownCurrentDropdown() - } - this.$dropdownSourceNode = e, - this.trigger("uiDropdownShowing", { - id: n - }); - var r = t; - "string" == typeof t && (r = this.renderTemplate(t, i)); - var o = this.renderTemplate("menus/dropdown", s); - return o.find(this.attr.dropdownContentSelector).append(r), - e.after(o), - this.currentDropdown = { - $el: o, - id: n - }, - this.maybeRepositionDropdown(), - this.attachDropdownInteractions(o, s), - this.parentFocusId = this.focusId, - this.focusId = this.dropdownFocusId, - this.focusRequest(), - this.on(document, "click", this.handleDocumentClick), - this.trigger("uiDropdownShown", { - id: n - }), - o - } - , - this.handleDocumentClick = function(e) { - this.teardownCurrentDropdown() - } - , - this.attachDropdownInteractions = function(e, t) { - this.on(e, "mouseleave", this.removeCurrentSelection), - this.on(e, "mouseover", { - isSelectableSelector: this.handleChangeSelectionToTarget - }), - this.on(e, "click", this.cancelEventIfNotFromSelectable); - var i = e.find(this.attr.isSelectableSelector) - , s = i.filter(this.attr.isSelectedSelector) - , n = i.index(s); - this.currentDropdown.$selectables = i, - this.currentDropdown.selectedIndex = n, - n > -1 && this.changeSelectionToIndex(n) - } - , - this.teardownCurrentDropdown = function(e, t) { - if (e = e || {}, - t = t || {}, - this.dropdownIsOpen()) { - if (t.id === this.currentDropdown.id) - return; - this.$dropdownSourceNode = null , - this.trigger("uiDropdownHiding", { - id: this.currentDropdown.id - }), - this.focusRelease(), - this.focusId = this.parentFocusId; - var i = this.currentDropdown.$el; - this.off(document, "click", this.handleDocumentClick), - this.off(i, "mouseleave", this.removeCurrentSelection), - this.off(i, "mouseover"), - this.off(i, "click", this.cancelEventIfNotFromSelectable), - this.currentDropdown.$el.remove(); - var s = this.currentDropdown.id; - this.currentDropdown = null , - this.trigger("uiDropdownHidden", { - id: s - }) - } - } - , - this.clickSelectedActionable = function() { - this.currentDropdown.selectedIndex > -1 && this.currentDropdown.$selectables.eq(this.currentDropdown.selectedIndex).find("[data-action]").first().click() - } - , - this.changeSelection = function(e) { - var t = $(e) - , i = this.currentDropdown.$selectables.index(t.get(0)); - this.removeCurrentSelection(), - i > -1 && (this.currentDropdown.$selectables.eq(i).addClass(this.attr.isSelectedClass), - this.currentDropdown.selectedIndex = i) - } - , - this.changeSelectionToIndex = function(e) { - if (0 > e) - return this.removeCurrentSelection(); - var t = this.currentDropdown.$selectables.eq(e); - this.changeSelection(t) - } - , - this.handleChangeSelectionToTarget = function(e, t) { - this.changeSelection(t.el) - } - , - this.makeHandleChangeSelectionIndexBy = function(e) { - return function(t, i) { - t.stopPropagation(); - var s = this.getNewSelectedIndex(e); - this.changeSelectionToIndex(s) - } - } - , - this.removeCurrentSelection = function() { - this.currentDropdown.$selectables.eq(this.currentDropdown.selectedIndex).removeClass(this.attr.isSelectedClass), - this.currentDropdown.selectedIndex = -1 - } - , - this.getNewSelectedIndex = function(e) { - "undefined" == typeof e && (e = 1); - var t = this.currentDropdown.selectedIndex; - if (0 === e) - return t; - var i = this.currentDropdown.$selectables.length - , s = (t + e) % i; - return 0 > t ? e > 0 ? 0 : i - 1 : 0 > s ? i + s : s - } - , - this.whenHasDropdownFocus = function(e) { - return this.whenHasFocus(function() { - return this.focusId === this.dropdownFocusId ? e.apply(this, arguments) : void 0 - }) - } - , - this.jumpIntoDropdown = function(e) { - -1 === this.currentDropdown.selectedIndex && this.changeSelectionToIndex(0) - } - , - this.cancelEventIfNotFromSelectable = function(e) { - var t = this.currentDropdown.$el - , i = $(e.target).closest(this.attr.isSelectableSelector, t); - i.length || (event.stopPropagation(), - event.preventDefault()) - } - , - this.dropdownIsOpen = function() { - return !(!this.currentDropdown || !this.currentDropdown.$el) - } - , - this.maybeRepositionDropdown = function() { - var e, t, i, s, n, r = this.currentDropdown.$el, o = r.closest(this.attr.dropdownContainerSelector); - o.length > 0 && !r.hasClass("pos-t") && (e = r.offset().top, - n = r.outerHeight(), - i = e + n, - t = o.offset().top, - s = t + o.height(), - TD.util.isTouchDevice() && TD.decider.get("touchdeck_dropdowns_v2") && TD.decider.get("touchdeck_tweet_controls_v3") && (n += 25), - i >= s && e - n > t && r.addClass("pos-t")) - } - } - var s = i(1).compose - , n = i(4) - , r = i(70); - return t - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, function(e, t, i) { - var s; - s = function() { - function e() { - this.attributes({ - spinnerButtonSelector: ".js-spinner-button", - spinnerButtonActiveSelector: ".js-spinner-button-active", - spinnerButtonActiveClass: "spinner-button-is-active", - spinnerButtonHiddenClass: "is-hidden" - }), - this.spinnerButtonToggle = function(e) { - var t = this.select("spinnerButtonSelector") - , i = this.select("spinnerButtonActiveSelector"); - t.toggleClass(this.attr.spinnerButtonActiveClass, e), - i.toggleClass(this.attr.spinnerButtonHiddenClass, !e) - } - } - return e - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, function(e, t, i) { - "use strict"; - function s() {} - var n = i(1).component - , r = i(28) - , o = i(20); - e.exports = n(r, s, o) -} -, function(e, t, i) { - var s; - s = function() { - var e = {}; - return e.atMentionify = function(e) { - return TD.util.atMentionify(e) - } - , - e.deMentionify = function(e) { - return TD.util.deMentionify(e) - } - , - e.getTweetLength = function(e, t) { - return twttrTxt.getTweetLength(e, t) - } - , - e.extractMentions = function(e) { - return twttrTxt.extractMentions(e) - } - , - e.removeFirstMention = function(e) { - var t, i = twttrTxt.extractMentionsWithIndices(e); - return i.length && (t = i[0].indices, - e = e.substring(0, t[0]).trim() + e.substring(t[1])), - e - } - , - e - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, [878, 26, 15, 60], function(e, t, i) { - "use strict"; - var s = i(6) - , n = i(2) - , r = i(24) - , o = i(73) - , a = i(51) - , c = i(81) - , l = i(54) - , u = i(10) - , d = i(5) - , h = i(106) - , m = i(75) - , p = i(134); - e.exports = function(e, t, i, f, g, v) { - var T = s[e] - , w = T - , b = g ? "set" : "add" - , y = w && w.prototype - , D = {} - , C = function(e) { - var t = y[e]; - r(y, e, "delete" == e ? function(e) { - return v && !u(e) ? !1 : t.call(this, 0 === e ? 0 : e) - } - : "has" == e ? function(e) { - return v && !u(e) ? !1 : t.call(this, 0 === e ? 0 : e) - } - : "get" == e ? function(e) { - return v && !u(e) ? void 0 : t.call(this, 0 === e ? 0 : e) - } - : "add" == e ? function(e) { - return t.call(this, 0 === e ? 0 : e), - this - } - : function(e, i) { - return t.call(this, 0 === e ? 0 : e, i), - this - } - ) - } - ; - if ("function" == typeof w && (v || y.forEach && !d(function() { - (new w).entries().next() - }))) { - var _ = new w - , S = _[b](v ? {} : -0, 1) != _ - , A = d(function() { - _.has(1) - }) - , E = h(function(e) { - new w(e) - }) - , I = !v && d(function() { - for (var e = new w, t = 5; t--; ) - e[b](t, t); - return !e.has(-0) - }); - E || (w = t(function(t, i) { - l(t, w, e); - var s = p(new T, t, w); - return void 0 != i && c(i, g, s[b], s), - s - }), - w.prototype = y, - y.constructor = w), - (A || I) && (C("delete"), - C("has"), - g && C("get")), - (I || S) && C(b), - v && y.clear && delete y.clear - } else - w = f.getConstructor(t, e, g, b), - o(w.prototype, i), - a.NEED = !0; - return m(w, e), - D[e] = w, - n(n.G + n.W + n.F * (w != T), D), - v || f.setStrong(w, e, g), - w - } -} -, function(e, t, i) { - "use strict"; - var s = i(23) - , n = i(24) - , r = i(5) - , o = i(36) - , a = i(12); - e.exports = function(e, t, i) { - var c = a(e) - , l = i(o, c, ""[e]) - , u = l[0] - , d = l[1]; - r(function() { - var t = {}; - return t[c] = function() { - return 7 - } - , - 7 != ""[e](t) - }) && (n(String.prototype, e, u), - s(RegExp.prototype, c, 2 == t ? function(e, t) { - return d.call(e, this, t) - } - : function(e) { - return d.call(e, this) - } - )) - } -} -, function(e, t, i) { - "use strict"; - var s = i(3); - e.exports = function() { - var e = s(this) - , t = ""; - return e.global && (t += "g"), - e.ignoreCase && (t += "i"), - e.multiline && (t += "m"), - e.unicode && (t += "u"), - e.sticky && (t += "y"), - t - } -} -, function(e, t) { - e.exports = function(e, t, i) { - var s = void 0 === i; - switch (t.length) { - case 0: - return s ? e() : e.call(i); - case 1: - return s ? e(t[0]) : e.call(i, t[0]); - case 2: - return s ? e(t[0], t[1]) : e.call(i, t[0], t[1]); - case 3: - return s ? e(t[0], t[1], t[2]) : e.call(i, t[0], t[1], t[2]); - case 4: - return s ? e(t[0], t[1], t[2], t[3]) : e.call(i, t[0], t[1], t[2], t[3]) - } - return e.apply(i, t) - } -} -, function(e, t, i) { - var s = i(10) - , n = i(35) - , r = i(12)("match"); - e.exports = function(e) { - var t; - return s(e) && (void 0 !== (t = e[r]) ? !!t : "RegExp" == n(e)) - } -} -, [894, 12], function(e, t, i) { - e.exports = i(56) || !i(5)(function() { - var e = Math.random(); - __defineSetter__.call(null , e, function() {}), - delete i(6)[e] - }) -} -, function(e, t) { - t.f = Object.getOwnPropertySymbols -} -, [908, 10, 3, 46, 31], [911, 6], function(e, t, i) { - for (var s, n = i(6), r = i(23), o = i(61), a = o("typed_array"), c = o("view"), l = !(!n.ArrayBuffer || !n.DataView), u = l, d = 0, h = 9, m = "Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(","); h > d; ) - (s = n[m[d++]]) ? (r(s.prototype, a, !0), - r(s.prototype, c, !0)) : u = !1; - e.exports = { - ABV: l, - CONSTR: u, - TYPED: a, - VIEW: c - } -} -, function(e, t, i) { - "use strict"; - function s(e) { - return e && e.__esModule ? e : { - "default": e - } - } - t.__esModule = !0; - var n = i(802) - , r = s(n) - , o = i(801) - , a = s(o) - , c = "function" == typeof a.default && "symbol" == typeof r.default ? function(e) { - return typeof e - } - : function(e) { - return e && "function" == typeof a.default && e.constructor === a.default ? "symbol" : typeof e - } - ; - t.default = "function" == typeof a.default && "symbol" === c(r.default) ? function(e) { - return "undefined" == typeof e ? "undefined" : c(e) - } - : function(e) { - return e && "function" == typeof a.default && e.constructor === a.default ? "symbol" : "undefined" == typeof e ? "undefined" : c(e) - } -} -, function(e, t, i) { - var s = i(33) - , n = i(42) - , r = i(85) - , o = i(64) - , a = "prototype" - , c = function(e, t, i) { - var l, u, d, h = e & c.F, m = e & c.G, p = e & c.S, f = e & c.P, g = e & c.B, v = e & c.W, T = m ? n : n[t] || (n[t] = {}), w = T[a], b = m ? s : p ? s[t] : (s[t] || {})[a]; - m && (i = t); - for (l in i) - u = !h && b && void 0 !== b[l], - u && l in T || (d = u ? b[l] : i[l], - T[l] = m && "function" != typeof b[l] ? i[l] : g && u ? r(d, s) : v && b[l] == d ? function(e) { - var t = function(t, i, s) { - if (this instanceof e) { - switch (arguments.length) { - case 0: - return new e; - case 1: - return new e(t); - case 2: - return new e(t,i) - } - return new e(t,i,s) - } - return e.apply(this, arguments) - } - ; - return t[a] = e[a], - t - }(d) : f && "function" == typeof d ? r(Function.call, d) : d, - f && ((T.virtual || (T.virtual = {}))[l] = d, - e & c.R && w && !w[l] && o(w, l, d))) - } - ; - c.F = 1, - c.G = 2, - c.S = 4, - c.P = 8, - c.B = 16, - c.W = 32, - c.U = 64, - c.R = 128, - e.exports = c -} -, function(e, t) { - e.exports = !0 -} -, 52, [909, 65, 63, 27], 61, , , , , function(e, t, i) { - var s; - s = function(e) { - function t() { - this.attributes({ - characterCountInvalidClass: "invalid-char-count", - stateSource: null - }), - this.after("initialize", function() { - this.observe(this.requestResource(this.attr.stateSource)).map(o.filterKeys(["displayedCharacterCount", "hasValidCharacterCount", "hideCharacterCount"])).distinctUntilChanged().subscribeOnNext(this.render, this) - }), - this.render = function(e) { - this.$node.toggle(!e.hideCharacterCount), - this.$node.val(e.displayedCharacterCount), - this.$node.toggleClass(this.attr.characterCountInvalidClass, !e.hasValidCharacterCount) - } - } - var s = i(1).component - , n = i(7) - , r = i(8) - , o = i(29); - return s(r, t, n) - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, function(e, t, i) { - var s; - s = function(e) { - function t() { - this.attributes({ - stateSource: null , - fixedHeight: !1, - defaultHeight: 130, - expandedHeight: 160, - minimumHeightCharacters: 180 - }), - this.after("initialize", function() { - var e = this.observe(this.requestResource(this.attr.stateSource)) - , t = e.pluck("tweetText").distinctUntilChanged(); - this.observe(t).filter(function(e) { - return this.$node.val() !== e - }, this).subscribeOnNext(function(e) { - this.$node.val(e) - }, this), - this.observe(e).pluck("sendingStatus").map(this.shouldDisable, this).distinctUntilChanged().subscribeOnNext(this.toggleDisable, this), - this.observe(e).pluck("selectionIndices").distinctUntilChanged().subscribeOnNext(this.setSelection, this), - this.observe(e).pluck("tweetTextFocused").distinctUntilChanged().filter(this.isNotTouch).subscribeOnNext(this.toggleFocus, this), - this.attr.fixedHeight || this.observe(t).map(this.calculateHeight, this).distinctUntilChanged().subscribeOnNext(this.setHeight, this), - this.on("input propertychange change", this.handleChange), - this.on("focus", this.triggerFocusChange.bind(this, !0)), - this.on("blur", this.triggerFocusChange.bind(this, !1)), - this.textAutoComplete = new TD.components.Autocomplete(this.$node) - }), - this.after("teardown", function() { - this.textAutoComplete.destroy() - }), - this.handleChange = function(e) { - this.trigger("uiComposeTextChanged", { - value: this.node.value - }) - } - , - this.triggerFocusChange = function(e) { - this.trigger("uiComposeTextFocus", { - focused: e - }) - } - , - this.toggleFocus = function(e) { - e ? this.node.focus() : this.node.blur() - } - , - this.shouldDisable = function(e) { - return "ready" !== e - } - , - this.toggleDisable = function(e) { - this.$node.prop("disabled", e) - } - , - this.setSelection = function(e) { - var t = e[0] - , i = e[1]; - this.node.selectionStart = t, - this.node.selectionEnd = i, - setTimeout(function() { - this.node.selectionStart = t, - this.node.selectionEnd = i - } - .bind(this), 70), - this.triggerFocusChange(!0) - } - , - this.calculateHeight = function(e) { - return e.length > this.attr.minimumHeightCharacters ? this.attr.expandedHeight : this.attr.defaultHeight - } - , - this.setHeight = function(e) { - this.$node.css({ - height: e - }) - } - , - this.isNotTouch = function() { - return !TD.util.isiOSDevice() || !TD.decider.get("touchdeck_compose_v2") - } - } - var s = i(1).component - , n = i(7) - , r = i(8); - return s(r, t, n) - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, function(e, t, i) { - var s; - s = function(e) { - "use strict"; - function t() { - this.showModal = function(e, t, i) { - if (!e || "function" != typeof e || "function" != typeof e.attachTo) - throw new TypeError("Component must be a constructor and have an attachTo method."); - t = t || {}, - t.isModal = !0, - t.isNonDismissible = !!i.withNonDismissible, - i = _.defaults(i || {}, { - id: _.uniqueId("modal") - }), - this.boundHandleModalContext = this.handleModalContext.bind(this, e, t, i), - this.on(document, "uiModalContext", this.boundHandleModalContext), - this.trigger("uiNeedsModalContext", i) - } - , - this.handleModalContext = function(e, t, i, n, r) { - r.id === i.id && (this.off(document, "uiModalContext", this.boundHandleModalContext), - r.$node && e.mixin(s).attachTo(r.$node, t)) - } - } - var s = i(521); - return t - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, function(e, t, i) { - var s; - s = function(e) { - var t = i(1).compose - , s = i(38) - , n = function() { - t.mixin(this, [s]), - this.attributes({ - accordionItemSelector: ".js-accordion-item", - accordionIsExpandedClass: "is-expanded", - accordionIsActiveClass: "is-active", - accordionToggleSelector: ".js-accordion-toggle-view", - accordionPanelSelector: ".js-accordion-panel", - isAccordionPanelAnimatingClass: "is-accordion-panel-animating" - }), - this.expandAccordionItem = function(e) { - this.trigger(e, "uiAccordionWillExpand"); - var t = e.find(this.attr.accordionPanelSelector); - e.addClass(this.attr.accordionIsExpandedClass), - e.addClass(this.attr.accordionIsActiveClass), - this.transitionExpand(t, this.attr.isAccordionPanelAnimatingClass, function() { - this.updatePanelHeights(), - this.trigger(e, "uiAccordionDidExpand") - } - .bind(this)), - this.trigger(e, "uiAccordionExpandAction") - } - , - this.collapseAccordionItem = function(e) { - var t = e.find(this.attr.accordionPanelSelector); - e.removeClass(this.attr.accordionIsActiveClass), - this.transitionCollapse(t, this.attr.isAccordionPanelAnimatingClass, function() { - e.removeClass(this.attr.accordionIsExpandedClass) - } - .bind(this)), - this.trigger(e, "uiAccordionCollapseAction") - } - , - this.getOpenAccordionItem = function() { - return this.select("accordionItemSelector").filter(function(e, t) { - return $(t).hasClass(this.attr.accordionIsExpandedClass) - } - .bind(this)) - } - , - this.accordionToggle = function(e) { - var t = $(e.target).closest(this.attr.accordionItemSelector) - , i = this.getOpenAccordionItem(); - i.length > 0 && this.collapseAccordionItem(i), - t.is(i) || this.expandAccordionItem(t) - } - , - this.showAccordionPanel = function(e) { - var t = e.closest(this.attr.accordionItemSelector) - , i = this.getOpenAccordionItem(); - t.is(i) || (this.collapseAccordionItem(i), - this.expandAccordionItem(t)) - } - , - this.updatePanelHeights = function() { - var e = ":visible:not(." + this.attr.isAccordionPanelAnimatingClass + ")"; - this.select("accordionPanelSelector").filter(e).each(function(e, t) { - var i = $(t); - i.css("height", ""), - i.height(i.height()), - this.trigger("uiAccordionTotalHeightChanged") - } - .bind(this)) - } - , - this.after("initialize", function() { - this.on("click", { - accordionToggleSelector: _.throttle(this.accordionToggle, 300).bind(this) - }), - this.on("uiAccordionUpdatePanelHeights", this.updatePanelHeights) - }) - } - ; - return n - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, function(e, t, i) { - var s; - s = function(e) { - function t(e, t, i) { - if (e.length && t.length) { - i = _.defaults(i || {}, { - time: 300, - easing: "inOutQuad" - }); - var r = e.outerHeight() - , o = t.outerHeight() - , a = e.scrollTop() - , c = s(e, t).top - , l = c + o - , u = a; - return l > r && (u = a + (l - r)), - 0 > c && (u = a + c), - n.ease({ - from: a, - to: u, - time: i.time, - easing: n.easeFn(i.easing), - applicator: function(t) { - e.scrollTop(t) - } - }) - } - } - function s(e, t) { - var i = e.offset() - , s = t.offset(); - return { - top: s.top - i.top, - left: s.left - i.left - } - } - var n = i(189); - return { - makeElementVisible: t - } - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, function(e, t, i) { - "use strict"; - function s(e) { - return e && e.__esModule ? e : { - "default": e - } - } - var n = i(19) - , r = s(n) - , o = {}; - e.exports = o; - var a = 0 - , c = 2 - , l = 4 - , u = 8; - o.maybe_log = function(e, t) { - var i = _.isUndefined(t) ? 1 : t; - TD.config.debug_level >= i && console.log(e) - } - , - o.NotJsonable = function(e) { - _.extend(this, e), - this.___ = e.toString() - } - , - o.NotJsonable.prototype = {}; - var d = function(e) { - console.log.apply(console, _.map(e, function(e) { - if (!_.isUndefined(e)) - try { - return JSON.parse((0, - r.default)(e)) - } catch (t) { - return new o.NotJsonable(e) - } - })) - } - ; - o.stateLog = function() { - TD.config.debug_level >= c && d(arguments) - } - , - o.verboseLog = function() { - TD.config.debug_level >= l && d(_.toArray(arguments)) - } - , - o.warn = function() { - TD.config.debug_level >= a && console.log.apply(console, _.toArray(arguments)) - } - , - o.trace = function(e, t) { - o.maybe_log("TRACE: " + e + ": " + (t || ""), 1) - } - , - o.printStacktrace = function() { - if (TD.config.debug_menu) - try { - throw new Error("stack trace or gtfo") - } catch (e) { - console.log(e.stack) - } - } - , - o.getStack = function() { - try { - throw new Error("stack trace or gtfo") - } catch (e) { - return TD.util.isChromeApp() ? e.stack.split("\n").slice(2).join("\n") : "" - } - } - , - o.errmark = function(e, t) { - return e || (e = t, - t = "missing message"), - console.log("---ERROR--->>>>>->>>>->>>->>->--" + t + "--<-<<--"), - o.maybe_log(e), - console.log(e.stack), - e - } - , - o.assert = function(e, t, i) { - if (!e) - throw console.log("------------------------------------------"), - console.log(["ASSERT FAILURE", t, i]), - o.printStacktrace(), - console.log("------------------------------------------"), - TD.sync.trace && TD.sync.trace.assert(t, i), - new Error("AssertionError") - } - , - o.precondition = function(e, t, i) { - if (!e) - throw console.log("------------------------------------------"), - console.log(["PRECONDITION FAILURE", t, i]), - o.printStacktrace(), - console.log("------------------------------------------"), - TD.sync.trace && TD.sync.trace.assert("PRECONDITION " + t, i), - new Error("PreconditionAssertionError") - } - , - o._break = function() { - console.log("you might want to set a breakpoint here ;-)") - } - , - o.warning = function(e) { - var t = _.toArray(arguments).slice(1); - console.log(["WARNING", e, o.pformat(t)]) - } - , - o.error = function(e) { - var t = _.toArray(arguments).slice(1); - console.log(["ERROR", e, o.pformat(t)]) - } - , - o.list_to_set = function(e) { - var t = {}; - return _.each(e, function(e) { - t[e] = !0 - }), - t - } - , - o.pprint = function(e) { - return o.maybe_log((0, - r.default)(e, null , " "), c), - e - } - , - o.pformat = function(e) { - return (0, - r.default)(e, null , " ") - } - , - o.repr = function(e) { - return (0, - r.default)(e) - } - , - o.clone = function(e) { - if (null === e || _.isUndefined(e)) - return e; - try { - return JSON.parse((0, - r.default)(e)) - } catch (t) { - return o.stateLog("util.clone couldn't parse object", e, t), - ["", e] - } - } - , - o.dictMap = function(e, t, i) { - var s = {}; - return _.each(_.map(e, t, i), function(e) { - s[e[0]] = e[1] - }), - s - } - , - o.stall = function(e, t) { - _.isUndefined(t) && (t = 0); - var i = new TD.core.defer.Deferred; - return _.delay(_.bind(i.callback, i), 1e3 * t, e), - i - } - , - o.autoRetry = function(e, t, i) { - var s = e(); - return t.forEach(function(t) { - s.addErrback(function(s) { - if (!i || i(s)) { - var n = new TD.core.defer.Deferred; - return n.addCallback(e), - setTimeout(function() { - n.callback() - }, t), - n - } - return s - }) - }), - s - } - , - o.DO_THING_ANYWAY = "doThingAnyway", - o.deDupeDeferred = function(e, t) { - function i(i) { - var s = _.find(n, function(e) { - return _.isEqual(e.args, i) - }); - return s || (s = { - args: _.cloneDeep(i), - needsThingDone: !0, - deferreds: [], - doThing: function() { - var t = [null ].concat(_.cloneDeep(i)); - return TD.core.defer.maybeDeferred(e.bind.apply(e, t)) - }, - beforeDeDupe: function() { - var e; - try { - e = t.apply(null , _.cloneDeep(i)) - } catch (s) {} - return e - } - }, - n.push(s)), - s - } - function s(e) { - n = n.filter(function(t) { - return t !== e - }); - var t = [].slice.call(arguments, 1); - e.deferreds.forEach(function(e) { - e.callback.apply(e, t) - }) - } - var n = []; - return t = t || function() {} - , - function() { - var e = [].slice.call(arguments) - , t = i(e); - if (!t.needsThingDone) { - var n = t.beforeDeDupe() === o.DO_THING_ANYWAY; - if (n) - return t.doThing() - } - var r = new TD.core.defer.Deferred; - return t.deferreds.push(r), - t.needsThingDone && (t.needsThingDone = !1, - t.doThing().addBoth(s.bind(null , t))), - r - } - } - , - o.makeThingScheduler = function(e, t, i, s, n) { - var r = !1 - , a = !1; - s = s || function() { - return !0 - } - , - n = _.isUndefined(n) ? 1 : n; - var c = [] - , l = function d() { - if (o.maybe_log(["_maybe_do_stuff", i, "want stuff done:", r, "am doing stuff:", a], u), - !r) - return void o.maybe_log("not doing stuff; someone else did stuff before us", u); - if (a) - return void o.maybe_log("am already doing stuff", u); - a = !0, - r = !1; - var s = TD.controller.progressIndicator; - if (t) - var n = s.addTask(t); - var l = TD.core.defer.maybeDeferred(e); - l.addCallback(function(e) { - if (a = !1, - t && s.deleteTask(n), - r) - d(); - else { - var i = c; - c = []; - for (var o = 0; o < i.length; o++) - try { - i[o].callback(e) - } catch (l) { - _.defer(_.bind(i[o].errback, i[o]), l) - } - } - }), - l.addErrback(function(r) { - o.errmark(r, 'do_stuff for "' + i + '" yielded error when calling; ' + e), - a = !1, - t && s.taskFailed(n); - var l = c; - c = []; - for (var u = 0; u < l.length; u++) - try { - l[u].errback(r) - } catch (d) { - _.defer(_.bind(l[u].errback, l[u]), d) - } - }) - } - ; - return function(e) { - if (!s()) - return o.maybe_log("not triggering (guarded): " + i, u), - TD.core.defer.succeed(); - e = _.isUndefined(e) ? n : e, - o.maybe_log('trigger func called "' + i + '"', u), - r = !0; - var t = new TD.core.defer.Deferred; - return c.push(t), - setTimeout(l, 1e3 * e), - t - } - } -} -, function(e, t, i) { - "use strict"; - var s = i(16) - , n = i(60) - , r = i(15); - e.exports = function(e) { - for (var t = s(this), i = r(t.length), o = arguments.length, a = n(o > 1 ? arguments[1] : void 0, i), c = o > 2 ? arguments[2] : void 0, l = void 0 === c ? i : n(c, i); l > a; ) - t[a++] = e; - return t - } -} -, function(e, t, i) { - "use strict"; - var s = i(14) - , n = i(52); - e.exports = function(e, t, i) { - t in e ? s.f(e, t, n(0, i)) : e[t] = i - } -} -, [882, 10, 6], function(e, t) { - e.exports = "constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",") -} -, function(e, t, i) { - var s = i(12)("match"); - e.exports = function(e) { - var t = /./; - try { - "/./"[e](t) - } catch (i) { - try { - return t[s] = !1, - !"/./"[e](t) - } catch (n) {} - } - return !0 - } -} -, [886, 6], function(e, t, i) { - var s = i(10) - , n = i(109).set; - e.exports = function(e, t, i) { - var r, o = t.constructor; - return o !== i && "function" == typeof o && (r = o.prototype) !== i.prototype && s(r) && n && n(e, r), - e - } -} -, [889, 55, 12], [890, 35], function(e, t, i) { - var s = i(10) - , n = Math.floor; - e.exports = function(e) { - return !s(e) && isFinite(e) && n(e) === e - } -} -, [892, 57, 52, 75, 23, 12], [893, 56, 2, 24, 23, 17, 55, 138, 75, 32, 12], function(e, t) { - var i = Math.expm1; - e.exports = !i || i(10) > 22025.465794806718 || i(10) < 22025.465794806718 || -2e-17 != i(-2e-17) ? function(e) { - return 0 == (e = +e) ? e : e > -1e-6 && 1e-6 > e ? e + e * e / 2 : Math.exp(e) - 1 - } - : i -} -, function(e, t) { - e.exports = Math.sign || function(e) { - return 0 == (e = +e) || e != e ? e : 0 > e ? -1 : 1 - } -} -, [910, 110, 61], [912, 3, 34, 12], [913, 53, 36], function(e, t, i) { - var s = i(105) - , n = i(36); - e.exports = function(e, t, i) { - if (s(t)) - throw TypeError("String#" + i + " doesn't accept regex!"); - return String(n(e)) - } -} -, function(e, t, i) { - "use strict"; - var s = i(53) - , n = i(36); - e.exports = function(e) { - var t = String(n(this)) - , i = "" - , r = s(e); - if (0 > r || r == 1 / 0) - throw RangeError("Count can't be negative"); - for (; r > 0; (r >>>= 1) && (t += t)) - 1 & r && (i += t); - return i - } -} -, function(e, t) { - e.exports = " \n\x0B\f\r   ᠎              \u2028\u2029\ufeff" -} -, [914, 46, 104, 133, 130, 6, 35], function(e, t, i) { - "use strict"; - var s = i(6) - , n = i(13) - , r = i(56) - , o = i(111) - , a = i(23) - , c = i(73) - , l = i(5) - , u = i(54) - , d = i(53) - , h = i(15) - , m = i(58).f - , p = i(14).f - , f = i(128) - , g = i(75) - , v = "ArrayBuffer" - , T = "DataView" - , w = "prototype" - , b = "Wrong length!" - , y = "Wrong index!" - , D = s[v] - , C = s[T] - , _ = s.Math - , S = (s.parseInt, - s.RangeError) - , A = s.Infinity - , E = D - , I = _.abs - , k = _.pow - , x = (_.min, - _.floor) - , M = _.log - , R = _.LN2 - , F = "buffer" - , L = "byteLength" - , O = "byteOffset" - , N = n ? "_b" : F - , U = n ? "_l" : L - , j = n ? "_o" : O - , P = function(e, t, i) { - var s, n, r, o = Array(i), a = 8 * i - t - 1, c = (1 << a) - 1, l = c >> 1, u = 23 === t ? k(2, -24) - k(2, -77) : 0, d = 0, h = 0 > e || 0 === e && 0 > 1 / e ? 1 : 0; - for (e = I(e), - e != e || e === A ? (n = e != e ? 1 : 0, - s = c) : (s = x(M(e) / R), - e * (r = k(2, -s)) < 1 && (s--, - r *= 2), - e += s + l >= 1 ? u / r : u * k(2, 1 - l), - e * r >= 2 && (s++, - r /= 2), - s + l >= c ? (n = 0, - s = c) : s + l >= 1 ? (n = (e * r - 1) * k(2, t), - s += l) : (n = e * k(2, l - 1) * k(2, t), - s = 0)); t >= 8; o[d++] = 255 & n, - n /= 256, - t -= 8) - ; - for (s = s << t | n, - a += t; a > 0; o[d++] = 255 & s, - s /= 256, - a -= 8) - ; - return o[--d] |= 128 * h, - o - } - , $ = function(e, t, i) { - var s, n = 8 * i - t - 1, r = (1 << n) - 1, o = r >> 1, a = n - 7, c = i - 1, l = e[c--], u = 127 & l; - for (l >>= 7; a > 0; u = 256 * u + e[c], - c--, - a -= 8) - ; - for (s = u & (1 << -a) - 1, - u >>= -a, - a += t; a > 0; s = 256 * s + e[c], - c--, - a -= 8) - ; - if (0 === u) - u = 1 - o; - else { - if (u === r) - return s ? NaN : l ? -A : A; - s += k(2, t), - u -= o - } - return (l ? -1 : 1) * s * k(2, u - t) - } - , B = function(e) { - return e[3] << 24 | e[2] << 16 | e[1] << 8 | e[0] - } - , H = function(e) { - return [255 & e] - } - , K = function(e) { - return [255 & e, e >> 8 & 255] - } - , z = function(e) { - return [255 & e, e >> 8 & 255, e >> 16 & 255, e >> 24 & 255] - } - , q = function(e) { - return P(e, 52, 8) - } - , W = function(e) { - return P(e, 23, 4) - } - , V = function(e, t, i) { - p(e[w], t, { - get: function() { - return this[i] - } - }) - } - , G = function(e, t, i, s) { - var n = +i - , r = d(n); - if (n != r || 0 > r || r + t > e[U]) - throw S(y); - var o = e[N]._b - , a = r + e[j] - , c = o.slice(a, a + t); - return s ? c : c.reverse() - } - , Y = function(e, t, i, s, n, r) { - var o = +i - , a = d(o); - if (o != a || 0 > a || a + t > e[U]) - throw S(y); - for (var c = e[N]._b, l = a + e[j], u = s(+n), h = 0; t > h; h++) - c[l + h] = u[r ? h : t - h - 1] - } - , Q = function(e, t) { - u(e, D, v); - var i = +t - , s = h(i); - if (i != s) - throw S(b); - return s - } - ; - if (o.ABV) { - if (!l(function() { - new D - }) || !l(function() { - new D(.5) - })) { - D = function(e) { - return new E(Q(this, e)) - } - ; - for (var J, X = D[w] = E[w], Z = m(E), ee = 0; Z.length > ee; ) - (J = Z[ee++])in D || a(D, J, E[J]); - r || (X.constructor = D) - } - var te = new C(new D(2)) - , ie = C[w].setInt8; - te.setInt8(0, 2147483648), - te.setInt8(1, 2147483649), - (te.getInt8(0) || !te.getInt8(1)) && c(C[w], { - setInt8: function(e, t) { - ie.call(this, e, t << 24 >> 24) - }, - setUint8: function(e, t) { - ie.call(this, e, t << 24 >> 24) - } - }, !0) - } else - D = function(e) { - var t = Q(this, e); - this._b = f.call(Array(t), 0), - this[U] = t - } - , - C = function(e, t, i) { - u(this, C, T), - u(e, D, T); - var s = e[U] - , n = d(t); - if (0 > n || n > s) - throw S("Wrong offset!"); - if (i = void 0 === i ? s - n : h(i), - n + i > s) - throw S(b); - this[N] = e, - this[j] = n, - this[U] = i - } - , - n && (V(D, L, "_l"), - V(C, F, "_b"), - V(C, L, "_l"), - V(C, O, "_o")), - c(C[w], { - getInt8: function(e) { - return G(this, 1, e)[0] << 24 >> 24 - }, - getUint8: function(e) { - return G(this, 1, e)[0] - }, - getInt16: function(e) { - var t = G(this, 2, e, arguments[1]); - return (t[1] << 8 | t[0]) << 16 >> 16 - }, - getUint16: function(e) { - var t = G(this, 2, e, arguments[1]); - return t[1] << 8 | t[0] - }, - getInt32: function(e) { - return B(G(this, 4, e, arguments[1])) - }, - getUint32: function(e) { - return B(G(this, 4, e, arguments[1])) >>> 0 - }, - getFloat32: function(e) { - return $(G(this, 4, e, arguments[1]), 23, 4) - }, - getFloat64: function(e) { - return $(G(this, 8, e, arguments[1]), 52, 8) - }, - setInt8: function(e, t) { - Y(this, 1, e, H, t) - }, - setUint8: function(e, t) { - Y(this, 1, e, H, t) - }, - setInt16: function(e, t) { - Y(this, 2, e, K, t, arguments[2]) - }, - setUint16: function(e, t) { - Y(this, 2, e, K, t, arguments[2]) - }, - setInt32: function(e, t) { - Y(this, 4, e, z, t, arguments[2]) - }, - setUint32: function(e, t) { - Y(this, 4, e, z, t, arguments[2]) - }, - setFloat32: function(e, t) { - Y(this, 4, e, W, t, arguments[2]) - }, - setFloat64: function(e, t) { - Y(this, 8, e, q, t, arguments[2]) - } - }); - g(D, v), - g(C, T), - a(C[w], o.VIEW, !0), - t[v] = D, - t[T] = C -} -, [920, 6, 45, 56, 218, 14], [923, 72, 12, 55, 45], [924, 71, 205, 55, 26, 139], 34, 36, [882, 77, 33], 131, 83, [910, 159, 117], [911, 33], 53, [919, 77], [920, 33, 42, 114, 163, 65], [921, 27], , , , , , function(e, t, i) { - i(263), - i(170), - i(262), - i(261), - i(266), - i(265), - i(264), - i(260) -} -, function(e, t) { - !function(e) { - e.createElement = function(t) { - return e(document.createElement(t)) - } - }(jQuery) -} -, function(e, t, i) { - "use strict"; - var s = i(257); - e.exports = { - parse: function(e) { - return s.parse(e, function(e, t, i) { - switch (e) { - case "a9": - case "ae": - case "2122": - return !1 - } - return TD.assets.get("emoji", { - icon: e - }) - }) - } - } -} -, function(e, t, i) { - var s; - s = function(e) { - function t() { - this.before("initialize", function() { - this.languages = TD.languages.getAllLanguages() - }) - } - return t - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, function(e, t, i) { - var s; - s = function(e) { - "use strict"; - function t() { - s.mixin(this, [n]), - this.withMediaUploaderUpload = function(e, t) { - if (e = e || {}, - !e.files || !e.files.length) - throw new Error("Missing file to upload."); - if (!e.accountKey) - throw new Error("Missing account key to upload with."); - t = _.defaults(t || {}, { - ttl: "ephemeral" - }); - var i = this.getClientByAccountKey(e.accountKey) - , s = i.oauth.account - , n = new FormData; - e.file = e.files[0], - n.append("media", e.file), - n.append("ttl", t.ttl); - var r = TD.net.ajax.upload(n, s); - return r.addCallback(function(e) { - if (e = e || {}, - e.data = e.data || {}, - "string" != typeof e.data.media_id_string) - throw new Error("Upload response missing media_id_string."); - return e.data.media_id_string - }), - r - } - } - var s = i(1).compose - , n = i(44); - return t - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, function(e, t, i) { - var s; - s = function(e) { - function t() { - this.attributes({ - stateSource: null , - typeTextSelector: ".js-account-safeguard-text" - }), - this.after("initialize", function() { - this.observe(this.requestResource(this.attr.stateSource)).map(a.filterKeys(["tweetType", "scheduledDate", "isSelectedAccountSafeguarded", "selectedAccountKeys", "tweetText", "files"])).distinctUntilChanged(null , a.shallowEquals()).subscribeOnNext(this.render, this), - this.on(this.$node.find("input"), "change", this.handleChange) - }), - this.getText = function(e) { - return "message" === e.tweetType ? TD.i("Ready to send?") : null !== e.scheduledDate ? TD.i("Ready to schedule?") : TD.i("Ready to Tweet?") - } - , - this.render = function(e) { - this.select("typeTextSelector").html(this.getText(e)), - this.$node.toggleClass("is-hidden", !e.isSelectedAccountSafeguarded), - this.$node.find("input").prop("checked", !1).change() - } - , - this.handleChange = function(e) { - this.trigger("uiAccountSafeguardCheckboxChange", { - checked: $(e.target).prop("checked") - }) - } - } - var s = i(1).component - , n = i(7) - , r = i(8) - , o = i(30) - , a = i(29); - return s(r, t, n, o) - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, function(e, t, i) { - var s; - s = function(e) { - function t() { - this.attributes({ - stateSource: null , - sendButtonSelector: ".js-send-button", - composeSuccess: ".js-compose-sending-success" - }), - this.after("initialize", function() { - this.$sendButton = this.select("sendButtonSelector"), - this.on(this.$sendButton, "click keydown", this.handleClick); - var e = this.observe(this.requestResource(this.attr.stateSource)); - e.pluck("sendButtonText").distinctUntilChanged().subscribeOnNext(this.renderButtonText, this), - e.pluck("sendButtonTooltip").distinctUntilChanged().subscribeOnNext(this.renderTooltip, this), - e.pluck("sendingStatus").distinctUntilChanged().subscribeOnNext(this.renderSendingStatus, this), - e.pluck("canSend").distinctUntilChanged().subscribeOnNext(this.toggleEnabled, this) - }), - this.renderButtonText = function(e) { - this.$sendButton.text(e) - } - , - this.renderTooltip = function(e) { - var t = $("
    ").html(e).text(); - this.$sendButton.attr("data-original-title", t) - } - , - this.renderSendingStatus = function(e) { - this.spinnerButtonToggle("sending" === e), - this.select("composeSuccess").toggleClass("is-hidden", "success" !== e), - this.$sendButton.toggleClass("text-hidden", "ready" !== e) - } - , - this.toggleEnabled = function(e) { - this.$sendButton.toggleClass("is-disabled", !e) - } - , - this.handleClick = function(e) { - (!a.eventIsKey(e) || a.isEnter(e) || a.isSpacebar(e)) && this.trigger("uiComposeSendTweet", {}) - } - } - var s = i(1).component - , n = i(97) - , r = i(7) - , o = i(8) - , a = i(190); - return s(o, t, n, r) - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, function(e, t, i) { - var s; - s = function(e) { - function t(e, t) { - if (e.scheduledDate) - this.trigger("uiSendScheduledTweets", { - requestId: e.requestId, - requests: t, - scheduledDate: e.scheduledDate, - tokenToDelete: e.scheduledId, - metadata: e.metadata - }); - else { - var i = "message" === e.type ? "uiSendDm" : "uiSendTweet"; - this.trigger("metric", { - type: "metric", - key: "tweet:data:selected-accounts", - value: [t.length] - }), - t.forEach(function(e) { - this.trigger(i, e) - }, this), - this.trigger("uiSendScheduledTweets", { - requestId: e.requestId, - requests: [], - scheduledDate: e.scheduledDate, - tokenToDelete: e.scheduledId, - metadata: e.metadata - }) - } - } - var s = i(1).compose - , n = i(447) - , r = i(11) - , o = i(95); - return function() { - s.mixin(this, [n, r, o]); - var e = [] - , i = null - , a = []; - this.after("initialize", function() { - this.on(document, "dataTweetSent", this.forCurrentRequest(this.handleDataTweetSent)), - this.on(document, "dataTweetError", this.forCurrentRequest(this.handleDataTweetError)), - this.on(document, "dataDmSent", this.forCurrentRequest(this.handleDataDmSent)), - this.on(document, "dataDmError", this.forCurrentRequest(this.handleDataDmError)), - this.on(document, "dataScheduledTweetsSent", this.forCurrentRequest(this.handleDataScheduledTweetsSent)), - this.on(document, "dataScheduledTweetsError", this.forCurrentRequest(this.handleDataScheduledTweetsError)) - }), - this.forCurrentRequest = function(e) { - return function(t, s) { - var n = i && s.request && s.request.requestId === i.requestId; - n && e.call(this, t, s) - } - } - , - this.resetSendTweet = function() { - e = [], - a = [], - i = null - } - , - this.sendTweet = function(e) { - this.trigger("uiComposeTweetSending"), - this.resetSendTweet(), - i = e, - this.maybeShortenTextLinks(e.text, function(t) { - e.text = t, - this.actuallySendTweet(e) - } - .bind(this)) - } - , - this.actuallySendTweet = function(e) { - var i = [] - , s = e.from.map(function(t) { - var s = { - accountKey: t - }; - return e.accountsMediaIds && (s.mediaIds = e.accountsMediaIds[t], - i.push(s.mediaIds)), - $.extend({}, e, s) - }); - if (i.length) { - var n = new TD.core.defer.DeferredList(i); - n.addCallback(t.bind(this, e, s)) - } else - t.call(this, e, s) - } - , - this.handleTweetResponse = function(t) { - a.push(t.request), - a.length === i.from.length && (0 === e.length ? this.triggerTweetSuccess() : this.triggerTweetError()) - } - , - this.handleDataTweetSent = function(e, t) { - this.handleTweetResponse(t) - } - , - this.handleDataDmSent = function(e, t) { - this.handleTweetResponse(t) - } - , - this.handleDataScheduledTweetsSent = function(e, t) { - this.triggerTweetSuccess() - } - , - this.handleDataTweetError = function(t, i) { - e.push(i), - this.handleTweetResponse(i) - } - , - this.handleDataDmError = function(e, t) { - this.handleDataTweetError(e, t) - } - , - this.handleDataScheduledTweetsError = function(e, t) { - var i, s, n; - if (t.response.humanReadableMessage) - i = t.response.humanReadableMessage; - else { - try { - s = JSON.parse(t.response.req.responseText) - } catch (r) {} - n = s && s.error ? s.error : t.response.req.status, - i = TD.i("Scheduling failed. Please try again. ({{message}})", { - message: n - }) - } - TD.controller.progressIndicator.addMessage(i), - this.triggerTweetError() - } - , - this.showTweetErrors = function(e) { - if (0 !== e.length) { - var t = e.map(function(e) { - var t = {}; - try { - t = JSON.parse(e.response.responseText).errors[0] - } catch (s) { - e && e.response && TD.util.isNetworkFailure(e.response) && (t.code = "0") - } - var n = this.getApiErrorMessage(t); - e.response && e.response.message && (n = e.response.message); - var r = this.getAccountData(e.request.accountKey) - , o = r ? r.screenName : "unknown account"; - switch (i.type) { - case "message": - return TD.i("Message from @{{screenName}} failed: " + n, { - screenName: o - }); - default: - return TD.i("Tweet from @{{screenName}} failed: " + n, { - screenName: o - }) - } - }, this); - TD.controller.progressIndicator.addMessage(t.join("\n")) - } - } - , - this.triggerTweetSuccess = function() { - this.trigger("uiComposeTweetSent") - } - , - this.triggerTweetError = function() { - this.showTweetErrors(e), - this.trigger("uiComposeTweetError", { - errors: i.scheduledDate ? null : e - }) - } - } - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, function(e, t, i) { - var s; - s = function(e) { - var t = i(1).component - , s = function() { - this.attributes({ - account: null , - twitterUser: null , - follows: "s-follows" - }), - this.handleRelationshipData = function(e, t) { - t && t.relationship && this.account.isSameUser(t.relationship.source.screen_name) && this.twitterUser.isSameUser(t.relationship.target.screen_name) && this.$node.toggleClass(this.attr.follows, t.relationship.target.following) - } - , - this.destroy = function(e) { - e.stopPropagation(), - this.teardown() - } - , - this.after("initialize", function() { - if (this.account = this.attr.account, - this.twitterUser = this.attr.twitterUser, - !(this.account instanceof TD.storage.Account)) - throw new Error("source must be instance of TD.storage.Account"); - if (!(this.twitterUser instanceof TD.services.TwitterUser)) - throw new Error("target must be instance of TD.services.TwitterUser"); - this.on(document, "dataRelationship", this.handleRelationshipData), - this.attr.closeEvent && this.on(this.attr.closeEvent, this.destroy), - this.trigger("uiNeedsRelationship", { - account: this.account, - screenName: this.twitterUser.screenName - }) - }) - } - ; - return t(s) - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, function(e, t, i) { - var s; - s = function(e) { - function t() { - this.attributes({ - authType: "twitter", - passwordFlow: { - url: "https://twitter.com/account/begin_password_reset?ref=td&account_identifier={{username}}", - windowWidth: 1e3, - windowHeight: 600 - } - }), - this.after("initialize", function() { - this.on("uiForgotPassword", this.handleForgotPassword) - }), - this.handleForgotPassword = function() { - var e = this.attr.passwordFlow.url.replace("{{username}}", this.getLoginFormData().username); - window.open(e, null , "width=" + Math.min(this.attr.passwordFlow.windowWidth, screen.width) + ",height=" + Math.min(this.attr.passwordFlow.windowHeight, screen.height)) - } - } - var s = i(1).component - , n = i(515); - return s(t, n) - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, function(e, t, i) { - var s; - s = function() { - return function() { - this.getLoginAccountAccessDeniedMessageId = function() { - return "expired-login-error" - } - , - this.getLoginAccountAccessDeniedMessageData = function(e) { - return { - id: this.getLoginAccountAccessDeniedMessageId(), - text: [TD.i("TweetDeck no longer has permission to access your main login account @{{1}}.", { - 1: e.account.getUsername() - }), TD.i("You will be logged out to prevent unauthorized access.")].join(" "), - colors: { - background: "#b2d5ed", - foreground: "#555" - } - } - } - , - this.getDataminrAccountAccessDeniedMessageData = function(e) { - return { - id: "expired-dataminr-login-error", - text: TD.i("TweetDeck no longer has permission to access your Dataminr account.") + " " + TD.i("Please check your Dataminr settings."), - colors: { - background: "#b2d5ed", - foreground: "#555" - } - } - } - } - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, function(e, t, i) { - var s; - s = function(e) { - function t() { - this.attributes({ - account: null , - twitterUser: null , - states: { - blocking: "blocking", - following: "following", - me: "me", - notFollowing: "notFollowing", - pending: "pending", - unknown: "unknown" - }, - classNamesForStates: { - blocking: "s-blocking", - following: "s-following", - me: "s-thats-you", - notFollowing: "s-not-following", - pending: "s-pending", - unknown: "unknown" - }, - buttonEnabledForStates: { - blocking: !0, - following: !0, - me: !0, - notFollowing: !0, - pending: !1, - unknown: !1 - }, - followButton: ".js-follow-button" - }), - this.after("initialize", function() { - this.account = this.attr.account, - this.twitterUser = this.attr.twitterUser, - this.state = this.attr.states.unknown, - this.on(document, "dataRelationship", this.handleRelationshipData), - this.on("click", { - followButton: this.handleFollowButtonClick - }), - this.on(document, "uiFollowAction dataUnfollowActionError", this.handleActionFactory("following")), - this.on(document, "uiFollowProtectedUserAction", this.handleActionFactory("pending")), - this.on(document, "uiUnfollowAction dataFollowActionError", this.handleActionFactory("notFollowing")), - this.on(document, "uiBlockAction dataUnblockActionError", this.handleActionFactory("blocking")), - this.on(document, "uiUnblockAction dataBlockActionError dataReportActionError", this.handleActionFactory("notFollowing")), - $.subscribe("/user/" + this.screenName + "/block", this.handlePubSubEvent("blocking")), - $.subscribe("/user/" + this.screenName + "/unblock", this.handlePubSubEvent("notFollowing")), - this.attr.closeEvent && this.on(this.attr.closeEvent, this.destroy), - this.trigger("uiNeedsRelationship", { - account: this.account, - screenName: this.twitterUser.screenName - }) - }), - this.resetState = function() { - this.$node.removeClass(this.attr.classNamesForStates[this.state]) - } - , - this.setState = function(e, t) { - e.following ? this.state = this.attr.states.following : e.following_requested ? this.state = this.attr.states.pending : this.state = this.attr.states.notFollowing, - e.id === t.id && (this.state = this.attr.states.me), - e.blocking && (this.state = this.attr.states.blocking) - } - , - this.handleFollowButtonClick = function(e) { - var t = { - account: this.account, - twitterUser: this.twitterUser - }; - switch (this.state) { - case this.attr.states.following: - this.trigger("uiUnfollowAction", t); - break; - case this.attr.states.notFollowing: - this.twitterUser.isProtected ? this.trigger("uiFollowProtectedUserAction", t) : this.trigger("uiFollowAction", t); - break; - case this.attr.states.blocking: - this.trigger("uiUnblockAction", t); - break; - case this.attr.states.me: - TD.util.openURL("https://twitter.com/settings/profile") - } - e.stopPropagation() - } - , - this.toggleEnableButton = function(e) { - this.select("followButton").prop("disabled", !e) - } - , - this.setTargetElementState = function() { - this.$node.addClass(this.attr.classNamesForStates[this.state]) - } - , - this.isRelevantRelationship = function(e) { - return this.account.isSameUser(e.source.screen_name) && this.twitterUser.isSameUser(e.target.screen_name) - } - , - this.handleRelationshipData = function(e, t) { - t && t.relationship && this.isRelevantRelationship(t.relationship) && (this.resetState(), - this.setState(t.relationship.source, t.relationship.target), - this.toggleEnableButton(this.attr.buttonEnabledForStates[this.state]), - this.setTargetElementState()) - } - , - this.isRelevantAction = function(e) { - return e && e.twitterUser && e.twitterUser.isSameUser(this.twitterUser) && e.account === this.account - } - , - this.handleActionFactory = function(e) { - var t = function(t, i) { - i = i || {}, - this.isRelevantAction(i.request || i) && (this.resetState(), - this.state = this.attr.states[e], - this.setTargetElementState(), - this.toggleEnableButton(this.attr.buttonEnabledForStates[e])) - } - ; - return t.bind(this) - } - , - this.handlePubSubEvent = function(e) { - var t = function(t, i) { - i.getAccountKey() === this.account.getAccountKey() && (this.resetState(), - this.state = this.attr.states[e], - this.setTargetElementState()) - } - ; - return t.bind(this) - } - , - this.destroy = function(e) { - e.stopPropagation(), - this.teardown() - } - } - var s = i(1).component; - return s(t) - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, function(e, t, i) { - var s; - s = function(e) { - function t() { - this.attributes({ - inputSelector: ".js-app-search-input", - dropdownSelector: ".js-typeahead-dropdown", - itemsSelector: ".js-typeahead-item", - itemSelectedClass: "is-selected", - itemSelectedSelector: ".js-typeahead-item.is-selected", - deciders: { - showDebugInfo: !1 - }, - datasources: ["topics", "savedSearches", "recentSearches", "users", "lists", "conversations"], - limits: { - users: 5, - topics: 5, - lists: 2, - conversations: 3 - }, - datasourcesRecentOnly: ["recentSearches"], - queryTypes: ["topic", "saved-search", "recent-search", "user", "conversation"], - minHeight: 300, - hideAfterSelect: !1, - autoSelect: !1, - withClickTrap: !1 - }), - this.after("initialize", function() { - if (this.query = null , - this.on(document, "dataTypeaheadSuggestions", this.handleDataTypeaheadSuggestions), - this.on("uiTypeaheadInputFocus", this.handleTypeaheadInputFocus), - this.on("uiTypeaheadInputBlur", this.handleTypeaheadInputBlur), - this.on("uiTypeaheadInputSubmit", this.handleTypeaheadInputSubmit), - this.on("uiTypeaheadInputChanged", this.handleTypeaheadInputChanged), - this.on("uiTypeaheadInputMoveUp", this.handleTypeaheadInputMoveUp), - this.on("uiTypeaheadInputMoveDown", this.handleTypeaheadInputMoveDown), - this.on("uiTypeaheadInputRight", this.handleTypeaheadInputMoveRight), - this.on("uiTypeaheadInputTab uiTypeaheadInputLeft", this.completeSelection), - this.on("uiTypeaheadInputEscaped", this.handleTypeaheadInputEscaped), - this.on("mouseover", { - itemsSelector: this.handleItemMouseover - }), - this.on("click", { - itemsSelector: this.handleItemClick - }), - this.attr.withClickTrap) { - var e = this.select("dropdownSelector").add(this.select("inputSelector")); - this.setClickTrapTarget(e), - this.onReceiveClick(this.handleClickTrapClick) - } - }), - this.handleClickTrapClick = function() { - this.hideDropdown(), - this.trigger(this.select("inputSelector"), "uiTypeaheadNoItemSelected") - } - , - this.handleTypeaheadInputEscaped = function() { - this.hideDropdown() - } - , - this.handleTypeaheadInputFocus = function(e, t) { - this.hasFocus = !0, - t.query !== this.query && this.handleTypeaheadInputChanged(e, t) - } - , - this.handleTypeaheadInputBlur = function() { - this.hasFocus = !1, - this.trigger("dataTypeaheadQueryReset") - } - , - this.handleItemMouseover = function(e, t) { - this.select("itemsSelector").removeClass(this.attr.itemSelectedClass), - $(t.el).addClass(this.attr.itemSelectedClass) - } - , - this.moveSelection = function(e) { - var t, i = this.select("itemsSelector").filter(":visible"), s = i.filter(this.attr.itemSelectedSelector); - s.removeClass(this.attr.itemSelectedClass), - t = s.length ? i.index(s) + e : -1 + e, - 0 > t ? t = i.length - 1 : t >= i.length && (t = 0), - i.eq(t).addClass(this.attr.itemSelectedClass) - } - , - this.getSelectedItemIndex = function() { - var e = this.select("itemsSelector").filter(":visible") - , t = e.filter(this.attr.itemSelectedSelector); - return e.index(t) - } - , - this.handleTypeaheadInputMoveUp = function(e) { - this.moveSelection(-1) - } - , - this.handleTypeaheadInputMoveDown = function(e) { - this.moveSelection(1) - } - , - this.handleTypeaheadInputMoveRight = function(e, t) { - -1 === this.getSelectedItemIndex() ? this.moveSelection(1) : this.completeSelection(e, t) - } - , - this.handleTypeaheadInputChanged = function(e, t) { - var i = t.query - , s = this.attr.datasources; - 0 === i.trim().length && (s = this.attr.datasourcesRecentOnly), - this.query = i, - this.select("itemsSelector").removeClass(this.attr.itemSelectedClass), - this.trigger("uiNeedsTypeaheadSuggestions", { - query: i, - datasources: s, - dropdownId: this.getDropdownId(), - type: "search", - limits: this.attr.limits - }) - } - , - this.getDropdownId = function() { - return this.dropdownId || (this.dropdownId = "swift_typeahead_dropdown_" + Date.now()), - this.dropdownId - } - , - this.generateItemFromSelectedElement = function(e) { - var t, i = e.attr("data-search-type"); - switch (i) { - case "user": - t = { - id: e.attr("data-user-id"), - name: e.attr("data-user-name"), - screenName: e.attr("data-screen-name"), - profileImageURL: e.attr("data-profile-image-url"), - verified: "true" === e.attr("data-verified") - }; - break; - case "conversation": - t = { - conversationId: e.attr("data-conversation-id"), - accountKey: e.attr("data-account-key") - }; - break; - default: - t = {} - } - return t - } - , - this.triggerSelectionEvent = function(e) { - var t = this.select("itemsSelector") - , i = t.index(e) - , s = this.query - , n = e.data("search-query"); - (s || n) && (this.trigger(e, "uiTypeaheadItemSelected", { - index: i, - searchType: e.data("search-type"), - query: n, - input: s, - item: this.generateItemFromSelectedElement(e) - }), - this.attr.hideAfterSelect && this.hideDropdown()) - } - , - this.handleItemClick = function(e, t) { - var i = $(t.el); - this.triggerSelectionEvent(i) - } - , - this.handleTypeaheadInputSubmit = function(e) { - var t = this.select("itemsSelector").filter(this.attr.itemSelectedSelector).filter(":visible").first(); - t.length ? this.triggerSelectionEvent(t) : this.trigger(this.select("inputSelector"), "uiTypeaheadNoItemSelected") - } - , - this.completeSelection = function(e, t) { - var i = t && "rtl" === t.dir ? "rtl" : "ltr"; - if (!("rtl" === i && "uiTypeaheadInputRight" === e.type || -1 !== ["ltr", void 0, ""].indexOf(i) && "uiTypeaheadInputLeft" === e.type)) { - var s = this.select("itemsSelector").filter(this.attr.itemSelectedSelector).first(); - if (!s.length) { - s = this.select("itemsSelector").first(); - var n = s.data("search-query") !== this.query; - if (!n) - return void ("uiTypeaheadInputTab" === e.type && (this.hasFocus = !1)) - } - var r = s.data("search-type") - , o = this.attr.queryTypes.some(function(e) { - return e === r - }); - if (!o) - return void ("uiTypeaheadInputTab" === e.type && (this.hasFocus = !1)); - var a = s.data("search-query") - , c = this.select("itemsSelector") - , l = c.index(s); - this.trigger("uiTypeaheadItemComplete", { - value: a, - searchType: s.data("search-type"), - index: l, - query: a, - item: this.generateItemFromSelectedElement(s) - }), - this.hideDropdown() - } - } - , - this.hideDropdown = function() { - this.attr.withClickTrap && this.disableClickTrap(), - this.attr.hideAfterSelect && this.select("dropdownSelector").addClass("is-hidden") - } - , - this.showDropdown = function() { - this.attr.hideAfterSelect && this.select("dropdownSelector").removeClass("is-hidden"), - this.attr.withClickTrap && this.enableClickTrap() - } - , - this.handleDataTypeaheadSuggestions = function(e, t) { - var i = this.select("itemsSelector").filter(this.attr.itemSelectedSelector); - if (t.dropdownId === this.getDropdownId() && t.query === this.query && this.hasFocus && !i.length) { - this.trigger("uiTypeaheadRenderResults", t); - var s = this.attr.datasources.some(function(e) { - return t.suggestions[e] && t.suggestions[e].length - }); - s ? (this.trigger("uiTypeaheadSuggestions"), - this.showDropdown(), - this.attr.autoSelect && 0 === this.select("itemSelectedSelector").length && this.select("itemsSelector").first().addClass("is-selected"), - this.select("itemsSelector").removeClass("list-item-first").removeClass("list-item-last").filter(":visible").first().addClass("list-item-first").end().last().addClass("list-item-last")) : this.trigger("uiTypeaheadNoSuggestions") - } - } - } - var s = i(1).component - , n = i(183) - , r = i(543) - , o = i(541) - , a = i(540) - , c = i(542) - , l = i(539) - , u = i(538) - , d = i(4); - return s(t, n, d, o, r, c, l, a, u) - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, function(e, t, i) { - var s; - s = function(e) { - "use strict"; - function t() { - this.attributes({ - focusOnInit: !0, - clearOnSelect: !0, - blurOnSelect: !0, - templateName: "user_selector", - placeholder: TD.i("Enter Twitter username…"), - selectButtonIconClass: "icon-plus", - selectButtonSelector: ".js-select-button", - inputSelector: ".js-username-input", - withSelectButton: !0 - }), - this.after("initialize", function() { - var e = o.render(this.attr.templateName, { - searchInputControlClass: "margin-tm", - selectButtonIconClass: this.attr.selectButtonIconClass, - placeholder: this.attr.placeholder, - withSelectButton: this.attr.withSelectButton - }); - this.$node.html(e), - this.attachChild(r, this.$node), - this.on("click", { - selectButtonSelector: this.handleInputSelection - }), - this.on("uiInputSubmit", { - inputSelector: this.handleInputSelection - }), - this.autocomplete = new TD.components.Autocomplete(this.select("inputSelector"),{ - dmMode: !0 - }), - this.on(this.autocomplete.$node, "td-autocomplete-select", this.handleTDAutocompleteSelect), - this.attr.focusOnInit && this.select("inputSelector").focus() - }), - this.handleTDAutocompleteSelect = function(e, t) { - this.select("inputSelector").val(t.screenName), - this.handleInputSelection() - } - , - this.handleInputSelection = function() { - var e = this.select("inputSelector").val(); - if (e) { - this.trigger(this.attr.inputSelector, "uiWaitingForAsyncResponse"); - var t = TD.cache.twitterUsers.getByScreenName(e); - t.addCallbacks(this.triggerSelection.bind(this), this.handleError.bind(this)), - t.addBoth(this.trigger.bind(this, this.attr.inputSelector, "uiReceivedAsyncResponse")) - } - } - , - this.triggerSelection = function(e) { - this.trigger("uiUserSelected", { - user: e - }), - this.attr.clearOnSelect && this.select("inputSelector").val(""), - this.attr.blurOnSelect && this.select("inputSelector").blur() - } - , - this.handleError = function(e) { - var t; - try { - t = e.req.errors[0].message - } finally { - t && TD.controller.progressIndicator.addMessage(t) - } - } - } - var s = i(1).component - , n = i(20) - , r = i(93) - , o = i(9); - return s(t, n) - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, function(e, t, i) { - var s; - s = function(e) { - var t = function() { - var e = [] - , t = [] - , i = !1; - this.onReceiveClick = function(t) { - e.push(t) - } - , - this.onLoseClick = function(e) { - t.push(e) - } - , - this.runReceiveHandlers = function() { - e.forEach(function(e) { - e.call(this) - }, this) - } - , - this.runLoseHandlers = function(e) { - this.targetWithinComponent(e.target) || t.forEach(function(e) { - e.call(this) - }, this) - } - , - this.targetWithinComponent = function(e) { - return $(e).closest(this.$clickTrapTarget || this.$node).length > 0 - } - , - this.setClickTrapTarget = function(e) { - this.$clickTrapTarget = e - } - , - this.enableClickTrap = function() { - i || (_.defer(function() { - $("body").on("click.clicktrap", "*", this.runLoseHandlers.bind(this)), - this.$node.on("click.clicktrap", "*", this.runReceiveHandlers.bind(this)) - } - .bind(this)), - i = !0) - } - , - this.disableClickTrap = function() { - i && ($("body").off("click.clicktrap"), - this.$node.off("click.clicktrap"), - i = !1) - } - } - ; - return t - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, function(e, t, i) { - var s; - s = function(e) { - function t() { - s.mixin(this, [n, r]), - this.after("initialize", function() { - this.mouseDown = !1, - this.setupDragDrop({ - indicateDrop: !1, - dragstart: this.mouseDownOff, - dragend: function() { - this.mouseDownOff(), - this.destroyFlyover() - } - }), - this.on(document, "mousedown", this.mouseDownOn), - this.on(document, "mouseup", this.mouseDownOff) - }), - this.mouseDownOn = function(e) { - this.mouseDown = !0 - } - , - this.mouseDownOff = function(e) { - this.mouseDown = !1 - } - , - this.renderFlyover = function(e, t) { - if (!this.mouseDown) { - var i; - if (i = t && t.content ? t.content : e.data("title")) { - this.$flyover = this.renderTemplate("column_nav_flyout", { - content: i - }), - $("body").append(this.$flyover); - var s = e.height(); - this.$flyover.css({ - lineHeight: s + "px" - }), - this.$flyover.children().height(s), - this.repositionFlyover(e) - } - } - } - , - this.destroyFlyover = function() { - this.$flyover && (this.$flyover.remove(), - this.$flyover = null ) - } - , - this.repositionFlyover = function(e) { - var t; - this.$flyover && (t = e.offset().top - (this.$flyover.height() - e.height()) / 2, - this.$flyover.css("top", t)) - } - } - var s = i(1).compose - , n = i(4) - , r = i(94); - return t - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, function(e, t, i) { - var s; - s = function(e) { - var t = i(1).compose - , s = i(4) - , n = i(526) - , r = i(528) - , o = i(532) - , a = i(525) - , c = i(527) - , l = function() { - t.mixin(this, [s]), - this.attributes({ - searchAccordionTemplate: "menus/search_accordion", - contentFilterSelector: ".js-content-filter", - locationFilterSelector: ".js-location-filter", - userFilterSelector: ".js-user-filter", - actionFilterSelector: ".js-action-filter", - engagementFilterSelector: ".js-engagement-filter", - searchFilterSelector: ".js-search-filter", - contentSummaryClass: "js-content-filter-summary", - locationSummaryClass: "js-location-filter-summary", - userSummaryClass: "js-user-filter-summary", - actionSummaryClass: "js-action-filter-summary", - engagementSummaryClass: "js-engagement-filter-summary", - contentSummarySelector: ".js-content-filter-summary", - locationSummarySelector: ".js-location-filter-summary", - userSummarySelector: ".js-user-filter-summary", - actionSummarySelector: ".js-action-filter-summary", - engagementSummarySelector: ".js-engagement-filter-summary", - excludingClass: "js-excluding", - matchingClass: "js-matching", - filterTypes: ["content", "location", "user", "action", "engagement"] - }), - this.isValidFilterType = function(e) { - return this.attr.filterTypes.some(function(t) { - return e === t - }) - } - , - this.handleSearchFilterUpdate = function(e, t) { - if (t.filter && this.isValidFilterType(t.type)) { - this.searchFilter[t.type] = t.filter; - var i = t.filter.getSummaryText(this.attr.columnType) - , s = this.select(t.type + "SummarySelector"); - s.text(i), - TD.controller.stats.advancedSearchSettings(this.attr.scribeSection, t.type, t.filterName, t.value), - this.trigger(this.$accordion, "uiAccordionUpdatePanelHeights"), - this.trigger("uiColumnUpdateSearchFilter", this.searchFilter) - } - } - , - this.renderSearchFilters = function(e, t) { - this.searchFilter = e, - this.$accordion = this.select("accordionSelector"); - var i = this.renderTemplate(this.attr.searchAccordionTemplate, { - content: { - summaryText: this.searchFilter.content.getSummaryText(), - iconClass: "icon-content", - title: TD.i("Content"), - jsClass: this.attr.contentSummaryClass, - isExpanded: t.expandContentFilter - }, - location: t.withLocationFilter ? { - summaryText: this.searchFilter.location.getSummaryText(), - iconClass: "icon-geo", - title: TD.i("Location"), - jsClass: this.attr.locationSummaryClass, - isExpanded: t.expandLocationFilter - } : !1, - user: { - summaryText: this.searchFilter.user.getSummaryText(), - iconClass: "icon-user", - title: TD.i("Users"), - jsClass: this.attr.userSummaryClass, - isExpanded: t.expandUserFilter - }, - action: t.withActionFilter ? { - summaryText: this.searchFilter.action.getSummaryText(this.attr.columnType), - iconClass: "icon-check", - title: TD.i("Showing"), - jsClass: this.attr.actionSummaryClass, - isExpanded: t.expandActionFilter - } : !1, - engagement: t.withEngagementFilter ? { - summaryText: this.searchFilter.engagement.getSummaryText(), - iconClass: "icon-retweet", - title: TD.i("Engagement"), - jsClass: this.attr.engagementSummaryClass, - isExpanded: t.expandEngagementFilter - } : !1 - }); - this.$accordion.append(i), - this.trigger(this.select("contentFilterSelector"), "uiDestroyContentFilterForm"), - this.trigger(this.select("locationFilterSelector"), "uiDestroyLocationFilterForm"), - this.trigger(this.select("userFilterSelector"), "uiDestroyUserFilterForm"), - n.attachTo(this.select("contentFilterSelector"), { - searchFilter: e, - renderOptions: t - }), - t.withLocationFilter && r.attachTo(this.select("locationFilterSelector"), { - searchFilter: e, - renderOptions: t - }), - o.attachTo(this.select("userFilterSelector"), { - searchFilter: e, - renderOptions: t - }), - t.withActionFilter && a.attachTo(this.select("actionFilterSelector"), { - searchFilter: e, - renderOptions: t, - columnType: this.attr.columnType - }), - t.withEngagementFilter && c.attachTo(this.select("engagementFilterSelector"), { - searchFilter: e, - renderOptions: t - }) - } - , - this.after("initialize", function() { - this.searchFilter = this.searchFilter || new TD.vo.SearchFilter, - this.$searchFilter = this.select("searchFilterSelector"), - this.on("uiSearchFilterUpdateAction", this.handleSearchFilterUpdate) - }) - } - ; - return l - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, function(e, t, i) { - "use strict"; - !(e.exports = { - getRemainingCharCount: function(e, t) { - return e - t - }, - isWithinCharLimit: function(e, t) { - return e >= t - }, - isOverCharLimit: function(e, t) { - return t > e - } - }) -} -, function(e, t, i) { - var s; - s = function(e) { - function t(e) { - var t = _.clone(e); - t.configuration = t.configuration || {}, - t.settings = t.settings || {}, - t.hasMediaAttached = t.files ? t.files.length > 0 : !1, - t.hasQuotedTweet = !!t.quotedTweet; - var i = TD.decider.get("dev_beyond_140_compose") - , d = "message" === t.tweetType - , h = i && !d - , m = i ? 1e4 : t.attr.maxCharCount - , p = n.getTweetLength(t.tweetText.trim(), t.configuration) - , f = t.configuration.characters_reserved_per_media + (t.scheduledDate ? 1 : 0) - , g = t.hasMediaAttached ? f : 0 - , v = t.hasQuotedTweet ? t.configuration.short_url_length_https + 1 : 0; - return t.characterCountLimit = d ? t.configuration.dm_text_character_limit : m, - t.characterCount = p + g + v, - t.hasValidCharacterCount = r.isWithinCharLimit(t.characterCountLimit, t.characterCount), - t.remainingCharCount = r.getRemainingCharCount(t.characterCountLimit, t.characterCount), - t.isJustWhitespace = 0 === t.characterCount, - t.displayedCharacterCount = h ? t.characterCount : t.remainingCharCount, - t.hideCharacterCount = d ? t.remainingCharCount >= 0 : i && t.isJustWhitespace, - t.rawTweetText = t.tweetText + (t.quotedTweet ? " " + t.quotedTweet.getChirpURL() : ""), - t.hasSelectedAccounts = t.selectedAccountKeys.length > 0, - t.isSelectedAccountSafeguarded = o.isSelectedAccountSafeguarded(t), - t.safeguardingOk = o.isSafeguardingOk(t), - t.hasMessageRecipients = t.messageRecipients.length > 0 || t.messageConversation, - t.hasValidScheduledDate = t.scheduledDate && t.scheduledDate > t.currentTime, - t.schedulingOk = t.scheduledDate ? t.hasValidScheduledDate : !0, - t.sendButtonText = a.getButtonText(t), - t.sendButtonTooltip = a.getTooltipText(t), - t.canAddImage = c.canAddImage(t), - t.addImageButtonTooltip = c.getTooltipText(t), - t.addImageButtonText = c.getButtonText(t), - t.canSchedule = l.canSchedule(t), - t.scheduleButtonTooltip = l.getTooltipText(t), - t.scheduleButtonText = l.getButtonText(t), - t.canSwitchTweetType = u.canSwitchTweetType(t), - t.tweetTypeButtonTooltip = u.getTooltipText(t), - t.canSend = s(t), - t - } - function s(e) { - return "sending" === e.sendingStatus ? !1 : e.hasValidCharacterCount && !e.isJustWhitespace && e.hasSelectedAccounts && e.safeguardingOk && e.schedulingOk && ("message" !== e.tweetType || e.hasMessageRecipients) ? e.hasQuotedTweet && e.hasMediaAttached ? !1 : !0 : !1 - } - var n = i(99) - , r = i(186) - , o = i(560) - , a = i(568) - , c = i(561) - , l = i(567) - , u = i(570); - return t - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, function(e, t, i) { - var s; - s = function(e) { - var t = { - maxRecipientsReached: function(e) { - return e.messageRecipients.length >= e.attr.maxRecipients - }, - getMaxAllowedImages: function(e) { - return "message" === e.tweetType || e.scheduledDate ? 1 : 4 - }, - shouldSetNewReplyTo: function(e) { - return !e.inReplyTo || "" === e.tweetText - }, - onlyOneAccountIsSelected: function(e) { - return 1 === e.selectedAccountKeys.length - }, - existingConversation: function(e) { - return !(!e.messageConversation && !e.messageRecipients.length) - }, - keyIsInSelectedAccounts: function(e, t) { - return e.selectedAccountKeys.some(function(e) { - return e === t - }) - } - }; - return t - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, function(e, t, i) { - function s(e) { - return e && e.__esModule ? e : { - "default": e - } - } - var n, r = i(112), o = s(r); - n = function(e) { - function t(e) { - var t = r[e]; - if (!t) - throw new Error("No such method"); - return function(e, i, s) { - return i + s * t(e) - } - } - function i(e) { - if (e = e || {}, - [(0, - o.default)(e.from), (0, - o.default)(e.time), (0, - o.default)(e.applicator)].indexOf("undefined") > -1) - throw new Error("animate requires from, time and applicator."); - var i = parseFloat(e.from); - if (!_.isNumber(i)) - throw new Error("A numeric from value is required."); - if ("undefined" == typeof e.to && "undefined" == typeof e.delta) - throw new Error("animate either a to amount or a delta."); - var r = parseFloat(e.to); - if ("undefined" != typeof e.delta && (r = i + parseFloat(e.delta)), - !_.isNumber(r)) - throw new Error("A numeric to value is required."); - var a = e.time; - _.isNumber(a) || (a = parseFloat(a)); - var c = e.easing; - "function" != typeof c && (c = t("linear")); - var l = e.applicator; - if ("function" != typeof l) - throw new Error("applicator must be a function."); - var u = e.name - , d = e.done || function() {} - , h = Date.now() - , m = r - i; - 0 !== m && (u && (s[u] = n), - window.requestAnimationFrame(function p(e) { - var t = Date.now() - h - , n = t / a; - return t >= a ? (l(c(1, i, m)), - d(t)) : u && s[u] !== e ? d(t) : (window.requestAnimationFrame(p.bind(this, e)), - void l(c(n, i, m), i, n)) - } - .bind(this, n)), - n += 1) - } - var s = {} - , n = 1 - , r = { - linear: function(e) { - return e - }, - inQuad: function(e) { - return e * e - }, - outQuad: function(e) { - return e * (2 - e) - }, - inOutQuad: function(e) { - return .5 > e ? 2 * e * e : -1 + (4 - 2 * e) * e - }, - inCubic: function(e) { - return e * e * e - }, - outCubic: function(e) { - return --e * e * e + 1 - }, - inOutCubic: function(e) { - return .5 > e ? 4 * e * e * e : (e - 1) * (2 * e - 2) * (2 * e - 2) + 1 - }, - inQuart: function(e) { - return e * e * e * e - }, - outQuart: function(e) { - return 1 - --e * e * e * e - }, - inOutQuart: function(e) { - return .5 > e ? 8 * e * e * e * e : 1 - 8 * --e * e * e * e - }, - inQuint: function(e) { - return e * e * e * e * e - }, - outQuint: function(e) { - return 1 + --e * e * e * e * e - }, - inOutQuint: function(e) { - return .5 > e ? 16 * e * e * e * e * e : 1 + 16 * --e * e * e * e * e - } - }; - return { - easeFn: t, - ease: i - } - } - .call(t, i, t, e), - !(void 0 !== n && (e.exports = n)) -} -, function(e, t, i) { - var s; - s = function() { - var e = {}; - return e.eventIsKey = function(e) { - return e.which > 3 - } - , - e.isEnter = function(e) { - return e.which === TD.constants.keyCodes.enter - } - , - e.isSpacebar = function(e) { - return e.which === TD.constants.keyCodes.spacebar - } - , - e - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, function(e, t, i) { - var s; - s = function(e) { - var t = i(68) - , s = { - getLoginUrl: function(e) { - e = e || {}; - var i = new t(window.location.href); - i.setQuery({ - via_twitter_login: !0 - }); - var s = new t("https://twitter.com/login"); - return s.setQuery({ - hide_message: !0, - redirect_after_login: i.href() - }), - e.usernameOrEmail && s.setQuery({ - username_or_email: e.usernameOrEmail - }), - s.href() - }, - getLogoutUrl: function() { - var e = new t(window.location.href) - , i = new t("https://twitter.com/logout"); - return i.setQuery({ - redirect_after_logout: e.href() - }), - i.href() - } - }; - return s - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, function(e, t, i) { - var s; - s = function(e) { - var t = i(99) - , s = { - prependRecipients: function(e) { - return e.messageRecipients.map(function(e) { - return t.atMentionify(e.screenName) - }).join(" ") + " " + e.tweetText - }, - appendText: function(e, t) { - return (t.tweetText && t.tweetText.trim()) + " " + e - }, - stripNamesFromText: function(e, t) { - return _.difference(e.split(" "), t).join(" ").trim() - }, - stripRepliesFromMentions: function(e, t) { - return e.filter(function(e) { - return t.map(function(e) { - return e.toLowerCase() - }).indexOf(e.toLowerCase()) < 0 - }) - }, - getSelectionIndices: function(e, t, i) { - if (0 === i.length) - return 0 === t.length ? [] : [t[0].length + 1, t[0].length + 1]; - var s = i.map(e.indexOf.bind(e)).reduce(function(e, t) { - return Math.min(e, t) - }) - , n = i.map(function(t) { - return e.indexOf(t) + t.length + 1 - }).reduce(function(e, t) { - return Math.max(e, t) - }); - return [s, n] - }, - getStackedRepliesText: function(e, t, i) { - var n = s.stripNamesFromText(e, t.concat(i)); - return [].concat(t).concat(n.length ? n : []).concat(i).join(" ") + " " - } - }; - return s - } - .call(t, i, t, e), - !(void 0 !== s && (e.exports = s)) -} -, function(e, t, i) { - "use strict"; - function s(e) { - return e && e.__esModule ? e : { - "default": e - } - } - function n() { - this._initBackend() - } - var r = i(19) - , o = s(r) - , a = i(18) - , c = s(a) - , l = i(595) - , u = i(127) - , d = i(601) - , h = "twitterAccountID" - , m = "currentAuthType" - , p = "__hasAlreadyReloaded" - , f = "_session" - , g = "sessionMigratedToWeb" - , v = "accountsLastVerified" - , T = "__version__" - , w = "ScribeTransport" - , b = "guestID" - , y = [w] - , D = y.concat([T, "previousMultiUserAccount", m, b, w]) - , C = { - local: localStorage, - session: sessionStorage - }; - n.PERSISTENT_SESSION_ITEMS = [h, "_session", "__hasAlreadyReloaded"], - n._testStore = function(e, t) { - u.stateLog("_testStore()"); - for (var i = !1, s = !1, r = "__test__", o = "test", a = 1024; o.length < a; ) - o += o; - try { - e.setItem(r, o), - i = e.getItem(r) === o, - e.removeItem(r) - } catch (c) { - i = !1, - s = c.code === window.DOMException.QUOTA_EXCEEDED_ERR, - s && 0 === e.length && TD.sync.util.warn(c, "In Safari private browsing mode") - } - if (t && s) - try { - n.flushDataFromStore(e), - i = n._testStore(e, !1) - } catch (c) { - i = !1 - } - return i - } - , - n.flushDataFromStore = function(e, t) { - t = (t || []).concat(D), - n.wipe(e, t) - } - , - n.flushBackend = function(e, t) { - return n.flushDataFromStore(C[e], t) - } - , - n.wipeAll = function() { - [localStorage, sessionStorage].forEach(n.wipe) - } - , - n.wipe = function(e, t) { - var i = {}; - t = _.uniq((t || []).concat(y)), - t.forEach(function(t) { - var s = e.getItem(t); - s && (i[t] = s) - }); - try { - e.clear() - } catch (s) { - console.warn("Clearing", e, "failed:", s) - } - _.each(i, function(t, i) { - e.setItem(i, t) - }) - } - , - n.shouldTryReload = function() { - var e; - try { - e = !!sessionStorage.getItem(p), - sessionStorage.setItem(p, !0) - } catch (t) { - e = !0 - } - return !e - } - , - n.removeReloadedFlag = function() { - sessionStorage.removeItem(p) - } - , - n.flushWebstorage = function(e) { - TD.sync.util.trace("clearing web storage"); - try { - (0, - c.default)(C).forEach(function(t) { - n.flushDataFromStore(C[t], e) - }) - } catch (t) { - console.error("Unable to clear webstorage.", t) - } - } - , - n.clearOtherBackends = function(e) { - (0, - c.default)(C).forEach(function(t) { - t !== e && n.wipe(C[t]) - }) - } - , - n.prototype.storeLoginResult = function(e) { - var t = e.account.uid - , i = this.getTwitterLoginAccountID(); - i && t !== i && n.flushWebstorage(), - this.setTwitterLoginAccountID(t) - } - , - n.prototype._initBackend = function() { - this._backendType = "unknown", - n._testStore(window.localStorage, !0) ? (this._migrateBackend(window.localStorage), - this._backend = window.localStorage, - this._backendType = "local") : n._testStore(window.sessionStorage, !0) ? (this._migrateBackend(window.sessionStorage), - this._backend = window.sessionStorage, - this._backendType = "session") : (u.stateLog("store._initBackend(): Falling back to MemoryStorage."), - this._backend = new l, - this._backendType = "memory"), - this._tryUpgrade(), - n.clearOtherBackends(this._backendType) - } - , - n.prototype._migrateBackend = function(e, t) { - if (t = t || this._getPersistentBackend(), - t !== e) - for (var i in t) - if (t.hasOwnProperty(i)) { - try { - e.setItem(i, t.getItem(i)) - } catch (s) { - if (s.code === window.DOMException.QUOTA_EXCEEDED_ERR) - return void TD.sync.util.warn("Migration failed due to quota limits.", s); - throw s - } - t.removeItem(i) - } - } - , - n.prototype._getPersistentBackend = function() { - return this._backend instanceof l ? localStorage : this._backend - } - , - n.prototype._tryUpgrade = function() { - try { - d.doUpgrade(this) - } catch (e) { - TD.sync.util.warn("Error during store upgrade:", e), - n.flushWebstorage() - } - } - , - n.prototype.getTwitterLoginAccountID = function() { - var e = this._backend.getItem(h); - return e ? e : void u.stateLog("store.getTwitterLoginAccountID(): account invalid", e) - } - , - n.prototype.setTwitterLoginAccountID = function(e) { - this._backend.setItem(h, e) - } - , - n.prototype.getTwitterLoginAccount = function() { - var e = this.getTwitterLoginAccountID() - , t = TD.storage.Account.generateKeyFor("twitter", e); - return TD.storage.accountController.get(t) - } - , - n.prototype.getOrCreateGuestID = function() { - var e = localStorage.getItem(b); - if (!e) { - e = this.createGuestID(); - try { - localStorage.setItem(b, e) - } catch (t) { - this._backend.setItem(b, e) - } - } - return e - } - , - n.prototype.createGuestID = function() { - return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(e) { - var t = 16 * Math.random() | 0 - , i = "x" == e ? t : 3 & t | 8; - return i.toString(16) - }) - } - , - n.prototype.getSessionMigratedToWeb = function() { - return this._getPersistentBackend().getItem(g) - } - , - n.prototype.setSessionMigratedToWeb = function() { - this._getPersistentBackend().setItem(g, !0) - } - , - n.prototype.removeSessionMigratedToWeb = function() { - this._getPersistentBackend().removeItem(g) - } - , - n.prototype._getLastVerifiedTimestamps = function() { - var e = {}; - try { - e = this.getJSON(v) - } catch (t) { - u.stateLog("_getLastVerifiedTimestamps(): failed", t) - } - return e - } - , - n.prototype.getLastVerifiedTimestamp = function(e) { - var t, i, s = this._getLastVerifiedTimestamps(); - return t = s[e.getKey()] || 0, - i = e.getUpdated() || 0, - Math.max(t, i) - } - , - n.prototype.setLastVerifiedTimestamp = function(e) { - var t = this._getLastVerifiedTimestamps() - , i = t[e.getKey()] || 0 - , s = e.getUpdated() || 0 - , n = Math.max(i, s); - n !== i && (t[e.getKey()] = n, - this.setJSON(v, t)) - } - , - n.prototype.removeLastVerifiedTimestamp = function(e) { - var t = this._getLastVerifiedTimestamps(); - delete t[e.getKey()], - this.setJSON(v, t) - } - , - n.prototype.setLastVersionRefreshTimestamp = function(e) { - this._getPersistentBackend().setItem("lastVersionRefreshTimestamp", "" + e) - } - , - n.prototype.getLastVersionRefreshTimestamp = function(e) { - var t = parseInt("" + this._getPersistentBackend().getItem("lastVersionRefreshTimestamp"), 10); - return "number" == typeof t && !isNaN(t) && t > 0 ? t : 0 - } - , - n.prototype.getSessionData = function() { - var e = { - uid: this._backend.getItem(h), - migrate: {}, - session: null - }; - if (e.uid) - try { - e.session = JSON.parse(this._backend.getItem(f)) - } catch (t) { - e.session = null - } - return e - } - , - n.prototype.setSessionData = function(e) { - this._backend.setItem(f, (0, - o.default)(e)) - } - , - n.prototype.getSessionMigrationData = function() { - var e = ["__version__", "previousMultiUserAccount", "currentAuthType", "guestID", "tweetdeckAccount", "_session", "accountsLastVerified"]; - return { - local: e.reduce(function(e, t) { - var i = localStorage.getItem(t); - return null !== i && (e[t] = i), - e - }, {}), - session: e.reduce(function(e, t) { - var i = sessionStorage.getItem(t); - return null !== i && (e[t] = i), - e - }, {}) - } - } - , - n.prototype.checkVersion = function() { - var e = d.CURRENT_VERSION - , t = this._backend.getItem(T); - if (null !== t && ~t !== ~e) - throw new Error("Wrong version number in store. (saved) %s != (given) %s",t,e) - } - , - n.prototype.setVersion = function(e) { - this._backend.setItem(T, e) - } - , - n.prototype.getJSON = function(e) { - return JSON.parse(this._backend.getItem(e) || "{}") - } - , - n.prototype.setJSON = function(e, t) { - this._backend.setItem(e, (0, - o.default)(t)) - } - , - n.prototype.setJSONCritical = function(e, t, i) { - try { - this._backend.setItem(e, (0, - o.default)(t)) - } catch (s) { - if (s.code !== window.DOMException.QUOTA_EXCEEDED_ERR || i) - throw s; - $(document).trigger("dataStorageFull"), - this.setJSONCritical(e, t, !0) - } - } - , - e.exports = { - Store: n, - MemoryStorage: l, - store: new n - } -} -, function(e, t) { - "use strict"; - var i = {}; - e.exports = i; - var s; - i.getMessage = function(e) { - if ("undefined" != typeof TD_locale_messages) { - var t = TD_locale_messages[e]; - return t && t.message ? t.message : void 0 - } - } - , - i.getLocale = function() { - return s ? s : (TD.util.isChromeApp() && (s = i.getMessage("@@ui_locale")), - s) - } -} -, function(e, t, i) { - var s = i(35); - e.exports = function(e, t) { - if ("number" != typeof e && "Number" != s(e)) - throw TypeError(t); - return +e - } -} -, function(e, t, i) { - "use strict"; - var s = i(16) - , n = i(60) - , r = i(15); - e.exports = [].copyWithin || function(e, t) { - var i = s(this) - , o = r(i.length) - , a = n(e, o) - , c = n(t, o) - , l = arguments.length > 2 ? arguments[2] : void 0 - , u = Math.min((void 0 === l ? o : n(l, o)) - c, o - a) - , d = 1; - for (a > c && c + u > a && (d = -1, - c += u - 1, - a += u - 1); u-- > 0; ) - c in i ? i[a] = i[c] : delete i[a], - a += d, - c += d; - return i - } -} -, function(e, t, i) { - var s = i(81); - e.exports = function(e, t) { - var i = []; - return s(e, !1, i.push, i, t), - i - } -} -, function(e, t, i) { - var s = i(34) - , n = i(16) - , r = i(82) - , o = i(15); - e.exports = function(e, t, i, a, c) { - s(t); - var l = n(e) - , u = r(l) - , d = o(l.length) - , h = c ? d - 1 : 0 - , m = c ? -1 : 1; - if (2 > i) - for (; ; ) { - if (h in u) { - a = u[h], - h += m; - break - } - if (h += m, - c ? 0 > h : h >= d) - throw TypeError("Reduce of empty array with no initial value") - } - for (; c ? h >= 0 : d > h; h += m) - h in u && (a = t(a, u[h], h, l)); - return a - } -} -, function(e, t, i) { - "use strict"; - var s = i(34) - , n = i(10) - , r = i(104) - , o = [].slice - , a = {} - , c = function(e, t, i) { - if (!(t in a)) { - for (var s = [], n = 0; t > n; n++) - s[n] = "a[" + n + "]"; - a[t] = Function("F,a", "return new F(" + s.join(",") + ")") - } - return a[t](e, i) - } - ; - e.exports = Function.bind || function(e) { - var t = s(this) - , i = o.call(arguments, 1) - , a = function() { - var s = i.concat(o.call(arguments)); - return this instanceof a ? c(t, s.length, s) : r(t, s, e) - } - ; - return n(t.prototype) && (a.prototype = t.prototype), - a - } -} -, function(e, t, i) { - "use strict"; - var s = i(14).f - , n = i(57) - , r = (i(23), - i(73)) - , o = i(46) - , a = i(54) - , c = i(36) - , l = i(81) - , u = i(139) - , d = i(205) - , h = i(74) - , m = i(13) - , p = i(51).fastKey - , f = m ? "_s" : "size" - , g = function(e, t) { - var i, s = p(t); - if ("F" !== s) - return e._i[s]; - for (i = e._f; i; i = i.n) - if (i.k == t) - return i - } - ; - e.exports = { - getConstructor: function(e, t, i, u) { - var d = e(function(e, s) { - a(e, d, t, "_i"), - e._i = n(null ), - e._f = void 0, - e._l = void 0, - e[f] = 0, - void 0 != s && l(s, i, e[u], e) - }); - return r(d.prototype, { - clear: function() { - for (var e = this, t = e._i, i = e._f; i; i = i.n) - i.r = !0, - i.p && (i.p = i.p.n = void 0), - delete t[i.i]; - e._f = e._l = void 0, - e[f] = 0 - }, - "delete": function(e) { - var t = this - , i = g(t, e); - if (i) { - var s = i.n - , n = i.p; - delete t._i[i.i], - i.r = !0, - n && (n.n = s), - s && (s.p = n), - t._f == i && (t._f = s), - t._l == i && (t._l = n), - t[f]-- - } - return !!i - }, - forEach: function(e) { - a(this, d, "forEach"); - for (var t, i = o(e, arguments.length > 1 ? arguments[1] : void 0, 3); t = t ? t.n : this._f; ) - for (i(t.v, t.k, this); t && t.r; ) - t = t.p - }, - has: function(e) { - return !!g(this, e) - } - }), - m && s(d.prototype, "size", { - get: function() { - return c(this[f]) - } - }), - d - }, - def: function(e, t, i) { - var s, n, r = g(e, t); - return r ? r.v = i : (e._l = r = { - i: n = p(t, !0), - k: t, - v: i, - p: s = e._l, - n: void 0, - r: !1 - }, - e._f || (e._f = r), - s && (s.n = r), - e[f]++, - "F" !== n && (e._i[n] = r)), - e - }, - getEntry: g, - setStrong: function(e, t, i) { - u(e, t, function(e, t) { - this._t = e, - this._k = t, - this._l = void 0 - }, function() { - for (var e = this, t = e._k, i = e._l; i && i.r; ) - i = i.p; - return e._t && (e._l = i = i ? i.n : e._t._f) ? "keys" == t ? d(0, i.k) : "values" == t ? d(0, i.v) : d(0, [i.k, i.v]) : (e._t = void 0, - d(1)) - }, i ? "entries" : "values", !i, !0), - h(t) - } - } -} -, function(e, t, i) { - var s = i(72) - , n = i(197); - e.exports = function(e) { - return function() { - if (s(this) != e) - throw TypeError(e + "#toJSON isn't generic"); - return n(this) - } - } -} -, function(e, t, i) { - "use strict"; - var s = i(73) - , n = i(51).getWeak - , r = i(3) - , o = i(10) - , a = i(54) - , c = i(81) - , l = i(39) - , u = i(17) - , d = l(5) - , h = l(6) - , m = 0 - , p = function(e) { - return e._l || (e._l = new f) - } - , f = function() { - this.a = [] - } - , g = function(e, t) { - return d(e.a, function(e) { - return e[0] === t - }) - } - ; - f.prototype = { - get: function(e) { - var t = g(this, e); - return t ? t[1] : void 0 - }, - has: function(e) { - return !!g(this, e) - }, - set: function(e, t) { - var i = g(this, e); - i ? i[1] = t : this.a.push([e, t]) - }, - "delete": function(e) { - var t = h(this.a, function(t) { - return t[0] === e - }); - return ~t && this.a.splice(t, 1), - !!~t - } - }, - e.exports = { - getConstructor: function(e, t, i, r) { - var l = e(function(e, s) { - a(e, l, t, "_i"), - e._i = m++, - e._l = void 0, - void 0 != s && c(s, i, e[r], e) - }); - return s(l.prototype, { - "delete": function(e) { - if (!o(e)) - return !1; - var t = n(e); - return t === !0 ? p(this).delete(e) : t && u(t, this._i) && delete t[this._i] - }, - has: function(e) { - if (!o(e)) - return !1; - var t = n(e); - return t === !0 ? p(this).has(e) : t && u(t, this._i) - } - }), - l - }, - def: function(e, t, i) { - var s = n(r(t), !0); - return s === !0 ? p(e).set(t, i) : s[e._i] = i, - e - }, - ufstore: p - } -} -, [887, 13, 5, 130], [891, 3], function(e, t) { - e.exports = function(e, t) { - return { - value: t, - done: !!e - } - } -} -, function(e, t) { - e.exports = Math.log1p || function(e) { - return (e = +e) > -1e-8 && 1e-8 > e ? e - e * e / 2 : Math.log(1 + e) - } -} -, [897, 6, 148, 35], function(e, t, i) { - "use strict"; - var s = i(59) - , n = i(108) - , r = i(83) - , o = i(16) - , a = i(82) - , c = Object.assign; - e.exports = !c || i(5)(function() { - var e = {} - , t = {} - , i = Symbol() - , s = "abcdefghijklmnopqrst"; - return e[i] = 7, - s.split("").forEach(function(e) { - t[e] = e - }), - 7 != c({}, e)[i] || Object.keys(c({}, t)).join("") != s - }) ? function(e, t) { - for (var i = o(e), c = arguments.length, l = 1, u = n.f, d = r.f; c > l; ) - for (var h, m = a(arguments[l++]), p = u ? s(m).concat(u(m)) : s(m), f = p.length, g = 0; f > g; ) - d.call(m, h = p[g++]) && (i[h] = m[h]); - return i - } - : c -} -, [900, 14, 3, 59, 13], [902, 26, 58], [905, 17, 26, 100, 142], function(e, t, i) { - var s = i(59) - , n = i(26) - , r = i(83).f; - e.exports = function(e) { - return function(t) { - for (var i, o = n(t), a = s(o), c = a.length, l = 0, u = []; c > l; ) - r.call(o, i = a[l++]) && u.push(e ? [i, o[i]] : o[i]); - return u - } - } -} -, function(e, t, i) { - var s = i(58) - , n = i(108) - , r = i(3) - , o = i(6).Reflect; - e.exports = o && o.ownKeys || function(e) { - var t = s.f(r(e)) - , i = n.f; - return i ? t.concat(i(e)) : t - } -} -, function(e, t, i) { - var s = i(6).parseFloat - , n = i(76).trim; - e.exports = 1 / s(i(147) + "-0") !== -(1 / 0) ? function(e) { - var t = n(String(e), 3) - , i = s(t); - return 0 === i && "-" == t.charAt(0) ? -0 : i - } - : s -} -, function(e, t, i) { - var s = i(6).parseInt - , n = i(76).trim - , r = i(147) - , o = /^[\-+]?0[xX]/; - e.exports = 8 !== s(r + "08") || 22 !== s(r + "0x16") ? function(e, t) { - var i = n(String(e), 3); - return s(i, t >>> 0 || (o.test(i) ? 16 : 10)) - } - : s -} -, function(e, t) { - e.exports = Object.is || function(e, t) { - return e === t ? 0 !== e || 1 / e === 1 / t : e != e && t != t - } -} -, function(e, t, i) { - var s = i(15) - , n = i(146) - , r = i(36); - e.exports = function(e, t, i, o) { - var a = String(r(e)) - , c = a.length - , l = void 0 === i ? " " : String(i) - , u = s(t); - if (c >= u || "" == l) - return a; - var d = u - c - , h = n.call(l, Math.ceil(d / l.length)); - return h.length > d && (h = h.slice(0, d)), - o ? h + a : a + h - } -} -, [921, 12], function(e, t, i) { - "use strict"; - var s = i(200); - e.exports = i(101)("Map", function(e) { - return function() { - return e(this, arguments.length > 0 ? arguments[0] : void 0) - } - }, { - get: function(e) { - var t = s.getEntry(this, e); - return t && t.v - }, - set: function(e, t) { - return s.def(this, 0 === e ? 0 : e, t) - } - }, s, !0) -} -, function(e, t, i) { - i(13) && "g" != /./g.flags && i(14).f(RegExp.prototype, "flags", { - configurable: !0, - get: i(103) - }) -} -, function(e, t, i) { - "use strict"; - var s = i(200); - e.exports = i(101)("Set", function(e) { - return function() { - return e(this, arguments.length > 0 ? arguments[0] : void 0) - } - }, { - add: function(e) { - return s.def(this, e = 0 === e ? 0 : e, e) - } - }, s) -} -, function(e, t, i) { - "use strict"; - var s, n = i(39)(0), r = i(24), o = i(51), a = i(208), c = i(202), l = i(10), u = (i(17), - o.getWeak), d = Object.isExtensible, h = c.ufstore, m = {}, p = function(e) { - return function() { - return e(this, arguments.length > 0 ? arguments[0] : void 0) - } - } - , f = { - get: function(e) { - if (l(e)) { - var t = u(e); - return t === !0 ? h(this).get(e) : t ? t[this._i] : void 0 - } - }, - set: function(e, t) { - return c.def(this, e, t) - } - }, g = e.exports = i(101)("WeakMap", p, f, c, !0, !0); - 7 != (new g).set((Object.freeze || Object)(m), 7).get(m) && (s = c.getConstructor(p), - a(s.prototype, f), - o.NEED = !0, - n(["delete", "has", "get", "set"], function(e) { - var t = g.prototype - , i = t[e]; - r(t, e, function(t, n) { - if (l(t) && !d(t)) { - this._f || (this._f = new s); - var r = this._f[e](t, n); - return "set" == e ? this : r - } - return i.call(this, t, n) - }) - })) -} -, [879, 84, 27], [886, 33], [887, 62, 86, 155], [893, 114, 113, 232, 64, 63, 87, 818, 116, 826, 27], [898, 49, 824, 156, 158, 155, 224], [901, 157, 115, 66, 161, 63, 225, 62], [903, 231, 156], 108, [905, 63, 66, 810, 158], function(e, t, i) { - e.exports = i(64) -} -, [914, 85, 813, 224, 155, 33, 84], [917, 160], [918, 154], function(e, t) {} -, [927, 832, 226], function(e, t, i) { - i(835); - for (var s = i(33), n = i(64), r = i(87), o = i(27)("toStringTag"), a = ["NodeList", "DOMTokenList", "MediaList", "StyleSheetList", "CSSRuleList"], c = 0; 5 > c; c++) { - var l = a[c] - , u = s[l] - , d = u && u.prototype; - d && !d[o] && n(d, o, l), - r[l] = r.Array - } -} -, , , , , , , , , , , , , , , , , , , , , function(e, t) { - e.exports["account_settings_account_summary.mustache"] = '', - e.exports["account_shared_warning.mustache"] = '{{< modal}} {{$modal_class}}mdl-account-shared-warning{{/modal_class}} {{$content}}

    {{_i}}Before you add another account, remember that anyone with the password for @{{signinAccount}} will have full access to any Twitter accounts you connect here, even if you keep the passwords for those connected accounts secret.{{/i}}


    {{_i}}Take extra care not to share your password for @{{signinAccount}}. If you think you’ve shared it already, please change it now.{{/i}}

    {{/content}} {{$footer_content}}
    {{/footer_content}} {{/modal}}', - e.exports["account_summary.mustache"] = '', - e.exports["account_summary_inline.mustache"] = '{{screenName}}\'s avatar @{{screenName}}', - e.exports["actions/action_dialog.mustache"] = '
    {{^isProtected}} {{/isProtected}}
    ', - e.exports["actions/action_header.mustache"] = '

     

    ', - e.exports["actions/add_to_customtimeline_dialog.mustache"] = '
      {{#myCustomTimelines}}
    • {{/myCustomTimelines}}
    ', - e.exports["actions/add_to_list_dialog.mustache"] = '
      {{#myLists}}
    • {{/myLists}}
    + {{_i}}Create new list{{/i}}
    ', - e.exports["actions/add_to_list_footer.mustache"] = '', - e.exports["actions/follow_from.mustache"] = '
    {{^hideFromAccountName}} {{/hideFromAccountName}}
    ', - e.exports["add_column_search_input.mustache"] = '
    {{> search_input}}
    ', - e.exports["app_container.mustache"] = '
    {{>drawer}}
    ', - e.exports["app_links.mustache"] = '{{_i}}Terms of Service{{/i}} · {{_i}}Privacy Policy{{/i}} · {{_i}}Cookies{{/i}} · {{version}} ', - e.exports["buttons/favorite.mustache"] = '', - e.exports["buttons/load_more.mustache"] = '', - e.exports["cards/card_attribution.mustache"] = '{{#site}}

    {{/site}}', - e.exports["cards/card_layouts.mustache"] = "{{> cards/card_summary}} {{> cards/card_photo}} {{> cards/card_player}}", - e.exports["cards/card_photo.mustache"] = '{{#photos}}
    {{> cards/large_image}} {{> cards/header_text}} {{> cards/paragraph_text}} {{> cards/card_attribution}} {{> status/media_sensitive}}
    {{/photos}}', - e.exports["cards/card_player.mustache"] = '{{#players}}
    {{> cards/media_player}} {{> cards/header_text}} {{> cards/paragraph_text}} {{> cards/card_attribution}} {{> status/media_sensitive}}
    {{/players}}', - e.exports["cards/card_summary.mustache"] = '{{#summaries}}
    {{> cards/header_text}} {{> cards/paragraph_text_with_image}} {{> cards/card_attribution}}
    {{/summaries}}', - e.exports["cards/header_text.mustache"] = '

    {{title}}

    {{#author}}

    By

    {{/author}}', - e.exports["cards/large_image.mustache"] = '{{#images}} {{#mobile}} Story image {{/mobile}} {{/images}}', - e.exports["cards/media_player.mustache"] = '{{#players}}
    {{/content}} {{/modal}}', - e.exports["favorite_from_options.mustache"] = '{{< modal}} {{$modal_class}}mdl-favorite-from-options s-fluid s-wide{{/modal_class}} {{$content}} {{#accounts}}
    from @{{getUsername}}
    {{/accounts}} {{/content}} {{$footer_content}} {{/footer_content}} {{/modal}}', - e.exports["follow_button.mustache"] = '
    {{#showAccountMenu}} {{> user_actions_btn_inv}} {{/showAccountMenu}}
    ', - e.exports["follow_from_options.mustache"] = '{{< modal}} {{$modal_class}}mdl-favorite-from-options s-fluid s-wide{{/modal_class}} {{$content}} {{/content}} {{$footer_content}} {{/footer_content}} {{/modal}}', - e.exports["item_box.mustache"] = '
    {{$content}}{{/content}}
    ', - e.exports["keyboard_shortcut_list.mustache"] = '{{< modal}} {{$modal_class}}s-nonav keyboard-shortcut-list-modal{{/modal_class}} {{$content}}
    Actions
    R Reply
    T Retweet
    F {{#decider.hearts_and_likes2}} {{_i}}Like{{/i}}{{/decider.hearts_and_likes2}} {{^decider.hearts_and_likes2}} {{_i}}Favorite{{/i}}{{/decider.hearts_and_likes2}}
    N New Tweet
    D Direct message
    P View user profile
    {{#isMac}}Return{{/isMac}}{{^isMac}}Enter{{/isMac}} View Tweet Details
    Backspace Close Tweet Details
    {{#isMac}}Cmd ⌘{{/isMac}}{{^isMac}}Ctrl{{/isMac}} + {{#isMac}}Return{{/isMac}}{{^isMac}}Enter{{/isMac}} Send Tweet
    A Add Column
    Navigation
    ? This menu
    Right
    Left
    Down
    Up
    19 Column 1-9
    0 Final column
    X Expand/Collapse navigation
    S Search
    {{/content}} {{/modal}}', - e.exports["large_modal.mustache"] = '
    {{> modal_header}}
    ', - e.exports["list_module_account_item.mustache"] = '
  • ', - e.exports["list_module_dataminr_watchlist.mustache"] = '
  • {{name}}

    {{description}}

  • ', - e.exports["list_module_list_item.mustache"] = '
  • {{title}}
  • ', - e.exports["list_module_subtitle_item.mustache"] = '
  • {{title}}{{subtitle}}
  • ', - e.exports["list_module_trend_header.mustache"] = '
    ', - e.exports["list_module_trends.mustache"] = '
    {{^withLocationSelector}}

    {{_i}}Worldwide{{/i}}

    {{/withLocationSelector}} {{> list_module_trend_header}}
      ', - e.exports["list_module_twitter_customtimeline_item.mustache"] = '
    • {{title}}

      {{description}}

    • ', - e.exports["list_module_twitter_list_item.mustache"] = '
    • {{#isPrivate}}{{/isPrivate}} {{title}} {{by}}

      {{description}}

      {{subtitle}} avatar
    • ', - e.exports["list_option_dropdown.mustache"] = ' {{choice}} ', - e.exports["list_trend_item.mustache"] = '
    • {{name}}
    • ', - e.exports["list_trend_promoted_item.mustache"] = '
    • ', - e.exports["lists/edit_footer.mustache"] = ' ', - e.exports["lists/edit_form.mustache"] = '
      {{_i}}List Details{{/i}}
      ', - e.exports["lists/edit_members_footer.mustache"] = ' ', - e.exports["lists/member.mustache"] = '
    • @{{username}}
      {{fullname}} @{{username}} {{#isProtected}}{{/isProtected}}{{#isVerified}}{{/isVerified}}

      {{description}}

    • ', - e.exports["lists/member_list.mustache"] = '

      {{_i}}Members{{/i}} ()

        ', - e.exports["login/2fa_verification.mustache"] = '

        {{_i}}Check your Twitter mobile app{{/i}}

        {{_i}}When you receive a login verification request, accept it by tapping the checkmark button on your phone.{{/i}}

        {{_i}}Didn’t receive a notification?
        You can check your login requests manually in the Twitter mobile app, under Me → Settings → Choose Account → Security → Login requests{{/i}}

        Need help? Please contact Twitter Support.

        ', - e.exports["login/2fa_verification_code.mustache"] = '

        {{_i}}We’ve texted a verification code to your phone{{/i}}

        {{_i}}Enter the verification code in the box below.{{/i}}

        {{_i}}Cancel{{/i}}

        Need help? Please contact Twitter Support.

        ', - e.exports["login/locked_account_warning.mustache"] = '

        {{_i}}You can no longer log in to TweetDeck with {{email}}. Please log in with {{#screenName}}the @{{>text/open_strong}}{{screenName}}{{>text/close_strong}}{{/screenName}}{{^screenName}}a{{/screenName}} Twitter username instead.{{/i}} {{_i}}Why the change?{{/i}}

        ', - e.exports["login/login_form.mustache"] = ' ', - e.exports["login/login_form_footer.mustache"] = '
        {{#withForgotPassword}} {{/withForgotPassword}}
        ', - e.exports["login/login_form_message.mustache"] = ' ', - e.exports["login/promo_for_login_form.mustache"] = '
        Tweet like a pro.

        {{_i}}The most powerful Twitter tool for real-time tracking, organizing, and engagement. Reach your audiences and discover the best of Twitter.{{/i}}

        ', - e.exports["login/twitter_account_add_account_form.mustache"] = '', - e.exports["login/twitter_account_login_form.mustache"] = '', - e.exports["media/animated_gif.mustache"] = '', - e.exports["media/media_gallery.mustache"] = '', - e.exports["media/native_video.mustache"] = '
        {{> status/media_sensitive}}
        ', - e.exports["media/video_overlay.mustache"] = '
        ', - e.exports["media/vine.mustache"] = '', - e.exports["media/youtube.mustache"] = '', - e.exports["menus/accordion_header.mustache"] = '', - e.exports["menus/actions.mustache"] = '', - e.exports["menus/actions_directmessage.mustache"] = '', - e.exports["menus/column_nav_menu.mustache"] = '', - e.exports["menus/column_share.mustache"] = '', - e.exports["menus/dm_conversations_menu.mustache"] = '', - e.exports["menus/dropdown.mustache"] = '', - e.exports["menus/flagged_media.mustache"] = "", - e.exports["menus/follow_menuitem.mustache"] = '{{#isSingleAccount}} {{^isMe}} {{#following}}
      • {{_i}}Unfollow @{{screenName}}{{/i}}
      • {{/following}} {{^following}}
      • {{_i}}Follow @{{screenName}}{{/i}}
      • {{/following}} {{/isMe}} {{/isSingleAccount}} {{^isSingleAccount}}
      • {{_i}}Follow from accounts…{{/i}}
      • {{/isSingleAccount}}', - e.exports["menus/search_accordion.mustache"] = '{{#action}}
        {{>menus/accordion_header}}
        {{/action}} {{#content}}
        {{>menus/accordion_header}}
        {{/content}} {{#location}}
        {{>menus/accordion_header}}
        {{/location}} {{#user}}
        {{>menus/accordion_header}}
        {{/user}} {{#engagement}}
        {{>menus/accordion_header}}
        {{/engagement}}', - e.exports["menus/search_action_form.mustache"] = '
        {{^isInActivityColumn}}
        {{#withQuotedTweets}}
        {{/withQuotedTweets}}
        {{/isInActivityColumn}}
        {{^isInActivityColumn}} {{#withActionsOnRetweets}}
        {{/withActionsOnRetweets}} {{/isInActivityColumn}}
        {{_i}}Please select at least one interaction type{{/i}}
        ', - e.exports["menus/search_content_form.mustache"] = '
        {{#withContentType}}
        {{/withContentType}} {{#withMatching}}
        {{>search_input}}
        {{/withMatching}} {{#withExcluding}}
        {{>search_input}}
        {{/withExcluding}} {{#withLanguage}}
        {{/withLanguage}} {{#withRetweetsToggle}}
        {{/withRetweetsToggle}}
        ', - e.exports["menus/search_engagement_form.mustache"] = '
        ', - e.exports["menus/search_location_form.mustache"] = '
        ', - e.exports["menus/search_user_form.mustache"] = '
        {{#tweetsFromUser}} {{>search_input}} {{/tweetsFromUser}} {{#tweetsFromList}} {{>search_input}} {{/tweetsFromList}}
        {{#mentioningUser}} {{>search_input}} {{/mentioningUser}}
        ', - e.exports["menus/toggle_button.mustache"] = '
        {{#buttons}} {{/buttons}}
        ', - e.exports["menus/topbar_menu.mustache"] = '', - e.exports["menus/user_results.mustache"] = '
        {{#users}} {{ account_summary }} {{/content}} {{/stream_item}} {{/users}}
        ', - e.exports["modal.mustache"] = '
        {{#loading}} {{_i}}Loading…{{/i}} {{/loading}} {{^loading}} {{> modal_header}}
        {{$content}}default content{{/content}}
        {{$footer_content}}{{/footer_content}}
        {{/loading}}
        ', - e.exports["modal/modal_context.mustache"] = '
        {{#withHeader}} {{> modal/modal_context_header}} {{/withHeader}} {{#withDragHandle}} {{/withDragHandle}} {{#withDismissButton}} {{/withDismissButton}} {{#withFooter}} {{> modal/modal_context_footer}} {{/withFooter}}
        ', - e.exports["modal/modal_context_footer.mustache"] = '
        {{#withDoneButton}} {{/withDoneButton}}
        ', - e.exports["modal/modal_context_header.mustache"] = '
        {{#title}}

        {{title}}

        {{/title}}
        ', - e.exports["modal_header.mustache"] = '

        ', - e.exports["open_column_footer.mustache"] = ' ', - e.exports["open_column_home.mustache"] = '', - e.exports["open_column_list_group.mustache"] = '{{#title}}

        {{title}}

        {{/title}}
          ', - e.exports["open_column_list_multi_group.mustache"] = '
          {{#groups}} {{>open_column_list_group}} {{/groups}}
          ', - e.exports["open_column_list_with_header.mustache"] = '
          {{>open_column_list_group}}
          ', - e.exports["open_column_modal.mustache"] = '
          {{> modal_header}}
          ', - e.exports["open_column_shared_help.mustache"] = '
          Someone shared a column with you. You can add a copy of this column to your TweetDeck.
          ', - e.exports["open_column_temp_help.mustache"] = '

          {{helpText}}

          ', - e.exports["open_split_menu.mustache"] = '
          ', - e.exports["overlay.mustache"] = '', - e.exports["participants_tooltip.mustache"] = '
          {{#title}}{{{title}}}{{/title}} {{#participants}}

          {{name}} @{{screenName}}

          {{/participants}}
          ', - e.exports["popover.mustache"] = '', - e.exports["profile/profile_full.mustache"] = '
          {{>follow_button}}

          {{{bio}}}

          {{#location}}

           {{location}}

          {{/location}} {{#getDisplayURL}}

           {{getDisplayURL}}

           {{_i}}Joined{{/i}} {{prettyJoinedDate}}

          {{/getDisplayURL}}

           

          ', - e.exports["profile_card_bio.mustache"] = '

          {{{bio}}}

          ', - e.exports["profile_card_stats.mustache"] = '', - e.exports["report_flow.mustache"] = '', - e.exports["report_message_options.mustache"] = '{{^showResult}}

          {{_i}}Taking action here will permanently delete this message from @{{screenName}}.{{/i}}

          • {{_i}}Report spam{{/i}}
          • {{_i}}Mark as abusive{{/i}}
            • {{/showResult}} {{#showResult}}

              {{_i}}This message has been deleted.{{/i}}

              {{_i}}Read more information about how to handle abusive users.{{/i}} {{/showResult}}', - e.exports["report_tweet_options.mustache"] = '
              {{_i}}Report Tweet options{{/i}}
              ', - e.exports["report_tweet_options_abusive.mustache"] = '

              {{_i}}Please choose the topic that best defines your issue. Once you complete and the submit the form your report will be filed with Twitter.{{/i}}

              ', - e.exports["search/search_in_popover.mustache"] = ' {{>typeahead/typeahead_dropdown}} {{>search/search_results}}', - e.exports["search/search_results.mustache"] = '', - e.exports["search/search_results_footer.mustache"] = '', - e.exports["search/search_results_header.mustache"] = '
              ', - e.exports["search_input.mustache"] = '', - e.exports["search_no_tweets_placeholder.mustache"] = '
              {{#isDropTarget}}

              {{_i}}Drag Tweets into this collection{{/i}}

              {{/isDropTarget}} {{^isDropTarget}}

              {{_i}}No recent Tweets.{{/i}}
              {{_i}}New Tweets will appear here.{{/i}}

              {{/isDropTarget}}
              {{#withAddByUrl}}

              {{_i}}Or add by URL{{/i}}

              {{/withAddByUrl}}
              ', - e.exports["search_no_users_placeholder.mustache"] = '

              {{_i}}No users found.{{/i}}

              ', - e.exports["settings/account_settings.mustache"] = '

              {{_i}}Manage team{{/i}}

              ', - e.exports["settings/account_settings_add_account.mustache"] = '{{^decider.add_account_via_xauth_2}} {{/decider.add_account_via_xauth_2}} {{#decider.add_account_via_xauth_2}} {{> login/twitter_account_add_account_form }} {{/decider.add_account_via_xauth_2}}', - e.exports["settings/account_settings_detail.mustache"] = '
              {{^isInvited}}
              {{/isInvited}} {{^isInvited}}{{#withManageTeam}}

              {{_i}}Team @{{screenName}}{{/i}}

              {{_i}}You\'re on the team! Only admins of this account can manage the team.{{/i}} {{_i}}Learn more{{/i}}.

              {{/withManageTeam}}{{/isInvited}} {{^isInvited}} {{/isInvited}} {{^isInvited}} {{#isDefault}}
              {{_i}}Default account{{/i}}
              {{/isDefault}} {{^isDefault}} {{/isDefault}} {{/isInvited}}
              {{^isInvited}} {{/isInvited}} {{#isInvited}} {{/isInvited}}', - e.exports["settings/account_settings_invited_row.mustache"] = '', - e.exports["settings/account_settings_row.mustache"] = '', - e.exports["settings/global_setting_filter.mustache"] = '{{#decider.mute_native}}

              {{_i}}User mutes now work across TweetDeck & Twitter. To review your list of user mutes visit twitter.com/settings/muted.{{/i}}

              {{/decider.mute_native}}
              {{_i}}Mute Settings{{/i}}
                ', - e.exports["settings/global_setting_filter_row.mustache"] = '
              • {{_i}}Muting {{getDisplayType}} {{>text/global_filter_value}}{{/i}}
              • ', - e.exports["settings/global_setting_general.mustache"] = '
                {{_i}}General Settings{{/i}}
                ', - e.exports["settings/global_setting_services.mustache"] = '
                {{_i}}Services Settings{{/i}}
                ', - e.exports["settings/global_settings_modal.mustache"] = '
                  {{#tabs}} {{> list_module_list_item}} {{/tabs}}
                ', - e.exports["short_modal.mustache"] = '
                {{> modal_header}}
                {{{content}}}
                {{#hasDoneButton}} {{/hasDoneButton}}
                ', - e.exports["spinner.mustache"] = '
                ', - e.exports["spinner_large.mustache"] = '
                ', - e.exports["spinner_large_white.mustache"] = '
                {{_i}}Loading…{{/i}}
                ', - e.exports["splash/whats_new.mustache"] = '
                {{_i}}TweetDeck logo{{/i}}

                {{_i}}Welcome to TweetDeck{{/i}}

                {{_i}}Create collections{{/i}}

                {{_i}}Create a custom Twitter experience{{/i}}

                {{_i}}Organize and build collections, keep track of lists, searches, activity and more. Click the + in the sidebar.{{/i}}

                {{_i}}Create filters{{/i}}

                {{_i}}Find exactly what you’re looking for{{/i}}

                {{_i}}Create searches to track topics, events and hashtags. Refine the results with filters at the top of each timeline.{{/i}}

                {{_i}}Multiple accounts{{/i}}

                {{_i}}Manage multiple accounts{{/i}}

                {{_i}}Tweet, monitor and follow new accounts from all — or just one of your accounts. Add another account in Accounts.{{/i}}

                ', - e.exports["startflow_wrapper.mustache"] = '
                {{$content}}{{/content}}

                {{> app_links}}

                ', - e.exports["status/conversation.mustache"] = '{{#chirp}} {{
                {{>status/conversation_timestamp}} {{#hasValidParticipant}}
                {{> status/conversation_header }}
                {{/hasValidParticipant}}

                {{#showSenderName}} {{#sender}} {{sender.name}}: {{/sender}} {{/showSenderName}} {{#htmlText}} {{{htmlText}}} {{/htmlText}} {{#previewText}} {{{previewText}}} {{/previewText}} {{#attachmentOnly}} Attachment: image {{/attachmentOnly}}

                {{#hasMedia}}
                {{#getMedia}}
                {{/getMedia}}
                {{/hasMedia}}
            {{/content}} {{/stream_item}} {{/chirp}}', - e.exports["status/conversation_failed_participants.mustache"] = '{{#chirp}} {{{{name}} {{/participant}} {{^isLastItem}}and{{/isLastItem}} {{/failedParticipants}} {{_i}}could not be added{{/i}} {{/content}} {{/stream_item}} {{/chirp}}', - e.exports["status/conversation_failed_participants_preview.mustache"] = ' {{_i}}Some users could not be added.{{/i}} ', - e.exports["status/conversation_header.mustache"] = '', - e.exports["status/conversation_join.mustache"] = '{{#chirp}} {{ {{#getParticipants}} {{#participant}} {{name}} {{screenName}} {{/participant}} {{#isEndOfRow}}
            {{/isEndOfRow}} {{/getParticipants}}

            {{_i}}There are{{/i}} {{numberOfParticipants}} {{_i}}other people{{/i}} {{_i}}in this group{{/i}}

            {{#sender}} {{name}} {{/sender}} {{_i}}added you{{/i}} {{/content}} {{/stream_item}} {{/chirp}}', - e.exports["status/conversation_join_preview.mustache"] = '{{#chirp}} {{sender.name}} {{_i}}added you{{/i}} {{/chirp}}', - e.exports["status/conversation_name_update.mustache"] = '{{#chirp}} {{{{sender.name}} {{/isOwnChirp}} {{#sanitizedConversationName}} {{_i}}changed the group name to{{/i}} {{{sanitizedConversationName}}} {{/sanitizedConversationName}} {{^sanitizedConversationName}} {{_i}}removed the group name{{/i}} {{/sanitizedConversationName}} {{/content}} {{/stream_item}} {{/chirp}}', - e.exports["status/conversation_name_update_preview.mustache"] = '{{#chirp}} {{#isOwnChirp}} {{_i}}You{{/i}} {{/isOwnChirp}} {{^isOwnChirp}} {{sender.name}} {{/isOwnChirp}} {{#sanitizedConversationName}} {{_i}}changed the group name to{{/i}} {{{sanitizedConversationName}}} {{/sanitizedConversationName}} {{^sanitizedConversationName}} {{_i}}removed the group name{{/i}} {{/sanitizedConversationName}} {{/chirp}}', - e.exports["status/conversation_participants_join.mustache"] = '{{#chirp}} {{{{name}} {{/sender}} {{/isOwnChirp}} {{_i}}added{{/i}} {{#addedParticipants}} {{name}} {{/addedParticipants}} {{/content}} {{/stream_item}} {{/chirp}}', - e.exports["status/conversation_participants_join_preview.mustache"] = '{{#chirp}} {{#isOwnChirp}} {{_i}}You added{{/i}} {{/isOwnChirp}} {{^isOwnChirp}} {{sender.name}} {{_i}}added{{/i}} {{/isOwnChirp}} {{^addedParticipants.1}} {{addedParticipants.0.name}} {{/addedParticipants.1}} {{#addedParticipants.1}} {{^addedParticipants.2}} {{addedParticipants.0.name}} {{_i}}&{{/i}} {{addedParticipants.1.name}} {{/addedParticipants.2}} {{#addedParticipants.2}} {{addedParticipants.0.name}} {{_i}}+{{/i}} {{numberOfOtherParticipants}} {{/addedParticipants.2}} {{/addedParticipants.1}} {{/chirp}}', - e.exports["status/conversation_participants_leave.mustache"] = '{{#chirp}} {{{{name}} {{/leftParticipants}} {{_i}}left{{/i}} {{/content}} {{/stream_item}} {{/chirp}}', - e.exports["status/conversation_participants_leave_preview.mustache"] = '{{#chirp}} {{$content}} {{#leftParticipants}} {{name}} {{/leftParticipants}} {{_i}}left{{/i}} {{/content}} {{/chirp}}', - e.exports["status/conversation_timestamp.mustache"] = '{{#created}} {{/created}}', - e.exports["status/dataminr.mustache"] = '{{#dataminr}} {{> status/dataminr_header}} {{/dataminr}}
            {{> status/tweet_single}} {{> status/media_large_preview }}
            {{#dataminr}} {{> status/dataminr_single_footer}} {{/dataminr}}', - e.exports["status/dataminr_footer.mustache"] = ' {{#eventLocation}}

            {{_i}}Event Location{{/i}}{{#eventLocation.name}}: {{eventLocation.name}}{{/eventLocation.name}}

            {{/eventLocation}}

            {{_i}}Event Keywords{{/i}}

            {{_i}}Original Source{{/i}}

            ', - e.exports["status/dataminr_header.mustache"] = '
            {{#publisherCategory.name}} {{publisherCategory.name}}{{publisherCategory.shortName}} {{/publisherCategory.name}} {{eventVolume}} {{#alertType}} {{name}} {{/alertType}} {{createdAt}}
            ', - e.exports["status/dataminr_in_stream.mustache"] = '{{#chirp}} {{ status/dataminr }} {{/content}} {{/stream_item}} {{/chirp}}', - e.exports["status/dataminr_single_footer.mustache"] = '
            {{#eventLocation}}
            {{#eventMapSmallImageURL}} {{/eventMapSmallImageURL}}
            {{#name}} {{/name}}
            {{/eventLocation}}
            {{#user}}
            {{_i}}Joined{{/i}} {{prettyJoinedDate}} {{_i}}Followers{{/i}} {{prettyFollowersCount}} 
            {{/user}}
            {{_i}}Open in Dataminr{{/i}}
            ', - e.exports["status/follow_activity.mustache"] = "{{#withActivityHeader}} {{> status/tweet_activity_header }} {{/withActivityHeader}} {{#getRelatedUser}} {{> account_summary }} {{/getRelatedUser}}", - e.exports["status/follow_activity_in_box.mustache"] = '{{#data}} {{ status/follow_activity }} {{/content}} {{/item_box}} {{/data}}', - e.exports["status/follow_activity_in_stream.mustache"] = '{{#data}} {{ status/follow_activity }} {{/content}} {{/stream_item}} {{/data}}', - e.exports["status/gap_in_stream.mustache"] = '{{ {{^showSize}}{{_i}}Show more{{/i}}{{/showSize}} {{#showSize}}{{size}}+ {{_i}}more{{/i}}{{/showSize}}
            {{/content}} {{/stream_item}}', - e.exports["status/list_activity.mustache"] = '{{#chirp}} {{ {{#sourceAvatar}}{{/sourceAvatar}}
            {{{htmlText}}}
            {{/content}} {{/stream_item}} {{/chirp}}', - e.exports["status/media_image_container.mustache"] = '
            ', - e.exports["status/media_large_preview.mustache"] = '{{#isMediaPreviewLarge}} {{#hasMedia}}
            {{#withMediaPreview}} {{#isMediaGridContent}}
            {{#getMedia}} {{> status/media_image_container}} {{/getMedia}}
            {{#isPossiblySensitive}} {{> status/media_sensitive}} {{/isPossiblySensitive}} {{/isMediaGridContent}} {{^isMediaGridContent}} {{#getMedia}} {{>status/media_thumb}} {{/getMedia}} {{/isMediaGridContent}} {{/withMediaPreview}}
            {{/hasMedia}} {{/isMediaPreviewLarge}}', - e.exports["status/media_preview.mustache"] = '{{#isMediaGridContent}}
            {{#getMedia}} {{> status/media_image_container}} {{/getMedia}}
            {{#isPossiblySensitive}} {{> status/media_sensitive}} {{/isPossiblySensitive}} {{/isMediaGridContent}} {{^isMediaGridContent}} {{#getMedia}} {{> status/media_thumb}} {{/getMedia}} {{/isMediaGridContent}}', - e.exports["status/media_sensitive.mustache"] = '{{#isPossiblySensitive}}
            {{_i}}The following media may contain sensitive material.{{/i}}

            {{_i}}Your Tweet media display settings are configured to inform you when media may be sensitive.{{/i}}

            {{_i}}View{{/i}} · {{_i}}Always show me sensitive media{{/i}}
            {{/isPossiblySensitive}}', - e.exports["status/media_thumb.mustache"] = '
            {{#isMediaPreviewLarge}}
            {{/isMediaPreviewLarge}} {{#isAnimatedGif}} {{#animatedGif}} {{> media/animated_gif}} {{/animatedGif}} {{/isAnimatedGif}} {{^isAnimatedGif}} {{#isVideo}} {{> media/video_overlay}} {{/isVideo}} {{#imageSrc}} Media preview {{/imageSrc}} {{/isAnimatedGif}} {{> status/media_sensitive}}
            ', - e.exports["status/media_unique_preview.mustache"] = '
            {{#getUniqueMedia}} {{{renderGridView}}} {{/getUniqueMedia}}
            ', - e.exports["status/message.mustache"] = '
            {{> status/message_timestamp}} {{#sender}} {{^isDeleted}} {{> status/tweet_single_header }} {{/isDeleted}} {{/sender}}

            {{{htmlText}}}

            {{#quotedTweet}} {{{ renderQuoted }}} {{/quotedTweet}} {{#quotedTweetMissing}} {{{ renderQuotedMissing }}} {{/quotedTweetMissing}} {{>status/tweet_media_wrapper}} {{#withFooter}} {{/withFooter}}
            ', - e.exports["status/message_in_box.mustache"] = '{{#message}} {{ status/message}} {{/content}} {{/item_box}} {{/message}}', - e.exports["status/message_in_stream.mustache"] = '{{#message}} {{status/message}} {{/content}} {{/stream_item}} {{/message}}', - e.exports["status/message_thread.mustache"] = '{{#chirp}} {{
            {{>status/message_timestamp}} {{#getMainUser}} {{> status/tweet_single_header }} {{/getMainUser}}

            {{#replied}} {{/replied}} {{{htmlText}}} {{#attachmentOnly}} Attachment: image {{/attachmentOnly}}

            {{#hasMedia}}
            {{#getMedia}}
            {{/getMedia}}
            {{/hasMedia}}
            {{/content}} {{/stream_item}} {{/chirp}}', - e.exports["status/message_timestamp.mustache"] = '{{#created}} {{/created}}', - e.exports["status/message_wrapper.mustache"] = '{{> column/column_header_detail}}
            {{> spinner_large}}
            ', - e.exports["status/poll.mustache"] = '
            {{#poll}} {{_i}}View poll{{/i}} {{#hasCount}} {{{prettyCount}}} {{#hasTimeLeft}}·{{/hasTimeLeft}} {{/hasCount}} {{#hasTimeLeft}} {{{prettyTimeLeft}}} {{/hasTimeLeft}} {{/poll}}
            ', - e.exports["status/quoted_tweet.mustache"] = '{{#tweet}}
            {{#user}} {{>status/tweet_single_header}} {{/user}}

            {{{htmlText}}}

            {{>status/tweet_media_wrapper}}
            {{#inCompose}} {{/inCompose}}
            {{/tweet}}', - e.exports["status/quoted_tweet_missing.mustache"] = '

            {{_i}}This quoted Tweet is unavailable{{/i}}

            ', - e.exports["status/scheduled_tweet.mustache"] = '{{#inStream}} {{ status/scheduled_tweet_single }}{{/content}} {{/stream_item}} {{/inStream}} {{#inBox}} {{ status/scheduled_tweet_single }}{{/content}} {{/item_box}} {{/inBox}}', - e.exports["status/scheduled_tweet_single.mustache"] = '{{#chirp}} {{#reasonText}}
            {{reasonText}}
            {{/reasonText}}
             
            {{_i}}Scheduled for:{{/i}} {{ prettyTime }}

            {{{htmlText}}}

            {{#hasMedia}}
            {{#getMedia}} {{>status/media_thumb}} {{/getMedia}}
            {{/hasMedia}}
            {{#updates}} {{user.username}}\'s avatar {{/updates}}
            {{/chirp}}', - e.exports["status/social_proof_for_tweet.mustache"] = '{{> column/column_header_detail}}
            {{#users}} {{account_summary}} {{/content}} {{/stream_item}} {{/users}} {{^users}} {{>column_loading_placeholder}} {{/users}}
            ', - e.exports["status/trend_item.mustache"] = '{{#trends}}{{#trend}}
          • {{{name}}} {{{description}}}
            {{{meta_description}}}
          • {{/trend}}{{/trends}}', - e.exports["status/truncation_affordance.mustache"] = '… {{_i}}More{{/i}}', - e.exports["status/tweet_activity.mustache"] = '{{#withActivityHeader}} {{> status/tweet_activity_header }} {{/withActivityHeader}} {{#getRelatedTweet}} {{#withContentMute}}{{/withContentMute}} {{> status/tweet_single}} {{#withContentMute}}{{/withContentMute}} {{/getRelatedTweet}}', - e.exports["status/tweet_activity_header.mustache"] = '
            {{#sourceAvatar}}{{/sourceAvatar}}
            {{{htmlText}}}
            ', - e.exports["status/tweet_activity_in_box.mustache"] = '{{#chirp}} {{ status/tweet_activity }} {{/content}} {{/item_box}} {{/chirp}}', - e.exports["status/tweet_activity_in_stream.mustache"] = '{{#chirp}} {{ status/tweet_activity }} {{> status/media_large_preview }} {{/content}} {{/stream_item}} {{/chirp}}', - e.exports["status/tweet_detail.mustache"] = '{{ {{#getMainUser}} {{> account_summary }} {{/getMainUser}}

            {{{htmlTextFull}}}

            {{#translation}}{{>status/tweet_translation}}{{/translation}} {{#isTranslatable}}{{^translation}}{{_i}}Translate Tweet{{/i}}{{/translation}}{{/isTranslatable}} {{>status/poll}} {{#getMainTweet}}
            {{#quotedTweet}} {{{ renderQuoted }}} {{/quotedTweet}} {{#quotedTweetMissing}} {{{ renderQuotedMissing }}} {{/quotedTweetMissing}}
            {{#hasLocationData}} {{/hasLocationData}}
            {{> status/tweet_detail_actions}}
            {{/getMainTweet}}
            {{_i}}Reply to{{/i}} {{mentions}}
            {{#dataminr}} {{/dataminr}} {{/chirp}} {{/content}} {{/stream_item}}', - e.exports["status/tweet_detail_actions.mustache"] = '', - e.exports["status/tweet_detail_inreplyto.mustache"] = '
            ', - e.exports["status/tweet_detail_media.mustache"] = '{{#hasMedia}} {{#isMediaGridContent}} {{^isPossiblySensitive}}
            {{> status/media_unique_preview}}
            {{/isPossiblySensitive}} {{#isPossiblySensitive}}
            {{#getFirstMedia}} {{{renderDetailView}}} {{/getFirstMedia}}
            {{/isPossiblySensitive}} {{/isMediaGridContent}} {{^isMediaGridContent}}
            {{#getUniqueMedia}} {{{renderDetailView}}} {{/getUniqueMedia}}
            {{/isMediaGridContent}} {{/hasMedia}}', - e.exports["status/tweet_detail_repliesto.mustache"] = '
            ', - e.exports["status/tweet_detail_replybar.mustache"] = '
            {{#avatarURL}} {{/avatarURL}}
            ', - e.exports["status/tweet_detail_socialstats.mustache"] = '{{#analytics}} {{/analytics}} {{#stats.length}} {{/stats.length}}', - e.exports["status/tweet_detail_wrapper.mustache"] = '{{> column/column_header_detail}}
            {{#withDataminr}}
            Dataminr header
            {{/withDataminr}}
            {{> spinner_large}}
            {{#withDataminr}}{{/withDataminr}}
            ', - e.exports["status/tweet_in_box.mustache"] = '{{#tweet}} {{ status/tweet_single }} {{/content}} {{/item_box}} {{/tweet}}', - e.exports["status/tweet_in_stream.mustache"] = '{{#tweet}} {{ status/tweet_single }} {{> status/media_large_preview }} {{/content}} {{/stream_item}} {{/tweet}}', - e.exports["status/tweet_media_wrapper.mustache"] = '{{#hasMedia}} {{^isMediaPreviewLarge}} {{#withMediaPreview}} {{#isMediaGridContent}}
            {{> status/media_preview}}
            {{/isMediaGridContent}} {{^isMediaGridContent}}
            {{> status/media_preview}}
            {{/isMediaGridContent}} {{/withMediaPreview}} {{/isMediaPreviewLarge}} {{/hasMedia}}', - e.exports["status/tweet_single.mustache"] = '
            {{#isRetweetedStatus}}
            {{#user}} {{name}}{{_i}} retweeted{{/i}} {{/user}}
            {{/isRetweetedStatus}}
            {{#getMainTweet}} {{>status/tweet_timestamp}} {{/getMainTweet}} {{#getMainUser}} {{>status/tweet_single_header}} {{/getMainUser}}

            {{{htmlText}}}

            {{#quotedTweet}} {{{ renderQuoted }}} {{/quotedTweet}} {{#quotedTweetMissing}} {{{ renderQuotedMissing }}} {{/quotedTweetMissing}} {{#translation}}{{>status/tweet_translation}}{{/translation}} {{>status/tweet_media_wrapper}} {{>status/tweet_single_footer}}
            ', - e.exports["status/tweet_single_actions.mustache"] = '', - e.exports["status/tweet_single_footer.mustache"] = '{{#withFooter}}
            {{#getMainTweet}} {{#inReplyToID}} {{_i}}View Conversation{{/i}} {{/inReplyToID}} {{/getMainTweet}} {{#withTweetActions}} {{> status/tweet_single_actions}} {{/withTweetActions}}
            {{/withFooter}}', - e.exports["status/tweet_single_header.mustache"] = '', - e.exports["status/tweet_timestamp.mustache"] = '{{#created}} {{/created}}', - e.exports["status/tweet_translation.mustache"] = '

            {{#localizedLanguageName}}{{_i}}Translated from {{localizedLanguageName}} by {{>text/bing_translator_link}}{{/i}}{{/localizedLanguageName}} {{^localizedLanguageName}}{{_i}}Translated by {{>text/bing_translator_link}}{{/i}}{{/localizedLanguageName}}

            {{#translation}}{{{htmltext}}}{{/translation}}

            ', - e.exports["stream_item.mustache"] = '
            {{$content}}{{/content}}
            ', - e.exports["text/already_registered.mustache"] = '{{_i}}There\'s already a TweetDeck account for that email address.{{/i}} {{_i}}Want to recover your password?{{/i}}', - e.exports["text/b.mustache"] = "{{{content}}}", - e.exports["text/bing_translator_link.mustache"] = '', - e.exports["text/br.mustache"] = "
            ", - e.exports["text/close_em.mustache"] = "", - e.exports["text/close_strong.mustache"] = "", - e.exports["text/em.mustache"] = "", - e.exports["text/favorite_action.mustache"] = "{{#account}} {{^isFavorite}} {{#decider.hearts_and_likes2}}{{_i}}Like from {{getUsername}}{{/i}}{{/decider.hearts_and_likes2}} {{^decider.hearts_and_likes2}}{{_i}}Favorite from {{getUsername}}{{/i}}{{/decider.hearts_and_likes2}} {{/isFavorite}} {{#isFavorite}} {{#decider.hearts_and_likes2}}{{_i}}Unlike from {{getUsername}}{{/i}}{{/decider.hearts_and_likes2}} {{^decider.hearts_and_likes2}}{{_i}}Unfavorite from {{getUsername}}{{/i}}{{/decider.hearts_and_likes2}} {{/isFavorite}} {{/account}}", - e.exports["text/followers_you_follow_link.mustache"] = '{{_i}}more{{/i}}', - e.exports["text/gallery_flag_media.mustache"] = '{{_i}}Flag media{{/i}} {{_i}}Flagged (learn more){{/i}}', - e.exports["text/gallery_original_link.mustache"] = '{{_i}}View original{{/i}}', - e.exports["text/global_filter_value.mustache"] = "“{{value}}”", - e.exports["text/list_link_real_name.mustache"] = '{{name}}', - e.exports["text/list_link_slug.mustache"] = '{{fullName}}', - e.exports["text/login_verification_link.mustache"] = '{{_i}}login verification{{/i}}', - e.exports["text/open_strong.mustache"] = "", - e.exports["text/profile_link.mustache"] = '@{{#user}}{{screenName}}{{/user}}', - e.exports["text/retweet_by_link.mustache"] = '{{name}}', - e.exports["text/screenname_txt.mustache"] = "@{{inReplyToScreenName}}", - e.exports["text/search_link.mustache"] = '{{symbol}}{{searchTerm}}', - e.exports["text/social_proof_link.mustache"] = '{{name}}', - e.exports["text/strong.mustache"] = " {{#text}} {{text}} {{/text}} {{^text}} {{#name}} {{name}} {{/name}} {{/text}} {{{html}}} ", - e.exports["text/user_link_fullname.mustache"] = '', - e.exports["text/user_link_screenname.mustache"] = '@{{screenName}}', - e.exports["topbar/alert_message.mustache"] = '

            {{#prefix}}{{prefix}}: {{/prefix}}{{message}}

            ', - e.exports["topbar/app_header.mustache"] = '
            ', - e.exports["topbar/message_banner.mustache"] = '
            {{text}} {{#actions}} {{label}} {{/actions}} {{^isUndismissable}} {{/isUndismissable}}
            ', - e.exports["topbar/navbar_account_summary.mustache"] = ' ', - e.exports["twitter_profile.mustache"] = '
            {{#loading}} {{_i}}Loading…{{/i}} {{/loading}} {{^loading}} {{/loading}} {{#twitterProfile}}
            {{#profile}} {{/profile}}
            {{> profile_card_stats}}
              {{#displayOrderProfile}}
            • {{title}}
            • {{/displayOrderProfile}}
            {{/twitterProfile}}
            ', - e.exports["twitter_profile_social_proof.mustache"] = '

            {{_i}}Followed by{{/i}}

            ', - e.exports["typeahead/recent_searches_placeholder.mustache"] = '
          • {{_i}}Recent searches will appear here.{{/i}}
          • ', - e.exports["typeahead/typeahead_conversations.mustache"] = '{{#chirp}}
          • {{/chirp}}', - e.exports["typeahead/typeahead_dropdown.mustache"] = '
            {{_i}}Clear history{{/i}}
            ', - e.exports["typeahead/typeahead_lists.mustache"] = '{{#lists}}
          • {{/lists}}', - e.exports["typeahead/typeahead_recent_searches.mustache"] = '{{#recentSearches}}
          • {{{name}}}
          • {{/recentSearches}}', - e.exports["typeahead/typeahead_saved_searches.mustache"] = '{{#savedSearches}}
          • {{{name}}}
          • {{/savedSearches}}', - e.exports["typeahead/typeahead_topics.mustache"] = '{{#topics}}
          • {{{name}}}
          • {{/topics}}', - e.exports["typeahead/typeahead_users.mustache"] = '{{! NB: this template assumes data is in format provided by typeahead, not standard user object}} {{#users}}
          • {{/users}}', - e.exports["typeahead/typeahead_users_compose.mustache"] = '{{#users}}
          • {{name}} {{#verified}}{{/verified}} @{{screen_name}}
          • {{/users}}', - e.exports["user_actions_btn_inv.mustache"] = '', - e.exports["user_selector.mustache"] = '
            {{#withSelectButton}} {{/withSelectButton}}
            ', - e.exports["version.mustache"] = "Version {{version}}{{#buildIDShort}}-{{buildIDShort}}{{/buildIDShort}} ({{#wrapperVersion}}{{wrapperVersion}}-{{/wrapperVersion}}{{appEnv}}{{#isTouchDevice}}-touch{{/isTouchDevice}})", - e.exports["windows_migration_messaging.mustache"] = '

            The TweetDeck Windows app is no longer supported.

            To continue using TweetDeck, please visit tweetdeck.twitter.com.

            Read more about this change Log in on the web

            ', - e.exports["with_fixed_header_and_footer.mustache"] = '
            {{$body}}{{/body}}
            ' -} -, function(e, t) { - !function(e) { - function t(t, i) { - this.el = e(t), - this.options = i || {}, - this.x = !1 !== this.options.x || this.options.forceHorizontal, - this.y = !1 !== this.options.y || this.options.forceVertical, - this.autoHide = !1 !== this.options.autoHide, - this.padding = void 0 == this.options.padding ? 2 : this.options.padding, - this.position = this.options.position, - this.showOnMouseOver = !1 !== this.options.showOnMouseOver, - this.inner = this.el.find(".antiscroll-inner"), - this.inner.css({ - right: this.y ? -n() + "px" : 0, - bottom: this.x ? -n() + "px" : 0 - }), - this.refresh() - } - function i(t) { - this.pane = t, - this.pane.el.append(this.el), - this.innerEl = this.pane.inner.get(0), - this.dragging = !1, - this.enter = !1, - this.shown = !1, - this.pane.el.mouseenter(e.proxy(this, "mouseenter")), - this.pane.el.mouseleave(e.proxy(this, "mouseleave")), - this.el.mousedown(e.proxy(this, "mousedown")), - this.innerPaneScrollListener = e.proxy(this, "scroll"), - this.pane.inner.scroll(this.innerPaneScrollListener), - this.innerPaneMouseWheelListener = e.proxy(this, "mousewheel"), - this.pane.inner.bind("mousewheel", this.innerPaneMouseWheelListener); - var i = this.pane.options.initialDisplay; - i !== !1 && (this.show(), - this.pane.autoHide && (this.hiding = setTimeout(e.proxy(this, "hide"), parseInt(i, 10) || 3e3))) - } - function s(e, t) { - function i() {} - i.prototype = t.prototype, - e.prototype = new i - } - function n() { - if (void 0 === r) { - var t = e('
            '); - e("body").append(t); - var i = e(t).innerWidth() - , s = e("div", t).innerWidth(); - e(t).remove(), - r = i - s - } - return r - } - e.fn.antiscroll = function(t) { - return this.each(function() { - e(this).data("antiscroll") && e(this).data("antiscroll").destroy(), - e(this).data("antiscroll", new e.Antiscroll(this,t)) - }) - } - , - e.Antiscroll = t, - t.prototype.refresh = function() { - var e = this.inner.get(0).scrollWidth > this.el.width() + (this.y ? n() : 0) - , t = this.inner.get(0).scrollHeight > this.el.height() + (this.x ? n() : 0); - this.x && (!this.horizontal && e ? this.horizontal = new i.Horizontal(this) : this.horizontal && !e ? (this.horizontal.destroy(), - this.horizontal = null ) : this.horizontal && this.horizontal.update()), - this.y && (!this.vertical && t ? this.vertical = new i.Vertical(this) : this.vertical && !t ? (this.vertical.destroy(), - this.vertical = null ) : this.vertical && this.vertical.update()) - } - , - t.prototype.destroy = function() { - return this.horizontal && (this.horizontal.destroy(), - this.horizontal = null ), - this.vertical && (this.vertical.destroy(), - this.vertical = null ), - this - } - , - t.prototype.rebuild = function() { - return this.destroy(), - this.inner.attr("style", ""), - t.call(this, this.el, this.options), - this - } - , - i.prototype.destroy = function() { - return this.el.remove(), - this.pane.inner.unbind("scroll", this.innerPaneScrollListener), - this.pane.inner.unbind("mousewheel", this.innerPaneMouseWheelListener), - this - } - , - i.prototype.mouseenter = function() { - this.enter = !0, - this.pane.showOnMouseOver && this.show() - } - , - i.prototype.mouseleave = function() { - this.enter = !1, - this.dragging || this.pane.autoHide && this.hide() - } - , - i.prototype.scroll = function() { - this.shown || (this.show(), - !this.dragging && this.pane.autoHide && (this.hiding = setTimeout(e.proxy(this, "hide"), 1e3))), - this.update() - } - , - i.prototype.mousedown = function(t) { - t.preventDefault(), - this.dragging = !0, - this.startPageY = t.pageY - parseInt(this.el.css("top"), 10), - this.startPageX = t.pageX - parseInt(this.el.css("left"), 10), - this.el[0].ownerDocument.onselectstart = function() { - return !1 - } - ; - var i = (this.pane, - e.proxy(this, "mousemove")) - , s = this; - e(this.el[0].ownerDocument).mousemove(i).mouseup(function() { - s.dragging = !1, - this.onselectstart = null , - e(this).unbind("mousemove", i), - s.enter || s.hide() - }) - } - , - i.prototype.show = function(e) { - this.hiding && (clearTimeout(this.hiding), - this.hiding = null ), - !this.shown && this.update() && (this.el.addClass("antiscroll-scrollbar-shown"), - this.shown = !0) - } - , - i.prototype.hide = function() { - this.pane.autoHide !== !1 && this.shown && (this.el.removeClass("antiscroll-scrollbar-shown"), - this.shown = !1) - } - , - i.Horizontal = function(t) { - var s = document; - t.el.length > 0 && (s = t.el[0].ownerDocument), - this.el = e('
            ', s), - i.call(this, t) - } - , - s(i.Horizontal, i), - i.Horizontal.prototype.update = function() { - var e = this.pane.el.width() - , t = e - 2 * this.pane.padding - , i = this.pane.inner.get(0); - return this.el.css("width", t * e / i.scrollWidth).css("left", t * i.scrollLeft / i.scrollWidth), - e < i.scrollWidth - } - , - i.Horizontal.prototype.mousemove = function(e) { - var t = this.pane.el.width() - 2 * this.pane.padding - , i = e.pageX - this.startPageX - , s = this.el.width() - , n = this.pane.inner.get(0) - , r = Math.min(Math.max(i, 0), t - s); - n.scrollLeft = (n.scrollWidth - this.pane.el.width()) * r / (t - s) - } - , - i.Horizontal.prototype.mousewheel = function(e, t, i, s) { - return 0 > i && 0 == this.pane.inner.get(0).scrollLeft || i > 0 && this.innerEl.scrollLeft + Math.ceil(this.pane.el.width()) == this.innerEl.scrollWidth ? (e.preventDefault(), - !1) : void 0 - } - , - i.Vertical = function(t) { - var s = document; - t.el.length > 0 && (s = t.el[0].ownerDocument), - this.el = e('
            ', s), - this.el.addClass("left" === t.position ? "antiscroll-scrollbar-position-left" : "antiscroll-scrollbar-position-right"), - i.call(this, t) - } - , - s(i.Vertical, i), - i.Vertical.prototype.update = function() { - var e = this.pane.el.height() - , t = e - 2 * this.pane.padding - , i = this.innerEl - , s = t * e / i.scrollHeight; - s = 20 > s ? 20 : s; - var n = t * i.scrollTop / i.scrollHeight; - if (n + s > t) { - var r = n + s - t; - n = n - r - 3 - } - return this.el.css("height", s).css("top", n), - e < i.scrollHeight - } - , - i.Vertical.prototype.mousemove = function(e) { - var t = this.pane.el.height() - , i = t - 2 * this.pane.padding - , s = e.pageY - this.startPageY - , n = this.el.height() - , r = this.innerEl - , o = Math.min(Math.max(s, 0), i - n); - r.scrollTop = (r.scrollHeight - t) * o / (i - n) - } - , - i.Vertical.prototype.mousewheel = function(e, t, i, s) { - return s > 0 && 0 == this.innerEl.scrollTop || 0 > s && this.innerEl.scrollTop + Math.ceil(this.pane.el.height()) == this.innerEl.scrollHeight ? (e.preventDefault(), - !1) : void 0 - } - ; - var r - }(jQuery) -} -, function(e, t) { - !function(e) { - "use strict"; - var t = function(e, t) { - this.init("tooltip", e, t) - } - ; - t.prototype = { - constructor: t, - init: function(t, i, s) { - var n, r, o, a, c; - for (this.type = t, - this.$element = e(i), - this.options = this.getOptions(s), - this.enabled = !0, - o = this.options.trigger.split(" "), - c = o.length; c--; ) - a = o[c], - "click" == a ? this.$element.on("click." + this.type, this.options.selector, e.proxy(this.toggle, this)) : "manual" != a && (n = "hover" == a ? "mouseenter" : "focus", - r = "hover" == a ? "mouseleave" : "blur", - this.$element.on(n + "." + this.type, this.options.selector, e.proxy(this.enter, this)), - this.$element.on(r + "." + this.type, this.options.selector, e.proxy(this.leave, this))); - this.options.selector ? this._options = e.extend({}, this.options, { - trigger: "manual", - selector: "" - }) : this.fixTitle() - }, - getOptions: function(t) { - return t = e.extend({}, e.fn[this.type].defaults, t, this.$element.data()), - t.delay && "number" == typeof t.delay && (t.delay = { - show: t.delay, - hide: t.delay - }), - t - }, - enter: function(t) { - var i = e(t.currentTarget)[this.type](this._options).data(this.type); - return i.options.delay && i.options.delay.show ? (clearTimeout(this.timeout), - i.hoverState = "in", - void (this.timeout = setTimeout(function() { - "in" == i.hoverState && i.show() - }, i.options.delay.show))) : i.show() - }, - leave: function(t) { - var i = e(t.currentTarget)[this.type](this._options).data(this.type); - return this.timeout && clearTimeout(this.timeout), - i.options.delay && i.options.delay.hide ? (i.hoverState = "out", - void (this.timeout = setTimeout(function() { - "out" == i.hoverState && i.hide() - }, i.options.delay.hide))) : i.hide() - }, - show: function() { - var t, i, s, n, r, o, a = e.Event("show"); - if (this.hasContent() && this.enabled) { - if (this.$element.trigger(a), - a.isDefaultPrevented()) - return; - t = this.tip(), - this.setContent(), - this.options.animation && t.addClass("fade"), - t.detach(), - this.options.container ? t.appendTo(this.options.container) : t.insertAfter(this.$element), - r = this.getPlacement(), - t.css({ - top: "object" == typeof r ? r.top : 0, - left: "object" == typeof r ? r.left : 0, - display: "block" - }), - i = this.getPosition(), - s = t[0].offsetWidth, - n = t[0].offsetHeight, - this.elementOffset = this.$element.offset(); - var c = function() { - var e = this.$element.closest("body").length > 0 - , t = this.$element.offset() - , i = this.elementOffset && (this.elementOffset.top != t.top || this.elementOffset.left != t.left); - (!e || i) && this.hide() - } - ; - switch (this.interval && clearTimeout(this.interval), - this.interval = setInterval(function() { - requestAnimationFrame(c.bind(this)) - } - .bind(this), 500), - r) { - case "bottom": - o = { - top: i.top + i.height, - left: i.left + i.width / 2 - s / 2 - }; - break; - case "top": - o = { - top: i.top - n, - left: i.left + i.width / 2 - s / 2 - }; - break; - case "left": - o = { - top: i.top + i.height / 2 - n / 2, - left: i.left - s - }; - break; - case "right": - o = { - top: i.top + i.height / 2 - n / 2, - left: i.left + i.width - } - } - this.applyPlacement(o, r.className || r), - this.$element.trigger("shown") - } - }, - applyPlacement: function(e, t) { - var i, s, n, r, o = this.tip(), a = o[0].offsetWidth, c = o[0].offsetHeight; - o.offset(e).addClass("string" == typeof t ? t : t.placement).addClass("in"), - i = o[0].offsetWidth, - s = o[0].offsetHeight, - "top" == t && s != c && (e.top = e.top + c - s, - r = !0), - "bottom" == t || "top" == t ? (n = 0, - e.left < 0 && (n = -2 * e.left, - e.left = 0, - o.offset(e), - i = o[0].offsetWidth, - s = o[0].offsetHeight), - this.replaceArrow(n - a + i, i, "left")) : this.replaceArrow(s - c, s, "top"), - r && o.offset(e) - }, - replaceArrow: function(e, t, i) { - this.arrow().css(i, e ? 50 * (1 - e / t) + "%" : "") - }, - setContent: function() { - var e = this.tip() - , t = this.getTitle(); - e.find(".tooltip-inner")[this.options.html ? "html" : "text"](t), - e.removeClass("fade in top bottom left right") - }, - hide: function() { - function t() { - var t = setTimeout(function() { - i.off(e.support.transition.end).detach() - }, 500); - i.one(e.support.transition.end, function() { - clearTimeout(t), - i.detach() - }) - } - var i = this.tip() - , s = e.Event("hide"); - return this.$element.trigger(s), - s.isDefaultPrevented() ? void 0 : (i.removeClass("in"), - !this.options.suppressFadeOut && e.support.transition && this.$tip.hasClass("fade") ? t() : i.detach(), - this.elementOffset = null , - clearInterval(this.interval), - this.$element.trigger("hidden"), - this) - }, - fixTitle: function() { - var e = this.$element; - (e.attr("title") || "string" != typeof e.attr("data-original-title")) && e.attr("data-original-title", e.attr("title") || "").attr("title", "") - }, - hasContent: function() { - return this.getTitle() - }, - getPlacement: function() { - var e = this.$element - , t = e.attr("data-tooltip-position"); - return t || (t = "function" == typeof this.options.placement ? this.options.placement.call(this, this.$tip[0], this.$element[0]) : this.options.placement), - t - }, - getPosition: function() { - var t = this.$element[0]; - return e.extend({}, "function" == typeof t.getBoundingClientRect ? t.getBoundingClientRect() : { - width: t.offsetWidth, - height: t.offsetHeight - }, this.$element.offset()) - }, - getTitle: function() { - var e, t = this.$element, i = this.options; - return e = t.attr("data-original-title") || ("function" == typeof i.title ? i.title.call(t[0]) : i.title) - }, - tip: function() { - return this.$tip = this.$tip || e(this.options.template) - }, - arrow: function() { - return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow") - }, - validate: function() { - this.$element[0].parentNode || (this.hide(), - this.$element = null , - this.options = null ) - }, - enable: function() { - this.enabled = !0 - }, - disable: function() { - this.enabled = !1 - }, - toggleEnabled: function() { - this.enabled = !this.enabled - }, - toggle: function(t) { - var i = t ? e(t.currentTarget)[this.type](this._options).data(this.type) : this; - i.tip().hasClass("in") ? i.hide() : i.show() - }, - destroy: function() { - this.hide().$element.off("." + this.type).removeData(this.type) - } - }; - var i = e.fn.tooltip; - e.fn.tooltip = function(i) { - return this.each(function() { - var s = e(this) - , n = s.data("tooltip") - , r = "object" == typeof i && i; - n || s.data("tooltip", n = new t(this,r)), - "string" == typeof i && n[i]() - }) - } - , - e.fn.tooltip.Constructor = t, - e.fn.tooltip.defaults = { - animation: !0, - placement: "top", - selector: !1, - template: '
            ', - trigger: "hover focus", - title: "", - delay: 0, - html: !1, - container: !1 - }, - e.fn.tooltip.noConflict = function() { - return e.fn.tooltip = i, - this - } - }(window.jQuery) -} -, function(e, t) { - !function(e) { - "use strict"; - e(function() { - e.support.transition = function() { - var e = function() { - var e, t = document.createElement("bootstrap"), i = { - WebkitTransition: "webkitTransitionEnd", - MozTransition: "transitionend", - OTransition: "oTransitionEnd otransitionend", - transition: "transitionend" - }; - for (e in i) - if (void 0 !== t.style[e]) - return i[e] - }(); - return e && { - end: e - } - }() - }) - }(window.jQuery) -} -, function(e, t) { - /** - * @license - * jQuery Tools 1.2.5 Dateinput - for humans - * - * NO COPYRIGHTS OR LICENSES. DO WHAT YOU LIKE. - * - * http://flowplayer.org/tools/form/dateinput/ - * - * Since: Mar 2010 - * Date: Wed Sep 22 06:02:10 2010 +0000 - */ - !function(e) { - function t(e, t) { - return 32 - new Date(e,t,32).getDate() - } - function i(e, t) { - for (e = "" + e, - t = t || 2; e.length < t; ) - e = "0" + e; - return e - } - function s(e, t, s) { - var n = e.getDate() - , r = e.getDay() - , o = e.getMonth() - , a = e.getFullYear() - , c = { - d: n, - dd: i(n), - ddd: d[s].shortDays[r], - dddd: d[s].days[r], - m: o + 1, - mm: i(o + 1), - mmm: d[s].shortMonths[o], - mmmm: d[s].months[o], - yy: String(a).slice(2), - yyyy: a - } - , l = t.replace(h, function(e) { - return e in c ? c[e] : e.slice(1, e.length - 1) - }); - return m.html(l).html() - } - function n(e) { - return parseInt(e, 10) - } - function r(e, t) { - return e.getFullYear() === t.getFullYear() && e.getMonth() == t.getMonth() && e.getDate() == t.getDate() - } - function o(e) { - if (e) { - if (e.constructor == Date) - return e; - if ("string" == typeof e) { - var t = e.split("-"); - if (3 == t.length) - return new Date(n(t[0]),n(t[1]) - 1,n(t[2])); - if (!/^-?\d+$/.test(e)) - return; - e = n(e) - } - var i = new Date; - return i.setDate(i.getDate() + e), - i - } - } - function a(i, a) { - function c(t, n, r) { - S = t, - f = t.getFullYear(), - g = t.getMonth(), - v = t.getDate(), - r = r || e.Event("api"), - r.type = "change", - k.trigger(r, [t]), - r.isDefaultPrevented() || (i.val(s(t, n.format, n.lang)), - i.data("date", t), - w.hide(r)) - } - function h(e) { - e.type = "onShow", - k.trigger(e) - } - var m, p, f, g, v, T, w = this, b = new Date, y = a.css, D = d[a.lang], C = e("#" + y.root), _ = C.find("#" + y.title), S = i.attr("data-value") || a.value || i.val(), A = i.attr("min") || a.min, E = i.attr("max") || a.max; - if (0 === A && (A = "0"), - S = o(S) || b, - A = o(A || 365 * a.yearRange[0]), - E = o(E || 365 * a.yearRange[1]), - !D) - throw "Dateinput: invalid language: " + a.lang; - if ("date" == i.attr("type")) { - var I = e(""); - e.each("class,disabled,id,maxlength,name,readonly,required,size,style,tabindex,title,value".split(","), function(e, t) { - I.attr(t, i.attr(t)) - }), - i.replaceWith(I), - i = I - } - i.addClass(y.input); - var k = i.add(w); - if (!C.length) { - if (C = e("
            ").hide().css({ - position: "relative" - }).attr("id", y.root), - C.children().eq(0).attr("id", y.head).end().eq(1).attr("id", y.body).children().eq(0).attr("id", y.days).end().eq(1).attr("id", y.weeks).end().end().end(), - _ = C.find("#" + y.head).find("div").attr("id", y.title), - a.selectors) { - var x = e("").attr("id", y.year); - _.html(x.add(M)) - } - for (var R = C.find("#" + y.days), F = 0; 7 > F; F++) - R.append(e("").text(D.shortDays[(F + a.firstDay) % 7])); - e("#calendar").append(C) - } - var L = C.find("#" + y.weeks); - M = C.find("#" + y.year), - x = C.find("#" + y.month), - e.extend(w, { - show: function(t) { - if (!(i.attr("readonly") || i.attr("disabled") || T || (t = t || e.Event(), - t.type = "onBeforeShow", - k.trigger(t), - t.isDefaultPrevented()))) { - e.each(l, function() { - this.hide() - }), - T = !0, - x.unbind("change").change(function() { - w.setValue(M.val(), e(this).val()) - }), - M.unbind("change").change(function() { - w.setValue(e(this).val(), x.val()) - }), - m = C.find("#" + y.prev).unbind("click").click(function(e) { - return m.hasClass(y.disabled) || w.addMonth(-1), - !1 - }), - p = C.find("#" + y.next).unbind("click").click(function(e) { - return p.hasClass(y.disabled) || w.addMonth(), - !1 - }), - w.setValue(S); - var s = i.offset(); - return /iPad/i.test(navigator.userAgent) && (s.top -= e(window).scrollTop()), - a.speed ? C.show(a.speed, function() { - h(t) - }) : (C.show(), - h(t)), - w - } - }, - setValue: function(i, s, o) { - var l = n(s) >= -1 ? new Date(n(i),n(s),n(o || 1)) : i || S; - if (A > l ? l = A : l > E && (l = E), - i = l.getFullYear(), - s = l.getMonth(), - o = l.getDate(), - -1 == s ? (s = 11, - i--) : 12 == s && (s = 0, - i++), - !T) - return c(l, a), - w; - g = s, - f = i, - v = o; - var u, d = new Date(i,s,1 - a.firstDay), h = d.getDay(), C = t(i, s), I = t(i, s - 1); - if (a.selectors) { - x.empty(), - e.each(D.months, function(t, s) { - A < new Date(i,t + 1,-1) && E > new Date(i,t,0) && x.append(e("