Skip to content

Commit

Permalink
Restored Marko v2 compatibility
Browse files Browse the repository at this point in the history
  • Loading branch information
patrick-steele-idem committed Oct 28, 2016
1 parent 1d93720 commit 6aed35d
Show file tree
Hide file tree
Showing 55 changed files with 1,012 additions and 0 deletions.
115 changes: 115 additions & 0 deletions marko-taglib.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
{
"tags": {
"lasso-page": {
"renderer": "./taglib-marko2/page-tag",
"transformer": "./taglib-marko2/page-tag-transformer",
"attributes": {
"name": "string",
"cache-key": "string",
"package-path": "string",
"package-paths": "expression",
"base-path": "string",
"lasso": "expression",
"data": "expression",
"dependencies": "expression",
"flags": "expression",
"enabled-extensions": {
"target-property": "flags",
"type": "expression"
},
"extensions": {
"target-property": "flags",
"type": "expression"
},
"wait-for": "expression",
"timeout": "integer"
},
"body-function": "getDependencies(_dependenciesParent)",
"import-var": {
"dirname": "__dirname",
"filename": "__filename"
}
},
"lasso-dependencies": {
"renderer": "./taglib-marko2/dependencies-tag"
},
"lasso-dependency": {
"renderer": "./taglib-marko2/dependency-tag",
"import-var": {
"dependenciesParent": "_dependenciesParent"
},
"attributes": {
"*": "string"
}
},
"lasso-slot": {
"renderer": "./taglib-marko2/slot-tag",
"attributes": {
"name": "string",
"inline-style-attrs": "expression",
"inline-script-attrs": "expression",
"external-style-attrs": "expression",
"external-script-attrs": "expression"
}
},
"lasso-head": {
"renderer": "./taglib-marko2/head-tag",
"attributes": {
"external-style-attrs": "expression"
}
},
"lasso-body": {
"renderer": "./taglib-marko2/body-tag",
"attributes": {
"external-script-attrs": "expression"
}
},
"lasso-img": {
"attributes": {
"src": "path",
"*": {
"ignore": true
}
},
"transformer": {
"path": "./taglib-marko2/lasso-img-tag-transformer"
}
},
"_lasso-getImageInfo": {
"node-class": "./taglib-marko2/getImageInfo-node",
"attributes": {
"src": "path",
"var": "string"
},
"import-var": {
"dirname": "__dirname"
}
},
"_lasso-resources-root": {
"renderer": "./taglib-marko2/lasso-resources-root-tag",
"attributes": {
"paths": "string"
}
},
"lasso-resource": {
"node-class": "./taglib-marko2/lasso-resource-tag",
"attributes": {
"path": "path",
"var": "string"
},
"transformer": {
"path": "./taglib-marko2/lasso-resource-tag-transformer"
}
},
"*": {
"attributes": {
"lasso-nonce": {
"ignore": true
}
},
"transformer": {
"path": "./taglib-marko2/lasso-nonce-attr-transformer"
}
}
}
}
2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
"raptor-logging": "^1.0.1",
"raptor-objects": "^1.0.1",
"raptor-polyfill": "^1.0.0",
"raptor-promises": "^1.0.3",
"raptor-regexp": "^1.0.0",
"raptor-strings": "^1.0.0",
"raptor-util": "^2.0.0",
Expand All @@ -53,6 +54,7 @@
"fs-extra": "~0.12.0",
"jshint": "^2.9.1",
"lasso-marko": "^2.0.1",
"marko-v2": "^2.10.1",
"mocha": "^2.4.5"
},
"license": "Apache-2.0",
Expand Down
65 changes: 65 additions & 0 deletions taglib-marko2/LassoRenderContext.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
var lasso = require('../');

var EventEmitter = require('events').EventEmitter;

var LassoRenderContext = function(out) {
LassoRenderContext.$super.call(this);

this._waitFor = [];
this.data = {};
this.out = out;
};

LassoRenderContext.prototype = {
onBeforeSlot: function(slotName, cb) {
this.on('beforeSlot.' + slotName, cb);
},

onAfterSlot: function(slotName, cb) {
this.on('afterSlot.' + slotName, cb);
},

emitBeforeSlot: function(slotName, context) {
this.emit('beforeSlot.' + slotName, {
context: context,
slotName: slotName
});
},

emitAfterSlot: function(slotName, context) {
this.emit('afterSlot.' + slotName, {
context: context,
slotName: slotName
});
},

waitFor: function(promise) {
if (!promise) {
throw new Error('Invalid waitFor promise');
}

if (Array.isArray(promise)) {
this._waitFor = this._waitFor.concat(promise);
}
else {
this._waitFor.push(promise);
}
},

getWaitFor: function() {
return this._waitFor;
},

getLasso: function() {
return this.data.lasso || this.out.global.lasso || lasso.defaultLasso;
},

getLassoConfig: function() {
var theLasso = this.getLasso();
return theLasso.config;
}
};

