Skip to content

Commit

Permalink
Merge pull request #12020 from rwjblue/cleanup-render
Browse files Browse the repository at this point in the history
[CLEANUP beta] Remove `View.prototype.render`.
  • Loading branch information
rwjblue committed Aug 8, 2015
2 parents 65bdee0 + 7eaead1 commit f1a3fe6
Show file tree
Hide file tree
Showing 5 changed files with 12 additions and 155 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import { get } from 'ember-metal/property_get';
import { set } from 'ember-metal/property_set';
import setProperties from 'ember-metal/set_properties';
import { MUTABLE_CELL } from 'ember-views/compat/attrs-proxy';
import SafeString from 'htmlbars-util/safe-string';
import { instrument } from 'ember-htmlbars/system/instrumentation-support';
import EmberComponent from 'ember-views/views/component';
import Stream from 'ember-metal/streams/stream';
Expand Down Expand Up @@ -227,33 +226,13 @@ ComponentNodeManager.prototype.render = function(_env, visitor) {

var element = this.expectElement && this.renderNode.firstNode;

handleLegacyRender(component, element);
env.renderer.didCreateElement(component, element);
env.renderer.willInsertElement(component, element); // 2.0TODO remove legacy hook

env.lifecycleHooks.push({ type: 'didInsertElement', view: component });
}, this);
};

export function handleLegacyRender(component, element) {
if (!component.render) { return; }

Ember.assert('Legacy render functions are not supported with angle-bracket components', !component._isAngleBracket);

var content, node, lastChildIndex;
var buffer = [];
var renderNode = component._renderNode;
component.render(buffer);
content = buffer.join('');
if (element) {
lastChildIndex = renderNode.childNodes.length - 1;
node = renderNode.childNodes[lastChildIndex];
} else {
node = renderNode;
}
node.setContent(new SafeString(content));
}

