From e5cb9dbdc2b93efb5043c5b8a2bc87f61ade6039 Mon Sep 17 00:00:00 2001 From: Thomas Jaede Date: Tue, 11 Jul 2017 12:08:24 -0700 Subject: [PATCH 01/66] Update pipeline-converter to use a pointer instead of slice --- core/converter/pipeline-converter.js | 36 ++++++++++++++++++---------- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/core/converter/pipeline-converter.js b/core/converter/pipeline-converter.js index 6283da5e66..7b6505b32d 100644 --- a/core/converter/pipeline-converter.js +++ b/core/converter/pipeline-converter.js @@ -33,27 +33,37 @@ exports.PipelineConverter = Converter.specialize({ convert: { value: function (value) { - return this._convertWithNextConverter(value, this.converters.slice()); + return this._convertWithNextConverter(value, 0); } }, _convertWithNextConverter: { - value: function (input, converters) { + value: function (input, index) { var self = this, - converter = converters.shift(), + converter = this.converters[index], output = converter.convert(input), - isFinalOutput = converters.length === 0, + isFinalOutput = index === (this.converters.length - 1), isPromise = this._isThenable(output), result; + index++; + + + if (isFinalOutput) { result = isPromise ? output : Promise.resolve(output); } else if (isPromise) { + if (this.converters[0].isRolesConverter) { + debugger; + } result = output.then(function (value) { - return self._convertWithNextConverter(value, converters); + if (self.converters[0].isRolesConverter) { + debugger; + } + return self._convertWithNextConverter(value, index); }); } else { - result = this._convertWithNextConverter(output, converters); + result = this._convertWithNextConverter(output, index); } return result; @@ -69,27 +79,29 @@ exports.PipelineConverter = Converter.specialize({ revert: { value: function (value) { - return this._revertWithNextConverter(value, this.converters.slice()); + return this._revertWithNextConverter(value, this.converters.length - 1); } }, _revertWithNextConverter: { - value: function (input, converters) { + value: function (input, index) { var self = this, - converter = converters.pop(), + converter = this.converters[index], output = converter.revert(input), - isFinalOutput = converters.length === 0, + isFinalOutput = index === 0, isPromise = this._isThenable(output), result; + index--; + if (isFinalOutput) { result = isPromise ? output : Promise.resolve(output); } else if (isPromise) { result = output.then(function (value) { - return self._revertWithNextConverter(value, converters); + return self._revertWithNextConverter(value, index); }); } else { - result = this._revertWithNextConverter(output, converters); + result = this._revertWithNextConverter(output, index); } return result; From 2ec2eb90d1ed81fde7546dd180701fbbfa1ab94a Mon Sep 17 00:00:00 2001 From: Thomas Jaede Date: Wed, 12 Jul 2017 18:19:48 -0700 Subject: [PATCH 02/66] Remove log & fix pipeline-converter API --- core/converter/pipeline-converter.js | 22 ++++++++-------------- core/meta/model.js | 1 - 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/core/converter/pipeline-converter.js b/core/converter/pipeline-converter.js index 7b6505b32d..eb0c6fa063 100644 --- a/core/converter/pipeline-converter.js +++ b/core/converter/pipeline-converter.js @@ -33,11 +33,11 @@ exports.PipelineConverter = Converter.specialize({ convert: { value: function (value) { - return this._convertWithNextConverter(value, 0); + return this._convertWithConverterAtIndex(value, 0); } }, - _convertWithNextConverter: { + _convertWithConverterAtIndex: { value: function (input, index) { var self = this, converter = this.converters[index], @@ -53,17 +53,11 @@ exports.PipelineConverter = Converter.specialize({ if (isFinalOutput) { result = isPromise ? output : Promise.resolve(output); } else if (isPromise) { - if (this.converters[0].isRolesConverter) { - debugger; - } result = output.then(function (value) { - if (self.converters[0].isRolesConverter) { - debugger; - } - return self._convertWithNextConverter(value, index); + return self._convertWithConverterAtIndex(value, index); }); } else { - result = this._convertWithNextConverter(output, index); + result = this._convertWithConverterAtIndex(output, index); } return result; @@ -79,11 +73,11 @@ exports.PipelineConverter = Converter.specialize({ revert: { value: function (value) { - return this._revertWithNextConverter(value, this.converters.length - 1); + return this._revertWithConverterAtIndex(value, this.converters.length - 1); } }, - _revertWithNextConverter: { + _revertWithConverterAtIndex: { value: function (input, index) { var self = this, converter = this.converters[index], @@ -98,10 +92,10 @@ exports.PipelineConverter = Converter.specialize({ result = isPromise ? output : Promise.resolve(output); } else if (isPromise) { result = output.then(function (value) { - return self._revertWithNextConverter(value, index); + return self._revertWithConverterAtIndex(value, index); }); } else { - result = this._revertWithNextConverter(output, index); + result = this._revertWithConverterAtIndex(output, index); } return result; diff --git a/core/meta/model.js b/core/meta/model.js index 79374624c4..17442aca6e 100644 --- a/core/meta/model.js +++ b/core/meta/model.js @@ -367,7 +367,6 @@ var Model = exports.Model = Montage.specialize( /** @lends Model.prototype # */ if (_group === null) { _group = new ModelGroup(); _group.name = application ? application.name : ""; - console.log("Default ModelGroup name is ",_group.name); } return _group; } From 5ab12ea6c48a75ca301b1293e9841f67c424068e Mon Sep 17 00:00:00 2001 From: cdebost Date: Thu, 3 Aug 2017 15:12:02 -0700 Subject: [PATCH 03/66] Remove websocket _isMessagePending which blocked successive messages --- core/websocket.js | 39 +++++++++++++++++---------------------- 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/core/websocket.js b/core/websocket.js index 205f26da67..8cd879dbe5 100644 --- a/core/websocket.js +++ b/core/websocket.js @@ -21,7 +21,6 @@ var _WebSocket = global.WebSocket, this._protocols = protocols; this._messageQueue = []; this._webSocket = null; - this._isMessagePending = false; this._isReconnecting = false; this._connect(); return this; @@ -40,39 +39,37 @@ var _WebSocket = global.WebSocket, _webSocket: { value: undefined }, - _isMessagePending: { - value: undefined - }, reconnectionInterval: { value: 100 }, + _connect: { value: function () { - this._webSocket = new _WebSocket(this._url,this._protocols); - this._webSocket.addEventListener("error", this, false); - this._webSocket.addEventListener("open", this, false); + this._webSocket = new _WebSocket(this._url, this._protocols); + this._webSocket.addEventListener("error", this, false); + this._webSocket.addEventListener("open", this, false); } }, + send: { value: function send(data) { this._messageQueue.push(data); this._sendNextMessage(); } }, + _sendNextMessage: { value: function () { - if (!this._isMessagePending && this._messageQueue.length) { - if (this._webSocket) { - this._isMessagePending = true; - if ((this._webSocket.readyState !== WebSocket.CLOSING) && (this._webSocket.readyState !== WebSocket.CLOSED)) { - try { - this._webSocket.send(this._messageQueue[0]); - } catch (e) { - this._isMessagePending = false; - this._reconnect(); - } - } else { - this._isMessagePending = false; + if (this._messageQueue.length) { + if ( + this._webSocket && + this._webSocket.readyState !== WebSocket.CLOSING && + this._webSocket.readyState !== WebSocket.CLOSED + ) { + try { + this._webSocket.send(this._messageQueue[0]); + this._messageQueue.shift(); + } catch (e) { this._reconnect(); } } else { @@ -81,6 +78,7 @@ var _WebSocket = global.WebSocket, } } }, + _reconnect: { value: function () { var self; @@ -89,7 +87,6 @@ var _WebSocket = global.WebSocket, if (!this._isReconnecting) { self = this; this._webSocket = null; - this._isMessagePending = false; this._isReconnecting = true; setTimeout(function () { self._connect(); @@ -116,8 +113,6 @@ var _WebSocket = global.WebSocket, this._sendNextMessage(); break; case "message": - this._isMessagePending = false; - this._messageQueue.shift(); this.dispatchEvent(event); this._sendNextMessage(); break; From aba83b52dd8978029d522c2cb1f9b5db40b6c586 Mon Sep 17 00:00:00 2001 From: Harold Thetiot Date: Mon, 14 Aug 2017 13:51:25 -0700 Subject: [PATCH 04/66] fix Component attribute regression --- ui/component.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/component.js b/ui/component.js index 539c315cdb..2bedaf9c9c 100644 --- a/ui/component.js +++ b/ui/component.js @@ -3281,7 +3281,7 @@ var Component = exports.Component = Target.specialize(/** @lends Component.proto if (this._elementAttributeDescriptors.hasOwnProperty(attributeName)) { descriptor = this._elementAttributeDescriptors[attributeName]; var _name = "_"+attributeName; - if ((this[name] === null || this[name] === undefined) && descriptor !== null && "value" in descriptor) { + if ((this[_name] === null) && descriptor !== null && "value" in descriptor) { this[_name] = descriptor.value; } } From 88bf3ce0c69ef5830566b60e417ed8f9e59bdec4 Mon Sep 17 00:00:00 2001 From: Harold Thetiot Date: Tue, 15 Aug 2017 12:47:50 -0700 Subject: [PATCH 05/66] remove multiSelect deprecated warning --- ui/select.reel/select.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/select.reel/select.js b/ui/select.reel/select.js index cdbe37aa63..37ea1100c8 100644 --- a/ui/select.reel/select.js +++ b/ui/select.reel/select.js @@ -162,7 +162,7 @@ var Select = exports.Select = Control.specialize(/** @lends module:"montage/ui/ } this._contentController = value; - value.multiSelect = this.multiple; + value.allowsMultipleSelection = this.multiple; Bindings.defineBindings(this, { "content": {"<-": "_contentController.organizedContent"}, From 620d208f93f1d5cc4e251951ced21993098dcc3e Mon Sep 17 00:00:00 2001 From: Harold Thetiot Date: Tue, 15 Aug 2017 18:47:04 -0700 Subject: [PATCH 06/66] fix event-manager 'Added non-passive event listener to a scroll-blocking '{eventType}' event. Consider marking event handler as 'passive' to make the page more responsive.' --- core/event/event-manager.js | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/core/event/event-manager.js b/core/event/event-manager.js index 4e1c2238be..54803d1c82 100644 --- a/core/event/event-manager.js +++ b/core/event/event-manager.js @@ -1183,6 +1183,16 @@ var EventManager = exports.EventManager = Montage.specialize(/** @lends EventMan // Individual Event Registration + _scrollBlockingEvents: { + value: [ + 'wheel', + 'mousewheel', + 'touchstart', + 'touchmove', + 'scroll' + ] + }, + /** * @private */ @@ -1198,7 +1208,12 @@ var EventManager = exports.EventManager = Montage.specialize(/** @lends EventMan } this._observedTarget_byEventType_[eventType].set(listenerTarget,this); - listenerTarget.nativeAddEventListener(eventType, this, true); + var isScrollBlocking = this._scrollBlockingEvents.indexOf(eventType) !== -1, + eventOpts = isScrollBlocking ? { + passive: true + } : true; + + listenerTarget.nativeAddEventListener(eventType, this, eventOpts); } // console.log("started listening: ", eventType, listenerTarget) } From 78d4e644af4e0072da54885c81c4c76b10b5be2a Mon Sep 17 00:00:00 2001 From: cdebost Date: Wed, 16 Aug 2017 00:56:15 -0700 Subject: [PATCH 07/66] Fix race condition that can lead to duplicate websockets --- core/websocket.js | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/core/websocket.js b/core/websocket.js index 8cd879dbe5..27af076dde 100644 --- a/core/websocket.js +++ b/core/websocket.js @@ -61,19 +61,21 @@ var _WebSocket = global.WebSocket, _sendNextMessage: { value: function () { if (this._messageQueue.length) { - if ( - this._webSocket && - this._webSocket.readyState !== WebSocket.CLOSING && - this._webSocket.readyState !== WebSocket.CLOSED - ) { - try { - this._webSocket.send(this._messageQueue[0]); - this._messageQueue.shift(); - } catch (e) { + switch (this.readyState) { + case WebSocket.CONNECTING: + break; + case WebSocket.CLOSING: + case WebSocket.CLOSED: this._reconnect(); - } - } else { - this._reconnect(); + break; + case WebSocket.OPEN: + try { + this._webSocket.send(this._messageQueue[0]); + this._messageQueue.shift(); + } catch (e) { + this._reconnect(); + } + break; } } } @@ -155,7 +157,7 @@ var _WebSocket = global.WebSocket, }, readyState: { get: function () { - return this._webSocket.readyState; + return this._webSocket ? this._webSocket.readyState : WebSocket.CLOSED; } }, From 7cc05d14b97b26d5e9c59e1f910da73d2464d68a Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Thu, 17 Aug 2017 15:14:47 -0400 Subject: [PATCH 08/66] Don't specify address to use when running test:jasmine It will use the default one (0.0.0.0) instead. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 52de1377ae..bcd2522149 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ "test:karma-chrome": "karma start --no-auto-watch --single-run --browsers=Chrome", "test:karma-debug": "karma start --auto-watch --no-single-run --browsers=PhantomJS_debug", "test:karma-dev": "karma start --auto-watch --no-single-run --capture", - "test:jasmine": "concurrently \"http-server -a localhost -p 8085\" \"open http://localhost:8085/test/run.html\"" + "test:jasmine": "concurrently \"http-server -p 8085\" \"open http://localhost:8085/test/run.html\"" }, "exclude": [ "report", From aa411652b439051cc100a0c139ddc08deb2fa803 Mon Sep 17 00:00:00 2001 From: Harold Thetiot Date: Wed, 23 Aug 2017 13:58:52 -0700 Subject: [PATCH 09/66] add npmjs badge to README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 1b280f94f6..45e3011353 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ # MontageJS +[![npm version](https://img.shields.io/npm/v/montage.svg?style=flat)](https://www.npmjs.com/package/montage) + [![Build Status](https://travis-ci.org/montagejs/montage.svg?branch=master)](http://travis-ci.org/montagejs/montage) [![Analytics](https://ga-beacon.appspot.com/UA-35717912-2/montagejs/montage)](https://github.com/montagejs/montage) From 1bc566e6f22381f7970b594207a6f1e52c7191da Mon Sep 17 00:00:00 2001 From: cdebost Date: Thu, 20 Jul 2017 16:25:42 -0700 Subject: [PATCH 10/66] Support .mjson circular referencing --- .../deserializer/montage-deserializer.js | 14 ++++-- .../deserializer/montage-interpreter.js | 5 +- .../deserializer/montage-reviver.js | 47 +++++++++++++------ test/spec/serialization/circular/a.mjson | 13 +++++ test/spec/serialization/circular/b.mjson | 13 +++++ test/spec/serialization/interpreter-spec.js | 5 +- .../montage-deserializer-spec.js | 18 +++++++ test/spec/serialization/reviver-spec.js | 2 +- 8 files changed, 93 insertions(+), 24 deletions(-) create mode 100644 test/spec/serialization/circular/a.mjson create mode 100644 test/spec/serialization/circular/b.mjson diff --git a/core/serialization/deserializer/montage-deserializer.js b/core/serialization/deserializer/montage-deserializer.js index 5d1f8319cb..ac83642410 100644 --- a/core/serialization/deserializer/montage-deserializer.js +++ b/core/serialization/deserializer/montage-deserializer.js @@ -1,6 +1,7 @@ var Montage = require("../../core").Montage, MontageInterpreter = require("./montage-interpreter").MontageInterpreter, MontageReviver = require("./montage-reviver").MontageReviver, + Map = require("collections/map").Map, deprecate = require("../../deprecate"); var MontageDeserializer = exports.MontageDeserializer = Montage.specialize({ @@ -26,18 +27,23 @@ var MontageDeserializer = exports.MontageDeserializer = Montage.specialize({ }, init: { - value: function (serializationString, _require, objectRequires) { + value: function (serializationString, _require, objectRequires, locationId, deserializedModules) { this._serializationString = serializationString; - this._interpreter = new MontageInterpreter().init(_require, objectRequires); + deserializedModules = deserializedModules || new Map(); + this._interpreter = new MontageInterpreter().init(_require, + new MontageReviver().init(_require, objectRequires, locationId, deserializedModules)); return this; } }, initWithObject: { - value: function (serialization, _require, objectRequires) { + value: function (serialization, _require, objectRequires, locationId, deserializedModules) { this._serializationString = JSON.stringify(serialization); - this._interpreter = new MontageInterpreter().init(_require, objectRequires); + deserializedModules = deserializedModules || new Map(); + this._interpreter = new MontageInterpreter().init(_require, + new MontageReviver().init(_require, objectRequires, locationId, deserializedModules)); + return this; } }, diff --git a/core/serialization/deserializer/montage-interpreter.js b/core/serialization/deserializer/montage-interpreter.js index de214a51e5..ce46d2a47b 100644 --- a/core/serialization/deserializer/montage-interpreter.js +++ b/core/serialization/deserializer/montage-interpreter.js @@ -10,13 +10,12 @@ var MontageInterpreter = Montage.specialize({ _reviver: {value: null}, init: { - value: function (_require, objectRequires) { + value: function (_require, reviver) { if (typeof _require !== "function") { throw new Error("Function 'require' missing."); } - this._reviver = new MontageReviver() - .init(_require, objectRequires); + this._reviver = reviver; this._require = _require; return this; diff --git a/core/serialization/deserializer/montage-reviver.js b/core/serialization/deserializer/montage-reviver.js index c3e459a8a1..6b15bfed1f 100644 --- a/core/serialization/deserializer/montage-reviver.js +++ b/core/serialization/deserializer/montage-reviver.js @@ -93,12 +93,18 @@ var MontageReviver = exports.MontageReviver = Montage.specialize(/** @lends Mont * @param {Object} objectRequires A dictionary indexed by object label with * the require object to use for a specific object of the * serialization. + * @param {?Map} deserializedModules A map indexed by module ID with the + * deserialized object to use for a specific external object + * reference. Used to prevent circular references from creating + * an infinite loop. */ init: { - value: function (_require, objectRequires) { + value: function (_require, objectRequires, locationId, deserializedModules) { this.moduleLoader = new ModuleLoader() .init(_require, objectRequires); this._require = _require; + this._locationId = locationId; + this._deserializedModules = deserializedModules; return this; } }, @@ -288,8 +294,9 @@ var MontageReviver = exports.MontageReviver = Montage.specialize(/** @lends Mont moduleId = value.prototype || value.object, object; - if (moduleId && moduleId.endsWith(".mjson")) { - return this.getMjsonObject(value, module, moduleId) + + if (moduleId && (moduleId.endsWith(".mjson") || moduleId.endsWith(".meta"))) { + return this.getMjsonObject(value, module, moduleId, context) .then(function (object) { context.setObjectLabel(object, label); return self.instantiateMjsonObject(value, object, objectName, context, label); @@ -303,17 +310,29 @@ var MontageReviver = exports.MontageReviver = Montage.specialize(/** @lends Mont }, getMjsonObject: { - value: function (serialization, json, moduleId) { - var self = this; - return MontageReviver.getMontageDeserializer().then(function (MontageDeserializer) { - // TODO: MontageDeserializer needs an API to pass in an object - // instead of the stringified version of the object - var deserializer = new MontageDeserializer().init( - JSON.stringify(json), - MontageDeserializer.getModuleRequire(self._require, moduleId) - ); - return deserializer.deserializeObject(); - }).then(function (object) { + value: function (serialization, json, moduleId, context) { + var self = this, + mjsonObjectPromise; + if (moduleId && this._deserializedModules.has(moduleId)) { + // We have a circular reference. If we wanted to forbid circular + // references this is where we would throw an error. + mjsonObjectPromise = Promise.resolve(this._deserializedModules.get(moduleId)); + } else { + if (this._locationId && !this._deserializedModules.has(this._locationId)) { + this._deserializedModules.set(this._locationId, context._objects.root); + } + mjsonObjectPromise = MontageReviver.getMontageDeserializer().then(function (MontageDeserializer) { + var deserializer = new MontageDeserializer().initWithObject( + json, + MontageDeserializer.getModuleRequire(self._require, moduleId), + void 0, + moduleId, + self._deserializedModules + ); + return deserializer.deserializeObject(); + }); + } + return mjsonObjectPromise.then(function (object) { if ("prototype" in serialization) { return Object.create(object); } else { diff --git a/test/spec/serialization/circular/a.mjson b/test/spec/serialization/circular/a.mjson new file mode 100644 index 0000000000..bb310c2e90 --- /dev/null +++ b/test/spec/serialization/circular/a.mjson @@ -0,0 +1,13 @@ +{ + "b": { + "object": "spec/serialization/circular/b.mjson" + }, + + "root": { + "prototype": "montage", + "values": { + "bRef": {"@": "b"}, + "myAProp": "foo" + } + } +} diff --git a/test/spec/serialization/circular/b.mjson b/test/spec/serialization/circular/b.mjson new file mode 100644 index 0000000000..d48769c258 --- /dev/null +++ b/test/spec/serialization/circular/b.mjson @@ -0,0 +1,13 @@ +{ + "a": { + "object": "spec/serialization/circular/a.mjson" + }, + + "root": { + "prototype": "montage", + "values": { + "aRef": {"@": "a"}, + "myBProp": "bar" + } + } +} diff --git a/test/spec/serialization/interpreter-spec.js b/test/spec/serialization/interpreter-spec.js index 64ef1d5fae..b5844132a2 100644 --- a/test/spec/serialization/interpreter-spec.js +++ b/test/spec/serialization/interpreter-spec.js @@ -1,11 +1,12 @@ -var Interpreter = require("montage/core/serialization/deserializer/montage-interpreter").MontageInterpreter; +var Interpreter = require("montage/core/serialization/deserializer/montage-interpreter").MontageInterpreter, + Reviver = require("montage/core/serialization/deserializer/montage-reviver").MontageReviver; describe("interpreter", function() { var interpreter; beforeEach(function() { - interpreter = new Interpreter().init(require); + interpreter = new Interpreter().init(require, new Reviver().init(require)); }); describe("native values with labels", function() { diff --git a/test/spec/serialization/montage-deserializer-spec.js b/test/spec/serialization/montage-deserializer-spec.js index 9dc2ff456e..d0d4242990 100644 --- a/test/spec/serialization/montage-deserializer-spec.js +++ b/test/spec/serialization/montage-deserializer-spec.js @@ -1361,4 +1361,22 @@ describe("serialization/montage-deserializer-spec", function () { }) }); }); + + it("handles circular references", function (done) { + var serialization = { + "root": { + "object": "spec/serialization/circular/a.mjson" + } + }; + var deserializer = new Deserializer().init(JSON.stringify(serialization), require); + deserializer.deserializeObject() + .then(function (result) { + expect(result.bRef.myBProp).toBe("bar"); + expect(result.bRef.aRef).toBe(result); + }).catch(function (err) { + fail(err); + }).finally(function () { + done(); + }); + }); }); diff --git a/test/spec/serialization/reviver-spec.js b/test/spec/serialization/reviver-spec.js index aa6d81cbd5..e6b30afd70 100644 --- a/test/spec/serialization/reviver-spec.js +++ b/test/spec/serialization/reviver-spec.js @@ -130,7 +130,7 @@ describe("reviver", function() { var interpreter; beforeEach(function() { - interpreter = new Interpreter().init(require); + interpreter = new Interpreter().init(require, new Reviver().init(require)); }); afterEach(function() { Reviver.resetCustomObjectRevivers(); From a5cc53530aad8d99f5b0fec2e158af05f73485e0 Mon Sep 17 00:00:00 2001 From: cdebost Date: Mon, 31 Jul 2017 11:34:59 -0700 Subject: [PATCH 11/66] Fix failure in edge case of circular deserialization --- .../deserializer/montage-deserializer.js | 12 ++++++------ .../deserializer/montage-reviver.js | 19 +++++++++---------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/core/serialization/deserializer/montage-deserializer.js b/core/serialization/deserializer/montage-deserializer.js index ac83642410..836863a922 100644 --- a/core/serialization/deserializer/montage-deserializer.js +++ b/core/serialization/deserializer/montage-deserializer.js @@ -27,22 +27,22 @@ var MontageDeserializer = exports.MontageDeserializer = Montage.specialize({ }, init: { - value: function (serializationString, _require, objectRequires, locationId, deserializedModules) { + value: function (serializationString, _require, objectRequires, locationId, moduleContexts) { this._serializationString = serializationString; - deserializedModules = deserializedModules || new Map(); + moduleContexts = moduleContexts || new Map(); this._interpreter = new MontageInterpreter().init(_require, - new MontageReviver().init(_require, objectRequires, locationId, deserializedModules)); + new MontageReviver().init(_require, objectRequires, locationId, moduleContexts)); return this; } }, initWithObject: { - value: function (serialization, _require, objectRequires, locationId, deserializedModules) { + value: function (serialization, _require, objectRequires, locationId, moduleContexts) { this._serializationString = JSON.stringify(serialization); - deserializedModules = deserializedModules || new Map(); + moduleContexts = moduleContexts || new Map(); this._interpreter = new MontageInterpreter().init(_require, - new MontageReviver().init(_require, objectRequires, locationId, deserializedModules)); + new MontageReviver().init(_require, objectRequires, locationId, moduleContexts)); return this; } diff --git a/core/serialization/deserializer/montage-reviver.js b/core/serialization/deserializer/montage-reviver.js index 6b15bfed1f..8472024e4a 100644 --- a/core/serialization/deserializer/montage-reviver.js +++ b/core/serialization/deserializer/montage-reviver.js @@ -93,18 +93,18 @@ var MontageReviver = exports.MontageReviver = Montage.specialize(/** @lends Mont * @param {Object} objectRequires A dictionary indexed by object label with * the require object to use for a specific object of the * serialization. - * @param {?Map} deserializedModules A map indexed by module ID with the - * deserialized object to use for a specific external object + * @param {?Map} moduleContexts A map indexed by module ID with the + * MontageContext to use for a specific external object * reference. Used to prevent circular references from creating * an infinite loop. */ init: { - value: function (_require, objectRequires, locationId, deserializedModules) { + value: function (_require, objectRequires, locationId, moduleContexts) { this.moduleLoader = new ModuleLoader() .init(_require, objectRequires); this._require = _require; this._locationId = locationId; - this._deserializedModules = deserializedModules; + this._moduleContexts = moduleContexts; return this; } }, @@ -294,7 +294,6 @@ var MontageReviver = exports.MontageReviver = Montage.specialize(/** @lends Mont moduleId = value.prototype || value.object, object; - if (moduleId && (moduleId.endsWith(".mjson") || moduleId.endsWith(".meta"))) { return this.getMjsonObject(value, module, moduleId, context) .then(function (object) { @@ -313,13 +312,13 @@ var MontageReviver = exports.MontageReviver = Montage.specialize(/** @lends Mont value: function (serialization, json, moduleId, context) { var self = this, mjsonObjectPromise; - if (moduleId && this._deserializedModules.has(moduleId)) { + if (moduleId && this._moduleContexts.has(moduleId)) { // We have a circular reference. If we wanted to forbid circular // references this is where we would throw an error. - mjsonObjectPromise = Promise.resolve(this._deserializedModules.get(moduleId)); + mjsonObjectPromise = Promise.resolve(this._moduleContexts.get(moduleId)._objects.root); } else { - if (this._locationId && !this._deserializedModules.has(this._locationId)) { - this._deserializedModules.set(this._locationId, context._objects.root); + if (this._locationId && !this._moduleContexts.has(this._locationId)) { + this._moduleContexts.set(this._locationId, context); } mjsonObjectPromise = MontageReviver.getMontageDeserializer().then(function (MontageDeserializer) { var deserializer = new MontageDeserializer().initWithObject( @@ -327,7 +326,7 @@ var MontageReviver = exports.MontageReviver = Montage.specialize(/** @lends Mont MontageDeserializer.getModuleRequire(self._require, moduleId), void 0, moduleId, - self._deserializedModules + self._moduleContexts ); return deserializer.deserializeObject(); }); From 82a830acc83e9b2bafc179cc2e096823c8bf7142 Mon Sep 17 00:00:00 2001 From: cdebost Date: Mon, 31 Jul 2017 11:36:32 -0700 Subject: [PATCH 12/66] Convert object descriptor parent reference into value --- core/meta/object-descriptor.js | 33 ++++++++++++++++---------------- core/meta/property-descriptor.js | 14 ++++++++++---- test/spec/meta/blueprint-spec.js | 2 -- 3 files changed, 26 insertions(+), 23 deletions(-) diff --git a/core/meta/object-descriptor.js b/core/meta/object-descriptor.js index a6219d5967..d8099b6635 100644 --- a/core/meta/object-descriptor.js +++ b/core/meta/object-descriptor.js @@ -2,7 +2,6 @@ var Montage = require("../core").Montage, DerivedDescriptor = require("./derived-descriptor").DerivedDescriptor, EventDescriptor = require("./event-descriptor").EventDescriptor, ModelModule = require("./model"), - ObjectDescriptorReference = require("./object-descriptor-reference").ObjectDescriptorReference, Promise = require("../promise").Promise, PropertyDescriptor = require("./property-descriptor").PropertyDescriptor, PropertyValidationRule = require("./validation-rule").PropertyValidationRule, @@ -59,8 +58,8 @@ var ObjectDescriptor = exports.ObjectDescriptor = Montage.specialize( /** @lends if (this.objectDescriptorInstanceModule) { serializer.setProperty("objectDescriptorModule", this.objectDescriptorInstanceModule); } - if (this._parentReference) { - serializer.setProperty("parent", this._parentReference); + if (this._parent) { + serializer.setProperty("parent", this._parent); } this._setPropertyWithDefaults(serializer, "customPrototype", this.customPrototype); @@ -85,14 +84,20 @@ var ObjectDescriptor = exports.ObjectDescriptor = Montage.specialize( /** @lends deserializeSelf: { value:function (deserializer) { - var value, model; + var value, model, parentReference; this._name = deserializer.getProperty("name"); value = deserializer.getProperty("model") || deserializer.getProperty("binder"); if (value) { this._model = value; } this.objectDescriptorInstanceModule = deserializer.getProperty("objectDescriptorModule") || deserializer.getProperty("blueprintModule"); - this._parentReference = deserializer.getProperty("parent"); + parentReference = deserializer.getProperty("parent"); + if (parentReference && parentReference.promise && parentReference.valueFromReference) { + deprecate.deprecationWarningOnce("parent reference via ObjectDescriptorReference", "direct reference with object syntax"); + this._parentReference = parentReference; + } else { + this._parent = parentReference; + } this.customPrototype = this._getPropertyWithDefaults(deserializer, "customPrototype"); // @@ -317,7 +322,7 @@ var ObjectDescriptor = exports.ObjectDescriptor = Montage.specialize( /** @lends /** * Blueprint parent - * @returns {?ObjectDescriptorReference} + * @type {?ObjectDescriptor} */ parent: { serializable: false, @@ -325,13 +330,7 @@ var ObjectDescriptor = exports.ObjectDescriptor = Montage.specialize( /** @lends return this._parent; }, set: function (objectDescriptor) { - if (objectDescriptor) { - this._parentReference = new ObjectDescriptorReference().initWithValue(objectDescriptor); - this._parent = objectDescriptor; - } else { - this._parentReference = null; - this._parent = null; - } + this._parent = objectDescriptor; } }, @@ -573,7 +572,7 @@ var ObjectDescriptor = exports.ObjectDescriptor = Montage.specialize( /** @lends name; for (name in this._propertyDescriptorGroups) { if (this._propertyDescriptorGroups.hasOwnProperty(name)) { - groups.push(name); + groups.push(name); } } if (this.parent) { @@ -782,7 +781,7 @@ var ObjectDescriptor = exports.ObjectDescriptor = Montage.specialize( /** @lends } this._eventPropertyDescriptorsTable[name] = eventDescriptor; } - + // TODO: Come back after creating event property descriptor if (eventDescriptor === exports.UnknownEventDescriptor) { eventDescriptor = null; @@ -812,7 +811,7 @@ var ObjectDescriptor = exports.ObjectDescriptor = Montage.specialize( /** @lends propertyValidationRules = []; for (propertyName in this._propertyValidationRules) { if (this._propertyValidationRules.hasOwnProperty(propertyName)) { - propertyValidationRules.push(this._propertyValidationRules[propertyName]); + propertyValidationRules.push(this._propertyValidationRules[propertyName]); } } if (this.parent) { @@ -886,7 +885,7 @@ var ObjectDescriptor = exports.ObjectDescriptor = Montage.specialize( /** @lends rule = this._propertyValidationRules[name]; if (rule.evaluateRule(objectInstance)) { messages.push(rule.messageKey); - } + } } } return messages; diff --git a/core/meta/property-descriptor.js b/core/meta/property-descriptor.js index ba7152929a..12361d4001 100644 --- a/core/meta/property-descriptor.js +++ b/core/meta/property-descriptor.js @@ -1,5 +1,5 @@ var Montage = require("../core").Montage, - ObjectDescriptorReference = require("./object-descriptor-reference").ObjectDescriptorReference, + Promise = require("../promise").Promise, deprecate = require("../deprecate"), logger = require("../logger").logger("objectDescriptor"); @@ -321,11 +321,17 @@ exports.PropertyDescriptor = Montage.specialize( /** @lends PropertyDescriptor# valueDescriptor: { serializable: false, get: function () { - return this._valueDescriptorReference && this._valueDescriptorReference.promise(this.require); + // TODO: Needed for backwards compatibility with ObjectDescriptorReference. + // Remove eventually, this can become completely sync + if (typeof this._valueDescriptorReference.promise === "function") { + deprecate.deprecationWarningOnce("valueDescriptor reference via ObjectDescriptorReference", "direct reference via object syntax"); + return this._valueDescriptorReference.promise(this.require); + } else { + return Promise.resolve(this._valueDescriptorReference); + } }, set: function (descriptor) { - - this._valueDescriptorReference = new ObjectDescriptorReference().initWithValue(descriptor); + this._valueDescriptorReference = descriptor; } }, diff --git a/test/spec/meta/blueprint-spec.js b/test/spec/meta/blueprint-spec.js index 744e5766b5..eabf2fad5d 100644 --- a/test/spec/meta/blueprint-spec.js +++ b/test/spec/meta/blueprint-spec.js @@ -19,8 +19,6 @@ var logger = require("montage/core/logger").logger("./blueprint-spec.js"); // Require to deserialize // TODO add proper deps to montage modules require('montage/core/meta/object-descriptor'); -require('montage/core/meta/object-descriptor-reference'); -require('montage/core/meta/blueprint-reference'); require('montage/core/meta/property-blueprint'); require('montage/core/meta/module-blueprint'); From a8bd205ab9aa6ff7b4f643f08dbec153ec45074a Mon Sep 17 00:00:00 2001 From: cdebost Date: Mon, 17 Jul 2017 21:24:06 -0700 Subject: [PATCH 13/66] Remove references from meta files --- core/converter/bytes-converter.meta | 11 +------ core/converter/currency-converter.meta | 11 +------ core/converter/date-converter.meta | 11 +------ core/converter/expression-converter.meta | 11 +------ core/converter/invert-converter.meta | 11 +------ core/converter/lower-case-converter.meta | 11 +------ core/converter/new-line-to-br-converter.meta | 11 +------ core/converter/number-converter.meta | 11 +------ core/converter/trim-converter.meta | 11 +------ core/converter/upper-case-converter.meta | 11 +------ core/meta/association-blueprint.meta | 11 +------ core/meta/derived-descriptor.mjson | 11 +------ core/meta/event-descriptor.mjson | 11 +------ core/meta/model.mjson | 11 +------ core/meta/object-descriptor.mjson | 33 ++----------------- core/meta/property-descriptor.mjson | 11 +------ core/meta/validation-rule.mjson | 11 +------ .../node_modules/dependency/thing.meta | 9 +---- test/spec/meta/blueprint/package/thing.meta | 9 +---- .../child-controller.meta | 11 +------ ui/base/abstract-alert.meta | 11 +------ ui/base/abstract-button.meta | 11 +------ ui/base/abstract-checkbox.meta | 11 +------ ui/base/abstract-confirm.meta | 11 +------ ui/base/abstract-control.meta | 11 +------ ui/base/abstract-image.meta | 11 +------ ui/base/abstract-link.meta | 11 +------ ui/base/abstract-number-field.meta | 11 +------ ui/base/abstract-progress-bar.meta | 11 +------ ui/base/abstract-radio-button.meta | 11 +------ ui/base/abstract-select.meta | 11 +------ ui/base/abstract-slider.meta | 11 +------ ui/base/abstract-text-area.meta | 11 +------ ui/base/abstract-text-field.meta | 11 +------ ui/base/abstract-toggle-button.meta | 11 +------ ui/base/abstract-toggle-switch.meta | 11 +------ ui/base/abstract-video.meta | 9 +---- ui/button.reel/button.meta | 11 +------ ui/checkbox.reel/checkbox.meta | 11 +------ ui/condition.reel/condition.meta | 11 +------ ui/control.meta | 11 +------ ui/flow.reel/flow.meta | 11 +------ ui/label.reel/label.meta | 22 ++----------- ui/loader.reel/loader.meta | 11 +------ ui/modal-overlay.reel/modal-overlay.meta | 11 +------ ui/overlay.reel/overlay.meta | 11 +------ ui/repetition.reel/repetition.meta | 11 +------ ui/slider.reel/slider.meta | 11 +------ ui/slot.reel/slot.meta | 11 +------ ui/substitution.reel/substitution.meta | 11 +------ ui/text-field.reel/text-field.meta | 11 +------ ui/text.reel/text.meta | 22 ++----------- 52 files changed, 56 insertions(+), 554 deletions(-) diff --git a/core/converter/bytes-converter.meta b/core/converter/bytes-converter.meta index e6ba2ecbbe..1b0741e603 100644 --- a/core/converter/bytes-converter.meta +++ b/core/converter/bytes-converter.meta @@ -11,16 +11,7 @@ } }, "converter_blueprint_reference": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "Converter", - "prototypeName": "Converter", - "blueprintModule": { - "%": "core/converter/converter.meta" - } - } - } + "object": "core/converter/converter.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/core/converter/currency-converter.meta b/core/converter/currency-converter.meta index 08618cfa1d..fd5d57d8a6 100644 --- a/core/converter/currency-converter.meta +++ b/core/converter/currency-converter.meta @@ -11,16 +11,7 @@ } }, "number_converter_blueprint_reference": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "NumberConverter", - "prototypeName": "NumberConverter", - "blueprintModule": { - "%": "core/converter/number-converter.meta" - } - } - } + "object": "core/converter/number-converter.meta" }, "currencyConverter_showCurrencyBeforeNumber": { "prototype": "core/meta/property-blueprint", diff --git a/core/converter/date-converter.meta b/core/converter/date-converter.meta index 02559c8aac..a3b23de88a 100644 --- a/core/converter/date-converter.meta +++ b/core/converter/date-converter.meta @@ -22,16 +22,7 @@ } }, "converter_blueprint_reference": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "Converter", - "prototypeName": "Converter", - "blueprintModule": { - "%": "core/converter/converter.meta" - } - } - } + "object": "core/converter/converter.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/core/converter/expression-converter.meta b/core/converter/expression-converter.meta index a18233e33a..bc155b8215 100644 --- a/core/converter/expression-converter.meta +++ b/core/converter/expression-converter.meta @@ -1,15 +1,6 @@ { "converter_object-descriptor_reference": { - "prototype": "core/meta/object-descriptor-reference", - "values": { - "valueReference": { - "blueprintName": "Converter", - "prototypeName": "Converter", - "blueprintModule": { - "%": "core/converter/converter.meta" - } - } - } + "object": "core/converter/converter.meta" }, "convertExpression": { "prototype": "core/meta/property-descriptor", diff --git a/core/converter/invert-converter.meta b/core/converter/invert-converter.meta index 70f3401b26..391028a731 100644 --- a/core/converter/invert-converter.meta +++ b/core/converter/invert-converter.meta @@ -1,15 +1,6 @@ { "converter_blueprint_reference": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "Converter", - "prototypeName": "Converter", - "blueprintModule": { - "%": "core/converter/converter.meta" - } - } - } + "object": "core/converter/converter.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/core/converter/lower-case-converter.meta b/core/converter/lower-case-converter.meta index 911f55ae4d..77738da0a4 100644 --- a/core/converter/lower-case-converter.meta +++ b/core/converter/lower-case-converter.meta @@ -1,15 +1,6 @@ { "converter_blueprint_reference": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "Converter", - "prototypeName": "Converter", - "blueprintModule": { - "%": "core/converter/converter.meta" - } - } - } + "object": "core/converter/converter.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/core/converter/new-line-to-br-converter.meta b/core/converter/new-line-to-br-converter.meta index dc0212a045..7915bdc8ed 100644 --- a/core/converter/new-line-to-br-converter.meta +++ b/core/converter/new-line-to-br-converter.meta @@ -1,15 +1,6 @@ { "converter_blueprint_reference": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "Converter", - "prototypeName": "Converter", - "blueprintModule": { - "%": "core/converter/converter.meta" - } - } - } + "object": "core/converter/converter.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/core/converter/number-converter.meta b/core/converter/number-converter.meta index 9e82e7de19..7508ffc896 100644 --- a/core/converter/number-converter.meta +++ b/core/converter/number-converter.meta @@ -66,16 +66,7 @@ } }, "converter_blueprint_reference": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "Converter", - "prototypeName": "Converter", - "blueprintModule": { - "%": "core/converter/converter.meta" - } - } - } + "object": "core/converter/converter.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/core/converter/trim-converter.meta b/core/converter/trim-converter.meta index bbeaad42d4..dedafa7e90 100644 --- a/core/converter/trim-converter.meta +++ b/core/converter/trim-converter.meta @@ -1,15 +1,6 @@ { "converter_blueprint_reference": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "Converter", - "prototypeName": "Converter", - "blueprintModule": { - "%": "core/converter/converter.meta" - } - } - } + "object": "core/converter/converter.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/core/converter/upper-case-converter.meta b/core/converter/upper-case-converter.meta index 53a71e4fcc..089c454c66 100644 --- a/core/converter/upper-case-converter.meta +++ b/core/converter/upper-case-converter.meta @@ -1,15 +1,6 @@ { "converter_blueprint_reference": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "Converter", - "prototypeName": "Converter", - "blueprintModule": { - "%": "core/converter/converter.meta" - } - } - } + "object": "core/converter/converter.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/core/meta/association-blueprint.meta b/core/meta/association-blueprint.meta index d814674918..3e769ef46d 100644 --- a/core/meta/association-blueprint.meta +++ b/core/meta/association-blueprint.meta @@ -14,16 +14,7 @@ } }, "property_blueprint_reference": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "PropertyBlueprint", - "prototypeName": "PropertyBlueprint", - "blueprintModule": { - "%": "core/meta/property-blueprint.meta" - } - } - } + "object": "core/meta/property-blueprint.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/core/meta/derived-descriptor.mjson b/core/meta/derived-descriptor.mjson index da2b8c6627..1d37966f7c 100644 --- a/core/meta/derived-descriptor.mjson +++ b/core/meta/derived-descriptor.mjson @@ -48,16 +48,7 @@ } }, "property_descriptor_reference": { - "prototype": "core/meta/object-descriptor-reference", - "values": { - "valueReference": { - "objectDescriptorName": "PropertyDescriptor", - "prototypeName": "PropertyDescriptor", - "objectDescriptorModule": { - "%": "core/meta/property-descriptor.mjson" - } - } - } + "object": "core/meta/property-descriptor.mjson" }, "root": { "prototype": "core/meta/module-object-descriptor", diff --git a/core/meta/event-descriptor.mjson b/core/meta/event-descriptor.mjson index f1b84c40d8..b5bd53b6f5 100644 --- a/core/meta/event-descriptor.mjson +++ b/core/meta/event-descriptor.mjson @@ -1,15 +1,6 @@ { "owner_reference": { - "prototype": "core/meta/object-descriptor-reference", - "values": { - "valueReference": { - "objectDescriptorName": "ObjectDescriptor", - "prototypeName": "ObjectDescriptor", - "objectDescriptorModule": { - "%": "core/meta/object-descriptor.mjson" - } - } - } + "object": "core/meta/object-descriptor.mjson" }, "name": { "prototype": "core/meta/property-descriptor", diff --git a/core/meta/model.mjson b/core/meta/model.mjson index 22bce97d12..ccc387953f 100644 --- a/core/meta/model.mjson +++ b/core/meta/model.mjson @@ -1,15 +1,6 @@ { "object_descriptor_reference": { - "prototype": "core/meta/object-descriptor-reference", - "values": { - "valueReference": { - "objectDescriptorName": "ObjectDescriptor", - "prototypeName": "ObjectDescriptor", - "objectDescriptorModule": { - "%": "core/meta/object-descriptor.mjson" - } - } - } + "object": "core/meta/object-descriptor" }, "model_objectDescriptors": { "prototype": "core/meta/property-descriptor", diff --git a/core/meta/object-descriptor.mjson b/core/meta/object-descriptor.mjson index b9c9f902a5..addc79bd7b 100644 --- a/core/meta/object-descriptor.mjson +++ b/core/meta/object-descriptor.mjson @@ -1,39 +1,12 @@ { "model_reference": { - "prototype": "core/meta/model-reference", - "values": { - "valueReference": { - "objectDescriptorName": "Model", - "prototypeName": "Model", - "objectDescriptorModule": { - "%": "core/meta/model.mjson" - } - } - } + "object": "core/meta/model.mjson" }, "property_descriptor_reference": { - "prototype": "core/meta/object-descriptor-reference", - "values": { - "valueReference": { - "objectDescriptorName": "PropertyDescriptor", - "prototypeName": "PropertyDescriptor", - "objectDescriptorModule": { - "%": "core/meta/property-descriptor.mjson" - } - } - } + "object": "core/meta/property-descriptor.mjson" }, "property_validation_rules_reference": { - "prototype": "core/meta/object-descriptor-reference", - "values": { - "valueReference": { - "objectDescriptorName": "PropertyValidationRule", - "prototypeName": "PropertyValidationRule", - "objectDescriptorModule": { - "%": "core/meta/validation-rule.mjson" - } - } - } + "object": "core/meta/validation-rule.mjson" }, "name": { "prototype": "core/meta/property-descriptor", diff --git a/core/meta/property-descriptor.mjson b/core/meta/property-descriptor.mjson index f495717e71..329b506ca0 100644 --- a/core/meta/property-descriptor.mjson +++ b/core/meta/property-descriptor.mjson @@ -1,15 +1,6 @@ { "owner_reference": { - "prototype": "core/meta/object-descriptor-reference", - "values": { - "valueReference": { - "objectDescriptorName": "ObjectDescriptor", - "prototypeName": "ObjectDescriptor", - "objectDescriptorModule": { - "%": "core/meta/object-descriptor.mjson" - } - } - } + "object": "core/meta/object-descriptor.mjson" }, "property_name": { "prototype": "core/meta/property-descriptor", diff --git a/core/meta/validation-rule.mjson b/core/meta/validation-rule.mjson index eff1297052..26ab1db061 100644 --- a/core/meta/validation-rule.mjson +++ b/core/meta/validation-rule.mjson @@ -1,15 +1,6 @@ { "owner_reference": { - "prototype": "core/meta/object-descriptor-reference", - "values": { - "valueReference": { - "objectDescriptorName": "ObjectDescriptor", - "prototypeName": "ObjectDescriptor", - "objectDescriptorModule": { - "%": "core/meta/object-descriptor.mjson" - } - } - } + "object": "core/meta/object-descriptor.mjson" }, "validation_rule_object_descriptor_name": { "prototype": "core/meta/property-descriptor", diff --git a/test/spec/meta/blueprint/package/node_modules/dependency/thing.meta b/test/spec/meta/blueprint/package/node_modules/dependency/thing.meta index 77807a7141..3b15f3338c 100644 --- a/test/spec/meta/blueprint/package/node_modules/dependency/thing.meta +++ b/test/spec/meta/blueprint/package/node_modules/dependency/thing.meta @@ -1,13 +1,6 @@ { "blueprint_parent": { - "prototype": "montage/core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "Thing", - "blueprintModule": {"%": "dependency2/thing.meta"}, - "prototypeName": "Thing" - } - } + "object": "dependency2/thing.meta" }, "root": { "prototype": "montage/core/meta/module-blueprint", diff --git a/test/spec/meta/blueprint/package/thing.meta b/test/spec/meta/blueprint/package/thing.meta index 650c5de07c..663cdbdcbc 100644 --- a/test/spec/meta/blueprint/package/thing.meta +++ b/test/spec/meta/blueprint/package/thing.meta @@ -1,13 +1,6 @@ { "blueprint_parent": { - "prototype": "montage/core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "Thing", - "blueprintModule": {"%": "dependency/thing.meta"}, - "prototypeName": "Thing" - } - } + "object": "dependency/thing.meta" }, "root": { "prototype": "montage/core/meta/module-blueprint", diff --git a/test/spec/meta/controller-blueprint-test/child-controller.meta b/test/spec/meta/controller-blueprint-test/child-controller.meta index abf80f40a1..9350a5bbeb 100644 --- a/test/spec/meta/controller-blueprint-test/child-controller.meta +++ b/test/spec/meta/controller-blueprint-test/child-controller.meta @@ -16,16 +16,7 @@ } }, "blueprint_parentcontroller_reference": { - "prototype": "montage/core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "ParentController", - "prototypeName": "ParentController", - "blueprintModule": { - "%": "spec/meta/controller-blueprint-test/parent-controller.meta" - } - } - } + "object": "spec/meta/controller-blueprint-test/parent-controller.meta" }, "root": { "prototype": "montage/core/meta/module-blueprint", diff --git a/ui/base/abstract-alert.meta b/ui/base/abstract-alert.meta index 52533e6348..136e04a004 100644 --- a/ui/base/abstract-alert.meta +++ b/ui/base/abstract-alert.meta @@ -16,16 +16,7 @@ } }, "blueprint_parent": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "Component", - "prototypeName": "Component", - "blueprintModule": { - "%": "ui/component.meta" - } - } - } + "object": "ui/component.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/ui/base/abstract-button.meta b/ui/base/abstract-button.meta index a56b378e9c..af4e50777e 100644 --- a/ui/base/abstract-button.meta +++ b/ui/base/abstract-button.meta @@ -40,16 +40,7 @@ } }, "blueprint_parent": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "AbstractControl", - "prototypeName": "AbstractControl", - "blueprintModule": { - "%": "ui/base/abstract-control.meta" - } - } - } + "object": "ui/base/abstract-control.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/ui/base/abstract-checkbox.meta b/ui/base/abstract-checkbox.meta index 0ca9be1e44..9a26f0da01 100644 --- a/ui/base/abstract-checkbox.meta +++ b/ui/base/abstract-checkbox.meta @@ -40,16 +40,7 @@ } }, "blueprint_parent": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "AbstractControl", - "prototypeName": "AbstractControl", - "blueprintModule": { - "%": "ui/base/abstract-control.meta" - } - } - } + "object": "ui/base/abstract-control.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/ui/base/abstract-confirm.meta b/ui/base/abstract-confirm.meta index 654df7c1b5..a8019b4df4 100644 --- a/ui/base/abstract-confirm.meta +++ b/ui/base/abstract-confirm.meta @@ -16,16 +16,7 @@ } }, "blueprint_parent": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "AbstractAlert", - "prototypeName": "AbstractAlert", - "blueprintModule": { - "%": "ui/base/abstract-alert.meta" - } - } - } + "object": "ui/base/abstract-alert.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/ui/base/abstract-control.meta b/ui/base/abstract-control.meta index 47caca890e..84de95083d 100644 --- a/ui/base/abstract-control.meta +++ b/ui/base/abstract-control.meta @@ -12,16 +12,7 @@ } }, "blueprint_parent": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "Component", - "prototypeName": "Component", - "blueprintModule": { - "%": "ui/component.meta" - } - } - } + "object": "ui/component.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/ui/base/abstract-image.meta b/ui/base/abstract-image.meta index a9d8d9ca1e..b3a02e6534 100644 --- a/ui/base/abstract-image.meta +++ b/ui/base/abstract-image.meta @@ -46,16 +46,7 @@ } }, "blueprint_parent": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "Component", - "prototypeName": "Component", - "blueprintModule": { - "%": "ui/component.meta" - } - } - } + "object": "ui/component.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/ui/base/abstract-link.meta b/ui/base/abstract-link.meta index e0e4ab3324..2a3a0840ea 100644 --- a/ui/base/abstract-link.meta +++ b/ui/base/abstract-link.meta @@ -50,16 +50,7 @@ } }, "blueprint_parent": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "AbstractControl", - "prototypeName": "AbstractControl", - "blueprintModule": { - "%": "ui/base/abstract-control.meta" - } - } - } + "object": "ui/base/abstract-control.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/ui/base/abstract-number-field.meta b/ui/base/abstract-number-field.meta index 4fd533ddd3..fcb2d8f188 100644 --- a/ui/base/abstract-number-field.meta +++ b/ui/base/abstract-number-field.meta @@ -50,16 +50,7 @@ } }, "blueprint_parent": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "AbstractControl", - "prototypeName": "AbstractControl", - "blueprintModule": { - "%": "ui/base/abstract-control.meta" - } - } - } + "object": "ui/base/abstract-control.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/ui/base/abstract-progress-bar.meta b/ui/base/abstract-progress-bar.meta index 8230215317..db8091b31b 100644 --- a/ui/base/abstract-progress-bar.meta +++ b/ui/base/abstract-progress-bar.meta @@ -20,16 +20,7 @@ } }, "blueprint_parent": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "AbstractControl", - "prototypeName": "AbstractControl", - "blueprintModule": { - "%": "ui/base/abstract-control.meta" - } - } - } + "object": "ui/base/abstract-control.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/ui/base/abstract-radio-button.meta b/ui/base/abstract-radio-button.meta index e806e356e5..6ddb6c911f 100644 --- a/ui/base/abstract-radio-button.meta +++ b/ui/base/abstract-radio-button.meta @@ -40,16 +40,7 @@ } }, "blueprint_parent": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "AbstractControl", - "prototypeName": "AbstractControl", - "blueprintModule": { - "%": "ui/base/abstract-control.meta" - } - } - } + "object": "ui/base/abstract-control.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/ui/base/abstract-select.meta b/ui/base/abstract-select.meta index 75570c94a4..959b39b322 100644 --- a/ui/base/abstract-select.meta +++ b/ui/base/abstract-select.meta @@ -70,16 +70,7 @@ } }, "blueprint_parent": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "AbstractControl", - "prototypeName": "AbstractControl", - "blueprintModule": { - "%": "ui/base/abstract-control.meta" - } - } - } + "object": "ui/base/abstract-control.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/ui/base/abstract-slider.meta b/ui/base/abstract-slider.meta index 2fae971bf1..9a1c7ef06d 100644 --- a/ui/base/abstract-slider.meta +++ b/ui/base/abstract-slider.meta @@ -65,16 +65,7 @@ } }, "blueprint_parent": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "AbstractControl", - "prototypeName": "AbstractControl", - "blueprintModule": { - "%": "ui/base/abstract-control.meta" - } - } - } + "object": "ui/base/abstract-control.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/ui/base/abstract-text-area.meta b/ui/base/abstract-text-area.meta index 3e6f60e76f..aaac77b3d9 100644 --- a/ui/base/abstract-text-area.meta +++ b/ui/base/abstract-text-area.meta @@ -30,16 +30,7 @@ } }, "blueprint_parent": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "Component", - "prototypeName": "Component", - "blueprintModule": { - "%": "ui/component.meta" - } - } - } + "object": "ui/component.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/ui/base/abstract-text-field.meta b/ui/base/abstract-text-field.meta index 4a1409c9c9..c27c2c805a 100644 --- a/ui/base/abstract-text-field.meta +++ b/ui/base/abstract-text-field.meta @@ -30,16 +30,7 @@ } }, "blueprint_parent": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "AbstractControl", - "prototypeName": "AbstractControl", - "blueprintModule": { - "%": "ui/base/abstract-control.meta" - } - } - } + "object": "ui/base/abstract-control.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/ui/base/abstract-toggle-button.meta b/ui/base/abstract-toggle-button.meta index 07317c55a1..2827d79f9e 100644 --- a/ui/base/abstract-toggle-button.meta +++ b/ui/base/abstract-toggle-button.meta @@ -50,16 +50,7 @@ } }, "blueprint_parent": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "AbstractControl", - "prototypeName": "AbstractControl", - "blueprintModule": { - "%": "ui/base/abstract-control.meta" - } - } - } + "object": "ui/base/abstract-control.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/ui/base/abstract-toggle-switch.meta b/ui/base/abstract-toggle-switch.meta index 31a389c3b3..7e996b36e7 100644 --- a/ui/base/abstract-toggle-switch.meta +++ b/ui/base/abstract-toggle-switch.meta @@ -10,16 +10,7 @@ } }, "blueprint_parent": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "AbstractControl", - "prototypeName": "AbstractControl", - "blueprintModule": { - "%": "ui/base/abstract-control.meta" - } - } - } + "object": "ui/base/abstract-control.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/ui/base/abstract-video.meta b/ui/base/abstract-video.meta index dc9848210e..526f156663 100644 --- a/ui/base/abstract-video.meta +++ b/ui/base/abstract-video.meta @@ -65,14 +65,7 @@ } }, "blueprint_parent": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "Component", - "blueprintModuleId": "ui/component.meta", - "prototypeName": "Component" - } - } + "object": "ui/component.meta" }, "root": { "prototype": "core/meta/blueprint", diff --git a/ui/button.reel/button.meta b/ui/button.reel/button.meta index b04fd98277..861257c3fa 100644 --- a/ui/button.reel/button.meta +++ b/ui/button.reel/button.meta @@ -142,16 +142,7 @@ } }, "blueprint_control_reference": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "Control", - "prototypeName": "Control", - "blueprintModule": { - "%": "ui/control.meta" - } - } - } + "object": "ui/control.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/ui/checkbox.reel/checkbox.meta b/ui/checkbox.reel/checkbox.meta index 737eaa1d41..71e71a84bf 100644 --- a/ui/checkbox.reel/checkbox.meta +++ b/ui/checkbox.reel/checkbox.meta @@ -10,16 +10,7 @@ } }, "blueprint_parent": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "Control", - "prototypeName": "Control", - "blueprintModule": { - "%": "ui/control.meta" - } - } - } + "object": "ui/control.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/ui/condition.reel/condition.meta b/ui/condition.reel/condition.meta index c4f22082cd..4cad5f99c9 100644 --- a/ui/condition.reel/condition.meta +++ b/ui/condition.reel/condition.meta @@ -25,16 +25,7 @@ } }, "blueprint_component_reference": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "Component", - "prototypeName": "Component", - "blueprintModule": { - "%": "ui/component.meta" - } - } - } + "object": "ui/component.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/ui/control.meta b/ui/control.meta index 34faa5473d..599246772f 100644 --- a/ui/control.meta +++ b/ui/control.meta @@ -106,16 +106,7 @@ } }, "blueprint_component_reference": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "Component", - "prototypeName": "Component", - "blueprintModule": { - "%": "ui/component.meta" - } - } - } + "object": "ui/component.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/ui/flow.reel/flow.meta b/ui/flow.reel/flow.meta index 19714d085a..8b8c35dfc1 100644 --- a/ui/flow.reel/flow.meta +++ b/ui/flow.reel/flow.meta @@ -113,16 +113,7 @@ } }, "blueprint_component_reference": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "Component", - "prototypeName": "Component", - "blueprintModule": { - "%": "ui/component.meta" - } - } - } + "object": "ui/component.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/ui/label.reel/label.meta b/ui/label.reel/label.meta index 47340bfeef..e5405c38a4 100644 --- a/ui/label.reel/label.meta +++ b/ui/label.reel/label.meta @@ -23,28 +23,10 @@ } }, "component_reference": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "Component", - "prototypeName": "Component", - "blueprintModule": { - "%": "ui/component.meta" - } - } - } + "object": "ui/component.meta" }, "text_reference": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "Text", - "prototypeName": "Text", - "blueprintModule": { - "%": "ui/text.reel/text.meta" - } - } - } + "object": "ui/text.reel/text.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/ui/loader.reel/loader.meta b/ui/loader.reel/loader.meta index cb6bc59566..58d0a5f019 100644 --- a/ui/loader.reel/loader.meta +++ b/ui/loader.reel/loader.meta @@ -90,16 +90,7 @@ } }, "blueprint_component_reference": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "Component", - "prototypeName": "Component", - "blueprintModule": { - "%": "ui/component.meta" - } - } - } + "object": "ui/component.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/ui/modal-overlay.reel/modal-overlay.meta b/ui/modal-overlay.reel/modal-overlay.meta index 9dbab33504..71f68e917a 100644 --- a/ui/modal-overlay.reel/modal-overlay.meta +++ b/ui/modal-overlay.reel/modal-overlay.meta @@ -1,15 +1,6 @@ { "blueprint_component_reference": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "Overlay", - "prototypeName": "Overlay", - "blueprintModule": { - "%": "ui/overlay.reel/overlay.meta" - } - } - } + "object": "ui/overlay.reel/overlay.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/ui/overlay.reel/overlay.meta b/ui/overlay.reel/overlay.meta index 159dbcd5ea..9871483b90 100644 --- a/ui/overlay.reel/overlay.meta +++ b/ui/overlay.reel/overlay.meta @@ -40,16 +40,7 @@ } }, "blueprint_component_reference": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "Component", - "prototypeName": "Component", - "blueprintModule": { - "%": "ui/component.meta" - } - } - } + "object": "ui/component.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/ui/repetition.reel/repetition.meta b/ui/repetition.reel/repetition.meta index 27bb1170c0..2fd576c783 100644 --- a/ui/repetition.reel/repetition.meta +++ b/ui/repetition.reel/repetition.meta @@ -62,16 +62,7 @@ } }, "blueprint_component_reference": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "Component", - "prototypeName": "Component", - "blueprintModule": { - "%": "ui/component.meta" - } - } - } + "object": "ui/component.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/ui/slider.reel/slider.meta b/ui/slider.reel/slider.meta index 94003eef10..3ea030fa89 100644 --- a/ui/slider.reel/slider.meta +++ b/ui/slider.reel/slider.meta @@ -64,16 +64,7 @@ } }, "blueprint_parent": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "Control", - "prototypeName": "Control", - "blueprintModule": { - "%": "ui/control.meta" - } - } - } + "object": "ui/control.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/ui/slot.reel/slot.meta b/ui/slot.reel/slot.meta index a273ece3a6..920f2d615e 100644 --- a/ui/slot.reel/slot.meta +++ b/ui/slot.reel/slot.meta @@ -20,16 +20,7 @@ } }, "blueprint_component_reference": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "Component", - "prototypeName": "Component", - "blueprintModule": { - "%": "ui/component.meta" - } - } - } + "object": "ui/component.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/ui/substitution.reel/substitution.meta b/ui/substitution.reel/substitution.meta index 6731d09e9f..cfb8bb5aaf 100644 --- a/ui/substitution.reel/substitution.meta +++ b/ui/substitution.reel/substitution.meta @@ -29,16 +29,7 @@ } }, "blueprint_component_reference": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "Component", - "prototypeName": "Component", - "blueprintModule": { - "%": "ui/component.meta" - } - } - } + "object": "ui/component.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/ui/text-field.reel/text-field.meta b/ui/text-field.reel/text-field.meta index b766037cae..7305b0c9d7 100644 --- a/ui/text-field.reel/text-field.meta +++ b/ui/text-field.reel/text-field.meta @@ -26,16 +26,7 @@ } }, "blueprint_control_reference": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "Control", - "prototypeName": "Control", - "blueprintModule": { - "%": "ui/control.meta" - } - } - } + "object": "ui/control.meta" }, "root": { "prototype": "core/meta/module-blueprint", diff --git a/ui/text.reel/text.meta b/ui/text.reel/text.meta index cc6eee494d..62b6097451 100644 --- a/ui/text.reel/text.meta +++ b/ui/text.reel/text.meta @@ -25,28 +25,10 @@ } }, "blueprint_converter_reference": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "Converter", - "prototypeName": "Converter", - "blueprintModule": { - "%": "core/converter/converter.meta" - } - } - } + "object": "core/converter/converter.meta" }, "blueprint_component_reference": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "Component", - "prototypeName": "Component", - "blueprintModule": { - "%": "ui/component.meta" - } - } - } + "object": "ui/component.meta" }, "root": { "prototype": "core/meta/module-blueprint", From ab4bf32fddc1a24b51132d366e9b607b4640e781 Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Mon, 28 Aug 2017 14:49:48 -0400 Subject: [PATCH 14/66] Add lodash dependency --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index bcd2522149..4f48ea6c7b 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,8 @@ "htmlparser2": "~3.0.5", "jshint": "^2.9.5", "mr": "^17.0.4", - "q-io": "^1.13.3" + "q-io": "^1.13.3", + "lodash": "4.17.4" }, "devDependencies": { "concurrently": "^3.4.0", From b68a6e656a699f3eb629dd0dbfd10f724619120c Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Mon, 28 Aug 2017 17:27:43 -0400 Subject: [PATCH 15/66] Update trim converter with lodash --- core/converter/trim-converter.js | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/core/converter/trim-converter.js b/core/converter/trim-converter.js index cc4c01b099..d6914e9eba 100644 --- a/core/converter/trim-converter.js +++ b/core/converter/trim-converter.js @@ -2,23 +2,9 @@ * @module montage/core/converter/trim-converter * @requires montage/core/converter/converter */ -var Converter = require("./converter").Converter; - - -/** - * Trims a string of any leading or trailing white space. - * @memberof module:montage/core/converter# - * @function - * @param {string} str String to be trimmed. - * @returns {string} The trimmed string. - */ -var trim = exports.trim = function (str) { - // from Google Closure library - // Since IE doesn't include non-breaking-space (0xa0) in their \s character - // class (as required by section 7.2 of the ECMAScript spec), we explicitly - // include it in the regexp to enforce consistent cross-browser behavior. - return str.replace(/^[\s\xa0]+|[\s\xa0]+$/g, ''); -}; +var Converter = require("./converter").Converter, + trim = require('lodash/fp/trim'), + singleton; /** * @class TrimConverter @@ -32,7 +18,7 @@ var trim = exports.trim = function (str) { * console.log("After trim: " + trimConverter.convert(str)); * // After trim: Hello World */ -exports.TrimConverter = Converter.specialize( /** @lends TrimConverter# */ { +var TrimConverter = exports.TrimConverter = Converter.specialize( /** @lends TrimConverter# */ { _convert: { value: function (v) { @@ -64,3 +50,10 @@ exports.TrimConverter = Converter.specialize( /** @lends TrimConverter# */ { }); +Object.defineProperty(exports, 'defaultTrimConverter', { + + get: function () { + return singleton || (singleton = new TrimConverter()); + } + +}); From e55f8c166daf993c54b144b8aa512d3876edfd82 Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Mon, 28 Aug 2017 17:39:55 -0400 Subject: [PATCH 16/66] Add Default converters. - InvertConvert - LowerCaseConverter - NewLineToBrConverter - UpperCaseConverter --- core/converter/invert-converter.js | 11 ++++++++++- core/converter/lower-case-converter.js | 12 ++++++++++-- core/converter/new-line-to-br-converter.js | 12 ++++++++++-- core/converter/upper-case-converter.js | 12 ++++++++++-- 4 files changed, 40 insertions(+), 7 deletions(-) diff --git a/core/converter/invert-converter.js b/core/converter/invert-converter.js index ee4a588763..24ab5cbd4d 100644 --- a/core/converter/invert-converter.js +++ b/core/converter/invert-converter.js @@ -2,7 +2,8 @@ * @module montage/core/converter/invert-converter * @requires montage/core/converter/converter */ -var Converter = require("./converter").Converter; +var Converter = require("./converter").Converter, + singleton; /** * Inverts the value of a boolean value. @@ -23,3 +24,11 @@ var InvertConverter = exports.InvertConverter = Converter.specialize( { } } }); + +Object.defineProperty(exports, 'defaultInvertConverter', { + + get: function () { + return singleton || (singleton = new InvertConverter()); + } + +}); diff --git a/core/converter/lower-case-converter.js b/core/converter/lower-case-converter.js index edbfe1feb0..5fa1e82e04 100644 --- a/core/converter/lower-case-converter.js +++ b/core/converter/lower-case-converter.js @@ -2,13 +2,14 @@ * @module montage/core/converter/lower-case-converter * @requires montage/core/converter/converter */ -var Converter = require("./converter").Converter; +var Converter = require("./converter").Converter, + singleton; /** * @class LowerCaseConverter * @classdesc Converts a string to lowercase. */ -exports.LowerCaseConverter = Converter.specialize( /** @lends LowerCaseConverter# */{ +var LowerCaseConverter = exports.LowerCaseConverter = Converter.specialize( /** @lends LowerCaseConverter# */{ _convert: { value: function (v) { @@ -39,3 +40,10 @@ exports.LowerCaseConverter = Converter.specialize( /** @lends LowerCaseConverter }); +Object.defineProperty(exports, 'defaultLowerCaseConverter', { + + get: function () { + return singleton || (singleton = new LowerCaseConverter()); + } + +}); diff --git a/core/converter/new-line-to-br-converter.js b/core/converter/new-line-to-br-converter.js index 54b59e8a35..69ad583ccb 100644 --- a/core/converter/new-line-to-br-converter.js +++ b/core/converter/new-line-to-br-converter.js @@ -2,7 +2,8 @@ * @module montage/core/converter/new-line-to-br-converter * @requires montage/core/converter/converter */ -var Converter = require("./converter").Converter; +var Converter = require("./converter").Converter, + singleton; /** * Replaces all new line characters with a HTML <br> @@ -19,7 +20,7 @@ var newLineToBr = function (str) { * @class NewLineToBrConverter * @classdesc Converts a newline to a <br> tag. */ -exports.NewLineToBrConverter = Converter.specialize( /** @lends NewLineToBrConverter# */{ +var NewLineToBrConverter = exports.NewLineToBrConverter = Converter.specialize( /** @lends NewLineToBrConverter# */{ _convert: { value: function (v) { @@ -50,3 +51,10 @@ exports.NewLineToBrConverter = Converter.specialize( /** @lends NewLineToBrConve }); +Object.defineProperty(exports, 'defaultNewLineToBrConverter', { + + get: function () { + return singleton || (singleton = new NewLineToBrConverter()); + } + +}); diff --git a/core/converter/upper-case-converter.js b/core/converter/upper-case-converter.js index cff18e03a5..48a81dd426 100644 --- a/core/converter/upper-case-converter.js +++ b/core/converter/upper-case-converter.js @@ -2,13 +2,14 @@ * @module montage/core/converter/upper-case-converter * @requires montage/core/converter/converter */ -var Converter = require("./converter").Converter; +var Converter = require("./converter").Converter, + singleton; /** * @class UpperCaseConverter * @classdesc Converts a string to upper-case. */ -exports.UpperCaseConverter = Converter.specialize( /** @lends UpperCaseConverter# */ { +var UpperCaseConverter = exports.UpperCaseConverter = Converter.specialize( /** @lends UpperCaseConverter# */ { _convert: { value: function (v) { @@ -41,3 +42,10 @@ exports.UpperCaseConverter = Converter.specialize( /** @lends UpperCaseConverter }); +Object.defineProperty(exports, 'defaultUpperCaseConverter', { + + get: function () { + return singleton || (singleton = new UpperCaseConverter()); + } + +}); \ No newline at end of file From dab52a9a989f3c60809c29267d5523dc7e0786e6 Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Mon, 28 Aug 2017 17:47:43 -0400 Subject: [PATCH 17/66] Add CamelCaseConverter --- core/converter/camel-case-converter.js | 29 ++++++++++++++++++++ core/converter/camel-case-converter.meta | 34 ++++++++++++++++++++++++ test/spec/converter-spec.js | 18 +++++-------- 3 files changed, 70 insertions(+), 11 deletions(-) create mode 100644 core/converter/camel-case-converter.js create mode 100644 core/converter/camel-case-converter.meta diff --git a/core/converter/camel-case-converter.js b/core/converter/camel-case-converter.js new file mode 100644 index 0000000000..7aa83e9f56 --- /dev/null +++ b/core/converter/camel-case-converter.js @@ -0,0 +1,29 @@ +/** + * @module montage/core/converter/camel-case-converter + * @requires montage/core/converter/converter + */ +var Converter = require("./converter").Converter, + camelCase = require('lodash/fp/camelCase'), + singleton; + +/** + * Converts string to camel case. + * + * @class CamelCaseConverter + * @extends Converter + */ +var CamelCaseConverter = exports.CamelCaseConverter = Converter.specialize({ + convert: { + value: function (v) { + return camelCase(v); + } + } +}); + +Object.defineProperty(exports, 'defaultCamelCaseConverter', { + + get: function () { + return singleton || (singleton = new CamelCaseConverter()); + } + +}); diff --git a/core/converter/camel-case-converter.meta b/core/converter/camel-case-converter.meta new file mode 100644 index 0000000000..42da825302 --- /dev/null +++ b/core/converter/camel-case-converter.meta @@ -0,0 +1,34 @@ +{ + "converter_blueprint_reference": { + "prototype": "core/meta/blueprint-reference", + "values": { + "valueReference": { + "blueprintName": "Converter", + "prototypeName": "Converter", + "blueprintModule": { + "%": "core/converter/converter.meta" + } + } + } + }, + "root": { + "prototype": "core/meta/module-blueprint", + "values": { + "name": "CamelCaseConverter", + "customPrototype": false, + "parent": { + "@": "converter_blueprint_reference" + }, + "propertyDescriptors": [], + "propertyDescriptorGroups": {}, + "propertyValidationRules": {}, + "blueprintModule": { + "%": "core/converter/camel-case-converter.meta" + }, + "exportName": "CamelCaseConverter", + "module": { + "%": "core/converter/camel-case-converter" + } + } + } +} diff --git a/test/spec/converter-spec.js b/test/spec/converter-spec.js index cb4a8a9e79..12c221aad3 100644 --- a/test/spec/converter-spec.js +++ b/test/spec/converter-spec.js @@ -37,6 +37,7 @@ NumberConverter = require("montage/core/converter/number-converter").NumberConve BytesConverter = require("montage/core/converter/bytes-converter").BytesConverter, DateConverter = require("montage/core/converter/date-converter").DateConverter, ExpressionConverter = require("montage/core/converter/expression-converter").ExpressionConverter, +CamelCaseConverter = require("montage/core/converter/camel-case-converter").CamelCaseConverter, CurrencyConverter = require("montage/core/converter/currency-converter").CurrencyConverter; describe("converter-spec", function () { @@ -62,39 +63,34 @@ describe("converter-spec", function () { expressionConverter = new ExpressionConverter(); expressionConverter.convertExpression = "map{foo}"; expressionConverter.revertExpression = "map{{foo:this}}"; - //dateConverter.pattern = 'YYYY-MM-DD'; + + camelCaseConverter = new CamelCaseConverter(); }); describe("test string formatters", function () { it("should format a string to uppercase", function () { var value = "hello world"; - //stringConverter.fn = "uppercase"; var result = ucaseConverter.convert(value); expect(result).toBe('HELLO WORLD'); }); it("should format a string to lowercase", function () { var value = "HELLO World"; - //stringConverter.fn = "lowercase"; var result = lcaseConverter.convert(value); expect(result).toBe('hello world'); }); it("should format a string by trimming it", function () { var value = " hello world "; - //stringConverter.fn = "trim"; var result = trimConverter.convert(value); expect(result).toBe('hello world'); }); - /* - it("should format a string by converting newline characters to
", function () { - var value = " hello \r\n world "; - stringConverter.fn = "trim"; - var result = stringConverter.convert(value); - expect(result).toBe('hello
world'); + it("should format a string by trimming it", function () { + expect(camelCaseConverter.convert('hello world')).toBe('helloWorld'); + expect(camelCaseConverter.convert('HELLO WORLD*')).toBe('helloWorld'); + expect(camelCaseConverter.convert('hello-world')).toBe('helloWorld'); }); - */ }); From e611ddb8fc516f222656e40e1318e7ed37df0550 Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Mon, 28 Aug 2017 17:54:20 -0400 Subject: [PATCH 18/66] Add snakeCaseConverter --- core/converter/snake-case-converter.js | 29 ++++++++++++++++++++ core/converter/snake-case-converter.meta | 34 ++++++++++++++++++++++++ test/spec/converter-spec.js | 12 +++++++-- 3 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 core/converter/snake-case-converter.js create mode 100644 core/converter/snake-case-converter.meta diff --git a/core/converter/snake-case-converter.js b/core/converter/snake-case-converter.js new file mode 100644 index 0000000000..b997b3a67c --- /dev/null +++ b/core/converter/snake-case-converter.js @@ -0,0 +1,29 @@ +/** + * @module montage/core/converter/snake-case-converter + * @requires montage/core/converter/converter + */ +var Converter = require("./converter").Converter, + snakeCase = require('lodash/fp/snakeCase'), + singleton; + +/** + * Converts string to snake case. + * + * @class SnakeCaseConverter + * @extends Converter + */ +var SnakeCaseConverter = exports.SnakeCaseConverter = Converter.specialize({ + convert: { + value: function (v) { + return snakeCase(v); + } + } +}); + +Object.defineProperty(exports, 'defaultSnakeCaseConverter', { + + get: function () { + return singleton || (singleton = new SnakeCaseConverter()); + } + +}); diff --git a/core/converter/snake-case-converter.meta b/core/converter/snake-case-converter.meta new file mode 100644 index 0000000000..cf281aee5f --- /dev/null +++ b/core/converter/snake-case-converter.meta @@ -0,0 +1,34 @@ +{ + "converter_blueprint_reference": { + "prototype": "core/meta/blueprint-reference", + "values": { + "valueReference": { + "blueprintName": "Converter", + "prototypeName": "Converter", + "blueprintModule": { + "%": "core/converter/converter.meta" + } + } + } + }, + "root": { + "prototype": "core/meta/module-blueprint", + "values": { + "name": "SnakeCaseConverter", + "customPrototype": false, + "parent": { + "@": "converter_blueprint_reference" + }, + "propertyDescriptors": [], + "propertyDescriptorGroups": {}, + "propertyValidationRules": {}, + "blueprintModule": { + "%": "core/converter/snake-case-converter.meta" + }, + "exportName": "SnakeCaseConverter", + "module": { + "%": "core/converter/snake-case-converter" + } + } + } +} diff --git a/test/spec/converter-spec.js b/test/spec/converter-spec.js index 12c221aad3..479eb095eb 100644 --- a/test/spec/converter-spec.js +++ b/test/spec/converter-spec.js @@ -38,6 +38,7 @@ BytesConverter = require("montage/core/converter/bytes-converter").BytesConverte DateConverter = require("montage/core/converter/date-converter").DateConverter, ExpressionConverter = require("montage/core/converter/expression-converter").ExpressionConverter, CamelCaseConverter = require("montage/core/converter/camel-case-converter").CamelCaseConverter, +SnakeCaseConverter = require("montage/core/converter/snake-case-converter").SnakeCaseConverter, CurrencyConverter = require("montage/core/converter/currency-converter").CurrencyConverter; describe("converter-spec", function () { @@ -65,6 +66,7 @@ describe("converter-spec", function () { expressionConverter.revertExpression = "map{{foo:this}}"; camelCaseConverter = new CamelCaseConverter(); + snakeCaseConverter = new SnakeCaseConverter(); }); describe("test string formatters", function () { @@ -86,12 +88,18 @@ describe("converter-spec", function () { expect(result).toBe('hello world'); }); - it("should format a string by trimming it", function () { + it("should converts string to camel case", function () { expect(camelCaseConverter.convert('hello world')).toBe('helloWorld'); - expect(camelCaseConverter.convert('HELLO WORLD*')).toBe('helloWorld'); + expect(camelCaseConverter.convert('HELLO WORLD')).toBe('helloWorld'); expect(camelCaseConverter.convert('hello-world')).toBe('helloWorld'); }); + it("should converts string to snake case", function () { + expect(snakeCaseConverter.convert('hello world')).toBe('hello_world'); + expect(snakeCaseConverter.convert('HELLO WORLD')).toBe('hello_world'); + expect(snakeCaseConverter.convert('hello-world')).toBe('hello_world'); + }); + }); describe("Test Number to String formatters", function () { From a11e00e1a3e50e1f4773da6ea3a9ca449e9d7d9c Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Mon, 28 Aug 2017 17:57:16 -0400 Subject: [PATCH 19/66] Add KebabCaseConverter --- core/converter/kebab-case-converter.js | 29 ++++++++++++++++++++ core/converter/kebab-case-converter.meta | 34 ++++++++++++++++++++++++ test/spec/converter-spec.js | 8 ++++++ 3 files changed, 71 insertions(+) create mode 100644 core/converter/kebab-case-converter.js create mode 100644 core/converter/kebab-case-converter.meta diff --git a/core/converter/kebab-case-converter.js b/core/converter/kebab-case-converter.js new file mode 100644 index 0000000000..3e2ef3c918 --- /dev/null +++ b/core/converter/kebab-case-converter.js @@ -0,0 +1,29 @@ +/** + * @module montage/core/converter/kebab-case-converter + * @requires montage/core/converter/converter + */ +var Converter = require("./converter").Converter, + kebabCase = require('lodash/fp/kebabCase'), + singleton; + +/** + * Converts string to kebab case. + * + * @class KebabCaseConverter + * @extends Converter + */ +var KebabCaseConverter = exports.KebabCaseConverter = Converter.specialize({ + convert: { + value: function (v) { + return kebabCase(v); + } + } +}); + +Object.defineProperty(exports, 'defaultKebabCaseConverter', { + + get: function () { + return singleton || (singleton = new KebabCaseConverter()); + } + +}); diff --git a/core/converter/kebab-case-converter.meta b/core/converter/kebab-case-converter.meta new file mode 100644 index 0000000000..d97af9e2e9 --- /dev/null +++ b/core/converter/kebab-case-converter.meta @@ -0,0 +1,34 @@ +{ + "converter_blueprint_reference": { + "prototype": "core/meta/blueprint-reference", + "values": { + "valueReference": { + "blueprintName": "Converter", + "prototypeName": "Converter", + "blueprintModule": { + "%": "core/converter/converter.meta" + } + } + } + }, + "root": { + "prototype": "core/meta/module-blueprint", + "values": { + "name": "KebabCaseConverter", + "customPrototype": false, + "parent": { + "@": "converter_blueprint_reference" + }, + "propertyDescriptors": [], + "propertyDescriptorGroups": {}, + "propertyValidationRules": {}, + "blueprintModule": { + "%": "core/converter/kebab-case-converter.meta" + }, + "exportName": "KebabCaseConverter", + "module": { + "%": "core/converter/kebab-case-converter" + } + } + } +} diff --git a/test/spec/converter-spec.js b/test/spec/converter-spec.js index 479eb095eb..cf42df65e8 100644 --- a/test/spec/converter-spec.js +++ b/test/spec/converter-spec.js @@ -39,6 +39,7 @@ DateConverter = require("montage/core/converter/date-converter").DateConverter, ExpressionConverter = require("montage/core/converter/expression-converter").ExpressionConverter, CamelCaseConverter = require("montage/core/converter/camel-case-converter").CamelCaseConverter, SnakeCaseConverter = require("montage/core/converter/snake-case-converter").SnakeCaseConverter, +KebabCaseConverter = require("montage/core/converter/kebab-case-converter").KebabCaseConverter, CurrencyConverter = require("montage/core/converter/currency-converter").CurrencyConverter; describe("converter-spec", function () { @@ -67,6 +68,7 @@ describe("converter-spec", function () { camelCaseConverter = new CamelCaseConverter(); snakeCaseConverter = new SnakeCaseConverter(); + kebabCaseConverter = new KebabCaseConverter(); }); describe("test string formatters", function () { @@ -100,6 +102,12 @@ describe("converter-spec", function () { expect(snakeCaseConverter.convert('hello-world')).toBe('hello_world'); }); + it("should converts string to kebab case", function () { + expect(kebabCaseConverter.convert('hello world')).toBe('hello-world'); + expect(kebabCaseConverter.convert('HELLO WORLD')).toBe('hello-world'); + expect(kebabCaseConverter.convert('hello_world')).toBe('hello-world'); + }); + }); describe("Test Number to String formatters", function () { From 0d13e9ac06bfabcd88ee2e61a257690b33926f26 Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Tue, 29 Aug 2017 14:42:25 -0400 Subject: [PATCH 20/66] Move singleton logic to converter constructors. --- core/converter/camel-case-converter.js | 21 ++++++++++++--------- core/converter/invert-converter.js | 21 ++++++++++++--------- core/converter/kebab-case-converter.js | 21 ++++++++++++--------- core/converter/lower-case-converter.js | 20 +++++++++++--------- core/converter/new-line-to-br-converter.js | 20 +++++++++++--------- core/converter/snake-case-converter.js | 21 ++++++++++++--------- core/converter/trim-converter.js | 20 +++++++++++--------- core/converter/upper-case-converter.js | 20 +++++++++++--------- test/spec/converter-spec.js | 18 +++++++++++++++++- 9 files changed, 109 insertions(+), 73 deletions(-) diff --git a/core/converter/camel-case-converter.js b/core/converter/camel-case-converter.js index 7aa83e9f56..74b5f6952a 100644 --- a/core/converter/camel-case-converter.js +++ b/core/converter/camel-case-converter.js @@ -12,18 +12,21 @@ var Converter = require("./converter").Converter, * @class CamelCaseConverter * @extends Converter */ -var CamelCaseConverter = exports.CamelCaseConverter = Converter.specialize({ +exports.CamelCaseConverter = Converter.specialize({ + + constructor: { + value: function () { + if (!singleton) { + singleton = this; + } + + return singleton; + } + }, + convert: { value: function (v) { return camelCase(v); } } }); - -Object.defineProperty(exports, 'defaultCamelCaseConverter', { - - get: function () { - return singleton || (singleton = new CamelCaseConverter()); - } - -}); diff --git a/core/converter/invert-converter.js b/core/converter/invert-converter.js index 24ab5cbd4d..7aacc1e628 100644 --- a/core/converter/invert-converter.js +++ b/core/converter/invert-converter.js @@ -11,7 +11,18 @@ var Converter = require("./converter").Converter, * @class InvertConverter * @extends Converter */ -var InvertConverter = exports.InvertConverter = Converter.specialize( { +exports.InvertConverter = Converter.specialize({ + + constructor: { + value: function () { + if (!singleton) { + singleton = this; + } + + return singleton; + } + }, + convert: { value: function (v) { return !v; @@ -24,11 +35,3 @@ var InvertConverter = exports.InvertConverter = Converter.specialize( { } } }); - -Object.defineProperty(exports, 'defaultInvertConverter', { - - get: function () { - return singleton || (singleton = new InvertConverter()); - } - -}); diff --git a/core/converter/kebab-case-converter.js b/core/converter/kebab-case-converter.js index 3e2ef3c918..db1d1162af 100644 --- a/core/converter/kebab-case-converter.js +++ b/core/converter/kebab-case-converter.js @@ -12,18 +12,21 @@ var Converter = require("./converter").Converter, * @class KebabCaseConverter * @extends Converter */ -var KebabCaseConverter = exports.KebabCaseConverter = Converter.specialize({ +exports.KebabCaseConverter = Converter.specialize({ + + constructor: { + value: function () { + if (!singleton) { + singleton = this; + } + + return singleton; + } + }, + convert: { value: function (v) { return kebabCase(v); } } }); - -Object.defineProperty(exports, 'defaultKebabCaseConverter', { - - get: function () { - return singleton || (singleton = new KebabCaseConverter()); - } - -}); diff --git a/core/converter/lower-case-converter.js b/core/converter/lower-case-converter.js index 5fa1e82e04..f94b88c46c 100644 --- a/core/converter/lower-case-converter.js +++ b/core/converter/lower-case-converter.js @@ -9,7 +9,17 @@ var Converter = require("./converter").Converter, * @class LowerCaseConverter * @classdesc Converts a string to lowercase. */ -var LowerCaseConverter = exports.LowerCaseConverter = Converter.specialize( /** @lends LowerCaseConverter# */{ +exports.LowerCaseConverter = Converter.specialize( /** @lends LowerCaseConverter# */{ + + constructor: { + value: function () { + if (!singleton) { + singleton = this; + } + + return singleton; + } + }, _convert: { value: function (v) { @@ -39,11 +49,3 @@ var LowerCaseConverter = exports.LowerCaseConverter = Converter.specialize( /** }} }); - -Object.defineProperty(exports, 'defaultLowerCaseConverter', { - - get: function () { - return singleton || (singleton = new LowerCaseConverter()); - } - -}); diff --git a/core/converter/new-line-to-br-converter.js b/core/converter/new-line-to-br-converter.js index 69ad583ccb..12e8d82511 100644 --- a/core/converter/new-line-to-br-converter.js +++ b/core/converter/new-line-to-br-converter.js @@ -20,7 +20,17 @@ var newLineToBr = function (str) { * @class NewLineToBrConverter * @classdesc Converts a newline to a <br> tag. */ -var NewLineToBrConverter = exports.NewLineToBrConverter = Converter.specialize( /** @lends NewLineToBrConverter# */{ +exports.NewLineToBrConverter = Converter.specialize( /** @lends NewLineToBrConverter# */{ + + constructor: { + value: function () { + if (!singleton) { + singleton = this; + } + + return singleton; + } + }, _convert: { value: function (v) { @@ -50,11 +60,3 @@ var NewLineToBrConverter = exports.NewLineToBrConverter = Converter.specialize( }} }); - -Object.defineProperty(exports, 'defaultNewLineToBrConverter', { - - get: function () { - return singleton || (singleton = new NewLineToBrConverter()); - } - -}); diff --git a/core/converter/snake-case-converter.js b/core/converter/snake-case-converter.js index b997b3a67c..1aa35e3df7 100644 --- a/core/converter/snake-case-converter.js +++ b/core/converter/snake-case-converter.js @@ -12,18 +12,21 @@ var Converter = require("./converter").Converter, * @class SnakeCaseConverter * @extends Converter */ -var SnakeCaseConverter = exports.SnakeCaseConverter = Converter.specialize({ +exports.SnakeCaseConverter = Converter.specialize({ + + constructor: { + value: function () { + if (!singleton) { + singleton = this; + } + + return singleton; + } + }, + convert: { value: function (v) { return snakeCase(v); } } }); - -Object.defineProperty(exports, 'defaultSnakeCaseConverter', { - - get: function () { - return singleton || (singleton = new SnakeCaseConverter()); - } - -}); diff --git a/core/converter/trim-converter.js b/core/converter/trim-converter.js index d6914e9eba..7a359c71a0 100644 --- a/core/converter/trim-converter.js +++ b/core/converter/trim-converter.js @@ -18,7 +18,17 @@ var Converter = require("./converter").Converter, * console.log("After trim: " + trimConverter.convert(str)); * // After trim: Hello World */ -var TrimConverter = exports.TrimConverter = Converter.specialize( /** @lends TrimConverter# */ { +exports.TrimConverter = Converter.specialize( /** @lends TrimConverter# */ { + + constructor: { + value: function () { + if (!singleton) { + singleton = this; + } + + return singleton; + } + }, _convert: { value: function (v) { @@ -49,11 +59,3 @@ var TrimConverter = exports.TrimConverter = Converter.specialize( /** @lends Tri }} }); - -Object.defineProperty(exports, 'defaultTrimConverter', { - - get: function () { - return singleton || (singleton = new TrimConverter()); - } - -}); diff --git a/core/converter/upper-case-converter.js b/core/converter/upper-case-converter.js index 48a81dd426..a79a8cd84e 100644 --- a/core/converter/upper-case-converter.js +++ b/core/converter/upper-case-converter.js @@ -9,7 +9,17 @@ var Converter = require("./converter").Converter, * @class UpperCaseConverter * @classdesc Converts a string to upper-case. */ -var UpperCaseConverter = exports.UpperCaseConverter = Converter.specialize( /** @lends UpperCaseConverter# */ { +exports.UpperCaseConverter = Converter.specialize( /** @lends UpperCaseConverter# */ { + + constructor: { + value: function () { + if (!singleton) { + singleton = this; + } + + return singleton; + } + }, _convert: { value: function (v) { @@ -41,11 +51,3 @@ var UpperCaseConverter = exports.UpperCaseConverter = Converter.specialize( /** }} }); - -Object.defineProperty(exports, 'defaultUpperCaseConverter', { - - get: function () { - return singleton || (singleton = new UpperCaseConverter()); - } - -}); \ No newline at end of file diff --git a/test/spec/converter-spec.js b/test/spec/converter-spec.js index cf42df65e8..ef1d64a274 100644 --- a/test/spec/converter-spec.js +++ b/test/spec/converter-spec.js @@ -35,6 +35,7 @@ LowerCaseConverter = require("montage/core/converter/lower-case-converter").Lowe TrimConverter = require("montage/core/converter/trim-converter").TrimConverter, NumberConverter = require("montage/core/converter/number-converter").NumberConverter, BytesConverter = require("montage/core/converter/bytes-converter").BytesConverter, +InvertConverter = require("montage/core/converter/invert-converter").InvertConverter, DateConverter = require("montage/core/converter/date-converter").DateConverter, ExpressionConverter = require("montage/core/converter/expression-converter").ExpressionConverter, CamelCaseConverter = require("montage/core/converter/camel-case-converter").CamelCaseConverter, @@ -53,7 +54,7 @@ describe("converter-spec", function () { ucaseConverter = new UpperCaseConverter(); lcaseConverter = new LowerCaseConverter(); trimConverter = new TrimConverter(); - + invertConverter = new InvertConverter(); numberConverter = new NumberConverter(); numberConverter.shorten = true; bytesConverter = new BytesConverter(); @@ -90,6 +91,11 @@ describe("converter-spec", function () { expect(result).toBe('hello world'); }); + it("should inverts value", function () { + expect(invertConverter.convert(true)).toBe(false); + expect(invertConverter.convert(0)).toBe(true); + }); + it("should converts string to camel case", function () { expect(camelCaseConverter.convert('hello world')).toBe('helloWorld'); expect(camelCaseConverter.convert('HELLO WORLD')).toBe('helloWorld'); @@ -108,6 +114,16 @@ describe("converter-spec", function () { expect(kebabCaseConverter.convert('hello_world')).toBe('hello-world'); }); + it("should be a singleton", function () { + expect(invertConverter === new InvertConverter()).toBe(true); + expect(ucaseConverter === new UpperCaseConverter()).toBe(true); + expect(trimConverter === new TrimConverter()).toBe(true); + expect(lcaseConverter === new LowerCaseConverter()).toBe(true); + expect(kebabCaseConverter === new KebabCaseConverter()).toBe(true); + expect(snakeCaseConverter === new SnakeCaseConverter()).toBe(true); + expect(camelCaseConverter === new CamelCaseConverter()).toBe(true); + }); + }); describe("Test Number to String formatters", function () { From 91f111c9f3d1282c42d1256f70831407e34257a4 Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Tue, 29 Aug 2017 15:48:46 -0400 Subject: [PATCH 21/66] =?UTF-8?q?Replace=20converter=E2=80=99s=20blueprint?= =?UTF-8?q?s=20by=20object=20descriptors.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...s-converter.meta => bytes-converter.mjson} | 16 ++++---- core/converter/camel-case-converter.meta | 34 ----------------- core/converter/camel-case-converter.mjson | 25 ++++++++++++ .../{converter.meta => converter.mjson} | 10 ++--- ...onverter.meta => currency-converter.mjson} | 20 +++++----- ...te-converter.meta => date-converter.mjson} | 20 +++++----- ...verter.meta => expression-converter.mjson} | 8 ++-- ...-converter.meta => invert-converter.mjson} | 12 +++--- core/converter/kebab-case-converter.meta | 34 ----------------- core/converter/kebab-case-converter.mjson | 25 ++++++++++++ ...verter.meta => lower-case-converter.mjson} | 12 +++--- ...er.meta => new-line-to-br-converter.mjson} | 12 +++--- ...-converter.meta => number-converter.mjson} | 38 +++++++++---------- core/converter/snake-case-converter.meta | 34 ----------------- core/converter/snake-case-converter.mjson | 25 ++++++++++++ ...im-converter.meta => trim-converter.mjson} | 14 +++---- ...verter.meta => upper-case-converter.mjson} | 12 +++--- 17 files changed, 162 insertions(+), 189 deletions(-) rename core/converter/{bytes-converter.meta => bytes-converter.mjson} (70%) delete mode 100644 core/converter/camel-case-converter.meta create mode 100644 core/converter/camel-case-converter.mjson rename core/converter/{converter.meta => converter.mjson} (79%) rename core/converter/{currency-converter.meta => currency-converter.mjson} (73%) rename core/converter/{date-converter.meta => date-converter.mjson} (73%) rename core/converter/{expression-converter.meta => expression-converter.mjson} (85%) rename core/converter/{invert-converter.meta => invert-converter.mjson} (59%) delete mode 100644 core/converter/kebab-case-converter.meta create mode 100644 core/converter/kebab-case-converter.mjson rename core/converter/{lower-case-converter.meta => lower-case-converter.mjson} (60%) rename core/converter/{new-line-to-br-converter.meta => new-line-to-br-converter.mjson} (60%) rename core/converter/{number-converter.meta => number-converter.mjson} (76%) delete mode 100644 core/converter/snake-case-converter.meta create mode 100644 core/converter/snake-case-converter.mjson rename core/converter/{trim-converter.meta => trim-converter.mjson} (53%) rename core/converter/{upper-case-converter.meta => upper-case-converter.mjson} (60%) diff --git a/core/converter/bytes-converter.meta b/core/converter/bytes-converter.mjson similarity index 70% rename from core/converter/bytes-converter.meta rename to core/converter/bytes-converter.mjson index 1b0741e603..be6667b888 100644 --- a/core/converter/bytes-converter.meta +++ b/core/converter/bytes-converter.mjson @@ -1,25 +1,25 @@ { "bytesConverter_decimals": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "decimals", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "number", "helpKey": "" } }, - "converter_blueprint_reference": { - "object": "core/converter/converter.meta" + "converter_descriptor_reference": { + "object": "core/converter/converter.mjson" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "BytesConverter", "customPrototype": false, "parent": { - "@": "converter_blueprint_reference" + "@": "converter_descriptor_reference" }, "propertyDescriptors": [ { @@ -34,8 +34,8 @@ ] }, "propertyValidationRules": {}, - "blueprintModule": { - "%": "core/converter/bytes-converter.meta" + "objectDescriptorModule": { + "%": "core/converter/bytes-converter.mjson" }, "exportName": "BytesConverter", "module": { diff --git a/core/converter/camel-case-converter.meta b/core/converter/camel-case-converter.meta deleted file mode 100644 index 42da825302..0000000000 --- a/core/converter/camel-case-converter.meta +++ /dev/null @@ -1,34 +0,0 @@ -{ - "converter_blueprint_reference": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "Converter", - "prototypeName": "Converter", - "blueprintModule": { - "%": "core/converter/converter.meta" - } - } - } - }, - "root": { - "prototype": "core/meta/module-blueprint", - "values": { - "name": "CamelCaseConverter", - "customPrototype": false, - "parent": { - "@": "converter_blueprint_reference" - }, - "propertyDescriptors": [], - "propertyDescriptorGroups": {}, - "propertyValidationRules": {}, - "blueprintModule": { - "%": "core/converter/camel-case-converter.meta" - }, - "exportName": "CamelCaseConverter", - "module": { - "%": "core/converter/camel-case-converter" - } - } - } -} diff --git a/core/converter/camel-case-converter.mjson b/core/converter/camel-case-converter.mjson new file mode 100644 index 0000000000..8070be998e --- /dev/null +++ b/core/converter/camel-case-converter.mjson @@ -0,0 +1,25 @@ +{ + "converter_descriptor_reference": { + "object": "core/converter/converter.mjson" + }, + "root": { + "prototype": "core/meta/module-object-descriptor", + "values": { + "name": "CamelCaseConverter", + "customPrototype": false, + "parent": { + "@": "converter_descriptor_reference" + }, + "propertyDescriptors": [], + "propertyDescriptorGroups": {}, + "propertyValidationRules": {}, + "objectDescriptorModule": { + "%": "core/converter/camel-case-converter.mjson" + }, + "exportName": "CamelCaseConverter", + "module": { + "%": "core/converter/camel-case-converter" + } + } + } +} diff --git a/core/converter/converter.meta b/core/converter/converter.mjson similarity index 79% rename from core/converter/converter.meta rename to core/converter/converter.mjson index b4e3c34f60..b094991011 100644 --- a/core/converter/converter.meta +++ b/core/converter/converter.mjson @@ -1,9 +1,9 @@ { "converter_allowPartialConversion": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "allowPartialConversion", - "blueprint": { + "objectDescriptor": { "@": "root" }, "readOnly": true, @@ -12,7 +12,7 @@ } }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "Converter", "customPrototype": false, @@ -29,8 +29,8 @@ ] }, "propertyValidationRules": {}, - "blueprintModule": { - "%": "core/converter/converter.meta" + "objectDescriptorModule": { + "%": "core/converter/converter.mjson" }, "exportName": "Converter", "module": { diff --git a/core/converter/currency-converter.meta b/core/converter/currency-converter.mjson similarity index 73% rename from core/converter/currency-converter.meta rename to core/converter/currency-converter.mjson index fd5d57d8a6..49aad91b42 100644 --- a/core/converter/currency-converter.meta +++ b/core/converter/currency-converter.mjson @@ -1,23 +1,23 @@ { "currenyConverter_currency": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "currency", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "string", "helpKey": "" } }, - "number_converter_blueprint_reference": { - "object": "core/converter/number-converter.meta" + "number_converter_descriptor_reference": { + "object": "core/converter/number-converter.mjson" }, "currencyConverter_showCurrencyBeforeNumber": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "showCurrencyBeforeNumber", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "boolean", @@ -25,12 +25,12 @@ } }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "CurrencyConverter", "customPrototype": false, "parent": { - "@": "number_converter_blueprint_reference" + "@": "number_converter_descriptor_reference" }, "propertyDescriptors": [ { @@ -51,8 +51,8 @@ ] }, "propertyValidationRules": {}, - "blueprintModule": { - "%": "core/converter/currency-converter.meta" + "objectDescriptorModule": { + "%": "core/converter/currency-converter.mjson" }, "exportName": "CurrencyConverter", "module": { diff --git a/core/converter/date-converter.meta b/core/converter/date-converter.mjson similarity index 73% rename from core/converter/date-converter.meta rename to core/converter/date-converter.mjson index a3b23de88a..6986592318 100644 --- a/core/converter/date-converter.meta +++ b/core/converter/date-converter.mjson @@ -1,9 +1,9 @@ { "dateConverter_validator": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "validator", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "object", @@ -11,26 +11,26 @@ } }, "dateConverter_pattern": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "pattern", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "string", "helpKey": "" } }, - "converter_blueprint_reference": { - "object": "core/converter/converter.meta" + "converter_descriptor_reference": { + "object": "core/converter/converter.mjson" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "DateConverter", "customPrototype": false, "parent": { - "@": "converter_blueprint_reference" + "@": "converter_descriptor_reference" }, "propertyDescriptors": [ { @@ -51,8 +51,8 @@ ] }, "propertyValidationRules": {}, - "blueprintModule": { - "%": "core/converter/date-converter.meta" + "objectDescriptorModule": { + "%": "core/converter/date-converter.mjson" }, "exportName": "DateConverter", "module": { diff --git a/core/converter/expression-converter.meta b/core/converter/expression-converter.mjson similarity index 85% rename from core/converter/expression-converter.meta rename to core/converter/expression-converter.mjson index bc155b8215..5a93fdd039 100644 --- a/core/converter/expression-converter.meta +++ b/core/converter/expression-converter.mjson @@ -1,6 +1,6 @@ { - "converter_object-descriptor_reference": { - "object": "core/converter/converter.meta" + "converter_descriptor_reference": { + "object": "core/converter/converter.mjson" }, "convertExpression": { "prototype": "core/meta/property-descriptor", @@ -30,7 +30,7 @@ "name": "ExpressionConverter", "customPrototype": false, "parent": { - "@": "converter_object-descriptor_reference" + "@": "converter_descriptor_reference" }, "propertyDescriptors": [ { @@ -43,7 +43,7 @@ "propertyDescriptorGroups": {}, "propertyValidationRules": {}, "objectDescriptorModule": { - "%": "core/converter/expression-converter.meta" + "%": "core/converter/expression-converter.mjson" }, "exportName": "ExpressionConverter", "module": { diff --git a/core/converter/invert-converter.meta b/core/converter/invert-converter.mjson similarity index 59% rename from core/converter/invert-converter.meta rename to core/converter/invert-converter.mjson index 391028a731..bedb1813c7 100644 --- a/core/converter/invert-converter.meta +++ b/core/converter/invert-converter.mjson @@ -1,20 +1,20 @@ { - "converter_blueprint_reference": { - "object": "core/converter/converter.meta" + "converter_descriptor_reference": { + "object": "core/converter/converter.mjson" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "InvertConverter", "customPrototype": false, "parent": { - "@": "converter_blueprint_reference" + "@": "converter_descriptor_reference" }, "propertyDescriptors": [], "propertyDescriptorGroups": {}, "propertyValidationRules": {}, - "blueprintModule": { - "%": "core/converter/inverter-converter.meta" + "objectDescriptorModule": { + "%": "core/converter/inverter-converter.mjson" }, "exportName": "InvertConverter", "module": { diff --git a/core/converter/kebab-case-converter.meta b/core/converter/kebab-case-converter.meta deleted file mode 100644 index d97af9e2e9..0000000000 --- a/core/converter/kebab-case-converter.meta +++ /dev/null @@ -1,34 +0,0 @@ -{ - "converter_blueprint_reference": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "Converter", - "prototypeName": "Converter", - "blueprintModule": { - "%": "core/converter/converter.meta" - } - } - } - }, - "root": { - "prototype": "core/meta/module-blueprint", - "values": { - "name": "KebabCaseConverter", - "customPrototype": false, - "parent": { - "@": "converter_blueprint_reference" - }, - "propertyDescriptors": [], - "propertyDescriptorGroups": {}, - "propertyValidationRules": {}, - "blueprintModule": { - "%": "core/converter/kebab-case-converter.meta" - }, - "exportName": "KebabCaseConverter", - "module": { - "%": "core/converter/kebab-case-converter" - } - } - } -} diff --git a/core/converter/kebab-case-converter.mjson b/core/converter/kebab-case-converter.mjson new file mode 100644 index 0000000000..6a11ab99cc --- /dev/null +++ b/core/converter/kebab-case-converter.mjson @@ -0,0 +1,25 @@ +{ + "converter_descriptor_reference": { + "object": "core/converter/converter.mjson" + }, + "root": { + "prototype": "core/meta/module-object-descriptor", + "values": { + "name": "KebabCaseConverter", + "customPrototype": false, + "parent": { + "@": "converter_descriptor_reference" + }, + "propertyDescriptors": [], + "propertyDescriptorGroups": {}, + "propertyValidationRules": {}, + "objectDescriptorModule": { + "%": "core/converter/kebab-case-converter.mjson" + }, + "exportName": "KebabCaseConverter", + "module": { + "%": "core/converter/kebab-case-converter" + } + } + } +} diff --git a/core/converter/lower-case-converter.meta b/core/converter/lower-case-converter.mjson similarity index 60% rename from core/converter/lower-case-converter.meta rename to core/converter/lower-case-converter.mjson index 77738da0a4..45580d0a09 100644 --- a/core/converter/lower-case-converter.meta +++ b/core/converter/lower-case-converter.mjson @@ -1,20 +1,20 @@ { - "converter_blueprint_reference": { - "object": "core/converter/converter.meta" + "converter_descriptor_reference": { + "object": "core/converter/converter.mjson" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "LowerCaseConverter", "customPrototype": false, "parent": { - "@": "converter_blueprint_reference" + "@": "converter_descriptor_reference" }, "propertyDescriptors": [], "propertyDescriptorGroups": {}, "propertyValidationRules": {}, - "blueprintModule": { - "%": "core/converter/lower-case-converter.meta" + "objectDescriptorModule": { + "%": "core/converter/lower-case-converter.mjson" }, "exportName": "LowerCaseConverter", "module": { diff --git a/core/converter/new-line-to-br-converter.meta b/core/converter/new-line-to-br-converter.mjson similarity index 60% rename from core/converter/new-line-to-br-converter.meta rename to core/converter/new-line-to-br-converter.mjson index 7915bdc8ed..67e7240ae4 100644 --- a/core/converter/new-line-to-br-converter.meta +++ b/core/converter/new-line-to-br-converter.mjson @@ -1,20 +1,20 @@ { - "converter_blueprint_reference": { - "object": "core/converter/converter.meta" + "converter_descriptor_reference": { + "object": "core/converter/converter.mjson" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "NewLineToBrConverter", "customPrototype": false, "parent": { - "@": "converter_blueprint_reference" + "@": "converter_descriptor_reference" }, "propertyDescriptors": [], "propertyDescriptorGroups": {}, "propertyValidationRules": {}, - "blueprintModule": { - "%": "core/converter/new-line-to-br-converter.meta" + "objectDescriptorModule": { + "%": "core/converter/new-line-to-br-converter.mjson" }, "exportName": "NewLineToBrConverter", "module": { diff --git a/core/converter/number-converter.meta b/core/converter/number-converter.mjson similarity index 76% rename from core/converter/number-converter.meta rename to core/converter/number-converter.mjson index 7508ffc896..6dee16217e 100644 --- a/core/converter/number-converter.meta +++ b/core/converter/number-converter.mjson @@ -1,9 +1,9 @@ { "numberConverter_shorten": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "shorten", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "boolean", @@ -11,10 +11,10 @@ } }, "numberConverter_decimals": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "decimals", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "number", @@ -22,10 +22,10 @@ } }, "numberConverter_round": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "round", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "boolean", @@ -33,10 +33,10 @@ } }, "numberConverter_forceDecimals": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "forceDecimals", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "boolean", @@ -44,10 +44,10 @@ } }, "numberConverter_allowFloat": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "allowFloat", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "boolean", @@ -55,26 +55,26 @@ } }, "numberConverter_allowNegative": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "allowNegative", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "boolean", "helpKey": "" } }, - "converter_blueprint_reference": { - "object": "core/converter/converter.meta" + "converter_descriptor_reference": { + "object": "core/converter/converter.mjson" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "NumberConverter", "customPrototype": false, "parent": { - "@": "converter_blueprint_reference" + "@": "converter_descriptor_reference" }, "propertyDescriptors": [ { @@ -96,7 +96,7 @@ "@": "numberConverter_allowNegative" } ], - "propertyBlueprintGroups": { + "propertyDescriptorGroups": { "numberConverter": [ { "@": "numberConverter_shorten" @@ -119,8 +119,8 @@ ] }, "propertyValidationRules": {}, - "blueprintModule": { - "%": "core/converter/number-converter.meta" + "objectDescriptorModule": { + "%": "core/converter/number-converter.mjson" }, "exportName": "NumberConverter", "module": { diff --git a/core/converter/snake-case-converter.meta b/core/converter/snake-case-converter.meta deleted file mode 100644 index cf281aee5f..0000000000 --- a/core/converter/snake-case-converter.meta +++ /dev/null @@ -1,34 +0,0 @@ -{ - "converter_blueprint_reference": { - "prototype": "core/meta/blueprint-reference", - "values": { - "valueReference": { - "blueprintName": "Converter", - "prototypeName": "Converter", - "blueprintModule": { - "%": "core/converter/converter.meta" - } - } - } - }, - "root": { - "prototype": "core/meta/module-blueprint", - "values": { - "name": "SnakeCaseConverter", - "customPrototype": false, - "parent": { - "@": "converter_blueprint_reference" - }, - "propertyDescriptors": [], - "propertyDescriptorGroups": {}, - "propertyValidationRules": {}, - "blueprintModule": { - "%": "core/converter/snake-case-converter.meta" - }, - "exportName": "SnakeCaseConverter", - "module": { - "%": "core/converter/snake-case-converter" - } - } - } -} diff --git a/core/converter/snake-case-converter.mjson b/core/converter/snake-case-converter.mjson new file mode 100644 index 0000000000..5849dccb7a --- /dev/null +++ b/core/converter/snake-case-converter.mjson @@ -0,0 +1,25 @@ +{ + "converter_descriptor_reference": { + "object": "core/converter/converter.mjson" + }, + "root": { + "prototype": "core/meta/module-object-descriptor", + "values": { + "name": "SnakeCaseConverter", + "customPrototype": false, + "parent": { + "@": "converter_descriptor_reference" + }, + "propertyDescriptors": [], + "propertyDescriptorGroups": {}, + "propertyValidationRules": {}, + "objectDescriptorModule": { + "%": "core/converter/snake-case-converter.mjson" + }, + "exportName": "SnakeCaseConverter", + "module": { + "%": "core/converter/snake-case-converter" + } + } + } +} diff --git a/core/converter/trim-converter.meta b/core/converter/trim-converter.mjson similarity index 53% rename from core/converter/trim-converter.meta rename to core/converter/trim-converter.mjson index dedafa7e90..5683e40b04 100644 --- a/core/converter/trim-converter.meta +++ b/core/converter/trim-converter.mjson @@ -1,20 +1,20 @@ { - "converter_blueprint_reference": { - "object": "core/converter/converter.meta" + "converter_descriptor_reference": { + "object": "core/converter/converter.mjson" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "TrimConverter", "customPrototype": false, "parent": { - "@": "converter_blueprint_reference" + "@": "converter_descriptor_reference" }, "propertyDescriptors": [], - "propertyBlueprintGroups": {}, + "propertyDescriptorGroups": {}, "propertyValidationRules": {}, - "blueprintModule": { - "%": "core/converter/trim-converter.meta" + "objectDescriptorModule": { + "%": "core/converter/trim-converter.mjson" }, "exportName": "TrimConverter", "module": { diff --git a/core/converter/upper-case-converter.meta b/core/converter/upper-case-converter.mjson similarity index 60% rename from core/converter/upper-case-converter.meta rename to core/converter/upper-case-converter.mjson index 089c454c66..7bac53c5e8 100644 --- a/core/converter/upper-case-converter.meta +++ b/core/converter/upper-case-converter.mjson @@ -1,20 +1,20 @@ { - "converter_blueprint_reference": { - "object": "core/converter/converter.meta" + "converter_descriptor_reference": { + "object": "core/converter/converter.mjson" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "UpperCaseConverter", "customPrototype": false, "parent": { - "@": "converter_blueprint_reference" + "@": "converter_descriptor_reference" }, "propertyDescriptors": [], "propertyDescriptorGroups": {}, "propertyValidationRules": {}, - "blueprintModule": { - "%": "core/converter/upper-case-converter.meta" + "objectDescriptorModule": { + "%": "core/converter/upper-case-converter.mjson" }, "exportName": "UpperCaseConverter", "module": { From 4881b9b95b702cecbe7cda1d9e8fc28a9f041f02 Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Thu, 31 Aug 2017 15:18:43 -0400 Subject: [PATCH 22/66] Fix converter object descriptors specs --- core/converter/converter.js | 4 +- test/spec/meta/converter-blueprint-spec.js | 204 ++++++++++----------- 2 files changed, 101 insertions(+), 107 deletions(-) diff --git a/core/converter/converter.js b/core/converter/converter.js index e1e139f032..2674684649 100644 --- a/core/converter/converter.js +++ b/core/converter/converter.js @@ -105,9 +105,9 @@ var Converter = exports.Converter = Montage.specialize( /** @lends Converter# */ }, { - blueprintModuleId: require("../core")._blueprintModuleIdDescriptor, + objectDescriptorModuleId: require("../core")._objectDescriptorModuleIdDescriptor, - blueprint: require("../core")._blueprintDescriptor + objectDescriptor: require("../core")._objectDescriptorDescriptor }); diff --git a/test/spec/meta/converter-blueprint-spec.js b/test/spec/meta/converter-blueprint-spec.js index c5dcf597fc..38f97d198f 100644 --- a/test/spec/meta/converter-blueprint-spec.js +++ b/test/spec/meta/converter-blueprint-spec.js @@ -1,7 +1,7 @@ /* */ /** - @module montage/data/blueprint-spec.js + @module montage/data/object-desciptor-spec.js @requires montage/core/core @requires montage/core/logger */ @@ -16,13 +16,7 @@ var BytesConverter = require("montage/core/converter/bytes-converter").BytesConv var DateConverter = require("montage/core/converter/date-converter").DateConverter; var CurrencyConverter = require("montage/core/converter/currency-converter").CurrencyConverter; -var Blueprint = require("montage/core/meta/blueprint").Blueprint; -var Binder = require("montage/core/meta/blueprint").Binder; -var PropertyBlueprint = require("montage/core/meta/blueprint").PropertyBlueprint; -var AssociationBlueprint = require("montage/core/meta/blueprint").AssociationBlueprint; - -describe("meta/converter-blueprint-spec", function () { - +describe("meta/converter-object-desciptor-spec", function () { var converter, ucaseConverter, lcaseConverter, @@ -45,210 +39,210 @@ describe("meta/converter-blueprint-spec", function () { currencyConverter = CurrencyConverter; }); - describe("test converter blueprint", function () { + describe("test converter object descriptor", function () { it("should exist", function (done) { - var blueprintPromise = converter.blueprint; - blueprintPromise.then(function (blueprint) { - expect(blueprint).toBeTruthy(); + var objectDescriptorPromise = converter.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + expect(objectDescriptor).toBeTruthy(); }).finally(function () { done(); }); }); - it("should have allowPartialConversion property blueprint", function (done) { - var blueprintPromise = converter.blueprint; - blueprintPromise.then(function (blueprint) { - var propertyBlueprint = blueprint.propertyDescriptorForName("allowPartialConversion"); - expect(propertyBlueprint).toBeTruthy(); - expect(propertyBlueprint.valueType).toBe("boolean"); - expect(propertyBlueprint.readOnly).toBe(true); + it("should have allowPartialConversion property object descriptor", function (done) { + var objectDescriptorPromise = converter.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + var propertyDescriptor = objectDescriptor.propertyDescriptorForName("allowPartialConversion"); + expect(propertyDescriptor).toBeTruthy(); + expect(propertyDescriptor.valueType).toBe("boolean"); + expect(propertyDescriptor.readOnly).toBe(true); }).finally(function () { done(); }); }); }); - describe("test upper case converter blueprint", function () { + describe("test upper case converter object descriptor", function () { it("should exist", function (done) { - var blueprintPromise = ucaseConverter.blueprint; - blueprintPromise.then(function (blueprint) { - expect(blueprint).toBeTruthy(); + var objectDescriptorPromise = ucaseConverter.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + expect(objectDescriptor).toBeTruthy(); }).finally(function () { done(); }); }); }); - describe("test lower case converter blueprint", function () { + describe("test lower case converter object descriptor", function () { it("should exist", function (done) { - var blueprintPromise = lcaseConverter.blueprint; - blueprintPromise.then(function (blueprint) { - expect(blueprint).toBeTruthy(); + var objectDescriptorPromise = lcaseConverter.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + expect(objectDescriptor).toBeTruthy(); }).finally(function () { done(); }); }); }); - describe("test invert converter blueprint", function () { + describe("test invert converter object descriptor", function () { it("should exist", function (done) { - var blueprintPromise = invertConverter.blueprint; - blueprintPromise.then(function (blueprint) { - expect(blueprint).toBeTruthy(); + var objectDescriptorPromise = invertConverter.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + expect(objectDescriptor).toBeTruthy(); }).finally(function () { done(); }); }); }); - describe("test trim converter blueprint", function () { + describe("test trim converter object descriptor", function () { it("should exist", function (done) { - var blueprintPromise = trimConverter.blueprint; - blueprintPromise.then(function (blueprint) { - expect(blueprint).toBeTruthy(); + var objectDescriptorPromise = trimConverter.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + expect(objectDescriptor).toBeTruthy(); }).finally(function () { done(); }); }); }); - describe("test number converter blueprint", function () { + describe("test number converter object descriptor", function () { it("should exist", function (done) { - var blueprintPromise = converter.blueprint; - blueprintPromise.then(function (blueprint) { - expect(blueprint).toBeTruthy(); + var objectDescriptorPromise = converter.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + expect(objectDescriptor).toBeTruthy(); }).finally(function () { done(); }); }); - it("should have shorten property blueprint", function (done) { - var blueprintPromise = numberConverter.blueprint; - blueprintPromise.then(function (blueprint) { - var propertyBlueprint = blueprint.propertyDescriptorForName("shorten"); - expect(propertyBlueprint).toBeTruthy(); - expect(propertyBlueprint.valueType).toBe("boolean"); + it("should have shorten property object descriptor", function (done) { + var objectDescriptorPromise = numberConverter.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + var propertyDescriptor = objectDescriptor.propertyDescriptorForName("shorten"); + expect(propertyDescriptor).toBeTruthy(); + expect(propertyDescriptor.valueType).toBe("boolean"); }).finally(function () { done(); }); }); - it("should have decimals property blueprint", function (done) { - var blueprintPromise = numberConverter.blueprint; - blueprintPromise.then(function (blueprint) { - var propertyBlueprint = blueprint.propertyDescriptorForName("decimals"); - expect(propertyBlueprint).toBeTruthy(); - expect(propertyBlueprint.valueType).toBe("number"); + it("should have decimals property object descriptor", function (done) { + var objectDescriptorPromise = numberConverter.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + var propertyDescriptor = objectDescriptor.propertyDescriptorForName("decimals"); + expect(propertyDescriptor).toBeTruthy(); + expect(propertyDescriptor.valueType).toBe("number"); }).finally(function () { done(); }); }); - it("should have round property blueprint", function (done) { - var blueprintPromise = numberConverter.blueprint; - blueprintPromise.then(function (blueprint) { - var propertyBlueprint = blueprint.propertyDescriptorForName("round"); - expect(propertyBlueprint).toBeTruthy(); - expect(propertyBlueprint.valueType).toBe("boolean"); + it("should have round property object descriptor", function (done) { + var objectDescriptorPromise = numberConverter.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + var propertyDescriptor = objectDescriptor.propertyDescriptorForName("round"); + expect(propertyDescriptor).toBeTruthy(); + expect(propertyDescriptor.valueType).toBe("boolean"); }).finally(function () { done(); }); }); - it("should have allowFloat property blueprint", function (done) { - var blueprintPromise = numberConverter.blueprint; - blueprintPromise.then(function (blueprint) { - var propertyBlueprint = blueprint.propertyDescriptorForName("allowFloat"); - expect(propertyBlueprint).toBeTruthy(); - expect(propertyBlueprint.valueType).toBe("boolean"); + it("should have allowFloat property object descriptor", function (done) { + var objectDescriptorPromise = numberConverter.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + var propertyDescriptor = objectDescriptor.propertyDescriptorForName("allowFloat"); + expect(propertyDescriptor).toBeTruthy(); + expect(propertyDescriptor.valueType).toBe("boolean"); }).finally(function () { done(); }); }); - it("should have allowNegative promerty blueprint", function (done) { - var blueprintPromise = numberConverter.blueprint; - blueprintPromise.then(function (blueprint) { - var propertyBlueprint = blueprint.propertyDescriptorForName("allowNegative"); - expect(propertyBlueprint).toBeTruthy(); - expect(propertyBlueprint.valueType).toBe("boolean"); + it("should have allowNegative promerty object descriptor", function (done) { + var objectDescriptorPromise = numberConverter.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + var propertyDescriptor = objectDescriptor.propertyDescriptorForName("allowNegative"); + expect(propertyDescriptor).toBeTruthy(); + expect(propertyDescriptor.valueType).toBe("boolean"); }).finally(function () { done(); }); }); }); - describe("test bytes converter blueprint", function () { + describe("test bytes converter object descriptor", function () { it("should exist", function (done) { - var blueprintPromise = bytesConverter.blueprint; - blueprintPromise.then(function (blueprint) { - expect(blueprint).toBeTruthy(); + var objectDescriptorPromise = bytesConverter.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + expect(objectDescriptor).toBeTruthy(); }).finally(function () { done(); }); }); - it("should have decimals property blueprint", function (done) { - var blueprintPromise = bytesConverter.blueprint; - blueprintPromise.then(function (blueprint) { - var propertyBlueprint = blueprint.propertyDescriptorForName("decimals"); - expect(propertyBlueprint).toBeTruthy(); - expect(propertyBlueprint.valueType).toBe("number"); + it("should have decimals property object descriptor", function (done) { + var objectDescriptorPromise = bytesConverter.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + var propertyDescriptor = objectDescriptor.propertyDescriptorForName("decimals"); + expect(propertyDescriptor).toBeTruthy(); + expect(propertyDescriptor.valueType).toBe("number"); }).finally(function () { done(); }); }); }); - describe("test date converter blueprint", function () { + describe("test date converter object descriptor", function () { it("should exist", function (done) { - var blueprintPromise = dateConverter.blueprint; - blueprintPromise.then(function (blueprint) { - expect(blueprint).toBeTruthy(); + var objectDescriptorPromise = dateConverter.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + expect(objectDescriptor).toBeTruthy(); }).finally(function () { done(); }); }); - it("should have validator property blueprint", function (done) { - var blueprintPromise = dateConverter.blueprint; - blueprintPromise.then(function (blueprint) { - var propertyBlueprint = blueprint.propertyDescriptorForName("validator"); - expect(propertyBlueprint).toBeTruthy(); - expect(propertyBlueprint.valueType).toBe("object"); + it("should have validator property object descriptor", function (done) { + var objectDescriptorPromise = dateConverter.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + var propertyDescriptor = objectDescriptor.propertyDescriptorForName("validator"); + expect(propertyDescriptor).toBeTruthy(); + expect(propertyDescriptor.valueType).toBe("object"); }).finally(function () { done(); }); }); - it("should have pattern property blueprint", function (done) { - var blueprintPromise = dateConverter.blueprint; - blueprintPromise.then(function (blueprint) { - var propertyBlueprint = blueprint.propertyDescriptorForName("pattern"); - expect(propertyBlueprint).toBeTruthy(); - expect(propertyBlueprint.valueType).toBe("string"); + it("should have pattern property object descriptor", function (done) { + var objectDescriptorPromise = dateConverter.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + var propertyDescriptor = objectDescriptor.propertyDescriptorForName("pattern"); + expect(propertyDescriptor).toBeTruthy(); + expect(propertyDescriptor.valueType).toBe("string"); }).finally(function () { done(); }); }); }); - describe("test currency converter blueprint", function () { + describe("test currency converter object descriptor", function () { it("should exist", function (done) { - var blueprintPromise = currencyConverter.blueprint; - blueprintPromise.then(function (blueprint) { - expect(blueprint).toBeTruthy(); + var objectDescriptorPromise = currencyConverter.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + expect(objectDescriptor).toBeTruthy(); }).finally(function () { done(); }); }); - it("should have currency property blueprint", function (done) { - var blueprintPromise = currencyConverter.blueprint; - blueprintPromise.then(function (blueprint) { - var propertyBlueprint = blueprint.propertyDescriptorForName("currency"); - expect(propertyBlueprint).toBeTruthy(); - expect(propertyBlueprint.valueType).toBe("string"); + it("should have currency property object descriptor", function (done) { + var objectDescriptorPromise = currencyConverter.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + var propertyDescriptor = objectDescriptor.propertyDescriptorForName("currency"); + expect(propertyDescriptor).toBeTruthy(); + expect(propertyDescriptor.valueType).toBe("string"); }).finally(function () { done(); }); From f34f7da49e7215decd94f3351f910140988e4206 Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Thu, 31 Aug 2017 15:57:42 -0400 Subject: [PATCH 23/66] =?UTF-8?q?Update=20converters=E2=80=99=20singleton?= =?UTF-8?q?=20logic.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/converter/camel-case-converter.js | 34 +++++++++++++++++--- core/converter/invert-converter.js | 33 ++++++++++++++++--- core/converter/kebab-case-converter.js | 33 ++++++++++++++++--- core/converter/lower-case-converter.js | 33 ++++++++++++++++--- core/converter/new-line-to-br-converter.js | 33 ++++++++++++++++--- core/converter/snake-case-converter.js | 33 ++++++++++++++++--- core/converter/trim-converter.js | 33 ++++++++++++++++--- core/converter/upper-case-converter.js | 33 ++++++++++++++++--- test/spec/converter-spec.js | 37 ++++++++++------------ 9 files changed, 249 insertions(+), 53 deletions(-) diff --git a/core/converter/camel-case-converter.js b/core/converter/camel-case-converter.js index 74b5f6952a..9cd00b6cce 100644 --- a/core/converter/camel-case-converter.js +++ b/core/converter/camel-case-converter.js @@ -4,6 +4,8 @@ */ var Converter = require("./converter").Converter, camelCase = require('lodash/fp/camelCase'), + deprecate = require("../deprecate"), + shouldMuteWarning = false, singleton; /** @@ -12,15 +14,26 @@ var Converter = require("./converter").Converter, * @class CamelCaseConverter * @extends Converter */ -exports.CamelCaseConverter = Converter.specialize({ +var CamelCaseConverter = exports.CamelCaseConverter = Converter.specialize({ constructor: { value: function () { - if (!singleton) { - singleton = this; + if (this.constructor === CamelCaseConverter) { + if (!singleton) { + singleton = this; + } + + if (!shouldMuteWarning) { + deprecate.deprecationWarning( + "Instantiating CamelCaseConverter is deprecated," + + " use its Singleton instead" + ); + } + + return singleton; } - return singleton; + return this; } }, @@ -29,4 +42,17 @@ exports.CamelCaseConverter = Converter.specialize({ return camelCase(v); } } + +}); + +Object.defineProperty(exports, 'Singleton', { + get: function () { + if (!singleton) { + shouldMuteWarning = true; + singleton = new CamelCaseConverter(); + shouldMuteWarning = false; + } + + return singleton; + } }); diff --git a/core/converter/invert-converter.js b/core/converter/invert-converter.js index 7aacc1e628..b24d491a84 100644 --- a/core/converter/invert-converter.js +++ b/core/converter/invert-converter.js @@ -3,6 +3,8 @@ * @requires montage/core/converter/converter */ var Converter = require("./converter").Converter, + deprecate = require("../deprecate"), + shouldMuteWarning = false, singleton; /** @@ -11,15 +13,26 @@ var Converter = require("./converter").Converter, * @class InvertConverter * @extends Converter */ -exports.InvertConverter = Converter.specialize({ +var InvertConverter = exports.InvertConverter = Converter.specialize({ constructor: { value: function () { - if (!singleton) { - singleton = this; + if (this.constructor === InvertConverter) { + if (!singleton) { + singleton = this; + } + + if (!shouldMuteWarning) { + deprecate.deprecationWarning( + "Instantiating InvertConverter is deprecated," + + " use its Singleton instead" + ); + } + + return singleton; } - return singleton; + return this; } }, @@ -35,3 +48,15 @@ exports.InvertConverter = Converter.specialize({ } } }); + +Object.defineProperty(exports, 'Singleton', { + get: function () { + if (!singleton) { + shouldMuteWarning = true; + singleton = new InvertConverter(); + shouldMuteWarning = false; + } + + return singleton; + } +}); diff --git a/core/converter/kebab-case-converter.js b/core/converter/kebab-case-converter.js index db1d1162af..89ebcda891 100644 --- a/core/converter/kebab-case-converter.js +++ b/core/converter/kebab-case-converter.js @@ -4,6 +4,8 @@ */ var Converter = require("./converter").Converter, kebabCase = require('lodash/fp/kebabCase'), + deprecate = require("../deprecate"), + shouldMuteWarning = false, singleton; /** @@ -12,15 +14,26 @@ var Converter = require("./converter").Converter, * @class KebabCaseConverter * @extends Converter */ -exports.KebabCaseConverter = Converter.specialize({ +var KebabCaseConverter = exports.KebabCaseConverter = Converter.specialize({ constructor: { value: function () { - if (!singleton) { - singleton = this; + if (this.constructor === KebabCaseConverter) { + if (!singleton) { + singleton = this; + } + + if (!shouldMuteWarning) { + deprecate.deprecationWarning( + "Instantiating KebabCaseConverter is deprecated," + + " use its Singleton instead" + ); + } + + return singleton; } - return singleton; + return this; } }, @@ -30,3 +43,15 @@ exports.KebabCaseConverter = Converter.specialize({ } } }); + +Object.defineProperty(exports, 'Singleton', { + get: function () { + if (!singleton) { + shouldMuteWarning = true; + singleton = new KebabCaseConverter(); + shouldMuteWarning = false; + } + + return singleton; + } +}); diff --git a/core/converter/lower-case-converter.js b/core/converter/lower-case-converter.js index f94b88c46c..ec33fc1744 100644 --- a/core/converter/lower-case-converter.js +++ b/core/converter/lower-case-converter.js @@ -3,21 +3,34 @@ * @requires montage/core/converter/converter */ var Converter = require("./converter").Converter, + deprecate = require("../deprecate"), + shouldMuteWarning = false, singleton; /** * @class LowerCaseConverter * @classdesc Converts a string to lowercase. */ -exports.LowerCaseConverter = Converter.specialize( /** @lends LowerCaseConverter# */{ +var LowerCaseConverter = exports.LowerCaseConverter = Converter.specialize({ constructor: { value: function () { - if (!singleton) { - singleton = this; + if (this.constructor === LowerCaseConverter) { + if (!singleton) { + singleton = this; + } + + if (!shouldMuteWarning) { + deprecate.deprecationWarning( + "Instantiating LowerCaseConverter is deprecated," + + " use its Singleton instead" + ); + } + + return singleton; } - return singleton; + return this; } }, @@ -49,3 +62,15 @@ exports.LowerCaseConverter = Converter.specialize( /** @lends LowerCaseConverter }} }); + +Object.defineProperty(exports, 'Singleton', { + get: function () { + if (!singleton) { + shouldMuteWarning = true; + singleton = new LowerCaseConverter(); + shouldMuteWarning = false; + } + + return singleton; + } +}); diff --git a/core/converter/new-line-to-br-converter.js b/core/converter/new-line-to-br-converter.js index 12e8d82511..5cbba5a8db 100644 --- a/core/converter/new-line-to-br-converter.js +++ b/core/converter/new-line-to-br-converter.js @@ -3,6 +3,8 @@ * @requires montage/core/converter/converter */ var Converter = require("./converter").Converter, + deprecate = require("../deprecate"), + shouldMuteWarning = false, singleton; /** @@ -20,15 +22,26 @@ var newLineToBr = function (str) { * @class NewLineToBrConverter * @classdesc Converts a newline to a <br> tag. */ -exports.NewLineToBrConverter = Converter.specialize( /** @lends NewLineToBrConverter# */{ +var NewLineToBrConverter = exports.NewLineToBrConverter = Converter.specialize({ constructor: { value: function () { - if (!singleton) { - singleton = this; + if (this.constructor === NewLineToBrConverter) { + if (!singleton) { + singleton = this; + } + + if (!shouldMuteWarning) { + deprecate.deprecationWarning( + "Instantiating NewLineToBrConverter is deprecated," + + " use its Singleton instead" + ); + } + + return singleton; } - return singleton; + return this; } }, @@ -60,3 +73,15 @@ exports.NewLineToBrConverter = Converter.specialize( /** @lends NewLineToBrConve }} }); + +Object.defineProperty(exports, 'Singleton', { + get: function () { + if (!singleton) { + shouldMuteWarning = true; + singleton = new NewLineToBrConverter(); + shouldMuteWarning = false; + } + + return singleton; + } +}); diff --git a/core/converter/snake-case-converter.js b/core/converter/snake-case-converter.js index 1aa35e3df7..81525b355e 100644 --- a/core/converter/snake-case-converter.js +++ b/core/converter/snake-case-converter.js @@ -4,6 +4,8 @@ */ var Converter = require("./converter").Converter, snakeCase = require('lodash/fp/snakeCase'), + deprecate = require("../deprecate"), + shouldMuteWarning = false, singleton; /** @@ -12,15 +14,26 @@ var Converter = require("./converter").Converter, * @class SnakeCaseConverter * @extends Converter */ -exports.SnakeCaseConverter = Converter.specialize({ +var SnakeCaseConverter = exports.SnakeCaseConverter = Converter.specialize({ constructor: { value: function () { - if (!singleton) { - singleton = this; + if (this.constructor === SnakeCaseConverter) { + if (!singleton) { + singleton = this; + } + + if (!shouldMuteWarning) { + deprecate.deprecationWarning( + "Instantiating SnakeCaseConverter is deprecated," + + " use its Singleton instead" + ); + } + + return singleton; } - return singleton; + return this; } }, @@ -30,3 +43,15 @@ exports.SnakeCaseConverter = Converter.specialize({ } } }); + +Object.defineProperty(exports, 'Singleton', { + get: function () { + if (!singleton) { + shouldMuteWarning = true; + singleton = new SnakeCaseConverter(); + shouldMuteWarning = false; + } + + return singleton; + } +}); diff --git a/core/converter/trim-converter.js b/core/converter/trim-converter.js index 7a359c71a0..f84db02c44 100644 --- a/core/converter/trim-converter.js +++ b/core/converter/trim-converter.js @@ -4,6 +4,8 @@ */ var Converter = require("./converter").Converter, trim = require('lodash/fp/trim'), + deprecate = require("../deprecate"), + shouldMuteWarning = false, singleton; /** @@ -18,15 +20,26 @@ var Converter = require("./converter").Converter, * console.log("After trim: " + trimConverter.convert(str)); * // After trim: Hello World */ -exports.TrimConverter = Converter.specialize( /** @lends TrimConverter# */ { +var TrimConverter = exports.TrimConverter = Converter.specialize({ constructor: { value: function () { - if (!singleton) { - singleton = this; + if (this.constructor === TrimConverter) { + if (!singleton) { + singleton = this; + } + + if (!shouldMuteWarning) { + deprecate.deprecationWarning( + "Instantiating TrimConverter is deprecated," + + " use its Singleton instead" + ); + } + + return singleton; } - return singleton; + return this; } }, @@ -59,3 +72,15 @@ exports.TrimConverter = Converter.specialize( /** @lends TrimConverter# */ { }} }); + +Object.defineProperty(exports, 'Singleton', { + get: function () { + if (!singleton) { + shouldMuteWarning = true; + singleton = new TrimConverter(); + shouldMuteWarning = false; + } + + return singleton; + } +}); diff --git a/core/converter/upper-case-converter.js b/core/converter/upper-case-converter.js index a79a8cd84e..238ad95808 100644 --- a/core/converter/upper-case-converter.js +++ b/core/converter/upper-case-converter.js @@ -3,21 +3,34 @@ * @requires montage/core/converter/converter */ var Converter = require("./converter").Converter, + deprecate = require("../deprecate"), + shouldMuteWarning = false, singleton; /** * @class UpperCaseConverter * @classdesc Converts a string to upper-case. */ -exports.UpperCaseConverter = Converter.specialize( /** @lends UpperCaseConverter# */ { +var UpperCaseConverter = exports.UpperCaseConverter = Converter.specialize({ constructor: { value: function () { - if (!singleton) { - singleton = this; + if (this.constructor === UpperCaseConverter) { + if (!singleton) { + singleton = this; + } + + if (!shouldMuteWarning) { + deprecate.deprecationWarning( + "Instantiating UpperCaseConverter is deprecated," + + " use its Singleton instead" + ); + } + + return singleton; } - return singleton; + return this; } }, @@ -51,3 +64,15 @@ exports.UpperCaseConverter = Converter.specialize( /** @lends UpperCaseConverter }} }); + +Object.defineProperty(exports, 'Singleton', { + get: function () { + if (!singleton) { + shouldMuteWarning = true; + singleton = new UpperCaseConverter(); + shouldMuteWarning = false; + } + + return singleton; + } +}); diff --git a/test/spec/converter-spec.js b/test/spec/converter-spec.js index ef1d64a274..5db208e4c0 100644 --- a/test/spec/converter-spec.js +++ b/test/spec/converter-spec.js @@ -30,17 +30,19 @@ POSSIBILITY OF SUCH DAMAGE. */ var Montage = require("montage").Montage; var Converter= require("montage/core/converter/converter").Converter, -UpperCaseConverter = require("montage/core/converter/upper-case-converter").UpperCaseConverter, -LowerCaseConverter = require("montage/core/converter/lower-case-converter").LowerCaseConverter, -TrimConverter = require("montage/core/converter/trim-converter").TrimConverter, +UpperCaseConverter = require("montage/core/converter/upper-case-converter").Singleton, +LowerCaseConverter = require("montage/core/converter/lower-case-converter").Singleton, +TrimConverter = require("montage/core/converter/trim-converter").Singleton, NumberConverter = require("montage/core/converter/number-converter").NumberConverter, BytesConverter = require("montage/core/converter/bytes-converter").BytesConverter, -InvertConverter = require("montage/core/converter/invert-converter").InvertConverter, +InvertConverterModule = require("montage/core/converter/invert-converter"), +InvertConverter = InvertConverterModule.InvertConverter, +InvertConverterSingleton = InvertConverterModule.Singleton, DateConverter = require("montage/core/converter/date-converter").DateConverter, ExpressionConverter = require("montage/core/converter/expression-converter").ExpressionConverter, -CamelCaseConverter = require("montage/core/converter/camel-case-converter").CamelCaseConverter, -SnakeCaseConverter = require("montage/core/converter/snake-case-converter").SnakeCaseConverter, -KebabCaseConverter = require("montage/core/converter/kebab-case-converter").KebabCaseConverter, +CamelCaseConverter = require("montage/core/converter/camel-case-converter").Singleton, +SnakeCaseConverter = require("montage/core/converter/snake-case-converter").Singleton, +KebabCaseConverter = require("montage/core/converter/kebab-case-converter").Singleton, CurrencyConverter = require("montage/core/converter/currency-converter").CurrencyConverter; describe("converter-spec", function () { @@ -50,11 +52,10 @@ describe("converter-spec", function () { date = new Date('25 Aug 2011 12:00:00 PM'); beforeEach(function () { - //stringConverter = new StringConverter(); - ucaseConverter = new UpperCaseConverter(); - lcaseConverter = new LowerCaseConverter(); - trimConverter = new TrimConverter(); - invertConverter = new InvertConverter(); + ucaseConverter = UpperCaseConverter; + lcaseConverter = LowerCaseConverter; + trimConverter = TrimConverter; + invertConverter = InvertConverterSingleton; numberConverter = new NumberConverter(); numberConverter.shorten = true; bytesConverter = new BytesConverter(); @@ -67,9 +68,9 @@ describe("converter-spec", function () { expressionConverter.convertExpression = "map{foo}"; expressionConverter.revertExpression = "map{{foo:this}}"; - camelCaseConverter = new CamelCaseConverter(); - snakeCaseConverter = new SnakeCaseConverter(); - kebabCaseConverter = new KebabCaseConverter(); + camelCaseConverter = CamelCaseConverter; + snakeCaseConverter = SnakeCaseConverter; + kebabCaseConverter = KebabCaseConverter; }); describe("test string formatters", function () { @@ -116,12 +117,6 @@ describe("converter-spec", function () { it("should be a singleton", function () { expect(invertConverter === new InvertConverter()).toBe(true); - expect(ucaseConverter === new UpperCaseConverter()).toBe(true); - expect(trimConverter === new TrimConverter()).toBe(true); - expect(lcaseConverter === new LowerCaseConverter()).toBe(true); - expect(kebabCaseConverter === new KebabCaseConverter()).toBe(true); - expect(snakeCaseConverter === new SnakeCaseConverter()).toBe(true); - expect(camelCaseConverter === new CamelCaseConverter()).toBe(true); }); }); From 72313734d9d3653a5c24243590017f550eae8557 Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Thu, 31 Aug 2017 20:33:49 -0400 Subject: [PATCH 24/66] Converters cleaning up --- core/converter/bytes-converter.mjson | 4 ++-- core/converter/camel-case-converter.js | 17 ++--------------- core/converter/camel-case-converter.mjson | 4 ++-- core/converter/currency-converter.mjson | 4 ++-- core/converter/date-converter.mjson | 4 ++-- core/converter/expression-converter.mjson | 4 ++-- core/converter/invert-converter.js | 4 ++-- core/converter/invert-converter.mjson | 4 ++-- core/converter/kebab-case-converter.js | 17 ++--------------- core/converter/kebab-case-converter.mjson | 4 ++-- core/converter/lower-case-converter.js | 4 ++-- core/converter/lower-case-converter.mjson | 4 ++-- core/converter/new-line-to-br-converter.js | 4 ++-- core/converter/new-line-to-br-converter.mjson | 4 ++-- core/converter/number-converter.mjson | 4 ++-- core/converter/snake-case-converter.js | 17 ++--------------- core/converter/snake-case-converter.mjson | 4 ++-- core/converter/trim-converter.js | 4 ++-- core/converter/trim-converter.mjson | 4 ++-- core/converter/upper-case-converter.js | 4 ++-- core/converter/upper-case-converter.mjson | 4 ++-- test/spec/converter-spec.js | 14 +++++++------- 22 files changed, 49 insertions(+), 88 deletions(-) diff --git a/core/converter/bytes-converter.mjson b/core/converter/bytes-converter.mjson index be6667b888..a7d344f285 100644 --- a/core/converter/bytes-converter.mjson +++ b/core/converter/bytes-converter.mjson @@ -10,7 +10,7 @@ "helpKey": "" } }, - "converter_descriptor_reference": { + "converter_descriptor": { "object": "core/converter/converter.mjson" }, "root": { @@ -19,7 +19,7 @@ "name": "BytesConverter", "customPrototype": false, "parent": { - "@": "converter_descriptor_reference" + "@": "converter_descriptor" }, "propertyDescriptors": [ { diff --git a/core/converter/camel-case-converter.js b/core/converter/camel-case-converter.js index 9cd00b6cce..cdacfa6eba 100644 --- a/core/converter/camel-case-converter.js +++ b/core/converter/camel-case-converter.js @@ -4,8 +4,6 @@ */ var Converter = require("./converter").Converter, camelCase = require('lodash/fp/camelCase'), - deprecate = require("../deprecate"), - shouldMuteWarning = false, singleton; /** @@ -23,13 +21,6 @@ var CamelCaseConverter = exports.CamelCaseConverter = Converter.specialize({ singleton = this; } - if (!shouldMuteWarning) { - deprecate.deprecationWarning( - "Instantiating CamelCaseConverter is deprecated," + - " use its Singleton instead" - ); - } - return singleton; } @@ -38,19 +29,15 @@ var CamelCaseConverter = exports.CamelCaseConverter = Converter.specialize({ }, convert: { - value: function (v) { - return camelCase(v); - } + value: camelCase } }); -Object.defineProperty(exports, 'Singleton', { +Object.defineProperty(exports, 'singleton', { get: function () { if (!singleton) { - shouldMuteWarning = true; singleton = new CamelCaseConverter(); - shouldMuteWarning = false; } return singleton; diff --git a/core/converter/camel-case-converter.mjson b/core/converter/camel-case-converter.mjson index 8070be998e..ecd4e690b8 100644 --- a/core/converter/camel-case-converter.mjson +++ b/core/converter/camel-case-converter.mjson @@ -1,5 +1,5 @@ { - "converter_descriptor_reference": { + "converter_descriptor": { "object": "core/converter/converter.mjson" }, "root": { @@ -8,7 +8,7 @@ "name": "CamelCaseConverter", "customPrototype": false, "parent": { - "@": "converter_descriptor_reference" + "@": "converter_descriptor" }, "propertyDescriptors": [], "propertyDescriptorGroups": {}, diff --git a/core/converter/currency-converter.mjson b/core/converter/currency-converter.mjson index 49aad91b42..6973e3ace5 100644 --- a/core/converter/currency-converter.mjson +++ b/core/converter/currency-converter.mjson @@ -10,7 +10,7 @@ "helpKey": "" } }, - "number_converter_descriptor_reference": { + "number_converter_descriptor": { "object": "core/converter/number-converter.mjson" }, "currencyConverter_showCurrencyBeforeNumber": { @@ -30,7 +30,7 @@ "name": "CurrencyConverter", "customPrototype": false, "parent": { - "@": "number_converter_descriptor_reference" + "@": "number_converter_descriptor" }, "propertyDescriptors": [ { diff --git a/core/converter/date-converter.mjson b/core/converter/date-converter.mjson index 6986592318..e80dd259f8 100644 --- a/core/converter/date-converter.mjson +++ b/core/converter/date-converter.mjson @@ -21,7 +21,7 @@ "helpKey": "" } }, - "converter_descriptor_reference": { + "converter_descriptor": { "object": "core/converter/converter.mjson" }, "root": { @@ -30,7 +30,7 @@ "name": "DateConverter", "customPrototype": false, "parent": { - "@": "converter_descriptor_reference" + "@": "converter_descriptor" }, "propertyDescriptors": [ { diff --git a/core/converter/expression-converter.mjson b/core/converter/expression-converter.mjson index 5a93fdd039..ae8943cb7d 100644 --- a/core/converter/expression-converter.mjson +++ b/core/converter/expression-converter.mjson @@ -1,5 +1,5 @@ { - "converter_descriptor_reference": { + "converter_descriptor": { "object": "core/converter/converter.mjson" }, "convertExpression": { @@ -30,7 +30,7 @@ "name": "ExpressionConverter", "customPrototype": false, "parent": { - "@": "converter_descriptor_reference" + "@": "converter_descriptor" }, "propertyDescriptors": [ { diff --git a/core/converter/invert-converter.js b/core/converter/invert-converter.js index b24d491a84..1aa811cbae 100644 --- a/core/converter/invert-converter.js +++ b/core/converter/invert-converter.js @@ -25,7 +25,7 @@ var InvertConverter = exports.InvertConverter = Converter.specialize({ if (!shouldMuteWarning) { deprecate.deprecationWarning( "Instantiating InvertConverter is deprecated," + - " use its Singleton instead" + " use its singleton instead" ); } @@ -49,7 +49,7 @@ var InvertConverter = exports.InvertConverter = Converter.specialize({ } }); -Object.defineProperty(exports, 'Singleton', { +Object.defineProperty(exports, 'singleton', { get: function () { if (!singleton) { shouldMuteWarning = true; diff --git a/core/converter/invert-converter.mjson b/core/converter/invert-converter.mjson index bedb1813c7..a62f59c59f 100644 --- a/core/converter/invert-converter.mjson +++ b/core/converter/invert-converter.mjson @@ -1,5 +1,5 @@ { - "converter_descriptor_reference": { + "converter_descriptor": { "object": "core/converter/converter.mjson" }, "root": { @@ -8,7 +8,7 @@ "name": "InvertConverter", "customPrototype": false, "parent": { - "@": "converter_descriptor_reference" + "@": "converter_descriptor" }, "propertyDescriptors": [], "propertyDescriptorGroups": {}, diff --git a/core/converter/kebab-case-converter.js b/core/converter/kebab-case-converter.js index 89ebcda891..072073a7bb 100644 --- a/core/converter/kebab-case-converter.js +++ b/core/converter/kebab-case-converter.js @@ -4,8 +4,6 @@ */ var Converter = require("./converter").Converter, kebabCase = require('lodash/fp/kebabCase'), - deprecate = require("../deprecate"), - shouldMuteWarning = false, singleton; /** @@ -23,13 +21,6 @@ var KebabCaseConverter = exports.KebabCaseConverter = Converter.specialize({ singleton = this; } - if (!shouldMuteWarning) { - deprecate.deprecationWarning( - "Instantiating KebabCaseConverter is deprecated," + - " use its Singleton instead" - ); - } - return singleton; } @@ -38,18 +29,14 @@ var KebabCaseConverter = exports.KebabCaseConverter = Converter.specialize({ }, convert: { - value: function (v) { - return kebabCase(v); - } + value: kebabCase } }); -Object.defineProperty(exports, 'Singleton', { +Object.defineProperty(exports, 'singleton', { get: function () { if (!singleton) { - shouldMuteWarning = true; singleton = new KebabCaseConverter(); - shouldMuteWarning = false; } return singleton; diff --git a/core/converter/kebab-case-converter.mjson b/core/converter/kebab-case-converter.mjson index 6a11ab99cc..5b077b3188 100644 --- a/core/converter/kebab-case-converter.mjson +++ b/core/converter/kebab-case-converter.mjson @@ -1,5 +1,5 @@ { - "converter_descriptor_reference": { + "converter_descriptor": { "object": "core/converter/converter.mjson" }, "root": { @@ -8,7 +8,7 @@ "name": "KebabCaseConverter", "customPrototype": false, "parent": { - "@": "converter_descriptor_reference" + "@": "converter_descriptor" }, "propertyDescriptors": [], "propertyDescriptorGroups": {}, diff --git a/core/converter/lower-case-converter.js b/core/converter/lower-case-converter.js index ec33fc1744..43ca920c24 100644 --- a/core/converter/lower-case-converter.js +++ b/core/converter/lower-case-converter.js @@ -23,7 +23,7 @@ var LowerCaseConverter = exports.LowerCaseConverter = Converter.specialize({ if (!shouldMuteWarning) { deprecate.deprecationWarning( "Instantiating LowerCaseConverter is deprecated," + - " use its Singleton instead" + " use its singleton instead" ); } @@ -63,7 +63,7 @@ var LowerCaseConverter = exports.LowerCaseConverter = Converter.specialize({ }); -Object.defineProperty(exports, 'Singleton', { +Object.defineProperty(exports, 'singleton', { get: function () { if (!singleton) { shouldMuteWarning = true; diff --git a/core/converter/lower-case-converter.mjson b/core/converter/lower-case-converter.mjson index 45580d0a09..2fcc94263e 100644 --- a/core/converter/lower-case-converter.mjson +++ b/core/converter/lower-case-converter.mjson @@ -1,5 +1,5 @@ { - "converter_descriptor_reference": { + "converter_descriptor": { "object": "core/converter/converter.mjson" }, "root": { @@ -8,7 +8,7 @@ "name": "LowerCaseConverter", "customPrototype": false, "parent": { - "@": "converter_descriptor_reference" + "@": "converter_descriptor" }, "propertyDescriptors": [], "propertyDescriptorGroups": {}, diff --git a/core/converter/new-line-to-br-converter.js b/core/converter/new-line-to-br-converter.js index 5cbba5a8db..871d67f622 100644 --- a/core/converter/new-line-to-br-converter.js +++ b/core/converter/new-line-to-br-converter.js @@ -34,7 +34,7 @@ var NewLineToBrConverter = exports.NewLineToBrConverter = Converter.specialize({ if (!shouldMuteWarning) { deprecate.deprecationWarning( "Instantiating NewLineToBrConverter is deprecated," + - " use its Singleton instead" + " use its singleton instead" ); } @@ -74,7 +74,7 @@ var NewLineToBrConverter = exports.NewLineToBrConverter = Converter.specialize({ }); -Object.defineProperty(exports, 'Singleton', { +Object.defineProperty(exports, 'singleton', { get: function () { if (!singleton) { shouldMuteWarning = true; diff --git a/core/converter/new-line-to-br-converter.mjson b/core/converter/new-line-to-br-converter.mjson index 67e7240ae4..44ca8e5111 100644 --- a/core/converter/new-line-to-br-converter.mjson +++ b/core/converter/new-line-to-br-converter.mjson @@ -1,5 +1,5 @@ { - "converter_descriptor_reference": { + "converter_descriptor": { "object": "core/converter/converter.mjson" }, "root": { @@ -8,7 +8,7 @@ "name": "NewLineToBrConverter", "customPrototype": false, "parent": { - "@": "converter_descriptor_reference" + "@": "converter_descriptor" }, "propertyDescriptors": [], "propertyDescriptorGroups": {}, diff --git a/core/converter/number-converter.mjson b/core/converter/number-converter.mjson index 6dee16217e..6e373adf33 100644 --- a/core/converter/number-converter.mjson +++ b/core/converter/number-converter.mjson @@ -65,7 +65,7 @@ "helpKey": "" } }, - "converter_descriptor_reference": { + "converter_descriptor": { "object": "core/converter/converter.mjson" }, "root": { @@ -74,7 +74,7 @@ "name": "NumberConverter", "customPrototype": false, "parent": { - "@": "converter_descriptor_reference" + "@": "converter_descriptor" }, "propertyDescriptors": [ { diff --git a/core/converter/snake-case-converter.js b/core/converter/snake-case-converter.js index 81525b355e..0289299cc8 100644 --- a/core/converter/snake-case-converter.js +++ b/core/converter/snake-case-converter.js @@ -4,8 +4,6 @@ */ var Converter = require("./converter").Converter, snakeCase = require('lodash/fp/snakeCase'), - deprecate = require("../deprecate"), - shouldMuteWarning = false, singleton; /** @@ -23,13 +21,6 @@ var SnakeCaseConverter = exports.SnakeCaseConverter = Converter.specialize({ singleton = this; } - if (!shouldMuteWarning) { - deprecate.deprecationWarning( - "Instantiating SnakeCaseConverter is deprecated," + - " use its Singleton instead" - ); - } - return singleton; } @@ -38,18 +29,14 @@ var SnakeCaseConverter = exports.SnakeCaseConverter = Converter.specialize({ }, convert: { - value: function (v) { - return snakeCase(v); - } + value: snakeCase } }); -Object.defineProperty(exports, 'Singleton', { +Object.defineProperty(exports, 'singleton', { get: function () { if (!singleton) { - shouldMuteWarning = true; singleton = new SnakeCaseConverter(); - shouldMuteWarning = false; } return singleton; diff --git a/core/converter/snake-case-converter.mjson b/core/converter/snake-case-converter.mjson index 5849dccb7a..6e9cdb0410 100644 --- a/core/converter/snake-case-converter.mjson +++ b/core/converter/snake-case-converter.mjson @@ -1,5 +1,5 @@ { - "converter_descriptor_reference": { + "converter_descriptor": { "object": "core/converter/converter.mjson" }, "root": { @@ -8,7 +8,7 @@ "name": "SnakeCaseConverter", "customPrototype": false, "parent": { - "@": "converter_descriptor_reference" + "@": "converter_descriptor" }, "propertyDescriptors": [], "propertyDescriptorGroups": {}, diff --git a/core/converter/trim-converter.js b/core/converter/trim-converter.js index f84db02c44..e802d51ed7 100644 --- a/core/converter/trim-converter.js +++ b/core/converter/trim-converter.js @@ -32,7 +32,7 @@ var TrimConverter = exports.TrimConverter = Converter.specialize({ if (!shouldMuteWarning) { deprecate.deprecationWarning( "Instantiating TrimConverter is deprecated," + - " use its Singleton instead" + " use its singleton instead" ); } @@ -73,7 +73,7 @@ var TrimConverter = exports.TrimConverter = Converter.specialize({ }); -Object.defineProperty(exports, 'Singleton', { +Object.defineProperty(exports, 'singleton', { get: function () { if (!singleton) { shouldMuteWarning = true; diff --git a/core/converter/trim-converter.mjson b/core/converter/trim-converter.mjson index 5683e40b04..9052b42fdc 100644 --- a/core/converter/trim-converter.mjson +++ b/core/converter/trim-converter.mjson @@ -1,5 +1,5 @@ { - "converter_descriptor_reference": { + "converter_descriptor": { "object": "core/converter/converter.mjson" }, "root": { @@ -8,7 +8,7 @@ "name": "TrimConverter", "customPrototype": false, "parent": { - "@": "converter_descriptor_reference" + "@": "converter_descriptor" }, "propertyDescriptors": [], "propertyDescriptorGroups": {}, diff --git a/core/converter/upper-case-converter.js b/core/converter/upper-case-converter.js index 238ad95808..9e4f6bf704 100644 --- a/core/converter/upper-case-converter.js +++ b/core/converter/upper-case-converter.js @@ -23,7 +23,7 @@ var UpperCaseConverter = exports.UpperCaseConverter = Converter.specialize({ if (!shouldMuteWarning) { deprecate.deprecationWarning( "Instantiating UpperCaseConverter is deprecated," + - " use its Singleton instead" + " use its singleton instead" ); } @@ -65,7 +65,7 @@ var UpperCaseConverter = exports.UpperCaseConverter = Converter.specialize({ }); -Object.defineProperty(exports, 'Singleton', { +Object.defineProperty(exports, 'singleton', { get: function () { if (!singleton) { shouldMuteWarning = true; diff --git a/core/converter/upper-case-converter.mjson b/core/converter/upper-case-converter.mjson index 7bac53c5e8..1788689f48 100644 --- a/core/converter/upper-case-converter.mjson +++ b/core/converter/upper-case-converter.mjson @@ -1,5 +1,5 @@ { - "converter_descriptor_reference": { + "converter_descriptor": { "object": "core/converter/converter.mjson" }, "root": { @@ -8,7 +8,7 @@ "name": "UpperCaseConverter", "customPrototype": false, "parent": { - "@": "converter_descriptor_reference" + "@": "converter_descriptor" }, "propertyDescriptors": [], "propertyDescriptorGroups": {}, diff --git a/test/spec/converter-spec.js b/test/spec/converter-spec.js index 5db208e4c0..637010f1a2 100644 --- a/test/spec/converter-spec.js +++ b/test/spec/converter-spec.js @@ -30,19 +30,19 @@ POSSIBILITY OF SUCH DAMAGE. */ var Montage = require("montage").Montage; var Converter= require("montage/core/converter/converter").Converter, -UpperCaseConverter = require("montage/core/converter/upper-case-converter").Singleton, -LowerCaseConverter = require("montage/core/converter/lower-case-converter").Singleton, -TrimConverter = require("montage/core/converter/trim-converter").Singleton, +UpperCaseConverter = require("montage/core/converter/upper-case-converter").singleton, +LowerCaseConverter = require("montage/core/converter/lower-case-converter").singleton, +TrimConverter = require("montage/core/converter/trim-converter").singleton, NumberConverter = require("montage/core/converter/number-converter").NumberConverter, BytesConverter = require("montage/core/converter/bytes-converter").BytesConverter, InvertConverterModule = require("montage/core/converter/invert-converter"), InvertConverter = InvertConverterModule.InvertConverter, -InvertConverterSingleton = InvertConverterModule.Singleton, +InvertConverterSingleton = InvertConverterModule.singleton, DateConverter = require("montage/core/converter/date-converter").DateConverter, ExpressionConverter = require("montage/core/converter/expression-converter").ExpressionConverter, -CamelCaseConverter = require("montage/core/converter/camel-case-converter").Singleton, -SnakeCaseConverter = require("montage/core/converter/snake-case-converter").Singleton, -KebabCaseConverter = require("montage/core/converter/kebab-case-converter").Singleton, +CamelCaseConverter = require("montage/core/converter/camel-case-converter").singleton, +SnakeCaseConverter = require("montage/core/converter/snake-case-converter").singleton, +KebabCaseConverter = require("montage/core/converter/kebab-case-converter").singleton, CurrencyConverter = require("montage/core/converter/currency-converter").CurrencyConverter; describe("converter-spec", function () { From 3a3b66b1ec07295dfb7812cdb46f65b24d1e1fab Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Thu, 3 Aug 2017 18:39:31 -0400 Subject: [PATCH 25/66] Add the ability to bind classList directly on an DOM element. --- core/extras/dom.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/core/extras/dom.js b/core/extras/dom.js index 2f8f9bc648..dbea25536f 100644 --- a/core/extras/dom.js +++ b/core/extras/dom.js @@ -184,4 +184,15 @@ if (typeof Node !== "undefined") { } } }; -} \ No newline at end of file +} + +// Extend DOMTokenList.prototype +if (typeof DOMTokenList !== "undefined") { + var DOMTokenListPrototype = window.DOMTokenList.prototype; + + Object.defineProperty(DOMTokenListPrototype, 'has', { + value: function (key) { + return this.contains(key); + } + }); +} From d5dfec85dd1bda6db2dca43fb96f393e40147281 Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Thu, 3 Aug 2017 19:14:08 -0400 Subject: [PATCH 26/66] Add the ability to set/bind property as DOM attributes. --- core/core.js | 1 + .../deserializer/montage-reviver.js | 126 +++++++++++++++++- package.json | 3 +- 3 files changed, 126 insertions(+), 4 deletions(-) diff --git a/core/core.js b/core/core.js index 04cfce882d..1c8ac6623d 100644 --- a/core/core.js +++ b/core/core.js @@ -11,6 +11,7 @@ require("./extras/element"); require("./extras/function"); require("./extras/regexp"); require("./extras/string"); +require("proxy-polyfill/proxy.min"); var Map = require("collections/map"); diff --git a/core/serialization/deserializer/montage-reviver.js b/core/serialization/deserializer/montage-reviver.js index 8472024e4a..e51326161a 100644 --- a/core/serialization/deserializer/montage-reviver.js +++ b/core/serialization/deserializer/montage-reviver.js @@ -5,6 +5,7 @@ var Montage = require("../../core").Montage, UnitDeserializer = require("./unit-deserializer").UnitDeserializer, ModuleReference = require("../../module-reference").ModuleReference, Alias = require("../alias").Alias, Bindings = require("../bindings"), + WeakMap = require("collections/weak-map"), Promise = require("../../promise").Promise, deprecate = require("../../deprecate"), ONE_ASSIGNMENT = "=", @@ -13,6 +14,8 @@ var Montage = require("../../core").Montage, require("../../shim/string"); +var PROXY_ELEMENT_MAP = new WeakMap(); + var ModuleLoader = Montage.specialize( { _require: {value: null}, _objectRequires: {value: null}, @@ -145,6 +148,119 @@ var MontageReviver = exports.MontageReviver = Montage.specialize(/** @lends Mont } }, + lowerCamelCaseToDashCase: { + value: function (string) { + return string.replace(/([A-Z])/g, function (g) { return '-' + g[0].toLowerCase() }); + } + }, + + setProxyForDatasetOnElement: { + value: function (element, montageObjectDesc) { + var originalDataset = element.dataset; + + if (Object.getPrototypeOf(originalDataset) !== null) { + var datasetAttributes = Object.keys(originalDataset), + targetObject = Object.create(null), self = this, + datasetAttribute, propertyNames; + + if (Proxy.prototype) { // The native Proxy has no prototype property. + // Workaround for Proxy polyfill https://github.com/GoogleChrome/proxy-polyfill + // the properties of a proxy must be known at creation time. + // TODO: remove when we drop the support of IE11. + if (montageObjectDesc.values) { + propertyNames = Object.keys(montageObjectDesc.values); + } else { // deprecated + propertyNames = Object.keys(montageObjectDesc.properties) + .concat(Object.keys(montageObjectDesc.bindings)); + } + + datasetAttributes = datasetAttributes.concat( + propertyNames.filter(function (propertyName) { + return propertyName.startsWith("dataset."); + }) + ); + + for (var i = 0, length = datasetAttributes.length; i < length; i++) { + datasetAttribute = datasetAttributes[i]; + if (originalDataset[datasetAttribute]) { + targetObject[datasetAttribute] = + originalDataset[datasetAttribute]; + } else { + targetObject[datasetAttribute.replace(/^dataset\./, '')] = void 0; + } + } + } + + Object.defineProperty(element, "dataset", { + value: new Proxy(targetObject, { + set: function (target, propertyName, value) { + element.setAttribute('data-' + + self.lowerCamelCaseToDashCase(propertyName), + value + ); + target[propertyName] = value; + originalDataset[propertyName] = value; + return true; + }, + get: function (target, propertyName) { + return target[propertyName]; + } + }) + }); + } + } + }, + + setProxyOnElement: { + value: function (element, montageObjectDesc) { + if (!PROXY_ELEMENT_MAP.has(element)) { + var targetObject = Object.create(null); + + if (Proxy.prototype) { // The native Proxy has no prototype property. + // Workaround for Proxy polyfill https://github.com/GoogleChrome/proxy-polyfill + // the properties of a proxy must be known at creation time. + // TODO: remove when we drop the support of IE11. + var propertyNames, propertyName; + + for (propertyName in element) { + targetObject[propertyName] = void 0; + } + + if (montageObjectDesc.values) { + propertyNames = Object.keys(montageObjectDesc.values); + } else { // deprecated + propertyNames = Object.keys(montageObjectDesc.properties) + .concat(Object.keys(montageObjectDesc.bindings)); + } + + for (var i = 0, length = propertyNames.length; i < length; i++) { + propertyName = propertyNames[i]; + if (!(propertyName in element) && propertyName.indexOf('.') === -1) { + targetObject[propertyName] = void 0; + } + } + } + + PROXY_ELEMENT_MAP.set(element, new Proxy(targetObject, { + set: function (target, propertyName, value) { + if (!(propertyName in Object.getPrototypeOf(element))) { + element.setAttribute(propertyName, value); + target[propertyName] = value; + } + + element[propertyName] = value; + return true; + }, + get: function (target, propertyName) { + return target[propertyName] || element[propertyName]; + } + })); + } + + return PROXY_ELEMENT_MAP.get(element); + } + }, + reviveRootObject: { value: function (value, context, label) { var error, @@ -180,10 +296,14 @@ var MontageReviver = exports.MontageReviver = Montage.specialize(/** @lends Mont if (this.getTypeOf(value.value) === "Element") { if (!Promise.is(revivedValue)) { - var montageObjectDesc = this.reviveObjectLiteral(value, context); - context.setBindingsToDeserialize(revivedValue, montageObjectDesc); + var montageObjectDesc = this.reviveObjectLiteral(value, context), + proxyElement = this.setProxyOnElement(revivedValue, montageObjectDesc); + + this.setProxyForDatasetOnElement(revivedValue, montageObjectDesc); + context.setBindingsToDeserialize(proxyElement, montageObjectDesc); + this.deserializeMontageObjectValues( - revivedValue, + proxyElement, montageObjectDesc.values || montageObjectDesc.properties, //deprecated context ); diff --git a/package.json b/package.json index 4f48ea6c7b..64ccd35250 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,8 @@ "jshint": "^2.9.5", "mr": "^17.0.4", "q-io": "^1.13.3", - "lodash": "4.17.4" + "lodash": "4.17.4", + "proxy-polyfill": "~0.1.7" }, "devDependencies": { "concurrently": "^3.4.0", From cac7e2893813198bfed3066015a74ee08ffd612b Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Thu, 3 Aug 2017 19:14:20 -0400 Subject: [PATCH 27/66] =?UTF-8?q?Add=20specs=20for=20setting/binding=20ele?= =?UTF-8?q?ment=E2=80=99s=20properties?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/all.js | 2 +- .../montage-deserializer-element-spec.js | 57 ++++++++++++++++++- test/spec/ui/slider-spec.js | 3 +- 3 files changed, 58 insertions(+), 4 deletions(-) diff --git a/test/all.js b/test/all.js index 63547f1f63..97737b9f1b 100644 --- a/test/all.js +++ b/test/all.js @@ -81,7 +81,7 @@ module.exports = require("montage-testing").run(require, [ {name: "spec/serialization/montage-serializer-spec"}, {name: "spec/serialization/montage-serializer-element-spec", node: false}, {name: "spec/serialization/montage-deserializer-spec"}, - {name: "spec/serialization/montage-deserializer-element-spec", node: false}, + { name: "spec/serialization/montage-deserializer-element-spec", node: false, karma: false}, // Trigger {name: "spec/trigger/trigger-spec", node: false}, // UI diff --git a/test/spec/serialization/montage-deserializer-element-spec.js b/test/spec/serialization/montage-deserializer-element-spec.js index 153cfdb915..c5c3b9faaf 100644 --- a/test/spec/serialization/montage-deserializer-element-spec.js +++ b/test/spec/serialization/montage-deserializer-element-spec.js @@ -35,6 +35,8 @@ describe("serialization/montage-deserializer-element-spec", function () { deserializer.deserialize(null, rootEl).then(function (objects) { expect(objects.rootEl instanceof Element).toBe(true); + console.log(objects.rootEl instanceof Element) + console.log(objects.rootEl.textContent) expect(objects.rootEl.textContent).toBe("content"); }).finally(function () { done(); @@ -86,7 +88,7 @@ describe("serialization/montage-deserializer-element-spec", function () { } }, serializationString = JSON.stringify(serialization); - + rootEl.innerHTML = '
content
'; deserializer.init(serializationString, require); @@ -98,6 +100,59 @@ describe("serialization/montage-deserializer-element-spec", function () { done(); }); }); + + it("should deserialize an element reference and set its classNames", function (done) { + var serialization = { + "rootEl": { + "value": { "#": "id" }, + "values": { + "foo": true, + "classList.has('foo')": { + "<-": "@rootEl.foo" + } + } + } + }, + serializationString = JSON.stringify(serialization); + + rootEl.innerHTML = '
content
'; + deserializer.init(serializationString, require); + + deserializer.deserialize(null, rootEl).then(function (objects) { + expect(objects.rootEl instanceof Element).toBe(true); + expect(objects.rootEl.classList.contains('foo')).toBe(true); + }).finally(function () { + done(); + }); + }); + + it("should deserialize an element reference and set properties as attributes", function (done) { + var serialization = { + "rootEl": { + "value": { "#": "id" }, + "values": { + "foo": 42, + "qux": "bar", + "dataset.foo": { "=" : "'montage'" } + } + } + }, + serializationString = JSON.stringify(serialization); + + rootEl.innerHTML = '
content
'; + deserializer.init(serializationString, require); + + deserializer.deserialize(null, rootEl).then(function (objects) { + expect(objects.rootEl instanceof Element).toBe(true); + expect(objects.rootEl.getAttribute('foo')).toBe('42'); + expect(objects.rootEl.getAttribute('qux')).toBe('bar'); + expect(objects.rootEl.dataset.foo).toBe('montage'); + expect(objects.rootEl.foo).toBe(42); + expect(objects.rootEl.qux).toBe('bar'); + }).finally(function () { + done(); + }); + }); }); xdescribe("Object Element Deserialization", function () { diff --git a/test/spec/ui/slider-spec.js b/test/spec/ui/slider-spec.js index 94850c6278..705c044df5 100644 --- a/test/spec/ui/slider-spec.js +++ b/test/spec/ui/slider-spec.js @@ -1,7 +1,6 @@ /*global describe, it, expect */ var Montage = require("montage").Montage; var Slider = require("montage/ui/slider.reel").Slider; -var MockDOM = require("mocks/dom"); var MockEvent = require("mocks/event"); describe("test/ui/slider-spec", function () { @@ -20,7 +19,7 @@ describe("test/ui/slider-spec", function () { aSlider; beforeEach(function () { aSlider = new SpecializedSlider(); - aSlider.element = MockDOM.element(); + aSlider.element = document.createElement('div'); }); // Inspired by From 8f3897ae23a6db26ad41bc4b39bbc5e2d7996264 Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Mon, 14 Aug 2017 14:40:23 -0400 Subject: [PATCH 28/66] Remove console.logs --- test/spec/serialization/montage-deserializer-element-spec.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/test/spec/serialization/montage-deserializer-element-spec.js b/test/spec/serialization/montage-deserializer-element-spec.js index c5c3b9faaf..3331fe3378 100644 --- a/test/spec/serialization/montage-deserializer-element-spec.js +++ b/test/spec/serialization/montage-deserializer-element-spec.js @@ -35,8 +35,6 @@ describe("serialization/montage-deserializer-element-spec", function () { deserializer.deserialize(null, rootEl).then(function (objects) { expect(objects.rootEl instanceof Element).toBe(true); - console.log(objects.rootEl instanceof Element) - console.log(objects.rootEl.textContent) expect(objects.rootEl.textContent).toBe("content"); }).finally(function () { done(); From dcf21077dbc6570ada77c320e7b1513e78dcee5e Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Mon, 14 Aug 2017 18:12:18 -0400 Subject: [PATCH 29/66] Wrap setAttribute method in order to keep DOM properties up to date. --- core/extras/element.js | 6 ++++ .../deserializer/montage-reviver.js | 35 ++++++++++++++++--- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/core/extras/element.js b/core/extras/element.js index ddddbd038f..d5b742db0f 100644 --- a/core/extras/element.js +++ b/core/extras/element.js @@ -7,4 +7,10 @@ if (typeof Element !== "undefined" && !Element.isElement) { writable: true, configurable: true }); + + Object.defineProperty(Element.prototype, "nativeSetAttribute", { + value: Element.prototype.setAttribute, + writable: true, + configurable: true + }); } diff --git a/core/serialization/deserializer/montage-reviver.js b/core/serialization/deserializer/montage-reviver.js index e51326161a..c7091dfac0 100644 --- a/core/serialization/deserializer/montage-reviver.js +++ b/core/serialization/deserializer/montage-reviver.js @@ -5,7 +5,6 @@ var Montage = require("../../core").Montage, UnitDeserializer = require("./unit-deserializer").UnitDeserializer, ModuleReference = require("../../module-reference").ModuleReference, Alias = require("../alias").Alias, Bindings = require("../bindings"), - WeakMap = require("collections/weak-map"), Promise = require("../../promise").Promise, deprecate = require("../../deprecate"), ONE_ASSIGNMENT = "=", @@ -150,7 +149,13 @@ var MontageReviver = exports.MontageReviver = Montage.specialize(/** @lends Mont lowerCamelCaseToDashCase: { value: function (string) { - return string.replace(/([A-Z])/g, function (g) { return '-' + g[0].toLowerCase() }); + return string.replace(/([A-Z])/g, function (g) { return '-' + g[0].toLowerCase();}); + } + }, + + dashCaseTolowerCamelCase: { + value: function (string) { + return string.replace(/(-[a-z])/g, function (g, t, y) { return g[1].toUpperCase();}); } }, @@ -194,7 +199,7 @@ var MontageReviver = exports.MontageReviver = Montage.specialize(/** @lends Mont Object.defineProperty(element, "dataset", { value: new Proxy(targetObject, { set: function (target, propertyName, value) { - element.setAttribute('data-' + + element.nativeSetAttribute('data-' + self.lowerCamelCaseToDashCase(propertyName), value ); @@ -244,7 +249,7 @@ var MontageReviver = exports.MontageReviver = Montage.specialize(/** @lends Mont PROXY_ELEMENT_MAP.set(element, new Proxy(targetObject, { set: function (target, propertyName, value) { if (!(propertyName in Object.getPrototypeOf(element))) { - element.setAttribute(propertyName, value); + element.nativeSetAttribute(propertyName, value); target[propertyName] = value; } @@ -261,6 +266,27 @@ var MontageReviver = exports.MontageReviver = Montage.specialize(/** @lends Mont } }, + wrapSetAttributeForElement: { + value: function (element) { + if (element.setAttribute === element.nativeSetAttribute) { + var proxyElement = PROXY_ELEMENT_MAP.get(element), + self = this; + + element.setAttribute = function (key, value) { + var propertyName; + if (key.startsWith('data-')) { + propertyName = self.dashCaseTolowerCamelCase(key.replace('data-', '')); + proxyElement.dataset[propertyName] = value; + } else { + propertyName = self.dashCaseTolowerCamelCase(key); + proxyElement[propertyName] = value; + } + element.nativeSetAttribute(key, value); + } + } + } + }, + reviveRootObject: { value: function (value, context, label) { var error, @@ -300,6 +326,7 @@ var MontageReviver = exports.MontageReviver = Montage.specialize(/** @lends Mont proxyElement = this.setProxyOnElement(revivedValue, montageObjectDesc); this.setProxyForDatasetOnElement(revivedValue, montageObjectDesc); + this.wrapSetAttributeForElement(revivedValue); context.setBindingsToDeserialize(proxyElement, montageObjectDesc); this.deserializeMontageObjectValues( From 855a8acf7844ba4fc31e8556d9c0d0eeb6e291eb Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Tue, 15 Aug 2017 15:31:59 -0400 Subject: [PATCH 30/66] =?UTF-8?q?add=20setter/getter=20on=20properties?= =?UTF-8?q?=E2=80=99=20element.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../deserializer/montage-reviver.js | 25 ++++++++++++++++--- .../montage-deserializer-element-spec.js | 10 +++++++- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/core/serialization/deserializer/montage-reviver.js b/core/serialization/deserializer/montage-reviver.js index c7091dfac0..f3e5576a84 100644 --- a/core/serialization/deserializer/montage-reviver.js +++ b/core/serialization/deserializer/montage-reviver.js @@ -248,12 +248,29 @@ var MontageReviver = exports.MontageReviver = Montage.specialize(/** @lends Mont PROXY_ELEMENT_MAP.set(element, new Proxy(targetObject, { set: function (target, propertyName, value) { - if (!(propertyName in Object.getPrototypeOf(element))) { - element.nativeSetAttribute(propertyName, value); - target[propertyName] = value; + if (!(propertyName in Object.getPrototypeOf(element))) { + if (Object.getOwnPropertyDescriptor(element, propertyName) === void 0) { + Object.defineProperty(element, propertyName, { + set: function (value) { + if (value === null || value === void 0) { + element.removeAttribute(propertyName); + } else { + element.nativeSetAttribute(propertyName, value); + } + + target[propertyName] = value; + }, + get: function () { + return target[propertyName]; + } + }); + } + } + + if (target[propertyName] !== value) { + element[propertyName] = value; } - element[propertyName] = value; return true; }, get: function (target, propertyName) { diff --git a/test/spec/serialization/montage-deserializer-element-spec.js b/test/spec/serialization/montage-deserializer-element-spec.js index 3331fe3378..1ee87b7fb4 100644 --- a/test/spec/serialization/montage-deserializer-element-spec.js +++ b/test/spec/serialization/montage-deserializer-element-spec.js @@ -131,7 +131,9 @@ describe("serialization/montage-deserializer-element-spec", function () { "values": { "foo": 42, "qux": "bar", - "dataset.foo": { "=" : "'montage'" } + "dataset.foo": { "=": "'montage'" }, + "quuz": { "<->": "foo" }, + "baz": { "<->": "quux" } } } }, @@ -146,6 +148,12 @@ describe("serialization/montage-deserializer-element-spec", function () { expect(objects.rootEl.getAttribute('qux')).toBe('bar'); expect(objects.rootEl.dataset.foo).toBe('montage'); expect(objects.rootEl.foo).toBe(42); + expect(objects.rootEl.quuz).toBe(42); + objects.rootEl.foo = 0; + expect(objects.rootEl.foo).toBe(0); + expect(objects.rootEl.quuz).toBe(0); + expect(objects.rootEl.getAttribute('foo')).toBe('0'); + expect(objects.rootEl.getAttribute('baz')).toBe(null); expect(objects.rootEl.qux).toBe('bar'); }).finally(function () { done(); From f4f74c83257d4f0d5862916b7083c488208eceac Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Wed, 16 Aug 2017 17:43:52 -0400 Subject: [PATCH 31/66] Allow to use paths in the property object template and improvements. --- core/serialization/bindings.js | 10 ++++- .../deserializer/montage-interpreter.js | 8 ++-- .../deserializer/montage-reviver.js | 38 ++++++++++++------- .../montage-deserializer-spec.js | 21 ++++++++++ 4 files changed, 59 insertions(+), 18 deletions(-) diff --git a/core/serialization/bindings.js b/core/serialization/bindings.js index dca146577a..c8cd6e68f7 100644 --- a/core/serialization/bindings.js +++ b/core/serialization/bindings.js @@ -87,8 +87,14 @@ var deserializeObjectBindings = exports.deserializeObjectBindings = function (de descriptor = bindings[targetPath]; if (typeof descriptor !== "object") { - throw new Error("Binding descriptor must be an object, not " + typeof descriptor); - // TODO isolate the source document and produce a more useful error + if (targetPath.indexOf('.') === -1) { + throw new Error("Binding descriptor must be an object, not " + typeof descriptor); + // TODO isolate the source document and produce a more useful error + } else { + descriptor = { + "=" : "" + descriptor + }; + } } if (ONE_ASSIGNMENT in descriptor) { diff --git a/core/serialization/deserializer/montage-interpreter.js b/core/serialization/deserializer/montage-interpreter.js index ce46d2a47b..82018efcc4 100644 --- a/core/serialization/deserializer/montage-interpreter.js +++ b/core/serialization/deserializer/montage-interpreter.js @@ -247,12 +247,14 @@ var MontageContext = Montage.specialize({ if (values.hasOwnProperty(key)) { value = values[key]; - if (typeof value === "object" && value && + if ((typeof value === "object" && value && Object.keys(value).length === 1 && - (ONE_WAY in value || TWO_WAY in value || ONE_ASSIGNMENT in value)) { + (ONE_WAY in value || TWO_WAY in value || ONE_ASSIGNMENT in value)) || + key.indexOf('.') > -1 + ) { bindings[key] = value; delete values[key]; - } + } } } diff --git a/core/serialization/deserializer/montage-reviver.js b/core/serialization/deserializer/montage-reviver.js index f3e5576a84..5024af75d8 100644 --- a/core/serialization/deserializer/montage-reviver.js +++ b/core/serialization/deserializer/montage-reviver.js @@ -1,4 +1,4 @@ -/* global console */ +/*global console, Proxy */ var Montage = require("../../core").Montage, ValuesDeserializer = require("./values-deserializer").ValuesDeserializer, SelfDeserializer = require("./self-deserializer").SelfDeserializer, @@ -228,7 +228,9 @@ var MontageReviver = exports.MontageReviver = Montage.specialize(/** @lends Mont var propertyNames, propertyName; for (propertyName in element) { - targetObject[propertyName] = void 0; + if (element.hasOwnProperty(propertyName)) { + targetObject[propertyName] = void 0; + } } if (montageObjectDesc.values) { @@ -299,7 +301,7 @@ var MontageReviver = exports.MontageReviver = Montage.specialize(/** @lends Mont proxyElement[propertyName] = value; } element.nativeSetAttribute(key, value); - } + }; } } }, @@ -335,24 +337,29 @@ var MontageReviver = exports.MontageReviver = Montage.specialize(/** @lends Mont return object; } - var revivedValue = this.reviveValue(value.value, context, label); + var revivedValue = this.reviveValue(value.value, context, label), + valueType = this.getTypeOf(value.value); - if (this.getTypeOf(value.value) === "Element") { + if (valueType === "Element") { if (!Promise.is(revivedValue)) { - var montageObjectDesc = this.reviveObjectLiteral(value, context), - proxyElement = this.setProxyOnElement(revivedValue, montageObjectDesc); - - this.setProxyForDatasetOnElement(revivedValue, montageObjectDesc); + var proxyElement = this.setProxyOnElement(revivedValue, value); + this.setProxyForDatasetOnElement(revivedValue, value); this.wrapSetAttributeForElement(revivedValue); - context.setBindingsToDeserialize(proxyElement, montageObjectDesc); - + context.setBindingsToDeserialize(proxyElement, value); this.deserializeMontageObjectValues( proxyElement, - montageObjectDesc.values || montageObjectDesc.properties, //deprecated + value.values || value.properties, //deprecated context ); - context.setUnitsToDeserialize(revivedValue, montageObjectDesc, MontageReviver._unitNames); } + } else if (valueType === "object") { + context.setBindingsToDeserialize(revivedValue, value); + this.deserializeMontageObjectValues( + revivedValue, + value.values || value.properties, //deprecated + context + ); + context.setUnitsToDeserialize(revivedValue, value, MontageReviver._unitNames); } return revivedValue; @@ -827,6 +834,11 @@ var MontageReviver = exports.MontageReviver = Montage.specialize(/** @lends Mont for (var propertyName in value) { if (value.hasOwnProperty(propertyName)) { + if (value[propertyName] === value) { + // catch object property that point to its parent + return value; + } + item = this.reviveValue(value[propertyName], context); if (Promise.is(item)) { diff --git a/test/spec/serialization/montage-deserializer-spec.js b/test/spec/serialization/montage-deserializer-spec.js index d0d4242990..30c39c7f77 100644 --- a/test/spec/serialization/montage-deserializer-spec.js +++ b/test/spec/serialization/montage-deserializer-spec.js @@ -238,6 +238,27 @@ describe("serialization/montage-deserializer-spec", function () { done(); }); }); + + it("should deserialize a complex key assignment", function (done) { + var serialization = { + "root": { + "value": { + "bar": {} + }, + "values": { + "foo": 10, + "bar.quz": 42 + } + } + }, + serializationString = JSON.stringify(serialization); + deserialize(serializationString, require).then(function (object) { + expect(object.foo).toBe(10); + expect(object.bar.quz).toBe(42); + }).finally(function () { + done(); + }); + }); it("should deserialize a simple one-time assignment in normal form", function (done) { var serialization = { From 084dd16cc260de0dc637d93a882aef34d8d2d598 Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Thu, 17 Aug 2017 11:18:30 -0400 Subject: [PATCH 32/66] =?UTF-8?q?Add=20a=20condition=20before=20defining?= =?UTF-8?q?=20the=20=E2=80=99has=E2=80=99=20method=20on=20DOMTokenList?= =?UTF-8?q?=E2=80=99s=20prototype.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/extras/dom.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/core/extras/dom.js b/core/extras/dom.js index dbea25536f..e3aa5f8830 100644 --- a/core/extras/dom.js +++ b/core/extras/dom.js @@ -190,9 +190,11 @@ if (typeof Node !== "undefined") { if (typeof DOMTokenList !== "undefined") { var DOMTokenListPrototype = window.DOMTokenList.prototype; - Object.defineProperty(DOMTokenListPrototype, 'has', { - value: function (key) { - return this.contains(key); - } - }); + if (typeof DOMTokenListPrototype.has === 'undefined') { + Object.defineProperty(DOMTokenListPrototype, 'has', { + value: function (key) { + return this.contains(key); + } + }); + } } From e6f7b2c24df9499d63a60b6b434f23e29758220b Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Thu, 24 Aug 2017 18:24:59 -0400 Subject: [PATCH 33/66] use camelCase and kebabCase function from lodash instead of ours. --- .../deserializer/montage-reviver.js | 20 +++++-------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/core/serialization/deserializer/montage-reviver.js b/core/serialization/deserializer/montage-reviver.js index 5024af75d8..440d6bad97 100644 --- a/core/serialization/deserializer/montage-reviver.js +++ b/core/serialization/deserializer/montage-reviver.js @@ -7,6 +7,8 @@ var Montage = require("../../core").Montage, Alias = require("../alias").Alias, Bindings = require("../bindings"), Promise = require("../../promise").Promise, deprecate = require("../../deprecate"), + camelCase = require('lodash/fp/camelCase'), + kebabCase = require('lodash/fp/kebabCase'), ONE_ASSIGNMENT = "=", ONE_WAY = "<-", TWO_WAY = "<->"; @@ -147,18 +149,6 @@ var MontageReviver = exports.MontageReviver = Montage.specialize(/** @lends Mont } }, - lowerCamelCaseToDashCase: { - value: function (string) { - return string.replace(/([A-Z])/g, function (g) { return '-' + g[0].toLowerCase();}); - } - }, - - dashCaseTolowerCamelCase: { - value: function (string) { - return string.replace(/(-[a-z])/g, function (g, t, y) { return g[1].toUpperCase();}); - } - }, - setProxyForDatasetOnElement: { value: function (element, montageObjectDesc) { var originalDataset = element.dataset; @@ -200,7 +190,7 @@ var MontageReviver = exports.MontageReviver = Montage.specialize(/** @lends Mont value: new Proxy(targetObject, { set: function (target, propertyName, value) { element.nativeSetAttribute('data-' + - self.lowerCamelCaseToDashCase(propertyName), + kebabCase(propertyName), value ); target[propertyName] = value; @@ -294,10 +284,10 @@ var MontageReviver = exports.MontageReviver = Montage.specialize(/** @lends Mont element.setAttribute = function (key, value) { var propertyName; if (key.startsWith('data-')) { - propertyName = self.dashCaseTolowerCamelCase(key.replace('data-', '')); + propertyName = camelCase(key.replace('data-', '')); proxyElement.dataset[propertyName] = value; } else { - propertyName = self.dashCaseTolowerCamelCase(key); + propertyName = camelCase(key); proxyElement[propertyName] = value; } element.nativeSetAttribute(key, value); From b72a89246837b429145e35e8feb67732a4ba8ac2 Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Thu, 31 Aug 2017 21:14:38 -0400 Subject: [PATCH 34/66] use camelCaseConverter and kebabCaseConverter instead of lodash functions. --- core/serialization/deserializer/montage-reviver.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/core/serialization/deserializer/montage-reviver.js b/core/serialization/deserializer/montage-reviver.js index 440d6bad97..d6490be9f2 100644 --- a/core/serialization/deserializer/montage-reviver.js +++ b/core/serialization/deserializer/montage-reviver.js @@ -7,8 +7,8 @@ var Montage = require("../../core").Montage, Alias = require("../alias").Alias, Bindings = require("../bindings"), Promise = require("../../promise").Promise, deprecate = require("../../deprecate"), - camelCase = require('lodash/fp/camelCase'), - kebabCase = require('lodash/fp/kebabCase'), + camelCaseConverter = require('../../converter/camel-case-converter').singleton, + kebabCaseConverter = require('../../converter/kebab-case-converter').singleton, ONE_ASSIGNMENT = "=", ONE_WAY = "<-", TWO_WAY = "<->"; @@ -190,7 +190,7 @@ var MontageReviver = exports.MontageReviver = Montage.specialize(/** @lends Mont value: new Proxy(targetObject, { set: function (target, propertyName, value) { element.nativeSetAttribute('data-' + - kebabCase(propertyName), + kebabCaseConverter.convert(propertyName), value ); target[propertyName] = value; @@ -284,10 +284,10 @@ var MontageReviver = exports.MontageReviver = Montage.specialize(/** @lends Mont element.setAttribute = function (key, value) { var propertyName; if (key.startsWith('data-')) { - propertyName = camelCase(key.replace('data-', '')); + propertyName = camelCaseConverter.convert(key.replace('data-', '')); proxyElement.dataset[propertyName] = value; } else { - propertyName = camelCase(key); + propertyName = camelCaseConverter.convert(key); proxyElement[propertyName] = value; } element.nativeSetAttribute(key, value); From 50622c7cc22ae1a7ac078feefabfc2cc6957de4f Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Thu, 31 Aug 2017 21:38:20 -0400 Subject: [PATCH 35/66] Fix specs. --- core/converter/converter.js | 9 ++++++--- core/core.js | 8 ++++---- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/core/converter/converter.js b/core/converter/converter.js index 2674684649..245a943fae 100644 --- a/core/converter/converter.js +++ b/core/converter/converter.js @@ -5,7 +5,10 @@ * @module montage/core/converter/converter * @requires montage/core/core */ -var Montage = require("../core").Montage; +var MontageModule = require("../core"), + Montage = MontageModule.Montage, + objectDescriptorModuleIdDescriptor = MontageModule._objectDescriptorModuleIdDescriptor, + objectDescriptorDescriptor = MontageModule._objectDescriptorDescriptor; /** * @const {string} @@ -105,9 +108,9 @@ var Converter = exports.Converter = Montage.specialize( /** @lends Converter# */ }, { - objectDescriptorModuleId: require("../core")._objectDescriptorModuleIdDescriptor, + objectDescriptorModuleId: objectDescriptorModuleIdDescriptor, - objectDescriptor: require("../core")._objectDescriptorDescriptor + objectDescriptor: objectDescriptorDescriptor }); diff --git a/core/core.js b/core/core.js index 1c8ac6623d..20c2118ab9 100644 --- a/core/core.js +++ b/core/core.js @@ -1611,10 +1611,6 @@ var pathPropertyDescriptors = { Montage.defineProperties(Montage, pathPropertyDescriptors); Montage.defineProperties(Montage.prototype, pathPropertyDescriptors); -// has to come last since serializer and deserializer depend on logger, which -// in turn depends on montage running to completion -require("./serialization/bindings"); - /* * Defines the module Id for object descriptors. This is externalized so that it can be subclassed. * Note This is a class method beware... @@ -1728,3 +1724,7 @@ exports._objectDescriptorDescriptor = { * @deprecated use exports._objectDescriptorDescriptor */ exports._blueprintDescriptor = exports._objectDescriptorDescriptor; + +// has to come last since serializer and deserializer depend on logger, which +// in turn depends on montage running to completion +require("./serialization/bindings"); From 1a87361571be50f02c72ad4af3a122f5d17ee2ea Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Wed, 12 Jul 2017 15:54:08 -0400 Subject: [PATCH 36/66] Initial support of montage-element. --- core/event/event-manager.js | 90 +++++++++++---- core/template.js | 12 +- montage.js | 225 +++++++++++++++++++++++++++++++----- ui/component.js | 9 +- 4 files changed, 272 insertions(+), 64 deletions(-) diff --git a/core/event/event-manager.js b/core/event/event-manager.js index 54803d1c82..7704df278e 100644 --- a/core/event/event-manager.js +++ b/core/event/event-manager.js @@ -560,6 +560,15 @@ var EventManager = exports.EventManager = Montage.specialize(/** @lends EventMan aWindow.document.nativeAddEventListener = aWindow.document.addEventListener; aWindow.XMLHttpRequest.prototype.nativeAddEventListener = aWindow.XMLHttpRequest.prototype.addEventListener; + + if (aWindow.DocumentFragment) { + aWindow.DocumentFragment.prototype.nativeAddEventListener = aWindow.DocumentFragment.prototype.addEventListener; + } + + if (aWindow.ShadowRoot) { + aWindow.ShadowRoot.prototype.nativeAddEventListener = aWindow.ShadowRoot.prototype.addEventListener; + } + if (aWindow.Worker) { aWindow.Worker.prototype.nativeAddEventListener = aWindow.Worker.prototype.addEventListener; } @@ -575,6 +584,15 @@ var EventManager = exports.EventManager = Montage.specialize(/** @lends EventMan aWindow.document.nativeRemoveEventListener = aWindow.document.removeEventListener; aWindow.XMLHttpRequest.prototype.nativeRemoveEventListener = aWindow.XMLHttpRequest.prototype.removeEventListener; + + if (aWindow.DocumentFragment) { + aWindow.DocumentFragment.prototype.nativeRemoveEventListener = aWindow.DocumentFragment.prototype.removeEventListener; + } + + if (aWindow.ShadowRoot) { + aWindow.ShadowRoot.prototype.nativeRemoveEventListener = aWindow.ShadowRoot.prototype.removeEventListener; + } + if (aWindow.Worker) { aWindow.Worker.prototype.nativeRemoveEventListener = aWindow.Worker.prototype.removeEventListener; } @@ -1167,7 +1185,10 @@ var EventManager = exports.EventManager = Montage.specialize(/** @lends EventMan if (bubbles) { // TODO why on the document and not the window? - return /* isWindow*/target.screen ? target.document : target.ownerDocument; + var shadowRoot; + return /* isWindow*/target.screen ? target.document : + (shadowRoot = this._getShawdowRootFromNode(target)) ? + shadowRoot : target.ownerDocument; } else { return target; } @@ -1176,6 +1197,18 @@ var EventManager = exports.EventManager = Montage.specialize(/** @lends EventMan } }, + _getShawdowRootFromNode: { + value: function isInShadow(node) { + var parent = (node && node.parentNode); + while (parent) { + if (parent.toString() === "[object ShadowRoot]") { + return parent; + } + parent = parent.parentNode; + } + } + }, + /** * @private */ @@ -1277,29 +1310,8 @@ var EventManager = exports.EventManager = Montage.specialize(/** @lends EventMan } }; } - - // The EventManager needs to handle "gateway/pointer/activation events" that we - // haven't let children listen for yet - // when the EM handles them eventually it will need to allow - // all components from the event target to the window to prepareForActivationEvents - // before finding event handlers that were registered for these events - if (aWindow.PointerEvent) { - aWindow.nativeAddEventListener("pointerdown", this._activationHandler, true); - aWindow.document.nativeAddEventListener("pointerenter", this._activationHandler, true); - - } else if (aWindow.MSPointerEvent && aWindow.navigator.msPointerEnabled) { - aWindow.nativeAddEventListener("MSPointerDown", this._activationHandler, true); - // IE10 has no support for pointerenter or pointerleave events. - aWindow.document.nativeAddEventListener("mouseenter", this._activationHandler, true); - - } else { - aWindow.nativeAddEventListener("touchstart", this._activationHandler, true); - aWindow.nativeAddEventListener("mousedown", this._activationHandler, true); - // mouseenter events are not dispatched from window under Chrome and Safari. - aWindow.document.nativeAddEventListener("mouseenter", this._activationHandler, true); - } - - aWindow.nativeAddEventListener("focus", this._activationHandler, true); + + this.registerTargetForActivation(aWindow); if (this.application) { @@ -1309,9 +1321,37 @@ var EventManager = exports.EventManager = Montage.specialize(/** @lends EventMan for (eventType in applicationLevelEvents) { if (applicationLevelEvents.hasOwnProperty(eventType)) { this._observeTarget_forEventType_(aWindow, eventType); - } + } } } + }, + + registerTargetForActivation: { + value: function (target) { + var _document = target instanceof Window ? target.document : target; + // The EventManager needs to handle "gateway/pointer/activation events" that we + // haven't let children listen for yet + // when the EM handles them eventually it will need to allow + // all components from the event target to the window to prepareForActivationEvents + // before finding event handlers that were registered for these events + if (window.PointerEvent) { + target.nativeAddEventListener("pointerdown", this._activationHandler, true); + _document.nativeAddEventListener("pointerenter", this._activationHandler, true); + + } else if (window.MSPointerEvent && window.navigator.msPointerEnabled) { + target.nativeAddEventListener("MSPointerDown", this._activationHandler, true); + // IE10 has no support for pointerenter or pointerleave events. + _document.nativeAddEventListener("mouseenter", this._activationHandler, true); + + } else { + target.nativeAddEventListener("touchstart", this._activationHandler, true); + target.nativeAddEventListener("mousedown", this._activationHandler, true); + // mouseenter events are not dispatched from window under Chrome and Safari. + _document.nativeAddEventListener("mouseenter", this._activationHandler, true); + } + + target.nativeAddEventListener("focus", this._activationHandler, true); + } } }, diff --git a/core/template.js b/core/template.js index 859ec5bd59..8514053056 100644 --- a/core/template.js +++ b/core/template.js @@ -304,19 +304,19 @@ var Template = Montage.specialize( /** @lends Template# */ { return this._instantiateObjects(templateObjects, fragment) .then(function (objects) { - var resources; + var resources = self.getResources(); - part.objects = objects; - self._invokeDelegates(part, instances); - part.stopActingAsTopComponent(); - - resources = self.getResources(); if (!resources.resourcesLoaded() && resources.hasResources()) { // Start preloading the resources as soon as possible, no // need to wait for them as the draw cycle will take care // of that when loading the stylesheets into the document. resources.loadResources(targetDocument); } + + part.objects = objects; + self._invokeDelegates(part, instances); + part.stopActingAsTopComponent(); + return part; }); } diff --git a/montage.js b/montage.js index f2021603d0..3b76adb4ff 100644 --- a/montage.js +++ b/montage.js @@ -318,17 +318,18 @@ var Promise = montageRequire("core/promise").Promise; var deepLoadPromises = []; + var self = this; - for(var i=0,iDependency;(iDependency = dependencies[i]);i++) { - deepLoadPromises.push(montageRequire.deepLoad(iDependency)); + for (var i = 0, iDependency; (iDependency = dependencies[i]); i++) { + deepLoadPromises.push(montageRequire.deepLoad(iDependency)); } return Promise.all(deepLoadPromises) - .then(function () { + .then(function () { - for(var i=0,iDependency;(iDependency = dependencies[i]);i++) { - montageRequire(iDependency); - } + for (var i = 0, iDependency; (iDependency = dependencies[i]); i++) { + montageRequire(iDependency); + } var Montage = montageRequire("core/core").Montage; var EventManager = montageRequire("core/event/event-manager").EventManager; @@ -336,43 +337,203 @@ var MontageReviver = montageRequire("core/serialization/deserializer/montage-reviver").MontageReviver; var logger = montageRequire("core/logger").logger; - var application; + // montageWillLoad is mostly for testing purposes + if (typeof global.montageWillLoad === "function") { + global.montageWillLoad(); + } - // montageWillLoad is mostly for testing purposes - if (typeof global.montageWillLoad === "function") { - global.montageWillLoad(); - } + // Load the application + + var appProto = applicationRequire.packageDescription.applicationPrototype, + applicationLocation, appModulePromise; + + if (appProto) { + applicationLocation = MontageReviver.parseObjectLocationId(appProto); + appModulePromise = applicationRequire.async(applicationLocation.moduleId); + } else { + appModulePromise = montageRequire.async("core/application"); + } + + return appModulePromise.then(function (exports) { + var Application = exports[(applicationLocation ? applicationLocation.objectName : "Application")]; + application = new Application(); + defaultEventManager.application = application; + application.eventManager = defaultEventManager; + self.initMontageCustomElement(applicationRequire, montageRequire, application); + + return application._load(applicationRequire, function () { + if (params.module) { + // If a module was specified in the config then we initialize it now + applicationRequire.async(params.module); + } + if (typeof global.montageDidLoad === "function") { + global.montageDidLoad(); + } + }); + }); + + }); + + }, + + initMontageCustomElement: function (applicationRequire, montageRequire, application) { + var MontageElement = function () { + return Reflect.construct( + HTMLElement, [], MontageElement + ); + }; - // Load the application + MontageElement.prototype.__proto__ = HTMLElement.prototype; + MontageElement.__proto__ = HTMLElement; - var appProto = applicationRequire.packageDescription.applicationPrototype, - applicationLocation, appModulePromise; - if (appProto) { - applicationLocation = MontageReviver.parseObjectLocationId(appProto); - appModulePromise = applicationRequire.async(applicationLocation.moduleId); + MontageElement.prototype.connectedCallback = function () { + if (!this.__montageComponent__) { + var self = this; + this.startListenToAttibuteChanges(); + + return this.getRootComponent().then(function (rootComponent) { + return self.instantiateComponent().then(function (component) { + self.__montageComponent__ = component; + rootComponent.addChildComponent(component); + component._canDrawOutsideDocument = true; + component.needsDraw = true; + }); + }); } else { - appModulePromise = montageRequire.async("core/application"); + this.listenToAttibuteChanges(); } + }; - return appModulePromise.then(function (exports) { - var Application = exports[(applicationLocation ? applicationLocation.objectName : "Application")]; - application = new Application(); - defaultEventManager.application = application; - application.eventManager = defaultEventManager; + MontageElement.prototype.disconnectedCallback = function () { + this._attributesObserver.disconnect(); + }; - return application._load(applicationRequire, function() { - if (params.module) { - // If a module was specified in the config then we initialize it now - applicationRequire.async(params.module); - } - if (typeof global.montageDidLoad === "function") { - global.montageDidLoad(); - } + MontageElement.prototype.getRootComponent = function () { + if (!MontageElement.rootComponentPromise) { + MontageElement.rootComponentPromise = montageRequire.async("ui/component") + .then(function (exports) { + return exports.__root__; + }); + } + + return MontageElement.rootComponentPromise; + }; + + MontageElement.prototype.startListenToAttibuteChanges = function () { + if (!this._attributesObserver) { + var self = this; + this._attributesObserver = new MutationObserver(function (mutations) { + mutations.forEach(function (mutation) { + var attributeName = mutation.attributeName; + + if (attributeName.startsWith('data-') && + attributeName !== "data-module-id") { + + attributeName = attributeName.replace(/^data-/, ""); + this.handleAttributeChanged( + attributeName, + this.dataset[attributeName] + ); + } + }, self); }); + } + + this._attributesObserver.observe(this, { + attributes: true }); + }; - }); + MontageElement.prototype.instantiateComponent = function () { + var moduleId = this.getAttribute('data-module-id'), + self = this; + + if (!moduleId) { + throw new Error( + "data-module-id attribute missing on montage-element" + ); + } + + return applicationRequire.async(moduleId).then(function (exports) { + var component = new exports[Object.keys(exports)[0]](); + self. bootstrapComponent(component); + component.element = document.createElement("div"); + return component; + }); + }; + + MontageElement.prototype.bootstrapComponent = function (component) { + var shadowRoot = this.attachShadow({ mode: 'open' }), + mainEnterDocument = component.enterDocument, + mainTemplateDidLoad = component.templateDidLoad, + self = this; + + application.eventManager.registerTargetForActivation(shadowRoot); + + component.templateDidLoad = function () { + var resources = component.getResources(); + + if (resources) { + self.injectResourcesWithinCustomElement( + resources.styles, + shadowRoot + ); + + self.injectResourcesWithinCustomElement( + resources.scripts, + shadowRoot + ); + } + + var keys = Object.keys(self.dataset), + key; + + for (var i = 0, length = keys.length; i < length; i++) { + key = keys[i]; + if (key !== "moduleId") { + component.defineBinding( + key, + { + "<->": key, + source: self.dataset + } + ); + } + } + + this.templateDidLoad = mainTemplateDidLoad; + + if (typeof templateDidLoad === "function") { + this.templateDidLoad(firstTime); + } + }; + + component.enterDocument = function (firstTime) { + shadowRoot.appendChild(this.element); + this.enterDocument = mainEnterDocument; + + if (typeof enterDocument === "function") { + this.enterDocument(firstTime); + } + }; + }; + + MontageElement.prototype.injectResourcesWithinCustomElement = function (resources, shadowRoot) { + if (resources && resources.length) { + for (var i = 0, length = resources.length; i < length; i++) { + shadowRoot.appendChild(resources[i]); + } + } + }; + + MontageElement.prototype.handleAttributeChanged = function (attributeName, newValue) { + if (this.dataset[attributeName] && this.__montageComponent__ && + this.__montageComponent__[attributeName] != newValue) { + this.__montageComponent__[attributeName] = newValue; + } + }; + customElements.define("montage-element", MontageElement); } }; diff --git a/ui/component.js b/ui/component.js index 2bedaf9c9c..5145ca6894 100644 --- a/ui/component.js +++ b/ui/component.js @@ -390,13 +390,20 @@ var Component = exports.Component = Target.specialize(/** @lends Component.proto this._setupTemplateObjects(this._templateDocumentPart.objects); } return this._templateObjects; - // return this._templateObjects || (this._templateDocumentPart ? this._setupTemplateObjects(this._templateDocumentPart.objects) : (this._templateObjects = Object.create(null))); }, set: function(value) { this._templateObjects = value; } }, + getResources: { + value: function () { + if (!this._setupTemplateObjectsCompleted && this._templateDocumentPart) { + return this._templateDocumentPart.template.getResources()._resources; + } + } + }, + /** * @private * @property {Target} value From 532c1c699d692c6ffc6b8a3efe41cddb331c2d6d Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Thu, 13 Jul 2017 15:41:27 -0400 Subject: [PATCH 37/66] Better support for the press composer of montage-element --- composer/composer.js | 16 +++++++++- composer/press-composer.js | 59 +++++++++++++++++++++++++++++++++++++ core/event/event-manager.js | 24 ++++++++------- montage.js | 6 +++- 4 files changed, 92 insertions(+), 13 deletions(-) diff --git a/composer/composer.js b/composer/composer.js index a0b7e55f3c..4216a15c55 100644 --- a/composer/composer.js +++ b/composer/composer.js @@ -2,7 +2,8 @@ * @module montage/composer/composer * @requires montage/core/target */ -var Target = require("../core/target").Target; +var Target = require("../core/target").Target, + defaultEventManager = require("../core/event/event-manager").defaultEventManager; /** * The `Composer` helps to keep event normalization and calculation out of @@ -69,6 +70,19 @@ exports.Composer = Target.specialize( /** @lends Composer# */ { } }, + _shawdowRoot: { + value: null + }, + + shawdowRoot: { + get: function () { + if (!this._shawdowRoot) { + this._shawdowRoot = defaultEventManager.getShawdowRootFromNode(this.element); + } + return this._shawdowRoot; + } + }, + /** * This property controls when the component will call this composer's diff --git a/composer/press-composer.js b/composer/press-composer.js index 9d53ef5c98..5500c2a99b 100644 --- a/composer/press-composer.js +++ b/composer/press-composer.js @@ -693,17 +693,35 @@ var PressComposer = exports.PressComposer = Composer.specialize(/** @lends Press _addEventListeners: { value: function () { if (window.PointerEvent) { + if (this.shawdowRoot) { + this.shawdowRoot.addEventListener("pointerup", this, false); + this.shawdowRoot.addEventListener("pointermove", this, false); + this.shawdowRoot.addEventListener("pointercancel", this, false); + } + document.addEventListener("pointerup", this, false); document.addEventListener("pointermove", this, false); document.addEventListener("pointercancel", this, false); } else if (window.MSPointerEvent && window.navigator.msPointerEnabled) { + if (this.shawdowRoot) { + this.shawdowRoot.addEventListener("MSPointerUp", this, false); + this.shawdowRoot.addEventListener("MSPointerMove", this, false); + this.shawdowRoot.addEventListener("MSPointerCancel", this, false); + } + document.addEventListener("MSPointerUp", this, false); document.addEventListener("MSPointerMove", this, false); document.addEventListener("MSPointerCancel", this, false); } else { if (this._observedPointer === "mouse") { + if (this.shawdowRoot) { + this.shawdowRoot.addEventListener("mouseup", this, false); + this.shawdowRoot.addEventListener("mousemove", this, false); + this.shawdowRoot.addEventListener("dragstart", this, false); + } + document.addEventListener("mouseup", this, false); document.addEventListener("mousemove", this, false); @@ -713,6 +731,12 @@ var PressComposer = exports.PressComposer = Composer.specialize(/** @lends Press this._element.addEventListener("dragstart", this, false); } else { + if (this.shawdowRoot) { + this.shawdowRoot.addEventListener("touchend", this, false); + this.shawdowRoot.addEventListener("touchcancel", this, false); + this.shawdowRoot.addEventListener("touchmove", this, false); + } + document.addEventListener("touchend", this, false); document.addEventListener("touchcancel", this, false); document.addEventListener("touchmove", this, false); @@ -721,6 +745,11 @@ var PressComposer = exports.PressComposer = Composer.specialize(/** @lends Press var wheelEventName = typeof window.onwheel !== "undefined" || typeof window.WheelEvent !== "undefined" ? "wheel" : "mousewheel"; + + if (this.shawdowRoot) { + this.shawdowRoot.addEventListener(wheelEventName, this, true); + this.shawdowRoot.addEventListener("scroll", this, true); + } document.addEventListener(wheelEventName, this, true); document.addEventListener("scroll", this, true); @@ -730,17 +759,35 @@ var PressComposer = exports.PressComposer = Composer.specialize(/** @lends Press _removeEventListeners: { value: function () { if (window.PointerEvent) { + if (this.shawdowRoot) { + this.shawdowRoot.removeEventListener("pointerup", this, false); + this.shawdowRoot.removeEventListener("pointermove", this, false); + this.shawdowRoot.removeEventListener("pointercancel", this, false); + } + document.removeEventListener("pointerup", this, false); document.removeEventListener("pointermove", this, false); document.removeEventListener("pointercancel", this, false); } else if (window.MSPointerEvent && window.navigator.msPointerEnabled) { + if (this.shawdowRoot) { + this.shawdowRoot.removeEventListener("MSPointerUp", this, false); + this.shawdowRoot.removeEventListener("MSPointerMove", this, false); + this.shawdowRoot.removeEventListener("MSPointerCancel", this, false); + } + document.removeEventListener("MSPointerUp", this, false); document.removeEventListener("MSPointerMove", this, false); document.removeEventListener("MSPointerCancel", this, false); } else { if (this._observedPointer === "mouse") { + if (this.shawdowRoot) { + this.shawdowRoot.removeEventListener("mouseup", this, false); + this.shawdowRoot.removeEventListener("mousemove", this, false); + this.shawdowRoot.removeEventListener("dragstart", this, false); + } + document.removeEventListener("mouseup", this, false); document.removeEventListener("mousemove", this, false); @@ -748,8 +795,15 @@ var PressComposer = exports.PressComposer = Composer.specialize(/** @lends Press // no mouse events are fired // http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#initiate-the-drag-and-drop-operation this._element.removeEventListener("dragstart", this, false); + } else { + if (this.shawdowRoot) { + this.shawdowRoot.removeEventListener("touchend", this, false); + this.shawdowRoot.removeEventListener("touchcancel", this, false); + this.shawdowRoot.removeEventListener("touchmove", this, false); + } + document.removeEventListener("touchend", this, false); document.removeEventListener("touchcancel", this, false); document.removeEventListener("touchmove", this, false); @@ -758,6 +812,11 @@ var PressComposer = exports.PressComposer = Composer.specialize(/** @lends Press var wheelEventName = typeof window.onwheel !== "undefined" || typeof window.WheelEvent !== "undefined" ? "wheel" : "mousewheel"; + + if (this.shawdowRoot) { + this.shawdowRoot.removeEventListener(wheelEventName, this, true); + this.shawdowRoot.removeEventListener("scroll", this, true); + } document.removeEventListener(wheelEventName, this, true); document.removeEventListener("scroll", this, true); diff --git a/core/event/event-manager.js b/core/event/event-manager.js index 7704df278e..0651ab0802 100644 --- a/core/event/event-manager.js +++ b/core/event/event-manager.js @@ -584,7 +584,7 @@ var EventManager = exports.EventManager = Montage.specialize(/** @lends EventMan aWindow.document.nativeRemoveEventListener = aWindow.document.removeEventListener; aWindow.XMLHttpRequest.prototype.nativeRemoveEventListener = aWindow.XMLHttpRequest.prototype.removeEventListener; - + if (aWindow.DocumentFragment) { aWindow.DocumentFragment.prototype.nativeRemoveEventListener = aWindow.DocumentFragment.prototype.removeEventListener; } @@ -1187,24 +1187,24 @@ var EventManager = exports.EventManager = Montage.specialize(/** @lends EventMan // TODO why on the document and not the window? var shadowRoot; return /* isWindow*/target.screen ? target.document : - (shadowRoot = this._getShawdowRootFromNode(target)) ? + (shadowRoot = this.getShawdowRootFromNode(target)) ? shadowRoot : target.ownerDocument; } else { return target; } } - } }, - _getShawdowRootFromNode: { + getShawdowRootFromNode: { value: function isInShadow(node) { - var parent = (node && node.parentNode); - while (parent) { - if (parent.toString() === "[object ShadowRoot]") { - return parent; + if (window.ShadowRoot) { + while (node) { + if (node.toString() === "[object ShadowRoot]") { + return node; + } + node = node.parentNode; } - parent = parent.parentNode; } } }, @@ -2402,10 +2402,10 @@ var EventManager = exports.EventManager = Montage.specialize(/** @lends EventMan break; } } - return identifier; } }, + /** * @function @@ -2428,6 +2428,7 @@ var EventManager = exports.EventManager = Montage.specialize(/** @lends EventMan } }, + // Event Handling /** * @property @@ -2467,7 +2468,8 @@ var EventManager = exports.EventManager = Montage.specialize(/** @lends EventMan handleEvent: { enumerable: false, value: function (event) { - if (event instanceof UIEvent && !this._shouldDispatchEvent(event)) { + if ((window.MontageElement && event.target instanceof MontageElement) || + (event instanceof UIEvent && !this._shouldDispatchEvent(event))) { return void 0; } diff --git a/montage.js b/montage.js index 3b76adb4ff..8e1ac7fdca 100644 --- a/montage.js +++ b/montage.js @@ -377,7 +377,11 @@ }, initMontageCustomElement: function (applicationRequire, montageRequire, application) { - var MontageElement = function () { + if (typeof window.customElements === "undefined") { + return void 0; + } + + var MontageElement = window.MontageElement = function () { return Reflect.construct( HTMLElement, [], MontageElement ); From 344a3a6c412ef5cd8ec8137a5adcf2c0d7d34788 Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Fri, 14 Jul 2017 16:52:32 -0400 Subject: [PATCH 38/66] Better outbound/inbound data-* bindings on a montage element --- montage.js | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/montage.js b/montage.js index 8e1ac7fdca..1a527a5ccf 100644 --- a/montage.js +++ b/montage.js @@ -495,13 +495,8 @@ for (var i = 0, length = keys.length; i < length; i++) { key = keys[i]; if (key !== "moduleId") { - component.defineBinding( - key, - { - "<->": key, - source: self.dataset - } - ); + this[key] = self.dataset[key]; + this.addPathChangeListener(key, self, "handleValueChange"); } } @@ -537,6 +532,27 @@ } }; + + MontageElement.prototype.handleValueChange = function (newValue, attributeName) { + if (this.dataset[attributeName] != newValue) { + var oldValue = this.dataset[attributeName]; + this.dataset[attributeName] = newValue; + + this.dispatchEvent(new CustomEvent( + 'dataAttributeChange', + { + cancelable: true, + bubbles: true, + detail: { + attribute: "data-" + attributeName, + oldValue: oldValue, + newValue: this.dataset[attributeName] + } + } + )) + } + } + customElements.define("montage-element", MontageElement); } }; From b46f3e4f4fd761a4f29c951b774c83830841014b Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Mon, 17 Jul 2017 11:56:35 -0400 Subject: [PATCH 39/66] Add support of component without template within the custom montage element. --- montage.js | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/montage.js b/montage.js index 1a527a5ccf..3e3c2ad4b8 100644 --- a/montage.js +++ b/montage.js @@ -460,7 +460,7 @@ return applicationRequire.async(moduleId).then(function (exports) { var component = new exports[Object.keys(exports)[0]](); - self. bootstrapComponent(component); + self.bootstrapComponent(component); component.element = document.createElement("div"); return component; }); @@ -470,7 +470,18 @@ var shadowRoot = this.attachShadow({ mode: 'open' }), mainEnterDocument = component.enterDocument, mainTemplateDidLoad = component.templateDidLoad, - self = this; + keys = Object.keys(this.dataset), + self = this, + key; + + for (var i = 0, length = keys.length; i < length; i++) { + key = keys[i]; + + if (key !== "moduleId") { + component[key] = this.dataset[key]; + component.addPathChangeListener(key, this, "handleValueChange"); + } + } application.eventManager.registerTargetForActivation(shadowRoot); @@ -489,20 +500,9 @@ ); } - var keys = Object.keys(self.dataset), - key; - - for (var i = 0, length = keys.length; i < length; i++) { - key = keys[i]; - if (key !== "moduleId") { - this[key] = self.dataset[key]; - this.addPathChangeListener(key, self, "handleValueChange"); - } - } - this.templateDidLoad = mainTemplateDidLoad; - if (typeof templateDidLoad === "function") { + if (typeof this.templateDidLoad === "function") { this.templateDidLoad(firstTime); } }; @@ -511,7 +511,7 @@ shadowRoot.appendChild(this.element); this.enterDocument = mainEnterDocument; - if (typeof enterDocument === "function") { + if (typeof this.enterDocument === "function") { this.enterDocument(firstTime); } }; From 3cc5fcc767dcdf27524e2eb12b0b655cc33970f7 Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Fri, 25 Aug 2017 17:07:21 -0400 Subject: [PATCH 40/66] Fix bad rebasing --- core/event/event-manager.js | 50 ++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/core/event/event-manager.js b/core/event/event-manager.js index 0651ab0802..2baa948ff6 100644 --- a/core/event/event-manager.js +++ b/core/event/event-manager.js @@ -1324,36 +1324,36 @@ var EventManager = exports.EventManager = Montage.specialize(/** @lends EventMan } } } - }, - - registerTargetForActivation: { - value: function (target) { - var _document = target instanceof Window ? target.document : target; - // The EventManager needs to handle "gateway/pointer/activation events" that we - // haven't let children listen for yet - // when the EM handles them eventually it will need to allow - // all components from the event target to the window to prepareForActivationEvents - // before finding event handlers that were registered for these events - if (window.PointerEvent) { - target.nativeAddEventListener("pointerdown", this._activationHandler, true); - _document.nativeAddEventListener("pointerenter", this._activationHandler, true); - - } else if (window.MSPointerEvent && window.navigator.msPointerEnabled) { - target.nativeAddEventListener("MSPointerDown", this._activationHandler, true); - // IE10 has no support for pointerenter or pointerleave events. - _document.nativeAddEventListener("mouseenter", this._activationHandler, true); + } + }, - } else { - target.nativeAddEventListener("touchstart", this._activationHandler, true); - target.nativeAddEventListener("mousedown", this._activationHandler, true); - // mouseenter events are not dispatched from window under Chrome and Safari. - _document.nativeAddEventListener("mouseenter", this._activationHandler, true); - } + registerTargetForActivation: { + value: function (target) { + var _document = target instanceof Window ? target.document : target; + // The EventManager needs to handle "gateway/pointer/activation events" that we + // haven't let children listen for yet + // when the EM handles them eventually it will need to allow + // all components from the event target to the window to prepareForActivationEvents + // before finding event handlers that were registered for these events + if (window.PointerEvent) { + target.nativeAddEventListener("pointerdown", this._activationHandler, true); + _document.nativeAddEventListener("pointerenter", this._activationHandler, true); + + } else if (window.MSPointerEvent && window.navigator.msPointerEnabled) { + target.nativeAddEventListener("MSPointerDown", this._activationHandler, true); + // IE10 has no support for pointerenter or pointerleave events. + _document.nativeAddEventListener("mouseenter", this._activationHandler, true); - target.nativeAddEventListener("focus", this._activationHandler, true); + } else { + target.nativeAddEventListener("touchstart", this._activationHandler, true); + target.nativeAddEventListener("mousedown", this._activationHandler, true); + // mouseenter events are not dispatched from window under Chrome and Safari. + _document.nativeAddEventListener("mouseenter", this._activationHandler, true); } + target.nativeAddEventListener("focus", this._activationHandler, true); } + }, /** From f0d559229b8f6130e2ff1b5410c0ac700cde6dcd Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Fri, 25 Aug 2017 17:13:38 -0400 Subject: [PATCH 41/66] Allow to define custom montage element by specifying a tag name and a component. --- montage.js | 407 ++++++++++++++++++++++++++++++----------------------- 1 file changed, 232 insertions(+), 175 deletions(-) diff --git a/montage.js b/montage.js index 3e3c2ad4b8..50dbf7759a 100644 --- a/montage.js +++ b/montage.js @@ -324,238 +324,294 @@ deepLoadPromises.push(montageRequire.deepLoad(iDependency)); } - return Promise.all(deepLoadPromises) - .then(function () { - - for (var i = 0, iDependency; (iDependency = dependencies[i]); i++) { - montageRequire(iDependency); - } + return Promise.all(deepLoadPromises).then(function () { + for (var i = 0, iDependency; (iDependency = dependencies[i]); i++) { + montageRequire(iDependency); + } var Montage = montageRequire("core/core").Montage; var EventManager = montageRequire("core/event/event-manager").EventManager; var defaultEventManager = montageRequire("core/event/event-manager").defaultEventManager; var MontageReviver = montageRequire("core/serialization/deserializer/montage-reviver").MontageReviver; var logger = montageRequire("core/logger").logger; + var application; - // montageWillLoad is mostly for testing purposes - if (typeof global.montageWillLoad === "function") { - global.montageWillLoad(); - } + // montageWillLoad is mostly for testing purposes + if (typeof global.montageWillLoad === "function") { + global.montageWillLoad(); + } - // Load the application + // Load the application - var appProto = applicationRequire.packageDescription.applicationPrototype, - applicationLocation, appModulePromise; - - if (appProto) { - applicationLocation = MontageReviver.parseObjectLocationId(appProto); - appModulePromise = applicationRequire.async(applicationLocation.moduleId); - } else { - appModulePromise = montageRequire.async("core/application"); - } + var appProto = applicationRequire.packageDescription.applicationPrototype, + applicationLocation, appModulePromise; + + if (appProto) { + applicationLocation = MontageReviver.parseObjectLocationId(appProto); + appModulePromise = applicationRequire.async(applicationLocation.moduleId); + } else { + appModulePromise = montageRequire.async("core/application"); + } - return appModulePromise.then(function (exports) { - var Application = exports[(applicationLocation ? applicationLocation.objectName : "Application")]; - application = new Application(); - defaultEventManager.application = application; - application.eventManager = defaultEventManager; - self.initMontageCustomElement(applicationRequire, montageRequire, application); - - return application._load(applicationRequire, function () { - if (params.module) { - // If a module was specified in the config then we initialize it now - applicationRequire.async(params.module); - } - if (typeof global.montageDidLoad === "function") { - global.montageDidLoad(); - } - }); - }); + return appModulePromise.then(function (exports) { + var Application = exports[(applicationLocation ? applicationLocation.objectName : "Application")]; + application = new Application(); + defaultEventManager.application = application; + application.eventManager = defaultEventManager; + + return application._load(applicationRequire, function () { + if (params.module) { + // If a module was specified in the config then we initialize it now + applicationRequire.async(params.module); + } + if (typeof global.montageDidLoad === "function") { + global.montageDidLoad(); + } + MontageElement.init(applicationRequire, application); + }); }); + }); + } + }; + + exports.initMontageCustomElement = function () { + if (typeof window.customElements === 'undefined' || typeof window.Reflect === 'undefined') { + return void 0; + } - }, - - initMontageCustomElement: function (applicationRequire, montageRequire, application) { - if (typeof window.customElements === "undefined") { - return void 0; - } + var MontageElement = makeCustomElementConstructor(); - var MontageElement = window.MontageElement = function () { + function makeCustomElementConstructor(superConstructor) { + var constructor = function () { return Reflect.construct( - HTMLElement, [], MontageElement + HTMLElement, [], constructor ); }; + Object.setPrototypeOf( + constructor.prototype, (superConstructor || HTMLElement).prototype + ); + Object.setPrototypeOf(constructor, superConstructor || HTMLElement); + return constructor; + } - MontageElement.prototype.__proto__ = HTMLElement.prototype; - MontageElement.__proto__ = HTMLElement; + function defineMontageElement(name, module) { + if (!customElements.get(name)) { + var customElementConstructor = makeCustomElementConstructor(MontageElement); + customElementConstructor.prototype.module = module; + customElements.define(name, customElementConstructor); + } + } - MontageElement.prototype.connectedCallback = function () { - if (!this.__montageComponent__) { - var self = this; - this.startListenToAttibuteChanges(); + MontageElement.pendingCustomElements = new Map(); - return this.getRootComponent().then(function (rootComponent) { - return self.instantiateComponent().then(function (component) { - self.__montageComponent__ = component; - rootComponent.addChildComponent(component); - component._canDrawOutsideDocument = true; - component.needsDraw = true; - }); - }); - } else { - this.listenToAttibuteChanges(); - } - }; - MontageElement.prototype.disconnectedCallback = function () { - this._attributesObserver.disconnect(); - }; + MontageElement.define = function (name, MontageComponent) { + if (this.require) { + defineMontageElement(name, MontageComponent); + } else { + this.pendingCustomElements.set(name, MontageComponent); + } + } - MontageElement.prototype.getRootComponent = function () { - if (!MontageElement.rootComponentPromise) { - MontageElement.rootComponentPromise = montageRequire.async("ui/component") - .then(function (exports) { - return exports.__root__; - }); - } + MontageElement.init = function (require, application) { + this.require = require; + this.application = application; - return MontageElement.rootComponentPromise; - }; + customElements.define("montage-element", MontageElement); - MontageElement.prototype.startListenToAttibuteChanges = function () { - if (!this._attributesObserver) { - var self = this; - this._attributesObserver = new MutationObserver(function (mutations) { - mutations.forEach(function (mutation) { - var attributeName = mutation.attributeName; - - if (attributeName.startsWith('data-') && - attributeName !== "data-module-id") { - - attributeName = attributeName.replace(/^data-/, ""); - this.handleAttributeChanged( - attributeName, - this.dataset[attributeName] - ); - } - }, self); - }); + this.pendingCustomElements.forEach(function (constructor, name) { + defineMontageElement(name, constructor); + }); + + this.pendingCustomElements.clear(); + } + + Object.defineProperties(MontageElement.prototype, { + require: { + get: function () { + return MontageElement.require; } + }, - this._attributesObserver.observe(this, { - attributes: true + application: { + get: function () { + return MontageElement.application; + } + } + }) + + MontageElement.prototype.connectedCallback = function () { + if (!this.__montageComponent__) { + var self = this; + return Promise.all([ + this.findParentComponent(), + this.instantiateComponent() + ]).then(function (components) { + var parentComponent = components[0], + component = components[1]; + + //FIXME: Probably not needed with the PR #1845 + self.__montageComponent__ = component; + + parentComponent.addChildComponent(component); + component._canDrawOutsideDocument = true; + component.needsDraw = true; + + //FIXME: Probably not needed with the PR #1845 + self.startListenToAttibuteChanges(); }); - }; + } + }; + + MontageElement.prototype.disconnectedCallback = function () { + if (this._attributesObserver) { + this._attributesObserver.disconnect(); + } + }; + + MontageElement.prototype.findParentComponent = function () { + var eventManager = this.application.eventManager, + anElement = this, + parentComponent, + aParentNode, + candidate; + + while ((aParentNode = anElement.parentNode) !== null && + !(candidate = eventManager.eventHandlerForElement(aParentNode))) { + anElement = aParentNode; + } + + return candidate || this.getRootComponent(); + }; + + MontageElement.prototype.getRootComponent = function () { + if (!MontageElement.rootComponentPromise) { + MontageElement.rootComponentPromise = MontageElement.require.async("montage/ui/component") + .then(function (exports) { + return exports.__root__; + }); + } + + return MontageElement.rootComponentPromise; + }; - MontageElement.prototype.instantiateComponent = function () { - var moduleId = this.getAttribute('data-module-id'), - self = this; + MontageElement.prototype.instantiateComponent = function () { + var promise; + + if (this.module) { + promise = Promise.resolve(new this.module()); + } + + if (!promise) { + var moduleId = this.moduleId || this.getAttribute('module-id'); if (!moduleId) { throw new Error( - "data-module-id attribute missing on montage-element" + "module-id attribute is missing on montage-element" ); } - return applicationRequire.async(moduleId).then(function (exports) { - var component = new exports[Object.keys(exports)[0]](); - self.bootstrapComponent(component); - component.element = document.createElement("div"); - return component; + promise = this.require.async(moduleId).then(function (exports) { + return new exports[Object.keys(exports)[0]](); }); - }; + } - MontageElement.prototype.bootstrapComponent = function (component) { - var shadowRoot = this.attachShadow({ mode: 'open' }), - mainEnterDocument = component.enterDocument, - mainTemplateDidLoad = component.templateDidLoad, - keys = Object.keys(this.dataset), - self = this, - key; + var self = this; - for (var i = 0, length = keys.length; i < length; i++) { - key = keys[i]; + promise.then(function (component) { + self.bootstrapComponent(component); + component.element = document.createElement("div"); + return component; + }); - if (key !== "moduleId") { - component[key] = this.dataset[key]; - component.addPathChangeListener(key, this, "handleValueChange"); - } - } + return promise; + }; - application.eventManager.registerTargetForActivation(shadowRoot); + MontageElement.prototype.bootstrapComponent = function (component) { + var shadowRoot = this.attachShadow({ mode: 'open' }), + mainEnterDocument = component.enterDocument, + mainTemplateDidLoad = component.templateDidLoad, + keys = Object.keys(this.dataset), + self = this, + key; - component.templateDidLoad = function () { - var resources = component.getResources(); + for (var i = 0, length = keys.length; i < length; i++) { + key = keys[i]; - if (resources) { - self.injectResourcesWithinCustomElement( - resources.styles, - shadowRoot - ); + if (key !== "moduleId") { + component[key] = this.dataset[key]; + component.defineBinding(key, { "<->": "dataset." + key, source: this }); + } + } - self.injectResourcesWithinCustomElement( - resources.scripts, - shadowRoot - ); - } + this.application.eventManager.registerTargetForActivation(shadowRoot); - this.templateDidLoad = mainTemplateDidLoad; + component.templateDidLoad = function () { + var resources = component.getResources(); - if (typeof this.templateDidLoad === "function") { - this.templateDidLoad(firstTime); - } - }; + if (resources) { + self.injectResourcesWithinCustomElement( + resources.styles, + shadowRoot + ); - component.enterDocument = function (firstTime) { - shadowRoot.appendChild(this.element); - this.enterDocument = mainEnterDocument; + self.injectResourcesWithinCustomElement( + resources.scripts, + shadowRoot + ); + } - if (typeof this.enterDocument === "function") { - this.enterDocument(firstTime); - } - }; - }; + this.templateDidLoad = mainTemplateDidLoad; - MontageElement.prototype.injectResourcesWithinCustomElement = function (resources, shadowRoot) { - if (resources && resources.length) { - for (var i = 0, length = resources.length; i < length; i++) { - shadowRoot.appendChild(resources[i]); - } + if (typeof this.templateDidLoad === "function") { + this.templateDidLoad(firstTime); } }; - MontageElement.prototype.handleAttributeChanged = function (attributeName, newValue) { - if (this.dataset[attributeName] && this.__montageComponent__ && - this.__montageComponent__[attributeName] != newValue) { - this.__montageComponent__[attributeName] = newValue; + component.enterDocument = function (firstTime) { + shadowRoot.appendChild(this.element); + this.enterDocument = mainEnterDocument; + + if (typeof this.enterDocument === "function") { + this.enterDocument(firstTime); } }; + }; + MontageElement.prototype.injectResourcesWithinCustomElement = function (resources, shadowRoot) { + if (resources && resources.length) { + for (var i = 0, length = resources.length; i < length; i++) { + shadowRoot.appendChild(resources[i]); + } + } + }; - MontageElement.prototype.handleValueChange = function (newValue, attributeName) { - if (this.dataset[attributeName] != newValue) { - var oldValue = this.dataset[attributeName]; - this.dataset[attributeName] = newValue; - - this.dispatchEvent(new CustomEvent( - 'dataAttributeChange', - { - cancelable: true, - bubbles: true, - detail: { - attribute: "data-" + attributeName, - oldValue: oldValue, - newValue: this.dataset[attributeName] - } + MontageElement.prototype.startListenToAttibuteChanges = function () { + if (!this._attributesObserver) { + var self = this; + + this._attributesObserver = new MutationObserver(function (mutations) { + mutations.forEach(function (mutation) { + var attributeName = mutation.attributeName, + propertyName; + + if (attributeName.startsWith('data-') && + attributeName !== "data-module-id") { + propertyName = attributeName.replace(/^data-/, ""); + this.__montageComponent__[propertyName] = this.getAttribute(attributeName); } - )) - } + }, self); + }); } - customElements.define("montage-element", MontageElement); - } - }; + this._attributesObserver.observe(this, { + attributes: true + }); + }; + + global.MontageElement = MontageElement; + } /** * Initializes Montage and creates the application singleton if @@ -817,6 +873,7 @@ } else { global.__MONTAGE_LOADED__ = true; exports.initMontage(); + exports.initMontageCustomElement(); } } else { // may cause additional exports to be injected: From d1282f3261a22fcffa2ec8a151925024e0350e4b Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Fri, 25 Aug 2017 17:52:54 -0400 Subject: [PATCH 42/66] Define some custom montage elements. --- ui/flow.reel/flow.js | 4 ++++ ui/image-gallery.reel/image-gallery.js | 6 +++++- ui/modal-overlay.reel/modal-overlay.js | 5 ++++- ui/overlay.reel/overlay.js | 5 ++++- ui/segmented-bar.reel/segmented-bar.js | 6 +++++- ui/slider.reel/slider.js | 4 ++++ ui/text.reel/text.js | 6 +++++- 7 files changed, 31 insertions(+), 5 deletions(-) diff --git a/ui/flow.reel/flow.js b/ui/flow.reel/flow.js index 63d0cc8cf3..ee6e564288 100644 --- a/ui/flow.reel/flow.js +++ b/ui/flow.reel/flow.js @@ -2186,3 +2186,7 @@ var Flow = exports.Flow = Component.specialize( /** @lends Flow.prototype # */ { } } }); + +if (window.MontageElement) { + MontageElement.define("montage-flow", Flow); +} diff --git a/ui/image-gallery.reel/image-gallery.js b/ui/image-gallery.reel/image-gallery.js index f0bd188a94..2d97b14211 100644 --- a/ui/image-gallery.reel/image-gallery.js +++ b/ui/image-gallery.reel/image-gallery.js @@ -10,7 +10,7 @@ var Component = require("ui/component").Component; * @class ImageGallery * @extends Component */ -exports.ImageGallery = Component.specialize(/** @lends ImageGallery# */ { +var ImageGallery = exports.ImageGallery = Component.specialize(/** @lends ImageGallery# */ { images: { get: function () { @@ -87,3 +87,7 @@ exports.ImageGallery = Component.specialize(/** @lends ImageGallery# */ { } }); + +if (window.MontageElement) { + MontageElement.define("montage-image-gallery", ImageGallery); +} diff --git a/ui/modal-overlay.reel/modal-overlay.js b/ui/modal-overlay.reel/modal-overlay.js index 1a20932144..e60dbf1787 100644 --- a/ui/modal-overlay.reel/modal-overlay.js +++ b/ui/modal-overlay.reel/modal-overlay.js @@ -10,7 +10,7 @@ var CLASS_PREFIX = "montage-ModalOverlay"; * @class ModalOverlay * @extends Overlay */ -exports.ModalOverlay = Overlay.specialize(/** @lends ModalOverlay.prototype # */ { +var ModalOverlay = exports.ModalOverlay = Overlay.specialize(/** @lends ModalOverlay.prototype # */ { enterDocument: { value: function (firstTime) { @@ -135,3 +135,6 @@ exports.ModalOverlay = Overlay.specialize(/** @lends ModalOverlay.prototype # */ }); +if (window.MontageElement) { + MontageElement.define("montage-modal-overlay", ModalOverlay); +} diff --git a/ui/overlay.reel/overlay.js b/ui/overlay.reel/overlay.js index 7d944982fb..6a478491de 100644 --- a/ui/overlay.reel/overlay.js +++ b/ui/overlay.reel/overlay.js @@ -16,7 +16,7 @@ var CLASS_PREFIX = "montage-Overlay", * @class Overlay * @extends Component */ -exports.Overlay = Component.specialize( /** @lends Overlay.prototype # */ { +var Overlay = exports.Overlay = Component.specialize( /** @lends Overlay.prototype # */ { /** * Dispatched when the user dismiss the overlay by clicking outside of it. @@ -425,3 +425,6 @@ exports.Overlay = Component.specialize( /** @lends Overlay.prototype # */ { }); +if (window.MontageElement) { + MontageElement.define("montage-overlay", Overlay); +} diff --git a/ui/segmented-bar.reel/segmented-bar.js b/ui/segmented-bar.reel/segmented-bar.js index 00562dda45..eb7b89fb61 100644 --- a/ui/segmented-bar.reel/segmented-bar.js +++ b/ui/segmented-bar.reel/segmented-bar.js @@ -22,7 +22,7 @@ var AbstractButton = require("ui/base/abstract-button").AbstractButton, * * @extends AbstractButton */ -exports.SegmentedBar = AbstractButton.specialize( /** @lends SegmentedBar.prototype */ { +var SegmentedBar = exports.SegmentedBar = AbstractButton.specialize( /** @lends SegmentedBar.prototype */ { /** * Dispatches by default based on the `enabled` property. * @@ -232,3 +232,7 @@ exports.SegmentedBar = AbstractButton.specialize( /** @lends SegmentedBar.protot } } }); + +if (window.MontageElement) { + MontageElement.define("montage-segmented-bar", SegmentedBar); +} diff --git a/ui/slider.reel/slider.js b/ui/slider.reel/slider.js index 0668d436ed..1055c5c966 100644 --- a/ui/slider.reel/slider.js +++ b/ui/slider.reel/slider.js @@ -884,3 +884,7 @@ Slider.addAttributes( /** @lends module:"montage/ui/native/input-range.reel".Inp } }); + +if (window.MontageElement) { + MontageElement.define("montage-slider", Slider); +} diff --git a/ui/text.reel/text.js b/ui/text.reel/text.js index 00396b4c07..9a5c8e6b34 100644 --- a/ui/text.reel/text.js +++ b/ui/text.reel/text.js @@ -15,7 +15,7 @@ var Component = require("../component").Component; * @classdesc A component that displays a string of plain text. * @extends Component */ -exports.Text = Component.specialize( /** @lends Text.prototype # */ { +var Text = exports.Text = Component.specialize( /** @lends Text.prototype # */ { hasTemplate: { value: false @@ -94,3 +94,7 @@ exports.Text = Component.specialize( /** @lends Text.prototype # */ { } }); + +if (window.MontageElement) { + MontageElement.define("montage-text", Text); +} \ No newline at end of file From 3ae4e4154d6bda7163cf9cda91c8db6e48f7de5d Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Fri, 1 Sep 2017 10:14:38 -0400 Subject: [PATCH 43/66] Fix jshint errors --- core/event/event-manager.js | 2 +- montage.js | 17 ++++++++--------- ui/flow.reel/flow.js | 2 ++ ui/image-gallery.reel/image-gallery.js | 2 ++ ui/modal-overlay.reel/modal-overlay.js | 2 ++ ui/overlay.reel/overlay.js | 2 +- ui/segmented-bar.reel/segmented-bar.js | 1 + ui/slider.reel/slider.js | 2 +- ui/text.reel/text.js | 12 +++++++----- 9 files changed, 25 insertions(+), 17 deletions(-) diff --git a/core/event/event-manager.js b/core/event/event-manager.js index 2baa948ff6..1c1e5b33fe 100644 --- a/core/event/event-manager.js +++ b/core/event/event-manager.js @@ -1,4 +1,4 @@ -/*global Window, Document, Element, Event, Components, Touch */ +/*global Window, Document, Element, Event, Components, Touch, MontageElement */ /** * @author Lea Verou diff --git a/montage.js b/montage.js index 50dbf7759a..f0132e2041 100644 --- a/montage.js +++ b/montage.js @@ -1,4 +1,4 @@ -/*global define, module, console */ +/*global define, module, console, MontageElement, Reflect, customElements */ (function (root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. @@ -380,8 +380,6 @@ return void 0; } - var MontageElement = makeCustomElementConstructor(); - function makeCustomElementConstructor(superConstructor) { var constructor = function () { return Reflect.construct( @@ -395,6 +393,8 @@ return constructor; } + var MontageElement = makeCustomElementConstructor(); + function defineMontageElement(name, module) { if (!customElements.get(name)) { var customElementConstructor = makeCustomElementConstructor(MontageElement); @@ -405,14 +405,13 @@ MontageElement.pendingCustomElements = new Map(); - MontageElement.define = function (name, MontageComponent) { if (this.require) { defineMontageElement(name, MontageComponent); } else { this.pendingCustomElements.set(name, MontageComponent); } - } + }; MontageElement.init = function (require, application) { this.require = require; @@ -425,7 +424,7 @@ }); this.pendingCustomElements.clear(); - } + }; Object.defineProperties(MontageElement.prototype, { require: { @@ -439,7 +438,7 @@ return MontageElement.application; } } - }) + }); MontageElement.prototype.connectedCallback = function () { if (!this.__montageComponent__) { @@ -565,7 +564,7 @@ this.templateDidLoad = mainTemplateDidLoad; if (typeof this.templateDidLoad === "function") { - this.templateDidLoad(firstTime); + this.templateDidLoad(); } }; @@ -611,7 +610,7 @@ }; global.MontageElement = MontageElement; - } + }; /** * Initializes Montage and creates the application singleton if diff --git a/ui/flow.reel/flow.js b/ui/flow.reel/flow.js index ee6e564288..d0c72ec00a 100644 --- a/ui/flow.reel/flow.js +++ b/ui/flow.reel/flow.js @@ -1,3 +1,5 @@ +/*global require, exports, console, MontageElement */ + /** * @module "montage/ui/flow.reel" */ diff --git a/ui/image-gallery.reel/image-gallery.js b/ui/image-gallery.reel/image-gallery.js index 2d97b14211..94be1cc493 100644 --- a/ui/image-gallery.reel/image-gallery.js +++ b/ui/image-gallery.reel/image-gallery.js @@ -1,3 +1,5 @@ +/*global require, exports, console, MontageElement */ + var Component = require("ui/component").Component; /** diff --git a/ui/modal-overlay.reel/modal-overlay.js b/ui/modal-overlay.reel/modal-overlay.js index e60dbf1787..3f82ff0638 100644 --- a/ui/modal-overlay.reel/modal-overlay.js +++ b/ui/modal-overlay.reel/modal-overlay.js @@ -1,3 +1,5 @@ +/*global require, exports, console, MontageElement */ + /** * @module "ui/modal-overlay.reel" */ diff --git a/ui/overlay.reel/overlay.js b/ui/overlay.reel/overlay.js index 6a478491de..5cf9fe0eb8 100644 --- a/ui/overlay.reel/overlay.js +++ b/ui/overlay.reel/overlay.js @@ -1,4 +1,4 @@ -/* global console */ +/*global require, exports, console, MontageElement */ /** * @module "ui/overlay.reel" diff --git a/ui/segmented-bar.reel/segmented-bar.js b/ui/segmented-bar.reel/segmented-bar.js index eb7b89fb61..d940448e94 100644 --- a/ui/segmented-bar.reel/segmented-bar.js +++ b/ui/segmented-bar.reel/segmented-bar.js @@ -1,3 +1,4 @@ +/*global require, exports, console, MontageElement */ "use strict"; /** diff --git a/ui/slider.reel/slider.js b/ui/slider.reel/slider.js index 1055c5c966..ec8edb7dba 100644 --- a/ui/slider.reel/slider.js +++ b/ui/slider.reel/slider.js @@ -1,4 +1,4 @@ -/*global require,exports */ +/*global require, exports, console, MontageElement */ /** @module "montage/ui/native/input-range.reel" diff --git a/ui/text.reel/text.js b/ui/text.reel/text.js index 9a5c8e6b34..530e9ae0e3 100644 --- a/ui/text.reel/text.js +++ b/ui/text.reel/text.js @@ -1,3 +1,5 @@ +/*global require, exports, console, MontageElement */ + /** * @module "montage/ui/text.reel" */ @@ -11,11 +13,11 @@ var Component = require("../component").Component; * The text component replaces the inner DOM of its element with a TextNode and * it renders the [value]{@link Text#value} string in it. * - * @class Text + * @class module:montage/ui/text.Text + * @extends module:montage/ui/component.Component * @classdesc A component that displays a string of plain text. - * @extends Component */ -var Text = exports.Text = Component.specialize( /** @lends Text.prototype # */ { +var MontageText = exports.Text = Component.specialize( /** @lends module:montage/ui/text.Text# */ { hasTemplate: { value: false @@ -96,5 +98,5 @@ var Text = exports.Text = Component.specialize( /** @lends Text.prototype # */ { }); if (window.MontageElement) { - MontageElement.define("montage-text", Text); -} \ No newline at end of file + MontageElement.define("montage-text", MontageText); +} From d493d0e4ab54443d2b6e8c9e639e7230909923bd Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Fri, 1 Sep 2017 13:17:56 -0400 Subject: [PATCH 44/66] Update montage custom elements with proxy handler. --- .../deserializer/montage-reviver.js | 5 + montage.js | 161 +++++++----------- ui/text.reel/text.js | 4 +- 3 files changed, 74 insertions(+), 96 deletions(-) diff --git a/core/serialization/deserializer/montage-reviver.js b/core/serialization/deserializer/montage-reviver.js index d6490be9f2..59c39711ec 100644 --- a/core/serialization/deserializer/montage-reviver.js +++ b/core/serialization/deserializer/montage-reviver.js @@ -1065,6 +1065,11 @@ var MontageReviver = exports.MontageReviver = Montage.specialize(/** @lends Mont }); +MontageReviver.findProxyForElement = function (element) { + return PROXY_ELEMENT_MAP.get(element); +} + if (typeof exports !== "undefined") { + exports.MontageReviver = MontageReviver; } diff --git a/montage.js b/montage.js index f0132e2041..7c57659e74 100644 --- a/montage.js +++ b/montage.js @@ -368,7 +368,9 @@ global.montageDidLoad(); } - MontageElement.init(applicationRequire, application); + if (window.MontageElement) { + MontageElement.ready(applicationRequire, application, MontageReviver); + } }); }); }); @@ -395,29 +397,35 @@ var MontageElement = makeCustomElementConstructor(); - function defineMontageElement(name, module) { + function defineMontageElement(name, options) { if (!customElements.get(name)) { var customElementConstructor = makeCustomElementConstructor(MontageElement); - customElementConstructor.prototype.module = module; + customElementConstructor.componentConstructor = options.constructor; + customElementConstructor.observedAttributes = options.observedAttributes; customElements.define(name, customElementConstructor); } } MontageElement.pendingCustomElements = new Map(); - MontageElement.define = function (name, MontageComponent) { + MontageElement.define = function (name, constructor, options) { + if (options && typeof options === 'object') { + options.constructor = constructor; + } else { + options = { constructor: constructor }; + } + if (this.require) { - defineMontageElement(name, MontageComponent); + defineMontageElement(name, options); } else { - this.pendingCustomElements.set(name, MontageComponent); + this.pendingCustomElements.set(name, options); } }; - MontageElement.init = function (require, application) { - this.require = require; + MontageElement.ready = function (require, application, reviver) { + MontageElement.prototype.findProxyForElement = reviver.findProxyForElement; this.application = application; - - customElements.define("montage-element", MontageElement); + this.require = require; this.pendingCustomElements.forEach(function (constructor, name) { defineMontageElement(name, constructor); @@ -427,46 +435,52 @@ }; Object.defineProperties(MontageElement.prototype, { + require: { get: function () { return MontageElement.require; - } + }, + configurable: false }, application: { get: function () { return MontageElement.application; - } + }, + configurable: false + }, + + componentConstructor: { + get: function () { + return this.constructor.componentConstructor; + }, + configurable: false + }, + + observedAttributes: { + get: function () { + return this.constructor.observedAttributes; + }, + configurable: false } }); MontageElement.prototype.connectedCallback = function () { - if (!this.__montageComponent__) { - var self = this; - return Promise.all([ - this.findParentComponent(), - this.instantiateComponent() - ]).then(function (components) { - var parentComponent = components[0], - component = components[1]; - - //FIXME: Probably not needed with the PR #1845 - self.__montageComponent__ = component; - + if (!this._instance) { + var self = this, + component = this.instantiateComponent(); + + return this.findParentComponent().then(function (parentComponent) { + self._instance = component; parentComponent.addChildComponent(component); component._canDrawOutsideDocument = true; component.needsDraw = true; - - //FIXME: Probably not needed with the PR #1845 - self.startListenToAttibuteChanges(); }); } }; MontageElement.prototype.disconnectedCallback = function () { - if (this._attributesObserver) { - this._attributesObserver.disconnect(); - } + //TODO }; MontageElement.prototype.findParentComponent = function () { @@ -481,12 +495,12 @@ anElement = aParentNode; } - return candidate || this.getRootComponent(); + return Promise.resolve(candidate) || this.getRootComponent(); }; MontageElement.prototype.getRootComponent = function () { if (!MontageElement.rootComponentPromise) { - MontageElement.rootComponentPromise = MontageElement.require.async("montage/ui/component") + MontageElement.rootComponentPromise = this.require.async("montage/ui/component") .then(function (exports) { return exports.__root__; }); @@ -496,54 +510,34 @@ }; MontageElement.prototype.instantiateComponent = function () { - var promise; - - if (this.module) { - promise = Promise.resolve(new this.module()); - } - - if (!promise) { - var moduleId = this.moduleId || this.getAttribute('module-id'); - - if (!moduleId) { - throw new Error( - "module-id attribute is missing on montage-element" - ); - } - - promise = this.require.async(moduleId).then(function (exports) { - return new exports[Object.keys(exports)[0]](); - }); - } - - var self = this; - - promise.then(function (component) { - self.bootstrapComponent(component); - component.element = document.createElement("div"); - return component; - }); - - return promise; + var component = new this.componentConstructor(); + this.bootstrapComponent(component); + component.element = document.createElement("div"); + return component; }; MontageElement.prototype.bootstrapComponent = function (component) { var shadowRoot = this.attachShadow({ mode: 'open' }), mainEnterDocument = component.enterDocument, mainTemplateDidLoad = component.templateDidLoad, - keys = Object.keys(this.dataset), - self = this, - key; - - for (var i = 0, length = keys.length; i < length; i++) { - key = keys[i]; - - if (key !== "moduleId") { - component[key] = this.dataset[key]; - component.defineBinding(key, { "<->": "dataset." + key, source: this }); + proxyElement = this.findProxyForElement(this); + + if (proxyElement) { + var observedAttributes = this.observedAttributes, + observedAttribute, + self = this, + length; + + if (observedAttributes && (length = observedAttributes.length)) { + for (var i = 0; i < length; i++) { + observedAttribute = observedAttributes[i]; + component.defineBinding(observedAttribute, { + "<->": "" + observedAttribute, source: proxyElement + }); + } } } - + this.application.eventManager.registerTargetForActivation(shadowRoot); component.templateDidLoad = function () { @@ -586,29 +580,6 @@ } }; - MontageElement.prototype.startListenToAttibuteChanges = function () { - if (!this._attributesObserver) { - var self = this; - - this._attributesObserver = new MutationObserver(function (mutations) { - mutations.forEach(function (mutation) { - var attributeName = mutation.attributeName, - propertyName; - - if (attributeName.startsWith('data-') && - attributeName !== "data-module-id") { - propertyName = attributeName.replace(/^data-/, ""); - this.__montageComponent__[propertyName] = this.getAttribute(attributeName); - } - }, self); - }); - } - - this._attributesObserver.observe(this, { - attributes: true - }); - }; - global.MontageElement = MontageElement; }; diff --git a/ui/text.reel/text.js b/ui/text.reel/text.js index 530e9ae0e3..998926a36d 100644 --- a/ui/text.reel/text.js +++ b/ui/text.reel/text.js @@ -98,5 +98,7 @@ var MontageText = exports.Text = Component.specialize( /** @lends module:montag }); if (window.MontageElement) { - MontageElement.define("montage-text", MontageText); + MontageElement.define("montage-text", MontageText, { + observedAttributes: ['value'] + }); } From ff2052dcd33844504f22661315e4d529f968aa86 Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Fri, 1 Sep 2017 15:07:19 -0400 Subject: [PATCH 45/66] Add montage custom elements specs --- test/all.js | 3 +- .../custom-elements/custom-elements-test.js | 14 +++ .../spec/custom-elements/custom-elements.html | 43 +++++++ .../my-button.reel/my-button.html | 19 +++ .../my-button.reel/my-button.js | 16 +++ test/spec/montage-custom-element-spec.js | 108 ++++++++++++++++++ 6 files changed, 202 insertions(+), 1 deletion(-) create mode 100644 test/spec/custom-elements/custom-elements-test.js create mode 100644 test/spec/custom-elements/custom-elements.html create mode 100644 test/spec/custom-elements/my-button.reel/my-button.html create mode 100644 test/spec/custom-elements/my-button.reel/my-button.js create mode 100644 test/spec/montage-custom-element-spec.js diff --git a/test/all.js b/test/all.js index 97737b9f1b..0ff72eedfe 100644 --- a/test/all.js +++ b/test/all.js @@ -18,7 +18,8 @@ module.exports = require("montage-testing").run(require, [ "spec/bindings/converter-spec", "spec/bindings/self-spec", {name: "spec/document-resources-spec", node: false}, - {name: "spec/claimed-pointer-spec", node: false}, + { name: "spec/claimed-pointer-spec", node: false }, + { name: "spec/montage-custom-element-spec" }, // Core "spec/core/browser-spec", "spec/core/core-spec", diff --git a/test/spec/custom-elements/custom-elements-test.js b/test/spec/custom-elements/custom-elements-test.js new file mode 100644 index 0000000000..b3a0ba639f --- /dev/null +++ b/test/spec/custom-elements/custom-elements-test.js @@ -0,0 +1,14 @@ + +var querySelector = function (e) { return document.querySelector(e); } + +var Montage = require("montage").Montage; +var Component = require("montage/ui/component").Component; +var Application = require("montage/core/application").application; +var MontageText = require("montage/ui/text.reel").Text; +var MyButton = require("spec/custom-elements/my-button.reel").MyButton; + +var CustomElementTest = exports.CustomElementTest = Montage.specialize({ + textLabel2: { + value: 'textLabel2' + } +}); diff --git a/test/spec/custom-elements/custom-elements.html b/test/spec/custom-elements/custom-elements.html new file mode 100644 index 0000000000..a7eca0e4da --- /dev/null +++ b/test/spec/custom-elements/custom-elements.html @@ -0,0 +1,43 @@ + + + + + + +
+ + + +
+ + diff --git a/test/spec/custom-elements/my-button.reel/my-button.html b/test/spec/custom-elements/my-button.reel/my-button.html new file mode 100644 index 0000000000..38ddd82d91 --- /dev/null +++ b/test/spec/custom-elements/my-button.reel/my-button.html @@ -0,0 +1,19 @@ + + + + + + + + + + diff --git a/test/spec/custom-elements/my-button.reel/my-button.js b/test/spec/custom-elements/my-button.reel/my-button.js new file mode 100644 index 0000000000..3bf4677d79 --- /dev/null +++ b/test/spec/custom-elements/my-button.reel/my-button.js @@ -0,0 +1,16 @@ + +var Component = require("montage/ui/component").Component; +var Button = require("montage/ui/button.reel").Button; + +var MyButton = exports.MyButton = Button.specialize({ + hasTemplate: { + value: true + } +}); + +if (window.MontageElement) { + console.log('defined') + MontageElement.define("my-button", MyButton, { + observedAttributes: ['label'] + }); +} diff --git a/test/spec/montage-custom-element-spec.js b/test/spec/montage-custom-element-spec.js new file mode 100644 index 0000000000..3f3a98f83b --- /dev/null +++ b/test/spec/montage-custom-element-spec.js @@ -0,0 +1,108 @@ +var Montage = require("montage").Montage, + TestPageLoader = require("montage-testing/testpageloader").TestPageLoader, + Template = require("montage/core/template").Template, + Application = require("montage/core/application").application; + +TestPageLoader.queueTest("custom-elements/custom-elements", function (testPage) { + describe("montage-custom-element-spec", function () { + var eventManager, + application, + delegate; + + var querySelector = function (s) { + return testPage.querySelector(s); + }; + var querySelectorAll = function (s) { + return testPage.querySelectorAll(s); + }; + + beforeEach(function () { + application = testPage.global.mr("montage/core/application").application; + eventManager = application.eventManager; + delegate = application.delegate; + }); + + describe('montage-text', function () { + + it("should be instantiated", function () { + var textLabel1 = querySelector(".textLabel1"); + expect(textLabel1).toBeDefined(); + expect(textLabel1._instance).toBeDefined(); + }); + + it("should set the property/attribute value", function () { + var textLabel1 = querySelector(".textLabel1"); + expect(textLabel1.value).toBe('textLabel1'); + expect(textLabel1._instance.value).toBe('textLabel1'); + expect(textLabel1._instance.element.textContent).toBe('textLabel1'); + expect(textLabel1.getAttribute('value')).toBe('textLabel1'); + }); + + it("should update the property/attribute value", function () { + var textLabel1 = querySelector(".textLabel1"); + expect(textLabel1.value).toBe('textLabel1'); + textLabel1.value = 'quz'; + + testPage.waitForComponentDraw(textLabel1._instance).then(function () { + expect(textLabel1.value).toBe('quz'); + expect(textLabel1._instance.value).toBe('quz'); + expect(textLabel1._instance.element.textContent).toBe('quz'); + expect(textLabel1.getAttribute('value')).toBe('quz'); + + textLabel1.setAttribute('value', 'foo'); + + testPage.waitForComponentDraw(textLabel1._instance).then(function () { + expect(textLabel1.value).toBe('foo'); + expect(textLabel1._instance.value).toBe('foo'); + expect(textLabel1._instance.element.textContent).toBe('foo'); + expect(textLabel1.getAttribute('value')).toBe('foo'); + + textLabel1._instance.value = 'bar'; + + testPage.waitForComponentDraw(textLabel1._instance).then(function () { + expect(textLabel1.value).toBe('bar'); + expect(textLabel1._instance.value).toBe('bar'); + expect(textLabel1._instance.element.textContent).toBe('bar'); + expect(textLabel1.getAttribute('value')).toBe('bar'); + done(); + }); + }); + }); + }); + + it("property/attribute value should react to bindings", function (done) { + var textLabel2 = querySelector(".textLabel2"); + var owner = textLabel2.owner; + + expect(textLabel2).toBeDefined(); + expect(textLabel2._instance).toBeDefined(); + expect(textLabel2.value).toBe('textLabel2'); + expect(textLabel2._instance.value).toBe('textLabel2'); + expect(textLabel2._instance.element.textContent).toBe('textLabel2'); + expect(textLabel2.getAttribute('value')).toBe('textLabel2'); + + owner.textLabel2 = "foo"; + + testPage.waitForComponentDraw(textLabel2._instance).then(function () { + expect(textLabel2.value).toBe('foo'); + expect(textLabel2._instance.value).toBe('foo'); + expect(textLabel2._instance.element.textContent).toBe('foo'); + expect(textLabel2.getAttribute('value')).toBe('foo'); + done(); + }); + }); + }); + + describe('my-button', function () { + + it("should be instantiated", function () { + var myButton = querySelector(".myButton"); + expect(myButton).toBeDefined(); + expect(myButton._instance).toBeDefined(); + expect(myButton._instance.label).toBe('click'); + expect(myButton._instance.element.textContent).toBe('click'); + }); + + }); + }); +}); \ No newline at end of file From 339d954e258c262753a87fe84e99ea11ff90fc3b Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Fri, 1 Sep 2017 16:40:48 -0400 Subject: [PATCH 46/66] Fix jshint errors. --- core/serialization/deserializer/montage-reviver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/serialization/deserializer/montage-reviver.js b/core/serialization/deserializer/montage-reviver.js index 59c39711ec..753c2322ca 100644 --- a/core/serialization/deserializer/montage-reviver.js +++ b/core/serialization/deserializer/montage-reviver.js @@ -1067,7 +1067,7 @@ var MontageReviver = exports.MontageReviver = Montage.specialize(/** @lends Mont MontageReviver.findProxyForElement = function (element) { return PROXY_ELEMENT_MAP.get(element); -} +}; if (typeof exports !== "undefined") { From 942c20ad21182843802ede2269d7010b756bb6a5 Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Fri, 1 Sep 2017 16:43:56 -0400 Subject: [PATCH 47/66] Disable node test for montage-custom-elements specs. --- test/all.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/all.js b/test/all.js index 0ff72eedfe..2ab02b5ea6 100644 --- a/test/all.js +++ b/test/all.js @@ -19,7 +19,7 @@ module.exports = require("montage-testing").run(require, [ "spec/bindings/self-spec", {name: "spec/document-resources-spec", node: false}, { name: "spec/claimed-pointer-spec", node: false }, - { name: "spec/montage-custom-element-spec" }, + { name: "spec/montage-custom-element-spec", node: false }, // Core "spec/core/browser-spec", "spec/core/core-spec", From 7234186d3c79b777dc117fa3e123cf1eb6c977bf Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Tue, 5 Sep 2017 18:15:53 -0400 Subject: [PATCH 48/66] rename getShawdowRootFromNode to shawdowRootFromNode. --- composer/composer.js | 2 +- core/event/event-manager.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/composer/composer.js b/composer/composer.js index 4216a15c55..e962d2b703 100644 --- a/composer/composer.js +++ b/composer/composer.js @@ -77,7 +77,7 @@ exports.Composer = Target.specialize( /** @lends Composer# */ { shawdowRoot: { get: function () { if (!this._shawdowRoot) { - this._shawdowRoot = defaultEventManager.getShawdowRootFromNode(this.element); + this._shawdowRoot = defaultEventManager.shawdowRootFromNode(this.element); } return this._shawdowRoot; } diff --git a/core/event/event-manager.js b/core/event/event-manager.js index 1c1e5b33fe..c46f817707 100644 --- a/core/event/event-manager.js +++ b/core/event/event-manager.js @@ -1187,7 +1187,7 @@ var EventManager = exports.EventManager = Montage.specialize(/** @lends EventMan // TODO why on the document and not the window? var shadowRoot; return /* isWindow*/target.screen ? target.document : - (shadowRoot = this.getShawdowRootFromNode(target)) ? + (shadowRoot = this.shawdowRootFromNode(target)) ? shadowRoot : target.ownerDocument; } else { return target; @@ -1196,7 +1196,7 @@ var EventManager = exports.EventManager = Montage.specialize(/** @lends EventMan } }, - getShawdowRootFromNode: { + shawdowRootFromNode: { value: function isInShadow(node) { if (window.ShadowRoot) { while (node) { From 14f4ce5c2dccf22b4e50e9992d05722c01dcfdb9 Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Mon, 11 Sep 2017 19:15:04 -0400 Subject: [PATCH 49/66] Remove console.log --- test/spec/custom-elements/my-button.reel/my-button.js | 1 - 1 file changed, 1 deletion(-) diff --git a/test/spec/custom-elements/my-button.reel/my-button.js b/test/spec/custom-elements/my-button.reel/my-button.js index 3bf4677d79..e3ee64e80f 100644 --- a/test/spec/custom-elements/my-button.reel/my-button.js +++ b/test/spec/custom-elements/my-button.reel/my-button.js @@ -9,7 +9,6 @@ var MyButton = exports.MyButton = Button.specialize({ }); if (window.MontageElement) { - console.log('defined') MontageElement.define("my-button", MyButton, { observedAttributes: ['label'] }); From 1c5f1d6fe89051565b431d2e0f068c22cd445e10 Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Mon, 11 Sep 2017 19:15:45 -0400 Subject: [PATCH 50/66] Add specs for custom elements and attributes bindings. --- .../deserializer/montage-reviver.js | 8 +-- .../montage-deserializer-element-spec.js | 54 +++++++++++++++++++ 2 files changed, 58 insertions(+), 4 deletions(-) diff --git a/core/serialization/deserializer/montage-reviver.js b/core/serialization/deserializer/montage-reviver.js index 753c2322ca..ee319cd2ec 100644 --- a/core/serialization/deserializer/montage-reviver.js +++ b/core/serialization/deserializer/montage-reviver.js @@ -189,12 +189,12 @@ var MontageReviver = exports.MontageReviver = Montage.specialize(/** @lends Mont Object.defineProperty(element, "dataset", { value: new Proxy(targetObject, { set: function (target, propertyName, value) { + target[propertyName] = value; + originalDataset[propertyName] = value; element.nativeSetAttribute('data-' + kebabCaseConverter.convert(propertyName), value ); - target[propertyName] = value; - originalDataset[propertyName] = value; return true; }, get: function (target, propertyName) { @@ -244,13 +244,13 @@ var MontageReviver = exports.MontageReviver = Montage.specialize(/** @lends Mont if (Object.getOwnPropertyDescriptor(element, propertyName) === void 0) { Object.defineProperty(element, propertyName, { set: function (value) { + target[propertyName] = value; + if (value === null || value === void 0) { element.removeAttribute(propertyName); } else { element.nativeSetAttribute(propertyName, value); } - - target[propertyName] = value; }, get: function () { return target[propertyName]; diff --git a/test/spec/serialization/montage-deserializer-element-spec.js b/test/spec/serialization/montage-deserializer-element-spec.js index 1ee87b7fb4..a33b06f678 100644 --- a/test/spec/serialization/montage-deserializer-element-spec.js +++ b/test/spec/serialization/montage-deserializer-element-spec.js @@ -159,6 +159,60 @@ describe("serialization/montage-deserializer-element-spec", function () { done(); }); }); + + it("should deserialize a custom element reference and set properties", function (done) { + if (typeof document.defaultView.Reflect !== 'undefined') { + var serialization = { + "rootEl": { + "value": { "#": "id" }, + "values": { + "name": "World", + "defaultGreeting": "Hello", + "greeting": { "<-": "defaultGreeting" } + } + } + }, + serializationString = JSON.stringify(serialization), + constructor = function () { + return Reflect.construct( + HTMLElement, [], constructor + ); + };; + + Object.setPrototypeOf(constructor.prototype, HTMLElement.prototype); + Object.setPrototypeOf(constructor, HTMLElement); + Object.defineProperty(constructor, 'observedAttributes', { + get: function () { + return ['name', 'greeting']; + } + }); + + constructor.prototype.attributeChangedCallback = function (attr, oldValue, newValue) { + if (attr == 'name' || attr == 'greeting') { + this.textContent = this.greeting + ", " + this.name; + } + }; + + document.defaultView.customElements.define('hello-element', constructor); + + rootEl.innerHTML = ''; + deserializer.init(serializationString, require); + + deserializer.deserialize(null, rootEl).then(function (objects) { + expect(objects.rootEl instanceof Element).toBe(true); + expect(objects.rootEl.name).toBe('World'); + expect(objects.rootEl.getAttribute('name')).toBe('World'); + expect(objects.rootEl.textContent).toBe('Hello, World'); + objects.rootEl.name = 'Montage'; + expect(objects.rootEl.textContent).toBe('Hello, Montage'); + expect(objects.rootEl.getAttribute('name')).toBe('Montage'); + objects.rootEl.defaultGreeting = 'Bonjour'; + expect(objects.rootEl.textContent).toBe('Bonjour, Montage'); + }).finally(function () { + done(); + }); + } + }); }); xdescribe("Object Element Deserialization", function () { From 92bc6c0c32d35a172f070d523ed7498989967e69 Mon Sep 17 00:00:00 2001 From: Thibault Zanini Date: Tue, 12 Sep 2017 10:09:55 -0400 Subject: [PATCH 51/66] Cache dataset attribute names. --- core/serialization/deserializer/montage-reviver.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/core/serialization/deserializer/montage-reviver.js b/core/serialization/deserializer/montage-reviver.js index ee319cd2ec..2f0d11c1c8 100644 --- a/core/serialization/deserializer/montage-reviver.js +++ b/core/serialization/deserializer/montage-reviver.js @@ -16,6 +16,7 @@ var Montage = require("../../core").Montage, require("../../shim/string"); var PROXY_ELEMENT_MAP = new WeakMap(); +var DATA_ATTRIBUTES_MAP = new Map(); var ModuleLoader = Montage.specialize( { _require: {value: null}, @@ -191,8 +192,13 @@ var MontageReviver = exports.MontageReviver = Montage.specialize(/** @lends Mont set: function (target, propertyName, value) { target[propertyName] = value; originalDataset[propertyName] = value; - element.nativeSetAttribute('data-' + - kebabCaseConverter.convert(propertyName), + element.nativeSetAttribute( + DATA_ATTRIBUTES_MAP.get(propertyName) || + (DATA_ATTRIBUTES_MAP.set( + propertyName, + 'data-' + + kebabCaseConverter.convert(propertyName) + )).get(propertyName), value ); return true; From 8de66a41e6561c3f22840dd4ca00094e93c2715c Mon Sep 17 00:00:00 2001 From: cdebost Date: Tue, 5 Sep 2017 22:45:43 -0700 Subject: [PATCH 52/66] Replace blueprint with objectDescriptor in meta files --- core/event/action-event-listener.meta | 14 ++--- core/media-controller.meta | 56 +++++++++--------- core/meta/object-descriptor-reference.mjson | 2 +- core/promise-controller.meta | 28 ++++----- core/radio-button-controller.meta | 24 ++++---- core/range-controller.meta | 44 +++++++------- core/tree-controller.meta | 64 ++++++++++----------- 7 files changed, 116 insertions(+), 116 deletions(-) diff --git a/core/event/action-event-listener.meta b/core/event/action-event-listener.meta index 3664130a2e..ea0f08e42e 100644 --- a/core/event/action-event-listener.meta +++ b/core/event/action-event-listener.meta @@ -1,26 +1,26 @@ { "actionEventListener_handler": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "handler", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "object" } }, "actionEventListener_action": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "action", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "string" } }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-descriptor", "values": { "name": "ActionEventListener", "customPrototype": false, @@ -32,7 +32,7 @@ "@": "actionEventListener_action" } ], - "propertyBlueprintGroups": { + "propertyDescriptorGroups": { "actionEventListener": [ { "@": "actionEventListener_handler" @@ -42,7 +42,7 @@ } ] }, - "blueprintModule": { + "objectDescriptorModule": { "%": "core/event/action-event-listener.meta" }, "exportName": "ActionEventListener", diff --git a/core/media-controller.meta b/core/media-controller.meta index b41c363450..c31dfd6058 100644 --- a/core/media-controller.meta +++ b/core/media-controller.meta @@ -1,9 +1,9 @@ { "mediaController_status": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "status", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "number", @@ -12,10 +12,10 @@ }, "mediaController_STOPPED": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "STOPPED", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "number", @@ -24,10 +24,10 @@ }, "mediaController_PLAYING": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "PLAYING", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "number", @@ -36,10 +36,10 @@ }, "mediaController_PAUSED": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "PAUSED", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "number", @@ -48,10 +48,10 @@ }, "mediaController_EMPTY": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "EMPTY", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "number", @@ -60,10 +60,10 @@ }, "mediaController_mediaController": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "mediaController", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "object", @@ -72,10 +72,10 @@ }, "mediaController_position": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "position", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "number", @@ -84,10 +84,10 @@ }, "mediaController_duration": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "duration", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "number", @@ -96,10 +96,10 @@ }, "mediaController_autoplay": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "autoplay", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "boolean", @@ -108,10 +108,10 @@ }, "mediaController_playbackRate": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "playbackRate", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "number", @@ -120,10 +120,10 @@ }, "mediaController_currentTime": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "currentTime", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "number", @@ -132,10 +132,10 @@ }, "mediaController_volume": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "volume", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "number", @@ -144,10 +144,10 @@ }, "mediaController_mute": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "mute", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "boolean", @@ -156,14 +156,14 @@ }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "MediaController", "exportName": "MediaController", "module": { "%": "core/media-controller" }, - "blueprintModule": { + "objectDescriptorModule": { "%": "core/media-controller.meta" }, "prototypeName": "MediaController", diff --git a/core/meta/object-descriptor-reference.mjson b/core/meta/object-descriptor-reference.mjson index fd416f4f12..8d12976782 100644 --- a/core/meta/object-descriptor-reference.mjson +++ b/core/meta/object-descriptor-reference.mjson @@ -23,7 +23,7 @@ "@": "value_target_object_descriptor" } ], - "propertyBlueprintGroups": { + "propertyDescriptorGroups": { "associations": [ { "@": "value_target_object_descriptor" diff --git a/core/promise-controller.meta b/core/promise-controller.meta index c6ac5db5aa..85c015298e 100644 --- a/core/promise-controller.meta +++ b/core/promise-controller.meta @@ -1,9 +1,9 @@ { "promiseController_promise": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "promise", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "object", @@ -11,10 +11,10 @@ } }, "promiseController_value": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "value", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "object", @@ -22,10 +22,10 @@ } }, "promiseController_error": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "error", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "object", @@ -33,10 +33,10 @@ } }, "promiseController_pending": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "pending", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "boolean", @@ -44,10 +44,10 @@ } }, "promiseController_fulfilled": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "fulfilled", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "boolean", @@ -55,10 +55,10 @@ } }, "promiseController_rejected": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "rejected", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "boolean", @@ -66,7 +66,7 @@ } }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "PromiseController", "customPrototype": false, @@ -113,7 +113,7 @@ ] }, "propertyValidationRules": {}, - "blueprintModule": { + "objectDescriptorModule": { "%": "core/promise-controller.meta" }, "exportName": "PromiseController", diff --git a/core/radio-button-controller.meta b/core/radio-button-controller.meta index 7bbe73f29a..618634c639 100644 --- a/core/radio-button-controller.meta +++ b/core/radio-button-controller.meta @@ -1,38 +1,38 @@ { - "blueprint_radio_button_controller_value": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_radio_button_controller_value": { + "prototype": "core/meta/property-descriptor", "values": { "name": "value", - "blueprint": { "@": "root" }, + "objectDescriptor": { "@": "root" }, "valueType": "object", "helpKey": "" } }, - "blueprint_radio_button_controller_contentController": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_radio_button_controller_contentController": { + "prototype": "core/meta/property-descriptor", "values": { "name": "contentController", - "blueprint": { "@": "root" }, + "objectDescriptor": { "@": "root" }, "valueType": "object", "helpKey": "" } }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "RadioButtonController", "propertyDescriptors": [ - { "@": "blueprint_radio_button_controller_value" }, - { "@": "blueprint_radio_button_controller_contentController" } + { "@": "objectDescriptor_radio_button_controller_value" }, + { "@": "objectDescriptor_radio_button_controller_contentController" } ], "propertyDescriptorGroups": { "Selection": [ - { "@": "blueprint_radio_button_controller_value" }, - { "@": "blueprint_radio_button_controller_contentController" } + { "@": "objectDescriptor_radio_button_controller_value" }, + { "@": "objectDescriptor_radio_button_controller_contentController" } ] }, "propertyValidationRules": {}, - "blueprintModule": { "%": "core/radio-button-controller.meta" }, + "objectDescriptorModule": { "%": "core/radio-button-controller.meta" }, "exportName": "RadioButtonController", "module": { "%": "core/radio-button-controller" } } diff --git a/core/range-controller.meta b/core/range-controller.meta index a77315849d..2e7fda17d7 100644 --- a/core/range-controller.meta +++ b/core/range-controller.meta @@ -1,9 +1,9 @@ { "rangeController_content": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "content", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": -1, @@ -12,10 +12,10 @@ } }, "rangeController_organizedContent": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "organizedContent", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": -1, @@ -24,10 +24,10 @@ } }, "rangeController_sortPath": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "sortPath", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "string", @@ -35,10 +35,10 @@ } }, "rangeController_reversed": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "reversed", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "boolean", @@ -46,10 +46,10 @@ } }, "rangeController_filterPath": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "filterPath", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "string", @@ -57,10 +57,10 @@ } }, "rangeController_selectAddedContent": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "selectAddedContent", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "boolean", @@ -68,10 +68,10 @@ } }, "rangeController_deselectInvisibleContent": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "deselectInvisibleContent", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "boolean", @@ -79,10 +79,10 @@ } }, "rangeController_clearSelectionOnOrderChange": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "clearSelectionOnOrderChange", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "boolean", @@ -90,10 +90,10 @@ } }, "rangeController_avoidsEmptySelection": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "avoidsEmptySelection", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "boolean", @@ -101,10 +101,10 @@ } }, "rangeController_multiSelect": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "multiSelect", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "boolean", @@ -112,7 +112,7 @@ } }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "RangeController", "customPrototype": false, @@ -183,7 +183,7 @@ ] }, "propertyValidationRules": {}, - "blueprintModule": { + "objectDescriptorModule": { "%": "core/range-controller.meta" }, "exportName": "RangeController", diff --git a/core/tree-controller.meta b/core/tree-controller.meta index b2a5903da1..d81d0f9fa0 100644 --- a/core/tree-controller.meta +++ b/core/tree-controller.meta @@ -1,9 +1,9 @@ { "treeController_content": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "content", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": -1, @@ -12,10 +12,10 @@ } }, "treeController_childrenPath": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "childrenPath", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "string", @@ -23,10 +23,10 @@ } }, "treeController_initiallyExpanded": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "initiallyExpanded", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "boolean", @@ -34,10 +34,10 @@ } }, "treeController_noneExpanded": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "noneExpanded", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "boolean", @@ -45,10 +45,10 @@ } }, "treeController_allExpanded": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "allExpanded", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "boolean", @@ -56,10 +56,10 @@ } }, "treeController_root": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "root", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "object", @@ -69,7 +69,7 @@ } }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "TreeController", "customPrototype": false, @@ -116,7 +116,7 @@ ] }, "propertyValidationRules": {}, - "blueprintModule": { + "objectDescriptorModule": { "%": "core/tree-controller.meta" }, "exportName": "TreeController", @@ -126,10 +126,10 @@ } }, "treeControllerNode_content": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "content", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": -1, @@ -138,10 +138,10 @@ } }, "treeControllerNode_expanded": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "expanded", - "blueprint": { + "objectDescriptor": { "@": "treeControllerNode" }, "valueType": "boolean", @@ -149,10 +149,10 @@ } }, "treeControllerNode_depth": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "depth", - "blueprint": { + "objectDescriptor": { "@": "treeControllerNode" }, "valueType": "number", @@ -160,10 +160,10 @@ } }, "treeControllerNode_index": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "index", - "blueprint": { + "objectDescriptor": { "@": "treeControllerNode" }, "valueType": "number", @@ -171,10 +171,10 @@ } }, "treeControllerNode_isFinal": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "isFinal", - "blueprint": { + "objectDescriptor": { "@": "treeControllerNode" }, "valueType": "boolean", @@ -182,10 +182,10 @@ } }, "treeControllerNode_parent": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "parent", - "blueprint": { + "objectDescriptor": { "@": "treeControllerNode" }, "valueType": "object", @@ -195,10 +195,10 @@ } }, "treeControllerNode_children": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "children", - "blueprint": { + "objectDescriptor": { "@": "treeControllerNode" }, "cardinality": -1, @@ -209,10 +209,10 @@ } }, "treeControllerNode_junctions": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "junctions", - "blueprint": { + "objectDescriptor": { "@": "treeControllerNode" }, "valueType": "object", @@ -220,10 +220,10 @@ } }, "treeControllerNode": { - "prototype": "core/meta/blueprint", + "prototype": "core/meta/object-descriptor", "values": { "name": "TreeControllerNode", - "blueprintModuleId": "core/tree-controller.meta", + "objectDescriptorModuleId": "core/tree-controller.meta", "prototypeName": "TreeControllerNode", "customPrototype": false, "propertyDescriptors": [ From 72d479d43b95dbefa7788acdba92c23adb5e8bbd Mon Sep 17 00:00:00 2001 From: cdebost Date: Tue, 5 Sep 2017 23:47:11 -0700 Subject: [PATCH 53/66] Remove uses of blueprint in ui/ --- ui/base/abstract-alert.meta | 16 +-- ui/base/abstract-button.meta | 24 ++-- ui/base/abstract-checkbox.meta | 24 ++-- ui/base/abstract-confirm.meta | 16 +-- ui/base/abstract-control.meta | 12 +- ui/base/abstract-image.meta | 24 ++-- ui/base/abstract-link.meta | 28 ++--- ui/base/abstract-number-field.meta | 28 ++--- ui/base/abstract-progress-bar.meta | 16 +-- ui/base/abstract-radio-button.meta | 24 ++-- ui/base/abstract-select.meta | 36 +++--- ui/base/abstract-slider.meta | 32 ++--- ui/base/abstract-text-area.meta | 20 +-- ui/base/abstract-text-field.meta | 20 +-- ui/base/abstract-toggle-button.meta | 28 ++--- ui/base/abstract-toggle-switch.meta | 12 +- ui/base/abstract-video.meta | 40 +++--- ui/button.reel/button.meta | 88 ++++++------- ui/checkbox.reel/checkbox.meta | 12 +- ui/component.meta | 154 +++++++++++------------ ui/condition.reel/condition.meta | 28 ++--- ui/control.meta | 80 ++++++------ ui/flow.reel/flow.meta | 110 ++++++++-------- ui/label.reel/label.meta | 16 +-- ui/loader.reel/loader.meta | 110 ++++++++-------- ui/modal-overlay.reel/modal-overlay.meta | 8 +- ui/overlay.reel/overlay.meta | 44 +++---- ui/repetition.reel/repetition.meta | 68 +++++----- ui/slider.reel/slider.meta | 32 ++--- ui/slot.reel/slot.meta | 28 ++--- ui/substitution.reel/substitution.meta | 38 +++--- ui/text-field.reel/text-field.meta | 22 ++-- ui/text-input.meta | 6 +- ui/text.reel/text.meta | 34 ++--- 34 files changed, 639 insertions(+), 639 deletions(-) diff --git a/ui/base/abstract-alert.meta b/ui/base/abstract-alert.meta index 136e04a004..c8b8d09d5a 100644 --- a/ui/base/abstract-alert.meta +++ b/ui/base/abstract-alert.meta @@ -1,28 +1,28 @@ { "title_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "title", "valueType": "string", - "blueprint": {"@": "root"} + "objectDescriptor": {"@": "root"} } }, "message_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "message", "valueType": "string", - "blueprint": {"@": "root"} + "objectDescriptor": {"@": "root"} } }, - "blueprint_parent": { + "objectDescriptor_parent": { "object": "ui/component.meta" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "Abstract Alert", - "parent": {"@": "blueprint_parent"}, + "parent": {"@": "objectDescriptor_parent"}, "propertyDescriptors": [ {"@": "title_property"}, {"@": "message_property"} @@ -35,7 +35,7 @@ {"@": "title_property"} ] }, - "blueprintModule": { + "objectDescriptorModule": { "%": "ui/base/abstract-alert.meta" }, "exportName": "AbstractAlert", diff --git a/ui/base/abstract-button.meta b/ui/base/abstract-button.meta index af4e50777e..0b87511bf4 100644 --- a/ui/base/abstract-button.meta +++ b/ui/base/abstract-button.meta @@ -1,53 +1,53 @@ { "enabled_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "enabled", "valueType": "boolean", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "label_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "label", "valueType": "string", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "holdThreshold_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "holdThreshold", "valueType": "number", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "active_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "active", "valueType": "boolean", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, - "blueprint_parent": { + "objectDescriptor_parent": { "object": "ui/base/abstract-control.meta" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "AbstractButton", "parent": { - "@": "blueprint_parent" + "@": "objectDescriptor_parent" }, "propertyDescriptors": [ { @@ -81,7 +81,7 @@ } ] }, - "blueprintModule": { + "objectDescriptorModule": { "%": "ui/base/abstract-button.meta" }, "exportName": "AbstractButton", diff --git a/ui/base/abstract-checkbox.meta b/ui/base/abstract-checkbox.meta index 9a26f0da01..2044da2406 100644 --- a/ui/base/abstract-checkbox.meta +++ b/ui/base/abstract-checkbox.meta @@ -1,53 +1,53 @@ { "enabled_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "enabled", "valueType": "boolean", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "value_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "value", "valueType": "object", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "checked_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "checked", "valueType": "boolean", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "active_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "active", "valueType": "boolean", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, - "blueprint_parent": { + "objectDescriptor_parent": { "object": "ui/base/abstract-control.meta" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "AbstractCheckbox", "parent": { - "@": "blueprint_parent" + "@": "objectDescriptor_parent" }, "propertyDescriptors": [ { @@ -81,7 +81,7 @@ } ] }, - "blueprintModule": { + "objectDescriptorModule": { "%": "ui/base/abstract-checkbox.meta" }, "exportName": "AbstractCheckbox", diff --git a/ui/base/abstract-confirm.meta b/ui/base/abstract-confirm.meta index a8019b4df4..380c42d151 100644 --- a/ui/base/abstract-confirm.meta +++ b/ui/base/abstract-confirm.meta @@ -1,28 +1,28 @@ { "okLabel_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "okLabel", "valueType": "string", - "blueprint": {"@": "root"} + "objectDescriptor": {"@": "root"} } }, "cancelLabel_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "cancelLabel", "valueType": "string", - "blueprint": {"@": "root"} + "objectDescriptor": {"@": "root"} } }, - "blueprint_parent": { + "objectDescriptor_parent": { "object": "ui/base/abstract-alert.meta" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "Abstract Confirm", - "parent": {"@": "blueprint_parent"}, + "parent": {"@": "objectDescriptor_parent"}, "propertyDescriptors": [ {"@": "okLabel_property"}, {"@": "cancelLabel_property"} @@ -33,7 +33,7 @@ {"@": "cancelLabel_property"} ] }, - "blueprintModule": { + "objectDescriptorModule": { "%": "ui/base/abstract-confirm.meta" }, "exportName": "AbstractConfirm", diff --git a/ui/base/abstract-control.meta b/ui/base/abstract-control.meta index 84de95083d..14ca302fd2 100644 --- a/ui/base/abstract-control.meta +++ b/ui/base/abstract-control.meta @@ -1,25 +1,25 @@ { "detail_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "detail", "valueType": "object", "readOnly": true, "collectionValueType": "dict", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, - "blueprint_parent": { + "objectDescriptor_parent": { "object": "ui/component.meta" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "AbstractControl", "parent": { - "@": "blueprint_parent" + "@": "objectDescriptor_parent" }, "propertyDescriptors": [ { @@ -33,7 +33,7 @@ } ] }, - "blueprintModule": { + "objectDescriptorModule": { "%": "ui/base/abstract-control.meta" }, "exportName": "AbstractControl", diff --git a/ui/base/abstract-image.meta b/ui/base/abstract-image.meta index b3a02e6534..d2876e4cf2 100644 --- a/ui/base/abstract-image.meta +++ b/ui/base/abstract-image.meta @@ -1,39 +1,39 @@ { "src_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "src", "valueType": "string", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "width_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "width", "valueType": "number", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "height_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "height", "valueType": "number", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "crossOrigin_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "crossOrigin", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "enum", @@ -45,15 +45,15 @@ "defaultValue": null } }, - "blueprint_parent": { + "objectDescriptor_parent": { "object": "ui/component.meta" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "AbstractImage", "parent": { - "@": "blueprint_parent" + "@": "objectDescriptor_parent" }, "propertyDescriptors": [ { @@ -87,7 +87,7 @@ } ] }, - "blueprintModule": { + "objectDescriptorModule": { "%": "ui/base/abstract-image.meta" }, "exportName": "AbstractImage", diff --git a/ui/base/abstract-link.meta b/ui/base/abstract-link.meta index 2a3a0840ea..0dbb448237 100644 --- a/ui/base/abstract-link.meta +++ b/ui/base/abstract-link.meta @@ -1,63 +1,63 @@ { "enabled_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "enabled", "valueType": "boolean", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "src_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "src", "valueType": "string", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "label_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "label", "valueType": "string", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "textAlternative_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "textAlternative", "valueType": "string", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "active_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "active", "valueType": "boolean", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, - "blueprint_parent": { + "objectDescriptor_parent": { "object": "ui/base/abstract-control.meta" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "AbstractLink", "parent": { - "@": "blueprint_parent" + "@": "objectDescriptor_parent" }, "propertyDescriptors": [ { @@ -97,7 +97,7 @@ } ] }, - "blueprintModule": { + "objectDescriptorModule": { "%": "ui/base/abstract-link.meta" }, "exportName": "AbstractLink", diff --git a/ui/base/abstract-number-field.meta b/ui/base/abstract-number-field.meta index fcb2d8f188..078690ed29 100644 --- a/ui/base/abstract-number-field.meta +++ b/ui/base/abstract-number-field.meta @@ -1,63 +1,63 @@ { "enabled_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "enabled", "valueType": "boolean", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "value_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "value", "valueType": "number", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "min_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "min", "valueType": "number", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "max_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "max", "valueType": "number", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "step_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "step", "valueType": "number", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, - "blueprint_parent": { + "objectDescriptor_parent": { "object": "ui/base/abstract-control.meta" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "AbstractNumberField", "parent": { - "@": "blueprint_parent" + "@": "objectDescriptor_parent" }, "propertyDescriptors": [ { @@ -95,7 +95,7 @@ } ] }, - "blueprintModule": { + "objectDescriptorModule": { "%": "ui/base/abstract-number-field.meta" }, "exportName": "AbstractNumberField", diff --git a/ui/base/abstract-progress-bar.meta b/ui/base/abstract-progress-bar.meta index db8091b31b..fa5e0bac37 100644 --- a/ui/base/abstract-progress-bar.meta +++ b/ui/base/abstract-progress-bar.meta @@ -1,33 +1,33 @@ { "value_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "value", "valueType": "number", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "max_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "max", "valueType": "number", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, - "blueprint_parent": { + "objectDescriptor_parent": { "object": "ui/base/abstract-control.meta" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "AbstractProgressBar", "parent": { - "@": "blueprint_parent" + "@": "objectDescriptor_parent" }, "propertyDescriptors": [ { @@ -47,7 +47,7 @@ } ] }, - "blueprintModule": { + "objectDescriptorModule": { "%": "ui/base/abstract-progress-bar.meta" }, "exportName": "AbstractProgressBar", diff --git a/ui/base/abstract-radio-button.meta b/ui/base/abstract-radio-button.meta index 6ddb6c911f..4bf3bd10a0 100644 --- a/ui/base/abstract-radio-button.meta +++ b/ui/base/abstract-radio-button.meta @@ -1,53 +1,53 @@ { "enabled_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "enabled", "valueType": "boolean", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "checked_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "checked", "valueType": "boolean", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "active_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "active", "valueType": "boolean", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "radioButtonController_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "radioButtonController", "valueType": "object", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, - "blueprint_parent": { + "objectDescriptor_parent": { "object": "ui/base/abstract-control.meta" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "AbstractRadioButton", "parent": { - "@": "blueprint_parent" + "@": "objectDescriptor_parent" }, "propertyDescriptors": [ { @@ -81,7 +81,7 @@ } ] }, - "blueprintModule": { + "objectDescriptorModule": { "%": "ui/base/abstract-radio-button.meta" }, "exportName": "AbstractRadioButton", diff --git a/ui/base/abstract-select.meta b/ui/base/abstract-select.meta index 959b39b322..644bbd1c6e 100644 --- a/ui/base/abstract-select.meta +++ b/ui/base/abstract-select.meta @@ -1,83 +1,83 @@ { "enabled_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "enabled", "valueType": "boolean", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "contentController_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "contentController", "valueType": "object", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "content_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "content", "valueType": "object", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "labelPropertyName_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "labelPropertyName", "valueType": "string", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "value_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "value", "valueType": "object", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "values_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "values", "valueType": "object", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "multiSelect_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "multiSelect", "valueType": "boolean", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, - "blueprint_parent": { + "objectDescriptor_parent": { "object": "ui/base/abstract-control.meta" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "AbstractSelect", "parent": { - "@": "blueprint_parent" + "@": "objectDescriptor_parent" }, "propertyDescriptors": [ { @@ -127,7 +127,7 @@ } ] }, - "blueprintModule": { + "objectDescriptorModule": { "%": "ui/base/abstract-select.meta" }, "exportName": "AbstractSelect", diff --git a/ui/base/abstract-slider.meta b/ui/base/abstract-slider.meta index 9a1c7ef06d..f689567e31 100644 --- a/ui/base/abstract-slider.meta +++ b/ui/base/abstract-slider.meta @@ -1,56 +1,56 @@ { "enabled_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "enabled", "valueType": "boolean", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "value_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "value", "valueType": "object", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "min_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "min", "valueType": "number", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "max_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "max", "valueType": "number", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "step_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "step", "valueType": "number", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "axis_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "axis", "valueType": "enum", @@ -59,20 +59,20 @@ "vertical" ], "defaultValue": "horizontal", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, - "blueprint_parent": { + "objectDescriptor_parent": { "object": "ui/base/abstract-control.meta" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "AbstractSlider", "parent": { - "@": "blueprint_parent" + "@": "objectDescriptor_parent" }, "propertyDescriptors": [ { @@ -116,7 +116,7 @@ } ] }, - "blueprintModule": { + "objectDescriptorModule": { "%": "ui/base/abstract-slider.meta" }, "exportName": "AbstractSlider", diff --git a/ui/base/abstract-text-area.meta b/ui/base/abstract-text-area.meta index aaac77b3d9..44968a3301 100644 --- a/ui/base/abstract-text-area.meta +++ b/ui/base/abstract-text-area.meta @@ -1,43 +1,43 @@ { "enabled_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "enabled", "valueType": "boolean", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "value_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "value", "valueType": "string", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "placeholderValue_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "placeholderValue", "valueType": "string", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, - "blueprint_parent": { + "objectDescriptor_parent": { "object": "ui/component.meta" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "AbstractTextArea", "parent": { - "@": "blueprint_parent" + "@": "objectDescriptor_parent" }, "propertyDescriptors": [ { @@ -63,7 +63,7 @@ } ] }, - "blueprintModule": { + "objectDescriptorModule": { "%": "ui/base/abstract-text-area.meta" }, "exportName": "AbstractTextArea", diff --git a/ui/base/abstract-text-field.meta b/ui/base/abstract-text-field.meta index c27c2c805a..1df8631d57 100644 --- a/ui/base/abstract-text-field.meta +++ b/ui/base/abstract-text-field.meta @@ -1,43 +1,43 @@ { "enabled_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "enabled", "valueType": "boolean", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "value_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "value", "valueType": "string", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "placeholderValue_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "placeholderValue", "valueType": "string", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, - "blueprint_parent": { + "objectDescriptor_parent": { "object": "ui/base/abstract-control.meta" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "AbstractTextField", "parent": { - "@": "blueprint_parent" + "@": "objectDescriptor_parent" }, "propertyDescriptors": [ { @@ -63,7 +63,7 @@ } ] }, - "blueprintModule": { + "objectDescriptorModule": { "%": "ui/base/abstract-text-field.meta" }, "exportName": "AbstractTextField", diff --git a/ui/base/abstract-toggle-button.meta b/ui/base/abstract-toggle-button.meta index 2827d79f9e..f2d5361241 100644 --- a/ui/base/abstract-toggle-button.meta +++ b/ui/base/abstract-toggle-button.meta @@ -1,63 +1,63 @@ { "enabled_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "enabled", "valueType": "boolean", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "pressedLabel_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "pressedLabel", "valueType": "string", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "unpressedLabel_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "unpressedLabel", "valueType": "string", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "holdThreshold_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "holdThreshold", "valueType": "number", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "active_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "active", "valueType": "boolean", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, - "blueprint_parent": { + "objectDescriptor_parent": { "object": "ui/base/abstract-control.meta" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "AbstractToggleButton", "parent": { - "@": "blueprint_parent" + "@": "objectDescriptor_parent" }, "propertyDescriptors": [ { @@ -97,7 +97,7 @@ } ] }, - "blueprintModule": { + "objectDescriptorModule": { "%": "ui/base/abstract-toggle-button.meta" }, "exportName": "AbstractToggleButton", diff --git a/ui/base/abstract-toggle-switch.meta b/ui/base/abstract-toggle-switch.meta index 7e996b36e7..08510110eb 100644 --- a/ui/base/abstract-toggle-switch.meta +++ b/ui/base/abstract-toggle-switch.meta @@ -1,23 +1,23 @@ { "checked_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "checked", "valueType": "boolean", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, - "blueprint_parent": { + "objectDescriptor_parent": { "object": "ui/base/abstract-control.meta" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "AbstractToggleSwitch", "parent": { - "@": "blueprint_parent" + "@": "objectDescriptor_parent" }, "propertyDescriptors": [ { @@ -31,7 +31,7 @@ } ] }, - "blueprintModule": { + "objectDescriptorModule": { "%": "ui/base/abstract-toggle-switch.meta" }, "exportName": "AbstractToggleSwitch", diff --git a/ui/base/abstract-video.meta b/ui/base/abstract-video.meta index 526f156663..827e7ec797 100644 --- a/ui/base/abstract-video.meta +++ b/ui/base/abstract-video.meta @@ -1,79 +1,79 @@ { "mediaElement_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "mediaElement", - "blueprint": {"@": "root"}, + "objectDescriptor": {"@": "root"}, "valueType": "object" } }, "videoController_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "videoController", - "blueprint": {"@": "root"}, + "objectDescriptor": {"@": "root"}, "valueType": "object" } }, "src_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "src", - "blueprint": {"@": "root"}, + "objectDescriptor": {"@": "root"}, "valueType": "string" } }, "sources_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "sources", - "blueprint": {"@": "root"}, + "objectDescriptor": {"@": "root"}, "valueType": "object" } }, "repeat_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "repeat", - "blueprint": {"@": "root"}, + "objectDescriptor": {"@": "root"}, "valueType": "boolean" } }, "posterSrc_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "posterSrc", - "blueprint": {"@": "root"}, + "objectDescriptor": {"@": "root"}, "valueType": "string" } }, "supportsFullScreen_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "supportsFullScreen", - "blueprint": {"@": "root"}, + "objectDescriptor": {"@": "root"}, "valueType": "boolean" } }, "isFullScreen_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "isFullScreen", - "blueprint": {"@": "root"}, + "objectDescriptor": {"@": "root"}, "readOnly": true, "valueType": "boolean" } }, - "blueprint_parent": { + "objectDescriptor_parent": { "object": "ui/component.meta" }, "root": { - "prototype": "core/meta/blueprint", + "prototype": "core/meta/object-descriptor", "values": { "name": "AbstractVideo", - "blueprintModuleId": "ui/base/abstract-video.meta", + "objectDescriptorModuleId": "ui/base/abstract-video.meta", "prototypeName": "AbstractVideo", - "parent": {"@": "blueprint_parent"}, + "parent": {"@": "objectDescriptor_parent"}, "propertyDescriptors": [ {"@": "mediaElement_property"}, {"@": "videoController_property"}, diff --git a/ui/button.reel/button.meta b/ui/button.reel/button.meta index 861257c3fa..0f0c1ce905 100644 --- a/ui/button.reel/button.meta +++ b/ui/button.reel/button.meta @@ -1,9 +1,9 @@ { - "blueprint_button_enabled": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_button_enabled": { + "prototype": "core/meta/property-descriptor", "values": { "name": "enabled", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": 1, @@ -15,11 +15,11 @@ "helpKey": "" } }, - "blueprint_button_formaction": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_button_formaction": { + "prototype": "core/meta/property-descriptor", "values": { "name": "formaction", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": 1, @@ -31,11 +31,11 @@ "helpKey": "" } }, - "blueprint_button_formenctype": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_button_formenctype": { + "prototype": "core/meta/property-descriptor", "values": { "name": "formenctype", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": 1, @@ -52,11 +52,11 @@ "helpKey": "" } }, - "blueprint_button_formmethod": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_button_formmethod": { + "prototype": "core/meta/property-descriptor", "values": { "name": "formmethod", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": 1, @@ -72,11 +72,11 @@ "helpKey": "" } }, - "blueprint_button_formnovalidate": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_button_formnovalidate": { + "prototype": "core/meta/property-descriptor", "values": { "name": "formnovalidate", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": 1, @@ -88,11 +88,11 @@ "helpKey": "" } }, - "blueprint_button_formtarget": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_button_formtarget": { + "prototype": "core/meta/property-descriptor", "values": { "name": "formtarget", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": 1, @@ -104,11 +104,11 @@ "helpKey": "" } }, - "blueprint_button_label": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_button_label": { + "prototype": "core/meta/property-descriptor", "values": { "name": "label", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": 1, @@ -120,11 +120,11 @@ "helpKey": "" } }, - "blueprint_button_type": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_button_type": { + "prototype": "core/meta/property-descriptor", "values": { "name": "type", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": 1, @@ -141,75 +141,75 @@ "helpKey": "" } }, - "blueprint_control_reference": { + "objectDescriptor_control_reference": { "object": "ui/control.meta" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "button", "customPrototype": false, "parent": { - "@": "blueprint_control_reference" + "@": "objectDescriptor_control_reference" }, "propertyDescriptors": [ { - "@": "blueprint_button_enabled" + "@": "objectDescriptor_button_enabled" }, { - "@": "blueprint_button_formaction" + "@": "objectDescriptor_button_formaction" }, { - "@": "blueprint_button_formenctype" + "@": "objectDescriptor_button_formenctype" }, { - "@": "blueprint_button_formmethod" + "@": "objectDescriptor_button_formmethod" }, { - "@": "blueprint_button_formnovalidate" + "@": "objectDescriptor_button_formnovalidate" }, { - "@": "blueprint_button_formtarget" + "@": "objectDescriptor_button_formtarget" }, { - "@": "blueprint_button_label" + "@": "objectDescriptor_button_label" }, { - "@": "blueprint_button_type" + "@": "objectDescriptor_button_type" } ], "propertyDescriptorGroups": { "button": [ { - "@": "blueprint_button_label" + "@": "objectDescriptor_button_label" }, { - "@": "blueprint_button_type" + "@": "objectDescriptor_button_type" }, { - "@": "blueprint_button_enabled" + "@": "objectDescriptor_button_enabled" } ], "button-form": [ { - "@": "blueprint_button_formaction" + "@": "objectDescriptor_button_formaction" }, { - "@": "blueprint_button_formenctype" + "@": "objectDescriptor_button_formenctype" }, { - "@": "blueprint_button_formmethod" + "@": "objectDescriptor_button_formmethod" }, { - "@": "blueprint_button_formnovalidate" + "@": "objectDescriptor_button_formnovalidate" }, { - "@": "blueprint_button_formtarget" + "@": "objectDescriptor_button_formtarget" } ] }, "propertyValidationRules": {}, - "blueprintModule": { + "objectDescriptorModule": { "%": "ui/button.reel/button.meta" }, "exportName": "Button", diff --git a/ui/checkbox.reel/checkbox.meta b/ui/checkbox.reel/checkbox.meta index 71e71a84bf..08eeee55d1 100644 --- a/ui/checkbox.reel/checkbox.meta +++ b/ui/checkbox.reel/checkbox.meta @@ -1,23 +1,23 @@ { "checked_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "checked", "valueType": "boolean", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, - "blueprint_parent": { + "objectDescriptor_parent": { "object": "ui/control.meta" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "AbstractCheckbox", "parent": { - "@": "blueprint_parent" + "@": "objectDescriptor_parent" }, "propertyDescriptors": [ { @@ -39,7 +39,7 @@ } ] }, - "blueprintModule": { + "objectDescriptorModule": { "%": "ui/base/abstract-checkbox.meta" }, "exportName": "AbstractCheckbox", diff --git a/ui/component.meta b/ui/component.meta index 06bdbf4caa..57152cb647 100644 --- a/ui/component.meta +++ b/ui/component.meta @@ -1,9 +1,9 @@ { - "blueprint_component_identifier": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_component_identifier": { + "prototype": "core/meta/property-descriptor", "values": { "name": "identifier", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": 1, @@ -11,11 +11,11 @@ "helpKey": "" } }, - "blueprint_component_element": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_component_element": { + "prototype": "core/meta/property-descriptor", "values": { "name": "element", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": 1, @@ -24,11 +24,11 @@ "helpKey": "" } }, - "blueprint_component_classList": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_component_classList": { + "prototype": "core/meta/property-descriptor", "values": { "name": "classList", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": -1, @@ -41,11 +41,11 @@ "helpKey": "" } }, - "blueprint_component_accesskey": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_component_accesskey": { + "prototype": "core/meta/property-descriptor", "values": { "name": "accesskey", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": 1, @@ -57,11 +57,11 @@ "helpKey": "" } }, - "blueprint_component_contenteditable": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_component_contenteditable": { + "prototype": "core/meta/property-descriptor", "values": { "name": "contenteditable", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": 1, @@ -78,11 +78,11 @@ "helpKey": "" } }, - "blueprint_component_contextmenu": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_component_contextmenu": { + "prototype": "core/meta/property-descriptor", "values": { "name": "contextmenu", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": 1, @@ -94,11 +94,11 @@ "helpKey": "" } }, - "blueprint_component_dir": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_component_dir": { + "prototype": "core/meta/property-descriptor", "values": { "name": "dir", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": 1, @@ -115,11 +115,11 @@ "helpKey": "" } }, - "blueprint_component_draggable": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_component_draggable": { + "prototype": "core/meta/property-descriptor", "values": { "name": "draggable", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": 1, @@ -136,11 +136,11 @@ "helpKey": "" } }, - "blueprint_component_dropzone": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_component_dropzone": { + "prototype": "core/meta/property-descriptor", "values": { "name": "dropzone", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": 1, @@ -152,11 +152,11 @@ "helpKey": "" } }, - "blueprint_component_hidden": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_component_hidden": { + "prototype": "core/meta/property-descriptor", "values": { "name": "hidden", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": 1, @@ -168,11 +168,11 @@ "helpKey": "" } }, - "blueprint_component_lang": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_component_lang": { + "prototype": "core/meta/property-descriptor", "values": { "name": "lang", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": 1, @@ -184,11 +184,11 @@ "helpKey": "" } }, - "blueprint_component_spellcheck": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_component_spellcheck": { + "prototype": "core/meta/property-descriptor", "values": { "name": "spellcheck", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": 1, @@ -200,11 +200,11 @@ "helpKey": "" } }, - "blueprint_component_style": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_component_style": { + "prototype": "core/meta/property-descriptor", "values": { "name": "style", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": 1, @@ -216,11 +216,11 @@ "helpKey": "" } }, - "blueprint_component_tabindex": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_component_tabindex": { + "prototype": "core/meta/property-descriptor", "values": { "name": "tabindex", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": 1, @@ -232,11 +232,11 @@ "helpKey": "" } }, - "blueprint_component_title": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_component_title": { + "prototype": "core/meta/property-descriptor", "values": { "name": "title", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": 1, @@ -249,108 +249,108 @@ } }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "Component", "customPrototype": false, "propertyDescriptors": [ { - "@": "blueprint_component_identifier" + "@": "objectDescriptor_component_identifier" }, { - "@": "blueprint_component_element" + "@": "objectDescriptor_component_element" }, { - "@": "blueprint_component_classList" + "@": "objectDescriptor_component_classList" }, { - "@": "blueprint_component_accesskey" + "@": "objectDescriptor_component_accesskey" }, { - "@": "blueprint_component_contenteditable" + "@": "objectDescriptor_component_contenteditable" }, { - "@": "blueprint_component_contextmenu" + "@": "objectDescriptor_component_contextmenu" }, { - "@": "blueprint_component_dir" + "@": "objectDescriptor_component_dir" }, { - "@": "blueprint_component_draggable" + "@": "objectDescriptor_component_draggable" }, { - "@": "blueprint_component_dropzone" + "@": "objectDescriptor_component_dropzone" }, { - "@": "blueprint_component_hidden" + "@": "objectDescriptor_component_hidden" }, { - "@": "blueprint_component_lang" + "@": "objectDescriptor_component_lang" }, { - "@": "blueprint_component_spellcheck" + "@": "objectDescriptor_component_spellcheck" }, { - "@": "blueprint_component_style" + "@": "objectDescriptor_component_style" }, { - "@": "blueprint_component_tabindex" + "@": "objectDescriptor_component_tabindex" }, { - "@": "blueprint_component_title" + "@": "objectDescriptor_component_title" } ], - "propertyBlueprintGroups": { + "propertyDescriptorGroups": { "component": [ { - "@": "blueprint_component_identifier" + "@": "objectDescriptor_component_identifier" } ], "element": [ { - "@": "blueprint_component_classList" + "@": "objectDescriptor_component_classList" }, { - "@": "blueprint_component_accesskey" + "@": "objectDescriptor_component_accesskey" }, { - "@": "blueprint_component_contenteditable" + "@": "objectDescriptor_component_contenteditable" }, { - "@": "blueprint_component_contextmenu" + "@": "objectDescriptor_component_contextmenu" }, { - "@": "blueprint_component_dir" + "@": "objectDescriptor_component_dir" }, { - "@": "blueprint_component_draggable" + "@": "objectDescriptor_component_draggable" }, { - "@": "blueprint_component_dropzone" + "@": "objectDescriptor_component_dropzone" }, { - "@": "blueprint_component_hidden" + "@": "objectDescriptor_component_hidden" }, { - "@": "blueprint_component_lang" + "@": "objectDescriptor_component_lang" }, { - "@": "blueprint_component_spellcheck" + "@": "objectDescriptor_component_spellcheck" }, { - "@": "blueprint_component_style" + "@": "objectDescriptor_component_style" }, { - "@": "blueprint_component_tabindex" + "@": "objectDescriptor_component_tabindex" }, { - "@": "blueprint_component_title" + "@": "objectDescriptor_component_title" } ] }, "propertyValidationRules": {}, - "blueprintModule": { + "objectDescriptorModule": { "%": "ui/component.meta" }, "exportName": "Component", diff --git a/ui/condition.reel/condition.meta b/ui/condition.reel/condition.meta index 4cad5f99c9..cc9323629e 100644 --- a/ui/condition.reel/condition.meta +++ b/ui/condition.reel/condition.meta @@ -1,19 +1,19 @@ { - "blueprint_condition_condition": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_condition_condition": { + "prototype": "core/meta/property-descriptor", "values": { "name": "condition", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valyeType": "boolean" } }, - "blueprint_condition_removalStrategy": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_condition_removalStrategy": { + "prototype": "core/meta/property-descriptor", "values": { "name": "removalStrategy", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "enum", @@ -24,35 +24,35 @@ "defaultValue": "hide" } }, - "blueprint_component_reference": { + "objectDescriptor_component_reference": { "object": "ui/component.meta" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "Condition", "parent": { - "@": "blueprint_component_reference" + "@": "objectDescriptor_component_reference" }, "propertyDescriptors": [ { - "@": "blueprint_condition_condition" + "@": "objectDescriptor_condition_condition" }, { - "@": "blueprint_condition_removalStrategy" + "@": "objectDescriptor_condition_removalStrategy" } ], "propertyDescriptorGroups": { "Condition": [ { - "@": "blueprint_condition_condition" + "@": "objectDescriptor_condition_condition" }, { - "@": "blueprint_condition_removalStrategy" + "@": "objectDescriptor_condition_removalStrategy" } ] }, - "blueprintModule": { + "objectDescriptorModule": { "%": "ui/condition.reel/condition.meta" }, "exportName": "Condition", diff --git a/ui/control.meta b/ui/control.meta index 599246772f..2d3ac7ca28 100644 --- a/ui/control.meta +++ b/ui/control.meta @@ -1,9 +1,9 @@ { - "blueprint_control_autofocus": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_control_autofocus": { + "prototype": "core/meta/property-descriptor", "values": { "name": "autofocus", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": 1, @@ -15,11 +15,11 @@ "helpKey": "" } }, - "blueprint_control_disabled": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_control_disabled": { + "prototype": "core/meta/property-descriptor", "values": { "name": "disabled", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": 1, @@ -31,11 +31,11 @@ "helpKey": "" } }, - "blueprint_control_form": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_control_form": { + "prototype": "core/meta/property-descriptor", "values": { "name": "form", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": 1, @@ -47,11 +47,11 @@ "helpKey": "" } }, - "blueprint_control_name": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_control_name": { + "prototype": "core/meta/property-descriptor", "values": { "name": "name", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": 1, @@ -63,11 +63,11 @@ "helpKey": "" } }, - "blueprint_control_readonly": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_control_readonly": { + "prototype": "core/meta/property-descriptor", "values": { "name": "readonly", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": 1, @@ -79,11 +79,11 @@ "helpKey": "" } }, - "blueprint_control_value": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_control_value": { + "prototype": "core/meta/property-descriptor", "values": { "name": "value", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": 1, @@ -95,77 +95,77 @@ "helpKey": "" } }, - "blueprint_control_active": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_control_active": { + "prototype": "core/meta/property-descriptor", "values": { "name": "active", "valueType": "boolean", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, - "blueprint_component_reference": { + "objectDescriptor_component_reference": { "object": "ui/component.meta" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "Control", "customPrototype": false, "parent": { - "@": "blueprint_component_reference" + "@": "objectDescriptor_component_reference" }, "propertyDescriptors": [ { - "@": "blueprint_control_autofocus" + "@": "objectDescriptor_control_autofocus" }, { - "@": "blueprint_control_disabled" + "@": "objectDescriptor_control_disabled" }, { - "@": "blueprint_control_form" + "@": "objectDescriptor_control_form" }, { - "@": "blueprint_control_name" + "@": "objectDescriptor_control_name" }, { - "@": "blueprint_control_readonly" + "@": "objectDescriptor_control_readonly" }, { - "@": "blueprint_control_value" + "@": "objectDescriptor_control_value" }, { - "@": "blueprint_control_active" + "@": "objectDescriptor_control_active" } ], - "propertyBlueprintGroups": { + "propertyDescriptorGroups": { "control": [ { - "@": "blueprint_control_autofocus" + "@": "objectDescriptor_control_autofocus" }, { - "@": "blueprint_control_disabled" + "@": "objectDescriptor_control_disabled" }, { - "@": "blueprint_control_form" + "@": "objectDescriptor_control_form" }, { - "@": "blueprint_control_name" + "@": "objectDescriptor_control_name" }, { - "@": "blueprint_control_readonly" + "@": "objectDescriptor_control_readonly" }, { - "@": "blueprint_control_value" + "@": "objectDescriptor_control_value" }, { - "@": "blueprint_control_active" + "@": "objectDescriptor_control_active" } ] }, "propertyValidationRules": {}, - "blueprintModule": { + "objectDescriptorModule": { "%": "ui/control.meta" }, "exportName": "Control", diff --git a/ui/flow.reel/flow.meta b/ui/flow.reel/flow.meta index 8b8c35dfc1..730301c4c7 100644 --- a/ui/flow.reel/flow.meta +++ b/ui/flow.reel/flow.meta @@ -1,42 +1,42 @@ { - "blueprint_flow_stride": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_flow_stride": { + "prototype": "core/meta/property-descriptor", "values": { "name": "stride", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "number", "helpKey": "" } }, - "blueprint_flow_hasElasticScrolling": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_flow_hasElasticScrolling": { + "prototype": "core/meta/property-descriptor", "values": { "name": "hasElasticScrolling", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "boolean", "helpKey": "" } }, - "blueprint_flow_momentumDuration": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_flow_momentumDuration": { + "prototype": "core/meta/property-descriptor", "values": { "name": "momentumDuration", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "number", "helpKey": "" } }, - "blueprint_flow_content": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_flow_content": { + "prototype": "core/meta/property-descriptor", "values": { "name": "content", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": -1, @@ -44,22 +44,22 @@ "helpKey": "" } }, - "blueprint_flow_contentController": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_flow_contentController": { + "prototype": "core/meta/property-descriptor", "values": { "name": "contentController", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "object", "helpKey": "" } }, - "blueprint_flow_activeIndexes": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_flow_activeIndexes": { + "prototype": "core/meta/property-descriptor", "values": { "name": "activeIndexes", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": -1, @@ -67,44 +67,44 @@ "helpKey": "" } }, - "blueprint_flow_isSelectionEnabled": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_flow_isSelectionEnabled": { + "prototype": "core/meta/property-descriptor", "values": { "name": "isSelectionEnabled", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "boolean", "helpKey": "" } }, - "blueprint_flow_hasSelectedIndexScrolling": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_flow_hasSelectedIndexScrolling": { + "prototype": "core/meta/property-descriptor", "values": { "name": "hasSelectedIndexScrolling", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "boolean", "helpKey": "" } }, - "blueprint_flow_scrollingTransitionDuration": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_flow_scrollingTransitionDuration": { + "prototype": "core/meta/property-descriptor", "values": { "name": "scrollingTransitionDuration", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "number", "helpKey": "" } }, - "blueprint_flow_selectedIndexes": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_flow_selectedIndexes": { + "prototype": "core/meta/property-descriptor", "values": { "name": "selectedIndexes", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": -1, @@ -112,89 +112,89 @@ "helpKey": "" } }, - "blueprint_component_reference": { + "objectDescriptor_component_reference": { "object": "ui/component.meta" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "Flow", "customPrototype": false, "parent": { - "@": "blueprint_component_reference" + "@": "objectDescriptor_component_reference" }, "propertyDescriptors": [ { - "@": "blueprint_flow_stride" + "@": "objectDescriptor_flow_stride" }, { - "@": "blueprint_flow_hasElasticScrolling" + "@": "objectDescriptor_flow_hasElasticScrolling" }, { - "@": "blueprint_flow_momentumDuration" + "@": "objectDescriptor_flow_momentumDuration" }, { - "@": "blueprint_flow_content" + "@": "objectDescriptor_flow_content" }, { - "@": "blueprint_flow_contentController" + "@": "objectDescriptor_flow_contentController" }, { - "@": "blueprint_flow_activeIndexes" + "@": "objectDescriptor_flow_activeIndexes" }, { - "@": "blueprint_flow_isSelectionEnabled" + "@": "objectDescriptor_flow_isSelectionEnabled" }, { - "@": "blueprint_flow_hasSelectedIndexScrolling" + "@": "objectDescriptor_flow_hasSelectedIndexScrolling" }, { - "@": "blueprint_flow_scrollingTransitionDuration" + "@": "objectDescriptor_flow_scrollingTransitionDuration" }, { - "@": "blueprint_flow_selectedIndexes" + "@": "objectDescriptor_flow_selectedIndexes" } ], - "propertyBlueprintGroups": { + "propertyDescriptorGroups": { "behavior": [ { - "@": "blueprint_flow_stride" + "@": "objectDescriptor_flow_stride" }, { - "@": "blueprint_flow_hasElasticScrolling" + "@": "objectDescriptor_flow_hasElasticScrolling" }, { - "@": "blueprint_flow_momentumDuration" + "@": "objectDescriptor_flow_momentumDuration" } ], "data": [ { - "@": "blueprint_flow_content" + "@": "objectDescriptor_flow_content" }, { - "@": "blueprint_flow_contentController" + "@": "objectDescriptor_flow_contentController" }, { - "@": "blueprint_flow_activeIndexes" + "@": "objectDescriptor_flow_activeIndexes" } ], "selection": [ { - "@": "blueprint_flow_isSelectionEnabled" + "@": "objectDescriptor_flow_isSelectionEnabled" }, { - "@": "blueprint_flow_hasSelectedIndexScrolling" + "@": "objectDescriptor_flow_hasSelectedIndexScrolling" }, { - "@": "blueprint_flow_scrollingTransitionDuration" + "@": "objectDescriptor_flow_scrollingTransitionDuration" }, { - "@": "blueprint_flow_selectedIndexes" + "@": "objectDescriptor_flow_selectedIndexes" } ] }, "propertyValidationRules": {}, - "blueprintModule": { + "objectDescriptorModule": { "%": "ui/flow.reel/flow.meta" }, "exportName": "Flow", diff --git a/ui/label.reel/label.meta b/ui/label.reel/label.meta index e5405c38a4..07041a47c5 100644 --- a/ui/label.reel/label.meta +++ b/ui/label.reel/label.meta @@ -1,22 +1,22 @@ { "target_property": { - "prototype": "core/meta/association-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "target", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "object", - "targetBlueprint": { + "valueDescriptor": { "@": "component_reference" } } }, "action_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "action", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "string" @@ -29,7 +29,7 @@ "object": "ui/text.reel/text.meta" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "Label", "customPrototype": false, @@ -44,7 +44,7 @@ "@": "action_property" } ], - "propertyBlueprintGroups": { + "propertyDescriptorGroups": { "Label": [ { "@": "target_property" @@ -55,7 +55,7 @@ ] }, "propertyValidationRules": {}, - "blueprintModule": { + "objectDescriptorModule": { "%": "ui/label.reel/label.meta" }, "exportName": "Label", diff --git a/ui/loader.reel/loader.meta b/ui/loader.reel/loader.meta index 58d0a5f019..6b97e4db00 100644 --- a/ui/loader.reel/loader.meta +++ b/ui/loader.reel/loader.meta @@ -1,171 +1,171 @@ { - "blueprint_loader_mainModule": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_loader_mainModule": { + "prototype": "core/meta/property-descriptor", "values": { "name": "mainModule", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, - "blueprint_loader_mainName": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_loader_mainName": { + "prototype": "core/meta/property-descriptor", "values": { "name": "mainName", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, - "blueprint_loader_includeFrameworkModules": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_loader_includeFrameworkModules": { + "prototype": "core/meta/property-descriptor", "values": { "name": "includeFrameworkModules", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, - "blueprint_loader_minimumBootstrappingDuration": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_loader_minimumBootstrappingDuration": { + "prototype": "core/meta/property-descriptor", "values": { "name": "minimumBootstrappingDuration", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, - "blueprint_loader_minimumLoadingDuration": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_loader_minimumLoadingDuration": { + "prototype": "core/meta/property-descriptor", "values": { "name": "minimumLoadingDuration", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, - "blueprint_loader_currentStage": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_loader_currentStage": { + "prototype": "core/meta/property-descriptor", "values": { "name": "currentStage", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, - "blueprint_loader_isLoadingMainComponent": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_loader_isLoadingMainComponent": { + "prototype": "core/meta/property-descriptor", "values": { "name": "isLoadingMainComponent", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, - "blueprint_loader_readyToShowLoader": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_loader_readyToShowLoader": { + "prototype": "core/meta/property-descriptor", "values": { "name": "readyToShowLoader", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, - "blueprint_loader_readyToShowMainComponent": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_loader_readyToShowMainComponent": { + "prototype": "core/meta/property-descriptor", "values": { "name": "readyToShowMainComponent", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, - "blueprint_loader_removeContentOnLoad": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_loader_removeContentOnLoad": { + "prototype": "core/meta/property-descriptor", "values": { "name": "removeContentOnLoad", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, - "blueprint_component_reference": { + "objectDescriptor_component_reference": { "object": "ui/component.meta" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "Loader", "parent": { - "@": "blueprint_component_reference" + "@": "objectDescriptor_component_reference" }, "propertyDescriptors": [ { - "@": "blueprint_loader_mainModule" + "@": "objectDescriptor_loader_mainModule" }, { - "@": "blueprint_loader_mainName" + "@": "objectDescriptor_loader_mainName" }, { - "@": "blueprint_loader_includeFrameworkModules" + "@": "objectDescriptor_loader_includeFrameworkModules" }, { - "@": "blueprint_loader_minimumBootstrappingDuration" + "@": "objectDescriptor_loader_minimumBootstrappingDuration" }, { - "@": "blueprint_loader_minimumLoadingDuration" + "@": "objectDescriptor_loader_minimumLoadingDuration" }, { - "@": "blueprint_loader_currentStage" + "@": "objectDescriptor_loader_currentStage" }, { - "@": "blueprint_loader_isLoadingMainComponent" + "@": "objectDescriptor_loader_isLoadingMainComponent" }, { - "@": "blueprint_loader_readyToShowLoader" + "@": "objectDescriptor_loader_readyToShowLoader" }, { - "@": "blueprint_loader_readyToShowMainComponent" + "@": "objectDescriptor_loader_readyToShowMainComponent" }, { - "@": "blueprint_loader_removeContentOnLoad" + "@": "objectDescriptor_loader_removeContentOnLoad" } ], - "propertyBlueprintGroups": { + "propertyDescriptorGroups": { "Loader": [ { - "@": "blueprint_loader_mainModule" + "@": "objectDescriptor_loader_mainModule" }, { - "@": "blueprint_loader_mainName" + "@": "objectDescriptor_loader_mainName" }, { - "@": "blueprint_loader_includeFrameworkModules" + "@": "objectDescriptor_loader_includeFrameworkModules" }, { - "@": "blueprint_loader_minimumBootstrappingDuration" + "@": "objectDescriptor_loader_minimumBootstrappingDuration" }, { - "@": "blueprint_loader_minimumLoadingDuration" + "@": "objectDescriptor_loader_minimumLoadingDuration" }, { - "@": "blueprint_loader_currentStage" + "@": "objectDescriptor_loader_currentStage" }, { - "@": "blueprint_loader_isLoadingMainComponent" + "@": "objectDescriptor_loader_isLoadingMainComponent" }, { - "@": "blueprint_loader_readyToShowLoader" + "@": "objectDescriptor_loader_readyToShowLoader" }, { - "@": "blueprint_loader_readyToShowMainComponent" + "@": "objectDescriptor_loader_readyToShowMainComponent" }, { - "@": "blueprint_loader_removeContentOnLoad" + "@": "objectDescriptor_loader_removeContentOnLoad" } ] }, - "blueprintModule": { + "objectDescriptorModule": { "%": "ui/loader.reel/loader.meta" }, "exportName": "Loader", diff --git a/ui/modal-overlay.reel/modal-overlay.meta b/ui/modal-overlay.reel/modal-overlay.meta index 71f68e917a..255ae5ae4d 100644 --- a/ui/modal-overlay.reel/modal-overlay.meta +++ b/ui/modal-overlay.reel/modal-overlay.meta @@ -1,15 +1,15 @@ { - "blueprint_component_reference": { + "objectDescriptor_component_reference": { "object": "ui/overlay.reel/overlay.meta" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "Modal Overlay", "parent": { - "@": "blueprint_component_reference" + "@": "objectDescriptor_component_reference" }, - "blueprintModule": { + "objectDescriptorModule": { "%": "ui/modal-overlay.reel/modal-overlay.meta" }, "exportName": "ModalOverlay", diff --git a/ui/overlay.reel/overlay.meta b/ui/overlay.reel/overlay.meta index 9871483b90..e9c64a14fe 100644 --- a/ui/overlay.reel/overlay.meta +++ b/ui/overlay.reel/overlay.meta @@ -1,79 +1,79 @@ { - "blueprint_loader_anchor": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_loader_anchor": { + "prototype": "core/meta/property-descriptor", "values": { "name": "anchor", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "object" } }, - "blueprint_loader_position": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_loader_position": { + "prototype": "core/meta/property-descriptor", "values": { "name": "position", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "object" } }, - "blueprint_loader_delegate": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_loader_delegate": { + "prototype": "core/meta/property-descriptor", "values": { "name": "delegate", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "object" } }, - "blueprint_loader_dismissOnExternalInteraction": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_loader_dismissOnExternalInteraction": { + "prototype": "core/meta/property-descriptor", "values": { "name": "dismissOnExternalInteraction", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "boolean" } }, - "blueprint_component_reference": { + "objectDescriptor_component_reference": { "object": "ui/component.meta" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "Overlay", "parent": { - "@": "blueprint_component_reference" + "@": "objectDescriptor_component_reference" }, "propertyDescriptors": [ { - "@": "blueprint_loader_position" + "@": "objectDescriptor_loader_position" }, { - "@": "blueprint_loader_delegate" + "@": "objectDescriptor_loader_delegate" }, { - "@": "blueprint_loader_dismissOnExternalInteraction" + "@": "objectDescriptor_loader_dismissOnExternalInteraction" } ], "propertyDescriptorGroups": { "Overlay": [ { - "@": "blueprint_loader_position" + "@": "objectDescriptor_loader_position" }, { - "@": "blueprint_loader_delegate" + "@": "objectDescriptor_loader_delegate" }, { - "@": "blueprint_loader_dismissOnExternalInteraction" + "@": "objectDescriptor_loader_dismissOnExternalInteraction" } ] }, - "blueprintModule": { + "objectDescriptorModule": { "%": "ui/overlay.reel/overlay.meta" }, "exportName": "Overlay", diff --git a/ui/repetition.reel/repetition.meta b/ui/repetition.reel/repetition.meta index 2fd576c783..0eb158ed41 100644 --- a/ui/repetition.reel/repetition.meta +++ b/ui/repetition.reel/repetition.meta @@ -1,119 +1,119 @@ { - "blueprint_repetition_content": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_repetition_content": { + "prototype": "core/meta/property-descriptor", "values": { "name": "content", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "object", "cardinality": -1 } }, - "blueprint_repetition_contentController": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_repetition_contentController": { + "prototype": "core/meta/property-descriptor", "values": { "name": "contentController", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "object" } }, - "blueprint_repetition_isSelectionEnabled": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_repetition_isSelectionEnabled": { + "prototype": "core/meta/property-descriptor", "values": { "name": "isSelectionEnabled", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "boolean" } }, - "blueprint_repetition_selection": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_repetition_selection": { + "prototype": "core/meta/property-descriptor", "values": { "name": "selection", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "object" } }, - "blueprint_repetition_selectedIndexes": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_repetition_selectedIndexes": { + "prototype": "core/meta/property-descriptor", "values": { "name": "selectedIndexes", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "number", "cardinality": -1 } }, - "blueprint_repetition_clonesChildComponents": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_repetition_clonesChildComponents": { + "prototype": "core/meta/property-descriptor", "values": { "name": "clonesChildComponents", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "boolean" } }, - "blueprint_component_reference": { + "objectDescriptor_component_reference": { "object": "ui/component.meta" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "Repetition", "parent": { - "@": "blueprint_component_reference" + "@": "objectDescriptor_component_reference" }, "propertyDescriptors": [ { - "@": "blueprint_repetition_content" + "@": "objectDescriptor_repetition_content" }, { - "@": "blueprint_repetition_contentController" + "@": "objectDescriptor_repetition_contentController" }, { - "@": "blueprint_repetition_isSelectionEnabled" + "@": "objectDescriptor_repetition_isSelectionEnabled" }, { - "@": "blueprint_repetition_selection" + "@": "objectDescriptor_repetition_selection" }, { - "@": "blueprint_repetition_selectedIndexes" + "@": "objectDescriptor_repetition_selectedIndexes" }, { - "@": "blueprint_repetition_clonesChildComponents" + "@": "objectDescriptor_repetition_clonesChildComponents" } ], "propertyDescriptorGroups": { "Repetition": [ { - "@": "blueprint_repetition_content" + "@": "objectDescriptor_repetition_content" }, { - "@": "blueprint_repetition_contentController" + "@": "objectDescriptor_repetition_contentController" }, { - "@": "blueprint_repetition_isSelectionEnabled" + "@": "objectDescriptor_repetition_isSelectionEnabled" }, { - "@": "blueprint_repetition_selection" + "@": "objectDescriptor_repetition_selection" }, { - "@": "blueprint_repetition_selectedIndexes" + "@": "objectDescriptor_repetition_selectedIndexes" }, { - "@": "blueprint_repetition_clonesChildComponents" + "@": "objectDescriptor_repetition_clonesChildComponents" } ] }, - "blueprintModule": { + "objectDescriptorModule": { "%": "ui/repetition.reel/repetition.meta" }, "exportName": "Repetition", diff --git a/ui/slider.reel/slider.meta b/ui/slider.reel/slider.meta index 3ea030fa89..1ff8fe5c2b 100644 --- a/ui/slider.reel/slider.meta +++ b/ui/slider.reel/slider.meta @@ -1,56 +1,56 @@ { "enabled_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "enabled", "valueType": "boolean", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "value_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "value", "valueType": "object", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "min_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "min", "valueType": "number", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "max_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "max", "valueType": "number", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "step_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "step", "valueType": "number", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, "axis_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "axis", "valueType": "enum", @@ -58,20 +58,20 @@ "horizontal", "vertical" ], - "blueprint": { + "objectDescriptor": { "@": "root" } } }, - "blueprint_parent": { + "objectDescriptor_parent": { "object": "ui/control.meta" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "Slider", "parent": { - "@": "blueprint_parent" + "@": "objectDescriptor_parent" }, "propertyDescriptors": [ { @@ -115,7 +115,7 @@ } ] }, - "blueprintModule": { + "objectDescriptorModule": { "%": "ui/slider.meta" }, "exportName": "Slider", diff --git a/ui/slot.reel/slot.meta b/ui/slot.reel/slot.meta index 920f2d615e..294deefed3 100644 --- a/ui/slot.reel/slot.meta +++ b/ui/slot.reel/slot.meta @@ -1,53 +1,53 @@ { - "blueprint_slot_delegate": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_slot_delegate": { + "prototype": "core/meta/property-descriptor", "values": { "name": "delegate", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "object" } }, - "blueprint_slot_content": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_slot_content": { + "prototype": "core/meta/property-descriptor", "values": { "name": "content", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "object" } }, - "blueprint_component_reference": { + "objectDescriptor_component_reference": { "object": "ui/component.meta" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "Slot", "parent": { - "@": "blueprint_component_reference" + "@": "objectDescriptor_component_reference" }, "propertyDescriptors": [ { - "@": "blueprint_slot_delegate" + "@": "objectDescriptor_slot_delegate" }, { - "@": "blueprint_slot_content" + "@": "objectDescriptor_slot_content" } ], "propertyDescriptorGroups": { "Slot": [ { - "@": "blueprint_slot_delegate" + "@": "objectDescriptor_slot_delegate" }, { - "@": "blueprint_slot_content" + "@": "objectDescriptor_slot_content" } ] }, - "blueprintModule": { + "objectDescriptorModule": { "%": "ui/slot.reel/slot.meta" }, "exportName": "Slot", diff --git a/ui/substitution.reel/substitution.meta b/ui/substitution.reel/substitution.meta index cfb8bb5aaf..6d16240f73 100644 --- a/ui/substitution.reel/substitution.meta +++ b/ui/substitution.reel/substitution.meta @@ -1,68 +1,68 @@ { - "blueprint_substitution_switchValue": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_substitution_switchValue": { + "prototype": "core/meta/property-descriptor", "values": { "name": "switchValue", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, - "blueprint_substitution_shouldLoadComponentTree": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_substitution_shouldLoadComponentTree": { + "prototype": "core/meta/property-descriptor", "values": { "name": "shouldLoadComponentTree", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "boolean" } }, - "blueprint_substitution_transition": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_substitution_transition": { + "prototype": "core/meta/property-descriptor", "values": { "name": "transition", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "object" } }, - "blueprint_component_reference": { + "objectDescriptor_component_reference": { "object": "ui/component.meta" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "Substitution", "parent": { - "@": "blueprint_component_reference" + "@": "objectDescriptor_component_reference" }, "propertyDescriptors": [ { - "@": "blueprint_substitution_switchValue" + "@": "objectDescriptor_substitution_switchValue" }, { - "@": "blueprint_substitution_shouldLoadComponentTree" + "@": "objectDescriptor_substitution_shouldLoadComponentTree" }, { - "@": "blueprint_substitution_transition" + "@": "objectDescriptor_substitution_transition" } ], "propertyDescriptorGroups": { "Substitution": [ { - "@": "blueprint_substitution_switchValue" + "@": "objectDescriptor_substitution_switchValue" }, { - "@": "blueprint_substitution_shouldLoadComponentTree" + "@": "objectDescriptor_substitution_shouldLoadComponentTree" }, { - "@": "blueprint_substitution_transition" + "@": "objectDescriptor_substitution_transition" } ] }, - "blueprintModule": { + "objectDescriptorModule": { "%": "ui/substitution.reel/substitution.meta" }, "exportName": "Substitution", diff --git a/ui/text-field.reel/text-field.meta b/ui/text-field.reel/text-field.meta index 7305b0c9d7..e2ec77c4dd 100644 --- a/ui/text-field.reel/text-field.meta +++ b/ui/text-field.reel/text-field.meta @@ -1,9 +1,9 @@ { - "blueprint_textfield_updateOnInput": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_textfield_updateOnInput": { + "prototype": "core/meta/property-descriptor", "values": { "name": "updateOnInput", - "blueprint": { + "objectDescriptor": { "@": "root" }, "cardinality": 1, @@ -16,29 +16,29 @@ } }, "maxlength_property": { - "prototype": "core/meta/property-blueprint", + "prototype": "core/meta/property-descriptor", "values": { "name": "maxlength", "valueType": "number", - "blueprint": { + "objectDescriptor": { "@": "root" } } }, - "blueprint_control_reference": { + "objectDescriptor_control_reference": { "object": "ui/control.meta" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "text-field", "customPrototype": false, "parent": { - "@": "blueprint_control_reference" + "@": "objectDescriptor_control_reference" }, "propertyDescriptors": [ { - "@": "blueprint_textfield_updateOnInput" + "@": "objectDescriptor_textfield_updateOnInput" }, { "@": "maxlength_property" @@ -47,7 +47,7 @@ "propertyDescriptorGroups": { "text-field": [ { - "@": "blueprint_textfield_updateOnInput" + "@": "objectDescriptor_textfield_updateOnInput" }, { "@": "maxlength_property" @@ -55,7 +55,7 @@ ] }, "propertyValidationRules": {}, - "blueprintModule": { + "objectDescriptorModule": { "%": "ui/text-field.reel/text-field.meta" }, "exportName": "TextField", diff --git a/ui/text-input.meta b/ui/text-input.meta index c39e48a08d..d6d28fac5a 100644 --- a/ui/text-input.meta +++ b/ui/text-input.meta @@ -1,13 +1,13 @@ { "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "TextInput", "customPrototype": false, "propertyDescriptors": [], - "propertyBlueprintGroups": {}, + "propertyDescriptorGroups": {}, "propertyValidationRules": {}, - "blueprintModule": { + "objectDescriptorModule": { "%": "ui/text-input.meta" }, "exportName": "TextInput", diff --git a/ui/text.reel/text.meta b/ui/text.reel/text.meta index 62b6097451..91863dfbf6 100644 --- a/ui/text.reel/text.meta +++ b/ui/text.reel/text.meta @@ -1,63 +1,63 @@ { - "blueprint_text_value": { - "prototype": "core/meta/property-blueprint", + "objectDescriptor_text_value": { + "prototype": "core/meta/property-descriptor", "values": { "name": "value", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "string", "helpKey": "" } }, - "blueprint_text_converter": { - "prototype": "core/meta/association-blueprint", + "objectDescriptor_text_converter": { + "prototype": "core/meta/association-objectDescriptor", "values": { "name": "converter", - "blueprint": { + "objectDescriptor": { "@": "root" }, "valueType": "object", - "targetBlueprint": { - "@": "blueprint_converter_reference" + "targetObjectDescriptor": { + "@": "objectDescriptor_converter_reference" }, "helpKey": "" } }, - "blueprint_converter_reference": { + "objectDescriptor_converter_reference": { "object": "core/converter/converter.meta" }, - "blueprint_component_reference": { + "objectDescriptor_component_reference": { "object": "ui/component.meta" }, "root": { - "prototype": "core/meta/module-blueprint", + "prototype": "core/meta/module-object-descriptor", "values": { "name": "Text", "customPrototype": false, "parent": { - "@": "blueprint_component_reference" + "@": "objectDescriptor_component_reference" }, "propertyDescriptors": [ { - "@": "blueprint_text_value" + "@": "objectDescriptor_text_value" }, { - "@": "blueprint_text_converter" + "@": "objectDescriptor_text_converter" } ], "propertyDescriptorGroups": { "text": [ { - "@": "blueprint_text_value" + "@": "objectDescriptor_text_value" }, { - "@": "blueprint_text_converter" + "@": "objectDescriptor_text_converter" } ] }, "propertyValidationRules": {}, - "blueprintModule": { + "objectDescriptorModule": { "%": "ui/text.reel/text.meta" }, "exportName": "Text", From d71a1aefa003a8fbbd6ee8ed5f4ba12aae64803c Mon Sep 17 00:00:00 2001 From: cdebost Date: Tue, 5 Sep 2017 23:47:44 -0700 Subject: [PATCH 54/66] Add object descriptor info to core/ modules --- core/event/action-event-listener.js | 2 ++ core/media-controller.js | 7 +++++-- core/object-controller.js | 4 ++++ core/promise-controller.js | 4 ++++ core/radio-button-controller.js | 4 ++++ core/range-controller.js | 6 +++++- 6 files changed, 24 insertions(+), 3 deletions(-) diff --git a/core/event/action-event-listener.js b/core/event/action-event-listener.js index 4a3217c618..8133718a59 100644 --- a/core/event/action-event-listener.js +++ b/core/event/action-event-listener.js @@ -82,6 +82,8 @@ var ActionEventListener = exports.ActionEventListener = Montage.specialize( /** } }, { + objectDescriptorModuleId: require("../core")._objectDescriptorModuleIdDescriptor, + objectDescriptor: require("../core")._objectDescriptorDescriptor, blueprintModuleId: require("../core")._blueprintModuleIdDescriptor, blueprint: require("../core")._blueprintDescriptor }); diff --git a/core/media-controller.js b/core/media-controller.js index f3b4b3d48c..f3fdfd5340 100644 --- a/core/media-controller.js +++ b/core/media-controller.js @@ -616,9 +616,12 @@ var MediaController = exports.MediaController = Target.specialize(/** @lends Med } }, { - blueprintModuleId:require("./core")._blueprintModuleIdDescriptor, - blueprint:require("./core")._blueprintDescriptor + blueprint:require("./core")._blueprintDescriptor, + + objectDescriptorModuleId:require("./core")._objectDescriptorModuleIdDescriptor, + + objectDescriptor:require("./core")._objectDescriptorDescriptor }); diff --git a/core/object-controller.js b/core/object-controller.js index 9e08b7494e..9347476f85 100644 --- a/core/object-controller.js +++ b/core/object-controller.js @@ -53,6 +53,10 @@ exports.ObjectController = Montage.specialize( /** @lends ObjectController# */ { value: null }, + objectDescriptorModuleId:require("./core")._objectDescriptorModuleIdDescriptor, + + objectDescriptor:require("./core")._objectDescriptorDescriptor, + blueprintModuleId:require("./core")._blueprintModuleIdDescriptor, blueprint:require("./core")._blueprintDescriptor diff --git a/core/promise-controller.js b/core/promise-controller.js index d819f792fa..ba92d85a79 100644 --- a/core/promise-controller.js +++ b/core/promise-controller.js @@ -166,6 +166,10 @@ exports.PromiseController = Montage.specialize( { }, /** @lends PromiseController. */ { + objectDescriptorModuleId:require("./core")._objectDescriptorModuleIdDescriptor, + + objectDescriptor:require("./core")._objectDescriptorDescriptor, + blueprintModuleId:require("./core")._blueprintModuleIdDescriptor, blueprint:require("./core")._blueprintDescriptor diff --git a/core/radio-button-controller.js b/core/radio-button-controller.js index 6daa3be32d..fa2dc09a75 100644 --- a/core/radio-button-controller.js +++ b/core/radio-button-controller.js @@ -142,6 +142,10 @@ exports.RadioButtonController = Montage.specialize(/** @lends RadioButtonControl }, /** @lends RadioButtonController. */ { + objectDescriptorModuleId:require("./core")._objectDescriptorModuleIdDescriptor, + + objectDescriptor:require("./core")._objectDescriptorDescriptor, + blueprintModuleId:require("./core")._blueprintModuleIdDescriptor, blueprint:require("./core")._blueprintDescriptor diff --git a/core/range-controller.js b/core/range-controller.js index e764ff7253..d1eca2c6fc 100644 --- a/core/range-controller.js +++ b/core/range-controller.js @@ -840,7 +840,11 @@ var RangeController = exports.RangeController = Montage.specialize( /** @lends R } } -}, /** @lends RangeController */ { +}, /** @lends RangeController. */ { + + objectDescriptorModuleId:require("./core")._objectDescriptorModuleIdDescriptor, + + objectDescriptor:require("./core")._objectDescriptorDescriptor, blueprintModuleId:require("./core")._blueprintModuleIdDescriptor, From 54aa240f068453c34e9967f7f04a10b776c6e7d3 Mon Sep 17 00:00:00 2001 From: cdebost Date: Tue, 5 Sep 2017 23:48:10 -0700 Subject: [PATCH 55/66] Remove uses of blueprint from test/ --- test/all.js | 18 +- test/spec/base/abstract-alert-spec.js | 8 +- test/spec/base/abstract-button-spec.js | 8 +- test/spec/base/abstract-checkbox-spec.js | 8 +- test/spec/base/abstract-confirm-spec.js | 8 +- test/spec/base/abstract-image-spec.js | 8 +- test/spec/base/abstract-link-spec.js | 8 +- test/spec/base/abstract-number-field-spec.js | 8 +- test/spec/base/abstract-radio-button-spec.js | 8 +- test/spec/base/abstract-select-spec.js | 8 +- test/spec/base/abstract-slider-spec.js | 8 +- test/spec/base/abstract-text-area-spec.js | 8 +- test/spec/base/abstract-text-field-spec.js | 8 +- test/spec/base/abstract-toggle-button-spec.js | 8 +- test/spec/base/abstract-toggle-switch-spec.js | 8 +- test/spec/meta/blueprint-spec.js | 416 ----------------- test/spec/meta/blueprint/binderhelper.js | 41 -- test/spec/meta/blueprint/company.js | 8 +- test/spec/meta/blueprint/model-helper.js | 36 ++ .../node_modules/dependency2/thing.meta | 2 +- .../node_modules/dependency/thing.meta | 8 +- test/spec/meta/blueprint/package/thing.meta | 8 +- test/spec/meta/blueprint/person.js | 8 +- test/spec/meta/blueprint/project.js | 8 +- .../meta/build-in-component-blueprint-spec.js | 184 -------- ...ild-in-component-object-descriptor-spec.js | 183 ++++++++ test/spec/meta/component-blueprint-spec.js | 161 ------- .../meta/component-object-descriptor-spec.js | 161 +++++++ .../component-object-descriptor-test-1.html} | 6 +- .../component-object-descriptor-test-1.js} | 6 +- .../component-object-descriptor-test-2.html} | 6 +- .../component-object-descriptor-test-2.js} | 6 +- .../component-object-descriptor-test-2.meta} | 40 +- .../component-object-descriptor-test-3.html} | 6 +- .../component-object-descriptor-test-3.js} | 6 +- .../component-object-descriptor-test.html} | 8 +- .../component-object-descriptor-test.js} | 2 +- test/spec/meta/controller-blueprint-spec.js | 122 ----- .../meta/controller-object-descriptor-spec.js | 118 +++++ .../child-controller.js | 2 +- .../child-controller.meta | 22 +- .../parent-controller.js | 0 .../parent-controller.meta | 24 +- .../test-controller.js | 0 ...js => converter-object-descriptor-spec.js} | 0 ...print-spec.js => event-descriptor-spec.js} | 28 +- ...ec.js => module-object-descriptor-spec.js} | 52 +-- test/spec/meta/object-descriptor-spec.js | 417 ++++++++++++++++++ .../montage-deserializer-spec.js | 22 +- test/spec/serialization/testmjson.mjson | 2 +- test/spec/ui/button-spec.js | 8 +- test/spec/ui/checkbox-spec.js | 8 +- test/spec/ui/slider-spec.js | 8 +- test/spec/ui/text-input-spec.js | 8 +- 54 files changed, 1136 insertions(+), 1145 deletions(-) delete mode 100644 test/spec/meta/blueprint-spec.js delete mode 100644 test/spec/meta/blueprint/binderhelper.js create mode 100644 test/spec/meta/blueprint/model-helper.js delete mode 100644 test/spec/meta/build-in-component-blueprint-spec.js create mode 100644 test/spec/meta/build-in-component-object-descriptor-spec.js delete mode 100644 test/spec/meta/component-blueprint-spec.js create mode 100644 test/spec/meta/component-object-descriptor-spec.js rename test/spec/meta/{component-blueprint-test/component-blueprint-test-1.reel/component-blueprint-test-1.html => component-object-descriptor-test/component-object-descriptor-test-1.reel/component-object-descriptor-test-1.html} (54%) rename test/spec/meta/{component-blueprint-test/component-blueprint-test-1.reel/component-blueprint-test-1.js => component-object-descriptor-test/component-object-descriptor-test-1.reel/component-object-descriptor-test-1.js} (51%) rename test/spec/meta/{component-blueprint-test/component-blueprint-test-2.reel/component-blueprint-test-2.html => component-object-descriptor-test/component-object-descriptor-test-2.reel/component-object-descriptor-test-2.html} (54%) rename test/spec/meta/{component-blueprint-test/component-blueprint-test-2.reel/component-blueprint-test-2.js => component-object-descriptor-test/component-object-descriptor-test-2.reel/component-object-descriptor-test-2.js} (51%) rename test/spec/meta/{component-blueprint-test/component-blueprint-test-2.reel/component-blueprint-test-2.meta => component-object-descriptor-test/component-object-descriptor-test-2.reel/component-object-descriptor-test-2.meta} (80%) rename test/spec/meta/{component-blueprint-test/component-blueprint-test-3.reel/component-blueprint-test-3.html => component-object-descriptor-test/component-object-descriptor-test-3.reel/component-object-descriptor-test-3.html} (54%) rename test/spec/meta/{component-blueprint-test/component-blueprint-test-3.reel/component-blueprint-test-3.js => component-object-descriptor-test/component-object-descriptor-test-3.reel/component-object-descriptor-test-3.js} (72%) rename test/spec/meta/{component-blueprint-test/component-blueprint-test.html => component-object-descriptor-test/component-object-descriptor-test.html} (76%) rename test/spec/meta/{component-blueprint-test/component-blueprint-test.js => component-object-descriptor-test/component-object-descriptor-test.js} (89%) delete mode 100644 test/spec/meta/controller-blueprint-spec.js create mode 100644 test/spec/meta/controller-object-descriptor-spec.js rename test/spec/meta/{controller-blueprint-test => controller-object-descriptor-test}/child-controller.js (70%) rename test/spec/meta/{controller-blueprint-test => controller-object-descriptor-test}/child-controller.meta (52%) rename test/spec/meta/{controller-blueprint-test => controller-object-descriptor-test}/parent-controller.js (100%) rename test/spec/meta/{controller-blueprint-test => controller-object-descriptor-test}/parent-controller.meta (59%) rename test/spec/meta/{controller-blueprint-test => controller-object-descriptor-test}/test-controller.js (100%) rename test/spec/meta/{converter-blueprint-spec.js => converter-object-descriptor-spec.js} (100%) rename test/spec/meta/{event-blueprint-spec.js => event-descriptor-spec.js} (75%) rename test/spec/meta/{module-blueprint-spec.js => module-object-descriptor-spec.js} (66%) create mode 100644 test/spec/meta/object-descriptor-spec.js diff --git a/test/all.js b/test/all.js index 2ab02b5ea6..293d47eb7a 100644 --- a/test/all.js +++ b/test/all.js @@ -95,7 +95,7 @@ module.exports = require("montage-testing").run(require, [ {name: "spec/ui/modal-overlay-spec", node: false}, {name: "spec/ui/overlay-spec", node: false}, {name: "spec/ui/slot-spec", node: false}, - {name: "spec/ui/substitution-spec", node: false}, + {name: "spec/ui/substitution-spec", node: false}, {name: "spec/ui/text-input-spec", node: false}, {name: "spec/ui/slider-spec", node: false}, {name: "spec/ui/text/text-spec", node: false}, @@ -111,14 +111,14 @@ module.exports = require("montage-testing").run(require, [ {name: "spec/ui/repetition-binding-spec", node: false}, {name: "spec/core/localizer-spec", node: false, karma: false}, {name: "spec/core/localizer/serialization-spec", node: false, karma: false}, - // Bluerint - {name: "spec/meta/converter-blueprint-spec", karma: false}, - {name: "spec/meta/module-blueprint-spec", karma: false}, - {name: "spec/meta/build-in-component-blueprint-spec", node: false, karma: false}, - {name: "spec/meta/component-blueprint-spec", node: false}, - {name: "spec/meta/controller-blueprint-spec", node: false}, - {name: "spec/meta/event-blueprint-spec", node: false}, - {name: "spec/meta/blueprint-spec"} + // Meta + {name: "spec/meta/converter-object-descriptor-spec", karma: false}, + {name: "spec/meta/module-object-descriptor-spec", karma: false}, + {name: "spec/meta/build-in-component-object-descriptor-spec", node: false, karma: false}, + {name: "spec/meta/component-object-descriptor-spec", node: false}, + {name: "spec/meta/controller-object-descriptor-spec", node: false}, + {name: "spec/meta/event-object-descriptor-spec", node: false}, + {name: "spec/meta/object-descriptor-spec"} ]).then(function () { console.log('montage-testing', 'End'); }, function (err) { diff --git a/test/spec/base/abstract-alert-spec.js b/test/spec/base/abstract-alert-spec.js index e3a734ef07..bd7a1bbdd5 100644 --- a/test/spec/base/abstract-alert-spec.js +++ b/test/spec/base/abstract-alert-spec.js @@ -229,11 +229,11 @@ describe("test/base/abstract-alert-spec", function () { }); }); - describe("blueprint", function () { + describe("objectDescriptor", function () { it("can be created", function (done) { - var blueprintPromise = AbstractAlert.blueprint || AbstractAlert.objectDescriptor; - blueprintPromise.then(function (blueprint) { - expect(blueprint).not.toBeNull(); + var objectDescriptorPromise = AbstractAlert.objectDescriptor || AbstractAlert.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + expect(objectDescriptor).not.toBeNull(); }, function (err) { fail(err); }).finally(function () { diff --git a/test/spec/base/abstract-button-spec.js b/test/spec/base/abstract-button-spec.js index bffaefda14..694114d9d9 100644 --- a/test/spec/base/abstract-button-spec.js +++ b/test/spec/base/abstract-button-spec.js @@ -233,11 +233,11 @@ describe("test/base/abstract-button-spec", function () { }); }); }); - describe("blueprint", function () { + describe("objectDescriptor", function () { it("can be created", function (done) { - var blueprintPromise = AbstractButton.blueprint; - blueprintPromise.then(function (blueprint) { - expect(blueprint).not.toBeNull(); + var objectDescriptorPromise = AbstractButton.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + expect(objectDescriptor).not.toBeNull(); }, function (err) { fail(err); }).finally(function () { diff --git a/test/spec/base/abstract-checkbox-spec.js b/test/spec/base/abstract-checkbox-spec.js index c695ca73eb..e216bfeb94 100644 --- a/test/spec/base/abstract-checkbox-spec.js +++ b/test/spec/base/abstract-checkbox-spec.js @@ -272,11 +272,11 @@ describe("test/base/abstract-checkbox-spec", function () { expect(aCheckbox.element.getAttribute("aria-checked")).toBe("false"); }); }); - describe("blueprint", function () { + describe("objectDescriptor", function () { it("can be created", function (done) { - var blueprintPromise = AbstractCheckbox.blueprint; - blueprintPromise.then(function (blueprint) { - expect(blueprint).not.toBeNull(); + var objectDescriptorPromise = AbstractCheckbox.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + expect(objectDescriptor).not.toBeNull(); }, function (err) { fail(err); }).finally(function () { diff --git a/test/spec/base/abstract-confirm-spec.js b/test/spec/base/abstract-confirm-spec.js index cbe8a1e701..4e433d667d 100644 --- a/test/spec/base/abstract-confirm-spec.js +++ b/test/spec/base/abstract-confirm-spec.js @@ -262,11 +262,11 @@ describe("test/base/abstract-confirm-spec", function () { }); }); - describe("blueprint", function () { + describe("objectDescriptor", function () { it("can be created", function (done) { - var blueprintPromise = AbstractConfirm.blueprint; - blueprintPromise.then(function (blueprint) { - expect(blueprint).not.toBeNull(); + var objectDescriptorPromise = AbstractConfirm.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + expect(objectDescriptor).not.toBeNull(); }).finally(function () { done(); }) diff --git a/test/spec/base/abstract-image-spec.js b/test/spec/base/abstract-image-spec.js index de8f3e35e8..a8a0af8c92 100644 --- a/test/spec/base/abstract-image-spec.js +++ b/test/spec/base/abstract-image-spec.js @@ -362,11 +362,11 @@ describe("test/base/abstract-image-spec", function () { }); }); - describe("blueprint", function () { + describe("objectDescriptor", function () { it("can be created", function (done) { - var blueprintPromise = AbstractImage.blueprint; - blueprintPromise.then(function (blueprint) { - expect(blueprint).not.toBeNull(); + var objectDescriptorPromise = AbstractImage.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + expect(objectDescriptor).not.toBeNull(); }, function (err) { fail(err); }).finally(function () { diff --git a/test/spec/base/abstract-link-spec.js b/test/spec/base/abstract-link-spec.js index cf2e172b58..723c38caf2 100644 --- a/test/spec/base/abstract-link-spec.js +++ b/test/spec/base/abstract-link-spec.js @@ -223,11 +223,11 @@ describe("test/base/abstract-link-spec", function () { }); }); }); - describe("blueprint", function () { + describe("objectDescriptor", function () { it("can be created", function (done) { - var blueprintPromise = AbstractLink.blueprint; - blueprintPromise.then(function (blueprint) { - expect(blueprint).not.toBeNull(); + var objectDescriptorPromise = AbstractLink.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + expect(objectDescriptor).not.toBeNull(); }, function (err) { fail(err); }).finally(function () { diff --git a/test/spec/base/abstract-number-field-spec.js b/test/spec/base/abstract-number-field-spec.js index d14f8c8966..56bd5024c1 100644 --- a/test/spec/base/abstract-number-field-spec.js +++ b/test/spec/base/abstract-number-field-spec.js @@ -443,11 +443,11 @@ describe("test/base/abstract-number-field-spec", function () { }); }); }); - describe("blueprint", function () { + describe("objectDescriptor", function () { it("can be created", function (done) { - var blueprintPromise = AbstractNumberField.blueprint; - blueprintPromise.then(function (blueprint) { - expect(blueprint).not.toBeNull(); + var objectDescriptorPromise = AbstractNumberField.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + expect(objectDescriptor).not.toBeNull(); }, function (err) { fail(err); }).finally(function () { diff --git a/test/spec/base/abstract-radio-button-spec.js b/test/spec/base/abstract-radio-button-spec.js index 5ee1cd7cff..efb3989b74 100644 --- a/test/spec/base/abstract-radio-button-spec.js +++ b/test/spec/base/abstract-radio-button-spec.js @@ -268,11 +268,11 @@ describe("test/base/abstract-radio-button-spec", function () { expect(aRadioButton.element.getAttribute("aria-checked")).toBe("false"); }); }); - describe("blueprint", function () { + describe("objectDescriptor", function () { it("can be created", function (done) { - var blueprintPromise = AbstractRadioButton.blueprint; - blueprintPromise.then(function (blueprint) { - expect(blueprint).not.toBeNull(); + var objectDescriptorPromise = AbstractRadioButton.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + expect(objectDescriptor).not.toBeNull(); }, function (err) { fail(err); }).finally(function () { diff --git a/test/spec/base/abstract-select-spec.js b/test/spec/base/abstract-select-spec.js index b2bc8a3fa1..ce5d160db2 100644 --- a/test/spec/base/abstract-select-spec.js +++ b/test/spec/base/abstract-select-spec.js @@ -386,11 +386,11 @@ describe("test/base/abstract-select-spec", function () { }); }); - describe("blueprint", function () { + describe("objectDescriptor", function () { it("can be created", function (done) { - var blueprintPromise = AbstractSelect.blueprint; - blueprintPromise.then(function (blueprint) { - expect(blueprint).not.toBeNull(); + var objectDescriptorPromise = AbstractSelect.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + expect(objectDescriptor).not.toBeNull(); }, function (err) { fail(err); }).finally(function () { diff --git a/test/spec/base/abstract-slider-spec.js b/test/spec/base/abstract-slider-spec.js index 6f3b45eb0f..568d48a177 100644 --- a/test/spec/base/abstract-slider-spec.js +++ b/test/spec/base/abstract-slider-spec.js @@ -383,11 +383,11 @@ describe("test/base/abstract-slider-spec", function () { }); }); }); - describe("blueprint", function () { + describe("objectDescriptor", function () { it("can be created", function (done) { - var blueprintPromise = AbstractSlider.blueprint; - blueprintPromise.then(function (blueprint) { - expect(blueprint).not.toBeNull(); + var objectDescriptorPromise = AbstractSlider.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + expect(objectDescriptor).not.toBeNull(); }, function (err) { fail(err); }).finally(function () { diff --git a/test/spec/base/abstract-text-area-spec.js b/test/spec/base/abstract-text-area-spec.js index a8d53ebd6e..e5c16b1d78 100644 --- a/test/spec/base/abstract-text-area-spec.js +++ b/test/spec/base/abstract-text-area-spec.js @@ -178,11 +178,11 @@ describe("test/base/abstract-text-area-spec", function () { expect(aTextArea.element.hasEventListener("change", aTextArea)).toBe(true); }); }); - describe("blueprint", function () { + describe("objectDescriptor", function () { it("can be created", function (done) { - var blueprintPromise = AbstractTextArea.blueprint; - blueprintPromise.then(function (blueprint) { - expect(blueprint).not.toBeNull(); + var objectDescriptorPromise = AbstractTextArea.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + expect(objectDescriptor).not.toBeNull(); }).finally(function () { done(); }); diff --git a/test/spec/base/abstract-text-field-spec.js b/test/spec/base/abstract-text-field-spec.js index c1df1872d7..808229a44c 100644 --- a/test/spec/base/abstract-text-field-spec.js +++ b/test/spec/base/abstract-text-field-spec.js @@ -367,11 +367,11 @@ describe("test/base/abstract-text-field-spec", function () { }); }); }); - describe("blueprint", function () { + describe("objectDescriptor", function () { it("can be created", function (done) { - var blueprintPromise = AbstractTextField.blueprint; - blueprintPromise.then(function (blueprint) { - expect(blueprint).not.toBeNull(); + var objectDescriptorPromise = AbstractTextField.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + expect(objectDescriptor).not.toBeNull(); }, function (err) { fail(err); }).finally(function () { diff --git a/test/spec/base/abstract-toggle-button-spec.js b/test/spec/base/abstract-toggle-button-spec.js index 1b47a80d6d..34d7303fa8 100644 --- a/test/spec/base/abstract-toggle-button-spec.js +++ b/test/spec/base/abstract-toggle-button-spec.js @@ -302,11 +302,11 @@ describe("test/base/abstract-toggle-button-spec", function () { }); }); }); - describe("blueprint", function () { + describe("objectDescriptor", function () { it("can be created", function (done) { - var blueprintPromise = AbstractToggleButton.blueprint; - blueprintPromise.then(function (blueprint) { - expect(blueprint).not.toBeNull(); + var objectDescriptorPromise = AbstractToggleButton.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + expect(objectDescriptor).not.toBeNull(); }, function (err) { fail(err); }).finally(function () { diff --git a/test/spec/base/abstract-toggle-switch-spec.js b/test/spec/base/abstract-toggle-switch-spec.js index f5384bae17..d394c7c5d6 100644 --- a/test/spec/base/abstract-toggle-switch-spec.js +++ b/test/spec/base/abstract-toggle-switch-spec.js @@ -65,11 +65,11 @@ describe("test/base/abstract-toggle-switch-spec", function () { }); }); - describe("blueprint", function () { + describe("objectDescriptor", function () { it("can be created", function (done) { - var blueprintPromise = AbstractToggleSwitch.blueprint; - blueprintPromise.then(function (blueprint) { - expect(blueprint).not.toBeNull(); + var objectDescriptorPromise = AbstractToggleSwitch.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + expect(objectDescriptor).not.toBeNull(); }, function (err) { fail(err); }).finally(function () { diff --git a/test/spec/meta/blueprint-spec.js b/test/spec/meta/blueprint-spec.js deleted file mode 100644 index eabf2fad5d..0000000000 --- a/test/spec/meta/blueprint-spec.js +++ /dev/null @@ -1,416 +0,0 @@ -"use strict"; -/** - @module montage/data/blueprint-spec.js - @requires montage/core/core - @requires montage/core/logger - */ -var Montage = require("montage").Montage; -var Blueprint = require("montage/core/meta/blueprint").Blueprint; -var Model = require("montage/core/meta/model").Model; -var PropertyDescriptor = require("montage/core/meta/property-descriptor").PropertyDescriptor; -var AssociationBlueprint = require("montage/core/meta/association-blueprint").AssociationBlueprint; -var Serializer = require("montage/core/serialization/serializer/montage-serializer").MontageSerializer; -var Deserializer = require("montage/core/serialization/deserializer/montage-deserializer").MontageDeserializer; -var BinderHelper = require("./blueprint/binderhelper").BinderHelper; -var Person = require("./blueprint/person").Person; -var Company = require("./blueprint/company").Company; -var logger = require("montage/core/logger").logger("./blueprint-spec.js"); - -// Require to deserialize -// TODO add proper deps to montage modules -require('montage/core/meta/object-descriptor'); -require('montage/core/meta/property-blueprint'); -require('montage/core/meta/module-blueprint'); - -describe("meta/blueprint-spec", function () { - describe("Binder", function () { - describe("Creation", function () { - }); - describe("Adding blueprints", function () { - var binder = new Model().initWithNameAndRequire("CompanyBinder", require); - var personBlueprint = new Blueprint().initWithName("Person"); - binder.addObjectDescriptor(personBlueprint); - - var companyBlueprint = new Blueprint().initWithName("Company"); - binder.addObjectDescriptor(companyBlueprint); - - it("should have a binder", function () { - expect(personBlueprint.model).toBe(binder); - expect(companyBlueprint.model).toBe(binder); - }); - - }); - }); - - describe("Blueprint", function () { - describe("propertyDescriptors", function () { - var blueprint = new Blueprint().initWithName("Person"); - var propertyBlueprint = blueprint.newPropertyDescriptor("foo", 1); - it("should be able to add", function () { - blueprint.addPropertyDescriptor(propertyBlueprint); - expect(propertyBlueprint.owner).toBe(blueprint); - expect(blueprint.propertyDescriptorForName("foo")).toBe(propertyBlueprint); - }); - - it("should be able to remove", function () { - blueprint.removePropertyDescriptor(propertyBlueprint); - expect(propertyBlueprint.owner).toBe(null); - expect(blueprint.propertyDescriptorForName("foo")).toBeNull(); - }); - }); - describe("associations", function () { - - var personBlueprint = new Blueprint().initWithName("Person"); - var companyBlueprint = new Blueprint().initWithName("Company"); - - var employerAssociation = personBlueprint.newAssociationBlueprint("employer", Infinity); - employerAssociation.valueDescriptor = companyBlueprint; - var employeesAssociation = companyBlueprint.newAssociationBlueprint("employees", Infinity); - employeesAssociation.valueDescriptor = personBlueprint; - - personBlueprint.addPropertyDescriptor(employerAssociation); - companyBlueprint.addPropertyDescriptor(employeesAssociation); - - it("basic properties should be correct", function () { - expect(personBlueprint.propertyDescriptorForName("employer")).toBe(employerAssociation); - expect(companyBlueprint.propertyDescriptorForName("employees")).toBe(employeesAssociation); - }); - it("target blueprint promise to be resolved", function (done) { - personBlueprint.propertyDescriptorForName("employer").valueDescriptor.then(function (blueprint) { - expect(blueprint).toBeTruthy(); - expect(blueprint).toBe(companyBlueprint); - }).finally(function () { - done(); - }); - }); - it("target blueprint promise to be resolved", function (done) { - companyBlueprint.propertyDescriptorForName("employees").valueDescriptor.then(function (blueprint) { - expect(blueprint).toBeTruthy(); - expect(blueprint).toBe(personBlueprint); - }).finally(function () { - done(); - }); - }); - }); - describe("blueprint to instance association", function () { - var binder, personBlueprint, companyBlueprint; - beforeEach(function () { - binder = new Model().initWithNameAndRequire("Binder", require); - personBlueprint = new Blueprint().initWithName("Person"); - binder.addObjectDescriptor(personBlueprint); - companyBlueprint = new Blueprint().initWithName("Company"); - binder.addObjectDescriptor(companyBlueprint); - }); - it("should be found with the blueprint name", function () { - expect(binder.objectDescriptorForName("Person")).toBe(personBlueprint); - expect(binder.objectDescriptorForName("Company")).toBe(companyBlueprint); - }); - }); - describe("applying a basic blueprint to a prototype", function () { - var louis, personBlueprint; - beforeEach(function () { - var binder = new Model().initWithNameAndRequire("Binder", require); - personBlueprint = new Blueprint().initWithName("Person"); - personBlueprint.addPropertyDescriptor(personBlueprint.newPropertyDescriptor("name", 1)); - personBlueprint.addPropertyDescriptor(personBlueprint.newPropertyDescriptor("keywords", Infinity)); - - binder.addObjectDescriptor(personBlueprint); - Model.group.addModel(binder); - - louis = personBlueprint.newInstance().init(); - }); - - it("should have a blueprint", function () { - expect(louis.blueprint).toBe(personBlueprint); - }); - it("should have a the correct properties defined", function () { - expect(Object.getPrototypeOf(louis).hasOwnProperty("name")).toBeTruthy(); - expect(Object.getPrototypeOf(louis).hasOwnProperty("keywords")).toBeTruthy(); - }); - }); - - describe("adding a PropertyDescriptor", function () { - var circle, shapeBlueprint; - beforeEach(function () { - var binder = new Model().initWithNameAndRequire("Binder", require); - shapeBlueprint = new Blueprint().initWithName("Shape"); - binder.addObjectDescriptor(shapeBlueprint); - var propertyBlueprint = shapeBlueprint.newPropertyDescriptor("size", 1); - shapeBlueprint.addPropertyDescriptor(propertyBlueprint); - propertyBlueprint = shapeBlueprint.newPropertyDescriptor("readOnlyPropertyDescriptor", 1); - propertyBlueprint.readOnly = true; - shapeBlueprint.addPropertyDescriptor(propertyBlueprint); - propertyBlueprint = shapeBlueprint.newPropertyDescriptor("mandatoryPropertyDescriptor", 1); - propertyBlueprint.mandatory = true; - shapeBlueprint.addPropertyDescriptor(propertyBlueprint); - propertyBlueprint = shapeBlueprint.newPropertyDescriptor("denyDelete", 1); - propertyBlueprint.denyDelete = true; - shapeBlueprint.addPropertyDescriptor(propertyBlueprint); - Model.group.addModel(binder); - - circle = shapeBlueprint.newInstance().init(); - }); - describe("normal propertyBlueprint's property", function () { - it("should be settable", function () { - var descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(circle), "size"); - expect(typeof descriptor.get).toEqual("function"); - expect(typeof descriptor.set).toEqual("function"); - expect(circle.size).toBeNull(); - circle.size = "big"; - expect(circle.size).toEqual("big"); - }); - it("should be enumerable", function () { - var descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(circle), "size"); - expect(descriptor.enumerable).toBeTruthy(); - }); - it("should have a get and set", function () { - var descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(circle), "size"); - expect(typeof descriptor.get).toEqual("function"); - expect(typeof descriptor.set).toEqual("function"); - }); - }); - describe("read only propertyBlueprint's property", function () { - it("should not be settable", function () { - expect(function () { - circle.readOnlyPropertyDescriptor = "big"; - }).toThrow(); - }); - it("should have a get and no set", function () { - var descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(circle), "readOnlyPropertyDescriptor"); - expect(typeof descriptor.get).toEqual("function"); - expect(typeof descriptor.set).toEqual("undefined"); - }); - }); - describe("mandatory propertyBlueprint's property", function () { - it("should not be settable", function () { - expect( - function () { - circle.readOnlyPropertyDescriptor = "big"; - }).toThrow(); - }); - it("should have a get and no set", function () { - var descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(circle), "readOnlyPropertyDescriptor"); - expect(typeof descriptor.get).toEqual("function"); - expect(typeof descriptor.set).toEqual("undefined"); - }); - }); - describe("denyDelete propertyBlueprint's property", function () { - it("should not be settable to null", function () { - circle.denyDelete = "big"; - expect( - function () { - circle.denyDelete = null; - }).toThrow(); - }); - }); - }); - - describe("serializing", function () { - var companyBinder = BinderHelper.companyBinder(), - personBlueprint = companyBinder.objectDescriptorForName("Person"); - - personBlueprint.maxAge = 60; - - - it("can serialize", function () { - var serializedBinder = new Serializer().initWithRequire(require).serializeObject(companyBinder); - expect(serializedBinder).not.toBeNull(); - }); - it("can deserialize", function (done) { - var serializedBinder = new Serializer().initWithRequire(require).serializeObject(companyBinder); - var deserializer = new Deserializer().init(serializedBinder, require).deserializeObject().then(function (deserializedBinder) { - var metadata = Montage.getInfoForObject(deserializedBinder); - expect(serializedBinder).not.toBeNull(); - expect(metadata.objectName).toBe("Model"); - expect(metadata.moduleId).toBe("core/meta/model"); - var personBlueprint = deserializedBinder.objectDescriptorForName("Person"); - expect(personBlueprint).toBeTruthy(); - expect(personBlueprint.propertyDescriptorForName("phoneNumbers")).not.toBeNull(); - expect(personBlueprint.maxAge).toBe(60); - }, function (err) { - fail(err); - }).finally(function () { - done(); - }); - }); - }); - - describe("create new prototype", function () { - - it("Should be a prototype", function () { - var info = Montage.getInfoForObject(Person); - expect(info.isInstance).toBeFalsy(); - }); - - it("Should have the right moduleId and Name", function () { - var info = Montage.getInfoForObject(Person); - expect(info.moduleId).toBe("spec/meta/blueprint/person"); - expect(info.objectName).toBe("Person"); - }); - }); - - describe("createDefaultObjectDescriptorForObject", function () { - it("should always return a promise", function (done) { - var blueprint = Blueprint.createDefaultObjectDescriptorForObject({}); - expect(typeof blueprint.then).toBe("function"); - blueprint.then(function (blueprint) { - expect(Blueprint.prototype.isPrototypeOf(blueprint)).toBe(true); - }, function (err) { - fail(err); - }).finally(function () { - done(); - }); - }); - - it("has the correct module id for the parent", function (done) { - var ComponentBlueprintTest1 = require("spec/meta/component-blueprint-test/component-blueprint-test-1.reel").ComponentBlueprintTest1; - Blueprint.createDefaultObjectDescriptorForObject(ComponentBlueprintTest1).then(function (blueprint) { - var id = blueprint.parent.objectDescriptorInstanceModule.resolve(require); - expect(id === "montage/ui/component.meta" || id === "montage/ui/component.mjson").toBeTruthy(); - }, function (err) { - fail(err); - }).finally(function () { - done(); - }); - }); - - }); - - describe("blueprint descriptor", function () { - // Fixme: Spec was already broken before removing constructor compatibility (an unrelated error was raised) - // Before removing constructor compatibility, it was possible to reproduce this issue by setting a constructor descriptor. - //it("does not work for objects that aren't in a module", function () { - // var Sub = Blueprint.specialize(); - // var sub = new Sub(); - // - // expect(function () { - // var x = sub.blueprint; - // }).toThrow(); - //}); - - - it("uses the correct module ID for objects with no .meta", function () { - var Sub = Blueprint.specialize(); - // fake object loaded from module - Object.defineProperty(Sub, "_montage_metadata", { - value: { - require: require, - module: "pass", - moduleId: "pass", // deprecated - property: "Pass", - objectName: "Pass", // deprecated - isInstance: false - } - }); - - var sub = new Sub(); - sub._montage_metadata = Object.create(Sub._montage_metadata, { - isInstance: { value: true } - }); - - expect(sub.blueprintModuleId === "pass.meta" || sub.blueprintModuleId === "pass.mjson").toBeTruthy(); - }); - - it("creates a blueprint when the parent has no blueprint", function (done) { - Blueprint.blueprint.then(function (blueprint){ - expect( blueprint.objectDescriptorInstanceModule.id === "core/meta/blueprint.meta" || - blueprint.objectDescriptorInstanceModule.id === "core/meta/object-descriptor.mjson").toBeTruthy(); - }, function (err) { - fail(err); - }).finally(function () { - done(); - }); - }); - }); - - describe("events", function () { - var EventDescriptor = require("montage/core/meta/event-descriptor").EventDescriptor; - - var blueprint; - beforeEach(function () { - blueprint = new Blueprint().initWithName("test"); - }); - - describe("eventDescriptors", function () { - it("returns the same array", function () { - blueprint.addEventDescriptorNamed("event"); - var eventDescriptors = blueprint.eventDescriptors; - expect(blueprint.eventDescriptors).toBe(eventDescriptors); - }); - }); - - describe("adding", function () { - var eventBlueprint; - afterEach(function () { - expect(blueprint.eventDescriptors.length).toEqual(1); - expect(blueprint.eventDescriptors[0]).toBe(eventBlueprint); - }); - - it("adds an existing blueprint", function () { - eventBlueprint = new EventDescriptor().initWithNameAndObjectDescriptor("event"); - blueprint.addEventDescriptor(eventBlueprint); - - expect(eventBlueprint.owner).toBe(blueprint); - expect(blueprint.eventDescriptorForName("event")).toBe(eventBlueprint); - }); - - it("only adds the blueprint once", function () { - eventBlueprint = new EventDescriptor().initWithNameAndObjectDescriptor("event"); - - blueprint.addEventDescriptor(eventBlueprint); - blueprint.addEventDescriptor(eventBlueprint); - - expect(eventBlueprint.owner).toBe(blueprint); - expect(blueprint.eventDescriptorForName("event")).toBe(eventBlueprint); - }); - - it("creates a new blueprint with the given name", function () { - eventBlueprint = blueprint.addEventDescriptorNamed("event"); - - expect(eventBlueprint.owner).toBe(blueprint); - expect(eventBlueprint.name).toEqual("event"); - expect(blueprint.eventDescriptorForName("event")).toBe(eventBlueprint); - }); - }); - - it("creates a new event blueprint", function () { - var eventBlueprint = blueprint.newEventDescriptor("event"); - - expect(eventBlueprint.name).toEqual("event"); - expect(eventBlueprint.owner).toBe(blueprint); - }); - - it("removes an existing blueprint", function () { - var eventBlueprint = blueprint.addEventDescriptorNamed("event"); - blueprint.removeEventDescriptor(eventBlueprint); - - expect(eventBlueprint.owner).toBe(null); - expect(blueprint.eventDescriptorForName("event")).toBe(null); - }); - - - it("removes an existing blueprint from it's previous owner", function () { - var oldBlueprint = new Blueprint().initWithName("old"); - - var eventBlueprint = new EventDescriptor().initWithNameAndObjectDescriptor("event", oldBlueprint); - blueprint.addEventDescriptor(eventBlueprint); - - expect(eventBlueprint.owner).toBe(blueprint); - expect(blueprint.eventDescriptorForName("event")).toBe(eventBlueprint); - - expect(oldBlueprint.eventDescriptorForName("event")).toBe(null); - }); - - it("lists event blueprints of the parent", function () { - var parentBlueprint = new Blueprint().initWithName("parent"); - blueprint.parent = parentBlueprint; - - var parentEvent = parentBlueprint.addEventDescriptorNamed("parentEvent"); - var event = blueprint.addEventDescriptorNamed("event"); - - expect(blueprint.eventDescriptors.length).toEqual(2); - expect(blueprint.eventDescriptors).toEqual([event, parentEvent]); - }); - }); - }); -}); diff --git a/test/spec/meta/blueprint/binderhelper.js b/test/spec/meta/blueprint/binderhelper.js deleted file mode 100644 index f58096232b..0000000000 --- a/test/spec/meta/blueprint/binderhelper.js +++ /dev/null @@ -1,41 +0,0 @@ -/* - */ -var Montage = require("montage").Montage; -var Blueprint = require("montage/core/meta/blueprint").Blueprint; -var Model = require("montage/core/meta/model").Model; - -exports.companyBinder = function () { - return exports.BinderHelper.companyBinder(); -}; - -exports.BinderHelper = Montage.specialize( { -}, { - companyBinder: { - value: function () { - var companyBinder = new Model().initWithNameAndRequire("CompanyBinder", require); - - var personBlueprint = companyBinder.addObjectDescriptorNamed("Person", "spec/meta/blueprint/person"); - personBlueprint.addToOnePropertyDescriptorNamed("name"); - personBlueprint.addToManyPropertyDescriptorNamed("phoneNumbers"); - - var companyBlueprint = companyBinder.addObjectDescriptorNamed("Company", "spec/meta/blueprint/company"); - companyBlueprint.addToOnePropertyDescriptorNamed("name"); - - companyBlueprint.addToManyAssociationBlueprintNamed("directReports", personBlueprint.addToOneAssociationBlueprintNamed("supervisor")); - - var projectBlueprint = companyBinder.addObjectDescriptorNamed("Project", "spec/meta/blueprint/project"); - projectBlueprint.addToOnePropertyDescriptorNamed("name"); - projectBlueprint.addToOnePropertyDescriptorNamed("startDate"); - projectBlueprint.addToOnePropertyDescriptorNamed("endDate"); - - // companyBlueprint.addToManyAssociationBlueprintNamed("projects", personBlueprint.addToOneAssociationBlueprintNamed("company")); - // - // personBlueprint.addToManyAssociationBlueprintNamed("projects", projectBlueprint.addToManyAssociationBlueprintNamed("contributors")); - - Model.group.addModel(companyBinder); - - return companyBinder; - } - } - -}); diff --git a/test/spec/meta/blueprint/company.js b/test/spec/meta/blueprint/company.js index 037fd3ac1c..d755c7cbcf 100644 --- a/test/spec/meta/blueprint/company.js +++ b/test/spec/meta/blueprint/company.js @@ -2,11 +2,11 @@ */ var Montage = require("montage").Montage; -var BinderHelper = require("spec/meta/blueprint/binderhelper").BinderHelper; -var binder = BinderHelper.companyBinder(); -var blueprint = binder.objectDescriptorForName("Company"); +var ModelHelper = require("spec/meta/blueprint/model-helper").ModelHelper; +var model = ModelHelper.companyModel(); +var objectDescriptor = model.objectDescriptorForName("Company"); -var Company = exports.Company = blueprint.create(Montage, { +var Company = exports.Company = objectDescriptor.create(Montage, { // Token class diff --git a/test/spec/meta/blueprint/model-helper.js b/test/spec/meta/blueprint/model-helper.js new file mode 100644 index 0000000000..5928e938ed --- /dev/null +++ b/test/spec/meta/blueprint/model-helper.js @@ -0,0 +1,36 @@ +/* + */ +var Montage = require("montage").Montage; +var Model = require("montage/core/meta/model").Model; + +exports.companyModel = function () { + return exports.ModelHelper.companyModel(); +}; + +exports.ModelHelper = Montage.specialize( { +}, { + companyModel: { + value: function () { + var companyModel = new Model().initWithNameAndRequire("CompanyModel", require); + + var personObjectDescriptor = companyModel.addObjectDescriptorNamed("Person", "spec/meta/blueprint/person"); + personObjectDescriptor.addToOnePropertyDescriptorNamed("name"); + personObjectDescriptor.addToManyPropertyDescriptorNamed("phoneNumbers"); + + var companyObjectDescriptor = companyModel.addObjectDescriptorNamed("Company", "spec/meta/blueprint/company"); + companyObjectDescriptor.addToOnePropertyDescriptorNamed("name"); + + companyObjectDescriptor.addToManyPropertyDescriptorNamed("directReports", personObjectDescriptor.addToOnePropertyDescriptorNamed("supervisor")); + + var projectObjectDescriptor = companyModel.addObjectDescriptorNamed("Project", "spec/meta/blueprint/project"); + projectObjectDescriptor.addToOnePropertyDescriptorNamed("name"); + projectObjectDescriptor.addToOnePropertyDescriptorNamed("startDate"); + projectObjectDescriptor.addToOnePropertyDescriptorNamed("endDate"); + + Model.group.addModel(companyModel); + + return companyModel; + } + } + +}); diff --git a/test/spec/meta/blueprint/package/node_modules/dependency/node_modules/dependency2/thing.meta b/test/spec/meta/blueprint/package/node_modules/dependency/node_modules/dependency2/thing.meta index 26f24d7d84..dfbed1c890 100644 --- a/test/spec/meta/blueprint/package/node_modules/dependency/node_modules/dependency2/thing.meta +++ b/test/spec/meta/blueprint/package/node_modules/dependency/node_modules/dependency2/thing.meta @@ -1,6 +1,6 @@ { "root": { - "prototype": "montage/core/meta/module-blueprint", + "prototype": "montage/core/meta/module-object-descriptor", "values": { "name": "Thing", "module": {"%": "./thing"}, diff --git a/test/spec/meta/blueprint/package/node_modules/dependency/thing.meta b/test/spec/meta/blueprint/package/node_modules/dependency/thing.meta index 3b15f3338c..49bb08b5fb 100644 --- a/test/spec/meta/blueprint/package/node_modules/dependency/thing.meta +++ b/test/spec/meta/blueprint/package/node_modules/dependency/thing.meta @@ -1,9 +1,9 @@ { - "blueprint_parent": { + "objectDescriptor_parent": { "object": "dependency2/thing.meta" }, "root": { - "prototype": "montage/core/meta/module-blueprint", + "prototype": "montage/core/meta/module-object-descriptor", "values": { "name": "Thing", "module": { @@ -11,9 +11,9 @@ }, "exportName": "Thing", "parent": { - "@": "blueprint_parent" + "@": "objectDescriptor_parent" }, - "blueprintModule": {} + "objectDescriptorModule": {} } } } diff --git a/test/spec/meta/blueprint/package/thing.meta b/test/spec/meta/blueprint/package/thing.meta index 663cdbdcbc..1f420dc55c 100644 --- a/test/spec/meta/blueprint/package/thing.meta +++ b/test/spec/meta/blueprint/package/thing.meta @@ -1,9 +1,9 @@ { - "blueprint_parent": { + "objectDescriptor_parent": { "object": "dependency/thing.meta" }, "root": { - "prototype": "montage/core/meta/module-blueprint", + "prototype": "montage/core/meta/module-object-descriptor", "values": { "name": "Thing", "module": { @@ -11,9 +11,9 @@ }, "exportName": "Thing", "parent": { - "@": "blueprint_parent" + "@": "objectDescriptor_parent" }, - "blueprintModule": {} + "objectDescriptorModule": {} } } } diff --git a/test/spec/meta/blueprint/person.js b/test/spec/meta/blueprint/person.js index 623209245d..87066ce854 100644 --- a/test/spec/meta/blueprint/person.js +++ b/test/spec/meta/blueprint/person.js @@ -2,11 +2,11 @@ */ var Montage = require("montage").Montage; -var BinderHelper = require("spec/meta/blueprint/binderhelper").BinderHelper; -var binder = BinderHelper.companyBinder(); -var blueprint = binder.objectDescriptorForName("Person"); +var ModelHelper = require("spec/meta/blueprint/model-helper").ModelHelper; +var model = ModelHelper.companyModel(); +var objectDescriptor = model.objectDescriptorForName("Person"); -var Person = exports.Person = blueprint.create(Montage, { +var Person = exports.Person = objectDescriptor.create(Montage, { // Token class diff --git a/test/spec/meta/blueprint/project.js b/test/spec/meta/blueprint/project.js index 238b768f3d..2cea7a3b89 100644 --- a/test/spec/meta/blueprint/project.js +++ b/test/spec/meta/blueprint/project.js @@ -2,11 +2,11 @@ s */ var Montage = require("montage").Montage; -var BinderHelper = require("spec/meta/blueprint/binderhelper").BinderHelper; -var binder = BinderHelper.companyBinder(); -var blueprint = binder.objectDescriptorForName("Project"); +var BinderHelper = require("spec/meta/blueprint/modelhelper").BinderHelper; +var model = BinderHelper.companyModel(); +var objectDescriptor = model.objectDescriptorForName("Project"); -var Project = exports.Project = blueprint.create(Montage, { +var Project = exports.Project = objectDescriptor.create(Montage, { // Token class diff --git a/test/spec/meta/build-in-component-blueprint-spec.js b/test/spec/meta/build-in-component-blueprint-spec.js deleted file mode 100644 index 5b3600d901..0000000000 --- a/test/spec/meta/build-in-component-blueprint-spec.js +++ /dev/null @@ -1,184 +0,0 @@ -/* - */ -/** - @module montage/data/blueprint-spec.js - @requires montage/core/core - @requires montage/core/logger - */ -var Montage = require("montage").Montage; -var Condition = require("montage/ui/condition.reel").Condition; -var Loader = require("montage/ui/loader.reel").Loader; -var Repetition = require("montage/ui/repetition.reel").Repetition; -var Slot = require("montage/ui/slot.reel").Slot; -var Substitution = require("montage/ui/substitution.reel").Substitution; -var Text = require("montage/ui/text.reel").Text; - -var Blueprint = require("montage/core/meta/blueprint").Blueprint; -var Binder = require("montage/core/meta/blueprint").Binder; -var PropertyBlueprint = require("montage/core/meta/blueprint").PropertyBlueprint; -var AssociationBlueprint = require("montage/core/meta/blueprint").AssociationBlueprint; - -var Serializer = require("montage/core/serialization/serializer/montage-serializer").MontageSerializer; - -describe("meta/build-in-component-blueprint-spec", function () { - - var textinput, - condition, - loader, - repetition, - slot, - substitution, - text; - - beforeEach(function () { -// textinput = new TextInput(); - condition = new Condition(); - loader = new Loader(); - repetition = new Repetition(); - slot = new Slot(); - substitution = new Substitution(); - text = new Text(); - }); -// -// describe("test text input blueprint", function () { -// it("should exist", function () { -// var blueprintPromise = textinput.blueprint; -// blueprintPromise.then(function (blueprint) { -// expect(blueprint).toBeTruthy(); -// var serializer = new Serializer().initWithRequire(require); -// var serializedDescription = serializer.serializeObject(blueprint); -// console.log(serializedDescription); -// }).finally(function () { -// done(); -// }); -// }); -// -// }); - - describe("test condition blueprint", function () { - it("should exist", function (done) { - var blueprintPromise = condition.blueprint; - blueprintPromise.then(function (blueprint) { - expect(blueprint).toBeTruthy(); - }).finally(function () { - done(); - }); - }); - - }); - - describe("test loader blueprint", function () { - it("should exist", function (done) { - var blueprintPromise = loader.blueprint; - blueprintPromise.then(function (blueprint) { - expect(blueprint).toBeTruthy(); - }).finally(function () { - done(); - }); - }); - - }); - - describe("test repetition blueprint", function () { - it("should exist", function (done) { - var blueprintPromise = repetition.blueprint; - blueprintPromise.then(function (blueprint) { - expect(blueprint).toBeTruthy(); - }).finally(function () { - done(); - }); - }); - - }); - - describe("test slot blueprint", function () { - it("should exist", function (done) { - var blueprintPromise = slot.blueprint; - blueprintPromise.then(function (blueprint) { - expect(blueprint).toBeTruthy(); - }).finally(function () { - done(); - }); - }); - - }); - - describe("test substitution blueprint", function () { - it("should exist", function (done) { - var blueprintPromise = substitution.blueprint; - blueprintPromise.then(function (blueprint) { - expect(blueprint).toBeTruthy(); - }).finally(function () { - done(); - }); - }); - - it("should have switchValue property blueprint", function (done) { - var blueprintPromise = substitution.blueprint; - blueprintPromise.then(function (blueprint) { - var propertyBlueprint = blueprint.propertyDescriptorForName("switchValue"); - expect(propertyBlueprint).toBeTruthy(); - expect(propertyBlueprint.valueType).toBe("string"); - }).finally(function () { - done(); - }); - }); - - it("should have shouldLoadComponentTree property blueprint", function (done) { - var blueprintPromise = substitution.blueprint; - blueprintPromise.then(function (blueprint) { - var propertyBlueprint = blueprint.propertyDescriptorForName("shouldLoadComponentTree"); - expect(propertyBlueprint).toBeTruthy(); - expect(propertyBlueprint.valueType).toBe("boolean"); - }).finally(function () { - done(); - }); - }); - - it("should have transition property blueprint", function (done) { - var blueprintPromise = substitution.blueprint; - blueprintPromise.then(function (blueprint) { - var propertyBlueprint = blueprint.propertyDescriptorForName("transition"); - expect(propertyBlueprint).toBeTruthy(); - expect(propertyBlueprint.valueType).toBe("object"); - }).finally(function () { - done(); - }); - }); - }); - - describe("test text blueprint", function () { - it("should exist", function (done) { - var blueprintPromise = text.blueprint; - blueprintPromise.then(function (blueprint) { - expect(blueprint).toBeTruthy(); - }).finally(function () { - done(); - }); - }); - - it("should have value property blueprint", function (done) { - var blueprintPromise = text.blueprint; - blueprintPromise.then(function (blueprint) { - var propertyBlueprint = blueprint.propertyDescriptorForName("value"); - expect(propertyBlueprint).toBeTruthy(); - expect(propertyBlueprint.valueType).toBe("string"); - }).finally(function () { - done(); - }); - }); - - it("should have converter association blueprint", function (done) { - var blueprintPromise = text.blueprint; - blueprintPromise.then(function (blueprint) { - var propertyBlueprint = blueprint.propertyDescriptorForName("converter"); - expect(propertyBlueprint).toBeTruthy(); - expect(propertyBlueprint.isAssociationBlueprint).toBe(true); - expect(propertyBlueprint.valueDescriptor).toBeTruthy(); - }).finally(function () { - done(); - }); - }); - }); - -}); diff --git a/test/spec/meta/build-in-component-object-descriptor-spec.js b/test/spec/meta/build-in-component-object-descriptor-spec.js new file mode 100644 index 0000000000..98e2888c5d --- /dev/null +++ b/test/spec/meta/build-in-component-object-descriptor-spec.js @@ -0,0 +1,183 @@ +/* + */ +/** + @requires montage/core/core + @requires montage/core/logger + */ +var Montage = require("montage").Montage; +var Condition = require("montage/ui/condition.reel").Condition; +var Loader = require("montage/ui/loader.reel").Loader; +var Repetition = require("montage/ui/repetition.reel").Repetition; +var Slot = require("montage/ui/slot.reel").Slot; +var Substitution = require("montage/ui/substitution.reel").Substitution; +var Text = require("montage/ui/text.reel").Text; + +var ObjectDescriptor = require("montage/core/meta/object-descriptor").ObjectDescriptor; + +var Serializer = require("montage/core/serialization/serializer/montage-serializer").MontageSerializer; + +describe("meta/build-in-component-object-descriptor-spec", function () { + + var textinput, + condition, + loader, + repetition, + slot, + substitution, + text; + + beforeEach(function () { +// textinput = new TextInput(); + condition = new Condition(); + loader = new Loader(); + repetition = new Repetition(); + slot = new Slot(); + substitution = new Substitution(); + text = new Text(); + }); + + // TODO: Why is this commented out? +// +// describe("test text input objectDescriptor", function () { +// it("should exist", function () { +// var objectDescriptorPromise = textinput.objectDescriptor; +// objectDescriptorPromise.then(function (objectDescriptor) { +// expect(objectDescriptor).toBeTruthy(); +// var serializer = new Serializer().initWithRequire(require); +// var serializedDescription = serializer.serializeObject(objectDescriptor); +// console.log(serializedDescription); +// }).finally(function () { +// done(); +// }); +// }); +// +// }); + + describe("test condition objectDescriptor", function () { + it("should exist", function (done) { + var objectDescriptorPromise = condition.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + expect(objectDescriptor).toBeTruthy(); + }).finally(function () { + done(); + }); + }); + + }); + + describe("test loader objectDescriptor", function () { + it("should exist", function (done) { + var objectDescriptorPromise = loader.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + expect(objectDescriptor).toBeTruthy(); + }).finally(function () { + done(); + }); + }); + + }); + + describe("test repetition objectDescriptor", function () { + it("should exist", function (done) { + var objectDescriptorPromise = repetition.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + expect(objectDescriptor).toBeTruthy(); + }).finally(function () { + done(); + }); + }); + + }); + + describe("test slot objectDescriptor", function () { + it("should exist", function (done) { + var objectDescriptorPromise = slot.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + expect(objectDescriptor).toBeTruthy(); + }).finally(function () { + done(); + }); + }); + + }); + + describe("test substitution objectDescriptor", function () { + it("should exist", function (done) { + var objectDescriptorPromise = substitution.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + expect(objectDescriptor).toBeTruthy(); + }).finally(function () { + done(); + }); + }); + + it("should have switchValue property objectDescriptor", function (done) { + var objectDescriptorPromise = substitution.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + var propertyDescriptor = objectDescriptor.propertyDescriptorForName("switchValue"); + expect(propertyDescriptor).toBeTruthy(); + expect(propertyDescriptor.valueType).toBe("string"); + }).finally(function () { + done(); + }); + }); + + it("should have shouldLoadComponentTree property objectDescriptor", function (done) { + var objectDescriptorPromise = substitution.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + var propertyDescriptor = objectDescriptor.propertyDescriptorForName("shouldLoadComponentTree"); + expect(propertyDescriptor).toBeTruthy(); + expect(propertyDescriptor.valueType).toBe("boolean"); + }).finally(function () { + done(); + }); + }); + + it("should have transition property objectDescriptor", function (done) { + var objectDescriptorPromise = substitution.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + var propertyDescriptor = objectDescriptor.propertyDescriptorForName("transition"); + expect(propertyDescriptor).toBeTruthy(); + expect(propertyDescriptor.valueType).toBe("object"); + }).finally(function () { + done(); + }); + }); + }); + + describe("test text objectDescriptor", function () { + it("should exist", function (done) { + var objectDescriptorPromise = text.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + expect(objectDescriptor).toBeTruthy(); + }).finally(function () { + done(); + }); + }); + + it("should have value property objectDescriptor", function (done) { + var objectDescriptorPromise = text.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + var propertyDescriptor = objectDescriptor.propertyDescriptorForName("value"); + expect(propertyDescriptor).toBeTruthy(); + expect(propertyDescriptor.valueType).toBe("string"); + }).finally(function () { + done(); + }); + }); + + it("should have converter association objectDescriptor", function (done) { + var objectDescriptorPromise = text.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + var propertyDescriptor = objectDescriptor.propertyDescriptorForName("converter"); + expect(propertyDescriptor).toBeTruthy(); + // TODO: isAssociationBlueprint is deprecated but has no equivalent + expect(propertyDescriptor.isAssociationBlueprint).toBe(true); + expect(propertyDescriptor.valueDescriptor).toBeTruthy(); + }).finally(function () { + done(); + }); + }); + }); + +}); diff --git a/test/spec/meta/component-blueprint-spec.js b/test/spec/meta/component-blueprint-spec.js deleted file mode 100644 index 527304f31f..0000000000 --- a/test/spec/meta/component-blueprint-spec.js +++ /dev/null @@ -1,161 +0,0 @@ -/* - */ -var Montage = require("montage").Montage; -var TestPageLoader = require("montage-testing/testpageloader").TestPageLoader; -var Component = require("montage/ui/component").Component; -var Selector = require("montage/core/selector").Selector; -var Blueprint = require("montage/core/meta/blueprint").Blueprint; -var Promise = require("montage/core/promise").Promise; -var Serializer = require("montage/core/serialization/serializer/montage-serializer").MontageSerializer; - -TestPageLoader.queueTest("component-blueprint-test/component-blueprint-test", function (testPage) { - describe("meta/component-blueprint-spec", function () { - var component1; - var component2; - var component3; - - - beforeEach(function () { - component1 = testPage.test.component1; - component2 = testPage.test.component2; - component3 = testPage.test.component3; - }); - - it("can create new blueprint", function (done) { - var newBlueprint = new Blueprint().initWithName(component1.identifier); - component1.blueprint = newBlueprint; - var blueprintPromise = component1.blueprint; - blueprintPromise.then(function (blueprint) { - expect(newBlueprint).toBeDefined(); - expect(blueprint).toBe(newBlueprint); - }).finally(function () { - done(); - }); - }); - - it("can create new property blueprint", function (done) { - var newBlueprint = new Blueprint().initWithName(component1.identifier); - newBlueprint.addToOnePropertyDescriptorNamed("bindableProperty"); - component1.blueprint = newBlueprint; - var blueprintPromise = component1.blueprint; - blueprintPromise.then(function (blueprint) { - var propertyBlueprint = blueprint.propertyDescriptorForName("bindableProperty"); - expect(propertyBlueprint).toBeDefined(); - }).finally(function () { - done(); - }); - }); - - it("can serialize the component blueprint", function (done) { - var serializer = new Serializer().initWithRequire(require); - - var newBlueprint = new Blueprint().initWithName(component1.identifier); - // - newBlueprint.addToOnePropertyDescriptorNamed("bindableProperty1"); - newBlueprint.addToOnePropertyDescriptorNamed("bindableProperty2"); - newBlueprint.addToOnePropertyDescriptorNamed("bindableProperty3"); - newBlueprint.addToOnePropertyDescriptorNamed("bindableProperty4"); - newBlueprint.addToOnePropertyDescriptorNamed("bindableProperty5"); - // - newBlueprint.addEventDescriptorNamed("action"); - // - newBlueprint.addPropertyDescriptorToGroupNamed(newBlueprint.addToOnePropertyDescriptorNamed("requiredBindableProperty1"), "required"); - newBlueprint.addPropertyDescriptorToGroupNamed(newBlueprint.addToOnePropertyDescriptorNamed("requiredBindableProperty2"), "required"); - newBlueprint.addPropertyDescriptorToGroupNamed(newBlueprint.addToOnePropertyDescriptorNamed("requiredBindableProperty3"), "required"); - component1.blueprint = newBlueprint; - - var blueprintPromise = component1.blueprint; - blueprintPromise.then(function (blueprint) { - var serializedDescription = serializer.serializeObject(blueprint); - expect(serializedDescription).toBeTruthy(); - }).finally(function () { - done(); - }); - }); - - xit("can load the component blueprint from the reel", function (done) { - var blueprintPromise = component2.blueprint; - blueprintPromise.then(function (blueprint) { - expect(blueprint).toBeTruthy(); - // TODO test look weird requiredBindableProperty1 vs bindableProperty1 - expect(blueprint.propertyDescriptorForName("bindableProperty1")).toBeTruthy(); - expect(blueprint.propertyDescriptorForName("required")).toBeTruthy(); - }).finally(function () { - done(); - }); - }); - - - it("can create validation rules", function (done) { - var serializer = new Serializer().initWithRequire(require); - - var newBlueprint = new Blueprint().initWithName(component3.identifier); - expect(newBlueprint).toBeTruthy(); - // - newBlueprint.addToOnePropertyDescriptorNamed("bindableProperty1"); - newBlueprint.addToOnePropertyDescriptorNamed("bindableProperty2"); - newBlueprint.addToOnePropertyDescriptorNamed("bindableProperty3"); - newBlueprint.addToOnePropertyDescriptorNamed("bindableProperty4"); - newBlueprint.addToOnePropertyDescriptorNamed("bindableProperty5"); - // - newBlueprint.addPropertyDescriptorToGroupNamed(newBlueprint.addToOnePropertyDescriptorNamed("requiredBindableProperty1"), "required"); - newBlueprint.addPropertyDescriptorToGroupNamed(newBlueprint.addToOnePropertyDescriptorNamed("requiredBindableProperty2"), "required"); - newBlueprint.addPropertyDescriptorToGroupNamed(newBlueprint.addToOnePropertyDescriptorNamed("requiredBindableProperty3"), "required"); - - newBlueprint.addPropertyValidationRule("rule1").validationSelector = null; - // newBlueprint.addPropertyValidationRule("rule1").validationSelector = Selector.property("requiredBindableProperty1").isBound; - // newBlueprint.addPropertyValidationRule("rule2").validationSelector = Selector.property("requiredBindableProperty2").isBound; - // newBlueprint.addPropertyValidationRule("rule3").validationSelector = Selector.property("requiredBindableProperty3").isBound; - - component3.blueprint = newBlueprint; - - var blueprintPromise = component3.blueprint; - blueprintPromise.then(function (blueprint) { - expect(blueprint).toBeTruthy(); - var serializedDescription = serializer.serializeObject(blueprint); - expect(serializedDescription).toBeTruthy(); - }).finally(function () { - done(); - }); - }); - - describe("test converter blueprint", function () { - var component = new Component(); - - it("should exist", function (done) { - var blueprintPromise = component.blueprint; - blueprintPromise.then(function (blueprint) { - expect(blueprint).toBeTruthy(); - }).finally(function () { - done(); - }); - }); - - it("should have element property blueprint", function (done) { - var blueprintPromise = component.blueprint; - blueprintPromise.then(function (blueprint) { - var propertyBlueprint = blueprint.propertyDescriptorForName("element"); - expect(propertyBlueprint).toBeTruthy(); - expect(propertyBlueprint.valueType).toBe("string"); - expect(propertyBlueprint.readOnly).toBe(true); - }).finally(function () { - done(); - }); - }); - - it("should have identifier property blueprint", function (done) { - var blueprintPromise = component.blueprint; - blueprintPromise.then(function (blueprint) { - var propertyBlueprint = blueprint.propertyDescriptorForName("identifier"); - expect(propertyBlueprint).toBeTruthy(); - expect(propertyBlueprint.valueType).toBe("string"); - }).finally(function () { - done(); - }); - }); - - }); - - }); - -}); diff --git a/test/spec/meta/component-object-descriptor-spec.js b/test/spec/meta/component-object-descriptor-spec.js new file mode 100644 index 0000000000..0e306a8acd --- /dev/null +++ b/test/spec/meta/component-object-descriptor-spec.js @@ -0,0 +1,161 @@ +/* + */ +var Montage = require("montage").Montage; +var TestPageLoader = require("montage-testing/testpageloader").TestPageLoader; +var Component = require("montage/ui/component").Component; +var Selector = require("montage/core/selector").Selector; +var ObjectDescriptor = require("montage/core/meta/object-descriptor").ObjectDescriptor; +var Promise = require("montage/core/promise").Promise; +var Serializer = require("montage/core/serialization/serializer/montage-serializer").MontageSerializer; + +TestPageLoader.queueTest("component-object-descriptor-test/component-object-descriptor-test", function (testPage) { + describe("meta/component-object-descriptor-spec", function () { + var component1; + var component2; + var component3; + + + beforeEach(function () { + component1 = testPage.test.component1; + component2 = testPage.test.component2; + component3 = testPage.test.component3; + }); + + it("can create new objectDescriptor", function (done) { + var newObjectDescriptor = new ObjectDescriptor().initWithName(component1.identifier); + component1.objectDescriptor = newObjectDescriptor; + var objectDescriptorPromise = component1.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + expect(newObjectDescriptor).toBeDefined(); + expect(objectDescriptor).toBe(newObjectDescriptor); + }).finally(function () { + done(); + }); + }); + + it("can create new property objectDescriptor", function (done) { + var newObjectDescriptor = new ObjectDescriptor().initWithName(component1.identifier); + newObjectDescriptor.addToOnePropertyDescriptorNamed("bindableProperty"); + component1.objectDescriptor = newObjectDescriptor; + var objectDescriptorPromise = component1.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + var propertyDescriptor = objectDescriptor.propertyDescriptorForName("bindableProperty"); + expect(propertyDescriptor).toBeDefined(); + }).finally(function () { + done(); + }); + }); + + it("can serialize the component objectDescriptor", function (done) { + var serializer = new Serializer().initWithRequire(require); + + var newObjectDescriptor = new ObjectDescriptor().initWithName(component1.identifier); + // + newObjectDescriptor.addToOnePropertyDescriptorNamed("bindableProperty1"); + newObjectDescriptor.addToOnePropertyDescriptorNamed("bindableProperty2"); + newObjectDescriptor.addToOnePropertyDescriptorNamed("bindableProperty3"); + newObjectDescriptor.addToOnePropertyDescriptorNamed("bindableProperty4"); + newObjectDescriptor.addToOnePropertyDescriptorNamed("bindableProperty5"); + // + newObjectDescriptor.addEventDescriptorNamed("action"); + // + newObjectDescriptor.addPropertyDescriptorToGroupNamed(newObjectDescriptor.addToOnePropertyDescriptorNamed("requiredBindableProperty1"), "required"); + newObjectDescriptor.addPropertyDescriptorToGroupNamed(newObjectDescriptor.addToOnePropertyDescriptorNamed("requiredBindableProperty2"), "required"); + newObjectDescriptor.addPropertyDescriptorToGroupNamed(newObjectDescriptor.addToOnePropertyDescriptorNamed("requiredBindableProperty3"), "required"); + component1.objectDescriptor = newObjectDescriptor; + + var objectDescriptorPromise = component1.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + var serializedDescription = serializer.serializeObject(objectDescriptor); + expect(serializedDescription).toBeTruthy(); + }).finally(function () { + done(); + }); + }); + + xit("can load the component objectDescriptor from the reel", function (done) { + var objectDescriptorPromise = component2.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + expect(objectDescriptor).toBeTruthy(); + // TODO test look weird requiredBindableProperty1 vs bindableProperty1 + expect(objectDescriptor.propertyDescriptorForName("bindableProperty1")).toBeTruthy(); + expect(objectDescriptor.propertyDescriptorForName("required")).toBeTruthy(); + }).finally(function () { + done(); + }); + }); + + + it("can create validation rules", function (done) { + var serializer = new Serializer().initWithRequire(require); + + var newObjectDescriptor = new ObjectDescriptor().initWithName(component3.identifier); + expect(newObjectDescriptor).toBeTruthy(); + // + newObjectDescriptor.addToOnePropertyDescriptorNamed("bindableProperty1"); + newObjectDescriptor.addToOnePropertyDescriptorNamed("bindableProperty2"); + newObjectDescriptor.addToOnePropertyDescriptorNamed("bindableProperty3"); + newObjectDescriptor.addToOnePropertyDescriptorNamed("bindableProperty4"); + newObjectDescriptor.addToOnePropertyDescriptorNamed("bindableProperty5"); + // + newObjectDescriptor.addPropertyDescriptorToGroupNamed(newObjectDescriptor.addToOnePropertyDescriptorNamed("requiredBindableProperty1"), "required"); + newObjectDescriptor.addPropertyDescriptorToGroupNamed(newObjectDescriptor.addToOnePropertyDescriptorNamed("requiredBindableProperty2"), "required"); + newObjectDescriptor.addPropertyDescriptorToGroupNamed(newObjectDescriptor.addToOnePropertyDescriptorNamed("requiredBindableProperty3"), "required"); + + newObjectDescriptor.addPropertyValidationRule("rule1").validationSelector = null; + // newObjectDescriptor.addPropertyValidationRule("rule1").validationSelector = Selector.property("requiredBindableProperty1").isBound; + // newObjectDescriptor.addPropertyValidationRule("rule2").validationSelector = Selector.property("requiredBindableProperty2").isBound; + // newObjectDescriptor.addPropertyValidationRule("rule3").validationSelector = Selector.property("requiredBindableProperty3").isBound; + + component3.objectDescriptor = newObjectDescriptor; + + var objectDescriptorPromise = component3.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + expect(objectDescriptor).toBeTruthy(); + var serializedDescription = serializer.serializeObject(objectDescriptor); + expect(serializedDescription).toBeTruthy(); + }).finally(function () { + done(); + }); + }); + + describe("test converter objectDescriptor", function () { + var component = new Component(); + + it("should exist", function (done) { + var objectDescriptorPromise = component.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + expect(objectDescriptor).toBeTruthy(); + }).finally(function () { + done(); + }); + }); + + it("should have element property objectDescriptor", function (done) { + var objectDescriptorPromise = component.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + var propertyDescriptor = objectDescriptor.propertyDescriptorForName("element"); + expect(propertyDescriptor).toBeTruthy(); + expect(propertyDescriptor.valueType).toBe("string"); + expect(propertyDescriptor.readOnly).toBe(true); + }).finally(function () { + done(); + }); + }); + + it("should have identifier property objectDescriptor", function (done) { + var objectDescriptorPromise = component.objectDescriptor; + objectDescriptorPromise.then(function (objectDescriptor) { + var propertyDescriptor = objectDescriptor.propertyDescriptorForName("identifier"); + expect(propertyDescriptor).toBeTruthy(); + expect(propertyDescriptor.valueType).toBe("string"); + }).finally(function () { + done(); + }); + }); + + }); + + }); + +}); diff --git a/test/spec/meta/component-blueprint-test/component-blueprint-test-1.reel/component-blueprint-test-1.html b/test/spec/meta/component-object-descriptor-test/component-object-descriptor-test-1.reel/component-object-descriptor-test-1.html similarity index 54% rename from test/spec/meta/component-blueprint-test/component-blueprint-test-1.reel/component-blueprint-test-1.html rename to test/spec/meta/component-object-descriptor-test/component-object-descriptor-test-1.reel/component-object-descriptor-test-1.html index af88e04cb9..3946e766d3 100644 --- a/test/spec/meta/component-blueprint-test/component-blueprint-test-1.reel/component-blueprint-test-1.html +++ b/test/spec/meta/component-object-descriptor-test/component-object-descriptor-test-1.reel/component-object-descriptor-test-1.html @@ -2,9 +2,9 @@ - ComponentBlueprintTest1 + ComponentObjectDescriptorTest1 - + - \ No newline at end of file + diff --git a/test/spec/meta/component-blueprint-test/component-blueprint-test-1.reel/component-blueprint-test-1.js b/test/spec/meta/component-object-descriptor-test/component-object-descriptor-test-1.reel/component-object-descriptor-test-1.js similarity index 51% rename from test/spec/meta/component-blueprint-test/component-blueprint-test-1.reel/component-blueprint-test-1.js rename to test/spec/meta/component-object-descriptor-test/component-object-descriptor-test-1.reel/component-object-descriptor-test-1.js index d770dae2ea..e9a28e8000 100644 --- a/test/spec/meta/component-blueprint-test/component-blueprint-test-1.reel/component-blueprint-test-1.js +++ b/test/spec/meta/component-object-descriptor-test/component-object-descriptor-test-1.reel/component-object-descriptor-test-1.js @@ -2,17 +2,17 @@ */ var Component = require("montage/ui/component").Component; -exports.ComponentBlueprintTest1 = Component.specialize( { +exports.ComponentObjectDescriptorTest1 = Component.specialize( { templateDidLoad: { value: function () { - console.log("Component Blueprint Test 1 template did load"); + console.log("Component ObjectDescriptor Test 1 template did load"); } }, deserializedFromTemplate: { value: function () { - console.log("Component Blueprint Test 1 deserialized from template"); + console.log("Component ObjectDescriptor Test 1 deserialized from template"); } } diff --git a/test/spec/meta/component-blueprint-test/component-blueprint-test-2.reel/component-blueprint-test-2.html b/test/spec/meta/component-object-descriptor-test/component-object-descriptor-test-2.reel/component-object-descriptor-test-2.html similarity index 54% rename from test/spec/meta/component-blueprint-test/component-blueprint-test-2.reel/component-blueprint-test-2.html rename to test/spec/meta/component-object-descriptor-test/component-object-descriptor-test-2.reel/component-object-descriptor-test-2.html index 0e9fb9406e..d16bdaa9ea 100644 --- a/test/spec/meta/component-blueprint-test/component-blueprint-test-2.reel/component-blueprint-test-2.html +++ b/test/spec/meta/component-object-descriptor-test/component-object-descriptor-test-2.reel/component-object-descriptor-test-2.html @@ -2,9 +2,9 @@ - ComponentBlueprintTest2 + ComponentObjectDescriptorTest2 - + - \ No newline at end of file + diff --git a/test/spec/meta/component-blueprint-test/component-blueprint-test-2.reel/component-blueprint-test-2.js b/test/spec/meta/component-object-descriptor-test/component-object-descriptor-test-2.reel/component-object-descriptor-test-2.js similarity index 51% rename from test/spec/meta/component-blueprint-test/component-blueprint-test-2.reel/component-blueprint-test-2.js rename to test/spec/meta/component-object-descriptor-test/component-object-descriptor-test-2.reel/component-object-descriptor-test-2.js index f8fbae0857..0cb472407e 100644 --- a/test/spec/meta/component-blueprint-test/component-blueprint-test-2.reel/component-blueprint-test-2.js +++ b/test/spec/meta/component-object-descriptor-test/component-object-descriptor-test-2.reel/component-object-descriptor-test-2.js @@ -3,17 +3,17 @@ var Montage = require("montage").Montage, Component = require("montage/ui/component").Component; -var ComponentBlueprintTest2 = exports.ComponentBlueprintTest2 = Component.specialize( { +var ComponentObjectDescriptorTest2 = exports.ComponentObjectDescriptorTest2 = Component.specialize( { templateDidLoad: { value: function () { - //console.log("Component Blueprint Test 2 template did load"); + //console.log("Component ObjectDescriptor Test 2 template did load"); } }, deserializedFromTemplate: { value: function () { - //console.log("Component Blueprint Test 2 deserialized from template"); + //console.log("Component ObjectDescriptor Test 2 deserialized from template"); } } diff --git a/test/spec/meta/component-blueprint-test/component-blueprint-test-2.reel/component-blueprint-test-2.meta b/test/spec/meta/component-object-descriptor-test/component-object-descriptor-test-2.reel/component-object-descriptor-test-2.meta similarity index 80% rename from test/spec/meta/component-blueprint-test/component-blueprint-test-2.reel/component-blueprint-test-2.meta rename to test/spec/meta/component-object-descriptor-test/component-object-descriptor-test-2.reel/component-object-descriptor-test-2.meta index dd0f024a81..7b021f8b73 100644 --- a/test/spec/meta/component-blueprint-test/component-blueprint-test-2.reel/component-blueprint-test-2.meta +++ b/test/spec/meta/component-object-descriptor-test/component-object-descriptor-test-2.reel/component-object-descriptor-test-2.meta @@ -1,8 +1,8 @@ { "component2_bindableProperty1": { - "prototype": "montage/core/meta/property-blueprint", + "prototype": "montage/core/meta/property-descriptor", "values": { - "blueprint": { + "objectDescriptor": { "@": "root" }, "name": "bindableProperty1", @@ -15,9 +15,9 @@ } }, "component2_bindableProperty2": { - "prototype": "montage/core/meta/property-blueprint", + "prototype": "montage/core/meta/property-descriptor", "values": { - "blueprint": { + "objectDescriptor": { "@": "root" }, "name": "bindableProperty2", @@ -30,9 +30,9 @@ } }, "component2_bindableProperty3": { - "prototype": "montage/core/meta/property-blueprint", + "prototype": "montage/core/meta/property-descriptor", "values": { - "blueprint": { + "objectDescriptor": { "@": "root" }, "name": "bindableProperty3", @@ -45,9 +45,9 @@ } }, "component2_bindableProperty4": { - "prototype": "montage/core/meta/property-blueprint", + "prototype": "montage/core/meta/property-descriptor", "values": { - "blueprint": { + "objectDescriptor": { "@": "root" }, "name": "bindableProperty4", @@ -60,9 +60,9 @@ } }, "component2_bindableProperty5": { - "prototype": "montage/core/meta/property-blueprint", + "prototype": "montage/core/meta/property-descriptor", "values": { - "blueprint": { + "objectDescriptor": { "@": "root" }, "name": "bindableProperty5", @@ -75,9 +75,9 @@ } }, "component2_requiredBindableProperty1": { - "prototype": "montage/core/meta/property-blueprint", + "prototype": "montage/core/meta/property-descriptor", "values": { - "blueprint": { + "objectDescriptor": { "@": "root" }, "name": "requiredBindableProperty1", @@ -90,9 +90,9 @@ } }, "component2_requiredBindableProperty2": { - "prototype": "montage/core/meta/property-blueprint", + "prototype": "montage/core/meta/property-descriptor", "values": { - "blueprint": { + "objectDescriptor": { "@": "root" }, "name": "requiredBindableProperty2", @@ -105,9 +105,9 @@ } }, "component2_requiredBindableProperty3": { - "prototype": "montage/core/meta/property-blueprint", + "prototype": "montage/core/meta/property-descriptor", "values": { - "blueprint": { + "objectDescriptor": { "@": "root" }, "name": "requiredBindableProperty3", @@ -120,7 +120,7 @@ } }, "root": { - "prototype": "montage/core/meta/module-blueprint", + "prototype": "montage/core/meta/module-object-descriptor", "values": { "name": "component2", "customPrototype": false, @@ -164,10 +164,10 @@ ] }, "propertyValidationRules": {}, - "blueprintModule": {}, - "exportName": "ComponentBlueprintTest2", + "objectDescriptorModule": {}, + "exportName": "ComponentObjectDescriptorTest2", "module": { - "%": "spec/test/meta/component-blueprint-test/component-blueprint-test-2.reel" + "%": "spec/test/meta/component-object-descriptor-test/component-object-descriptor-test-2.reel" } } } diff --git a/test/spec/meta/component-blueprint-test/component-blueprint-test-3.reel/component-blueprint-test-3.html b/test/spec/meta/component-object-descriptor-test/component-object-descriptor-test-3.reel/component-object-descriptor-test-3.html similarity index 54% rename from test/spec/meta/component-blueprint-test/component-blueprint-test-3.reel/component-blueprint-test-3.html rename to test/spec/meta/component-object-descriptor-test/component-object-descriptor-test-3.reel/component-object-descriptor-test-3.html index 8d4a62f029..c96e176132 100644 --- a/test/spec/meta/component-blueprint-test/component-blueprint-test-3.reel/component-blueprint-test-3.html +++ b/test/spec/meta/component-object-descriptor-test/component-object-descriptor-test-3.reel/component-object-descriptor-test-3.html @@ -2,9 +2,9 @@ - ComponentBlueprintTest3 + ComponentObjectDescriptorTest3 - + - \ No newline at end of file + diff --git a/test/spec/meta/component-blueprint-test/component-blueprint-test-3.reel/component-blueprint-test-3.js b/test/spec/meta/component-object-descriptor-test/component-object-descriptor-test-3.reel/component-object-descriptor-test-3.js similarity index 72% rename from test/spec/meta/component-blueprint-test/component-blueprint-test-3.reel/component-blueprint-test-3.js rename to test/spec/meta/component-object-descriptor-test/component-object-descriptor-test-3.reel/component-object-descriptor-test-3.js index c52af8aac4..4b666c6267 100644 --- a/test/spec/meta/component-blueprint-test/component-blueprint-test-3.reel/component-blueprint-test-3.js +++ b/test/spec/meta/component-object-descriptor-test/component-object-descriptor-test-3.reel/component-object-descriptor-test-3.js @@ -3,17 +3,17 @@ var Montage = require("montage").Montage, Component = require("montage/ui/component").Component; -var ComponentBlueprintTest3 = exports.ComponentBlueprintTest3 = Component.specialize( { +var ComponentObjectDescriptorTest3 = exports.ComponentObjectDescriptorTest3 = Component.specialize( { templateDidLoad: { value: function () { - //console.log("Component Blueprint Test 3 template did load"); + //console.log("Component ObjectDescriptor Test 3 template did load"); } }, deserializedFromTemplate: { value: function () { - //console.log("Component Blueprint Test 3 deserialized from template"); + //console.log("Component ObjectDescriptor Test 3 deserialized from template"); } }, diff --git a/test/spec/meta/component-blueprint-test/component-blueprint-test.html b/test/spec/meta/component-object-descriptor-test/component-object-descriptor-test.html similarity index 76% rename from test/spec/meta/component-blueprint-test/component-blueprint-test.html rename to test/spec/meta/component-object-descriptor-test/component-object-descriptor-test.html index 8daab61f6d..b285931803 100644 --- a/test/spec/meta/component-blueprint-test/component-blueprint-test.html +++ b/test/spec/meta/component-object-descriptor-test/component-object-descriptor-test.html @@ -7,7 +7,7 @@