Benutzer:Matthias M./Gadget-AceWikiEditor.js

aus Wikipedia, der freien Enzyklopädie

Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
  • Opera: Strg+F5
/*jslint browser: true, sloppy: true, plusplus: true, indent: 4 */
/*global mediaWiki, jQuery, ace */
/**
 * [[no:MediaWiki:Gadget-AceWikiEditor.js]]
 * 2012 [[no:Bruker:Danmichaelo]]
 * 
 * Forked from MediaWiki:Gadget-codeeditor.js
 * (c) 2011 Brion Vibber <brion @ pobox.com>
 * GPLv2 or later
 *
 * Syntax highlighting for editing wikimarkup.
 * Uses embedded Ajax.org Cloud9 Editor: http://ace.ajax.org/
 * 
 * Note: By default, the toolbar menus will appear below the editor. 
 * This can be fixed by increase their z-index, adding something like
 * this to common.css:
 * 
 * .wikiEditor-ui-toolbar .group .tool-select .menu .options {
 *   z-index: 500   
 * }
 *
 * Browsers tested:
 * - Firefox 11.0 / Mac
 * - Chrome 18.0.1025.142 / Mac
 * - Firefox 15.0.1 / Linux
 *
 * Browsers tested with issues:
 * - Opera 12.00 alpha / Mac: copy / paste doesn't work
 * - Safari: renders ok, but for some funny reason you can't type "}"
 *   Same problem at http://ace.ajax.org/build/kitchen-sink.html 
 * 
 * Browsers not tested:
 * - IE 8.0.6001.18702 / Win XP: Problems have been reported with
 *   Brion's CodeEditor, so problems should be expected!
 *
 * Known issues:
 * - serious problems with right-to-left scripts and perhaps other complex scripts. 
 * - 'discard your changes?' check on tab close doesn't trigger
 * - ties into WikiEditor, so doesn't work on classic toolbar
 * - copy/paste not available from context menu (Firefox, Chrome on Linux -- kbd & main menu commands ok)
 * - accessibility: tab/shift-tab are overridden. is there a consistent alternative for keyboard-reliant users?
 * - accessibility: accesskey on the original textarea needs to be moved over or otherwise handled
 * - cursor/scroll position not maintained over previews/show changes
 * - minor issue: repeated insertion by holding down a key does not work 
 */

(function ($, mw) {

    if ($.inArray(mw.config.get('wgAction'), ['edit', 'submit']) !== -1) {

        var $box = $('#wpTextbox1'),
            matches = /\.(js|css)$/.exec(mw.config.get('wgTitle'));

        // @fixme move to better hosting location      
        mw.config.set('wgAceWikiEditorAssetsPath', 'http://de.wikipedia.org/w/index.php?title=Benutzer:Matthias_M./AceWiki');

        // $.wikiEditor not defined for old toolbar
        if ($box.length && !matches && mw.user.options.get('usebetatoolbar')) {
            $(function () {
                var moduleBase = mw.config.get('wgAceWikiEditorAssetsPath'),
                    modules = [
                        moduleBase + '/ace/ace.js&action=raw&ctype=text/javascript&maxage=86400',
                        moduleBase + '/ace/mode-wiki.js&action=raw&ctype=text/javascript&maxage=86400',
                        moduleBase + '/ace/theme-wiki.js&action=raw&ctype=text/javascript&maxage=86400',
                        moduleBase + '/jquery.aceWikiEditor.js&action=raw&ctype=text/javascript&maxage=86400',
                        moduleBase + '/ext.aceWikiEditor.js&action=raw&ctype=text/javascript&maxage=86400'
                    ],
                    i = 0,
                    ping = function () {
                    // @fixme loading serially is kinda lame, but it works for now
                        if (i < modules.length) {
                            var url = modules[i];
                            $.getScript(url, function () {
                                i++;
                                ping();
                            });
                        }
                    };
                ping();
            });
        }
    }

}(jQuery, mediaWiki));