memex/docs/logic/main.js

110 lines
2.3 KiB
JavaScript
Raw Normal View History

2018-07-13 15:56:09 +00:00
function Main()
{
this.util = null;
2018-11-06 12:34:55 +00:00
this.wrap = null;
this.articles = null;
this.grid = null;
this.nav = null;
this.add = null;
this.write = null;
2018-10-30 14:05:23 +00:00
2018-07-23 13:20:03 +00:00
this.queryCur = '';
2018-09-14 02:57:15 +00:00
this.queryPrev = '';
this.queryPrevAdd = '';
var parent = this;
2018-07-13 15:56:09 +00:00
2018-07-15 14:23:07 +00:00
this.install = function()
{
2018-11-06 11:12:54 +00:00
seer.note('load all js files');
this.util = new Util();
2018-11-06 12:34:55 +00:00
this.wrap = new Wrap();
this.grid = new Grid();
this.grid.install(
document.querySelector('main'),
document.querySelector('.page-overlay'),
'main',
'article');
this.nav = new Nav();
this.nav.install(document.querySelector('nav'));
2018-07-24 11:50:04 +00:00
2018-10-30 03:01:22 +00:00
if (window.showAdd !== undefined && window.showAdd)
2018-07-24 11:50:04 +00:00
{
this.add = new Add();
this.add.install();
2018-09-14 02:57:15 +00:00
// var escape = document.getElementById("escape");
// escape.onclick = function()
// {
// main.add.close();
// }
2018-07-24 11:50:04 +00:00
}
2018-07-15 14:23:07 +00:00
2018-11-06 11:12:54 +00:00
seer.note('install main');
2018-11-05 23:39:57 +00:00
}
2018-11-05 23:29:55 +00:00
2018-11-06 12:34:55 +00:00
this.start = function()
2018-11-06 09:28:12 +00:00
{
2018-11-06 12:34:55 +00:00
this.wrap.start(DATABASE)
.then((db) =>
2018-11-06 09:28:12 +00:00
{
2018-11-06 12:34:55 +00:00
this.articles = db;
seer.note('process db');
2018-11-06 09:28:12 +00:00
2018-11-06 12:34:55 +00:00
let stats = this.wrap.stats(this.articles);
seer.note('calc stats');
this.nav.display(stats);
seer.note('render stats');
return this.load();
})
.catch((error) =>
{
console.log('ERROR: ' + error, error);
});
}
this.load = function()
{
this.resetPage();
this.updateQuery();
2018-11-06 12:34:55 +00:00
let filtered = this.wrap.filter(this.queryCur, this.articles);
seer.note('filter db');
this.grid.buildAllArticles(filtered)
.then((html) =>
{
2018-11-06 11:12:54 +00:00
seer.note('build html');
this.grid.newDisplay(html);
2018-11-06 12:34:55 +00:00
document.querySelector('.loading-wave').style.display = 'none';
return seer.report();
}).catch((error) =>
{
console.log('ERROR: ' + error, error);
});
2018-11-06 12:34:55 +00:00
}
this.resetPage = function()
{
lightbox.close();
document.activeElement.blur();
}
this.updateQuery = function()
{
let target = window.document.location.hash;
if (this.queryCur !== 'add')
{
this.queryPrev = this.queryCur;
}
target = target.substr(0,1) === "#" ? target.substr(1,target.length-1) : target;
this.queryCur = target.trim();
if (window.location.hash != this.queryCur)
{
window.location.hash = this.queryCur;
}
2018-07-15 14:23:07 +00:00
}
2018-07-13 15:56:09 +00:00
}
window.addEventListener("hashchange", function() { main.load(); });