pre-build.sh

Former-commit-id: 58220a0ee1c48708eed3d172d6884a9f3617ffe9 [formerly 0d570e5a54030b9c4f7e280b55816a221438df72] [formerly 3c420b9ecd469d03c3ddfafeb33d4451a2315d55 [formerly 191a3791e0edc4f474e9d86f85002d404a306710]]
Former-commit-id: 0f82a221f0201448eecd54e98ac95fcdfea7ede0 [formerly 67ce3f7f0945b90ced9d7b11017286753afd8075]
Former-commit-id: a91572e8026c2290095d02bf3ef125591145dbc7
This commit is contained in:
Henrique Dias
2017-03-26 11:24:21 +01:00
parent e0aef17c94
commit 0a60d711ff
7 changed files with 746 additions and 741 deletions

View File

@@ -1,197 +1,197 @@
'use strict';
'use strict'
var editor = {};
var editor = {}
editor.textareaAutoGrow = function () {
let autogrow = function () {
console.log(this.style.height)
this.style.height = 'auto';
this.style.height = (this.scrollHeight) + 'px';
this.style.height = 'auto'
this.style.height = (this.scrollHeight) + 'px'
}
let textareas = document.getElementsByTagName('textarea');
let textareas = document.getElementsByTagName('textarea')
let addAutoGrow = () => {
Array.from(textareas).forEach(textarea => {
autogrow.bind(textarea)();
textarea.addEventListener('keyup', autogrow);
});
autogrow.bind(textarea)()
textarea.addEventListener('keyup', autogrow)
})
}
addAutoGrow();
addAutoGrow()
window.addEventListener('resize', addAutoGrow)
}
editor.toggleSourceEditor = function (event) {
event.preventDefault();
event.preventDefault()
if(document.querySelector('[data-kind="content-only"]')) {
window.location = window.location.pathname + "?visual=true"
return;
}
window.location = window.location.pathname + "?visual=false"
}
function deleteFrontMatterItem(event) {
event.preventDefault();
document.getElementById(this.dataset.delete).remove();
}
function makeFromBaseTemplate(id, type, name, parent) {
let clone = document.importNode(templates.base.content, true);
clone.querySelector('fieldset').id = id;
clone.querySelector('fieldset').dataset.type = type;
clone.querySelector('h3').innerHTML = name;
clone.querySelector('.delete').dataset.delete = id;
clone.querySelector('.delete').addEventListener('click', deleteFrontMatterItem);
clone.querySelector('.add').addEventListener('click', addFrontMatterItem);
if(parent.classList.contains("frontmatter")) {
parent.insertBefore(clone, document.querySelector('div.button.add'));
if (document.querySelector('[data-kind="content-only"]')) {
window.location = window.location.pathname + '?visual=true'
return
}
parent.appendChild(clone);
window.location = window.location.pathname + '?visual=false'
}
function makeFromArrayItemTemplate(id, number, parent) {
let clone = document.importNode(templates.arrayItem.content, true);
clone.querySelector('[data-type="array-item"]').id = `${id}-${number}`;
clone.querySelector('input').name = id;
clone.querySelector('input').id = id;
clone.querySelector('div.action').dataset.delete = `${id}-${number}`;
clone.querySelector('div.action').addEventListener('click', deleteFrontMatterItem);
parent.querySelector('.group').appendChild(clone)
document.getElementById(`${id}-${number}`).querySelector('input').focus();
function deleteFrontMatterItem (event) {
event.preventDefault()
document.getElementById(this.dataset.delete).remove()
}
function makeFromObjectItemTemplate(id, name, parent) {
let clone = document.importNode(templates.objectItem.content, true);
clone.querySelector('.block').id = `block-${id}`;
clone.querySelector('.block').dataset.content = id;
clone.querySelector('label').for = id;
clone.querySelector('label').innerHTML = name;
clone.querySelector('input').name = id;
clone.querySelector('input').id = id;
clone.querySelector('.action').dataset.delete = `block-${id}`;
clone.querySelector('.action').addEventListener('click', deleteFrontMatterItem);
function makeFromBaseTemplate (id, type, name, parent) {
let clone = document.importNode(templates.base.content, true)
clone.querySelector('fieldset').id = id
clone.querySelector('fieldset').dataset.type = type
clone.querySelector('h3').innerHTML = name
clone.querySelector('.delete').dataset.delete = id
clone.querySelector('.delete').addEventListener('click', deleteFrontMatterItem)
clone.querySelector('.add').addEventListener('click', addFrontMatterItem)
if (parent.classList.contains('frontmatter')) {
parent.insertBefore(clone, document.querySelector('div.button.add'))
return
}
parent.appendChild(clone)
document.getElementById(id).focus();
}
function addFrontMatterItemPrompt(parent) {
return function (event) {
event.preventDefault();
function makeFromArrayItemTemplate (id, number, parent) {
let clone = document.importNode(templates.arrayItem.content, true)
clone.querySelector('[data-type="array-item"]').id = `${id}-${number}`
clone.querySelector('input').name = id
clone.querySelector('input').id = id
clone.querySelector('div.action').dataset.delete = `${id}-${number}`
clone.querySelector('div.action').addEventListener('click', deleteFrontMatterItem)
parent.querySelector('.group').appendChild(clone)
document.getElementById(`${id}-${number}`).querySelector('input').focus()
}
let value = event.currentTarget.querySelector('input').value;
if(value === '') {
return true;
function makeFromObjectItemTemplate (id, name, parent) {
let clone = document.importNode(templates.objectItem.content, true)
clone.querySelector('.block').id = `block-${id}`
clone.querySelector('.block').dataset.content = id
clone.querySelector('label').for = id
clone.querySelector('label').innerHTML = name
clone.querySelector('input').name = id
clone.querySelector('input').id = id
clone.querySelector('.action').dataset.delete = `block-${id}`
clone.querySelector('.action').addEventListener('click', deleteFrontMatterItem)
parent.appendChild(clone)
document.getElementById(id).focus()
}
function addFrontMatterItemPrompt (parent) {
return function (event) {
event.preventDefault()
let value = event.currentTarget.querySelector('input').value
if (value === '') {
return true
}
closePrompt(event);
closePrompt(event)
let name = value.substring(0, value.lastIndexOf(':')),
type = value.substring(value.lastIndexOf(':') + 1, value.length);
type = value.substring(value.lastIndexOf(':') + 1, value.length)
if(type !== "" && type !== "array" && type !== "object") {
name = value;
if (type !== '' && type !== 'array' && type !== 'object') {
name = value
}
name = name.replace(' ', '_');
name = name.replace(' ', '_')
let id = name;
let id = name
if(parent.id != '') {
id = parent.id + "." + id;
if (parent.id != '') {
id = parent.id + '.' + id
}
if(type == "array" || type == "object") {
if(parent.dataset.type == "parent") {
makeFromBaseTemplate(id, type, name, document.querySelector('.frontmatter'));
return;
if (type == 'array' || type == 'object') {
if (parent.dataset.type == 'parent') {
makeFromBaseTemplate(id, type, name, document.querySelector('.frontmatter'))
return
}
makeFromBaseTemplate(id, type, name, block);
return;
makeFromBaseTemplate(id, type, name, block)
return
}
let group = parent.querySelector('.group');
let group = parent.querySelector('.group')
if(group == null) {
parent.insertAdjacentHTML('afterbegin', '<div class="group"></div>');
group = parent.querySelector('.group');
if (group == null) {
parent.insertAdjacentHTML('afterbegin', '<div class="group"></div>')
group = parent.querySelector('.group')
}
makeFromObjectItemTemplate(id, name, group);
makeFromObjectItemTemplate(id, name, group)
}
}
function addFrontMatterItem(event) {
event.preventDefault();
function addFrontMatterItem (event) {
event.preventDefault()
let parent = event.currentTarget.parentNode,
type = parent.dataset.type;
type = parent.dataset.type
// If the block is an array
if(type === "array") {
let id = parent.id + "[]",
if (type === 'array') {
let id = parent.id + '[]',
count = parent.querySelectorAll('.group > div').length,
fieldsets = parent.getElementsByTagName("fieldset");
fieldsets = parent.getElementsByTagName('fieldset')
if(fieldsets.length > 0) {
if (fieldsets.length > 0) {
let itemType = fieldsets[0].dataset.type,
itemID = parent.id + "[" + fieldsets.length + "]",
itemName = fieldsets.length;
itemID = parent.id + '[' + fieldsets.length + ']',
itemName = fieldsets.length
makeFromBaseTemplate(itemID, itemType, itemName, parent);
makeFromBaseTemplate(itemID, itemType, itemName, parent)
} else {
makeFromArrayItemTemplate(id, count, parent);
makeFromArrayItemTemplate(id, count, parent)
}
return;
return
}
if(type == "object" || type == "parent") {
let clone = document.importNode(templates.question.content, true);
clone.querySelector('form').id = tempID;
clone.querySelector('h3').innerHTML = 'New field';
clone.querySelector('p').innerHTML = 'Write the field name and then press enter. If you want to create an array or an object, end the name with <code>:array</code> or <code>:object.</code>';
clone.querySelector('.ok').innerHTML = 'Create';
clone.querySelector('form').addEventListener('submit', addFrontMatterItemPrompt(parent));
if (type == 'object' || type == 'parent') {
let clone = document.importNode(templates.question.content, true)
clone.querySelector('form').id = tempID
clone.querySelector('h3').innerHTML = 'New field'
clone.querySelector('p').innerHTML = 'Write the field name and then press enter. If you want to create an array or an object, end the name with <code>:array</code> or <code>:object.</code>'
clone.querySelector('.ok').innerHTML = 'Create'
clone.querySelector('form').addEventListener('submit', addFrontMatterItemPrompt(parent))
clone.querySelector('form').classList.add('active')
document.querySelector('body').appendChild(clone);
document.querySelector('body').appendChild(clone)
document.querySelector('.overlay').classList.add('active');
document.getElementById(tempID).classList.add('active');
document.querySelector('.overlay').classList.add('active')
document.getElementById(tempID).classList.add('active')
}
return false;
return false
}
document.addEventListener("DOMContentLoaded", (event) => {
if(!document.getElementById('editor')) return;
document.addEventListener('DOMContentLoaded', (event) => {
if (!document.getElementById('editor')) return
editor.textareaAutoGrow();
editor.textareaAutoGrow()
templates.arrayItem = document.getElementById("array-item-template");
templates.base = document.getElementById('base-template');
templates.objectItem = document.getElementById("object-item-template");
templates.temporary = document.getElementById('temporary-template');
templates.arrayItem = document.getElementById('array-item-template')
templates.base = document.getElementById('base-template')
templates.objectItem = document.getElementById('object-item-template')
templates.temporary = document.getElementById('temporary-template')
buttons.save = document.querySelector('#save');
buttons.editSource = document.querySelector('#edit-source');
buttons.save = document.querySelector('#save')
buttons.editSource = document.querySelector('#edit-source')
if(buttons.editSource) {
if (buttons.editSource) {
buttons.editSource.addEventListener('click', editor.toggleSourceEditor)
}
let container = document.getElementById('editor'),
kind = container.dataset.kind,
rune = container.dataset.rune;
rune = container.dataset.rune
if(kind != 'frontmatter-only') {
if (kind != 'frontmatter-only') {
let editor = document.querySelector('.content #ace'),
mode = editor.dataset.mode,
textarea = document.querySelector('textarea[name="content"]'),
@@ -199,80 +199,80 @@ document.addEventListener("DOMContentLoaded", (event) => {
options = {
wrap: true,
maxLines: Infinity,
theme: "ace/theme/github",
theme: 'ace/theme/github',
showPrintMargin: false,
fontSize: "1em",
fontSize: '1em',
minLines: 20
};
}
aceEditor.getSession().setMode("ace/mode/" + mode);
aceEditor.getSession().setValue(textarea.value);
aceEditor.getSession().setMode('ace/mode/' + mode)
aceEditor.getSession().setValue(textarea.value)
aceEditor.getSession().on('change', function () {
textarea.value = aceEditor.getSession().getValue();
});
textarea.value = aceEditor.getSession().getValue()
})
if(mode == "markdown") options.showGutter = false;
aceEditor.setOptions(options);
if (mode == 'markdown') options.showGutter = false
aceEditor.setOptions(options)
}
let deleteFrontMatterItemButtons = document.getElementsByClassName('delete');
let deleteFrontMatterItemButtons = document.getElementsByClassName('delete')
Array.from(deleteFrontMatterItemButtons).forEach(button => {
button.addEventListener('click', deleteFrontMatterItem);
});
button.addEventListener('click', deleteFrontMatterItem)
})
let addFrontMatterItemButtons = document.getElementsByClassName('add');
let addFrontMatterItemButtons = document.getElementsByClassName('add')
Array.from(addFrontMatterItemButtons).forEach(button => {
button.addEventListener('click', addFrontMatterItem);
});
button.addEventListener('click', addFrontMatterItem)
})
let saveContent = function () {
let data = form2js(document.querySelector('form'));
let data = form2js(document.querySelector('form'))
if(typeof data.content === "undefined" && kind != 'frontmatter-only') {
data.content = "";
if (typeof data.content === 'undefined' && kind !== 'frontmatter-only') {
data.content = ''
}
if(typeof data.content === "number") {
data.content = data.content.toString();
if (typeof data.content === 'number') {
data.content = data.content.toString()
}
let request = new XMLHttpRequest();
let request = new XMLHttpRequest()
buttons.setLoading('save')
webdav.put(window.location.pathname, JSON.stringify(data), {
'Kind': kind,
'Rune': rune
})
'Kind': kind,
'Rune': rune
})
.then(() => {
buttons.setDone('save')
})
.catch(e => {
console.log(e);
console.log(e)
buttons.setDone('save', false)
})
}
document.querySelector('#save').addEventListener('click', event => {
event.preventDefault();
saveContent();
});
event.preventDefault()
saveContent()
})
document.querySelector('form').addEventListener('submit', (event) => {
event.preventDefault();
saveContent();
});
event.preventDefault()
saveContent()
})
window.addEventListener('keydown', (event) => {
if(event.ctrlKey || event.metaKey) {
switch(String.fromCharCode(event.which).toLowerCase()) {
case 's':
event.preventDefault();
saveContent();
break;
if (event.ctrlKey || event.metaKey) {
switch (String.fromCharCode(event.which).toLowerCase()) {
case 's':
event.preventDefault()
saveContent()
break
}
}
});
})
return false;
});
return false
})