require('raptor-util').inherit(LassoRenderContext, EventEmitter);

module.exports = LassoRenderContext;
11 changes: 11 additions & 0 deletions taglib-marko2/body-tag.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
var slotTag = require('./slot-tag');
var extend = require('raptor-util/extend');

const SLOT_DEFAULTS = {
name: 'body'
};

module.exports = function render(input, out) {
var slotTagInput = Object.create(SLOT_DEFAULTS);
slotTag(extend(slotTagInput, input), out);
};
5 changes: 5 additions & 0 deletions taglib-marko2/dependencies-tag.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
module.exports = function render(input, out) {
if (input.renderBody) {
input.renderBody(out);
}
};
14 changes: 14 additions & 0 deletions taglib-marko2/dependency-tag.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
var extend = require('raptor-util').extend;

module.exports = function render(input, context) {
var dependenciesParent = input.dependenciesParent;
if (!dependenciesParent) {
throw new Error('Expected property "dependenciesParent"');
}

delete input.dependenciesParent;

var dependency = extend({}, input['*']);

dependenciesParent.addDependency(dependency);
};
44 changes: 44 additions & 0 deletions taglib-marko2/getImageInfo-node.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
/*
* Copyright 2011 eBay Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
'use strict';
var getImageInfoHelperPath = require.resolve('./helper-getImageInfo');

function GetImageInfo(props) {
GetImageInfo.$super.call(this);
if (props) {
this.setProperties(props);
}
}
GetImageInfo.prototype = {
doGenerateCode: function (template) {
var varName = this.getProperty('var');

var getImageInfoRequirePath = template.getRequirePath(getImageInfoHelperPath);

template.addStaticVar('__getImageInfo',

'require("' + getImageInfoRequirePath + '")');

var path = this.getProperty('path');

var funcCall = '__getImageInfo(out, ' + path + ', function(out, ' + varName + ') {';
template.statement(funcCall).indent(function() {
this.generateCodeForChildren(template);
}, this).line('});');
}
};

module.exports = GetImageInfo;
11 changes: 11 additions & 0 deletions taglib-marko2/head-tag.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
var slotTag = require('./slot-tag');
var extend = require('raptor-util/extend');

const SLOT_DEFAULTS = {
name: 'head'
};

module.exports = function render(input, out) {
var slotTagInput = Object.create(SLOT_DEFAULTS);
slotTag(extend(slotTagInput, input), out);
};
18 changes: 18 additions & 0 deletions taglib-marko2/helper-getImageInfo.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
var util = require('./util');
var lassoImage = require('lasso-image');

module.exports = function(out, path, callback) {
var asyncOut = out.beginAsync();

var lassoRenderContext = util.getLassoRenderContext(out);
var theLasso = lassoRenderContext.lasso;

lassoImage.getImageInfo(path, { lasso: theLasso }, function(err, imageInfo) {
if (err) {
return asyncOut.error(err);
}

callback(asyncOut, imageInfo);
asyncOut.end();
});
};
11 changes: 11 additions & 0 deletions taglib-marko2/helper-getNonce.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
var util = require('./util');

module.exports = function(out) {
var lassoRenderContext = util.getLassoRenderContext(out);
var lassoConfig = lassoRenderContext.getLassoConfig();

var cspNonceProvider = lassoConfig.cspNonceProvider;
if (cspNonceProvider) {
return cspNonceProvider(out, lassoRenderContext);
}
};
27 changes: 27 additions & 0 deletions taglib-marko2/lasso-img-tag-transformer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
module.exports = function transform(node, compiler, template) {
if (node.tagName === 'lasso-img') {
var nextVarId = template.data.nextGetImageInfoVarId || (template.data.nextGetImageInfoVarId = 1);
var varName = 'imageInfo' + nextVarId;
var src = node.getProperty('src');

node.tagName = 'img';

var getImageInfoNode = compiler.createNode('_lasso-getImageInfo', {
'var': varName,
path: src
});

node.setAttribute('src', template.makeExpression(varName + '.url'));

if (!node.hasAttribute('width')) {
node.setAttribute('width', template.makeExpression(varName + '.width'));
}

if (!node.hasAttribute('height')) {
node.setAttribute('height', template.makeExpression(varName + '.height'));
}

node.parentNode.replaceChild(getImageInfoNode, node);
getImageInfoNode.appendChild(node);
}
};
16 changes: 16 additions & 0 deletions taglib-marko2/lasso-nonce-attr-transformer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
var getNonceHelperPath = require.resolve('./helper-getNonce');

module.exports = function transform(node, compiler, template) {
if (node.hasAttribute('lasso-nonce')) {

node.removeAttribute('lasso-nonce');

var getNonceRequirePath = template.getRequirePath(getNonceHelperPath);

template.addStaticVar('__getNonce',

'require("' + getNonceRequirePath + '")');

node.setAttribute('nonce', template.makeExpression('__getNonce(out)'));
}
};
Loading

0 comments on commit 6aed35d

Please sign in to comment.