another_javascript_framework
Version:
html&javascript in one place
58 lines (55 loc) • 1.91 kB
JavaScript
//https://cdn.jsdelivr.net/npm/another_javascript_framework/dist/a_js_f.es5.min.js
const a_js_f = {
$(context) {
let app = document.getElementById(context.element)
app.innerHTML = context.template
if (context.mounted) context.mounted()
},
_(element, context) {
const errors = [
'\\(-_-)/ wow such error: ',
'MUST BE a function (that returns numbers or strings), numbers or strings',
'Don\'t use both render and $render'
]
var finishedElement
if (!context) {
finishedElement = `<${element} />`
} else {
if (context === Object(context)) {
var finalAttrs = ''
for (const key of Object.keys(context)) {
if (key === 'render' || key === '$render') {
if (context.render && context.$render) {
console.error(errors[0] + errors[2])
} else {
if (typeof key === 'string' || typeof key === 'number') {
finishedElement = `<${element} ${finalAttrs}>${context[key]}</${element}>`
} else if (typeof key === 'function') {
finishedElement = `<${element} ${finalAttrs}>${context[key]()}</${element}>`
} else {
console.error(errors[0] + 'Render ' + errors[1])
}
}
} else {
if (typeof context[key] === 'number' || typeof context[key] === 'string') {
finalAttrs = finalAttrs + key + '="' + context[key] + '" '
} else if (typeof context[key] === 'function') {
finalAttrs = finalAttrs + key + '="' + context[key]() + '" '
} else {
console.error(errors[0] + 'Atributtes ' + errors[1])
}
if (!context.render && !context.$render) {
finishedElement = `<${element} ${finalAttrs}></${element}>`
}
}
}
} else {
finishedElement = `<${element}>${context}</${element}>`
}
}
return finishedElement
}
}
//shorthands
const createElement = a_js_f._,
render = a_js_f.$