Spaces:
Runtime error
Runtime error
| (function e(t, n, r) { | |
| function s(o, u) { | |
| if (!n[o]) { | |
| if (!t[o]) { | |
| var a = typeof require == "function" && require; | |
| if (!u && a) return a(o, !0); | |
| if (i) return i(o, !0); | |
| var f = new Error("Cannot find module '" + o + "'"); | |
| throw f.code = "MODULE_NOT_FOUND", f; | |
| } | |
| var l = n[o] = { | |
| exports: {} | |
| }; | |
| t[o][0].call(l.exports, function(e) { | |
| var n = t[o][1][e]; | |
| return s(n ? n : e); | |
| }, l, l.exports, e, t, n, r); | |
| } | |
| return n[o].exports; | |
| } | |
| var i = typeof require == "function" && require; | |
| for (var o = 0; o < r.length; o++) s(r[o]); | |
| return s; | |
| })({ | |
| 1: [ function(require, module, exports) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| var utils_1 = require("./utils"); | |
| var UPLOAD_URL_ATTRIBUTE = "data-markdownx-upload-urls-path", PROCESSING_URL_ATTRIBUTE = "data-markdownx-urls-path", RESIZABILITY_ATTRIBUTE = "data-markdownx-editor-resizable", LATENCY_ATTRIBUTE = "data-markdownx-latency", LATENCY_MINIMUM = 500, XHR_RESPONSE_ERROR = "Invalid response", UPLOAD_START_OPACITY = "0.3", NORMAL_OPACITY = "1"; | |
| var EventHandlers = { | |
| inhibitDefault: function(event) { | |
| event.preventDefault(); | |
| event.stopPropagation(); | |
| return event; | |
| }, | |
| onDragEnter: function(event) { | |
| event.dataTransfer.dropEffect = "copy"; | |
| return EventHandlers.inhibitDefault(event); | |
| } | |
| }; | |
| var keyboardEvents = { | |
| keys: { | |
| TAB: "Tab", | |
| DUPLICATE: "d", | |
| UNINDENT: "[", | |
| INDENT: "]" | |
| }, | |
| handlers: { | |
| applyTab: function(properties) { | |
| return properties.value.substring(0, properties.start) + (properties.value.substring(properties.start, properties.end).match(/\n/gm) === null ? "\t" + properties.value.substring(properties.start) : properties.value.substring(properties.start, properties.end).replace(/^/gm, "\t") + properties.value.substring(properties.end)); | |
| }, | |
| removeTab: function(properties) { | |
| var substitution = null, lineTotal = (properties.value.substring(properties.start, properties.end).match(/\n/g) || []).length; | |
| if (properties.start === properties.end) { | |
| properties.start = properties.start > 0 && properties.value[properties.start - 1].match(/\t/) !== null ? properties.start - 1 : properties.start; | |
| substitution = properties.value.substring(properties.start).replace("\t", ""); | |
| } else if (!lineTotal) { | |
| substitution = properties.value.substring(properties.start).replace("\t", ""); | |
| } else { | |
| substitution = properties.value.substring(properties.start, properties.end).replace(/^\t/gm, "") + properties.value.substring(properties.end); | |
| } | |
| return properties.value.substring(0, properties.start) + substitution; | |
| }, | |
| _multiLineIndentation: function(properties) { | |
| var endLine = new RegExp("(?:\n|.){0," + properties.end + "}(^.*$)", "m").exec(properties.value)[1]; | |
| return properties.value.substring(properties.value.indexOf(new RegExp("(?:\n|.){0," + properties.start + "}(^.*$)", "m").exec(properties.value)[1]), properties.value.indexOf(endLine) ? properties.value.indexOf(endLine) + endLine.length : properties.end); | |
| }, | |
| applyIndentation: function(properties) { | |
| if (properties.start === properties.end) { | |
| var line = new RegExp("(?:\n|.){0," + properties.start + "}(^.+$)", "m").exec(properties.value)[1]; | |
| return properties.value.replace(line, "\t" + line); | |
| } | |
| var content = this._multiLineIndentation({ | |
| start: properties.start, | |
| end: properties.end, | |
| value: properties.value | |
| }); | |
| return properties.value.replace(content, content.replace(/(^.+$)\n*/gim, "\t$&")); | |
| }, | |
| removeIndentation: function(properties) { | |
| if (properties.start === properties.end) { | |
| var line = new RegExp("(?:\n|.){0," + properties.start + "}(^\t.+$)", "m").exec(properties.value)[1]; | |
| return properties.value.replace(line, line.substring(1)); | |
| } | |
| var content = this._multiLineIndentation({ | |
| start: properties.start, | |
| end: properties.end, | |
| value: properties.value | |
| }); | |
| return properties.value.replace(content, content.replace(/^\t(.+)\n*$/gim, "$1")); | |
| }, | |
| applyDuplication: function(properties) { | |
| if (properties.start !== properties.end) return properties.value.substring(0, properties.start) + properties.value.substring(properties.start, properties.end) + (~properties.value.charAt(properties.start - 1).indexOf("\n") || ~properties.value.charAt(properties.start).indexOf("\n") ? "\n" : "") + properties.value.substring(properties.start, properties.end) + properties.value.substring(properties.end); | |
| var pattern = new RegExp("(?:.|\n){0,160}(^.*$)", "m"), line = ""; | |
| properties.value.replace(pattern, function(match, p1) { | |
| return line += p1; | |
| }); | |
| return properties.value.replace(line, line + "\n" + line); | |
| } | |
| }, | |
| hub: function(event) { | |
| switch (event.key) { | |
| case this.keys.TAB: | |
| return event.shiftKey ? this.handlers.removeTab : this.handlers.applyTab; | |
| case this.keys.DUPLICATE: | |
| return event.ctrlKey || event.metaKey ? this.handlers.applyDuplication : false; | |
| case this.keys.INDENT: | |
| return event.ctrlKey || event.metaKey ? this.handlers.applyIndentation : false; | |
| case this.keys.UNINDENT: | |
| return event.ctrlKey || event.metaKey ? this.handlers.removeIndentation : false; | |
| default: | |
| return false; | |
| } | |
| } | |
| }; | |
| function getHeight(element) { | |
| return Math.max(parseInt(window.getComputedStyle(element).height), parseInt(element.style.height) || 0); | |
| } | |
| function updateHeight(editor) { | |
| if (editor.scrollTop) editor.style.height = editor.scrollTop + getHeight(editor) + "px"; | |
| return editor; | |
| } | |
| var MarkdownX = function(parent, editor, preview) { | |
| var _this = this; | |
| var properties = { | |
| editor: editor, | |
| preview: preview, | |
| parent: parent, | |
| _latency: null, | |
| _editorIsResizable: null | |
| }; | |
| var _initialize = function() { | |
| _this.timeout = null; | |
| var documentListeners = { | |
| object: document, | |
| listeners: [ { | |
| type: "drop", | |
| capture: false, | |
| listener: EventHandlers.inhibitDefault | |
| }, { | |
| type: "dragover", | |
| capture: false, | |
| listener: EventHandlers.inhibitDefault | |
| }, { | |
| type: "dragenter", | |
| capture: false, | |
| listener: EventHandlers.inhibitDefault | |
| }, { | |
| type: "dragleave", | |
| capture: false, | |
| listener: EventHandlers.inhibitDefault | |
| } ] | |
| }, editorListeners = { | |
| object: properties.editor, | |
| listeners: [ { | |
| type: "drop", | |
| capture: false, | |
| listener: onDrop | |
| }, { | |
| type: "input", | |
| capture: true, | |
| listener: inputChanged | |
| }, { | |
| type: "keydown", | |
| capture: true, | |
| listener: onKeyDown | |
| }, { | |
| type: "dragover", | |
| capture: false, | |
| listener: EventHandlers.onDragEnter | |
| }, { | |
| type: "dragenter", | |
| capture: false, | |
| listener: EventHandlers.onDragEnter | |
| }, { | |
| type: "dragleave", | |
| capture: false, | |
| listener: EventHandlers.inhibitDefault | |
| }, { | |
| type: "compositionstart", | |
| capture: true, | |
| listener: onKeyDown | |
| } ] | |
| }; | |
| utils_1.mountEvents(editorListeners, documentListeners); | |
| properties.editor.setAttribute("data-markdownx-init", ""); | |
| properties.editor.style.transition = "opacity 1s ease"; | |
| properties.editor.style.webkitTransition = "opacity 1s ease"; | |
| properties._latency = Math.max(parseInt(properties.editor.getAttribute(LATENCY_ATTRIBUTE)) || 0, LATENCY_MINIMUM); | |
| properties._editorIsResizable = (properties.editor.getAttribute(RESIZABILITY_ATTRIBUTE).match(/true/i) || []).length > 0 && properties.editor.offsetHeight > 0 && properties.editor.offsetWidth > 0; | |
| getMarkdown(); | |
| utils_1.triggerCustomEvent("markdownx.init"); | |
| }; | |
| var _markdownify = function() { | |
| clearTimeout(_this.timeout); | |
| _this.timeout = setTimeout(getMarkdown, properties._latency); | |
| }; | |
| var inputChanged = function() { | |
| properties.editor = properties._editorIsResizable ? updateHeight(properties.editor) : properties.editor; | |
| return _markdownify(); | |
| }; | |
| var onDrop = function(event) { | |
| if (event.dataTransfer && event.dataTransfer.files.length) Object.keys(event.dataTransfer.files).map(function(fileKey) { | |
| return sendFile(event.dataTransfer.files[fileKey]); | |
| }); | |
| EventHandlers.inhibitDefault(event); | |
| }; | |
| var onKeyDown = function(event) { | |
| var handlerFunc = keyboardEvents.hub(event); | |
| if (typeof handlerFunc != "function") return false; | |
| EventHandlers.inhibitDefault(event); | |
| var SELECTION_START = properties.editor.selectionStart; | |
| properties.editor.value = handlerFunc({ | |
| start: properties.editor.selectionStart, | |
| end: properties.editor.selectionEnd, | |
| value: properties.editor.value | |
| }); | |
| _markdownify(); | |
| properties.editor.focus(); | |
| properties.editor.selectionEnd = properties.editor.selectionStart = SELECTION_START; | |
| return false; | |
| }; | |
| var sendFile = function(file) { | |
| properties.editor.style.opacity = UPLOAD_START_OPACITY; | |
| var xhr = new utils_1.Request(properties.editor.getAttribute(UPLOAD_URL_ATTRIBUTE), utils_1.preparePostData({ | |
| image: file | |
| })); | |
| xhr.success = function(resp) { | |
| var response = JSON.parse(resp); | |
| if (response.image_code) { | |
| insertImage(response.image_code); | |
| utils_1.triggerCustomEvent("markdownx.fileUploadEnd", properties.parent, [ response ]); | |
| } else if (response.image_path) { | |
| insertImage(''); | |
| utils_1.triggerCustomEvent("markdownx.fileUploadEnd", properties.parent, [ response ]); | |
| } else { | |
| console.error(XHR_RESPONSE_ERROR, response); | |
| utils_1.triggerCustomEvent("markdownx.fileUploadError", properties.parent, [ response ]); | |
| insertImage(XHR_RESPONSE_ERROR); | |
| } | |
| properties.editor.style.opacity = NORMAL_OPACITY; | |
| }; | |
| xhr.error = function(response) { | |
| console.error(response); | |
| utils_1.triggerCustomEvent("fileUploadError", properties.parent, [ response ]); | |
| insertImage(XHR_RESPONSE_ERROR); | |
| properties.editor.style.opacity = NORMAL_OPACITY; | |
| }; | |
| return xhr.send(); | |
| }; | |
| var getMarkdown = function() { | |
| var xhr = new utils_1.Request(properties.editor.getAttribute(PROCESSING_URL_ATTRIBUTE), utils_1.preparePostData({ | |
| content: properties.editor.value | |
| })); | |
| xhr.success = function(response) { | |
| properties.preview.innerHTML = response; | |
| properties.editor = updateHeight(properties.editor); | |
| utils_1.triggerCustomEvent("markdownx.update", properties.parent, [ response ]); | |
| }; | |
| xhr.error = function(response) { | |
| console.error(response); | |
| utils_1.triggerCustomEvent("markdownx.updateError", properties.parent, [ response ]); | |
| }; | |
| return xhr.send(); | |
| }; | |
| var insertImage = function(textToInsert) { | |
| properties.editor.value = "" + properties.editor.value.substring(0, properties.editor.selectionStart) + textToInsert + ("" + properties.editor.value.substring(properties.editor.selectionEnd)); | |
| properties.editor.selectionStart = properties.editor.selectionEnd = properties.editor.selectionStart + textToInsert.length; | |
| utils_1.triggerEvent(properties.editor, "keyup"); | |
| inputChanged(); | |
| }; | |
| _initialize(); | |
| }; | |
| exports.MarkdownX = MarkdownX; | |
| (function(funcName, baseObj) { | |
| funcName = funcName || "docReady"; | |
| baseObj = baseObj || window; | |
| var readyList = [], readyFired = false, readyEventHandlersInstalled = false; | |
| var ready = function() { | |
| if (!readyFired) { | |
| readyFired = true; | |
| readyList.map(function(ready) { | |
| return ready.fn.call(window, ready.ctx); | |
| }); | |
| readyList = []; | |
| } | |
| }; | |
| var readyStateChange = function() { | |
| return document.readyState === "complete" ? ready() : null; | |
| }; | |
| baseObj[funcName] = function(callback, context) { | |
| if (readyFired) { | |
| setTimeout(function() { | |
| return callback(context); | |
| }, 1); | |
| return; | |
| } else { | |
| readyList.push({ | |
| fn: callback, | |
| ctx: context | |
| }); | |
| } | |
| if (document.readyState === "complete") { | |
| setTimeout(ready, 1); | |
| } else if (!readyEventHandlersInstalled) { | |
| document.addEventListener("DOMContentLoaded", ready, false); | |
| window.addEventListener("load", ready, false); | |
| readyEventHandlersInstalled = true; | |
| } | |
| }; | |
| })("docReady", window); | |
| docReady(function() { | |
| var ELEMENTS = document.getElementsByClassName("markdownx"); | |
| return Object.keys(ELEMENTS).map(function(key) { | |
| var element = ELEMENTS[key], editor = element.querySelector(".markdownx-editor"), preview = element.querySelector(".markdownx-preview"); | |
| if (!editor.hasAttribute("data-markdownx-init")) return new MarkdownX(element, editor, preview); | |
| }); | |
| }); | |
| }, { | |
| "./utils": 2 | |
| } ], | |
| 2: [ function(require, module, exports) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| function getCookie(name) { | |
| if (document.cookie && document.cookie.length) { | |
| var cookies = document.cookie.split(";").filter(function(cookie) { | |
| return cookie.indexOf(name + "=") !== -1; | |
| })[0]; | |
| try { | |
| return decodeURIComponent(cookies.trim().substring(name.length + 1)); | |
| } catch (e) { | |
| if (e instanceof TypeError) { | |
| console.info('No cookie with key "' + name + '". Wrong name?'); | |
| return null; | |
| } | |
| throw e; | |
| } | |
| } | |
| return null; | |
| } | |
| exports.getCookie = getCookie; | |
| function zip() { | |
| var rows = []; | |
| for (var _i = 0; _i < arguments.length; _i++) { | |
| rows[_i] = arguments[_i]; | |
| } | |
| if (rows[0].constructor == Array) return rows[0].slice().map(function(_, c) { | |
| return rows.map(function(row) { | |
| return row[c]; | |
| }); | |
| }); | |
| var asArray = rows.map(function(row) { | |
| return Object.keys(row).map(function(key) { | |
| return row[key]; | |
| }); | |
| }); | |
| return asArray[0].slice().map(function(_, c) { | |
| return asArray.map(function(row) { | |
| return row[c]; | |
| }); | |
| }); | |
| } | |
| exports.zip = zip; | |
| function mountEvents() { | |
| var collections = []; | |
| for (var _i = 0; _i < arguments.length; _i++) { | |
| collections[_i] = arguments[_i]; | |
| } | |
| return collections.map(function(events) { | |
| return events.listeners.map(function(series) { | |
| return events.object.addEventListener(series.type, series.listener, series.capture); | |
| }); | |
| }); | |
| } | |
| exports.mountEvents = mountEvents; | |
| function preparePostData(data, csrf) { | |
| if (csrf === void 0) { | |
| csrf = true; | |
| } | |
| var form = new FormData(); | |
| if (csrf) { | |
| var csrfToken = getCookie("csrftoken"); | |
| if (!csrfToken) csrfToken = document.querySelector("input[name='csrfmiddlewaretoken']").value; | |
| form.append("csrfmiddlewaretoken", csrfToken); | |
| } | |
| Object.keys(data).map(function(key) { | |
| return form.append(key, data[key]); | |
| }); | |
| return form; | |
| } | |
| exports.preparePostData = preparePostData; | |
| function AJAXRequest() { | |
| if ("XMLHttpRequest" in window) return new XMLHttpRequest(); | |
| try { | |
| return new ActiveXObject("Msxml2.XMLHTTP.6.0"); | |
| } catch (e) {} | |
| try { | |
| return new ActiveXObject("Msxml2.XMLHTTP.3.0"); | |
| } catch (e) {} | |
| try { | |
| return new ActiveXObject("Microsoft.XMLHTTP"); | |
| } catch (e) {} | |
| alert("Your browser belongs to history!"); | |
| throw new TypeError("This browser does not support AJAX requests."); | |
| } | |
| var Request = function() { | |
| function Request(url, data) { | |
| this.xhr = AJAXRequest(); | |
| this.url = url; | |
| this.data = data; | |
| } | |
| Request.prototype.progress = function(event) { | |
| if (event.lengthComputable) {} | |
| }; | |
| Request.prototype.error = function(response) { | |
| console.error(response); | |
| }; | |
| Request.prototype.success = function(response) { | |
| console.info(response); | |
| }; | |
| Request.prototype.send = function() { | |
| var _this = this; | |
| var SUCCESS = this.success, ERROR = this.error, PROGRESS = this.progress; | |
| this.xhr.open("POST", this.url, true); | |
| this.xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); | |
| this.xhr.upload.onprogress = function(event) { | |
| return PROGRESS(event); | |
| }; | |
| this.xhr.onerror = function(event) { | |
| ERROR(_this.xhr.responseText); | |
| }; | |
| this.xhr.onload = function(event) { | |
| var data = null; | |
| if (_this.xhr.readyState == XMLHttpRequest.DONE) { | |
| if (!_this.xhr.responseType || _this.xhr.responseType === "text") { | |
| data = _this.xhr.responseText; | |
| } else if (_this.xhr.responseType === "document") { | |
| data = _this.xhr.responseXML; | |
| } else { | |
| data = _this.xhr.response; | |
| } | |
| } | |
| SUCCESS(data); | |
| }; | |
| this.xhr.send(this.data); | |
| }; | |
| return Request; | |
| }(); | |
| exports.Request = Request; | |
| function triggerEvent(element, type) { | |
| var event = document.createEvent("HTMLEvents"); | |
| event.initEvent(type, false, true); | |
| element.dispatchEvent(event); | |
| } | |
| exports.triggerEvent = triggerEvent; | |
| function triggerCustomEvent(type, element, args) { | |
| if (element === void 0) { | |
| element = document; | |
| } | |
| if (args === void 0) { | |
| args = null; | |
| } | |
| var event = new CustomEvent(type, { | |
| detail: args | |
| }); | |
| element.dispatchEvent(event); | |
| } | |
| exports.triggerCustomEvent = triggerCustomEvent; | |
| function addClass(element) { | |
| var className = []; | |
| for (var _i = 1; _i < arguments.length; _i++) { | |
| className[_i - 1] = arguments[_i]; | |
| } | |
| className.map(function(cname) { | |
| if (element.classList) element.classList.add(cname); else { | |
| var classes = element.className.split(" "); | |
| if (classes.indexOf(cname) < 0) classes.push(cname); | |
| element.className = classes.join(" "); | |
| } | |
| }); | |
| } | |
| exports.addClass = addClass; | |
| function removeClass(element) { | |
| var className = []; | |
| for (var _i = 1; _i < arguments.length; _i++) { | |
| className[_i - 1] = arguments[_i]; | |
| } | |
| className.map(function(cname) { | |
| if (element.classList) element.classList.remove(cname); else { | |
| var classes = element.className.split(" "), idx = classes.indexOf(cname); | |
| if (idx > -1) classes.splice(idx, 1); | |
| element.className = classes.join(" "); | |
| } | |
| }); | |
| } | |
| exports.removeClass = removeClass; | |
| }, {} ] | |
| }, {}, [ 1 ]); |