const ORIGINAL_SETTINGS = { title: "QUnit Discourse Tests", site_logo_url: "/assets/logo.png", site_logo_url: "/assets/logo.png", site_logo_small_url: "/assets/logo-single.png", site_mobile_logo_url: "", site_favicon_url: "/images/discourse-logo-sketch-small.png", allow_user_locale: false, suggested_topics: 7, ga_universal_tracking_code: "", ga_universal_domain_name: "auto", top_menu: "latest|new|unread|categories|top", post_menu: "like|share|flag|edit|bookmark|delete|admin|reply", post_menu_hidden_items: "flag|bookmark|edit|delete|admin", share_links: "twitter|facebook|email", category_colors: "BF1E2E|F1592A|F7941D|9EB83B|3AB54A|12A89D|25AAE2|0E76BD|652D90|92278F|ED207B|8C6238|231F20|27AA5B|B3B5B4|E45735", enable_mobile_theme: true, relative_date_duration: 14, fixed_category_positions: false, enable_badges: true, invite_only: false, login_required: false, must_approve_users: false, enable_local_logins: true, allow_new_registrations: true, enable_google_logins: true, enable_google_oauth2_logins: false, enable_twitter_logins: true, enable_facebook_logins: true, enable_github_logins: true, enable_sso: false, min_username_length: 3, max_username_length: 20, min_password_length: 8, enable_names: true, invites_shown: 30, delete_user_max_post_age: 60, delete_all_posts_max: 15, min_post_length: 20, min_personal_message_post_length: 10, max_post_length: 32000, min_topic_title_length: 15, max_topic_title_length: 255, min_personal_message_title_length: 2, allow_uncategorized_topics: true, min_title_similar_length: 10, edit_history_visible_to_public: true, delete_removed_posts_after: 24, traditional_markdown_linebreaks: false, suppress_reply_directly_below: true, suppress_reply_directly_above: true, newuser_max_embedded_media: 0, newuser_max_attachments: 0, display_name_on_posts: true, short_progress_text_threshold: 10000, default_code_lang: "auto", autohighlight_all_code: false, email_in: false, authorized_extensions: ".jpg|.jpeg|.png|.gif|.svg|.txt|.ico|.yml", authorized_extensions_for_staff: "", max_image_width: 690, max_image_height: 500, allow_profile_backgrounds: true, allow_uploaded_avatars: true, allow_animated_avatars: false, tl1_requires_read_posts: 30, enable_long_polling: true, polling_interval: 3000, anon_polling_interval: 30000, flush_timings_secs: 5, enable_user_directory: true, tos_url: "", privacy_policy_url: "", tos_accept_required: false, faq_url: "", allow_restore: false, maximum_backups: 5, version_checks: true, suppress_uncategorized_badge: true, min_search_term_length: 3, topic_views_heat_low: 1000, topic_views_heat_medium: 2000, topic_views_heat_high: 5000, global_notice: "", show_create_topics_notice: true, available_locales: "cs|da|de|en|es|fr|he|id|it|ja|ko|nb_NO|nl|pl_PL|pt|pt_BR|ru|sv|uk|zh_CN|zh_TW", highlighted_languages: "apache|bash|cs|cpp|css|coffeescript|diff|xml|http|ini|json|java|javascript|makefile|markdown|nginx|objectivec|ruby|perl|php|python|sql|handlebars", enable_emoji: true, enable_emoji_shortcuts: true, emoji_set: "emoji_one", enable_emoji_shortcuts: true, enable_inline_emoji_translation: false, desktop_category_page_style: "categories_and_latest_topics", enable_mentions: true, enable_personal_messages: true, unicode_usernames: false, secure_media: false, }; let siteSettings = Object.assign({}, ORIGINAL_SETTINGS); Discourse.SiteSettings = siteSettings; export function currentSettings() { return siteSettings; } // In debug mode, Ember will decorate objects with setters that remind you to use // this.set() because they are bound (even if you use `unbound` or `readonly` in templates!). // Site settings are only ever changed in tests and these warnings are not wanted, so we'll // strip them when resetting our settings between tests. function setValue(k, v) { let desc = Object.getOwnPropertyDescriptor(siteSettings, k); if (desc && !desc.writable) { Object.defineProperty(siteSettings, k, { writable: true }); } siteSettings[k] = v; } export function mergeSettings(other) { for (let p in other) { if (other.hasOwnProperty(p)) { setValue(p, other[p]); } } return siteSettings; } export function resetSettings() { for (let p in siteSettings) { if (siteSettings.hasOwnProperty(p)) { let v = ORIGINAL_SETTINGS[p]; typeof v !== "undefined" ? setValue(p, v) : delete siteSettings[p]; } } return siteSettings; }