ComponentNodeManager.prototype.rerender = function(_env, attrs, visitor) {
var component = this.component;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import View from 'ember-views/views/view';
import { MUTABLE_CELL } from 'ember-views/compat/attrs-proxy';
import getCellOrValue from 'ember-htmlbars/hooks/get-cell-or-value';
import { instrument } from 'ember-htmlbars/system/instrumentation-support';
import { handleLegacyRender } from 'ember-htmlbars/node-managers/component-node-manager';

// In theory this should come through the env, but it should
// be safe to import this until we make the hook system public
Expand Down Expand Up @@ -105,7 +104,6 @@ ViewNodeManager.prototype.render = function(env, attrs, visitor) {

if (component) {
var element = this.expectElement && this.renderNode.firstNode;
handleLegacyRender(component, element);

env.renderer.didCreateElement(component, element); // 2.0TODO: Remove legacy hooks.
env.renderer.willInsertElement(component, element);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -789,28 +789,6 @@ QUnit.test('non-expression hasBlockParams', function() {
equal(jQuery('#qunit-fixture #expect-yes').text(), 'Yes');
});

QUnit.test('implementing `render` allows pushing into a string buffer', function() {
expect(2);

registry.register('component:non-block', Component.extend({
render(buffer) {
buffer.push('<span id="zomg">Whoop!</span>');
}
}));

view = EmberView.extend({
template: compile('{{non-block}}'),
container: container
}).create();

expectDeprecation('Using a custom `.render` function is deprecated and will be removed in Ember 2.0.0.');

runAppend(view);

equal(view.$('#zomg').text(), 'Whoop!');
});


QUnit.test('components in template of a yielding component should have the proper parentView', function() {
var outer, innerTemplate, innerLayout;

Expand Down Expand Up @@ -1301,21 +1279,4 @@ if (isEnabled('ember-htmlbars-component-generation')) {
equal(view.$('#expect-no').text(), 'No');
equal(view.$('#expect-yes').text(), 'Yes');
});

QUnit.test('implementing `render` allows pushing into a string buffer', function() {
expect(2);

// this deprecation is fired upon init
expectDeprecation('Using a custom `.render` function is deprecated and will be removed in Ember 2.0.0.');

registry.register('component:non-block', Component.extend({
render(buffer) {
buffer.push('<span id="zomg">Whoop!</span>');
}
}));

expectAssertion(function() {
appendViewFor('<non-block />');
});
});
}
7 changes: 3 additions & 4 deletions packages/ember-views/lib/views/view.js
Original file line number Diff line number Diff line change
Expand Up @@ -1312,10 +1312,9 @@ var View = CoreView.extend(

this.renderer.componentInitAttrs(this, this.attrs || {});

Ember.deprecate(
'Using a custom `.render` function is deprecated and will be removed in Ember 2.0.0.',
!this.render,
{ id: 'ember-views.render', until: '2.0.0' }
Ember.assert(
'Using a custom `.render` function is no longer supported.',
!this.render
);
},

Expand Down
98 changes: 9 additions & 89 deletions packages/ember-views/tests/compat/view_render_hook_test.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
import Ember from 'ember-metal/core';
import { runAppend, runDestroy } from 'ember-runtime/tests/utils';
import compile from 'ember-template-compiler/system/compile';
import { runDestroy } from 'ember-runtime/tests/utils';
import View from 'ember-views/views/view';

import { registerKeyword, resetKeyword } from 'ember-htmlbars/tests/utils';
Expand All @@ -10,8 +8,6 @@ var view, parentView, originalViewKeyword;

QUnit.module('ember-views: View#render hook', {
setup() {
expectDeprecation('Using a custom `.render` function is deprecated and will be removed in Ember 2.0.0.');

originalViewKeyword = registerKeyword('view', viewKeyword);
},
teardown() {
Expand All @@ -21,88 +17,12 @@ QUnit.module('ember-views: View#render hook', {
}
});

QUnit.test('the render hook replaces a view if present', function(assert) {
var count = 0;
view = View.create({
template: compile('bob'),
render: function() {
count++;
}
});

runAppend(view);

assert.equal(count, 1, 'render called');
assert.equal(view.$().html(), '<!---->', 'template not rendered');
});

QUnit.test('the render hook can push HTML into the buffer once', function(assert) {
view = View.create({
render: function(buffer) {
buffer.push('<span>Nancy</span>');
}
});

runAppend(view);

assert.equal(view.$().html(), '<span>Nancy</span>', 'buffer made DOM');
});

QUnit.test('the render hook can push HTML into the buffer on nested view', function(assert) {
view = View.create({
render: function(buffer) {
buffer.push('<span>Nancy</span>');
}
});
parentView = View.create({
childView: view,
template: compile('{{view view.childView}}')
});

runAppend(parentView);

assert.equal(view.$().html(), '<span>Nancy</span>', 'buffer made DOM');
});

QUnit.test('the render hook can push arbitrary HTML into the buffer', function(assert) {
view = View.create({
render: function(buffer) {
buffer.push('<span>');
buffer.push('Nancy</span>');
}
});

runAppend(view);

assert.equal(view.$().html(), '<span>Nancy</span>', 'buffer made DOM');
});

QUnit.test('the render hook can push HTML into the buffer on tagless view', function(assert) {
view = View.create({
tagName: '',
render: function(buffer) {
buffer.push('<span>Nancy</span>');
}
});

runAppend(view);

assert.equal(Ember.$('#qunit-fixture').html(), '<span>Nancy</span>', 'buffer made DOM');
});

QUnit.test('the render hook can push HTML into the buffer on nested tagless view', function(assert) {
view = View.create({
tagName: '',
render: function(buffer) {
buffer.push('<span>Nancy</span>');
}
});
parentView = View.create({
childView: view,
template: compile('{{view view.childView}}')
});

runAppend(parentView);

assert.equal(parentView.$().html(), '<span>Nancy</span>', 'buffer made DOM');
QUnit.test('the render hook triggers an assertion', function(assert) {
expectAssertion(() => {
view = View.create({
render: function(buffer) {
buffer.push('<span>Nancy</span>');
}
});
}, 'Using a custom `.render` function is no longer supported.');
});

0 comments on commit f1a3fe6

Please sign in to comment.