router.path('/' + path + '/', function() { var pages = require('./' + path).pages; for(var page in pages) { if(pages.hasOwnProperty(page)) { this.post(page).bind(pages[page]); //this.get(page).bind(pages[page]); } } });
var run = function(req,res){ if(!req.userGroup){ res.send(400); return; } if(!req.query.template || !/^[a-zA-Z0-9]+$/.test(req.query.template)){ res.send(404); return; } if(!req.query.type || !/^[a-zA-Z0-9]+$/.test(req.query.type)){ res.send(404); return; } delete require.cache[require.resolve('../views/templates/'+req.userGroup+'/'+req.query.template+'/config.js')]; var config = require('../views/templates/'+req.userGroup+'/'+req.query.template+'/config.js'); if(req.query.type == 'page'){ if(!req.query.page || !/^[a-zA-Z0-9_\-]+$/.test(req.query.page)){ res.send(404); return; } if(config.pages.indexOf(req.query.page) !== -1){ if(req.query['preview-panel-id'] && req.query['preview-component']){ config.pagesInfo[req.query.page]['panels-detail'][req.query['preview-panel-id']] = getTemplateHTML(req.query['preview-component'], {}, req.query.template, req.userGroup, config) } res.render('templates/'+req.userGroup+'/'+req.query.template+'/'+req.query.page+'.html', {showPanelNumber : req.query['show-panel-number'] == 'true' ? true : false, panels: config.pagesInfo[req.query.page]['panels-detail'], templateName: config.templateName, pageName: config.pagesInfo[req.query.page].name, preview: true}, function(err, html){ html = html.replace(/<\$\$(.*)\$\$>/g, ''); html = html.replace(/window\.self != window\.top/g, 'false') res.end(html); }); }else res.send(404); }else if(req.query.type == 'thumbnail'){ if(config.thumbnail) res.sendfile(require('path').resolve('views/templates/'+req.userGroup+'/'+req.query.template+'/'+config.thumbnail)); else res.send(404); } }
content.sections.forEach(function(section){ section.pages = content.pages.filter(function(page) { return section.id == page.section }) // Sort section pages if any of the pages have an `order` property // Pages without the order property will come last if (any(section.pages, 'order')) { section.pages = sortBy(section.pages, function(page) { return Number(page.order || 10000) }) } })
function build() { const metadata = require(path.resolve(root, 'postMap.json')); const myInfo = require(path.resolve(root, 'my.json')); const htmlMenu = require('./tasks/menu')(); const rootBuildPath = path.resolve(root, 'build.json'); // 删除博客文件夹 del.sync(path.resolve(root, 'blog')); if (fs.existsSync(rootBuildPath)) { const rootBuildList = require(rootBuildPath).pages; rootBuildList.forEach((item) => { const mdConfig = { entry: path.resolve(root, item.path, item.entry), output: { path: item.path, name: 'index' }, format: ['html'], template: path.resolve(root, item.template), resources: { markdownCss: '/static/css/markdown.css', highlightCss: '/static/css/highlight.css', homepage: myInfo.homepage, name: myInfo.name, htmlMenu } }; mdpack(mdConfig); }); } fs.readdirSync(path.resolve(root, '_posts')) .filter(m => fs.statSync(path.resolve(root, '_posts', m)).isDirectory()) .forEach((year) => { fs.readdirSync(path.resolve(root, '_posts', year)) .forEach((post) => { const filename = post.split('.md')[0]; const _meta = metadata.post.find(_m => _m.filename === filename).metadata; const currentUrl = url.resolve(myInfo.homepage, `blog/${year}/${filename}`); const mdConfig = { entry: path.resolve(root, '_posts', year, post), output: { path: path.resolve(root, 'blog', year, filename), name: 'index' }, format: ['html'], plugins: [ new mdpack.plugins.mdpackPluginRemoveHead() ], template: path.join(__dirname, 'pages/blog.ejs'), resources: { markdownCss: '/static/css/markdown.css', highlightCss: '/static/css/highlight.css', title: _meta.title, author: _meta.author, type: _meta.type, intro: _meta.intro, tag: _meta.tag, keywords: _meta.keywords, homepage: myInfo.homepage, name: myInfo.name, disqusUrl: myInfo.disqus ? myInfo.disqus.src : false, currentUrl, htmlMenu } }; mdpack(mdConfig); }); }); }
db.getRowWithColumns('promobuilder', 'promo:'+(isGet ? req.query.pid : req.body.pid), ["pages:"], {}, function(err,data) { if (err || data.length == 0){ console.log(err); res.writeHead(500); res.end(); return; } var response = {}; var panels = {}; for(key in data[0].columns){ var pageId = key.replace('pages:','').split(":")[0]; if(pageId == pageItemId){ var type = key.replace('pages:'+pageItemId+':','').split(":")[0]; if(type == 'type'){ response.type = data[0].columns[key].value; continue; } if(type == 'name'){ response.name = data[0].columns[key].value; continue; } if(type == 'desc'){ response.desc = data[0].columns[key].value; continue; } if(type == 'template'){ response.template = data[0].columns[key].value; continue; } if(type == 'template-page'){ response['template-page'] = data[0].columns[key].value; continue; } if(type == 'configurables'){ if(typeof response['configurables'] == 'undefined')response['configurables'] = {}; response['configurables'][key.replace('pages:'+pageItemId+':configurables:','')] = data[0].columns[key].value; continue; } var panelId = parseInt(key.replace('pages:'+pageItemId+':','').split(":")[0]); if(panelId != '' && !isNaN(panelId)){ var column = key.replace('pages:'+pageItemId+':'+panelId+':','').split(":"); var index = parseInt(column[0]); if(typeof panels[panelId] == 'undefined')panels[panelId] = {}; if(column[0] != '' && /^[0-9]+$/.test(column[0])){ if(typeof panels[panelId]['data'] == 'undefined')panels[panelId]['data'] = []; if(typeof panels[panelId]['data'][index] == 'undefined')panels[panelId]['data'][index] = {}; panels[panelId]['data'][index][column[column.length-1]] = data[0].columns[key].value; }else{ panels[panelId][column[column.length-1]] = data[0].columns[key].value; } } } } for(panelId in panels){ panels[panelId]['data'].sort(function(a,b){ rowA = parseInt(a.row); rowB = parseInt(b.row); colA = parseInt(a.col); colB = parseInt(b.col); sizeyA = parseInt(a.sizey); sizeyB = parseInt(b.sizey); if(rowA > rowB)return 1; else if ( rowA < rowB )return -1; else if (colA > colB )return 1; else if ( colA < colB )return -1; else if (sizeyA > sizeyB)return -1; else if ( sizeyA < sizeyB )return 1; else return 0; }) } if(!response.template){ res.send(400); return; } delete require.cache[require.resolve('../views/templates/'+req.userGroup+'/'+response.template+'/config.js')]; var config = require('../views/templates/'+req.userGroup+'/'+response.template+'/config.js'); var panelInfo = {}; var hasFormElement = []; includeFBInit = false; for(panelId in panels){ panelInfo[panelId] = []; var rowsCounted = []; if(typeof panels[panelId]['data'] == 'object' && panels[panelId]['data'].length > 0){ for(var i=0;i<panels[panelId]['data'].length;i++){ panels[panelId]['data'][i].panel = panelId; var html = getTemplateHTML(panels[panelId]['data'][i].type, panels[panelId]['data'][i], response.template, req.userGroup, config); if(panels[panelId]['data'][i].isFormElement == 'true' && hasFormElement.indexOf(panelId) === -1){ hasFormElement.push(panelId); } if(i==0 && panels[panelId]['data'][i].row == 1 && panels[panelId]['data'][i].col != 1){ html = '<div class="col-md-'+(parseInt(panels[panelId]['data'][i].col) - 1)+'"></div>'+html; } if(typeof panels[panelId]['data'][i-1] == 'object' && (parseInt(panels[panelId]['data'][i-1].col)+parseInt(panels[panelId]['data'][i-1].sizex)) < parseInt(panels[panelId]['data'][i].col) && panels[panelId]['data'][i-1].row === panels[panelId]['data'][i].row){ var blank_sizex = parseInt(panels[panelId]['data'][i].col) - (parseInt(panels[panelId]['data'][i-1].col)+parseInt(panels[panelId]['data'][i-1].sizex)); if(blank_sizex>0){ html = '<div class="col-md-'+blank_sizex+'"></div>'+html; } } if(typeof panels[panelId]['data'][i-1] == 'object' && panels[panelId]['data'][i-1].row !== panels[panelId]['data'][i].row && parseInt(panels[panelId]['data'][i].col) > 1){ var previous_col_on_row = 0; for(var x=(i-1); x>=0;x--){ if(((parseInt(panels[panelId]['data'][x].row)+parseInt(panels[panelId]['data'][x].sizey))-1) >= panels[panelId]['data'][i].row){ if((parseInt(panels[panelId]['data'][x].col)+parseInt(panels[panelId]['data'][x].sizex)) <= panels[panelId]['data'][x].col){ previous_col_on_row = Math.max(previous_col_on_row, (parseInt(panels[panelId]['data'][x].col)+parseInt(panels[panelId]['data'][x].sizex))); } } } var blank_sizex = parseInt(panels[panelId]['data'][i].col) - previous_col_on_row -1; if(blank_sizex>0){ html = '<div class="col-md-'+blank_sizex+'"></div>'+html; } } if(rowsCounted.indexOf(panels[panelId]['data'][i].row) === -1){ html = '<div class="row">'+html; if(parseInt(panels[panelId]['data'][i].row) > 1)html = '</div>'+html; rowsCounted.push(panels[panelId]['data'][i].row); if(parseInt(panels[panelId]['data'][i].sizey) > 1){ for(var x= (parseInt(panels[panelId]['data'][i].row)+1); x< (parseInt(panels[panelId]['data'][i].row)+parseInt(panels[panelId]['data'][i].sizey));x++){ rowsCounted.push(x.toString()); } } } panelInfo[panelId].push(html); } } } for(key in panelInfo){ panelInfo[key] = panelInfo[key].join('')+'</div>'; if(hasFormElement.indexOf(key) !== -1){ panelInfo[key] = '<form data-submit="'+panels[key]['save-data-from']+'" data-path="/'+pageItemId+'.'+key+'">'+panelInfo[key]+'</form>'; } } var reqType = isGet ? req.query.type : req.body.type; if(reqType == 'json'){ response.panels = panels; response.html = panelInfo; res.send(response); return; }else if(reqType == 'generateHTML'){ if(typeof cb == 'function')cb( req, res, response, panelInfo, config, pageItemId, panels, hasFormElement); }else{ if(config.pages.indexOf(response['template-page']) !== -1){ fs.readFile(require('path').resolve('views/templates/'+req.userGroup+'/'+response.template+'/'+response['template-page']+'.html'), function(err, file){ if (err){ console.log(err); res.send(500); return; } var compiled = ejs.compile(file.toString(), {filename: require('path').resolve('views/templates/'+req.userGroup+'/'+response.template+'/'+response['template-page']+'.html'), compileDebug: false, debug: false}); var html = compiled({ showPanelNumber : false, panels: panelInfo, templateName: config.templateName, pageName: config.pagesInfo[response['template-page']].name }); html = html.replace(/<\$\$(.*)\$\$>/g, ''); res.send(html); }) }else{ res.send(404); } } });