Skip to content

Commit

Permalink
enhancement: The way we detect Abe as tags (not inside a html attribu…
Browse files Browse the repository at this point in the history
…te) has been widely improved. Adding Unit tests to cover existing and new cases
  • Loading branch information
gregorybesson committed Dec 17, 2016
1 parent 4d02252 commit c0c74f9
Show file tree
Hide file tree
Showing 6 changed files with 62 additions and 16 deletions.
1 change: 1 addition & 0 deletions package.json
Expand Up @@ -95,6 +95,7 @@
"request": "^2.69.0",
"smartcrop-cli": "^1.0.2",
"smtp-server": "^1.11.1",
"striptags": "^2.1.1",
"uuid": "^3.0.0",
"watch": "^1.0.1",
"which": "^1.2.11",
Expand Down
1 change: 1 addition & 0 deletions src/cli/cms/data/regex.js
@@ -1,6 +1,7 @@
export let abeTag = /({{abe.*?[\s\S].*?}})/g
//
export let abePattern = /[^"']({{abe.*?type=[\'|\"][text|rich|textarea]+[\'|\"][\s\S].*?}})/g
export let abeAsTagPattern = /({{abe.*?type=[\'|\"][text|rich|textarea]+[\'|\"][\s\S].*?}})/g
// This pattern finds all abe tags enclosed in a HTML tag attribute
// export let abeAsAttributePattern = /( [A-Za-z0-9\-\_]+=["|']{1}{{abe.*?}})/g;
// export let abeAsAttributePattern = /( [A-Za-z0-9\-\_]+=["|']{1})(.*?)({{abe.*?}})/g
Expand Down
11 changes: 7 additions & 4 deletions src/cli/cms/templates/prepare.js
@@ -1,4 +1,5 @@
import Handlebars from 'handlebars'
import stripTags from 'stripTags'

import {
cmsData
Expand All @@ -19,23 +20,24 @@ export function addAbeDataAttrForHtmlTag(template) {
var match
var key
var getattr
var newTemplate = template

while (match = cmsData.regex.abePattern.exec(template)) {
key = cmsData.regex.getAttr(match, 'key')

if (cmsData.regex.isSingleAbe(match, template)) {
if (cmsData.regex.isSingleAbe(match, newTemplate)) {
getattr = key.replace(/\./g, '-')
} else {
getattr = key.replace('.', '[index].')
}

template = template.replace(
newTemplate = newTemplate.replace(
cmsData.regex.escapeTextToRegex(match[0], 'g'),
' data-abe-' + cmsData.regex.validDataAbe(getattr) + '="' + getattr + '" ' + match[0]
)
}

return template
return newTemplate
}

export function addHasAbeAttr(text) {
Expand Down Expand Up @@ -198,7 +200,8 @@ export function addAbeSourceComment(template, json) {
*/
export function addAbeHtmlTagBetweenAbeTags(template) {
var match
while (match = cmsData.regex.abePattern.exec(template)) {
var templateNoDom = stripTags(template)
while (match = cmsData.regex.abeAsTagPattern.exec(templateNoDom)) {
template = template.replace(cmsData.regex.escapeTextToRegex(match[1], 'g'), '<abe>' + match[1].trim() + '</abe>')
}

Expand Down
28 changes: 26 additions & 2 deletions test/cms/templates/prepare.js
Expand Up @@ -29,7 +29,8 @@ describe('cmsTemplates.prepare', function() {
source: fse.readFileSync(path.join(process.cwd(), 'test', 'fixtures', 'templates', 'prepare-tag-abe-source.html'), 'utf-8'),
each: fse.readFileSync(path.join(process.cwd(), 'test', 'fixtures', 'templates', 'prepare-tag-abe-each.html'), 'utf-8'),
eachMultiple: fse.readFileSync(path.join(process.cwd(), 'test', 'fixtures', 'templates', 'prepare-tag-abe-each-multiple.html'), 'utf-8'),
rawHandlebar: fse.readFileSync(path.join(process.cwd(), 'test', 'fixtures', 'templates', 'prepare-raw-handlebars.html'), 'utf-8')
rawHandlebar: fse.readFileSync(path.join(process.cwd(), 'test', 'fixtures', 'templates', 'prepare-raw-handlebars.html'), 'utf-8'),
noHtml: fse.readFileSync(path.join(process.cwd(), 'test', 'fixtures', 'templates', 'prepare-tag-nohtml.html'), 'utf-8')
}
done()

Expand All @@ -45,7 +46,23 @@ describe('cmsTemplates.prepare', function() {

// test
var template = cmsTemplates.prepare.addAbeDataAttrForHtmlTag(this.fixture.text)
chai.expect(template.indexOf('data-abe-')).to.be.above(-1);
chai.expect(template.indexOf('<span data-abe-text_visible="text_visible" >')).to.be.above(-1);

template = cmsTemplates.prepare.addAbeDataAttrForHtmlTag(this.fixture.each)
chai.expect(template.indexOf('data-abe-test[index].title="test[index].title"')).to.be.above(-1)

//
try{
template = cmsTemplates.prepare.addAbeHtmlTagBetweenAbeTags(this.fixture.noHtml)
console.log('ok')
template = cmsTemplates.prepare.addAbeDataAttrForHtmlTag(template)
} catch (e) {
console.log(e.stack)
}
chai.expect(template.indexOf('"<abe data-abe-stores[index].lat="stores[index].lat"')).to.be.above(-1)
chai.expect(template.indexOf('<abe data-abe-stores2[index].lat="stores2[index].lat" >')).to.be.above(-1)
chai.expect(template.indexOf('<abe data-abe-text2="text2" >{{abe type="text" key="text2" desc="name"}}</abe>')).to.be.above(-1)
chai.expect(template.indexOf('"<abe data-abe-text3="text3" >{{abe type="text" key="text3" desc="name"}}</abe>"')).to.be.above(-1)
});

/**
Expand Down Expand Up @@ -134,6 +151,13 @@ describe('cmsTemplates.prepare', function() {
var template = cmsTemplates.prepare.addAbeHtmlTagBetweenAbeTags(this.fixture.text)
chai.expect(template.indexOf('<abe>{{')).to.be.above(-1);
chai.expect(template.indexOf('}}</abe>')).to.be.above(-1);

template = cmsTemplates.prepare.addAbeHtmlTagBetweenAbeTags(this.fixture.noHtml)
chai.expect(template.indexOf('"lat": "<abe>{{abe type="text" key="stores.lat" desc="lat"}}</abe>"')).to.be.above(-1)
chai.expect(template.indexOf('<abe>{{abe type="text" key="stores2.lat" desc="lat"}}</abe>')).to.be.above(-1)
chai.expect(template.indexOf('<abe>{{abe type="text" key="text2" desc="name"}}</abe>')).to.be.above(-1)
chai.expect(template.indexOf('"<abe>{{abe type="text" key="text3" desc="name"}}</abe>"')).to.be.above(-1)

});

/**
Expand Down
20 changes: 10 additions & 10 deletions test/manager.js → test/core/manager/Manager.js
@@ -1,13 +1,13 @@
var chai = require('chai');
var path = require('path');

var Manager = require('../src/cli').Manager
var config = require('../src/cli').config
var cmsOperations = require('../src/cli').cmsOperations
var Manager = require('../../../src/cli').Manager
var config = require('../../../src/cli').config
var cmsOperations = require('../../../src/cli').cmsOperations
config.set({root: __dirname + '/fixtures/'})

var cmsData = require('../src/cli').cmsData;
var Manager = require('../src/cli').Manager;
var cmsData = require('../../../src/cli').cmsData;
var Manager = require('../../../src/cli').Manager;
var fse = require('fs-extra');

describe('Manager', function() {
Expand All @@ -16,9 +16,9 @@ describe('Manager', function() {
.then(function () {

this.fixture = {
tag: fse.readFileSync(path.join(__dirname, 'fixtures', 'templates', 'article.html'), 'utf8'),
jsonArticle: fse.readJsonSync(path.join(__dirname, 'fixtures', 'files', 'article-4.json')),
jsonArticle1: fse.readJsonSync(path.join(__dirname, 'fixtures', 'data', 'article-1.json'))
tag: fse.readFileSync(path.join(process.cwd(), 'test', 'fixtures', 'templates', 'article.html'), 'utf8'),
jsonArticle: fse.readJsonSync(path.join(process.cwd(), 'test', 'fixtures', 'files', 'article-4.json')),
jsonArticle1: fse.readJsonSync(path.join(process.cwd(), 'test', 'fixtures', 'data', 'article-1.json'))
}
done()

Expand All @@ -28,14 +28,14 @@ describe('Manager', function() {
it('getStructureAndTemplates()', function() {
const data = Manager.instance.getStructureAndTemplates()
chai.assert.equal(data['templates'][0].name, 'article-data-arrayinline', 'failed !')
chai.assert.equal(data['templates'].length, 24, 'failed !')
chai.assert.equal(data['templates'].length, 25, 'failed !')
});

it('updateStructureAndTemplates()', function() {
Manager.instance.updateStructureAndTemplates()
const data = Manager.instance.getStructureAndTemplates()
chai.assert.equal(data['templates'][0].name, 'article-data-arrayinline', 'failed !')
chai.assert.equal(data['templates'].length, 24, 'failed !')
chai.assert.equal(data['templates'].length, 25, 'failed !')
});

it('getList()', function() {
Expand Down
17 changes: 17 additions & 0 deletions test/fixtures/templates/prepare-tag-nohtml.html
@@ -0,0 +1,17 @@
[
{{#each stores}}
{
"name": "{{abe type="text" key="stores.name" desc="name"}}",
"lat": "{{abe type="text" key="stores.lat" desc="lat"}}"
},
{{/each}}
]

{{#each stores2}}
{{abe type="text" key="stores2.name" desc="name"}}<br/>
{{abe type="text" key="stores2.lat" desc="lat"}}<br/>
{{abe type="text" key="text" desc="lat"}}<br/>
{{/each}}

{{abe type="text" key="text2" desc="name"}}
"{{abe type="text" key="text3" desc="name"}}"

0 comments on commit c0c74f9

Please sign in to comment.