NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Twitter Labs // @description Enable hidden Twitter PWA feature flags (Chromium only!) // @author Sominemo // @namespace https://script.sominemo.com/ // @version 1.0.5 // @date 2020-06-19 // @copyright 2020, Sominemo (sominemo.com) // @license MIT // @icon https://script.sominemo.com/twitter_labs/icon.png // @icon64 https://script.sominemo.com/twitter_labs/icon64.png // @updateURL https://script.sominemo.com/twitter_labs/script.meta.js // @downloadURL https://script.sominemo.com/twitter_labs/script.user.js // @supportURL https://t.me/sominemo // @run-at document-start // @match https://twitter.com/* // @match https://mobile.twitter.com/* // @grant GM_registerMenuCommand // @grant GM_unregisterMenuCommand // @grant unsafeWindow // ==/UserScript== (function() { 'use strict'; Object.defineProperty( unsafeWindow, "__INITIAL_STATE__", { set(s) { const curMode = unsafeWindow.localStorage.getItem("twitter-labs-replace-mode") || "0" const rewrites = { conversation_controls_limited_replies_creation_enabled: true, responsive_web_composer_card_previews_enabled: true, responsive_web_conversation_tree_enabled: true, responsive_web_conversation_tree_toggle: true, responsive_web_dm_quick_access_enabled: true, responsive_web_hide_media_previews_enabled: true, responsive_web_dm_quick_access_with_close_enabled: true, responsive_web_dm_quick_access_no_empty_drawer_enabled: true, responsive_web_elevated_qt_combined_retweets_dynamic_label: true, dm_reactions_config_active_reactions: [ "😂:funny", "😲:surprised", "😢:sad", "❤:like", "🔥:excited", "👍:agree", "👎:disagree", "😠:angry", ], dm_reactions_config_inactive_reactions: [], responsive_web_feature_switch_dash_enabled: true, responsive_web_hw_cards_in_dms_enabled: true, responsive_web_inline_reply_enabled: true, responsive_web_inline_reply_with_fab_enabled: true, responsive_web_instream_video_enabled: true, responsive_web_live_video_parity_periscope_auth_enabled: true, responsive_web_moment_maker_enabled: true, responsive_web_ntab_verified_mentions_vit_internal_dogfood: true, responsive_web_second_degree_replies_nudge_get_enabled: true, responsive_web_second_degree_replies_nudge_force_enabled: true, responsive_web_second_degree_replies_nudge_show_enabled: true, responsive_web_tweet_detail_to_tweet_enabled: true, responsive_web_zipkin_api_requests_enabled: true, search_channels_discovery_page_enabled: true, search_channels_description_enabled: true, topic_landing_page_enabled: true, topics_descriptions_enabled: true, topics_dismiss_control_enabled: true, topics_new_mgmt_enabled: true, unified_cards_cta_color_blue_cta: true, } if (curMode === "1") { Object.entries(s.featureSwitch.config).forEach(([key, {value}]) => { if (value === false) s.featureSwitch.config[key] = {value: true} }) } else { Object.entries(rewrites).forEach(([key, value]) => {s.featureSwitch.config[key] = {value}}) } unsafeWindow.fakeInit = s }, get() {return unsafeWindow.fakeInit}, configurable: true }) let curCommand = null let sw function updatePalette() { const curMode = unsafeWindow.localStorage.getItem("twitter-labs-replace-mode") || "0" if (curCommand !== null) GM_unregisterMenuCommand(curCommand) if (curMode === "0") curCommand = GM_registerMenuCommand("Use false-to-true mode", sw) if (curMode === "1") curCommand = GM_registerMenuCommand("Use manual rewrites mode", sw) } sw = () => { const curMode = unsafeWindow.localStorage.getItem("twitter-labs-replace-mode") || "0" if (curMode === "0") { unsafeWindow.localStorage.setItem("twitter-labs-replace-mode", "1") updatePalette() unsafeWindow.location.reload() } else if (curMode === "1") { unsafeWindow.localStorage.setItem("twitter-labs-replace-mode", "0") updatePalette() unsafeWindow.location.reload() } } updatePalette() })();