Skip to content
Snippets Groups Projects
Verified Commit 4dc6d9b0 authored by Isabella Skořepová's avatar Isabella Skořepová
Browse files

New naming convention

Moved all not yet promisified files to sitegin/legacy
parent 7043da52
No related branches found
No related tags found
No related merge requests found
Showing with 51 additions and 289 deletions
...@@ -8,7 +8,7 @@ require('./sitegin/sitegin')({ ...@@ -8,7 +8,7 @@ require('./sitegin/sitegin')({
var fs = require('fs'); var fs = require('fs');
function run() { function run() {
jobs.runSequence('config','readFiles','print') jobs.runSequence('config','readFiles','parseHugo','print')
.catch(e => console.log(e.stack)); .catch(e => console.log(e.stack));
} }
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
"browser-sync": "^2.11.1", "browser-sync": "^2.11.1",
"chokidar": "^1.4.2", "chokidar": "^1.4.2",
"highlight.js": "^9.2.0", "highlight.js": "^9.2.0",
"jsesc": "^1.0.0",
"marked": "^0.3.5", "marked": "^0.3.5",
"mkdirp": "^0.5.1", "mkdirp": "^0.5.1",
"moment": "^2.11.2", "moment": "^2.11.2",
......
exports.Page = function() {
this.file = "";
this.metadata = {};
this.content = "";
this.type = "article";
}
exports.PageList = function() {
var list = this;
list.list = [];
list.length = 0;
list.addPage = function(article) {
list.length++;
if(! (article instanceof exports.Page))
throw "article has to be of type Page";
else if(list.containsFile(article.file)) {
console.log(list.getPageByFile(article.file));
throw "article is already in this list"
} else
list.list.push(article);
}
list.forEach = function(f) {
list.list.forEach(f);
}
list.getPageByFile = function(file) {
var rarticle = undefined;
list.forEach(function(article) {
if(article.file == file) {
rarticle = article;
}
});
return rarticle;
}
list.containsFile = function(file) {
var contains = false;
list.forEach(function(article) {
if(article.file == file) {
contains = true;
}
});
return contains;
}
return list;
}
File moved
var fs = require('fs');
var toml = require('toml');
var PageList = require('./Page').PageList;
var Page = require('./Page').Page;
var moment = require('moment');
var path = require('path');
function walk(currentDirPath, callback, end_cb) {
var subcalls = 0;
var ender = function() {
subcalls--;
if(subcalls <= 0) {
if(end_cb !== undefined)
end_cb();
}
}
var fs = require('fs'), path = require('path');
fs.readdir(currentDirPath, function(err, files) {
if(err!=null) console.log(err);
files.forEach(function(name) {
var filePath = path.join(currentDirPath, name);
try {
var stat = fs.statSync(filePath);
if (stat.isFile()) {
callback(filePath, stat);
} else if (stat.isDirectory()) {
if(filePath.indexOf(".git") < 0) {
subcalls++;
walk(filePath, callback, ender);
}
}
} catch(e) {}
});
if(subcalls == 0) ender();
});
};
var readPageWorker = function(file, articleName, contentDir) {
if(file === undefined) throw new Error("file is undefined");
file = file.substring(4);
var fm_end = file.indexOf("+++");
var obj = new Page;
obj.origFile = contentDir+articleName+'.md';
obj.file = articleName.replace("articles","clanek");
obj.content = file.substring(fm_end+4);
try {
obj.metadata = toml.parse(file.substring(0,fm_end-1)+"\n");
} catch(e) {
console.log(articleName+": Failed to parse metadata");
throw e;
}
if(obj.metadata.date && obj.metadata.date.creation) obj.metadata.date.creation = moment(obj.metadata.date.creation);
return obj;
}
module.exports = function(_contentDir) {
var exports = this;
exports.walk = walk;
exports.fancyname = "loader hugo";
var contentDir = _contentDir;
if(contentDir == undefined) contentDir = './content/';
if(!contentDir.endsWith('/')) contentDir+='/';
/*
* articleName:
* string
* callback:
* called when article is read
* returns:
* {
* string articleName,content
* object frontmatter
* function save
* }
*/
exports.readPage = function(articleName, cb) {
fs.readFile(contentDir+articleName+".md", 'utf8', function(err, data) {
if(err != null) throw err;
cb(readPageWorker(data, articleName, contentDir));
});
}
/*
* callback:
* function(articleName)
* called for each article on website
* cb_end:
* function()
* called when all articles are listed
*/
exports.forEachPage = function(callback, cb_end) {
walk(contentDir+"articles",function(filePath, stat) {
console.log(filePath, path.basename(filePath));
if(path.basename(filePath).substr(0,1) == ".") return;
if(callback !== undefined) callback(filePath.substring(contentDir.length,filePath.length-3));
}, function() {
if(cb_end !== undefined) cb_end();
});
};
/*
* cb:
* function(articleList)
* called after all cb_on_each
*/
exports.getPageList = function(cb) {
var currentlyReadingCount = 0;
var allPagesListed = false;
var cb_called = false;
var list = new PageList;
exports.forEachPage(function(articleName) {
currentlyReadingCount++;
exports.readPage(articleName, function(article){
list.addPage(article);
currentlyReadingCount--;
if(allPagesListed && currentlyReadingCount == 0 && !cb_called) {
if(cb !== undefined) cb(list);
cb_called = true;
}
});
},function(){
if(currentlyReadingCount == 0 && !cb_called) {
if(cb !== undefined) cb(list);
cb_called = true;
}
allPagesListed = true;
});
};
}
File moved
File moved
File moved
File moved
File moved
File moved
module.exports = function() {
var out = this;
out.fancyname = "output console";
out.forEachPage = function(article, cb) {
cb();
}
}
var toml = require('toml');
var moment = require('moment');
var path = require('path');
var jsesc = require('jsesc')
var readPageWorker = function(content, articleName) {
if(content === undefined) throw new Error("content is undefined");
var head = content.substring(0,4)
if(head !== '+++\n')
throw new Error('Failed to parse file '+articleName+':\n'+
'Wrong header (expected "+++\\n" got "'+jsesc(head)+'")')
content = content.substring(4);
var fm_end = content.indexOf("+++\n");
if(fm_end < 0) {
console.log(jsesc(content));
throw new Error('Cannot find terminating +++\n in file '+articleName);
}
var obj = {};
obj.content = content.substring(fm_end+4);
try {
obj.metadata = toml.parse(content.substring(0,fm_end-1)+"\n");
} catch(e) {
console.log(articleName+": Failed to parse metadata");
throw e;
}
if(obj.metadata.date && obj.metadata.date.creation) obj.metadata.date.creation = moment(obj.metadata.date.creation);
return obj;
}
module.exports = function(obj) {
return new Promise(function(resolve, reject) {
var pages = [];
obj.pages.forEach(function(page) {
pages.push(readPageWorker(page.content, page.filename));
})
obj.pages = pages;
resolve(obj);
});
}
var util = require('util')
module.exports = function(a) { module.exports = function(a) {
var pages = a.pages var pages = a.pages
a.pages = ['...'] var page0 = pages[0]
console.log(a) //page0.content = '...'
a.pages = [page0]
console.log(JSON.stringify(a,null,2))
a.pages = pages a.pages = pages
return Promise.resolve(a) return Promise.resolve(a)
} }
File moved
module.exports = function() {
var t = this;
var lastEvent;
this.load = function(input) {
lastEvent = input.fancyname+" done";
input.getPageList(function(list) {
t.emit(input.fancyname+" done", list);
});
return this;
}
this.registerNext = function(obj) {
// pre
t.on(lastEvent, function(list) {
if(obj.pre !== undefined) {
obj.pre(function() {
t.emit(obj.fancyname+' pre done', list);
}, list);
} else {
t.emit(obj.fancyname+' pre done', list);
}
});
// forEachPage
t.on(obj.fancyname+' pre done', function(list) {
var transforming = list.length;
if(obj.forEachPage !== undefined) {
list.forEach(function(article) {
obj.forEachPage(article, function() {
transforming--;
if(transforming == 0) {
t.emit(obj.fancyname+' forEachPage done', list);
}
});
});
} else {
t.emit(obj.fancyname+' forEachPage done', list);
}
});
// post
t.on(obj.fancyname+' forEachPage done', function(list) {
if(obj.post !== undefined) {
obj.post(function() {
t.emit(obj.fancyname+' post done', list);
}, list)
} else {
t.emit(obj.fancyname+' post done', list);
}
});
lastEvent = obj.fancyname+' post done';
return this;
}
this.finish = function(f) {
t.on(lastEvent, f);
}
}
module.exports.prototype.__proto__ = require('events').EventEmitter.prototype;
...@@ -4,8 +4,8 @@ module.exports = function(config) { ...@@ -4,8 +4,8 @@ module.exports = function(config) {
return jobs.registerMultiple( return jobs.registerMultiple(
config, config,
['config', './config'], ['config', './config'],
['readFiles', './read-files'], ['readFiles', './readFiles'],
['parseHugo', './input-hugo'], ['parseHugo', './parseHugo'],
['print', './print'], ['print', './print'],
['transformer-git', './transformer-git'], ['transformer-git', './transformer-git'],
...@@ -15,10 +15,8 @@ module.exports = function(config) { ...@@ -15,10 +15,8 @@ module.exports = function(config) {
['transformer-markdown', './transformer-markdown'], ['transformer-markdown', './transformer-markdown'],
['transformer-nunjucks', './transformer-nunjucks'], ['transformer-nunjucks', './transformer-nunjucks'],
['transformer-tags', './transformer-tags'],
['transformer-urlizetags', './transformer-urlizetags'], ['transformer-urlizetags', './transformer-urlizetags'],
['transformer-other', './transformer-other'], ['transformer-other', './transformer-other']
['transformer-images', './transformer-images']
) )
.then(function() { .then(function() {
return jobs; return jobs;
......
module.exports = function() {
var tr = this;
tr.fancyname = "transformer basichtml";
tr.forEachPage = function(article, cb) {
article.content = "<!DOCTYPE html><html><meta charset=\"UTF-8\" /><head><title>"
+article.metadata.title+
"</title></head><body>" + article.content + "</body></html>";
cb();
}
}
var path = require('path');
module.exports = function(articleList) {
console.log(articleList)
return Promise.resolve(articleList);
articleList.forEach(function(article) {
var img = article.metadata.image;
article.file = article.file.split(path.sep).join("/");
if(img) {
if(!img.match(/^\//)) {
article.metadata.image = article.file+"/"+img;
} else {
article.metadata.image = img.replace("/","");
}
}
});
return Promise.resolve(articleList);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment