Skip to content

Commit

Permalink
Merge branch 'master' into master
Browse files Browse the repository at this point in the history
  • Loading branch information
gregorybesson committed Mar 15, 2017
2 parents 0b76a77 + 49901ac commit 5404030
Show file tree
Hide file tree
Showing 9 changed files with 130 additions and 6 deletions.
3 changes: 3 additions & 0 deletions docs/types/abe-rich.md
Expand Up @@ -29,6 +29,9 @@ A toolbar attribut allow to customize the rich textarea (display / hide customiz
- code
- list (ordered & unordered)
- media (upload image & video)
- format (h1, h2 ...)
- font (font-family)
- fontsize

exemple :

Expand Down
75 changes: 74 additions & 1 deletion src/cli/cms/editor/handlebars/printInput.js
Expand Up @@ -123,11 +123,85 @@ export function createInputRich(attributes, inputClass, params) {
{ icon: 'ti-image', title: 'media', action: 'media', param: '', popup: 'image' },
{ icon: 'ti-face-smile', title: 'smiley', action: 'smiley', param: '', popup: 'smiley' },
]

var selects = [{
name: 'Formating',
id: 'format',
options: [
{name: 'Heading 1', regexp: '<h1>$1</h1>'},
{name: 'Heading 2', regexp: '<h2>$1</h2>'},
{name: 'Heading 3', regexp: '<h3>$1</h3>'},
{name: 'Heading 4', regexp: '<h4>$1</h4>'},
{name: 'Heading 5', regexp: '<h5>$1</h5>'},
{name: 'Heading 6', regexp: '<h6>$1</h6>'},
{name: 'Paragraph', regexp: '<p>$1</p>'},
]
},{
name: 'Font',
id: 'font',
options: [
{name: 'Georgia', regexp: '<span style=\"font-family:Georgia;\">$1</span>'},
{name: 'serif', regexp: '<span style=\"font-family:serif;\">$1</span>'},
{name: 'Helvetica', regexp: '<span style=\"font-family:Helvetica;\">$1</span>'},
{name: 'Times', regexp: '<span style=\"font-family:Times;\">$1</span>'},
{name: 'Times New Roman', regexp: '<span style=\"font-family:Times New Roman;\">$1</span>'},
{name: 'Arial', regexp: '<span style=\"font-family:Arial;\">$1</span>'},
{name: 'Arial Black', regexp: '<span style=\"font-family:Arial Black;\">$1</span>'},
{name: 'Verdana', regexp: '<span style=\"font-family:Verdana;\">$1</span>'},
{name: 'monospace', regexp: '<span style=\"font-family:monospace;\">$1</span>'},
{name: 'fantasy', regexp: '<span style=\"font-family:fantasy;\">$1</span>'},
]
},{
name: 'Font size',
id: 'fontsize',
options: [
{name: '5', regexp: '<span style=\"font-size:5;\">$1</span>'},
{name: '6', regexp: '<span style=\"font-size:6;\">$1</span>'},
{name: '7', regexp: '<span style=\"font-size:7;\">$1</span>'},
{name: '8', regexp: '<span style=\"font-size:8;\">$1</span>'},
{name: '9', regexp: '<span style=\"font-size:9;\">$1</span>'},
{name: '10', regexp: '<span style=\"font-size:10;\">$1</span>'},
{name: '11', regexp: '<span style=\"font-size:11;\">$1</span>'},
{name: '12', regexp: '<span style=\"font-size:12;\">$1</span>'},
{name: '14', regexp: '<span style=\"font-size:14;\">$1</span>'},
{name: '16', regexp: '<span style=\"font-size:16;\">$1</span>'},
{name: '18', regexp: '<span style=\"font-size:18;\">$1</span>'},
{name: '20', regexp: '<span style=\"font-size:20;\">$1</span>'},
{name: '22', regexp: '<span style=\"font-size:22;\">$1</span>'},
{name: '24', regexp: '<span style=\"font-size:24;\">$1</span>'},
{name: '26', regexp: '<span style=\"font-size:26;\">$1</span>'},
{name: '28', regexp: '<span style=\"font-size:28;\">$1</span>'},
{name: '36', regexp: '<span style=\"font-size:36;\">$1</span>'},
{name: '48', regexp: '<span style=\"font-size:48;\">$1</span>'},
{name: '72', regexp: '<span style=\"font-size:72;\">$1</span>'},
]
}]

if(params.toolbar !== '*') params.toolbar = params.toolbar.split(',')
var inputRich = `<div class="parent-${params.type} parent-${params.key}" data-parent="${params.key}">
<div class="wysiwyg-container rich">
<div class="wysiwyg-toolbar wysiwyg-toolbar-top">`

selects.forEach(function (select) {
if(params.toolbar === '*' || params.toolbar.indexOf(select.id) > -1){
inputRich += `<div class="dropdown">
<button id="${select.id}" class="dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
${select.name}
<span class="caret"></span>
</button>
<ul class="dropdown-menu" aria-labelledby="${select.id}">`
select.options.forEach(function (option) {
inputRich += `<li>
<a href='#' class='wysiwyg-dropdown-option' data-regexp='${option.regexp}'>
${option.name}
</a>
</li>`
})
inputRich += `</ul>
</div>`
}
})

buttons.forEach(function (button) {
if(params.toolbar === '*' || params.toolbar.indexOf(button.action) > -1){
var hotkey = (button.hotkey != null) ? `hotkey="${button.hotkey}"` : ''
Expand All @@ -151,7 +225,6 @@ export function createInputRich(attributes, inputClass, params) {
</div>
${hint(params)}
</div>`

return inputRich
}

Expand Down
11 changes: 8 additions & 3 deletions src/cli/cms/media/image.js
Expand Up @@ -103,8 +103,8 @@ export function saveFile(req) {
folderWebPath = '/' + config.upload[mediaType]
}

filePath = path.join(folderFilePath, slug)
resp['filePath'] = path.join('/' + folderWebPath, slug)
filePath = path.posix.join(folderFilePath, slug)
resp['filePath'] = path.posix.join('/' + folderWebPath, slug)

file.on('limit', function() {
hasSentHeader = true
Expand All @@ -130,10 +130,15 @@ export function saveFile(req) {
if(mediaType === 'image') {
var thumbPromise = generateThumbnail(filePath)
thumbPromise.then(function (thumbResp) {
resp.thumbnail = thumbResp.thumb
resp.thumbnail = (/^win/.test(process.platform)) ? thumbResp.thumb.replace(/\\/g, '/') : thumbResp.thumb;
if(req && req.query && req.query.input && ( req.query.input.indexOf('data-size') > -1 )){
var thumbsSizes = cmsData.regex.getAttr(req.query.input, 'data-size').split(',')
cropAndSaveFiles(thumbsSizes, filePath, resp).then(function (resp) {
if(/^win/.test(process.platform)){
for (var i = 0; i < resp.thumbs.length; i++) {
resp.thumbs[i].name = resp.thumbs[i].name.replace(/\\/g, '/')
}
}
resolve(resp)
})
}
Expand Down
2 changes: 1 addition & 1 deletion src/cli/cms/templates/assets.js
Expand Up @@ -23,7 +23,7 @@ export function copy() {
}

Array.prototype.forEach.call(publicFolders, (publicFolder) => {
var res = dircompare.compareSync(publicFolder, dest, {compareSize: true})
var res = dircompare.compareSync(publicFolder, dest, {compareDate: true})

res.diffSet.forEach(function (entry) {
var state = {
Expand Down
2 changes: 2 additions & 0 deletions src/cli/core/utils/sort.js
Expand Up @@ -56,6 +56,8 @@ export function predicatBy(prop, order){
return function (a, b) {
var i = 0
while( i < len ) { a = a[prop[i]]; b = b[prop[i]]; i++ }
if (!isNaN(a)) a = parseFloat(a)
if (!isNaN(b)) b = parseFloat(b)
if (a < b) {
return -1*order
} else if (a > b) {
Expand Down
2 changes: 1 addition & 1 deletion src/server/public/abecms/css/styles.css

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions src/server/public/abecms/scripts/modules/EditorSave.js
Expand Up @@ -99,6 +99,7 @@ export default class EditorSave {
}
if(emptyObject === 0) {
delete this._json.data[obj][index]
if(this._json.data[obj].length == 1) delete this._json.data[obj]
}
} else {
if (input.getAttribute('data-autocomplete') === 'true' || input.getAttribute('data-multiple') === 'multiple') {
Expand Down
12 changes: 12 additions & 0 deletions src/server/public/abecms/scripts/utils/rich-texarea.js
Expand Up @@ -10,6 +10,7 @@ export default class RichTexarea {
this.wrapper = wrapper
this.textarea = wrapper.querySelector('.form-rich')
this.btns = this.wrapper.querySelectorAll('.wysiwyg-toolbar-icon')
this.selects = this.wrapper.querySelectorAll('.wysiwyg-dropdown-option')

if (this.textarea.getAttribute('disabled') !== 'disabled') {
this.textEditor = wysiwyg({
Expand All @@ -24,6 +25,11 @@ export default class RichTexarea {
Array.prototype.forEach.call(this.btns, (btn) => {
btn.addEventListener('click', this._action)
})

Array.prototype.forEach.call(this.selects, (select) => {
select.addEventListener('click', this.dropdownAction.bind(this))
})

}
}

Expand Down Expand Up @@ -59,6 +65,12 @@ export default class RichTexarea {
}
}

dropdownAction(e) {
var newValue = e.target.getAttribute('data-regexp').replace('$1', window.getSelection().toString())
this._replaceSelectionWithHtml(newValue)
this.setHTML()
}

action(e) {
this.el = e.target
if(this.el.tagName.toLowerCase() === 'span') this.el = this.el.parentNode
Expand Down
28 changes: 28 additions & 0 deletions src/server/sass/modules/_editor-inputs.scss
Expand Up @@ -121,6 +121,34 @@ select[multiple], select[size] {
}
}

.wysiwyg-container {
.dropdown {
display: inline-block;
}
.dropdown-toggle {
background: none;
border: none;
line-height: 25px;
padding-bottom: 0;
}
.wysiwyg-toolbar-top {
overflow: visible;
}

.dropdown-menu {
max-height: 200px;
overflow: auto;
border-radius: 0px 4px 4px 4px;
font-size: 13px;
margin: 0;
>li {
>a {
padding: 0px 10px;
}
}
}
}

.wysiwyg-popup {
&.image {
border-radius: 0;
Expand Down

0 comments on commit 5404030

Please sign in to comment.