来自柯南百科

注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的变更的影响。

  • Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5Ctrl-R(Mac为⌘-R
  • Google Chrome:Ctrl-Shift-R(Mac为⌘-Shift-R
  • Internet Explorer或Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5
  • Opera:Ctrl-F5
(function () {
    //为编辑页增加本地草稿功能
    if (mw.config.get('wgAction') == "edit" || mw.config.get('wgAction') == "submit") {
        if (window.localStorage) {
            /* FileSaver.js
            * A saveAs() FileSaver implementation.
            * 1.3.4
            * 2018-01-12 13:14:0
            *
            * By Eli Grey, http://eligrey.com
            * License: MIT
            *   See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md
            */

            /*global self */
            /*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */

            /*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */

            var saveAs = saveAs || (function (view) {
                "use strict";
                // IE <10 is explicitly unsupported
                if (typeof view === "undefined" || typeof navigator !== "undefined" && /MSIE [1-9]\./.test(navigator.userAgent)) {
                    return;
                }
                var
                    doc = view.document
                    // only get URL when necessary in case Blob.js hasn't overridden it yet
                    , get_URL = function () {
                        return view.URL || view.webkitURL || view;
                    }
                    , save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a")
                    , can_use_save_link = "download" in save_link
                    , click = function (node) {
                        var event = new MouseEvent("click");
                        node.dispatchEvent(event);
                    }
                    , is_safari = /constructor/i.test(view.HTMLElement) || view.safari
                    , is_chrome_ios = /CriOS\/[\d]+/.test(navigator.userAgent)
                    , throw_outside = function (ex) {
                        (view.setImmediate || view.setTimeout)(function () {
                            throw ex;
                        }, 0);
                    }
                    , force_saveable_type = "application/octet-stream"
                    // the Blob API is fundamentally broken as there is no "downloadfinished" event to subscribe to
                    , arbitrary_revoke_timeout = 1000 * 40 // in ms
                    , revoke = function (file) {
                        var revoker = function () {
                            if (typeof file === "string") { // file is an object URL
                                get_URL().revokeObjectURL(file);
                            } else { // file is a File
                                file.remove();
                            }
                        };
                        setTimeout(revoker, arbitrary_revoke_timeout);
                    }
                    , dispatch = function (filesaver, event_types, event) {
                        event_types = [].concat(event_types);
                        var i = event_types.length;
                        while (i--) {
                            var listener = filesaver["on" + event_types[i]];
                            if (typeof listener === "function") {
                                try {
                                    listener.call(filesaver, event || filesaver);
                                } catch (ex) {
                                    throw_outside(ex);
                                }
                            }
                        }
                    }
                    , auto_bom = function (blob) {
                        // prepend BOM for UTF-8 XML and text/* types (including HTML)
                        // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF
                        if (/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) {
                            return new Blob([String.fromCharCode(0xFEFF), blob], { type: blob.type });
                        }
                        return blob;
                    }
                    , FileSaver = function (blob, name, no_auto_bom) {
                        if (!no_auto_bom) {
                            blob = auto_bom(blob);
                        }
                        // First try a.download, then web filesystem, then object URLs
                        var
                            filesaver = this
                            , type = blob.type
                            , force = type === force_saveable_type
                            , object_url
                            , dispatch_all = function () {
                                dispatch(filesaver, "writestart progress write writeend".split(" "));
                            }
                            // on any filesys errors revert to saving with object URLs
                            , fs_error = function () {
                                if ((is_chrome_ios || (force && is_safari)) && view.FileReader) {
                                    // Safari doesn't allow downloading of blob urls
                                    var reader = new FileReader();
                                    reader.onloadend = function () {
                                        var url = is_chrome_ios ? reader.result : reader.result.replace(/^data:[^;]*;/, 'data:attachment/file;');
                                        var popup = view.open(url, '_blank');
                                        if (!popup) view.location.href = url;
                                        url = undefined; // release reference before dispatching
                                        filesaver.readyState = filesaver.DONE;
                                        dispatch_all();
                                    };
                                    reader.readAsDataURL(blob);
                                    filesaver.readyState = filesaver.INIT;
                                    return;
                                }
                                // don't create more object URLs than needed
                                if (!object_url) {
                                    object_url = get_URL().createObjectURL(blob);
                                }
                                if (force) {
                                    view.location.href = object_url;
                                } else {
                                    var opened = view.open(object_url, "_blank");
                                    if (!opened) {
                                        // Apple does not allow window.open, see https://developer.apple.com/library/safari/documentation/Tools/Conceptual/SafariExtensionGuide/WorkingwithWindowsandTabs/WorkingwithWindowsandTabs.html
                                        view.location.href = object_url;
                                    }
                                }
                                filesaver.readyState = filesaver.DONE;
                                dispatch_all();
                                revoke(object_url);
                            }
                            ;
                        filesaver.readyState = filesaver.INIT;

                        if (can_use_save_link) {
                            object_url = get_URL().createObjectURL(blob);
                            setTimeout(function () {
                                save_link.href = object_url;
                                save_link.download = name;
                                click(save_link);
                                dispatch_all();
                                revoke(object_url);
                                filesaver.readyState = filesaver.DONE;
                            });
                            return;
                        }

                        fs_error();
                    }
                    , FS_proto = FileSaver.prototype
                    , saveAs = function (blob, name, no_auto_bom) {
                        return new FileSaver(blob, name || blob.name || "download", no_auto_bom);
                    }
                    ;
                // IE 10+ (native saveAs)
                if (typeof navigator !== "undefined" && navigator.msSaveOrOpenBlob) {
                    return function (blob, name, no_auto_bom) {
                        name = name || blob.name || "download";

                        if (!no_auto_bom) {
                            blob = auto_bom(blob);
                        }
                        return navigator.msSaveOrOpenBlob(blob, name);
                    };
                }

                FS_proto.abort = function () { };
                FS_proto.readyState = FS_proto.INIT = 0;
                FS_proto.WRITING = 1;
                FS_proto.DONE = 2;

                FS_proto.error =
                    FS_proto.onwritestart =
                    FS_proto.onprogress =
                    FS_proto.onwrite =
                    FS_proto.onabort =
                    FS_proto.onerror =
                    FS_proto.onwriteend =
                    null;

                return saveAs;
            }(
                typeof self !== "undefined" && self
                || typeof window !== "undefined" && window
                || this
            ));

            if (typeof module !== "undefined" && module.exports) {
                module.exports.saveAs = saveAs;
            } else if ((typeof define !== "undefined" && define !== null) && (define.amd !== null)) {
                define("FileSaver.js", function () {
                    return saveAs;
                });
            }
            function dateFormat(s) {
                return (s < 10 ? '0' + s : s).toString();
            }
            var storage = window.localStorage;
            $("#wpSave, #wpPreview").on("click", function () {
                storage.setItem("dataD", $("#wpTextbox1").text());
                var myDate = new Date();
                var fmDate = myDate.getFullYear().toString() + "_" + dateFormat(myDate.getMonth() + 1) + "_" + dateFormat(myDate.getDate()) + "_" + dateFormat(myDate.getHours()) + "_" + dateFormat(myDate.getMinutes()) + "_" + dateFormat(myDate.getSeconds());
                storage.setItem("dataT", fmDate);
                storage.setItem("dataP", mw.config.get( 'wgPageName' ));
            });
            if (storage.getItem("dataD") != null) {
                $(".editButtons").append('<span class="cancelLink" style="float: right;"><span id="mw-editform-savedraft" aria-disabled="false" class="oo-ui-widget oo-ui-widget-enabled oo-ui-buttonElement oo-ui-buttonElement-frameless oo-ui-labelElement oo-ui-flaggedElement-destructive oo-ui-buttonWidget"><a role="button" tabindex="0" aria-disabled="false" href="#" rel="nofollow" class="oo-ui-buttonElement-button" title="最新记录:' + storage.getItem("dataP") + "-" + storage.getItem("dataT") + '"><span class="oo-ui-iconElement-icon oo-ui-iconElement-noIcon oo-ui-image-destructive"></span><span class="oo-ui-labelElement-label" style="color: black;">找回草稿</span><span class="oo-ui-indicatorElement-indicator oo-ui-indicatorElement-noIndicator oo-ui-image-destructive"></span></a></span></span>');
                $("#mw-editform-savedraft").on("click", function () {
                    var blob = new Blob([storage.getItem("dataD")], { type: "text/plain;charset=utf-8" });
                    saveAs(blob, "柯南百科编辑草稿-" + storage.getItem("dataP") + "-" + storage.getItem("dataT") + ".txt");
                });
            }
        }
    }
}());