Return-Path: X-Original-To: apmail-flex-commits-archive@www.apache.org Delivered-To: apmail-flex-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 53A28101DE for ; Mon, 21 Oct 2013 05:06:59 +0000 (UTC) Received: (qmail 49004 invoked by uid 500); 21 Oct 2013 05:06:58 -0000 Delivered-To: apmail-flex-commits-archive@flex.apache.org Received: (qmail 48804 invoked by uid 500); 21 Oct 2013 05:06:55 -0000 Mailing-List: contact commits-help@flex.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@flex.apache.org Delivered-To: mailing list commits@flex.apache.org Received: (qmail 48776 invoked by uid 99); 21 Oct 2013 05:06:46 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 21 Oct 2013 05:06:46 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id C1D2F4E5A6; Mon, 21 Oct 2013 05:06:45 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: aharui@apache.org To: commits@flex.apache.org Date: Mon, 21 Oct 2013 05:06:47 -0000 Message-Id: <83632e2a686b4126b4990d5bdace9706@git.apache.org> In-Reply-To: <7ab85e9e746947679ef3dfc46e0e78b6@git.apache.org> References: <7ab85e9e746947679ef3dfc46e0e78b6@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [3/3] git commit: [flex-asjs] [refs/heads/develop] - JS-side custom CSS JS-side custom CSS Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/801862b9 Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/801862b9 Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/801862b9 Branch: refs/heads/develop Commit: 801862b9c696770b58c0bc182379445908e84a70 Parents: 824b964 Author: Alex Harui Authored: Sun Oct 20 20:48:59 2013 -0700 Committer: Alex Harui Committed: Sun Oct 20 20:48:59 2013 -0700 ---------------------------------------------------------------------- frameworks/as/defaults.css | 6 +- .../org/apache/flex/core/SimpleCSSValuesImpl.as | 2 +- .../src/org/apache/flex/core/Application.js | 4 + .../org/apache/flex/core/SimpleCSSValuesImpl.js | 173 +++++++++++++++++++ .../FlexJS/src/org/apache/flex/core/ViewBase.js | 7 +- 5 files changed, 185 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/801862b9/frameworks/as/defaults.css ---------------------------------------------------------------------- diff --git a/frameworks/as/defaults.css b/frameworks/as/defaults.css index 23a9bf5..74f0a38 100644 --- a/frameworks/as/defaults.css +++ b/frameworks/as/defaults.css @@ -50,15 +50,15 @@ Button:active padding: 4px; } -@media -flex-flash -{ - /* Global style declaration */ global { IStatesImpl: ClassReference("org.apache.flex.core.SimpleStatesImpl"); } +@media -flex-flash +{ + Alert { IBeadModel: ClassReference("org.apache.flex.html.staticControls.beads.models.AlertModel"); http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/801862b9/frameworks/as/src/org/apache/flex/core/SimpleCSSValuesImpl.as ---------------------------------------------------------------------- diff --git a/frameworks/as/src/org/apache/flex/core/SimpleCSSValuesImpl.as b/frameworks/as/src/org/apache/flex/core/SimpleCSSValuesImpl.as index 0993d55..fdaec8f 100644 --- a/frameworks/as/src/org/apache/flex/core/SimpleCSSValuesImpl.as +++ b/frameworks/as/src/org/apache/flex/core/SimpleCSSValuesImpl.as @@ -175,7 +175,7 @@ package org.apache.flex.core { valueName = valueName.substr(0, c) + valueName.charAt(c + 1).toUpperCase() + - valueName..substr(c + 2); + valueName.substr(c + 2); c = valueName.indexOf("-"); } http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/801862b9/frameworks/js/FlexJS/src/org/apache/flex/core/Application.js ---------------------------------------------------------------------- diff --git a/frameworks/js/FlexJS/src/org/apache/flex/core/Application.js b/frameworks/js/FlexJS/src/org/apache/flex/core/Application.js index 7948590..fe5a029 100644 --- a/frameworks/js/FlexJS/src/org/apache/flex/core/Application.js +++ b/frameworks/js/FlexJS/src/org/apache/flex/core/Application.js @@ -15,6 +15,7 @@ goog.provide('org.apache.flex.core.Application'); goog.require('org.apache.flex.core.HTMLElementWrapper'); +goog.require('org.apache.flex.core.ValuesManager'); goog.require('org.apache.flex.utils.MXMLDataInterpreter'); @@ -68,6 +69,9 @@ org.apache.flex.core.Application.prototype.start = function() { org.apache.flex.utils.MXMLDataInterpreter.generateMXMLProperties(this, this.get_MXMLProperties()); + org.apache.flex.core.ValuesManager.valuesImpl = this.valuesImpl; + this.valuesImpl.init(this); + this.dispatchEvent('initialize'); this.initialView.applicationModel = this.model; http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/801862b9/frameworks/js/FlexJS/src/org/apache/flex/core/SimpleCSSValuesImpl.js ---------------------------------------------------------------------- diff --git a/frameworks/js/FlexJS/src/org/apache/flex/core/SimpleCSSValuesImpl.js b/frameworks/js/FlexJS/src/org/apache/flex/core/SimpleCSSValuesImpl.js index a54a50f..ed5b2a4 100644 --- a/frameworks/js/FlexJS/src/org/apache/flex/core/SimpleCSSValuesImpl.js +++ b/frameworks/js/FlexJS/src/org/apache/flex/core/SimpleCSSValuesImpl.js @@ -21,3 +21,176 @@ goog.provide('org.apache.flex.core.SimpleCSSValuesImpl'); */ org.apache.flex.core.SimpleCSSValuesImpl = function() { }; + +/** + * @this {org.apache.flex.core.SimpleCSSValuesImpl} + * @param {Object} thisObject The object to fetch a value for. + * @param {String} valueName The name of the value to fetch. + * @param {String} state The psuedo-state if any for. + * @param {Object} attrs The object with name value pairs that + * might make a difference. + * @return {Object} The value. + */ +org.apache.flex.core.SimpleCSSValuesImpl.prototype.getValue = + function(thisObject, valueName, state, attrs) { + var c = valueName.indexOf('-'); + while (c != -1) + { + valueName = valueName.substr(0, c) + + valueName.charAt(c + 1).toUpperCase() + + valueName.substr(c + 2); + c = valueName.indexOf('-'); + } + + var values = this.values; + var value; + var o; + var className; + var selectorName; + + if (thisObject.hasOwnProperty('className')) + { + className = thisObject.className; + if (state) + { + selectorName = className + ':' + state; + o = values['.' + selectorName]; + if (o) + { + value = o[valueName]; + if (value !== undefined) + return value; + } + } + + o = values['.' + className]; + if (o) + { + value = o[valueName]; + if (value !== undefined) + return value; + } + } + + className = this.getQualifiedClassName(thisObject); + while (className != 'Object') + { + if (state) + { + selectorName = className + ':' + state; + o = values[selectorName]; + if (o) + { + value = o[valueName]; + if (value !== undefined) + return value; + } + } + + o = values[className]; + if (o) + { + value = o[valueName]; + if (value !== undefined) + return value; + } + thisObject = thisObject.__proto__; + if (thisObject.__proto__ == null) + break; + className = this.getQualifiedClassName(thisObject); + } + o = values['global']; + if (o != undefined) + { + value = o[valueName]; + if (value !== undefined) + return value; + } + o = values['*']; + return o[valueName]; +}; + +/** + * @this {org.apache.flex.core.SimpleCSSValuesImpl} + * @param {Object} thisObject The object to get a name for. + * @return {string} The CSS selector name or null. + */ +org.apache.flex.core.SimpleCSSValuesImpl.prototype.getQualifiedClassName = + function(thisObject) { + // relies on the values parser to populate the package tree + var proto = thisObject.__proto__; + if (proto.hasOwnProperty('__css__package_parent')) + { + var s = proto.__css__name; + while (true) + { + proto = proto.__css__package_parent; + if (proto == window || proto == undefined) + return s; + s = proto.__css__name + '.' + s; + } + } + return null; +}; + +/** + * @this {org.apache.flex.core.SimpleCSSValuesImpl} + * @param {Object} mainclass The main class for the application. + */ +org.apache.flex.core.SimpleCSSValuesImpl.prototype.init = function(mainclass) { + var cssData = mainclass.cssData; + var values = this.values; + if (values == null) + values = {}; + + var n = cssData.length; + var i = 0; + while (i < n) + { + var numMQ = cssData[i++]; + if (numMQ > 0) + { + // skip MediaQuery tests for now + i += numMQ; + } + var numSel = cssData[i++]; + var props = {}; + for (var j = 0; j < numSel; j++) + { + var selName = cssData[i++]; + if (selName.indexOf('.') != 0 && + selName != '*' && selName != 'global') + { + // should be a type selector + var parts = selName.split('.'); + var numParts = parts.length; + var part = window; + for (var k = 0; k < numParts; k++) + { + var partName = parts[k]; + var subpart = part[partName]; + if (subpart == undefined) + break; + // assume last part is ctor func + if (k == numParts - 1) + subpart = subpart.prototype; + subpart.__css__package_parent = part; + subpart.__css__name = partName; + part = subpart; + } + } + if (values[selName]) + props = values[selName]; + values[selName] = props; + } + var numProps = cssData[i++]; + for (j = 0; j < numProps; j++) + { + var propName = cssData[i++]; + var propValue = cssData[i++]; + props[propName] = propValue; + } + } + this.values = values; +}; + http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/801862b9/frameworks/js/FlexJS/src/org/apache/flex/core/ViewBase.js ---------------------------------------------------------------------- diff --git a/frameworks/js/FlexJS/src/org/apache/flex/core/ViewBase.js b/frameworks/js/FlexJS/src/org/apache/flex/core/ViewBase.js index c51c2a9..e65ed8e 100644 --- a/frameworks/js/FlexJS/src/org/apache/flex/core/ViewBase.js +++ b/frameworks/js/FlexJS/src/org/apache/flex/core/ViewBase.js @@ -14,9 +14,8 @@ goog.provide('org.apache.flex.core.ViewBase'); -// TODO: (aharui) bring this in via CSS -goog.require('org.apache.flex.core.SimpleStatesImpl'); goog.require('org.apache.flex.core.UIBase'); +goog.require('org.apache.flex.core.ValuesManager'); goog.require('org.apache.flex.events.ValueChangeEvent'); goog.require('org.apache.flex.utils.MXMLDataInterpreter'); @@ -113,8 +112,10 @@ org.apache.flex.core.ViewBase.prototype.get_states = function() { org.apache.flex.core.ViewBase.prototype.set_states = function(value) { this.states_ = value; + var impl = org.apache.flex.core.ValuesManager.valuesImpl. + getValue(this, "iStatesImpl"); // TODO: (aharui) check if bead already exists - this.addBead(new org.apache.flex.core.SimpleStatesImpl()); + this.addBead(new impl()); }; /**