diff --git a/src/services/builder.js b/src/services/builder.js index e6adf8e40..f8c46dba3 100644 --- a/src/services/builder.js +++ b/src/services/builder.js @@ -11,9 +11,19 @@ angular.module('schemaForm').provider('sfBuilder', ['sfPathProvider', function(s }; var formId = 0; + if (!("firstElementChild" in document.createDocumentFragment())) { + Object.defineProperty(DocumentFragment.prototype, "firstElementChild", { + get: function () { + for (var nodes = this.childNodes, n, i = 0, l = nodes.length; i < l; ++i) + if (n = nodes[i], 1 === n.nodeType) return n; + return null; + } + }); + } + var builders = { sfField: function(args) { - args.fieldFrag.firstChild.setAttribute('sf-field', formId); + args.fieldFrag.firstElementChild.setAttribute('sf-field', formId); // We use a lookup table for easy access to our form. args.lookup['f' + formId] = args.form; diff --git a/test/directives/schema-form-test.js b/test/directives/schema-form-test.js index 975b2863b..70aef44d4 100644 --- a/test/directives/schema-form-test.js +++ b/test/directives/schema-form-test.js @@ -1902,6 +1902,35 @@ describe('directive',function(){ }); }); + it('should use supplied template with leading whitespace in template field',function() { + + inject(function($compile, $rootScope){ + var scope = $rootScope.$new(); + scope.person = {}; + + scope.schema = { + type: 'object', + properties: { + name: {type: 'string'} + } + }; + + scope.form = [ + { + type: 'template', + template: '
{{form.foo}}
', + foo: "Hello World" + } + ]; + + var tmpl = angular.element('
'); + + $compile(tmpl)(scope); + $rootScope.$apply(); + tmpl.html().should.be.eq('
Hello World
'); + }); + }); + it('should load template by templateUrl, with template field type',function() { inject(function($compile, $rootScope, $httpBackend){