diff --git a/CTFd/themes/admin/assets/js/pages/editor.js b/CTFd/themes/admin/assets/js/pages/editor.js index 173d7f9e..34ae44d8 100644 --- a/CTFd/themes/admin/assets/js/pages/editor.js +++ b/CTFd/themes/admin/assets/js/pages/editor.js @@ -195,7 +195,7 @@ function preview_page() { } function upload_media() { - helpers.files.upload($("#media-library-upload"), function(data) { + helpers.files.upload($("#media-library-upload"), {}, function(data) { refresh_files(); }); } diff --git a/CTFd/themes/admin/static/js/pages/editor.dev.js b/CTFd/themes/admin/static/js/pages/editor.dev.js index 2c5e56b9..96c02339 100644 --- a/CTFd/themes/admin/static/js/pages/editor.dev.js +++ b/CTFd/themes/admin/static/js/pages/editor.dev.js @@ -162,7 +162,7 @@ /***/ (function(module, exports, __webpack_require__) { ; -eval("\n\n__webpack_require__(/*! ./main */ \"./CTFd/themes/admin/assets/js/pages/main.js\");\n\n__webpack_require__(/*! core/utils */ \"./CTFd/themes/core/assets/js/utils.js\");\n\nvar _jquery = _interopRequireDefault(__webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\"));\n\nvar _CTFd = _interopRequireDefault(__webpack_require__(/*! core/CTFd */ \"./CTFd/themes/core/assets/js/CTFd.js\"));\n\nvar _helpers = _interopRequireDefault(__webpack_require__(/*! core/helpers */ \"./CTFd/themes/core/assets/js/helpers.js\"));\n\nvar _codemirror = _interopRequireDefault(__webpack_require__(/*! codemirror */ \"./node_modules/codemirror/lib/codemirror.js\"));\n\nvar _ezq = __webpack_require__(/*! core/ezq */ \"./CTFd/themes/core/assets/js/ezq.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction get_filetype_icon_class(filename) {\n var mapping = {\n // Image Files\n png: \"fa-file-image\",\n jpg: \"fa-file-image\",\n jpeg: \"fa-file-image\",\n gif: \"fa-file-image\",\n bmp: \"fa-file-image\",\n svg: \"fa-file-image\",\n // Text Files\n txt: \"fa-file-alt\",\n // Video Files\n mov: \"fa-file-video\",\n mp4: \"fa-file-video\",\n wmv: \"fa-file-video\",\n flv: \"fa-file-video\",\n mkv: \"fa-file-video\",\n avi: \"fa-file-video\",\n // PDF Files\n pdf: \"fa-file-pdf\",\n // Audio Files\n mp3: \"fa-file-sound\",\n wav: \"fa-file-sound\",\n aac: \"fa-file-sound\",\n // Archive Files\n zip: \"fa-file-archive\",\n gz: \"fa-file-archive\",\n tar: \"fa-file-archive\",\n \"7z\": \"fa-file-archive\",\n rar: \"fa-file-archive\",\n // Code Files\n py: \"fa-file-code\",\n c: \"fa-file-code\",\n cpp: \"fa-file-code\",\n html: \"fa-file-code\",\n js: \"fa-file-code\",\n rb: \"fa-file-code\",\n go: \"fa-file-code\"\n };\n var ext = filename.split(\".\").pop();\n return mapping[ext];\n}\n\nfunction get_page_files() {\n return _CTFd.default.fetch(\"/api/v1/files?type=page\", {\n credentials: \"same-origin\"\n }).then(function (response) {\n return response.json();\n });\n}\n\nfunction show_files(data) {\n var list = (0, _jquery.default)(\"#media-library-list\");\n list.empty();\n\n for (var i = 0; i < data.length; i++) {\n var f = data[i];\n var fname = f.location.split(\"/\").pop();\n var ext = get_filetype_icon_class(f.location);\n var wrapper = (0, _jquery.default)(\"
\").attr(\"class\", \"media-item-wrapper\");\n var link = (0, _jquery.default)(\"\");\n link.attr(\"href\", \"##\");\n\n if (ext === undefined) {\n link.append(' '.format(ext));\n } else {\n link.append(' '.format(ext));\n }\n\n link.append((0, _jquery.default)(\"\").attr(\"class\", \"media-item-title\").text(fname));\n link.click(function (e) {\n var media_div = (0, _jquery.default)(this).parent();\n var icon = (0, _jquery.default)(this).find(\"i\")[0];\n var f_loc = media_div.attr(\"data-location\");\n var fname = media_div.attr(\"data-filename\");\n var f_id = media_div.attr(\"data-id\");\n (0, _jquery.default)(\"#media-delete\").attr(\"data-id\", f_id);\n (0, _jquery.default)(\"#media-link\").val(f_loc);\n (0, _jquery.default)(\"#media-filename\").html((0, _jquery.default)(\"\").attr(\"href\", f_loc).attr(\"target\", \"_blank\").text(fname));\n (0, _jquery.default)(\"#media-icon\").empty();\n\n if ((0, _jquery.default)(icon).hasClass(\"fa-file-image\")) {\n (0, _jquery.default)(\"#media-icon\").append((0, _jquery.default)(\"\").attr(\"src\", f_loc).css({\n \"max-width\": \"100%\",\n \"max-height\": \"100%\",\n \"object-fit\": \"contain\"\n }));\n } else {\n // icon is empty so we need to pull outerHTML\n var copy_icon = (0, _jquery.default)(icon).clone();\n (0, _jquery.default)(copy_icon).addClass(\"fa-4x\");\n (0, _jquery.default)(\"#media-icon\").append(copy_icon);\n }\n\n (0, _jquery.default)(\"#media-item\").show();\n });\n wrapper.append(link);\n wrapper.attr(\"data-location\", _CTFd.default.config.urlRoot + \"/files/\" + f.location);\n wrapper.attr(\"data-id\", f.id);\n wrapper.attr(\"data-filename\", fname);\n list.append(wrapper);\n }\n}\n\nfunction refresh_files(cb) {\n get_page_files().then(function (response) {\n var data = response.data;\n show_files(data);\n\n if (cb) {\n cb();\n }\n });\n}\n\nfunction insert_at_cursor(editor, text) {\n var doc = editor.getDoc();\n var cursor = doc.getCursor();\n doc.replaceRange(text, cursor);\n}\n\nfunction submit_form() {\n // Save the CodeMirror data to the Textarea\n window.editor.save();\n var params = (0, _jquery.default)(\"#page-edit\").serializeJSON();\n var target = \"/api/v1/pages\";\n var method = \"POST\";\n\n if (params.id) {\n target += \"/\" + params.id;\n method = \"PATCH\";\n }\n\n _CTFd.default.fetch(target, {\n method: method,\n credentials: \"same-origin\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify(params)\n }).then(function (response) {\n return response.json();\n }).then(function (response) {\n if (method === \"PATCH\" && response.success) {\n (0, _ezq.ezToast)({\n title: \"Saved\",\n body: \"Your changes have been saved\"\n });\n } else {\n window.location = _CTFd.default.config.urlRoot + \"/admin/pages/\" + response.data.id;\n }\n });\n}\n\nfunction preview_page() {\n editor.save(); // Save the CodeMirror data to the Textarea\n\n (0, _jquery.default)(\"#page-edit\").attr(\"action\", _CTFd.default.config.urlRoot + \"/admin/pages/preview\");\n (0, _jquery.default)(\"#page-edit\").attr(\"target\", \"_blank\");\n (0, _jquery.default)(\"#page-edit\").submit();\n}\n\nfunction upload_media() {\n _helpers.default.files.upload((0, _jquery.default)(\"#media-library-upload\"), function (data) {\n refresh_files();\n });\n}\n\n(0, _jquery.default)(function () {\n window.editor = _codemirror.default.fromTextArea(document.getElementById(\"admin-pages-editor\"), {\n lineNumbers: true,\n lineWrapping: true,\n mode: \"xml\",\n htmlMode: true\n });\n (0, _jquery.default)(\"#media-insert\").click(function (e) {\n var tag = \"\";\n\n try {\n tag = (0, _jquery.default)(\"#media-icon\").children()[0].nodeName.toLowerCase();\n } catch (err) {\n tag = \"\";\n }\n\n var link = (0, _jquery.default)(\"#media-link\").val();\n var fname = (0, _jquery.default)(\"#media-filename\").text();\n var entry = null;\n\n if (tag === \"img\") {\n entry = \"![{0}]({1})\".format(fname, link);\n } else {\n entry = \"[{0}]({1})\".format(fname, link);\n }\n\n insert_at_cursor(editor, entry);\n });\n (0, _jquery.default)(\"#media-download\").click(function (e) {\n var link = (0, _jquery.default)(\"#media-link\").val();\n window.open(link, \"_blank\");\n });\n (0, _jquery.default)(\"#media-delete\").click(function (e) {\n var file_id = (0, _jquery.default)(this).attr(\"data-id\");\n (0, _ezq.ezQuery)({\n title: \"Delete File?\",\n body: \"Are you sure you want to delete this file?\",\n success: function success() {\n _CTFd.default.fetch(\"/api/v1/files/\" + file_id, {\n method: \"DELETE\",\n credentials: \"same-origin\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\"\n }\n }).then(function (response) {\n if (response.status === 200) {\n response.json().then(function (object) {\n if (object.success) {\n refresh_files();\n }\n });\n }\n });\n }\n });\n });\n (0, _jquery.default)(\"#save-page\").click(function (e) {\n e.preventDefault();\n submit_form();\n });\n (0, _jquery.default)(\"#media-button\").click(function () {\n (0, _jquery.default)(\"#media-library-list\").empty();\n refresh_files(function () {\n (0, _jquery.default)(\"#media-modal\").modal();\n });\n });\n (0, _jquery.default)(\".media-upload-button\").click(function () {\n upload_media();\n });\n (0, _jquery.default)(\".preview-page\").click(function () {\n preview_page();\n });\n});\n\n//# sourceURL=webpack:///./CTFd/themes/admin/assets/js/pages/editor.js?"); +eval("\n\n__webpack_require__(/*! ./main */ \"./CTFd/themes/admin/assets/js/pages/main.js\");\n\n__webpack_require__(/*! core/utils */ \"./CTFd/themes/core/assets/js/utils.js\");\n\nvar _jquery = _interopRequireDefault(__webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\"));\n\nvar _CTFd = _interopRequireDefault(__webpack_require__(/*! core/CTFd */ \"./CTFd/themes/core/assets/js/CTFd.js\"));\n\nvar _helpers = _interopRequireDefault(__webpack_require__(/*! core/helpers */ \"./CTFd/themes/core/assets/js/helpers.js\"));\n\nvar _codemirror = _interopRequireDefault(__webpack_require__(/*! codemirror */ \"./node_modules/codemirror/lib/codemirror.js\"));\n\nvar _ezq = __webpack_require__(/*! core/ezq */ \"./CTFd/themes/core/assets/js/ezq.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction get_filetype_icon_class(filename) {\n var mapping = {\n // Image Files\n png: \"fa-file-image\",\n jpg: \"fa-file-image\",\n jpeg: \"fa-file-image\",\n gif: \"fa-file-image\",\n bmp: \"fa-file-image\",\n svg: \"fa-file-image\",\n // Text Files\n txt: \"fa-file-alt\",\n // Video Files\n mov: \"fa-file-video\",\n mp4: \"fa-file-video\",\n wmv: \"fa-file-video\",\n flv: \"fa-file-video\",\n mkv: \"fa-file-video\",\n avi: \"fa-file-video\",\n // PDF Files\n pdf: \"fa-file-pdf\",\n // Audio Files\n mp3: \"fa-file-sound\",\n wav: \"fa-file-sound\",\n aac: \"fa-file-sound\",\n // Archive Files\n zip: \"fa-file-archive\",\n gz: \"fa-file-archive\",\n tar: \"fa-file-archive\",\n \"7z\": \"fa-file-archive\",\n rar: \"fa-file-archive\",\n // Code Files\n py: \"fa-file-code\",\n c: \"fa-file-code\",\n cpp: \"fa-file-code\",\n html: \"fa-file-code\",\n js: \"fa-file-code\",\n rb: \"fa-file-code\",\n go: \"fa-file-code\"\n };\n var ext = filename.split(\".\").pop();\n return mapping[ext];\n}\n\nfunction get_page_files() {\n return _CTFd.default.fetch(\"/api/v1/files?type=page\", {\n credentials: \"same-origin\"\n }).then(function (response) {\n return response.json();\n });\n}\n\nfunction show_files(data) {\n var list = (0, _jquery.default)(\"#media-library-list\");\n list.empty();\n\n for (var i = 0; i < data.length; i++) {\n var f = data[i];\n var fname = f.location.split(\"/\").pop();\n var ext = get_filetype_icon_class(f.location);\n var wrapper = (0, _jquery.default)(\"
\").attr(\"class\", \"media-item-wrapper\");\n var link = (0, _jquery.default)(\"\");\n link.attr(\"href\", \"##\");\n\n if (ext === undefined) {\n link.append(' '.format(ext));\n } else {\n link.append(' '.format(ext));\n }\n\n link.append((0, _jquery.default)(\"\").attr(\"class\", \"media-item-title\").text(fname));\n link.click(function (e) {\n var media_div = (0, _jquery.default)(this).parent();\n var icon = (0, _jquery.default)(this).find(\"i\")[0];\n var f_loc = media_div.attr(\"data-location\");\n var fname = media_div.attr(\"data-filename\");\n var f_id = media_div.attr(\"data-id\");\n (0, _jquery.default)(\"#media-delete\").attr(\"data-id\", f_id);\n (0, _jquery.default)(\"#media-link\").val(f_loc);\n (0, _jquery.default)(\"#media-filename\").html((0, _jquery.default)(\"\").attr(\"href\", f_loc).attr(\"target\", \"_blank\").text(fname));\n (0, _jquery.default)(\"#media-icon\").empty();\n\n if ((0, _jquery.default)(icon).hasClass(\"fa-file-image\")) {\n (0, _jquery.default)(\"#media-icon\").append((0, _jquery.default)(\"\").attr(\"src\", f_loc).css({\n \"max-width\": \"100%\",\n \"max-height\": \"100%\",\n \"object-fit\": \"contain\"\n }));\n } else {\n // icon is empty so we need to pull outerHTML\n var copy_icon = (0, _jquery.default)(icon).clone();\n (0, _jquery.default)(copy_icon).addClass(\"fa-4x\");\n (0, _jquery.default)(\"#media-icon\").append(copy_icon);\n }\n\n (0, _jquery.default)(\"#media-item\").show();\n });\n wrapper.append(link);\n wrapper.attr(\"data-location\", _CTFd.default.config.urlRoot + \"/files/\" + f.location);\n wrapper.attr(\"data-id\", f.id);\n wrapper.attr(\"data-filename\", fname);\n list.append(wrapper);\n }\n}\n\nfunction refresh_files(cb) {\n get_page_files().then(function (response) {\n var data = response.data;\n show_files(data);\n\n if (cb) {\n cb();\n }\n });\n}\n\nfunction insert_at_cursor(editor, text) {\n var doc = editor.getDoc();\n var cursor = doc.getCursor();\n doc.replaceRange(text, cursor);\n}\n\nfunction submit_form() {\n // Save the CodeMirror data to the Textarea\n window.editor.save();\n var params = (0, _jquery.default)(\"#page-edit\").serializeJSON();\n var target = \"/api/v1/pages\";\n var method = \"POST\";\n\n if (params.id) {\n target += \"/\" + params.id;\n method = \"PATCH\";\n }\n\n _CTFd.default.fetch(target, {\n method: method,\n credentials: \"same-origin\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify(params)\n }).then(function (response) {\n return response.json();\n }).then(function (response) {\n if (method === \"PATCH\" && response.success) {\n (0, _ezq.ezToast)({\n title: \"Saved\",\n body: \"Your changes have been saved\"\n });\n } else {\n window.location = _CTFd.default.config.urlRoot + \"/admin/pages/\" + response.data.id;\n }\n });\n}\n\nfunction preview_page() {\n editor.save(); // Save the CodeMirror data to the Textarea\n\n (0, _jquery.default)(\"#page-edit\").attr(\"action\", _CTFd.default.config.urlRoot + \"/admin/pages/preview\");\n (0, _jquery.default)(\"#page-edit\").attr(\"target\", \"_blank\");\n (0, _jquery.default)(\"#page-edit\").submit();\n}\n\nfunction upload_media() {\n _helpers.default.files.upload((0, _jquery.default)(\"#media-library-upload\"), {}, function (data) {\n refresh_files();\n });\n}\n\n(0, _jquery.default)(function () {\n window.editor = _codemirror.default.fromTextArea(document.getElementById(\"admin-pages-editor\"), {\n lineNumbers: true,\n lineWrapping: true,\n mode: \"xml\",\n htmlMode: true\n });\n (0, _jquery.default)(\"#media-insert\").click(function (e) {\n var tag = \"\";\n\n try {\n tag = (0, _jquery.default)(\"#media-icon\").children()[0].nodeName.toLowerCase();\n } catch (err) {\n tag = \"\";\n }\n\n var link = (0, _jquery.default)(\"#media-link\").val();\n var fname = (0, _jquery.default)(\"#media-filename\").text();\n var entry = null;\n\n if (tag === \"img\") {\n entry = \"![{0}]({1})\".format(fname, link);\n } else {\n entry = \"[{0}]({1})\".format(fname, link);\n }\n\n insert_at_cursor(editor, entry);\n });\n (0, _jquery.default)(\"#media-download\").click(function (e) {\n var link = (0, _jquery.default)(\"#media-link\").val();\n window.open(link, \"_blank\");\n });\n (0, _jquery.default)(\"#media-delete\").click(function (e) {\n var file_id = (0, _jquery.default)(this).attr(\"data-id\");\n (0, _ezq.ezQuery)({\n title: \"Delete File?\",\n body: \"Are you sure you want to delete this file?\",\n success: function success() {\n _CTFd.default.fetch(\"/api/v1/files/\" + file_id, {\n method: \"DELETE\",\n credentials: \"same-origin\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\"\n }\n }).then(function (response) {\n if (response.status === 200) {\n response.json().then(function (object) {\n if (object.success) {\n refresh_files();\n }\n });\n }\n });\n }\n });\n });\n (0, _jquery.default)(\"#save-page\").click(function (e) {\n e.preventDefault();\n submit_form();\n });\n (0, _jquery.default)(\"#media-button\").click(function () {\n (0, _jquery.default)(\"#media-library-list\").empty();\n refresh_files(function () {\n (0, _jquery.default)(\"#media-modal\").modal();\n });\n });\n (0, _jquery.default)(\".media-upload-button\").click(function () {\n upload_media();\n });\n (0, _jquery.default)(\".preview-page\").click(function () {\n preview_page();\n });\n});\n\n//# sourceURL=webpack:///./CTFd/themes/admin/assets/js/pages/editor.js?"); /***/ }) diff --git a/CTFd/themes/admin/static/js/pages/editor.min.js b/CTFd/themes/admin/static/js/pages/editor.min.js index 34a639d8..8bab88e7 100644 --- a/CTFd/themes/admin/static/js/pages/editor.min.js +++ b/CTFd/themes/admin/static/js/pages/editor.min.js @@ -1 +1 @@ -!function(r){function e(e){for(var t,o,n=e[0],s=e[1],a=e[2],i=0,l=[];i").attr("class","media-item-wrapper"),l=(0,r.default)("");l.attr("href","##"),void 0===a?l.append(' '.format(a)):l.append(' '.format(a)),l.append((0,r.default)("").attr("class","media-item-title").text(s)),l.click(function(e){var t=(0,r.default)(this).parent(),o=(0,r.default)(this).find("i")[0],n=t.attr("data-location"),s=t.attr("data-filename"),a=t.attr("data-id");if((0,r.default)("#media-delete").attr("data-id",a),(0,r.default)("#media-link").val(n),(0,r.default)("#media-filename").html((0,r.default)("").attr("href",n).attr("target","_blank").text(s)),(0,r.default)("#media-icon").empty(),(0,r.default)(o).hasClass("fa-file-image"))(0,r.default)("#media-icon").append((0,r.default)("").attr("src",n).css({"max-width":"100%","max-height":"100%","object-fit":"contain"}));else{var i=(0,r.default)(o).clone();(0,r.default)(i).addClass("fa-4x"),(0,r.default)("#media-icon").append(i)}(0,r.default)("#media-item").show()}),i.append(l),i.attr("data-location",d.default.config.urlRoot+"/files/"+n.location),i.attr("data-id",n.id),i.attr("data-filename",s),t.append(i)}}(e.data),t&&t()})}(0,r.default)(function(){window.editor=s.default.fromTextArea(document.getElementById("admin-pages-editor"),{lineNumbers:!0,lineWrapping:!0,mode:"xml",htmlMode:!0}),(0,r.default)("#media-insert").click(function(e){var t="";try{t=(0,r.default)("#media-icon").children()[0].nodeName.toLowerCase()}catch(e){t=""}var o=(0,r.default)("#media-link").val(),n=(0,r.default)("#media-filename").text(),s=null;s="img"===t?"![{0}]({1})".format(n,o):"[{0}]({1})".format(n,o),function(e,t){var o=e.getDoc(),n=o.getCursor();o.replaceRange(t,n)}(editor,s)}),(0,r.default)("#media-download").click(function(e){var t=(0,r.default)("#media-link").val();window.open(t,"_blank")}),(0,r.default)("#media-delete").click(function(e){var t=(0,r.default)(this).attr("data-id");(0,a.ezQuery)({title:"Delete File?",body:"Are you sure you want to delete this file?",success:function(){d.default.fetch("/api/v1/files/"+t,{method:"DELETE",credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json"}}).then(function(e){200===e.status&&e.json().then(function(e){e.success&&l()})})}})}),(0,r.default)("#save-page").click(function(e){e.preventDefault(),function(){window.editor.save();var e=(0,r.default)("#page-edit").serializeJSON(),t="/api/v1/pages",o="POST";e.id&&(t+="/"+e.id,o="PATCH"),d.default.fetch(t,{method:o,credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(e)}).then(function(e){return e.json()}).then(function(e){"PATCH"===o&&e.success?(0,a.ezToast)({title:"Saved",body:"Your changes have been saved"}):window.location=d.default.config.urlRoot+"/admin/pages/"+e.data.id})}()}),(0,r.default)("#media-button").click(function(){(0,r.default)("#media-library-list").empty(),l(function(){(0,r.default)("#media-modal").modal()})}),(0,r.default)(".media-upload-button").click(function(){n.default.files.upload((0,r.default)("#media-library-upload"),function(e){l()})}),(0,r.default)(".preview-page").click(function(){editor.save(),(0,r.default)("#page-edit").attr("action",d.default.config.urlRoot+"/admin/pages/preview"),(0,r.default)("#page-edit").attr("target","_blank"),(0,r.default)("#page-edit").submit()})})},"./CTFd/themes/admin/assets/js/pages/main.js":function(e,t,o){var n=u(o("./CTFd/themes/core/assets/js/CTFd.js")),s=u(o("./node_modules/jquery/dist/jquery.js")),a=u(o("./node_modules/moment/moment.js")),i=u(o("./node_modules/nunjucks/browser/nunjucks.js")),l=o("./node_modules/howler/dist/howler.js"),r=u(o("./CTFd/themes/core/assets/js/events.js")),d=u(o("./CTFd/themes/core/assets/js/times.js")),c=u(o("./CTFd/themes/admin/assets/js/styles.js")),m=u(o("./CTFd/themes/core/assets/js/helpers.js"));function u(e){return e&&e.__esModule?e:{default:e}}n.default.init(window.init),window.CTFd=n.default,window.helpers=m.default,window.$=s.default,window.Moment=a.default,window.nunjucks=i.default,window.Howl=l.Howl,(0,s.default)(function(){(0,c.default)(),(0,d.default)(),(0,r.default)(n.default.config.urlRoot)})},"./CTFd/themes/admin/assets/js/styles.js":function(e,t,o){Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,o("./node_modules/bootstrap/dist/js/bootstrap.bundle.js");var n,s=(n=o("./node_modules/jquery/dist/jquery.js"))&&n.__esModule?n:{default:n};t.default=function(){(0,s.default)(":input").each(function(){(0,s.default)(this).data("initial",(0,s.default)(this).val())}),(0,s.default)(".form-control").bind({focus:function(){(0,s.default)(this).addClass("input-filled-valid")},blur:function(){""===(0,s.default)(this).val()&&(0,s.default)(this).removeClass("input-filled-valid")}}),(0,s.default)(".modal").on("show.bs.modal",function(e){(0,s.default)(".form-control").each(function(){(0,s.default)(this).val()&&(0,s.default)(this).addClass("input-filled-valid")})}),(0,s.default)(function(){(0,s.default)(".form-control").each(function(){(0,s.default)(this).val()&&(0,s.default)(this).addClass("input-filled-valid")}),(0,s.default)("tr[data-href]").click(function(){if(!getSelection().toString()){var e=(0,s.default)(this).attr("data-href");e&&(window.location=e)}return!1}),(0,s.default)("tr[data-href] a, tr[data-href] button").click(function(e){(0,s.default)(this).attr("data-dismiss")||e.stopPropagation()}),(0,s.default)('[data-toggle="tooltip"]').tooltip()})}},"./CTFd/themes/core/assets/js/CTFd.js":function(e,t,o){Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=d(o("./CTFd/themes/core/assets/js/fetch.js")),s=d(o("./CTFd/themes/core/assets/js/config.js")),a=o("./CTFd/themes/core/assets/js/api.js");o("./CTFd/themes/core/assets/js/patch.js");var i=d(o("./node_modules/markdown-it/index.js")),l=d(o("./node_modules/jquery/dist/jquery.js")),r=d(o("./CTFd/themes/core/assets/js/ezq.js"));function d(e){return e&&e.__esModule?e:{default:e}}function c(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}var m=new a.API("/"),u={},p={ezq:r.default},f={$:l.default,markdown:function(e){var t=function(t){for(var e=1;e".concat(e.body,"

")):o.find(".modal-body").append((0,l.default)(e.body));var n=(0,l.default)(c.format(e.button));return e.success&&(0,l.default)(n).click(function(){e.success()}),e.large&&o.find(".modal-dialog").addClass("modal-lg"),o.find(".modal-footer").append(n),(0,l.default)("main").append(o),o.modal("show"),(0,l.default)(o).on("hidden.bs.modal",function(){(0,l.default)(this).modal("dispose")}),o}function f(e){(0,l.default)("#ezq--notifications-toast-container").length||(0,l.default)("body").append((0,l.default)("
").attr({id:"ezq--notifications-toast-container"}).css({position:"fixed",bottom:"0",right:"0","min-width":"20%"}));var t=r.format(e.title,e.body),o=(0,l.default)(t);if(e.onclose&&(0,l.default)(o).find("button[data-dismiss=toast]").click(function(){e.onclose()}),e.onclick){var n=(0,l.default)(o).find(".toast-body");n.addClass("cursor-pointer"),n.click(function(){e.onclick()})}var s=!1!==e.autohide,a=!1!==e.animation,i=e.delay||1e4;return(0,l.default)("#ezq--notifications-toast-container").prepend(o),o.toast({autohide:s,delay:i,animation:a}),o.toast("show"),o}function j(e){var t=a.format(e.title),o=(0,l.default)(t);"string"==typeof e.body?o.find(".modal-body").append("

".concat(e.body,"

")):o.find(".modal-body").append((0,l.default)(e.body));var n=(0,l.default)(u),s=(0,l.default)(m);return o.find(".modal-footer").append(s),o.find(".modal-footer").append(n),(0,l.default)("main").append(o),(0,l.default)(o).on("hidden.bs.modal",function(){(0,l.default)(this).modal("dispose")}),(0,l.default)(n).click(function(){e.success()}),o.modal("show"),o}function h(e){if(e.target){var t=(0,l.default)(e.target);return t.find(".progress-bar").css("width",e.width+"%"),t}var o=i.format(e.width),n=a.format(e.title),s=(0,l.default)(n);return s.find(".modal-body").append((0,l.default)(o)),(0,l.default)("main").append(s),s.modal("show")}function _(e){var t={success:d,error:s}[e.type].format(e.body);return(0,l.default)(t)}var v={ezAlert:p,ezToast:f,ezQuery:j,ezProgressBar:h,ezBadge:_};t.default=v},"./CTFd/themes/core/assets/js/fetch.js":function(e,t,o){Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,o("./node_modules/whatwg-fetch/fetch.js");var n,s=(n=o("./CTFd/themes/core/assets/js/config.js"))&&n.__esModule?n:{default:n};var a=window.fetch;t.default=function(e,t){return void 0===t&&(t={method:"GET",credentials:"same-origin",headers:{}}),e=s.default.urlRoot+e,void 0===t.headers&&(t.headers={}),t.credentials="same-origin",t.headers.Accept="application/json",t.headers["Content-Type"]="application/json",t.headers["CSRF-Token"]=s.default.csrfNonce,a(e,t)}},"./CTFd/themes/core/assets/js/patch.js":function(e,t,o){var n,l=(n=o("./node_modules/q/q.js"))&&n.__esModule?n:{default:n},s=o("./CTFd/themes/core/assets/js/api.js");function a(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function r(e,t){return function(t){for(var e=1;e>8*s&255).toString(16)).substr(-2)}return n},t.htmlEntities=function(e){return(0,a.default)("
").text(e).html()},t.cumulativeSum=function(e){for(var t=e.concat(),o=0;o").attr("class","media-item-wrapper"),l=(0,r.default)("");l.attr("href","##"),void 0===a?l.append(' '.format(a)):l.append(' '.format(a)),l.append((0,r.default)("").attr("class","media-item-title").text(s)),l.click(function(e){var t=(0,r.default)(this).parent(),o=(0,r.default)(this).find("i")[0],n=t.attr("data-location"),s=t.attr("data-filename"),a=t.attr("data-id");if((0,r.default)("#media-delete").attr("data-id",a),(0,r.default)("#media-link").val(n),(0,r.default)("#media-filename").html((0,r.default)("").attr("href",n).attr("target","_blank").text(s)),(0,r.default)("#media-icon").empty(),(0,r.default)(o).hasClass("fa-file-image"))(0,r.default)("#media-icon").append((0,r.default)("").attr("src",n).css({"max-width":"100%","max-height":"100%","object-fit":"contain"}));else{var i=(0,r.default)(o).clone();(0,r.default)(i).addClass("fa-4x"),(0,r.default)("#media-icon").append(i)}(0,r.default)("#media-item").show()}),i.append(l),i.attr("data-location",d.default.config.urlRoot+"/files/"+n.location),i.attr("data-id",n.id),i.attr("data-filename",s),t.append(i)}}(e.data),t&&t()})}(0,r.default)(function(){window.editor=s.default.fromTextArea(document.getElementById("admin-pages-editor"),{lineNumbers:!0,lineWrapping:!0,mode:"xml",htmlMode:!0}),(0,r.default)("#media-insert").click(function(e){var t="";try{t=(0,r.default)("#media-icon").children()[0].nodeName.toLowerCase()}catch(e){t=""}var o=(0,r.default)("#media-link").val(),n=(0,r.default)("#media-filename").text(),s=null;s="img"===t?"![{0}]({1})".format(n,o):"[{0}]({1})".format(n,o),function(e,t){var o=e.getDoc(),n=o.getCursor();o.replaceRange(t,n)}(editor,s)}),(0,r.default)("#media-download").click(function(e){var t=(0,r.default)("#media-link").val();window.open(t,"_blank")}),(0,r.default)("#media-delete").click(function(e){var t=(0,r.default)(this).attr("data-id");(0,a.ezQuery)({title:"Delete File?",body:"Are you sure you want to delete this file?",success:function(){d.default.fetch("/api/v1/files/"+t,{method:"DELETE",credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json"}}).then(function(e){200===e.status&&e.json().then(function(e){e.success&&l()})})}})}),(0,r.default)("#save-page").click(function(e){e.preventDefault(),function(){window.editor.save();var e=(0,r.default)("#page-edit").serializeJSON(),t="/api/v1/pages",o="POST";e.id&&(t+="/"+e.id,o="PATCH"),d.default.fetch(t,{method:o,credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(e)}).then(function(e){return e.json()}).then(function(e){"PATCH"===o&&e.success?(0,a.ezToast)({title:"Saved",body:"Your changes have been saved"}):window.location=d.default.config.urlRoot+"/admin/pages/"+e.data.id})}()}),(0,r.default)("#media-button").click(function(){(0,r.default)("#media-library-list").empty(),l(function(){(0,r.default)("#media-modal").modal()})}),(0,r.default)(".media-upload-button").click(function(){n.default.files.upload((0,r.default)("#media-library-upload"),{},function(e){l()})}),(0,r.default)(".preview-page").click(function(){editor.save(),(0,r.default)("#page-edit").attr("action",d.default.config.urlRoot+"/admin/pages/preview"),(0,r.default)("#page-edit").attr("target","_blank"),(0,r.default)("#page-edit").submit()})})},"./CTFd/themes/admin/assets/js/pages/main.js":function(e,t,o){var n=u(o("./CTFd/themes/core/assets/js/CTFd.js")),s=u(o("./node_modules/jquery/dist/jquery.js")),a=u(o("./node_modules/moment/moment.js")),i=u(o("./node_modules/nunjucks/browser/nunjucks.js")),l=o("./node_modules/howler/dist/howler.js"),r=u(o("./CTFd/themes/core/assets/js/events.js")),d=u(o("./CTFd/themes/core/assets/js/times.js")),c=u(o("./CTFd/themes/admin/assets/js/styles.js")),m=u(o("./CTFd/themes/core/assets/js/helpers.js"));function u(e){return e&&e.__esModule?e:{default:e}}n.default.init(window.init),window.CTFd=n.default,window.helpers=m.default,window.$=s.default,window.Moment=a.default,window.nunjucks=i.default,window.Howl=l.Howl,(0,s.default)(function(){(0,c.default)(),(0,d.default)(),(0,r.default)(n.default.config.urlRoot)})},"./CTFd/themes/admin/assets/js/styles.js":function(e,t,o){Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,o("./node_modules/bootstrap/dist/js/bootstrap.bundle.js");var n,s=(n=o("./node_modules/jquery/dist/jquery.js"))&&n.__esModule?n:{default:n};t.default=function(){(0,s.default)(":input").each(function(){(0,s.default)(this).data("initial",(0,s.default)(this).val())}),(0,s.default)(".form-control").bind({focus:function(){(0,s.default)(this).addClass("input-filled-valid")},blur:function(){""===(0,s.default)(this).val()&&(0,s.default)(this).removeClass("input-filled-valid")}}),(0,s.default)(".modal").on("show.bs.modal",function(e){(0,s.default)(".form-control").each(function(){(0,s.default)(this).val()&&(0,s.default)(this).addClass("input-filled-valid")})}),(0,s.default)(function(){(0,s.default)(".form-control").each(function(){(0,s.default)(this).val()&&(0,s.default)(this).addClass("input-filled-valid")}),(0,s.default)("tr[data-href]").click(function(){if(!getSelection().toString()){var e=(0,s.default)(this).attr("data-href");e&&(window.location=e)}return!1}),(0,s.default)("tr[data-href] a, tr[data-href] button").click(function(e){(0,s.default)(this).attr("data-dismiss")||e.stopPropagation()}),(0,s.default)('[data-toggle="tooltip"]').tooltip()})}},"./CTFd/themes/core/assets/js/CTFd.js":function(e,t,o){Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=d(o("./CTFd/themes/core/assets/js/fetch.js")),s=d(o("./CTFd/themes/core/assets/js/config.js")),a=o("./CTFd/themes/core/assets/js/api.js");o("./CTFd/themes/core/assets/js/patch.js");var i=d(o("./node_modules/markdown-it/index.js")),l=d(o("./node_modules/jquery/dist/jquery.js")),r=d(o("./CTFd/themes/core/assets/js/ezq.js"));function d(e){return e&&e.__esModule?e:{default:e}}function c(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}var m=new a.API("/"),u={},p={ezq:r.default},f={$:l.default,markdown:function(e){var t=function(t){for(var e=1;e".concat(e.body,"

")):o.find(".modal-body").append((0,l.default)(e.body));var n=(0,l.default)(c.format(e.button));return e.success&&(0,l.default)(n).click(function(){e.success()}),e.large&&o.find(".modal-dialog").addClass("modal-lg"),o.find(".modal-footer").append(n),(0,l.default)("main").append(o),o.modal("show"),(0,l.default)(o).on("hidden.bs.modal",function(){(0,l.default)(this).modal("dispose")}),o}function f(e){(0,l.default)("#ezq--notifications-toast-container").length||(0,l.default)("body").append((0,l.default)("
").attr({id:"ezq--notifications-toast-container"}).css({position:"fixed",bottom:"0",right:"0","min-width":"20%"}));var t=r.format(e.title,e.body),o=(0,l.default)(t);if(e.onclose&&(0,l.default)(o).find("button[data-dismiss=toast]").click(function(){e.onclose()}),e.onclick){var n=(0,l.default)(o).find(".toast-body");n.addClass("cursor-pointer"),n.click(function(){e.onclick()})}var s=!1!==e.autohide,a=!1!==e.animation,i=e.delay||1e4;return(0,l.default)("#ezq--notifications-toast-container").prepend(o),o.toast({autohide:s,delay:i,animation:a}),o.toast("show"),o}function j(e){var t=a.format(e.title),o=(0,l.default)(t);"string"==typeof e.body?o.find(".modal-body").append("

".concat(e.body,"

")):o.find(".modal-body").append((0,l.default)(e.body));var n=(0,l.default)(u),s=(0,l.default)(m);return o.find(".modal-footer").append(s),o.find(".modal-footer").append(n),(0,l.default)("main").append(o),(0,l.default)(o).on("hidden.bs.modal",function(){(0,l.default)(this).modal("dispose")}),(0,l.default)(n).click(function(){e.success()}),o.modal("show"),o}function h(e){if(e.target){var t=(0,l.default)(e.target);return t.find(".progress-bar").css("width",e.width+"%"),t}var o=i.format(e.width),n=a.format(e.title),s=(0,l.default)(n);return s.find(".modal-body").append((0,l.default)(o)),(0,l.default)("main").append(s),s.modal("show")}function _(e){var t={success:d,error:s}[e.type].format(e.body);return(0,l.default)(t)}var v={ezAlert:p,ezToast:f,ezQuery:j,ezProgressBar:h,ezBadge:_};t.default=v},"./CTFd/themes/core/assets/js/fetch.js":function(e,t,o){Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,o("./node_modules/whatwg-fetch/fetch.js");var n,s=(n=o("./CTFd/themes/core/assets/js/config.js"))&&n.__esModule?n:{default:n};var a=window.fetch;t.default=function(e,t){return void 0===t&&(t={method:"GET",credentials:"same-origin",headers:{}}),e=s.default.urlRoot+e,void 0===t.headers&&(t.headers={}),t.credentials="same-origin",t.headers.Accept="application/json",t.headers["Content-Type"]="application/json",t.headers["CSRF-Token"]=s.default.csrfNonce,a(e,t)}},"./CTFd/themes/core/assets/js/patch.js":function(e,t,o){var n,l=(n=o("./node_modules/q/q.js"))&&n.__esModule?n:{default:n},s=o("./CTFd/themes/core/assets/js/api.js");function a(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function r(e,t){return function(t){for(var e=1;e>8*s&255).toString(16)).substr(-2)}return n},t.htmlEntities=function(e){return(0,a.default)("
").text(e).html()},t.cumulativeSum=function(e){for(var t=e.concat(),o=0;o