From 947447512dd1abf5a11035d317ae5bfa9df9edb0 Mon Sep 17 00:00:00 2001 From: Duncan Graham Walker Date: Thu, 26 Feb 2015 10:57:57 -0500 Subject: [PATCH 1/8] Upgraded to latest Ember CLI and fixes jshint errors --- Brocfile.js | 6 +++++- addon/components/form-submission.js | 2 +- addon/initializers/easy-form-extensions.js | 1 - addon/mixins/controllers/saving.js | 4 ++-- bower.json | 13 ++++++------- package.json | 10 +++++----- 6 files changed, 19 insertions(+), 17 deletions(-) diff --git a/Brocfile.js b/Brocfile.js index 042a64d..fdce144 100644 --- a/Brocfile.js +++ b/Brocfile.js @@ -3,7 +3,11 @@ var EmberAddon = require('ember-cli/lib/broccoli/ember-addon'); -var app = new EmberAddon(); +var app = new EmberAddon({ + vendorFiles: { + 'handlebars.js': null + } +}); // Use `app.import` to add additional libraries to the generated // output files. diff --git a/addon/components/form-submission.js b/addon/components/form-submission.js index fe774fe..3406608 100644 --- a/addon/components/form-submission.js +++ b/addon/components/form-submission.js @@ -4,7 +4,7 @@ export default Ember.Component.extend({ cancel: true, cancelText: 'Cancel', classNames: ['buttons', 'submission'], - formSubmitted: Em.computed.readOnly('parentView.controller.formSubmitted'), + formSubmitted: Ember.computed.readOnly('parentView.controller.formSubmitted'), submit: true, submitText: 'Save', diff --git a/addon/initializers/easy-form-extensions.js b/addon/initializers/easy-form-extensions.js index cfc9c9d..7bc8e3e 100644 --- a/addon/initializers/easy-form-extensions.js +++ b/addon/initializers/easy-form-extensions.js @@ -1,5 +1,4 @@ import Ember from 'ember'; -import insert from 'ember-easy-form-extensions/utils/computed/insert'; /* Import helpers */ diff --git a/addon/mixins/controllers/saving.js b/addon/mixins/controllers/saving.js index 0e024f8..567beb2 100644 --- a/addon/mixins/controllers/saving.js +++ b/addon/mixins/controllers/saving.js @@ -41,11 +41,11 @@ export default Ember.Mixin.create( ); save(); - } + }; var reject = function() { _this.set('formSubmitted', false); - } + }; /* If there is a custom validations method, resolve it */ diff --git a/bower.json b/bower.json index 1deb0a9..cd626ef 100644 --- a/bower.json +++ b/bower.json @@ -1,17 +1,16 @@ { "name": "ember-easy-form-extensions", "dependencies": { - "handlebars": "~1.3.0", "jquery": "^1.11.1", - "ember": "1.8.1", - "ember-data": "1.0.0-beta.14.1", - "ember-resolver": "~0.1.11", - "loader.js": "ember-cli/loader.js#1.0.1", + "ember": "1.10.0", + "ember-data": "1.0.0-beta.15", + "ember-resolver": "~0.1.12", + "loader.js": "ember-cli/loader.js#3.2.0", "ember-cli-shims": "ember-cli/ember-cli-shims#0.0.3", - "ember-cli-test-loader": "ember-cli/ember-cli-test-loader#0.1.1", + "ember-cli-test-loader": "ember-cli/ember-cli-test-loader#0.1.3", "ember-load-initializers": "ember-cli/ember-load-initializers#0.0.2", "ember-qunit": "0.2.8", "ember-qunit-notifications": "0.0.7", "qunit": "~1.17.1" } -} \ No newline at end of file +} diff --git a/package.json b/package.json index 8ba1cc1..55b8151 100644 --- a/package.json +++ b/package.json @@ -22,17 +22,17 @@ "license": "MIT", "devDependencies": { "broccoli-asset-rev": "^2.0.0", - "broccoli-ember-hbs-template-compiler": "^1.6.1", "ember-cli": "0.1.15", - "ember-cli-6to5": "^3.0.0", + "ember-cli-babel": "^4.0.0", "ember-cli-app-version": "0.3.1", "ember-cli-content-security-policy": "0.3.0", - "ember-cli-dependency-checker": "0.0.7", + "ember-cli-dependency-checker": "0.0.8", + "ember-cli-htmlbars": "0.7.4", "ember-cli-ic-ajax": "0.1.1", "ember-cli-inject-live-reload": "^1.3.0", - "ember-cli-qunit": "0.3.7", + "ember-cli-qunit": "0.3.8", "ember-cli-uglify": "1.0.1", - "ember-data": "1.0.0-beta.14.1", + "ember-data": "1.0.0-beta.15", "ember-export-application-global": "^1.0.2", "ember-validations": "2.0.0-alpha.2", "express": "^4.8.5", From 7654bd6f5b5c06450abcdd2f5ae749f6d65ca48e Mon Sep 17 00:00:00 2001 From: Duncan Graham Walker Date: Thu, 26 Feb 2015 13:14:44 -0500 Subject: [PATCH 2/8] Working with HTMLBars, Ember 1.10, and removed all deprecation warnings --- .../app/resources/posts/new/template.hbs | 8 +- vendor/ember-easy-form.js | 78 ++++++++++++++----- 2 files changed, 63 insertions(+), 23 deletions(-) diff --git a/tests/dummy/app/resources/posts/new/template.hbs b/tests/dummy/app/resources/posts/new/template.hbs index dea6b5e..d0d677c 100644 --- a/tests/dummy/app/resources/posts/new/template.hbs +++ b/tests/dummy/app/resources/posts/new/template.hbs @@ -1,10 +1,10 @@ -{{#form}} +{{!-- {{#form}} --}} - {{#form-controls legend='Write a new post'}} + {{!-- {{#form-controls legend='Write a new post'}} --}} {{input title}} {{input description}} - {{/form-controls}} + {{!-- {{/form-controls}} --}} {{form-submission}} -{{/form}} +{{!-- {{/form}} --}} diff --git a/vendor/ember-easy-form.js b/vendor/ember-easy-form.js index 4ec8970..4d80aea 100644 --- a/vendor/ember-easy-form.js +++ b/vendor/ember-easy-form.js @@ -6,10 +6,36 @@ // License: Licensed under MIT license (see license.js) // ========================================================================== +var EasyFormShims; - // Version: 1.0.0.beta.1 +(function() { + + EasyFormShims = { + + getBinding: function(options, propertyName) { + propertyName += 'Binding'; + + return this.getProperty(options, propertyName); + }, + getProperty: function(options, name) { + var property = options.hash[name]; + + return options.data.view.getStream(property).value(); + }, + + viewHelper: function(context, View, options) { + return Ember.Handlebars.helpers.view.helperFunction.call( + context, [View], options.hash, options, options + ); + }, + } + +})(); + + // Version: 1.0.0.beta.1 (function() { + Ember.EasyForm = Ember.Namespace.create({ VERSION: '1.0.0.beta.1' }); @@ -71,9 +97,10 @@ Ember.Handlebars.registerHelper('error-field', function(property, options) { options = Ember.EasyForm.processOptions(property, options); if (options.hash.propertyBinding) { - options.hash.property = Ember.Handlebars.get(this, options.hash.propertyBinding, options); + options.hash.property = EasyFormShims.getBinding(options, 'property'); } - return Ember.Handlebars.helpers.view.call(this, Ember.EasyForm.Error, options); + + return EasyFormShims.viewHelper(this, Ember.EasyForm.Error, options); }); })(); @@ -83,7 +110,7 @@ Ember.Handlebars.registerHelper('error-field', function(property, options) { (function() { Ember.Handlebars.registerHelper('form-for', function(object, options) { options.data.keywords.formForModelPath = object; - return Ember.Handlebars.helpers.view.call(this, Ember.EasyForm.Form, options); + return EasyFormShims.viewHelper(this, Ember.EasyForm.Form, options); }); })(); @@ -95,7 +122,7 @@ Ember.Handlebars.registerHelper('hint-field', function(property, options) { options = Ember.EasyForm.processOptions(property, options); if (options.hash.text || options.hash.textBinding) { - return Ember.Handlebars.helpers.view.call(this, Ember.EasyForm.Hint, options); + return EasyFormShims.viewHelper(this, Ember.EasyForm.Hint, options); } }); @@ -113,13 +140,26 @@ Ember.Handlebars.registerHelper('input', function(property, options) { options = Ember.EasyForm.processOptions(property, options); options.hash.isBlock = !!(options.fn); - return Ember.Handlebars.helpers.view.call(this, Ember.EasyForm.Input, options); + + // hash = options.hash; + + // options.hash.content = options.hash.items; + // delete options.hash.items; + + // for (var prop in options.hash) { + // if (/-/.test(prop)) { + // var camelized = Ember.String.camelize(prop); + // options.hash[camelized] = options.hash[prop]; + // delete options.hash[prop]; + // } + // } + + return EasyFormShims.viewHelper(this, Ember.EasyForm.Input, options); }); })(); - (function() { var get = Ember.get, set = Ember.set; @@ -128,14 +168,14 @@ Ember.Handlebars.registerHelper('input-field', function(property, options) { options = Ember.EasyForm.processOptions(property, options); if (options.hash.propertyBinding) { - options.hash.property = Ember.Handlebars.get(this, options.hash.propertyBinding, options); + options.hash.property = EasyFormShims.getBinding(options, 'property'); } if (options.hash.inputOptionsBinding) { - options.hash.inputOptions = Ember.Handlebars.get(this, options.hash.inputOptionsBinding, options); + options.hash.inputOptions = EasyFormShims.getBinding(options, 'inputOptions'); } - var modelPath = Ember.Handlebars.get(this, 'formForModelPath', options); + var modelPath = null; options.hash.modelPath = modelPath; property = options.hash.property; @@ -183,7 +223,7 @@ Ember.Handlebars.registerHelper('input-field', function(property, options) { } if (options.hash.as === 'text') { - return Ember.Handlebars.helpers.view.call(context, Ember.EasyForm.TextArea, options); + return EasyFormShims.viewHelper(context, Ember.EasyForm.TextArea, options); } else if (options.hash.as === 'select') { delete(options.hash.valueBinding); @@ -195,13 +235,13 @@ Ember.Handlebars.registerHelper('input-field', function(property, options) { options.hash.selectionBinding = modelPropertyPath(property); } - return Ember.Handlebars.helpers.view.call(context, Ember.EasyForm.Select, options); + return EasyFormShims.viewHelper(context, Ember.EasyForm.Select, options); } else if (options.hash.as === 'checkbox') { if (Ember.isNone(options.hash.checkedBinding)) { options.hash.checkedBinding = modelPropertyPath(property); } - return Ember.Handlebars.helpers.view.call(context, Ember.EasyForm.Checkbox, options); + return EasyFormShims.viewHelper(context, Ember.EasyForm.Checkbox, options); } else { if (!options.hash.as) { if (property.match(/password/)) { @@ -223,18 +263,18 @@ Ember.Handlebars.registerHelper('input-field', function(property, options) { options.hash.type = 'date'; } else if (propertyType(property) === 'boolean' || (!Ember.isNone(context.get(property)) && get(context,property).constructor === Boolean)) { options.hash.checkedBinding = property; - return Ember.Handlebars.helpers.view.call(context, Ember.EasyForm.Checkbox, options); + return EasyFormShims.viewHelper(context, Ember.EasyForm.Checkbox, options); } } } else { var inputType = Ember.EasyForm.Config.getInputType(options.hash.as); if (inputType) { - return Ember.Handlebars.helpers.view.call(context, inputType, options); + return EasyFormShims.viewHelper(context, inputType, options); } options.hash.type = options.hash.as; } - return Ember.Handlebars.helpers.view.call(context, Ember.EasyForm.TextField, options); + return EasyFormShims.viewHelper(context, Ember.EasyForm.TextField, options); } }); @@ -246,7 +286,7 @@ Ember.Handlebars.registerHelper('input-field', function(property, options) { Ember.Handlebars.registerHelper('label-field', function(property, options) { options = Ember.EasyForm.processOptions(property, options); options.hash.viewName = 'label-field-'+options.data.view.elementId; - return Ember.Handlebars.helpers.view.call(this, Ember.EasyForm.Label, options); + return EasyFormShims.viewHelper(this, Ember.EasyForm.Label, options); }); })(); @@ -262,9 +302,9 @@ Ember.Handlebars.registerHelper('submit', function(value, options) { options.hash.context = this; options.hash.value = value || 'Submit'; return (options.hash.as === 'button') ? - Ember.Handlebars.helpers.view.call(this, Ember.EasyForm.Button, options) + EasyFormShims.viewHelper(this, Ember.EasyForm.Button, options) : - Ember.Handlebars.helpers.view.call(this, Ember.EasyForm.Submit, options); + EasyFormShims.viewHelper(this, Ember.EasyForm.Submit, options); }); })(); From d2a411e288fed2fbd67ad11b0bc377ebbfe39479 Mon Sep 17 00:00:00 2001 From: Duncan Graham Walker Date: Thu, 26 Feb 2015 14:07:19 -0500 Subject: [PATCH 3/8] Scopeless helpers changed to components because of HTMLBars incompetibilities --- addon/components/easy-form.js | 9 +++++++++ addon/components/form-controls.js | 16 ++++++++++++++++ addon/helpers/form-controls.js | 16 ---------------- addon/helpers/form.js | 13 ------------- addon/initializers/easy-form-extensions.js | 10 ---------- addon/utils/wrap-buffer.js | 9 --------- app/components/easy-form.js | 3 +++ app/components/form-controls.js | 3 +++ app/templates/components/form-controls.hbs | 2 ++ tests/dummy/app/resources/posts/new/template.hbs | 8 ++++---- vendor/ember-easy-form.js | 3 ++- 11 files changed, 39 insertions(+), 53 deletions(-) create mode 100644 addon/components/easy-form.js create mode 100644 addon/components/form-controls.js delete mode 100644 addon/helpers/form-controls.js delete mode 100644 addon/helpers/form.js delete mode 100644 addon/utils/wrap-buffer.js create mode 100644 app/components/easy-form.js create mode 100644 app/components/form-controls.js create mode 100644 app/templates/components/form-controls.hbs diff --git a/addon/components/easy-form.js b/addon/components/easy-form.js new file mode 100644 index 0000000..5ee9ea0 --- /dev/null +++ b/addon/components/easy-form.js @@ -0,0 +1,9 @@ +import Ember from 'ember'; + +export default Ember.Component.extend({ + attributeBindings: ['novalidate'], + classNameBindings: ['className'], + className: 'form', + tagName: 'form', + novalidate: true, +}); diff --git a/addon/components/form-controls.js b/addon/components/form-controls.js new file mode 100644 index 0000000..2f32d9a --- /dev/null +++ b/addon/components/form-controls.js @@ -0,0 +1,16 @@ +import Ember from 'ember'; + +export default Ember.Component.extend({ + attributeBindings: ['legend'], + classNameBindings: ['className'], + className: 'controls', + legend: null, + tagName: 'fieldset', + + checkForLegend: function() { + Ember.assert( + 'You must pass a legend (description) to the form-controls component like {{#form-controls legend=\'Write a new blog post\'}}', + this.get('legend') + ); + }.on('didInsertElement') +}); diff --git a/addon/helpers/form-controls.js b/addon/helpers/form-controls.js deleted file mode 100644 index 6a14de8..0000000 --- a/addon/helpers/form-controls.js +++ /dev/null @@ -1,16 +0,0 @@ -import Ember from 'ember'; -import wrapBuffer from 'ember-easy-form-extensions/utils/wrap-buffer'; - -export default function(options) { - var legend = options.hash.legend; - - Ember.assert( - 'You must pass a legend (description) to the form-controls helper like {{#form-controls legend=\'Create a new thing\'}}', - legend && Ember.typeOf(legend) === 'string' - ); - - var open = '
' + legend + ''; - var close = '
'; - - return wrapBuffer(open, close, options, this); -} diff --git a/addon/helpers/form.js b/addon/helpers/form.js deleted file mode 100644 index 48eb4f5..0000000 --- a/addon/helpers/form.js +++ /dev/null @@ -1,13 +0,0 @@ -import defaultFor from 'ember-easy-form-extensions/utils/default-for'; -import wrapBuffer from 'ember-easy-form-extensions/utils/wrap-buffer'; - -export default function(options) { - var validate = options.hash.validate; - var className = defaultFor(options.hash.class, 'form'); - var validateString = validate ? '' : ' novalidate'; - - var open = '
'; - var close = '
'; - - return wrapBuffer(open, close, options, this); -} diff --git a/addon/initializers/easy-form-extensions.js b/addon/initializers/easy-form-extensions.js index 7bc8e3e..111e25f 100644 --- a/addon/initializers/easy-form-extensions.js +++ b/addon/initializers/easy-form-extensions.js @@ -1,19 +1,9 @@ import Ember from 'ember'; -/* Import helpers */ - -import form from 'ember-easy-form-extensions/helpers/form'; -import formControls from 'ember-easy-form-extensions/helpers/form-controls'; - export function initialize(/* container, app */) { var Handlebars = Ember.Handlebars; var run = Ember.run; - /* Register helpers */ - - Handlebars.registerHelper('form', form); - Handlebars.registerHelper('form-controls', formControls); - /** Default option overrides */ diff --git a/addon/utils/wrap-buffer.js b/addon/utils/wrap-buffer.js deleted file mode 100644 index 8baf628..0000000 --- a/addon/utils/wrap-buffer.js +++ /dev/null @@ -1,9 +0,0 @@ -export default function wrapBuffer(open, close, options, context) { - options.data.buffer.push('\n' + open); - - if (options.fn(context)) { - options.data.buffer.push('\n' + options.fn(context)); - } - - options.data.buffer.push('\n' + close); -} diff --git a/app/components/easy-form.js b/app/components/easy-form.js new file mode 100644 index 0000000..3bb35d1 --- /dev/null +++ b/app/components/easy-form.js @@ -0,0 +1,3 @@ +import Component from 'ember-easy-form-extensions/components/easy-form'; + +export default Component; diff --git a/app/components/form-controls.js b/app/components/form-controls.js new file mode 100644 index 0000000..8a00b28 --- /dev/null +++ b/app/components/form-controls.js @@ -0,0 +1,3 @@ +import Component from 'ember-easy-form-extensions/components/form-controls'; + +export default Component; diff --git a/app/templates/components/form-controls.hbs b/app/templates/components/form-controls.hbs new file mode 100644 index 0000000..45a72dd --- /dev/null +++ b/app/templates/components/form-controls.hbs @@ -0,0 +1,2 @@ +{{legend}} +{{yield}} diff --git a/tests/dummy/app/resources/posts/new/template.hbs b/tests/dummy/app/resources/posts/new/template.hbs index d0d677c..b2ffe82 100644 --- a/tests/dummy/app/resources/posts/new/template.hbs +++ b/tests/dummy/app/resources/posts/new/template.hbs @@ -1,10 +1,10 @@ -{{!-- {{#form}} --}} +{{#easy-form}} - {{!-- {{#form-controls legend='Write a new post'}} --}} + {{#form-controls legend='Write a new post'}} {{input title}} {{input description}} - {{!-- {{/form-controls}} --}} + {{/form-controls}} {{form-submission}} -{{!-- {{/form}} --}} +{{/easy-form}} diff --git a/vendor/ember-easy-form.js b/vendor/ember-easy-form.js index 4d80aea..2babf95 100644 --- a/vendor/ember-easy-form.js +++ b/vendor/ember-easy-form.js @@ -175,7 +175,8 @@ Ember.Handlebars.registerHelper('input-field', function(property, options) { options.hash.inputOptions = EasyFormShims.getBinding(options, 'inputOptions'); } - var modelPath = null; + var modelPath = null; // CHANGED + options.hash.modelPath = modelPath; property = options.hash.property; From e72a71370910b85b53728186703eabc77492445e Mon Sep 17 00:00:00 2001 From: Duncan Graham Walker Date: Thu, 26 Feb 2015 14:19:23 -0500 Subject: [PATCH 4/8] Component names and templates finalized --- addon/components/{easy-form.js => form-wrapper.js} | 0 app/components/easy-form.js | 3 --- app/components/form-wrapper.js | 3 +++ app/templates/components/form-controls.hbs | 2 +- app/templates/components/form-submission.hbs | 2 +- tests/dummy/app/resources/posts/new/template.hbs | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) rename addon/components/{easy-form.js => form-wrapper.js} (100%) delete mode 100644 app/components/easy-form.js create mode 100644 app/components/form-wrapper.js diff --git a/addon/components/easy-form.js b/addon/components/form-wrapper.js similarity index 100% rename from addon/components/easy-form.js rename to addon/components/form-wrapper.js diff --git a/app/components/easy-form.js b/app/components/easy-form.js deleted file mode 100644 index 3bb35d1..0000000 --- a/app/components/easy-form.js +++ /dev/null @@ -1,3 +0,0 @@ -import Component from 'ember-easy-form-extensions/components/easy-form'; - -export default Component; diff --git a/app/components/form-wrapper.js b/app/components/form-wrapper.js new file mode 100644 index 0000000..b635a84 --- /dev/null +++ b/app/components/form-wrapper.js @@ -0,0 +1,3 @@ +import Component from 'ember-easy-form-extensions/components/form-wrapper'; + +export default Component; diff --git a/app/templates/components/form-controls.hbs b/app/templates/components/form-controls.hbs index 45a72dd..1d1f3b2 100644 --- a/app/templates/components/form-controls.hbs +++ b/app/templates/components/form-controls.hbs @@ -1,2 +1,2 @@ -{{legend}} +{{legend}} {{yield}} diff --git a/app/templates/components/form-submission.hbs b/app/templates/components/form-submission.hbs index b7944c0..a3baa95 100644 --- a/app/templates/components/form-submission.hbs +++ b/app/templates/components/form-submission.hbs @@ -4,7 +4,7 @@ {{#if cancel}}