describe('getSubviews()', function () { var subviewFlapjacks = { one: function (div) { return div('hello'); }, two: function (div) { return div('world'); } }; var actual = jng.getSubviews.call(context, subviewFlapjacks); jangular.render(actual.one).should.equal('<div>hello</div>'); jangular.render(actual.two).should.equal('<div>world</div>'); });
describe('initDirectives()', function () { var obj = {}; jangular.addShortcutsToScope(obj); jng.initDirectives.call(context, { componentPrefix: 'pan' }); var template = obj.div({ 'pan-fakesimple': null }); var expected = '<div pan-fakesimple><span>hello, world</span></div>'; var actual = jangular.render(template); actual.should.equal(expected); });
it('should render a partial', function () { var partial = { view: function (div) { return div('hello, world'); }}; var model = {}; var expected = '<div>hello, world</div>'; var fn = jng.getPartialRenderFn.call(context, partial); var renderedView = fn(model, {}, {}); jangular.render(renderedView).should.equal(expected); });
it('should ensure that bo-title works with foo[bar[\'baz\']][wah.zam][zoom].doot', function () { var obj = {}; jangular.addShortcutsToScope(obj); jng.initDirectives.call(context, { componentPrefix: 'pan' }); var template = obj.div({ 'bo-title': 'foo[bar[\'baz\']][wah.zam][zoom].doot' }); var expected = '<div bo-title="foo[bar[\'baz\']][wah.zam][zoom].doot" title="holy crap!"></div>'; var actual = jangular.render(template, {foo: {wah: { hey: {goo: {doot: 'holy crap!'}}}}, bar: {baz: 'wah'}, wah: {zam: 'hey'}, zoom: 'goo'}); actual.should.equal(expected); });
it('should ensure that bo-title works with foo[bar].baz', function () { var obj = {}; jangular.addShortcutsToScope(obj); jng.initDirectives.call(context, { componentPrefix: 'pan' }); var template = obj.div({ 'bo-title': 'foo[bar].baz' }); var expected = '<div bo-title="foo[bar].baz" title="holy crap!"></div>'; var actual = jangular.render(template, {foo: {wah: {baz: 'holy crap!'}}, bar: 'wah'}); actual.should.equal(expected); });
it('should ensure that bo-title works', function () { var obj = {}; jangular.addShortcutsToScope(obj); jng.initDirectives.call(context, { componentPrefix: 'pan' }); var template = obj.div({ 'bo-title': 'foo' }); var expected = '<div bo-title="foo" title="bar"></div>'; var actual = jangular.render(template, {foo: 'bar'}); actual.should.equal(expected); });
.then(function (model) { // this is similar to both jng.pages renderPage() and jng.directives // as well as ng.uipart.template (for client side pages and partials) me.attachToScope(model, sideview.attachToScope); // generate the partial view var viewDeps = { model: model, subviews: me.getSubviews(sideview.subviews) }; _.extend(viewDeps, me.getJangularDeps()); var view = me.pancakes.cook(sideview.view, { dependencies: viewDeps }); return jangular.render(view, model, { strip: routeInfo.strip }); });
.then(function (sideview) { // make some angular-specific modifications to the model before we render me.setDefaults(model, page.defaults, null); me.applyPresets(model, page.defaults, page.presets); me.attachToScope(model, page.attachToScope); me.addFiltersToModel(model, routeInfo.appName); // if any subviews, put them in an object _.each(page.subviews, function (subview, subviewName) { subviews[subviewName] = me.pancakes.cook(subview, { dependencies: jangularDeps }); }); // get the view _.extend(pageDeps, jangularDeps, { subviews: subviews }); var view = me.pancakes.cook(page.view, { dependencies: pageDeps }); var renderedPage = jangular.render(view, model, { strip: routeInfo.strip, isAmp: routeInfo.isAmp }); // if layout exists, need to put the page content within the layout if (isLayout) { _.extend(pageDeps, { pageContent: renderedPage, sideviewContent: sideview }); renderedPage = me.renderLayout(appName, routeInfo.layout, routeInfo.isAmp, pageDeps); } // if page wrapper exists, put rendered page in that if (isLayout) { _.extend(pageDeps, { pageContent: renderedPage, routeInfo: routeInfo, inlineCss: inlineCss }); renderedPage = me.renderLayout(appName, routeInfo.wrapper, routeInfo.isAmp, pageDeps); } // special one off thing for AMP pages if (routeInfo.isAmp && renderedPage.substring(0, 5) === '<html') { renderedPage = '<!DOCTYPE html>' + renderedPage; } return renderedPage; });
/** * Get a particular layout * @param appName * @param layoutName * @param isAmp * @param dependencies */ function renderLayout(appName, layoutName, isAmp, dependencies) { var layout = this.pancakes.cook('app/' + appName + '/layouts/' + layoutName + '.layout'); var layoutView = this.pancakes.cook(layout.view, { dependencies: dependencies }); return jangular.render(layoutView, dependencies.model, { strip: false, isAmp: isAmp }); }