Migrate to mithril.js

This commit is contained in:
2023-02-18 09:22:43 +03:00
parent 024d7fb10d
commit bdc8f8496f
79 changed files with 1697 additions and 149 deletions

View File

@@ -1,11 +0,0 @@
let Footer = {
view: function() {
return {tag: '<', children: `<div class="row mt-3 py-3 bg-light">
<div class="col-md-1"></div>
<div class="col-md-10">
&copy; <a href="https://specialistoff.net/" target="_blank">RemiZOffAlex</a>
</div>
<div class="col-md-1"></div>
</div>`}
}
};

View File

@@ -0,0 +1,3 @@
{% include '/public/components/menu-general.js' %}
{% include '/public/components/pages.js' %}
{% include '/public/components/users.js' %}

View File

@@ -0,0 +1,21 @@
let MenuGeneral = {
oninit: function(vnode) {
document.title = SETTINGS.TITLE;
},
view: function(vnode) {
result = [];
result.push(
m('div', {class: 'row'},
m('div', {class: 'col py-2'}, [
m(m.route.Link, {class: 'btn btn-outline-secondary', href: '/'}, m('i', {class: 'fa fa-home'})),
m(m.route.Link, {class: 'btn btn-outline-secondary border-0', href: '/pages'}, 'Статьи'),
m(m.route.Link, {class: 'btn btn-outline-secondary border-0', href: '/tags'}, 'Метки'),
m(m.route.Link, {class: 'btn btn-outline-secondary border-0', href: '/users'}, 'Пользователи'),
m(m.route.Link, {class: 'btn btn-outline-secondary border-0', href: '/api/browse'}, 'API JSON-RPC'),
m(m.route.Link, {class: 'btn btn-outline-success float-end', href: '/login'}, m('i', {class: 'fa fa-sign-in'})),
])
)
)
return result;
}
};

View File

@@ -0,0 +1,57 @@
function ComponentPages() {
let data = {
pages: null,
};
function page_render(page, pageIdx) {
let odd = '';
if (pageIdx % 2) {
odd = ' bg-light'
};
let tags = page.tags.map(
function(tag, tagIdx) {
return [
m('i', {class: "fa fa-tag"}),
{tag: '<', children: '&nbsp;'},
m(m.route.Link, {class: "font-monospace text-decoration-none", href: `/tag/${tag.id}`}, tag.name),
{tag: '<', children: '&nbsp;'},
]
}
);
return m('div', {class: 'row'},
m('div', {class: "col py-2" + odd}, [
m(m.route.Link, {class: "text-decoration-none", href: `/page/${page.id}`}, m.trust(page.title)),
m('div', {class: 'row'},
m('div', {class: 'col text-muted'},
m('small', [...tags])
)
)
])
)
};
function pages_render() {
return data.pages.map(page_render);
};
return {
oninit: function(vnode) {
console.log('ComponentPages.oninit');
for (let key in vnode.attrs){
data[key] = vnode.attrs[key];
};
},
onupdate: function(vnode) {
console.log('ComponentPages.onupdate');
for (let key in vnode.attrs){
data[key] = vnode.attrs[key];
};
},
view: function() {
console.log('ComponentPages.view');
if (data.pages!=null) {
let result = [];
result.push(pages_render());
return result;
};
}
};
};

View File

@@ -0,0 +1,41 @@
function ComponentUsers() {
let data = {
users: null,
};
function user_render(user, userIdx) {
let odd = '';
if (userIdx % 2) {
odd = ' bg-light'
};
return m('div', {class: 'row'},
m('div', {class: "col py-2" + odd}, [
m(m.route.Link, {class: "text-decoration-none", href: `/user/${user.id}`}, user.name),
])
)
};
function users_render() {
return data.users.map(user_render);
};
return {
oninit: function(vnode) {
console.log('ComponentUsers.oninit');
for (let key in vnode.attrs){
data[key] = vnode.attrs[key];
};
},
onupdate: function(vnode) {
console.log('ComponentUsers.onupdate');
for (let key in vnode.attrs){
data[key] = vnode.attrs[key];
};
},
view: function() {
console.log('ComponentUsers.view');
if (data.users!=null) {
let result = [];
result.push(users_render());
return result;
};
}
};
};