From 7921711ada4e10d4a74fcb401b1a9f35c3663551 Mon Sep 17 00:00:00 2001 From: Michael Gauthier Date: Fri, 23 Oct 2015 12:44:37 -0300 Subject: [PATCH] Only compute mutable type flag once and clean up var initilization. --- .../lib/system/build-component-template.js | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/packages/ember-views/lib/system/build-component-template.js b/packages/ember-views/lib/system/build-component-template.js index 1d4d43f9d1f..a7fc73ace06 100644 --- a/packages/ember-views/lib/system/build-component-template.js +++ b/packages/ember-views/lib/system/build-component-template.js @@ -44,28 +44,29 @@ export default function buildComponentTemplate({ component, layout, isAngleBrack return { createdElement: !!tagName, block: blockToRender }; } -function canChangeTypeAfterRender(attrs) { - // This permits testing of the unbound type attr behavior outside of IE8. - if (attrs.ie8SafeInput) { - return false; - } - var mutableInputTypeTextElement, docFragment; - if (!docFragment) { - docFragment = document.createDocumentFragment(); - } - - if (!mutableInputTypeTextElement) { - mutableInputTypeTextElement = document.createElement('input'); - mutableInputTypeTextElement.type = 'text'; - } - +// Static flag used to see if we can mutate the type attribute on elements. IE8 +// does not support changing the type attribute after an element is inserted in +// a tree. +var isTypeAttributeMutable = (function() { + var docFragment = document.createDocumentFragment(); + var mutableInputTypeTextElement = document.createElement('input'); + mutableInputTypeTextElement.type = 'text'; try { docFragment.appendChild(mutableInputTypeTextElement); mutableInputTypeTextElement.setAttribute('type', 'password'); - } catch(e) { + } catch (e) { return false; } return true; +})(); + +function canChangeTypeAfterRender(attrs) { + // This permits testing of the unbound type attr behavior outside of IE8. + if (attrs.ie8SafeInput) { + return false; + } + + return isTypeAttributeMutable; } function blockFor(template, options) {