User:Eckserah/cosmos.js

mw.loader.implement("ext.fandom.wikiEditor.js@p6gpd", function($, jQuery, require, module) {	debugger;   /*@nomin*/    var exports = {};    require = window.fandomRequire || require;    var env = require("./env-d42b982f.js")     , _sliced_to_array = require("./_sliced_to_array-1f8d84e9.js")      , jquery = require("./jquery-cdf6440d.js")      , index = require("./index-e0f8f548.js")      , Tracker = require("./Tracker-a11f0d7f.js")      , consts = require("./consts-dee2fd08.js")      , PageActionsPopupButtonWidget = require("./PageActionsPopupButtonWidget-890d44d1.js")      , _class_call_check = require("./_class_call_check-f9c3c4a0.js")      , _create_class = require("./_create_class-896d2947.js")      , _object_spread = require("./_object_spread-f8d6b7e6.js")      , index$1 = require("./index-ac70eefa.js");    require("./_unsupported_iterable_to_array-ca9f96d1.js"),    require("./_object_spread_props-2956214c.js"), require("./_object_without_properties-4fb1645a.js"), require("./GoogleTracker-b2108a53.js"), require("./js.cookie-e69a0ae9.js"), require("./_commonjsHelpers-b3667336.js"), require("./ofType-49b710d9.js"), require("./first-84239077.js"), require("./_create_super-95f6a3c0.js"); var eventList = { "#wpSave": { type: "click", handler: function(e) { return function { e({                       action: consts.ACTIONS.SUCCESS,                        label: "article-publish"                    }) }           }        },        "#wpPreview": { type: "click", handler: function(e) { return function { e({                       action: consts.ACTIONS.IMPRESSION,                        label: "article-preview"                    }) }           }        },        "#wpDiff": { type: "click", handler: function(e) { return function { e({                       action: consts.ACTIONS.IMPRESSION,                        label: "article-review"                    }) }           }        },        ".editButtons .cancelLink": { type: "click", handler: function(e) { return function { e({                       action: consts.ACTIONS.CLICK,                        label: "button-cancel"                    }) }           }        },        "#wpMinoredit": { type: "click", handler: function(e) { return function(t) { e({                       action: consts.ACTIONS.CLICK,                        label: t.currentTarget.checked ? "button-minor-edit-checked" : "button-minor-edit-unchecked"                    }) }           }        },        "#wpWatchthis": { type: "click", handler: function(e) { return function(t) { e({                       action: consts.ACTIONS.CLICK,                        label: t.currentTarget.checked ? "button-watch-page-checked" : "button-watch-page-unchecked"                    }) }           }        },        "#wpIsCommentingEnabled": { type: "click", handler: function(e) { return function(t) { e({                       action: consts.ACTIONS.CLICK,                        label: t.currentTarget.checked ? "button-commenting-checked" : "button-commenting-unchecked"                    }) }           }        },        "#wpSummary": { type: "keydown", handler: function(e) { return index.debounce(1e3, (function(t) { e({                       action: consts.ACTIONS.KEYPRESS,                        label: t.target.value.trim.length ? "summary-non-empty" : "summary-empty"                    }) }               ))            }        },        ".ve-ui-modeSwitchPopupButtonWidget-visualSwitch": { type: "click", handler: function(e) { var t = jquery.$("#wpTextbox1") , i = t.val; return function { var o;                   o = "submit" !== mw.config.get("wgAction") && i === t.val ? "abort-switch-no-changes" : "abort-switch-with-changes", e({                       action: consts.ACTIONS.CLOSE,                        label: o                    }) }           }        },        "#wikiEditor-ui-toolbar .tool, #wikiEditor-ui-toolbar .option, #wikiEditor-ui-toolbar .tab": { type: "click", handler: function(e) { return function(t) { nameToLabelMap[t.currentTarget.getAttribute("rel")] && e({                       action: consts.ACTIONS.CLICK,                        label: "toolbar-item-clicked-".concat(nameToLabelMap[t.currentTarget.getAttribute("rel")])                    }) }           }        },        "msupload-container": { type: "click", handler: function(e) { return function { e({                       action: consts.ACTIONS.CLICK,                        label: "toolbar-item-clicked-msUpload"                    }) }           }        },        "#msupload-dropzone": { type: "drop", handler: function(e) { return function { e({                       action: consts.ACTIONS.SELECT,                        label: "toolbar-image-dropped"                    }) }           }        }    }     , nameToLabelMap = { heading: "headingMenu", "heading-2": "heading", "heading-3": "heading", "heading-4": "heading", "heading-5": "heading", bold: "bold", italic: "italic", superscript: "superscript", subscript: "subscript", big: "big", small: "small", ulist: "ulist", olist: "olist", reference: "reference", link: "link", file: "media", msUpload: "multiUploadBar", table: "table", CodeMirror: "syntaxHighlighting", nowiki: "nowiki", newline: "newline", redirect: "redirect", replace: "findAndReplace", characters: "specialCharactersMenu", advanced: "advancedMenu", help: "helpMenu" }    , additionalEventHandlers = [function(e) { var t, i = jquery.$("#wpTextbox1"), o = i.val; i.closest("form").on("submit", (function { t = !0 }       )),        window.onunload = function { var n;           n = "submit" !== mw.config.get("wgAction") && o === i.val ? "abort-no-changes" : "abort-with-changes", t || e({               action: consts.ACTIONS.CLOSE,                label: n            }) }   }    ]     , setupTracking = function { var e = arguments.length > 0 && void 0 !== arguments[0] && arguments[0] , t = Tracker.buildTrackingFunction({           trackingMethod: consts.TRACKING_METHODS.ANALYTICS,            category: getTrackingCategory        }); return function(i) { return e && console.log("WikiEditor event:", i), t(i) }   }     , getTrackingCategory = function { return Boolean(mw.user.options.get("usebetatoolbar")) ? "editor-we-desktop-with-toolbar" : "editor-we-desktop-without-toolbar" }    , getContributionLabel = function { var e = new URLSearchParams(window.location.search).has("section") ? "editing-section" : mw.config.get("wgEditMessage", "editing"); return "contribution-type-".concat(e) };   function wikiEditorTracking { if (jquery.$("#editingStatsId")) { var e = setupTracking , t = !0 , i = !1 , o = void 0; try { for (var n, r = function {                   var t = _sliced_to_array._slicedToArray(n.value, 2)                     , i = t[0]                      , o = t[1];                    env._toConsumableArray(document.querySelectorAll(i)).forEach((function(t) {                        return t.addEventListener(o.type, o.handler(e), !0)                    }                    ))                }, s = Object.entries(eventList)[Symbol.iterator]; !(t = (n = s.next).done); t = !0) r } catch (e) { i = !0, o = e           } finally { try { t || null == s.return || s.return } finally { if (i) throw o               } }           additionalEventHandlers.forEach((function(t) { return t(e) }           )),            e({                action: consts.ACTIONS.IMPRESSION,                label: "edit-page-ready"            }), e({               action: consts.ACTIONS.IMPRESSION,                label: getContributionLabel            }) }   }    function WikiEditorModeSwitchPopupButtonWidget$1(e) { var t = new OO.ui.ButtonWidget({           framed: !1,            label: mw.msg("visualeditor-mweditmodeve-tool-current"),            icon: "eye"        }); t.$button.addClass("ve-ui-modeSwitchPopupButtonWidget-visualSwitch"), t.$button.addClass("ve-ui-modeSwitchPopupButtonWidget-member"), t.on("click", e), t.connect(this, {           click: "hidePopup"        }), WikiEditorModeSwitchPopupButtonWidget$1.super.call(this, {           framed: !1,            indicator: "down",            popup: {                containerPadding: 0,                $content: t.$element,                width: null            },            label: mw.msg("visual-editor-fandom-switch-dropdown-mode-source-label")        }), this.$element.addClass("ve-ui-modeSwitchPopupButtonWidget ve-ui-modeSwitchPopupButtonWidget-oasis"), this.$button.addClass("ve-ui-modeSwitchPopupButtonWidget-button"), this.popup.$popup.addClass("ve-ui-modeSwitchPopupButtonWidget-popup") }   OO.inheritClass(WikiEditorModeSwitchPopupButtonWidget$1, OO.ui.PopupButtonWidget), WikiEditorModeSwitchPopupButtonWidget$1.prototype.hidePopup = function { this.getPopup.toggle(!1) }   ;    var SET_LINK_SUGGESTIONS = "SET_LINK_SUGGESTIONS" , CLOSE_LINK_SUGGESTIONS = "CLOSE_LINK_SUGGESTIONS" , HIGHLIGHTED_SUGGESTION_CHANGED = "HIGHLIGHTED_SUGGESTION_CHANGED"; function LinkSuggestModel(e) { OO.EventEmitter.call(this), this.isCodeMirrorActive = e,       this.linkSuggestions = [], this.query = {}, this.highlightedSuggestionIndex = -1 }   OO.initClass(LinkSuggestModel), OO.mixinClass(LinkSuggestModel, OO.EventEmitter), LinkSuggestModel.prototype.setCodeMirrorActive = function(e) { this.isCodeMirrorActive = e   } ,   LinkSuggestModel.prototype.setLinkSuggestQuery = function(e, t) { this.query = e,       this.linkSuggestions = t,        this.highlightedSuggestionIndex = -1, this.emit(SET_LINK_SUGGESTIONS) }  ,    LinkSuggestModel.prototype.highlightNextSuggestion = function { this.highlightedSuggestionIndex === this.linkSuggestions.length - 1 ? this.highlightedSuggestionIndex = -1 : this.highlightedSuggestionIndex++, this.emit(HIGHLIGHTED_SUGGESTION_CHANGED) }  ,    LinkSuggestModel.prototype.highlightPreviousSuggestion = function { -1 === this.highlightedSuggestionIndex ? this.highlightedSuggestionIndex = this.linkSuggestions.length - 1 : this.highlightedSuggestionIndex--, this.emit(HIGHLIGHTED_SUGGESTION_CHANGED) }  ,    LinkSuggestModel.prototype.closeLinkSuggestions = function { this.highlightedSuggestionIndex = -1, this.linkSuggestions = [], this.emit(CLOSE_LINK_SUGGESTIONS) }   ;    var LinkSuggestController = function { function e(t, i, o, n) { var r = this; _class_call_check._classCallCheck(this, e), _object_spread._defineProperty(this, "debouncedPerformLinkSuggestQuery", OO.ui.debounce(this.performLinkSuggestQuery.bind(this), 300)), _object_spread._defineProperty(this, "handleScroll", (function(e) { if (r.cm) { var t = r.cm.getCursor , i = t.line , o = t.ch                    , n = i;                    "ArrowDown" === e ? --n : "ArrowDown" !== e && "Enter" !== e || ++n, setTimeout((function { return r.cm.scrollIntoView({                           line: n,                            ch: o                        }) }                   ), 10)                }            }            )),            _object_spread._defineProperty(this, "handleKeydown", (function(e) { var t = e.key , i = r.model , o = i.linkSuggestions , n = i.highlightedSuggestionIndex , s = i.query.originalContent , d = !!o.length; if (r.handleScroll(t),               d) { if ("ArrowDown" === t)                       return e.preventDefault, void r.model.highlightNextSuggestion; if ("ArrowUp" === t)                       return e.preventDefault, void r.model.highlightPreviousSuggestion; if ("Enter" === t && -1 !== n) { e.preventDefault; var u = o[n] , a = index$1.getContentForSuggestions({                           suggestion: u,                            originalContent: s                        }).textToInsert; return void r.applyLinkSuggest(a) }                   if ("Esc" === t || "Escape" === t)                        return e.preventDefault, void r.model.closeLinkSuggestions }               r.debouncedPerformLinkSuggestQuery }           )),            this.model = t,            this.$textbox = i,            this.cm = null, this.api = o,           this.pageLanguageHasWordBreaks = n        } return _create_class._createClass(e, [{           key: "applyLinkSuggest",            value: function(e) {                var t = this.model.query                 , i = t.startOffset                  , o = t.wasTemplateTransclusion                  , n = this.$textbox.textSelection("getCaretPosition")                  , r = o ? "}}" : "]]"                  , s = 1 + i + e.length + r.length;                this.$textbox.textSelection("setSelection", { start: 1 + i,                   end: n                }).textSelection("replaceSelection", e + r).textSelection("setSelection", { start: s,                   end: s                }),                this.model.closeLinkSuggestions            }        }, {            key: "performLinkSuggestQuery",            value: function {                var e = this                 , t = this.$textbox.textSelection("getContents")                  , i = this.$textbox.textSelection("getCaretPosition")                  , o = this.pageLanguageHasWordBreaks ? 4 : 1                  , n = index$1.getLinkSuggestQueryFromText(t, i, o);                if (!n || n.content.length < o || n.content.includes("|"))                    this.model.closeLinkSuggestions;                else {                    var r = n.content.includes("|");                    this.api.get({ action: "linksuggest", get: "suggestions", query: n.content }).then((function(t) {                       var i = t.linksuggest.result.suggestions;                        i.length && !r ? e.model.setLinkSuggestQuery(n, i) : e.model.closeLinkSuggestions                    }                    ))                }            }        }, {            key: "setLinkSuggestEventHandlers",            value: function {                var e = this                 , t = this.model.isCodeMirrorActive;                this.model.closeLinkSuggestions,                t ? mw.loader.using(["ext.CodeMirror.lib", "ext.CodeMirror.mode.mediawiki"], (function {                    e.$textbox.off("keydown.linksuggest"),                    e.cm = WikiEditorCodeMirror,                    WikiEditorCodeMirror.on("keydown", (function(t, i) {                        return e.handleKeydown(i)                    }                    ))                } )) : this.addLinkSuggestWithoutSyntaxHighlighting }       }, {            key: "addLinkSuggestWithoutSyntaxHighlighting", value: function { this.$textbox.on("keydown.linksuggest", this.handleKeydown) }       }, {            key: "updateCodeMirrorState", value: function(e) { var t = this; this.model.setCodeMirrorActive(e), setTimeout((function { return t.setLinkSuggestEventHandlers }               ))            }        }]),        e    };    function LinkSuggestPopupWidget(e, t, i, o) {        var n;        this.model = e,        this.controller = t,        this.$textbox = i,        this.codeMirrorInstance = null,        this.$caretCoordinateCalculator = o,        this.textboxLineHeight = i.css("line-height"),        this.debouncedUpdatePosition = OO.ui.debounce(this.updatePosition.bind(this), 300),        this.model.connect(this, (n = {},        _object_spread._defineProperty(n, SET_LINK_SUGGESTIONS, "onLinkSuggestionsSet"),        _object_spread._defineProperty(n, CLOSE_LINK_SUGGESTIONS, "onCloseLinkSuggestions"),        _object_spread._defineProperty(n, HIGHLIGHTED_SUGGESTION_CHANGED, "onHighlightedSuggestionChanged"),        n)),        this.selectWidget = new OO.ui.SelectWidget,        this.selectWidget.connect(this, { choose: "onSuggestionSelected" }),       LinkSuggestPopupWidget.super.call(this, { $content: this.selectWidget.$element, padded: !1, autoFlip: !1, hideWhenOutOfView: !1 }),       this.$element.addClass("wikiEditor-ui-linkSuggest"),        this.$popup.addClass("wikiEditor-ui-linkSuggest-popup"),        this.toggle(!1),        jquery.$(document).on("scroll", this.debouncedUpdatePosition)    }    function WikiEditorModeSwitchPopupButtonWidget(e) {        var t = new OO.ui.ButtonWidget({ framed: !1, label: mw.msg("visualeditor-mweditmodeve-tool-current"), icon: "eye" });       t.$button.addClass("ve-ui-modeSwitchPopupButtonWidget-visualSwitch"),        t.$button.addClass("ve-ui-modeSwitchPopupButtonWidget-member"),        t.on("click", e),        t.connect(this, { click: "hidePopup" }),       WikiEditorModeSwitchPopupButtonWidget.super.call(this, { framed: !1, indicator: "down", popup: { containerPadding: 0, $content: t.$element, width: null },           icon: "wikiText", label: mw.msg("visual-editor-fandom-switch-dropdown-mode-source-label") }),       this.$element.addClass("ve-ui-modeSwitchPopupButtonWidget ve-ui-modeSwitchPopupButtonWidget-fd ve-header-action-item"),        this.$button.attr("id", "ve-ui-modeSwitchPopupButtonWidget-button"),        this.$button.addClass("ve-ui-modeSwitchPopupButtonWidget-button"),        this.popup.$popup.addClass("ve-ui-modeSwitchPopupButtonWidget-popup")    }    function initLinkSuggest(e) {        var t = !mw.user.options.get("disablelinksuggest")         , i = "wikitext" === mw.config.get("wgPageContentModel");        if (t && i) {            var o = mw.user.options.get("usecodemirror") > 0              , n = mw.config.get("wgPageLanguageHasWordBreaks")              , r = new mw.Api              , s = new LinkSuggestModel(o)              , d = new LinkSuggestController(s,e,r,n)              , u = $(" ").css({ position: "absolute", top: "-2000px", left: "-2000px", visibility: "hidden", "white-space": "pre-wrap", "font-family": e.css("font-family"), "font-size": e.css("font-size"), "line-height": e.css("line-height") }).appendTo(document.body)            , a = new LinkSuggestPopupWidget(s,d,e,u);            $(".wikiEditor-ui-text").prepend(a.$element),            mw.hook("ext.CodeMirror.switch").add((function(e, t) {                d.updateCodeMirrorState(e),                a.setCodeMirrorInstance(e, t)            }            )),            setTimeout((function {                return d.addLinkSuggestWithoutSyntaxHighlighting            }            ))        }    }    function postSetupInit {        if ($(".mw-indicators").prependTo("#wikiPreview .mw-parser-output"), $(".page-footer__categories").appendTo("#wikiPreview .mw-parser-output"), setTimeout(wikiEditorTracking), window.WikiEditorCodeMirror) {           var e = window.WikiEditorCodeMirror.getValue.bind(window.WikiEditorCodeMirror);            window.WikiEditorCodeMirror.getValue = function {                for (var t = arguments.length, i = new Array(t), o = 0; o < t; o++)                    i[o] = arguments[o];                var n = 160;                return e.apply(void 0, env._toConsumableArray(i)).replace(/\s/g, (function(e) {                    return e.charCodeAt(0) === n ? " " : e                }                ))            }           ,            "submit" === mw.config.get("wgAction") && window.scrollTo({ top: 0 })       }    }    OO.inheritClass(LinkSuggestPopupWidget, OO.ui.PopupWidget),    LinkSuggestPopupWidget.prototype.onLinkSuggestionsSet = function {        var e = this.model         , t = e.linkSuggestions          , i = e.query.originalContent;        if (t.length) {            this.selectWidget.clearItems;            var o = t.map((function(e) {                var t = index$1.getContentForSuggestions({ suggestion: e,                   originalContent: i                })                 , o = t.textToInsert                  , n = t.textToDisplay                  , r = new OO.ui.OptionWidget({ data: o,                   label: n                });                return r.$element.addClass("wikiEditor-ui-linkSuggest-suggestion"),                r            }            ));            this.selectWidget.addItems(o),            this.toggle(!0),            this.updatePosition,            this.model.isCodeMirrorActive && (this.toggleClipping(!1), this.position, this.toggleClipping(!0), this.$element.removeClass("oo-ui-element-hidden")),           this.updatePositionIfOutsideOfViewport        } else            this.toggle(!1)    }   ,    LinkSuggestPopupWidget.prototype.onCloseLinkSuggestions = function {        this.toggle(!1),        this.selectWidget.clearItems    }    ,    LinkSuggestPopupWidget.prototype.computePosition = function {        var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : null;        LinkSuggestPopupWidget.super.prototype.computePosition.call(this),        this.$anchor.css({ left: 12 });       var t = null != e ? e : this.getCaretPosition         , i = t.top          , o = t.left;        return {            position: "fixed",            top: "".concat(i, "px"),            left: "".concat(o, "px"),            "margin-top": this.textboxLineHeight        }    }    ,    LinkSuggestPopupWidget.prototype.getCaretPosition = function {        var e = this.model          , t = e.isCodeMirrorActive          , i = e.query.startOffset;        if (t) {            var o = this.codeMirrorInstance.cursorCoords;            return o.left -= window.scrollX,            o.top -= window.scrollY,            o        }        var n = this.$textbox.textSelection("getContents")          , r = this.$textbox.textSelection("getCaretPosition")          , s = jquery.$(" ").text(n.substring(i, r));        this.$caretCoordinateCalculator.width(this.$textbox[0].scrollWidth).text(n.substring(0, i)).append(s); var d = this.$textbox.offset , u = d.top , a = d.left , c = s.position , l = c.top , g = c.left , p = s.width , h = this.$textbox.scrollTop , S = this.$textbox.scrollLeft; return { top: u + l - h - window.scrollY, left: a + g + p - S - window.scrollX }   }   ,    LinkSuggestPopupWidget.prototype.updatePosition = function { var e = this.getCaretPosition; if (this.selectWidget.items.length) { var t, i;           this.$element.css(this.computePosition(e)); var o = null !== (i = null === (t = this.codeMirrorInstance) || void 0 === t ? void 0 : t.display.wrapper.getBoundingClientRect) && void 0 !== i ? i : this.$textbox[0].getBoundingClientRect , n = e.top > o.top && e.top < o.bottom; this.toggle(n) }   }   ,    LinkSuggestPopupWidget.prototype.setCodeMirrorInstance = function(e, t) { e ? (this.codeMirrorInstance = t[0].CodeMirror,       this.codeMirrorInstance.on("scroll", this.debouncedUpdatePosition)) : this.codeMirrorInstance = null }  ,    LinkSuggestPopupWidget.prototype.onHighlightedSuggestionChanged = function { var e = this.model.highlightedSuggestionIndex; if (-1 === e)           this.selectWidget.highlightItem; else { var t = this.selectWidget.items[e]; this.selectWidget.highlightItem(t) }   }   ,    LinkSuggestPopupWidget.prototype.onSuggestionSelected = function(e) { var t = e.getData; this.controller.applyLinkSuggest(t) }  ,    LinkSuggestPopupWidget.prototype.updatePositionIfOutsideOfViewport = function { var e = this.$element.get(0).getBoundingClientRect , t = e.left , i = e.right , o = e.width; window.innerWidth < i && (this.$anchor.css({ left: "auto", right: 12 }),       this.$element.css({ left: t - o       })) }  ,    OO.inheritClass(WikiEditorModeSwitchPopupButtonWidget, OO.ui.PopupButtonWidget), WikiEditorModeSwitchPopupButtonWidget.prototype.hidePopup = function { this.getPopup.toggle(!1) }  ,    mw.hook("wikiEditor.toolbarReady").add(initLinkSuggest).add(postSetupInit), $((function { mw.loader.using("ext.visualEditor.switching", (function { if (mw.libs.ve.isVisualAvailable) { var e = "fandomdesktop" === mw.config.get("skin") , t = new (e ? WikiEditorModeSwitchPopupButtonWidget : WikiEditorModeSwitchPopupButtonWidget$1)((function { return mw.libs.ve.activateVe("visual") }               ));                if (e) { $(".page-header #p-cactions").find("li > a").removeAttr("accesskey"); var i = new PageActionsPopupButtonWidget.PageActionsPopupButtonWidget(mw.config.get("wgPageActions")) , o = $(" ").addClass("ve-fd-header__actions").append(t.$element).append(i.$element); $(".ve-fd-header").append(o) } else $(".ve-oasis-header__modeSwitchPlaceholder").replaceWith(t.$element); mw.hook("ve.activationComplete").add((function { $(".ve-fd-header.ve-init-mw-desktopArticleTarget-uneditableContent,.ve-oasis-header.ve-init-mw-desktopArticleTarget-uneditableContent").remove }               ))            }        }        ));        var e = $("#wpTextbox1"); mw.hook("codeEditor.configure").add((function(t) { var i = e.data("wikiEditor-context").codeEditor , o = mw.config.get("wgAceEditorTheme"); i.setTheme("./theme/".concat(o)), i.setOption("wrap", !0), "css" === mw.config.get("wgCodeEditorCurrentLanguage") && setTimeout((function { t.$worker.call("setDisabledRules", ["ids|order-alphabetical|overqualified-elements|qualified-headings|adjoining-classes"]) }           ))        }        )),        mw.user.options.get("uselivepreview") > 0 && mw.loader.using("mediawiki.action.edit.preview", (function { mw.hook("wikipage.editform").add((function { $(".mw-indicators").children.length > 0 && $(".mw-indicators").clone.prependTo("#wikiPreview .mw-parser-output"), $('.catlinks[data-mw="interface"]').children.length > 0 && $(".page-footer__categories").clone.appendTo("#wikiPreview .mw-parser-output") }           ))        }        ))    }    )),    module.exports = exports; }, {}, {   "visual-editor-fandom-switch-dropdown-mode-source-label": "Source Editor" }, null);