Skip to content

Commit

Permalink
feature: prefill reload front
Browse files Browse the repository at this point in the history
  • Loading branch information
nicolaslabbe committed Oct 12, 2016
1 parent b4fec49 commit 7c75137
Show file tree
Hide file tree
Showing 14 changed files with 167 additions and 68 deletions.
8 changes: 4 additions & 4 deletions src/cli/cms/data/source.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ export function requestList(obj, tplPath, match, jsonPage) {
}else {
jsonPage[obj.key] = data
}
} else if ((jsonPage[obj.key] == null) && obj.prefill) {
} else if ((typeof jsonPage[obj.key] === 'undefined' || jsonPage[obj.key] === null) && obj.prefill) {
if (obj['prefill-quantity'] && obj['max-length']) {
jsonPage[obj.key] = data.slice(0, (obj['prefill-quantity'] > obj['max-length']) ? obj['max-length'] : obj['prefill-quantity'])
}else if (obj['prefill-quantity']) {
Expand All @@ -34,7 +34,7 @@ export function requestList(obj, tplPath, match, jsonPage) {
}
}

resolve()
resolve(jsonPage)
})
})

Expand Down Expand Up @@ -164,8 +164,8 @@ export function nextDataList(tplPath, jsonPage, match, onlyDynamicSelect) {
resolve()
}else {
requestList(obj, tplPath, match, jsonPage)
.then(() => {
resolve()
.then((jsonPage) => {
resolve(jsonPage)
}).catch((e) => {
console.log('[ERROR] source.js requestList', e)
})
Expand Down
5 changes: 2 additions & 3 deletions src/cli/cms/data/sql.js
Original file line number Diff line number Diff line change
Expand Up @@ -263,14 +263,13 @@ export function executeFromClause(statement, pathFromClause){
* @return {Array} found object that match
*/
export function execQuery(pathQuery, match, jsonPage) {
var res
var files
var request = handleSqlRequest(cmsData.regex.getAttr(match, 'source'), jsonPage)

files = executeFromClause(request.from, pathQuery)
files = executeWhereClause(files, request.where, request.limit, request.columns, jsonPage)
files = executeOrderByClause(files, request.orderby)
res = executeWhereClause(files, request.where, request.limit, request.columns, jsonPage)
return res
return files
}

export function executeQuerySync(pathQuerySync, match, jsonPage) {
Expand Down
11 changes: 11 additions & 0 deletions src/cli/cms/editor/handlebars/printInput.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,17 @@ export default function printInput () {
lastValues = JSON.stringify(params.source).replace(/\'/g, '&quote;')
}
res += '<div class="autocomplete-result-wrapper">'
if(params.autocomplete != null && params.autocomplete === 'true') {
res += `<div class="autocomplete-refresh" value=''
data-autocomplete-refresh="true"
data-autocomplete-refresh-sourcestring="${params.sourceString}"
data-autocomplete-refresh-prefill-quantity="${params['prefill-quantity']}"
data-autocomplete-refresh-key="${params.key}"
data-autocomplete-data-display="${params.display}"
>
<span class="glyphicon glyphicon-refresh"></span>
</div>`
}
Array.prototype.forEach.call(params.value, (val) => {
res += sourceAutocomplete(val, params)
})
Expand Down
1 change: 1 addition & 0 deletions src/cli/cms/editor/handlebars/sourceAutocomplete.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import sourceAttr from './sourceAttr'

export default function sourceAutocomplete(val, params) {
var attr = sourceAttr(val, params)

return `<div class="autocomplete-result" value='${attr.hiddenVal}' data-parent-id='${params.key}' ${attr.selected}>
${attr.val}
<span class="glyphicon glyphicon-remove" data-autocomplete-remove="true"></span>
Expand Down
8 changes: 4 additions & 4 deletions src/cli/process/generate-posts.js
Original file line number Diff line number Diff line change
Expand Up @@ -70,10 +70,10 @@ function publishNext(files, tt, cb, i = 0) {
}

function startProcess() {
log('start publish all at path ' + processConfig.ABE_PATH);
log('searching for file at ' + config.root);
log('seach status: ' + processConfig.ABE_STATUS);
log('save to: ' + path.join(config.root, processConfig.ABE_DESTINATION));
log('start publish all at path ' + processConfig.ABE_PATH)
log('searching for file at ' + config.root)
log('seach status: ' + processConfig.ABE_STATUS)
log('save to: ' + path.join(config.root, processConfig.ABE_DESTINATION))
var files = Manager.instance.getListWithStatusOnFolder(processConfig.ABE_STATUS, processConfig.ABE_PATH)

log('Found ' + files.length + ' to republish')
Expand Down
76 changes: 38 additions & 38 deletions src/cli/process/initAbeForProcesses.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,47 +14,47 @@ export var processConfig
export var dateStart

export function getTime() {
return (moment(moment() - dateStart).format('mm:ss')) + 'sec'
return (moment(moment() - dateStart).format('mm:ss')) + 'sec'
}

export function init(processName, conf) {
var p = new Promise((resolve, reject) => {

log = debug(processName + ':log')
log.color = 2
trace = debug(processName + ':trace')
error = debug(processName + ':error')
error.color = 1

processConfig = {}
Array.prototype.forEach.call(process.argv, (item) => {
if (item.indexOf('=') > -1) {
var ar = item.split('=')
processConfig[ar[0]] = ar[1]
}
})
if(processConfig.ABE_WEBSITE) {
config.set({root: processConfig.ABE_WEBSITE.replace(/\/$/, '') + '/'})
}

processConfig = extend(true, conf, processConfig)

if(typeof processConfig.ABE_WEBSITE !== 'undefined' && processConfig.ABE_WEBSITE !== null) {
abeExtend.hooks.instance.trigger('afterHandlebarsHelpers', Handlebars)

Manager.instance.init()
var p = new Promise((resolve, reject) => {

log = debug(processName + ':log')
log.color = 2
trace = debug(processName + ':trace')
error = debug(processName + ':error')
error.color = 1

processConfig = {}
Array.prototype.forEach.call(process.argv, (item) => {
if (item.indexOf('=') > -1) {
var ar = item.split('=')
processConfig[ar[0]] = ar[1]
}
})
if(processConfig.ABE_WEBSITE) {
config.set({root: processConfig.ABE_WEBSITE.replace(/\/$/, '') + '/'})
}

processConfig = extend(true, conf, processConfig)

if(typeof processConfig.ABE_WEBSITE !== 'undefined' && processConfig.ABE_WEBSITE !== null) {
abeExtend.hooks.instance.trigger('afterHandlebarsHelpers', Handlebars)

Manager.instance.init()
.then(()=> {
dateStart = moment()
resolve()
})
dateStart = moment()
resolve()
})
.catch((e) => {
error('publish-all' + e)
})
}else {
error('ABE_WEBSITE is not defined use node process.js ABE_WEBSITE=/pat/to/website')
process.exit(0)
}
})

return p
error('publish-all' + e)
})
}else {
error('ABE_WEBSITE is not defined use node process.js ABE_WEBSITE=/pat/to/website')
process.exit(0)
}
})

return p
}
2 changes: 2 additions & 0 deletions src/server/controllers/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import {
,getUnpublish
,getDelete
,postUpload
,postSqlRequest
} from '../routes'

import {
Expand All @@ -35,6 +36,7 @@ router.get('/abe/delete-logs*', getDeleteLogs)
router.get('/abe/create*', getCreate)
router.get('/abe/duplicate*', getDuplicate)
router.get('/abe/update*', getUpdate)
router.post('/abe/sql-request*', postSqlRequest)
router.post('/page/*', postPage)
router.get('/page/*', getPage)
router.post('/publish', postPublish)
Expand Down
1 change: 0 additions & 1 deletion src/server/helpers/page.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import mkdirp from 'mkdirp'
import path from 'path'
import {
cmsData,
Expand Down
85 changes: 68 additions & 17 deletions src/server/public/scripts/modules/EditorAutocomplete.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import {IframeCommentNode} from '../utils/iframe'
import Handlebars from 'handlebars'
import Nanoajax from 'nanoajax'
import on from 'on'
import qs from 'qs'

export default class EditorAutocomplete {
constructor() {
Expand All @@ -21,9 +22,11 @@ export default class EditorAutocomplete {
this._handleRemove = this._remove.bind(this)
this._handleDocumentClick = this._documentClick.bind(this)
this._handleSelectValue = this._selectValue.bind(this)
this._handleRefresh = this._refresh.bind(this)

this._autocompletesRemove = [].slice.call(document.querySelectorAll('[data-autocomplete-remove=true]'))
this._autocompletes = [].slice.call(document.querySelectorAll('[data-autocomplete=true]'))
this._autocompletesRefresh = [].slice.call(document.querySelectorAll('[data-autocomplete-refresh=true]'))

this._currentInput = null
this._divWrapper = document.createElement('div')
Expand All @@ -42,6 +45,11 @@ export default class EditorAutocomplete {
autocompleteRemove.addEventListener('click', this._handleRemove)
})

Array.prototype.forEach.call(this._autocompletesRefresh, (autocompletesRefresh) => {
autocompletesRefresh.removeEventListener('click', this._handleRefresh)
autocompletesRefresh.addEventListener('click', this._handleRefresh)
})

Array.prototype.forEach.call(this._autocompletes, (autocomplete) => {
document.body.removeEventListener('keydown', this._handleKeyDown)
document.body.addEventListener('keydown', this._handleKeyDown)
Expand Down Expand Up @@ -123,8 +131,28 @@ export default class EditorAutocomplete {
}
}

_add(display, value, json, autocompleteResultWrapper) {
var deepval = this._deep_value_array(json, display)

if(typeof deepval !== 'undefined' && deepval !== null && deepval !== '') {
var div = document.createElement('div')
div.classList.add('autocomplete-result')
div.setAttribute('data-parent-id', this._currentInput.getAttribute('data-id'))
div.setAttribute('value', value.replace(/&quote;/g, '\''))
div.innerHTML = `${this._deep_value_array(json, display)}`

var remove = document.createElement('span')
remove.classList.add('glyphicon', 'glyphicon-remove')
remove.setAttribute('data-autocomplete-remove', 'true')
remove.addEventListener('click', this._handleRemove)
div.appendChild(remove)

autocompleteResultWrapper.appendChild(div)
}
}

_select(target) {
var val = JSON.parse(target.getAttribute('data-value').replace(/&quote;/g, '\''))
var json = JSON.parse(target.getAttribute('data-value').replace(/&quote;/g, '\''))
var maxLength = this._currentInput.getAttribute('data-maxlength')
if(typeof maxLength !== 'undefined' && maxLength !== null && maxLength !== '') {
maxLength = parseInt(maxLength)
Expand All @@ -133,23 +161,9 @@ export default class EditorAutocomplete {
return
}
}
var display = target.getAttribute('data-display')
var div = document.createElement('div')
div.classList.add('autocomplete-result')
div.setAttribute('data-parent-id', this._currentInput.getAttribute('data-id'))
div.setAttribute('value', target.getAttribute('data-value').replace(/&quote;/g, '\''))
div.innerHTML = `${this._deep_value_array(val, display)}`

var resWrapper = this._divWrapper.parentNode.querySelector('.autocomplete-result-wrapper')

var remove = document.createElement('span')
remove.classList.add('glyphicon', 'glyphicon-remove')
remove.setAttribute('data-autocomplete-remove', 'true')
remove.addEventListener('click', this._handleRemove)
div.appendChild(remove)

resWrapper.appendChild(div)

this._add(target.getAttribute('data-display'), target.getAttribute('data-value'), json,
this._divWrapper.parentNode.querySelector('.autocomplete-result-wrapper'))
this._saveData()

}
Expand Down Expand Up @@ -245,6 +259,43 @@ export default class EditorAutocomplete {
}
}

_refresh(e) {
var target = e.currentTarget

var autocompleteResultWrapper = target.parentNode.parentNode.querySelector('.autocomplete-result-wrapper')
var autocompleteResult = autocompleteResultWrapper.querySelectorAll('.autocomplete-result')
Array.prototype.forEach.call(autocompleteResult, (autocompleteResult) => {
autocompleteResult.parentNode.removeChild(autocompleteResult)
})

var jsonPost = JSON.parse(JSON.stringify(json))
delete jsonPost.abe_source
this._currentInput = target.parentNode.parentNode.querySelector('input')
var display = target.getAttribute('data-autocomplete-data-display')
var body = qs.stringify({
sourceString: target.getAttribute('data-autocomplete-refresh-sourcestring'),
prefillQuantity: target.getAttribute('data-autocomplete-refresh-prefill-quantity'),
key: target.getAttribute('data-autocomplete-refresh-key'),
folder: CONFIG.FOLDERPATH,
json: jsonPost
})

this._ajax(
{
url: '/abe/sql-request',
body: body,
cors: true,
method: 'post'
},
(code, responseText) => {
var items = JSON.parse(responseText)
Array.prototype.forEach.call(items, function(item) {
this._add(display, JSON.stringify(item), item, autocompleteResultWrapper)
}.bind(this))
this._saveData()
})
}

_keyDown(e) {
if(this._canSelect) {
var parent = this._currentInput.parentNode.querySelector('.autocomplete-wrapper')
Expand Down
1 change: 1 addition & 0 deletions src/server/routes/get-main.js
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,7 @@ var route = function(req, res, next) {
hasBlock: _hasBlock,
form: _form,
urlToSaveFile: _filePath,
folderToSaveFile: (_filePath) ? path.dirname(_filePath) : '',
// tplName: _file,
json: _json,
config: config,
Expand Down
2 changes: 2 additions & 0 deletions src/server/routes/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import getSaveConfig from './get-save-config'
import getUnpublish from './get-unpublish'
import getDelete from './get-delete'
import postUpload from './post-upload'
import postSqlRequest from './post-sql-request'

export {
getMain
Expand All @@ -36,4 +37,5 @@ export {
,getUnpublish
,getDelete
,postUpload
,postSqlRequest
}
27 changes: 27 additions & 0 deletions src/server/routes/post-sql-request.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import {
cmsData
,abeExtend
} from '../../cli'

var route = function(req, res, next){
abeExtend.hooks.instance.trigger('beforeRoute', req, res, next)
if(typeof res._header !== 'undefined' && res._header !== null) return

var sourceString = req.body.sourceString
var prefillQuantity = req.body.prefillQuantity
var folder = req.body.folder
var key = req.body.key
var jsonPage = (req.body.json) ? JSON.parse(JSON.stringify(req.body.json)) : {}

delete jsonPage[key]

var request = `{{abe type="data" key="${key}" source="${sourceString}" prefill="true" prefill-quantity='${prefillQuantity}' editable="true"}}`
var obj = cmsData.attributes.getAll(request, jsonPage)

cmsData.source.requestList(obj, folder, request, jsonPage)
.then(() => {
return res.send(jsonPage[key])
})
}

export default route
6 changes: 6 additions & 0 deletions src/server/sass/modules/_autocomplete.scss
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,12 @@
}
}

.autocomplete-refresh {
float: right;
padding: 2px;
cursor: pointer;
}

.autocomplete-result-wrapper {
padding: 10px 0px;
}
Expand Down
2 changes: 1 addition & 1 deletion src/server/views/template-engine.html
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<!DOCTYPE html>
<html data-config='{"URL":"{{abeUrl}}","TPLPATH":"{{templatePath}}","TPLNAME":"{{tplName}}","FILEPATH":"{{urlToSaveFile}}"}'
<html data-config='{"URL":"{{abeUrl}}","TPLPATH":"{{templatePath}}","TPLNAME":"{{tplName}}","FILEPATH":"{{urlToSaveFile}}","FOLDERPATH":"{{folderToSaveFile}}"}'
data-json='{{{printJson json 1}}}'
data-Locales='{{{printJson Locales}}}' >
<head>
Expand Down

0 comments on commit 7c75137

Please sign in to comment.