Confluence - Open editor inside main view (keep sidebar)

Open editor inside main view when creating and editing pages (known bug: when page creation requires multiple steps, the resulting page will be opened without the page tree)

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         Confluence - Open editor inside main view (keep sidebar)
// @namespace    http://netresearch.de/
// @version      0.2
// @description  Open editor inside main view when creating and editing pages (known bug: when page creation requires multiple steps, the resulting page will be opened without the page tree)
// @author       Christian Opitz
// @include      *.atlassian.net/wiki/*
// @grant        none
// @run-at       document-body
// ==/UserScript==

(function() {
    'use strict';
    AJS.toInit(function(){
        var $ = AJS.$;
        //AJS.whenIType("c").execute(function(e) { // Don't know how to stop further execution/propagation with that
        $(document).bind('keydown', 'c', function(e) {
            var quickLink = $('#quick-create-page-button');
            if (quickLink.is(':visible')) {
                quickLink.click();
                e.preventDefault();
                e.stopImmediatePropagation();
                return false;
            }
        });
        var origConfluenceDialogWizard = Confluence.DialogWizard;
        Confluence.DialogWizard = function(dialog, finalAction) {
            var res = origConfluenceDialogWizard(dialog, finalAction);
            // Unfortunately we can not override the doFinalAction via prototype - so, the res.newPage-Action will still use the old one :(
            var doFinalAction = res.doFinalAction;
            res.doFinalAction = function(ev, state, wizardData, finalAction, wizard) {
                if (state.finalUrl && state.spaceKey == AJS.Meta.get('space-key')) {
                    runInMain(state.finalUrl);
                    AJS.$(".button-panel-cancel-link").click();
                } else {
                    doFinalAction(ev, state, wizardData, finalAction, wizard);
                }
            };
            return res;
        };
        function runInMain(src) {
            var $main = $('#main'), headerHeight = $('#header').height();
            $main.children().detach();
            $('body').css('overflow', 'hidden');
            $main.parent().css('height', 'calc(100% - ' + headerHeight + 'px)');
            $main.parents().css('overflow', 'hidden');
            $main.css({
                height: '100%',
                padding: 0,
                borderBottom: 'none',
                minHeight: 0
            });
            $('#footer').hide();
            var iframe = $('<iframe>', {
                src: src,
                frameborder: 0,
                scrolling: 'no',
            }).css({
                marginTop: -1 * headerHeight,
                marginBottom: -1,
                height: 'calc(100% + ' + (headerHeight + 1) + 'px)',
                width: '100%'
            }).appendTo($main).one('load', function(e) {
                iframe.contents().find('head').append('<base target="_parent">');
                $(iframe.prop('contentWindow')).bind('unload', function() {
                    window.setInterval(function() {
                        var doc = iframe.prop('contentWindow').document;
                        if (doc.readyState === 'loading') {
                            document.location.href = doc.location.href;
                            iframe.css('visibility', 'hidden');
                        }
                    }, 10);
                });
                $(this).one('load', function(e) {
                    //document.location.href = $(this).prop('contentWindow').document.location.href;
                });
            });
        }
        $('#editPageLink, #quick-create-page-button').off('click').click(function(e) {
            e.preventDefault();
            e.stopImmediatePropagation();
            runInMain($(this).attr('href'));
        });
    });
})();