diff --git a/src/client/index.css b/src/client/index.css new file mode 100644 index 0000000..0cbe2c3 --- /dev/null +++ b/src/client/index.css @@ -0,0 +1,2 @@ +body { font-family: Tahoma, sans-serif; margin: 0; } +h1 { font-size: 24px; padding-left: 20px; } diff --git a/src/client/index.html b/src/client/index.html new file mode 100644 index 0000000..45f4bf6 --- /dev/null +++ b/src/client/index.html @@ -0,0 +1,11 @@ + + + + + Gallery + + + + + + diff --git a/src/client/index.js b/src/client/index.js new file mode 100644 index 0000000..9f386fd --- /dev/null +++ b/src/client/index.js @@ -0,0 +1,10 @@ +(function () { + 'use strict'; + + addEventListener('DOMContentLoaded', init); + + function init() { + console.log('index initialized'); + } + +}()); diff --git a/src/client/index.polymer.html b/src/client/index.polymer.html new file mode 100644 index 0000000..c690995 --- /dev/null +++ b/src/client/index.polymer.html @@ -0,0 +1,18 @@ + + + + + Gallery + + + + + + + + diff --git a/src/index.js b/src/index.js index bcf8523..b34c95c 100644 --- a/src/index.js +++ b/src/index.js @@ -11,10 +11,13 @@ var cmd = process.argv[2] var idir = process.argv[3]; var odir = sanitize(process.argv[4] || idir + '.web'); +var clientDir = path.join(__dirname, 'client'); + var conf = { width: 700, quality: 80, - debug: true + debug: true, + template: 'index.html' }; var EOL = "\n"; var DEPTH = 2; @@ -99,16 +102,10 @@ function prepareImages() { }) .then(cont => { log('Image preparation done!'); - return new Promise((resolve, reject) => { - fs.writeFile(path.join(odir, 'content.json'), JSON.stringify(cont), err => { - if (err) reject('Writing content file failed: ' + err) - log('Written content file!') - resolve(cont); - }); - }) + return utils.writeFile(JSON.stringify(cont), 'content.json', odir); }) .then(cont => { - log('content:', util.inspect(cont, { showHidden: false, depth: null })); + log('Content:', util.inspect(cont, { showHidden: false, depth: null })); return cont; }) .catch(err => { @@ -126,19 +123,15 @@ function generateList(cont) { return cont }) .then(cont => getListEntryHtml(cont.cont)) - .then(html => { - log('Image list prepared!'); - return new Promise((resolve, reject) => { - fs.writeFile(path.join(odir, 'list.html'), html, err => { - if (err) reject('Writing content file failed: ' + err) - log('Written content file!') - resolve(html); - }); - }) - }) - .then(html => { - log("html:\n" + html); - return html; + .then(html => getPageHtml(html)) + .then(html => Promise.all([ + utils.writeFile(html, 'list.html', odir), + utils.copyFile(clientDir, 'index.css', odir), + utils.copyFile(clientDir, 'index.js', odir) + ])) + .then(res => { + log('Generated files:', res); + return res[0]; }) .catch(err => { console.log(err); @@ -163,6 +156,22 @@ function getListEntryHtml(cont, dir, depth) { return html; } +function getPageHtml(htmlPart, pageFname) { + pageFname = pageFname || conf.template; + return new Promise((resolve, reject) => { + var pageFile = path.join(clientDir, pageFname); + fs.readFile(pageFile, 'utf-8', (err, data) => { + if (err) reject(err); + else if (!data) reject('File empty: ' + pageFile); + resolve(data); + }); + }) + .then((pageHtml) => { + return pageHtml.substring(0, pageHtml.search('[ ]*')) + htmlPart + + pageHtml.substr(pageHtml.search('[ ]*')); + }); +} + function generateGallery(cont) { log('Generating gallery'); diff --git a/src/utils.js b/src/utils.js index 9e33944..fb5aa55 100644 --- a/src/utils.js +++ b/src/utils.js @@ -1,7 +1,14 @@ +/* global Promise */ + +var fs = require('fs'); +var path = require('path'); + module.exports = { indent: indent, stringContains: stringContains, - diaStrip: diaStrip + diaStrip: diaStrip, + writeFile: writeFile, + copyFile: copyFile }; function indent(depth, baseDepth, multip, ch, empty) { @@ -113,3 +120,21 @@ function diaStrip(str) { return str; } + +function writeFile(data, fname, dir) { + return new Promise((resolve, reject) => fs.writeFile(path.join(dir, fname), data, err => { + if (err) reject('Writing content file failed: ' + err) + resolve(fname); + })); +} + +function copyFile(srcDir, fname, destDir) { + return new Promise((resolve, reject) => { + var rs = fs.createReadStream(path.join(srcDir, fname)); + var ws = fs.createWriteStream(path.join(destDir, fname)); + rs.on('error', err => reject('File reading failed: ' + err)); + ws.on('error', err => reject('File writing failed: ' + err)); + ws.on('finish', () => resolve(fname)); + rs.pipe(ws); + }); +}