flush -- WIP admin panel
This commit is contained in:
176
include/js/edit.js
Normal file
176
include/js/edit.js
Normal file
@@ -0,0 +1,176 @@
|
||||
let edtior;
|
||||
editormd.urls = {
|
||||
atLinkBase : "user.php?username="
|
||||
};
|
||||
|
||||
// create editor instance
|
||||
editor = editormd('markdownEditor', {
|
||||
height: 450,
|
||||
path: "https://pandao.github.io/editor.md/lib/",
|
||||
markdown: document.edit.content.value,
|
||||
htmlDecode : "script,iframe|on*",
|
||||
placeholder: '',
|
||||
styleActiveLine: false,
|
||||
"font-size": '14px',
|
||||
emoji: true,
|
||||
taskList: true,
|
||||
tex: true,
|
||||
flowChart: true,
|
||||
sequenceDiagram: true,
|
||||
watch: false,
|
||||
lineNumbers: false,
|
||||
lineWrapping: false,
|
||||
toolbarAutoFixed: false,
|
||||
toolbarIcons : function() {
|
||||
return [
|
||||
"search", "|",
|
||||
"undo", "redo", "|",
|
||||
"bold", "del", "italic", "|",
|
||||
"list-ul", "list-ol", "emoji", "html-entities", "|",
|
||||
"link", "image", "|",
|
||||
"preview", "fullscreen", "||",
|
||||
"help", "info",
|
||||
]
|
||||
},
|
||||
toolbarIconsClass: {
|
||||
preview: 'fa-eye'
|
||||
},
|
||||
onload: function() {
|
||||
var __this__ = this;
|
||||
$('ul.editormd-menu').addClass('unstyled'); // remove style of TocasUI
|
||||
$('ul.editormd-menu i[name="emoji"]').parent().click(function () { // remove style of TocasUI from emoji tab (hack)
|
||||
setTimeout(()=>{ $('ul.editormd-tab-head').addClass('unstyled'); }, 300);
|
||||
});
|
||||
this.resize();
|
||||
loadDraft();
|
||||
|
||||
document.edit.title.addEventListener("keydown", function () {
|
||||
saveDraft(__this__);
|
||||
})
|
||||
|
||||
this.cm.on("change", function(_cm, _changeObj) {
|
||||
saveDraft(__this__);
|
||||
});
|
||||
},
|
||||
onresize: function() {
|
||||
if (this.state.preview) {
|
||||
requestAnimationFrame(()=>{
|
||||
this.previewed();
|
||||
this.previewing();
|
||||
});
|
||||
}
|
||||
},
|
||||
onpreviewing: function() {
|
||||
this.save();
|
||||
// use tocas-ui style tables
|
||||
$('table').each((_i,e) => {
|
||||
$(e).addClass('ts celled table').css('display','table');
|
||||
});
|
||||
|
||||
// prevent user from destroying page style
|
||||
var parser = new cssjs();
|
||||
let stylesheets = document.querySelectorAll('.markdown-body style');
|
||||
for (let style of stylesheets) {
|
||||
let ruleSource = style.innerHTML;
|
||||
let cssObject = parser.parseCSS(ruleSource);
|
||||
for (let rule of cssObject) {
|
||||
let valid = false;
|
||||
let validPrefix = [".markdown-body ", ".editormd-preview-container ", ".markdown-body.editormd-preview-container ", ".editormd-preview-container.markdown-body "];
|
||||
validPrefix.forEach((e, _i) => {
|
||||
valid = valid || rule.selector.startsWith(e);
|
||||
});
|
||||
|
||||
if (!rule.selector.startsWith('@')) { // '@keyframe' & '@import'
|
||||
if (!valid) {
|
||||
rule.selector = ".editormd-preview-container " + rule.selector;
|
||||
}
|
||||
}
|
||||
}
|
||||
style.innerHTML = parser.getCSSForEditor(cssObject);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// save draft data
|
||||
function saveDraft(editor) {
|
||||
localStorage.setItem('cavern_draft_title', document.edit.title.value);
|
||||
localStorage.setItem('cavern_draft_id', document.edit.pid.value);
|
||||
localStorage.setItem('cavern_draft_content', editor.getMarkdown());
|
||||
localStorage.setItem('cavern_draft_time', new Date().getTime());
|
||||
}
|
||||
|
||||
// Ask if user want to load draft
|
||||
function loadDraft() {
|
||||
if ($('#pid').val() == localStorage.getItem('cavern_draft_id')) {
|
||||
swal({
|
||||
type: 'question',
|
||||
title: '要載入上次備份嗎?',
|
||||
showCancelButton: true,
|
||||
confirmButtonText: '載入',
|
||||
cancelButtonText: '取消',
|
||||
}).then((result) => {
|
||||
if (result.value) { // confirm
|
||||
document.edit.title.value = localStorage.getItem('cavern_draft_title');
|
||||
editor.setValue(localStorage.getItem('cavern_draft_content'));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Post an article
|
||||
$(document.edit).on('submit', function(e) {
|
||||
e.preventDefault();
|
||||
var _this = this;
|
||||
let fd = new URLSearchParams(new FormData(this)).toString();
|
||||
axios.request({
|
||||
method: "POST",
|
||||
data: fd,
|
||||
url: "post.php",
|
||||
headers: {
|
||||
'Content-Type': "application/x-www-form-urlencoded"
|
||||
}
|
||||
}).then(function (res) {
|
||||
if (_this.pid.value == localStorage.getItem('cavern_draft_id')) {
|
||||
['id', 'title', 'content', 'time'].forEach((name) => {
|
||||
localStorage.removeItem(`cavern_draft_${name}`);
|
||||
});
|
||||
}
|
||||
location.href = res.headers["axios-location"];
|
||||
}).catch(function (error) {
|
||||
if (error.response) {
|
||||
location.href = error.response.headers["axios-location"];
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Delete post confirm message
|
||||
$('.action.column .delete').on('click', function(e) {
|
||||
e.preventDefault();
|
||||
var el = this;
|
||||
var href = el.getAttribute('href');
|
||||
swal({
|
||||
type: 'question',
|
||||
title: '確定要刪除嗎?',
|
||||
showCancelButton: true,
|
||||
confirmButtonText: '確定',
|
||||
cancelButtonText: '取消',
|
||||
}).then((result) => {
|
||||
if (result.value) { // confirm
|
||||
axios.request({
|
||||
method: "GET",
|
||||
url: href
|
||||
}).then(function (res) {
|
||||
location.href = res.headers["axios-location"];
|
||||
}).catch(function (error){
|
||||
if (error.response) {
|
||||
location.href = error.response.headers["axios-location"];
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// session keep alive
|
||||
setInterval(function() {
|
||||
$.get('ajax/posts.php');
|
||||
}, 5*60*1000);
|
||||
Reference in New Issue
Block a user